| # 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") |
| |
| _elf_loader_sources = [ |
| "dynamic_section.cc", |
| "dynamic_section.h", |
| "elf_hash_table.cc", |
| "elf_hash_table.h", |
| "elf_header.cc", |
| "elf_header.h", |
| "elf_loader.cc", |
| "elf_loader.h", |
| "exported_symbols.cc", |
| "file.h", |
| "file_impl.cc", |
| "file_impl.h", |
| "gnu_hash_table.cc", |
| "gnu_hash_table.h", |
| "lz4_file_impl.cc", |
| "lz4_file_impl.h", |
| "program_table.cc", |
| "program_table.h", |
| "relocations.cc", |
| "relocations.h", |
| ] |
| |
| config("elf_loader_config") { |
| include_dirs = [ |
| "src/include", |
| "src/src", |
| ] |
| } |
| |
| static_library("elf_loader") { |
| sources = _elf_loader_sources + [ |
| "elf_loader_impl.cc", |
| "elf_loader_impl.h", |
| ] |
| |
| configs += [ ":elf_loader_config" ] |
| |
| deps = [ |
| ":constants", |
| ":evergreen_config", |
| ":evergreen_info", |
| "//starboard:starboard_group", |
| "//starboard/common", |
| "//third_party/lz4_lib:lz4", |
| ] |
| |
| if (current_toolchain == starboard_toolchain) { |
| deps += [ "//starboard/shared/modular:starboard_layer_posix_abi_wrappers" ] |
| } |
| } |
| |
| if (sb_is_evergreen_compatible && current_toolchain == starboard_toolchain) { |
| static_library("elf_loader_sys") { |
| # System loader based on dlopen/dlsym. |
| # Should be used only for debugging/troubleshooting. |
| sources = _elf_loader_sources + [ |
| "elf_loader_impl.h", |
| "elf_loader_sys_impl.cc", |
| "elf_loader_sys_impl.h", |
| ] |
| |
| configs += [ ":elf_loader_config" ] |
| |
| deps = [ |
| ":constants", |
| ":evergreen_config", |
| ":evergreen_info", |
| "//starboard:starboard_group", |
| "//starboard/common", |
| "//starboard/shared/modular:starboard_layer_posix_abi_wrappers", |
| "//third_party/crashpad/crashpad/wrapper", |
| ] |
| } |
| } |
| |
| # TODO: b/309493306 - Stop building evergreen targets for all non-evergreen platforms. |
| if (current_toolchain == starboard_toolchain && !is_host_win) { |
| target(starboard_level_final_executable_type, "elf_loader_sandbox") { |
| 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 = [ "elf_loader_sandbox.cc" ] |
| configs += [ ":elf_loader_config" ] |
| |
| deps = [ |
| ":constants", |
| ":elf_loader", |
| ":evergreen_info", |
| ":sabi_string", |
| "//cobalt/content/fonts:copy_font_data", |
| "//starboard:starboard_group", |
| ] |
| |
| if (!sb_is_evergreen_compatible) { |
| deps += [ "//third_party/crashpad/crashpad/wrapper:wrapper_stub" ] |
| } |
| if (sb_is_evergreen_compatible && sb_evergreen_compatible_package) { |
| deps += [ "//starboard/loader_app:copy_crashpad_handler_named_as_so" ] |
| } |
| } |
| } |
| |
| if (sb_is_evergreen_compatible && current_toolchain == starboard_toolchain) { |
| target(final_executable_type, "elf_loader_sys_sandbox") { |
| # To properly function the system loader requires the starboard |
| # symbols to be exported from the binary. |
| # To allow symbols to be exported remove the '-fvisibility=hidden' flag |
| # from your BUILD.gn. For Linux this would be: |
| # starboard/linux/shared/platform_configuration/BUILD.gn |
| # Example run: |
| # export LD_LIBRARY_PATH=. |
| # ./elf_loader_sys_sandbox --evergreen_library=app/cobalt/lib/libcobalt.so --evergreen_content=app/cobalt/content |
| sources = [ "elf_loader_sandbox.cc" ] |
| configs += [ ":elf_loader_config" ] |
| |
| starboard_syms_path = |
| rebase_path("//starboard/starboard.syms", root_build_dir) |
| ldflags = [ |
| "-Wl,--dynamic-list=$starboard_syms_path", |
| "-ldl", |
| ] |
| |
| deps = [ |
| ":constants", |
| ":elf_loader_sys", |
| ":evergreen_info", |
| ":sabi_string", |
| "//starboard:starboard_group", |
| ] |
| } |
| } |
| |
| # TODO: b/309493306 - Stop building evergreen targets for all non-evergreen platforms. |
| if (current_toolchain == starboard_toolchain && !is_host_win) { |
| target(starboard_level_gtest_target_type, "elf_loader_test") { |
| testonly = true |
| build_loader = false |
| |
| sources = [ "//starboard/common/test_main.cc" ] |
| deps = [ |
| "//starboard:starboard_with_main", |
| "//testing/gmock", |
| "//testing/gtest", |
| ] |
| |
| if (target_cpu == "x86" || target_cpu == "x64" || target_cpu == "arm" || |
| target_cpu == "arm64") { |
| sources += [ |
| "dynamic_section_test.cc", |
| "elf_header_test.cc", |
| "elf_loader_test.cc", |
| "lz4_file_impl_test.cc", |
| "program_table_test.cc", |
| "relocations_test.cc", |
| ] |
| deps += [ |
| ":copy_elf_loader_testdata", |
| ":elf_loader", |
| ] |
| |
| data_deps = [ ":copy_elf_loader_testdata" ] |
| } |
| } |
| } |
| |
| copy("copy_elf_loader_testdata") { |
| install_content = true |
| sources = [ |
| "testdata/compressed.lz4", |
| "testdata/compressed_no_content_size.lz4", |
| "testdata/uncompressed", |
| ] |
| subdir = "starboard/elf_loader" |
| outputs = [ "$sb_static_contents_output_data_dir/test/$subdir/{{source_target_relative}}" ] |
| } |
| |
| static_library("constants") { |
| sources = [ |
| "elf_loader_constants.cc", |
| "elf_loader_constants.h", |
| ] |
| deps = [ "//starboard:starboard_headers_only" ] |
| } |
| |
| static_library("evergreen_info") { |
| sources = [ |
| "evergreen_info.cc", |
| "evergreen_info.h", |
| ] |
| |
| public_deps = [ "//starboard/common" ] |
| } |
| |
| static_library("evergreen_config") { |
| sources = [ |
| "evergreen_config.cc", |
| "evergreen_config.h", |
| ] |
| |
| public_deps = [ "//starboard/common" ] |
| } |
| |
| static_library("sabi_string") { |
| sources = [ |
| "sabi_string.cc", |
| "sabi_string.h", |
| ] |
| |
| deps = [ "//starboard/common" ] |
| } |