1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# =============================================================================
2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# BUILD FLAGS
3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# =============================================================================
4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#
5d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# This block lists input arguments to the build, along with their default
6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# values. GN requires listing them explicitly so it can validate input and have
7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# a central place to manage the build flags.
8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#
9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# If a value is specified on the command line, it will overwrite the defaults
10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# given here, otherwise the default will be injected into the root scope.
11d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#
12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# KEEP IN ALPHABETICAL ORDER and write a good description for everything.
13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# Use "is_*" names for intrinsic platform descriptions and build modes, and
14d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# "use_*" names for optional features libraries, and configurations.
15d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochdeclare_args() {
162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  is_android = 0
17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  is_component_build = 1
18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  is_chromeos = 0
19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  is_debug = 1
202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  is_ios = 0
21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  use_ash = 0
22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  use_aura = 0
23d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  use_ozone = 0
24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
26d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# =============================================================================
27d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# SOURCES FILTERS
28d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# =============================================================================
29d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#
30d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# These patterns filter out platform-specific files when assigning to the
31d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# sources variable. The magic variable |sources_assignment_filter| is applied
32d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# to each assignment or appending to the sources variable and matches are
33d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# automatcally removed.
34d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#
35d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# We define lists of filters for each platform for all builds so they can
36d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# be used by individual targets if necessary (a target can always change
37d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# sources_assignment_filter on itself if it needs something more specific).
38d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#
39d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# Note that the patterns are NOT regular expressions. Only "*" and "\b" (path
40d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# boundary = end of string or slash) are supported, and the entire string
41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# muct match the pattern (so you need "*.cc" to match all .cc files, for
42d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# example).
43d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
44d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochwindows_sources_filters = [
45d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_win.cc",
46d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_win.h",
47d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_win_unittest.cc",
48d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*\bwin/*",
49d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch]
50d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochmac_sources_filters = [
51d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_mac.h",
52d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_mac.cc",
53d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_mac.mm",
54d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_mac_unittest.h",
55d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_mac_unittest.cc",
56d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_mac_unittest.mm",
57d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*\bmac/*",
58d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_cocoa.h",
59d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_cocoa.cc",
60d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_cocoa.mm",
61d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_cocoa_unittest.h",
62d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_cocoa_unittest.cc",
63d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_cocoa_unittest.mm",
64d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*\bcocoa/*",
65d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch]
66d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochios_sources_filters = [
67d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_ios.h",
68d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_ios.cc",
69d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_ios.mm",
70d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_ios_unittest.h",
71d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_ios_unittest.cc",
72d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_ios_unittest.mm",
73d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*\bios/*",
74d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch]
75d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochobjective_c_sources_filters = [
76d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*.mm",
77d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch]
78d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochlinux_sources_filters = [
79d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_linux.h",
80d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_linux.cc",
81d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_linux_unittest.h",
82d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_linux_unittest.cc",
83d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*\blinux/*",
84d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch]
85d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochandroid_sources_filters = [
86d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_android.h",
87d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_android.cc",
88d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_android_unittest.h",
89d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_android_unittest.cc",
90d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*\bandroid/*",
91d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch]
92d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochposix_sources_filters = [
93d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_posix.h",
94d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_posix.cc",
95d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_posix_unittest.h",
96d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*_posix_unittest.cc",
97d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "*\bposix/*",
98d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch]
99d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
100d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# Construct the full list of sources we're using for this platform.
101d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochsources_assignment_filter = []
102d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (is_win) {
103d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  sources_assignment_filter += posix_sources_filters
104d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} else {
105d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  sources_assignment_filter += windows_sources_filters
106d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
107d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (!is_mac) {
108d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  sources_assignment_filter += mac_sources_filters
109d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
110d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (!is_ios) {
111d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  sources_assignment_filter += ios_sources_filters
112d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
113d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (!is_mac && !is_ios) {
114d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  sources_assignment_filter += objective_c_sources_filters
115d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
116d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (!is_linux) {
117d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  sources_assignment_filter += linux_sources_filters
118d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
119d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (!is_android) {
120d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  sources_assignment_filter += android_sources_filters
121d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
122d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
123d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# This is the actual set.
124d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochset_sources_assignment_filter(sources_assignment_filter)
125d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
126d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# =============================================================================
127d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# SYSTEM CONFIG
128d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# =============================================================================
129d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
130d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochis_nacl = 0
131d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
132d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# =============================================================================
133d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# BUILD OPTIONS
134d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# =============================================================================
135d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
136d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (is_component_build) {
137d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  component_mode = "shared_library"
138d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} else {
139d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  component_mode = "static_library"
140d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
141d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
142d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# =============================================================================
143d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# TARGET DEFAULTS
144d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# =============================================================================
145d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#
146d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# Set up the default configuration for every build target of the given type.
147d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# The values configured here will be automatically set on the scope of the
148d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# corresponding target. Target definitions can add or remove to the settings
149d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# here as needed.
150d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
151d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# Holds all configs used for making native executables and libraries, to avoid
152d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# duplication in each target below.
153d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochnative_compiler_configs = [
154d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "//build/config:my_msvs",  # TODO(brettw) eraseme
155d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
1562385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  "//build/config/compiler:compiler",
157d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "//build/config/compiler:chromium_code",
1582385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  "//build/config/compiler:default_warnings",
159d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "//build/config/compiler:no_rtti",
160d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  "//build/config/compiler:runtime_library",
161d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch]
162d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (is_win) {
163d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  native_compiler_configs += "//build/config/win:sdk"
1642385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} else if (is_mac) {
1652385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  # TODO(brettw) this should be in an if (is_clang) block instead but I haven't
1662385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  # written an is_clang flag yet.
1672385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  native_compiler_configs += "//build/config/clang:find_bad_constructs"
168d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
169d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
170d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (is_debug) {
171d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  native_compiler_configs += "//build/config:debug"
172d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch} else {
1732385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  native_compiler_configs += "//build/config:release"
174d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
175d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
176d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochset_defaults("executable") {
177d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  configs = native_compiler_configs
1783240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  if (is_mac) {
1793240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    configs += "//build/config/mac:mac_dynamic_flags"
1803240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  }
181d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
182d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
183d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochset_defaults("static_library") {
184d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  configs = native_compiler_configs
185d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
186d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
187d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochset_defaults("shared_library") {
188d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  configs = native_compiler_configs
1893240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  if (is_mac) {
1903240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch    configs += "//build/config/mac:mac_dynamic_flags"
1913240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  }
192d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
193d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
194d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# ==============================================================================
195d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# TOOLCHAIN SETUP
196d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch# ==============================================================================
197d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch
198d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochif (is_win) {
199d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch  set_default_toolchain("//build/config/win:32")
2002385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch} else if (is_mac) {
2012385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  set_default_toolchain("//build/config/mac:clang")
202d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}
203