| # 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/platforms.gni") |
| |
| declare_args() { |
| is_clang = true |
| |
| build_type = "devel" |
| |
| target_platform = "stub" |
| |
| is_starboard = true |
| |
| cobalt_fastbuild = getenv("IS_CI") == 1 |
| |
| is_internal_build = false |
| |
| # TODO: Remove this flag when the affected targets can be built. |
| can_build_evergreen_loader_apps = true |
| } |
| |
| is_debug = build_type == "debug" |
| is_devel = build_type == "devel" |
| is_qa = build_type == "qa" |
| is_gold = build_type == "gold" |
| assert(is_debug || is_devel || is_qa || is_gold) |
| |
| declare_args() { |
| use_tsan = getenv("USE_TSAN") == 1 |
| } |
| |
| declare_args() { |
| use_asan = (is_debug || is_devel || getenv("USE_ASAN") == 1) && !use_tsan |
| } |
| |
| assert(!(use_tsan && use_asan), "ASAN and TSAN are mutually exclusive.") |
| |
| # Set some variables we never want to change. |
| sb_allows_memory_tracking = !is_gold |
| host_byteorder = "little" |
| is_official_build = false # Chromium's build files expect this to be set. |
| |
| # The os/cpu definitions are here to set the current platform type in |
| # os_definitions.gni below. |
| if (target_os == "") { |
| target_os = host_os |
| } |
| if (target_cpu == "") { |
| target_cpu = host_cpu |
| } |
| if (current_os == "") { |
| current_os = target_os |
| } |
| if (current_cpu == "") { |
| current_cpu = target_cpu |
| } |
| import("//starboard/build/config/os_definitions.gni") |
| |
| # Get the path to the starboard implementation and include its GN |
| # configuration. |
| foreach(platform, platforms) { |
| if (platform.name == target_platform) { |
| starboard_path = platform.path |
| } |
| } |
| assert(defined(starboard_path), |
| "Please port your platform to starboard/build/platforms.gni") |
| host_toolchain = "//$starboard_path/toolchain:host" |
| _default_toolchain = "//$starboard_path/toolchain:target" |
| set_default_toolchain(_default_toolchain) |
| |
| import("//$starboard_path/platform_configuration/configuration.gni") |
| import("//starboard/build/config/build_assertions.gni") |
| |
| # ============================================================================= |
| # TARGET DEFAULTS |
| # ============================================================================= |
| # |
| # Set up the default configuration for every build target of the given type. |
| # The values configured here will be automatically set on the scope of the |
| # corresponding target. Target definitions can add or remove to the settings |
| # here as needed. |
| # |
| # WHAT GOES HERE? |
| # |
| # Other than the main compiler and linker configs, the only reason for a config |
| # to be in this list is if some targets need to explicitly override that config |
| # by removing it. This is how targets opt-out of flags. If you don't have that |
| # requirement and just need to add a config everywhere, reference it as a |
| # sub-config of an existing one, most commonly the main "compiler" one. |
| |
| default_compiler_configs = [ |
| "//build/config/compiler:default_include_dirs", |
| "//build/config/compiler:no_exceptions", |
| "//$starboard_path/platform_configuration", |
| "//starboard/build/config:base", |
| "//starboard/build/config:host", |
| "//starboard/build/config:size", |
| "//starboard/build/config:target", |
| "//starboard/build/config:no_pedantic_warnings", |
| ] |
| |
| if (is_starboard) { |
| default_compiler_configs += [ "//starboard/build/config:starboard" ] |
| } |
| |
| set_defaults("static_library") { |
| configs = default_compiler_configs + static_library_configs |
| } |
| set_defaults("source_set") { |
| configs = default_compiler_configs + source_set_configs |
| } |
| set_defaults("loadable_module") { |
| configs = default_compiler_configs + loadable_module_configs |
| } |
| set_defaults("executable") { |
| configs = default_compiler_configs + executable_configs |
| } |
| set_defaults("shared_library") { |
| configs = default_compiler_configs + shared_library_configs |
| } |
| |
| # Set up the method of generating the install targets as defined by the |
| # platform. |
| import("$install_target_path") |
| template("executable") { |
| executable(target_name) { |
| forward_variables_from(invoker, "*", [ "install_target" ]) |
| } |
| |
| if (!defined(invoker.install_target) || invoker.install_target) { |
| executable_target_name = target_name |
| install_target(target_name + "_install") { |
| forward_variables_from(invoker, |
| [ |
| "content", |
| "testonly", |
| ]) |
| installable_target_name = executable_target_name |
| type = "executable" |
| } |
| } |
| } |
| |
| template("shared_library") { |
| shared_library(target_name) { |
| forward_variables_from(invoker, "*", [ "install_target" ]) |
| } |
| |
| if (!defined(invoker.install_target) || invoker.install_target) { |
| shared_library_target_name = target_name |
| install_target(target_name + "_install") { |
| forward_variables_from(invoker, |
| [ |
| "content", |
| "testonly", |
| ]) |
| installable_target_name = shared_library_target_name |
| type = "shared_library" |
| } |
| } |
| } |
| |
| # Import this down here as it relies on variables set during configuration. |
| import("//starboard/build/config/components.gni") |