# 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.

group("gn_all") {
  testonly = true

  deps = [
    ":default",
    "//starboard/client_porting/cwrappers:cwrappers_test",
    "//starboard/client_porting/eztime",
    "//starboard/client_porting/eztime:eztime_test",
    "//starboard/client_porting/icu_init",
    "//starboard/client_porting/poem:poem_unittests",
    "//starboard/examples/window:starboard_window_example",
    "//starboard/loader_app:app_key_files_test",
    "//starboard/nplb",
    "//starboard/nplb/nplb_evergreen_compat_tests",
    "//starboard/tools/testing:copy_sharding_configuration",
  ]

  if (gl_type != "none") {
    deps += [ "//starboard/examples/glclear:starboard_glclear_example" ]
  }

  if (has_platform_targets) {
    deps += [ "//$starboard_path/platform_targets" ]
  }

  if (platform_tests_path == "") {
    deps += [ ":starboard_platform_tests" ]
  } else {
    deps += [ platform_tests_path ]
  }

  if (sb_filter_based_player) {
    deps += [
      "//starboard/shared/starboard/player/filter/testing:player_filter_tests",
      "//starboard/shared/starboard/player/filter/tools:audio_dmp_player",
    ]
  }

  if (sb_enable_benchmark) {
    deps += [ "//starboard/benchmark" ]
  }

  if (!sb_is_evergreen) {
    deps += [ "//third_party/lz4_lib:lz4" ]

    if (sb_is_evergreen_compatible) {
      deps += [
        "//third_party/crashpad/client",
        "//third_party/crashpad/handler",
      ]
      data_deps = [ "//starboard/loader_app" ]
    }
  }
}

group("default") {
  deps = [
    ":starboard",
    "//starboard/tools:build_app_launcher_zip",
  ]
}

group("starboard") {
  public_deps = [
    ":starboard_headers_only",
    "//starboard/client_porting/cwrappers",
    "//starboard/client_porting/eztime",
  ]

  if (sb_is_evergreen) {
    public_deps += [
      "//starboard/elf_loader:sabi_string",
      "//third_party/llvm-project/compiler-rt:compiler_rt",
      "//third_party/llvm-project/libcxx:cxx",
      "//third_party/llvm-project/libcxxabi:cxxabi",
      "//third_party/llvm-project/libunwind:unwind_evergreen",
      "//third_party/musl:c",
    ]
  } else {
    public_deps += [
      "//$starboard_path:starboard_platform",
      "//starboard/common",
    ]

    if (sb_is_evergreen_compatible) {
      public_deps += [ "//third_party/crashpad/wrapper" ]
    } else {
      public_deps += [ "//third_party/crashpad/wrapper:wrapper_stub" ]
    }

    if (final_executable_type == "shared_library" &&
        current_toolchain != default_toolchain) {
      set_defaults("executable") {
        sources = [ "//starboard/shared/starboard/shared_main_adapter.cc" ]
      }
    }
  }
}

source_set("starboard_headers_only") {
  # We include starboard/common/log.h in starboard_headers, but some common
  # files include starboard headers.
  check_includes = false

  sources = [
    "atomic.h",
    "audio_sink.h",
    "byte_swap.h",
    "character.h",
    "condition_variable.h",
    "configuration.h",
    "configuration_constants.h",
    "cpu_features.h",
    "decode_target.h",
    "directory.h",
    "double.h",
    "drm.h",
    "egl.h",
    "event.h",
    "export.h",
    "file.h",
    "gles.h",
    "input.h",
    "key.h",
    "log.h",
    "media.h",
    "memory.h",
    "microphone.h",
    "mutex.h",
    "once.h",
    "player.h",
    "queue.h",
    "socket.h",
    "socket_waiter.h",
    "spin_lock.h",
    "storage.h",
    "string.h",
    "system.h",
    "thread.h",
    "time.h",
    "time_zone.h",
    "types.h",
    "user.h",
    "window.h",
  ]

  if (is_internal_build) {
    public_deps = [ "//starboard/private:private_starboard_headers" ]
  }
}

if (platform_tests_path == "") {
  # If 'starboard_platform_tests' is not defined by the platform, then an
  # empty 'starboard_platform_tests' target is defined.
  target(gtest_target_type, "starboard_platform_tests") {
    testonly = true

    sources = [ "//starboard/common/test_main.cc" ]

    public_deps = [
      ":starboard",
      "//testing/gmock",
    ]
  }
}
