1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
build / config / mac / BUILD.gn [blame]
# Copyright 2013 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/apple/symbols.gni")
import("//build/config/c++/c++.gni")
import("//build/config/mac/mac_sdk.gni")
import("//build/config/sysroot.gni")
import("//build/toolchain/rbe.gni")
import("//build/toolchain/siso.gni")
# This is included by reference in the //build/config/compiler config that
# is applied to all targets. It is here to separate out the logic.
config("compiler") {
# These flags are shared between the C compiler and linker.
common_mac_flags = []
# CPU architecture.
if (current_cpu == "x64") {
clang_arch = "x86_64"
} else if (current_cpu == "x86") {
clang_arch = "i386"
} else if (current_cpu == "arm64") {
clang_arch = current_cpu
} else {
assert(false, "unknown current_cpu $current_cpu")
}
common_mac_flags += [ "--target=$clang_arch-apple-macos" ]
# This is here so that all files get recompiled after an Xcode update.
# (defines are passed via the command line, and build system rebuild things
# when their commandline changes). Nothing should ever read this define.
defines = [ "CR_XCODE_VERSION=$xcode_version" ]
asmflags = common_mac_flags
cflags = common_mac_flags
ldflags = common_mac_flags
if (save_unstripped_output) {
ldflags += [ "-Wcrl,unstripped," + rebase_path(root_out_dir) ]
}
if (export_libcxxabi_from_executables) {
ldflags += [ "-Wl,-undefined,dynamic_lookup" ]
}
}
# This is included by reference in the //build/config/compiler:runtime_library
# config that is applied to all targets. It is here to separate out the logic
# that is Mac-only. Please see that target for advice on what should go in
# :runtime_library vs. :compiler.
config("runtime_library") {
common_flags = [
"-isysroot",
rebase_path(sysroot, root_build_dir),
"-mmacos-version-min=$mac_deployment_target",
]
asmflags = common_flags
cflags = common_flags
ldflags = common_flags
}
# On Mac, this is used for everything except static libraries.
config("mac_dynamic_flags") {
ldflags = [ "-Wl,-ObjC" ] # Always load Objective-C categories and classes.
if (is_component_build) {
ldflags += [
# Path for loading shared libraries for unbundled binaries.
"-Wl,-rpath,@loader_path/.",
# Path for loading shared libraries for bundled binaries. Get back from
# Binary.app/Contents/MacOS.
"-Wl,-rpath,@loader_path/../../..",
]
# Path for loading shared libraries for unbundled binaries for
# the host toolchain (see https://crbug.com/1315433). Only used
# for when building for iOS.
if (target_os == "ios" && current_toolchain == host_toolchain) {
ldflags += [ "-Wl,-rpath,@loader_path/" + rebase_path(
get_label_info(":mac_dynamic_flags", "root_out_dir"),
root_build_dir) ]
}
}
}
# When building with RBE, all inputs must be relative to the build directory.
# If using the system Xcode, which typically resides outside the build root, a
# symlink to the SDK is created in the build directory, and the path to that
# link is stored in $mac_sdk_path. If an action references a file in the SDK as
# an input, GN will complain that no target generates the file because it is
# below the $root_build_dir. The below action lists as outputs the files in the
# SDK that are referenced as inputs to actions, so that GN thinks a target has
# generated them. The list is centralized here, as multiple targets need to
# reference the same files, and an output can only be generated once.
#
# The symbolic link for $mac_sdk_path is set up by
# //build/config/apple/sdk_info.py in //build/config/mac/mac_sdk.gni.
if (mac_use_xcode_symlinks && current_toolchain == default_toolchain) {
action("sdk_inputs") {
script = "//build/noop.py"
outputs = [
"$mac_sdk_path/usr/include/mach/exc.defs",
"$mac_sdk_path/usr/include/mach/mach_exc.defs",
"$mac_sdk_path/usr/include/mach/notify.defs",
]
}
} else {
group("sdk_inputs") {
if (current_toolchain != default_toolchain) {
public_deps = [ ":sdk_inputs($default_toolchain)" ]
}
}
}