# ============================================================================= | |
# BUILD FLAGS | |
# ============================================================================= | |
# | |
# This block lists input arguments to the build, along with their default | |
# values. GN requires listing them explicitly so it can validate input and have | |
# a central place to manage the build flags. | |
# | |
# If a value is specified on the command line, it will overwrite the defaults | |
# given here, otherwise the default will be injected into the root scope. | |
# | |
# KEEP IN ALPHABETICAL ORDER and write a good description for everything. | |
# Use "is_*" names for intrinsic platform descriptions and build modes, and | |
# "use_*" names for optional features libraries, and configurations. | |
declare_args() { | |
is_component_build = 1 | |
is_chromeos = 0 | |
is_debug = 1 | |
use_ash = 0 | |
use_aura = 0 | |
use_ozone = 0 | |
} | |
# ============================================================================= | |
# SOURCES FILTERS | |
# ============================================================================= | |
# | |
# These patterns filter out platform-specific files when assigning to the | |
# sources variable. The magic variable |sources_assignment_filter| is applied | |
# to each assignment or appending to the sources variable and matches are | |
# automatcally removed. | |
# | |
# We define lists of filters for each platform for all builds so they can | |
# be used by individual targets if necessary (a target can always change | |
# sources_assignment_filter on itself if it needs something more specific). | |
# | |
# Note that the patterns are NOT regular expressions. Only "*" and "\b" (path | |
# boundary = end of string or slash) are supported, and the entire string | |
# muct match the pattern (so you need "*.cc" to match all .cc files, for | |
# example). | |
windows_sources_filters = [ | |
"*_win.cc", | |
"*_win.h", | |
"*_win_unittest.cc", | |
"*\bwin/*", | |
] | |
mac_sources_filters = [ | |
"*_mac.h", | |
"*_mac.cc", | |
"*_mac.mm", | |
"*_mac_unittest.h", | |
"*_mac_unittest.cc", | |
"*_mac_unittest.mm", | |
"*\bmac/*", | |
"*_cocoa.h", | |
"*_cocoa.cc", | |
"*_cocoa.mm", | |
"*_cocoa_unittest.h", | |
"*_cocoa_unittest.cc", | |
"*_cocoa_unittest.mm", | |
"*\bcocoa/*", | |
] | |
ios_sources_filters = [ | |
"*_ios.h", | |
"*_ios.cc", | |
"*_ios.mm", | |
"*_ios_unittest.h", | |
"*_ios_unittest.cc", | |
"*_ios_unittest.mm", | |
"*\bios/*", | |
] | |
objective_c_sources_filters = [ | |
"*.mm", | |
] | |
linux_sources_filters = [ | |
"*_linux.h", | |
"*_linux.cc", | |
"*_linux_unittest.h", | |
"*_linux_unittest.cc", | |
"*\blinux/*", | |
] | |
android_sources_filters = [ | |
"*_android.h", | |
"*_android.cc", | |
"*_android_unittest.h", | |
"*_android_unittest.cc", | |
"*\bandroid/*", | |
] | |
posix_sources_filters = [ | |
"*_posix.h", | |
"*_posix.cc", | |
"*_posix_unittest.h", | |
"*_posix_unittest.cc", | |
"*\bposix/*", | |
] | |
# Construct the full list of sources we're using for this platform. | |
sources_assignment_filter = [] | |
if (is_win) { | |
sources_assignment_filter += posix_sources_filters | |
} else { | |
sources_assignment_filter += windows_sources_filters | |
} | |
if (!is_mac) { | |
sources_assignment_filter += mac_sources_filters | |
} | |
if (!is_ios) { | |
sources_assignment_filter += ios_sources_filters | |
} | |
if (!is_mac && !is_ios) { | |
sources_assignment_filter += objective_c_sources_filters | |
} | |
if (!is_linux) { | |
sources_assignment_filter += linux_sources_filters | |
} | |
if (!is_android) { | |
sources_assignment_filter += android_sources_filters | |
} | |
# This is the actual set. | |
set_sources_assignment_filter(sources_assignment_filter) | |
# ============================================================================= | |
# SYSTEM CONFIG | |
# ============================================================================= | |
is_nacl = 0 | |
# ============================================================================= | |
# BUILD OPTIONS | |
# ============================================================================= | |
if (is_component_build) { | |
component_mode = "shared_library" | |
} else { | |
component_mode = "static_library" | |
} | |
# ============================================================================= | |
# 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. | |
# Holds all configs used for making native executables and libraries, to avoid | |
# duplication in each target below. | |
native_compiler_configs = [ | |
"//build/config:my_msvs", # TODO(brettw) eraseme | |
"//build/config/compiler:chromium_code", | |
"//build/config/compiler:disable_annoying_warnings", | |
"//build/config/compiler:no_rtti", | |
"//build/config/compiler:runtime_library", | |
] | |
if (is_win) { | |
native_compiler_configs += "//build/config/win:sdk" | |
} | |
if (is_debug) { | |
native_compiler_configs += "//build/config:debug" | |
} else { | |
native_compiler_configs += "//build/config::release" | |
} | |
set_defaults("executable") { | |
configs = native_compiler_configs | |
} | |
set_defaults("static_library") { | |
configs = native_compiler_configs | |
} | |
set_defaults("shared_library") { | |
configs = native_compiler_configs | |
} | |
# ============================================================================== | |
# TOOLCHAIN SETUP | |
# ============================================================================== | |
if (is_win) { | |
set_default_toolchain("//build/config/win:32") | |
} |