# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

static_library("script") {
  sources = [
    "array_buffer.h",
    "array_buffer_view.h",
    "call_frame.h",
    "callback_function.h",
    "callback_interface_traits.h",
    "data_view.h",
    "environment_settings.cc",
    "environment_settings.h",
    "error_report.h",
    "exception_message.cc",
    "exception_message.h",
    "execution_state.cc",
    "execution_state.h",
    "fake_global_environment.h",
    "fake_script_runner.h",
    "global_environment.h",
    "javascript_engine.h",
    "logging_exception_state.h",
    "promise.h",
    "property_enumerator.h",
    "scope.h",
    "script_debugger.h",
    "script_exception.h",
    "script_runner.cc",
    "script_runner.h",
    "script_value.h",
    "script_value_factory.h",
    "script_value_factory_instantiations.h",
    "sequence.h",
    "source_code.h",
    "source_provider.h",
    "stack_frame.cc",
    "stack_frame.h",
    "tracer.h",
    "typed_arrays.h",
    "union_type.h",
    "union_type_internal.h",
    "value_handle.h",
    "wrappable.h",
  ]

  deps = [
    "//cobalt/base",
    "//cobalt/loader:origin",
    "//starboard:starboard_headers_only",
    "//third_party/v8",
    "//third_party/v8:v8_libplatform",
    "//url",
  ]
}

static_library("standalone_javascript_runner") {
  sources = [
    "standalone_javascript_runner.cc",
    "standalone_javascript_runner.h",
  ]

  deps = [
    ":script",
    "//base",
    "//cobalt/base",
    "//third_party/v8",
    "//third_party/v8:v8_libplatform",
  ]
}

# Target that represents the JavaScript engine implementation and an
# interface to create a new engine instance.
source_set("engine") {
  sources = [ "javascript_engine.h" ]

  deps = [
    "v8c:engine",
    "//cobalt/base",
  ]
}

group("engine_shell") {
  deps = [ "v8c" ]
}
