blob: 4c9271a3b346dd10d386f2798fc4415460e737b0 [file] [log] [blame]
# 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.
import("//starboard/build/config/os_definitions.gni")
import("//third_party/protobuf/proto_library.gni")
_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",
]
if (sb_is_evergreen_compatible && current_toolchain == starboard_toolchain) {
group("common_loader_app_dependencies") {
public_deps = [
":app_key",
":installation_manager",
":memory_tracker_thread",
":reset_evergreen_update",
":slot_management",
"//starboard:starboard_group",
"//starboard/elf_loader:constants",
"//starboard/elf_loader:evergreen_info",
"//starboard/elf_loader:sabi_string",
"//third_party/crashpad/wrapper",
]
}
}
if (sb_is_evergreen_compatible && sb_evergreen_compatible_package &&
current_toolchain == starboard_toolchain) {
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_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)" ]
}
}
if (sb_is_evergreen_compatible && current_toolchain == starboard_toolchain) {
target(starboard_level_final_executable_type, "loader_app") {
build_loader = false
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:starboard_with_main",
"//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_manifest",
"//cobalt/browser:copy_loader_app_libcobalt",
]
deps += [
":copy_crashpad_handler_named_as_so",
":copy_loader_app_content",
":copy_loader_app_manifest",
"//cobalt/browser:copy_loader_app_libcobalt",
]
}
}
}
} else {
not_needed([ "_common_loader_app_sources" ])
}
if (sb_is_evergreen_compatible && current_toolchain == starboard_toolchain) {
# TODO: b/261635039 enable this target on Android
target(starboard_level_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:starboard_group" ]
}
if (sb_is_evergreen) {
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:starboard_group",
"//third_party/modp_b64",
]
}
if (sb_is_evergreen) {
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" ]
}
static_library("drain_file_helper") {
testonly = true
sources = [
"drain_file_helper.cc",
"drain_file_helper.h",
]
deps = [
":drain_file",
"//starboard/common",
"//testing/gtest",
]
}
if (sb_is_evergreen) {
target(gtest_target_type, "drain_file_test") {
testonly = true
sources = [
"//starboard/common/test_main.cc",
"drain_file_test.cc",
]
deps = [
":drain_file",
":drain_file_helper",
"//testing/gmock",
"//testing/gtest",
]
}
}
proto_library("installation_store_proto") {
sources = [ "installation_store.proto" ]
generate_python = false
}
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:starboard_group",
]
}
if (sb_is_evergreen_compatible && current_toolchain == starboard_toolchain) {
target(starboard_level_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",
"//starboard:starboard_with_main",
"//testing/gmock",
"//testing/gtest",
]
}
}
## NOTE: This target is shared between Evergreen and EG platform code
## It needs to be built with both Starboard and Cobalt toolchains
static_library("slot_management") {
sources = [
"slot_management.cc",
"slot_management.h",
]
deps = [
":app_key_files",
":drain_file",
":installation_manager",
"//starboard:starboard_group",
"//starboard/elf_loader",
"//starboard/elf_loader:constants",
"//starboard/elf_loader:sabi_string",
]
if (sb_is_evergreen_compatible && current_toolchain == starboard_toolchain) {
deps += [ "//third_party/crashpad/wrapper" ]
} else {
deps += [ "//third_party/crashpad/wrapper:wrapper_stub" ]
}
}
if (sb_is_evergreen) {
target(starboard_level_gtest_target_type, "slot_management_test") {
testonly = true
build_loader = false
sources = [
"//starboard/common/test_main.cc",
"slot_management_test.cc",
]
deps = [
":app_key_files",
":drain_file",
":installation_manager",
":installation_store_proto",
":slot_management",
"//starboard:starboard_with_main",
"//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" ]
}
if (sb_is_evergreen_compatible && current_toolchain == starboard_toolchain) {
static_library("memory_tracker_thread") {
sources = [
"memory_tracker_thread.cc",
"memory_tracker_thread.h",
]
deps = [
"//starboard:starboard_headers_only",
"//starboard/common",
]
}
static_library("reset_evergreen_update") {
sources = [
"reset_evergreen_update.cc",
"reset_evergreen_update.h",
]
deps = [ "//starboard:starboard_group" ]
}
target(starboard_level_gtest_target_type, "reset_evergreen_update_test") {
testonly = true
sources = [
"//starboard/common/test_main.cc",
"reset_evergreen_update_test.cc",
]
deps = [
":reset_evergreen_update",
"//starboard:starboard_with_main",
"//testing/gmock",
"//testing/gtest",
]
}
}