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

Side by Side Diff: build/toolchain/gcc_toolchain.gni

Issue 1882973002: Allow targets to override the output directory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@output_dir
Patch Set: Created 4 years, 8 months 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 | « no previous file | no next file » | 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 import("//build/config/nacl/config.gni") 5 import("//build/config/nacl/config.gni")
6 import("//build/config/sanitizers/sanitizers.gni") 6 import("//build/config/sanitizers/sanitizers.gni")
7 import("//build/toolchain/cc_wrapper.gni") 7 import("//build/toolchain/cc_wrapper.gni")
8 import("//build/toolchain/goma.gni") 8 import("//build/toolchain/goma.gni")
9 import("//build/toolchain/toolchain.gni") 9 import("//build/toolchain/toolchain.gni")
10 10
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 227
228 # This needs a Python script to avoid using simple sh features in this 228 # This needs a Python script to avoid using simple sh features in this
229 # command, in case the host does not use a POSIX shell (e.g. compiling 229 # command, in case the host does not use a POSIX shell (e.g. compiling
230 # POSIX-like toolchains such as NaCl on Windows). 230 # POSIX-like toolchains such as NaCl on Windows).
231 ar_wrapper = 231 ar_wrapper =
232 rebase_path("//build/toolchain/gcc_ar_wrapper.py", root_build_dir) 232 rebase_path("//build/toolchain/gcc_ar_wrapper.py", root_build_dir)
233 command = "$python_path \"$ar_wrapper\" --output={{output}} --ar=\"$ar\" $ arflags rcsD @\"$rspfile\"" 233 command = "$python_path \"$ar_wrapper\" --output={{output}} --ar=\"$ar\" $ arflags rcsD @\"$rspfile\""
234 description = "AR {{output}}" 234 description = "AR {{output}}"
235 rspfile_content = "{{inputs}}" 235 rspfile_content = "{{inputs}}"
236 outputs = [ 236 outputs = [
237 "{{target_out_dir}}/{{target_output_name}}{{output_extension}}", 237 "{{output_dir}}/{{target_output_name}}{{output_extension}}",
238 ] 238 ]
239
240 # Shared libraries go in the target out directory by default so we can
241 # generate different targets with the same name and not have them collide.
242 default_output_dir = "{{target_out_dir}}"
239 default_output_extension = ".a" 243 default_output_extension = ".a"
240 output_prefix = "lib" 244 output_prefix = "lib"
241 } 245 }
242 246
243 tool("solink") { 247 tool("solink") {
244 soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so". 248 soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so".
245 sofile = "{{root_out_dir}}/$soname" # Possibly including toolchain dir. 249 sofile = "{{output_dir}}/$soname" # Possibly including toolchain dir.
246 if (shlib_subdir != ".") {
247 sofile = "{{root_out_dir}}/$shlib_subdir/$soname"
248 }
249 rspfile = sofile + ".rsp" 250 rspfile = sofile + ".rsp"
250 251
251 unstripped_sofile = sofile
252 if (defined(invoker.strip)) { 252 if (defined(invoker.strip)) {
253 unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" 253 unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname"
254 } else {
255 unstripped_sofile = sofile
254 } 256 }
255 257
256 # These variables are not built into GN but are helpers that 258 # These variables are not built into GN but are helpers that
257 # implement (1) linking to produce a .so, (2) extracting the symbols 259 # implement (1) linking to produce a .so, (2) extracting the symbols
258 # from that file (3) if the extracted list differs from the existing 260 # from that file (3) if the extracted list differs from the existing
259 # .TOC file, overwrite it, otherwise, don't change it. 261 # .TOC file, overwrite it, otherwise, don't change it.
260 tocfile = sofile + ".TOC" 262 tocfile = sofile + ".TOC"
261 263
262 link_command = "$ld -shared {{ldflags}} -o \"$unstripped_sofile\" -Wl,-son ame=\"$soname\" @\"$rspfile\"" 264 link_command = "$ld -shared {{ldflags}} -o \"$unstripped_sofile\" -Wl,-son ame=\"$soname\" @\"$rspfile\""
263 265
(...skipping 12 matching lines...) Expand all
276 278
277 rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whol e-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix" 279 rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whol e-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix"
278 280
279 description = "SOLINK $sofile" 281 description = "SOLINK $sofile"
280 282
281 # Use this for {{output_extension}} expansions unless a target manually 283 # Use this for {{output_extension}} expansions unless a target manually
282 # overrides it (in which case {{output_extension}} will be what the target 284 # overrides it (in which case {{output_extension}} will be what the target
283 # specifies). 285 # specifies).
284 default_output_extension = default_shlib_extension 286 default_output_extension = default_shlib_extension
285 287
288 default_output_dir = "{{root_out_dir}}"
289 if (shlib_subdir != ".") {
290 default_output_dir += "/$shlib_subdir"
291 }
292
286 output_prefix = "lib" 293 output_prefix = "lib"
287 294
288 # Since the above commands only updates the .TOC file when it changes, ask 295 # Since the above commands only updates the .TOC file when it changes, ask
289 # Ninja to check if the timestamp actually changed to know if downstream 296 # Ninja to check if the timestamp actually changed to know if downstream
290 # dependencies should be recompiled. 297 # dependencies should be recompiled.
291 restat = true 298 restat = true
292 299
293 # Tell GN about the output files. It will link to the sofile but use the 300 # Tell GN about the output files. It will link to the sofile but use the
294 # tocfile for dependency management. 301 # tocfile for dependency management.
295 outputs = [ 302 outputs = [
296 sofile, 303 sofile,
297 tocfile, 304 tocfile,
298 ] 305 ]
299 if (sofile != unstripped_sofile) { 306 if (sofile != unstripped_sofile) {
300 outputs += [ unstripped_sofile ] 307 outputs += [ unstripped_sofile ]
301 } 308 }
302 link_output = sofile 309 link_output = sofile
303 depend_output = tocfile 310 depend_output = tocfile
304 } 311 }
305 312
306 tool("solink_module") { 313 tool("solink_module") {
307 soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so". 314 soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so".
308 sofile = "{{root_out_dir}}/$soname" # Possibly including toolchain dir. 315 sofile = "{{output_dir}}/$soname"
309 if (shlib_subdir != ".") {
310 sofile = "{{root_out_dir}}/$shlib_subdir/$soname"
311 }
312 rspfile = sofile + ".rsp" 316 rspfile = sofile + ".rsp"
313 317
314 unstripped_sofile = sofile
315 if (defined(invoker.strip)) { 318 if (defined(invoker.strip)) {
316 unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" 319 unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname"
320 } else {
321 unstripped_sofile = sofile
317 } 322 }
318 323
319 command = "$ld -shared {{ldflags}} -o \"$unstripped_sofile\" -Wl,-soname=\ "$soname\" @\"$rspfile\"" 324 command = "$ld -shared {{ldflags}} -o \"$unstripped_sofile\" -Wl,-soname=\ "$soname\" @\"$rspfile\""
320 325
321 if (defined(invoker.strip)) { 326 if (defined(invoker.strip)) {
322 strip_command = "${invoker.strip} --strip-unneeded -o \"$sofile\" \"$uns tripped_sofile\"" 327 strip_command = "${invoker.strip} --strip-unneeded -o \"$sofile\" \"$uns tripped_sofile\""
323 command += " && " + strip_command 328 command += " && " + strip_command
324 } 329 }
325 rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whol e-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix" 330 rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whol e-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix"
326 331
327 description = "SOLINK_MODULE $sofile" 332 description = "SOLINK_MODULE $sofile"
328 333
329 # Use this for {{output_extension}} expansions unless a target manually 334 # Use this for {{output_extension}} expansions unless a target manually
330 # overrides it (in which case {{output_extension}} will be what the target 335 # overrides it (in which case {{output_extension}} will be what the target
331 # specifies). 336 # specifies).
332 if (defined(invoker.loadable_module_extension)) { 337 if (defined(invoker.loadable_module_extension)) {
333 default_output_extension = invoker.loadable_module_extension 338 default_output_extension = invoker.loadable_module_extension
334 } else { 339 } else {
335 default_output_extension = default_shlib_extension 340 default_output_extension = default_shlib_extension
336 } 341 }
337 342
343 default_output_dir = "{{root_out_dir}}"
344 if (shlib_subdir != ".") {
345 default_output_dir += "/$shlib_subdir"
346 }
347
338 output_prefix = "lib" 348 output_prefix = "lib"
339 349
340 outputs = [ 350 outputs = [
341 sofile, 351 sofile,
342 ] 352 ]
343 if (sofile != unstripped_sofile) { 353 if (sofile != unstripped_sofile) {
344 outputs += [ unstripped_sofile ] 354 outputs += [ unstripped_sofile ]
345 } 355 }
346 } 356 }
347 357
348 tool("link") { 358 tool("link") {
349 exename = "{{target_output_name}}{{output_extension}}" 359 exename = "{{target_output_name}}{{output_extension}}"
350 outfile = "{{root_out_dir}}/$exename" 360 outfile = "{{output_dir}}/$exename"
351 rspfile = "$outfile.rsp" 361 rspfile = "$outfile.rsp"
352 unstripped_outfile = outfile 362 unstripped_outfile = outfile
353 363
354 # Use this for {{output_extension}} expansions unless a target manually 364 # Use this for {{output_extension}} expansions unless a target manually
355 # overrides it (in which case {{output_extension}} will be what the target 365 # overrides it (in which case {{output_extension}} will be what the target
356 # specifies). 366 # specifies).
357 default_output_extension = default_executable_extension 367 default_output_extension = default_executable_extension
358 368
369 default_output_dir = "{{root_out_dir}}"
370
359 if (defined(invoker.strip)) { 371 if (defined(invoker.strip)) {
360 unstripped_outfile = "{{root_out_dir}}/exe.unstripped/$exename" 372 unstripped_outfile = "{{root_out_dir}}/exe.unstripped/$exename"
361 } 373 }
362 374
363 command = "$ld {{ldflags}} -o \"$unstripped_outfile\" -Wl,--start-group @\ "$rspfile\" {{solibs}} -Wl,--end-group $libs_section_prefix {{libs}} $libs_secti on_postfix" 375 command = "$ld {{ldflags}} -o \"$unstripped_outfile\" -Wl,--start-group @\ "$rspfile\" {{solibs}} -Wl,--end-group $libs_section_prefix {{libs}} $libs_secti on_postfix"
364 if (defined(invoker.strip)) { 376 if (defined(invoker.strip)) {
365 link_wrapper = 377 link_wrapper =
366 rebase_path("//build/toolchain/gcc_link_wrapper.py", root_build_dir) 378 rebase_path("//build/toolchain/gcc_link_wrapper.py", root_build_dir)
367 command = "$python_path \"$link_wrapper\" --strip=\"${invoker.strip}\" - -unstripped-file=\"$unstripped_outfile\" --output=\"$outfile\" -- $command" 379 command = "$python_path \"$link_wrapper\" --strip=\"${invoker.strip}\" - -unstripped-file=\"$unstripped_outfile\" --output=\"$outfile\" -- $command"
368 } 380 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 nm = "${toolprefix}nm" 471 nm = "${toolprefix}nm"
460 472
461 forward_variables_from(invoker, 473 forward_variables_from(invoker,
462 [ 474 [
463 "toolchain_cpu", 475 "toolchain_cpu",
464 "toolchain_os", 476 "toolchain_os",
465 "use_gold", 477 "use_gold",
466 ]) 478 ])
467 } 479 }
468 } 480 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698