| # Copyright 2018 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # ============================================================================= |
| # WHAT IS THIS FILE? |
| # ============================================================================= |
| # |
| # This is the master GN build configuration. This file is loaded after the |
| # build args (args.gn) for the build directory and after the toplevel ".gn" |
| # file (which points to this file as the build configuration). |
| # |
| # This file will be executed and the resulting context will be used to execute |
| # every other file in the build. So variables declared here (that don't start |
| # with an underscore) will be implicitly global. |
| |
| # ============================================================================= |
| # PLATFORM SELECTION |
| # ============================================================================= |
| # |
| # There are two main things to set: "os" and "cpu". The "toolchain" is the name |
| # of the GN thing that encodes combinations of these things. |
| # |
| # Users typically only set the variables "target_os" and "target_cpu" in "gn |
| # args", the rest are set up by our build and internal to GN. |
| # |
| # There are three different types of each of these things: The "host" |
| # represents the computer doing the compile and never changes. The "target" |
| # represents the main thing we're trying to build. The "current" represents |
| # which configuration is currently being defined, which can be either the |
| # host, the target, or something completely different. |
| |
| if (target_os == "") { |
| target_os = host_os |
| } |
| if (target_cpu == "") { |
| target_cpu = host_cpu |
| } |
| if (current_cpu == "") { |
| current_cpu = target_cpu |
| } |
| if (current_os == "") { |
| current_os = target_os |
| } |
| |
| # ============================================================================= |
| # BUILD FLAGS |
| # ============================================================================= |
| # |
| # This block lists input arguments to the build, along with their default |
| # values. |
| # |
| # If a value is specified on the command line, it will overwrite the defaults |
| # given in a declare_args block, otherwise the default will be used. |
| # |
| # YOU SHOULD ALMOST NEVER NEED TO ADD FLAGS TO THIS FILE. GN allows any file in |
| # the build to declare build flags. If you need a flag for a single component, |
| # you can just declare it in the corresponding BUILD.gn file. |
| |
| default_clang_base_path = "//third_party/llvm-build/Release+Asserts" |
| |
| declare_args() { |
| # Debug build. Most global debug build flags are declared in |
| # //build/config/BUILD.gn. |
| is_debug = false |
| |
| # By default, we use the clang compiler on both Mac and Linux. To use the |
| # gcc compiler on Linux instead, set is_gcc to true. |
| is_gcc = false |
| clang_base_path = default_clang_base_path |
| |
| # This would not normally be set as a build argument, but rather is used as a |
| # default value during the first parse of this config. All other toolchains |
| # that cause this file to be re-parsed will already have this set. For |
| # further explanation, see |
| # https://gn.googlesource.com/gn/+/refs/heads/master/docs/reference.md#toolchain-overview |
| host_toolchain = "" |
| |
| # Must be enabled for fuzzing targets. |
| use_libfuzzer = false |
| } |
| |
| declare_args() { |
| is_clang = !is_gcc |
| } |
| |
| # ============================================================================== |
| # TOOLCHAIN SETUP |
| # ============================================================================== |
| # |
| # Here we set the host and default toolchains. Currently only Mac and POSIX are |
| # defined. |
| if (host_toolchain == "") { |
| if (current_os == "chromeos" || current_os == "linux") { |
| if (is_clang) { |
| host_toolchain = "//build/toolchain/linux:clang_$host_cpu" |
| } else { |
| host_toolchain = "//build/toolchain/linux:gcc_$host_cpu" |
| } |
| } else if (current_os == "mac") { |
| host_toolchain = "//build/toolchain/mac:clang" |
| } else { |
| # TODO(miu): Windows, and others. |
| assert(false, "Toolchain for current_os is not defined.") |
| } |
| } |
| |
| _default_toolchain = "" |
| if (target_os == "chromeos" || target_os == "linux") { |
| if (is_clang) { |
| _default_toolchain = "//build/toolchain/linux:clang_$target_cpu" |
| } else { |
| _default_toolchain = "//build/toolchain/linux:gcc_$target_cpu" |
| } |
| } else if (target_os == "mac") { |
| assert(host_os == "mac", "Cross-compiling on Mac is not supported.") |
| _default_toolchain = "//build/toolchain/mac:clang" |
| } else { |
| assert(false, "Toolchain for target_os is not defined.") |
| } |
| set_default_toolchain(_default_toolchain) |
| |
| # ============================================================================= |
| # OS DEFINITIONS |
| # ============================================================================= |
| # |
| # We set these various is_FOO booleans for convenience in writing OS-based |
| # conditions. |
| |
| if (current_os == "chromeos" || current_os == "linux") { |
| is_linux = true |
| is_mac = false |
| is_posix = true |
| } else if (current_os == "mac") { |
| is_linux = false |
| is_mac = true |
| is_posix = true |
| } else { |
| # TODO(miu): Windows, and others. |
| assert(false, "is_FOO booleans not defined for current_os.") |
| } |
| |
| # ============================================================================= |
| # 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. |
| |
| # All binary targets will get this list of configs by default. |
| _shared_binary_target_configs = [ |
| "//build/config:openscreen_code", |
| "//build/config:no_exceptions", |
| "//build/config:no_rtti", |
| "//build/config:symbol_visibility_hidden", |
| "//build/config:default_sanitizers", |
| "//build/config:default_coverage", |
| "//build/config:compiler_defaults", |
| "//build/config:compiler_cpu_abi", |
| "//build/config:default_optimization", |
| "//build/config:sysroot_runtime_libraries", |
| "//build/config:operating_system_defines", |
| ] |
| |
| # Apply that default list to the binary target types. |
| set_defaults("executable") { |
| configs = _shared_binary_target_configs |
| } |
| set_defaults("static_library") { |
| configs = _shared_binary_target_configs |
| } |
| set_defaults("shared_library") { |
| configs = _shared_binary_target_configs |
| } |
| set_defaults("source_set") { |
| configs = _shared_binary_target_configs |
| } |