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

_common_loader_app_sources = [
  "loader_app.cc",
  "loader_app_switches.cc",
  "loader_app_switches.h",
  "system_get_extension_shim.cc",
  "system_get_extension_shim.h",
]

group("common_loader_app_dependencies") {
  public_deps = [
    ":app_key",
    ":installation_manager",
    ":memory_tracker_thread",
    ":slot_management",
    "//starboard",
    "//starboard/elf_loader:constants",
    "//starboard/elf_loader:evergreen_info",
    "//starboard/elf_loader:sabi_string",
  ]

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

if (sb_is_evergreen_compatible && sb_evergreen_compatible_package) {
  copy("copy_loader_app_content") {
    install_content = true
    if (target_cpu == "arm" && arm_float_abi == "softfp") {
      sources = [ "$root_out_dir/../evergreen-$target_cpu-${arm_float_abi}_$build_type/content" ]
    } else if (target_cpu == "arm64") {
      sources = [ "$root_out_dir/../evergreen-$target_cpu_$build_type/content" ]
    } else {
      sources = []
    }
    outputs = [ "$sb_static_contents_output_data_dir/app/cobalt/content" ]
  }
  copy("copy_loader_app_lib") {
    install_content = true
    if (target_cpu == "arm" && arm_float_abi == "softfp") {
      sources = [ "$root_out_dir/../evergreen-$target_cpu-${arm_float_abi}_$build_type/libcobalt.so" ]
    } else if (target_cpu == "arm64") {
      sources =
          [ "$root_out_dir/../evergreen-$target_cpu_$build_type/libcobalt.so" ]
    } else {
      sources = []
    }
    outputs =
        [ "$sb_static_contents_output_data_dir/app/cobalt/lib/libcobalt.so" ]
  }
  copy("copy_loader_app_manifest") {
    install_content = true
    if (target_cpu == "arm" && arm_float_abi == "softfp") {
      sources = [ "$root_out_dir/../evergreen-$target_cpu-${arm_float_abi}_$build_type/manifest.json" ]
    } else if (target_cpu == "arm64") {
      sources =
          [ "$root_out_dir/../evergreen-$target_cpu_$build_type/manifest.json" ]
    } else {
      sources = []
    }
    outputs = [ "$sb_static_contents_output_data_dir/app/cobalt/manifest.json" ]
  }

  # This trick to name the Crashpad handler executable as a shared library, so
  # that the Package Manager extracts it to the file system on install, is
  # borrowed from Chrome on Android.
  copy("copy_crashpad_handler_named_as_so") {
    install_content = true
    sources = [ "$root_out_dir/native_target/crashpad_handler" ]
    outputs = [ "$root_out_dir/libcrashpad_handler.so" ]
    deps = [ "//third_party/crashpad/handler:crashpad_handler(//starboard/android/arm/toolchain:native_target)" ]
  }
}

target(final_executable_type, "loader_app") {
  if (target_cpu == "x86" || target_cpu == "x64" || target_cpu == "arm" ||
      target_cpu == "arm64") {
    data_deps = [ "//third_party/icu:icudata" ]
    if (cobalt_font_package == "empty") {
      data_deps += [ "//cobalt/content/fonts:copy_font_data" ]
    } else {
      data_deps += [
        "//cobalt/content/fonts:copy_fonts",
        "//cobalt/content/fonts:fonts_xml",
      ]
    }
    sources = _common_loader_app_sources
    deps = [
      ":common_loader_app_dependencies",
      "//cobalt/content/fonts:copy_font_data",
      "//starboard/elf_loader",
    ]
    if (sb_is_evergreen_compatible && sb_evergreen_compatible_package) {
      data_deps += [
        ":copy_crashpad_handler_named_as_so",
        ":copy_loader_app_content",
        ":copy_loader_app_lib",
        ":copy_loader_app_manifest",
      ]
      deps += [
        ":copy_crashpad_handler_named_as_so",
        ":copy_loader_app_content",
        ":copy_loader_app_lib",
        ":copy_loader_app_manifest",
      ]
    }
  }
}

if (sb_is_evergreen_compatible) {
  # TODO: b/261635039 enable this target on Android
  target(final_executable_type, "loader_app_sys") {
    if ((target_cpu == "x86" || target_cpu == "x64" || target_cpu == "arm" ||
         target_cpu == "arm64") && target_os != "android") {
      sources = _common_loader_app_sources

      starboard_syms_path =
          rebase_path("//starboard/starboard.syms", root_build_dir)
      ldflags = [
        "-Wl,--dynamic-list=$starboard_syms_path",
        "-ldl",
      ]
      deps = [
        ":common_loader_app_dependencies",
        "//cobalt/content/fonts:copy_font_data",
        "//starboard/elf_loader:elf_loader_sys",
      ]
    }
  }
}

static_library("app_key_files") {
  sources = [
    "app_key_files.cc",
    "app_key_files.h",
  ]
  deps = [ "//starboard" ]
}

target(gtest_target_type, "app_key_files_test") {
  testonly = true
  sources = [
    "//starboard/common/test_main.cc",
    "app_key_files_test.cc",
  ]
  deps = [
    ":app_key_files",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

static_library("app_key") {
  sources = [
    "app_key.cc",
    "app_key.h",
    "app_key_internal.cc",
    "app_key_internal.h",
  ]
  deps = [
    "//starboard",
    "//third_party/modp_b64",
  ]
}

target(gtest_target_type, "app_key_test") {
  testonly = true
  sources = [
    "//starboard/common/test_main.cc",
    "app_key_test.cc",
  ]
  deps = [
    ":app_key",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

static_library("drain_file") {
  sources = [
    "drain_file.cc",
    "drain_file.h",
  ]
  deps = [ "//starboard/common" ]
}

target(gtest_target_type, "drain_file_test") {
  testonly = true
  sources = [
    "//starboard/common/test_main.cc",
    "drain_file_helper.cc",
    "drain_file_helper.h",
    "drain_file_test.cc",
  ]
  deps = [
    ":drain_file",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

static_library("installation_store_proto") {
  sources = [
    "installation_store.pb.cc",
    "installation_store.pb.h",
  ]
  public_deps = [ "//third_party/protobuf:protobuf_lite" ]
}

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

  include_dirs = [
    # Get protobuf headers from the chromium tree.
    "//third_party/protobuf/src",
  ]

  deps = [
    ":installation_store_proto",
    ":pending_restart",
    "//starboard",
  ]
}

target(gtest_target_type, "installation_manager_test") {
  testonly = true
  sources = [
    "//starboard/common/test_main.cc",
    "installation_manager_test.cc",
    "pending_restart_test.cc",
  ]
  deps = [
    ":installation_manager",
    ":installation_store_proto",
    ":pending_restart",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

static_library("slot_management") {
  sources = [
    "slot_management.cc",
    "slot_management.h",
  ]
  deps = [
    ":app_key_files",
    ":drain_file",
    ":installation_manager",
    "//starboard",
    "//starboard/elf_loader",
    "//starboard/elf_loader:constants",
    "//starboard/elf_loader:sabi_string",
  ]

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

target(gtest_target_type, "slot_management_test") {
  testonly = true
  sources = [
    "//starboard/common/test_main.cc",
    "slot_management_test.cc",
  ]
  deps = [
    ":app_key_files",
    ":drain_file",
    ":installation_manager",
    ":installation_store_proto",
    ":slot_management",
    "//starboard/elf_loader:sabi_string",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

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

  public_deps = [ "//starboard:starboard_headers_only" ]
}

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

  deps = [
    "//starboard:starboard_headers_only",
    "//starboard/common",
  ]
}
