Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(608)

Side by Side Diff: build/toolchain/mac/BUILD.gn

Issue 766573003: gn format //build (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/toolchain/gcc_toolchain.gni ('k') | build/toolchain/nacl/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 # TODO(brettw) Use "gcc_toolchain.gni" like the Linux toolchains. This requires 5 # TODO(brettw) Use "gcc_toolchain.gni" like the Linux toolchains. This requires
6 # some enhancements since the commands on Mac are slightly different than on 6 # some enhancements since the commands on Mac are slightly different than on
7 # Linux. 7 # Linux.
8 8
9 import("../goma.gni") 9 import("../goma.gni")
10 10
(...skipping 10 matching lines...) Expand all
21 root_build_dir) 21 root_build_dir)
22 } else { 22 } else {
23 cc = "gcc" 23 cc = "gcc"
24 cxx = "g++" 24 cxx = "g++"
25 } 25 }
26 ld = cxx 26 ld = cxx
27 27
28 # This will copy the gyp-mac-tool to the build directory. We pass in the source 28 # This will copy the gyp-mac-tool to the build directory. We pass in the source
29 # file of the win tool. 29 # file of the win tool.
30 gyp_mac_tool_source = 30 gyp_mac_tool_source =
31 rebase_path("//tools/gyp/pylib/gyp/mac_tool.py", root_build_dir) 31 rebase_path("//tools/gyp/pylib/gyp/mac_tool.py", root_build_dir)
32 exec_script("setup_toolchain.py", [ gyp_mac_tool_source ]) 32 exec_script("setup_toolchain.py", [ gyp_mac_tool_source ])
33 33
34 # Shared toolchain definition. Invocations should set toolchain_os to set the 34 # Shared toolchain definition. Invocations should set toolchain_os to set the
35 # build args in this definition. 35 # build args in this definition.
36 template("mac_clang_toolchain") { 36 template("mac_clang_toolchain") {
37 toolchain(target_name) { 37 toolchain(target_name) {
38 assert(defined(invoker.cc), 38 assert(defined(invoker.cc),
39 "mac_clang_toolchain() must specify a \"cc\" value") 39 "mac_clang_toolchain() must specify a \"cc\" value")
40 assert(defined(invoker.cxx), 40 assert(defined(invoker.cxx),
41 "mac_clang_toolchain() must specify a \"cxx\" value") 41 "mac_clang_toolchain() must specify a \"cxx\" value")
42 assert(defined(invoker.ld), 42 assert(defined(invoker.ld),
43 "mac_clang_toolchain() must specify a \"ld\" value") 43 "mac_clang_toolchain() must specify a \"ld\" value")
44 assert(defined(invoker.toolchain_os), 44 assert(defined(invoker.toolchain_os),
45 "mac_clang_toolchain() must specify a \"toolchain_os\"") 45 "mac_clang_toolchain() must specify a \"toolchain_os\"")
46 46
47 # We can't do string interpolation ($ in strings) on things with dots in 47 # We can't do string interpolation ($ in strings) on things with dots in
48 # them. To allow us to use $cc below, for example, we create copies of 48 # them. To allow us to use $cc below, for example, we create copies of
49 # these values in our scope. 49 # these values in our scope.
50 cc = invoker.cc 50 cc = invoker.cc
51 cxx = invoker.cxx 51 cxx = invoker.cxx
52 ld = invoker.ld 52 ld = invoker.ld
53 53
54 # Make these apply to all tools below. 54 # Make these apply to all tools below.
55 lib_switch = "-l" 55 lib_switch = "-l"
56 lib_dir_switch = "-L" 56 lib_dir_switch = "-L"
57 57
58 tool("cc") { 58 tool("cc") {
59 depfile = "{{output}}.d" 59 depfile = "{{output}}.d"
60 command = "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} { {cflags_c}} -c {{source}} -o {{output}}" 60 command =
61 "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflag s_c}} -c {{source}} -o {{output}}"
61 depsformat = "gcc" 62 depsformat = "gcc"
62 description = "CC {{output}}" 63 description = "CC {{output}}"
63 outputs = [ 64 outputs =
64 "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", 65 [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
65 ]
66 } 66 }
67 67
68 tool("cxx") { 68 tool("cxx") {
69 depfile = "{{output}}.d" 69 depfile = "{{output}}.d"
70 command = "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} -c {{source}} -o {{output}}" 70 command =
71 "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cfla gs_cc}} -c {{source}} -o {{output}}"
71 depsformat = "gcc" 72 depsformat = "gcc"
72 description = "CXX {{output}}" 73 description = "CXX {{output}}"
73 outputs = [ 74 outputs =
74 "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", 75 [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
75 ]
76 } 76 }
77 77
78 tool("asm") { 78 tool("asm") {
79 # For GCC we can just use the C compiler to compile assembly. 79 # For GCC we can just use the C compiler to compile assembly.
80 depfile = "{{output}}.d" 80 depfile = "{{output}}.d"
81 command = "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} { {cflags_c}} -c {{source}} -o {{output}}" 81 command =
82 "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflag s_c}} -c {{source}} -o {{output}}"
82 depsformat = "gcc" 83 depsformat = "gcc"
83 description = "ASM {{output}}" 84 description = "ASM {{output}}"
84 outputs = [ 85 outputs =
85 "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", 86 [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
86 ]
87 } 87 }
88 88
89 tool("objc") { 89 tool("objc") {
90 depfile = "{{output}}.d" 90 depfile = "{{output}}.d"
91 command = "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} {{cflags_objc}} -c {{source}} -o {{output}}" 91 command =
92 "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cfla gs_c}} {{cflags_objc}} -c {{source}} -o {{output}}"
92 depsformat = "gcc" 93 depsformat = "gcc"
93 description = "OBJC {{output}}" 94 description = "OBJC {{output}}"
94 outputs = [ 95 outputs =
95 "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", 96 [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
96 ]
97 } 97 }
98 98
99 tool("objcxx") { 99 tool("objcxx") {
100 depfile = "{{output}}.d" 100 depfile = "{{output}}.d"
101 command = "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} {{cflags_objcc}} -c {{source}} -o {{output}}" 101 command =
102 "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cfla gs_cc}} {{cflags_objcc}} -c {{source}} -o {{output}}"
102 depsformat = "gcc" 103 depsformat = "gcc"
103 description = "OBJCXX {{output}}" 104 description = "OBJCXX {{output}}"
104 outputs = [ 105 outputs =
105 "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", 106 [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
106 ]
107 } 107 }
108 108
109 tool("alink") { 109 tool("alink") {
110 command = "rm -f {{output}} && ./gyp-mac-tool filter-libtool libtool -stat ic -o {{output}} {{inputs}}" 110 command =
111 "rm -f {{output}} && ./gyp-mac-tool filter-libtool libtool -static -o {{output}} {{inputs}}"
111 description = "LIBTOOL-STATIC {{output}}" 112 description = "LIBTOOL-STATIC {{output}}"
112 outputs = [ 113 outputs =
113 "{{target_out_dir}}/{{target_output_name}}{{output_extension}}" 114 [ "{{target_out_dir}}/{{target_output_name}}{{output_extension}}" ]
114 ]
115 default_output_extension = ".a" 115 default_output_extension = ".a"
116 output_prefix = "lib" 116 output_prefix = "lib"
117 } 117 }
118 118
119 tool("solink") { 119 tool("solink") {
120 dylib = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" # e g "./libfoo.dylib" 120 dylib = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" # e g "./libfoo.dylib"
121 rspfile = dylib + ".rsp" 121 rspfile = dylib + ".rsp"
122 122
123 # These variables are not build into GN but are helpers that implement 123 # These variables are not build into GN but are helpers that implement
124 # (1) linking to produce a .so, (2) extracting the symbols from that file 124 # (1) linking to produce a .so, (2) extracting the symbols from that file
125 # to a temporary file, (3) if the temporary file has differences from the 125 # to a temporary file, (3) if the temporary file has differences from the
126 # existing .TOC file, overwrite it, oterwise, don't change it. 126 # existing .TOC file, overwrite it, oterwise, don't change it.
127 # 127 #
128 # As a special case, if the library reexports symbols from other dynamic 128 # As a special case, if the library reexports symbols from other dynamic
129 # libraries, we always update the .TOC and skip the temporary file and 129 # libraries, we always update the .TOC and skip the temporary file and
130 # diffing steps, since that library always needs to be re-linked. 130 # diffing steps, since that library always needs to be re-linked.
131 tocname = dylib + ".TOC" 131 tocname = dylib + ".TOC"
132 temporary_tocname = dylib + ".tmp" 132 temporary_tocname = dylib + ".tmp"
133 133
134 does_reexport_command = "[ ! -e $dylib -o ! -e $tocname ] || otool -l $dyl ib | grep -q LC_REEXPORT_DYLIB" 134 does_reexport_command =
135 link_command = "$ld -shared {{ldflags}} -o $dylib -Wl,-filelist,$rspfile { {solibs}} {{libs}}" 135 "[ ! -e $dylib -o ! -e $tocname ] || otool -l $dylib | grep -q LC_REEX PORT_DYLIB"
136 replace_command = "if ! cmp -s $temporary_tocname $tocname; then mv $tempo rary_tocname $tocname" 136 link_command =
137 extract_toc_command = "{ otool -l $dylib | grep LC_ID_DYLIB -A 5; nm -gP $ dylib | cut -f1-2 -d' ' | grep -v U\$\$; true; }" 137 "$ld -shared {{ldflags}} -o $dylib -Wl,-filelist,$rspfile {{solibs}} { {libs}}"
138 replace_command =
139 "if ! cmp -s $temporary_tocname $tocname; then mv $temporary_tocname $ tocname"
140 extract_toc_command =
141 "{ otool -l $dylib | grep LC_ID_DYLIB -A 5; nm -gP $dylib | cut -f1-2 -d' ' | grep -v U\$\$; true; }"
138 142
139 command = "if $does_reexport_command ; then $link_command && $extract_toc_ command > $tocname; else $link_command && $extract_toc_command > $temporary_tocn ame && $replace_command ; fi; fi" 143 command =
144 "if $does_reexport_command ; then $link_command && $extract_toc_comman d > $tocname; else $link_command && $extract_toc_command > $temporary_tocname && $replace_command ; fi; fi"
140 145
141 rspfile_content = "{{inputs_newline}}" 146 rspfile_content = "{{inputs_newline}}"
142 147
143 description = "SOLINK {{output}}" 148 description = "SOLINK {{output}}"
144 149
145 # Use this for {{output_extension}} expansions unless a target manually 150 # Use this for {{output_extension}} expansions unless a target manually
146 # overrides it (in which case {{output_extension}} will be what the target 151 # overrides it (in which case {{output_extension}} will be what the target
147 # specifies). 152 # specifies).
148 default_output_extension = ".dylib" 153 default_output_extension = ".dylib"
149 154
(...skipping 10 matching lines...) Expand all
160 dylib, 165 dylib,
161 tocname, 166 tocname,
162 ] 167 ]
163 link_output = dylib 168 link_output = dylib
164 depend_output = tocname 169 depend_output = tocname
165 } 170 }
166 171
167 tool("link") { 172 tool("link") {
168 outfile = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" 173 outfile = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}"
169 rspfile = "$outfile.rsp" 174 rspfile = "$outfile.rsp"
170 command = "$ld {{ldflags}} -o $outfile -Wl,-filelist,$rspfile {{solibs}} { {libs}}" 175 command =
176 "$ld {{ldflags}} -o $outfile -Wl,-filelist,$rspfile {{solibs}} {{libs} }"
171 description = "LINK $outfile" 177 description = "LINK $outfile"
172 rspfile_content = "{{inputs_newline}}" 178 rspfile_content = "{{inputs_newline}}"
173 outputs = [ outfile ] 179 outputs = [ outfile ]
174 } 180 }
175 181
176 tool("stamp") { 182 tool("stamp") {
177 command = "touch {{output}}" 183 command = "touch {{output}}"
178 description = "STAMP {{output}}" 184 description = "STAMP {{output}}"
179 } 185 }
180 186
181 tool("copy") { 187 tool("copy") {
182 command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} & & cp -af {{source}} {{output}})" 188 command =
189 "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp - af {{source}} {{output}})"
183 description = "COPY {{source}} {{output}}" 190 description = "COPY {{source}} {{output}}"
184 } 191 }
185 192
186 toolchain_args() { 193 toolchain_args() {
187 os = invoker.toolchain_os 194 os = invoker.toolchain_os
188 } 195 }
189 } 196 }
190 } 197 }
191 198
192 # Toolchain representing the target build (either mac or iOS). 199 # Toolchain representing the target build (either mac or iOS).
193 mac_clang_toolchain("clang") { 200 mac_clang_toolchain("clang") {
194 toolchain_os = os 201 toolchain_os = os
195 } 202 }
196 203
197 # This toolchain provides a way for iOS target compiles to reference targets 204 # This toolchain provides a way for iOS target compiles to reference targets
198 # compiled for the host system. It just overrides the OS back to "mac". 205 # compiled for the host system. It just overrides the OS back to "mac".
199 mac_clang_toolchain("host_clang") { 206 mac_clang_toolchain("host_clang") {
200 toolchain_os = "mac" 207 toolchain_os = "mac"
201 } 208 }
OLDNEW
« no previous file with comments | « build/toolchain/gcc_toolchain.gni ('k') | build/toolchain/nacl/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698