| OLD | NEW |
| 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/ccache.gni") | 7 import("//build/toolchain/ccache.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 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 ] | 205 ] |
| 206 } | 206 } |
| 207 | 207 |
| 208 tool("alink") { | 208 tool("alink") { |
| 209 rspfile = "{{output}}.rsp" | 209 rspfile = "{{output}}.rsp" |
| 210 arflags = "" | 210 arflags = "" |
| 211 if (is_cfi && invoker.toolchain_os != "nacl") { | 211 if (is_cfi && invoker.toolchain_os != "nacl") { |
| 212 gold_plugin_path = rebase_path( | 212 gold_plugin_path = rebase_path( |
| 213 "//third_party/llvm-build/Release+Asserts/lib/LLVMgold.so", | 213 "//third_party/llvm-build/Release+Asserts/lib/LLVMgold.so", |
| 214 root_build_dir) | 214 root_build_dir) |
| 215 arflags = "--plugin $gold_plugin_path" | 215 arflags = "--plugin \"$gold_plugin_path\"" |
| 216 } | 216 } |
| 217 | 217 |
| 218 # This needs a Python script to avoid using simple sh features in this | 218 # This needs a Python script to avoid using simple sh features in this |
| 219 # command, in case the host does not use a POSIX shell (e.g. Windows). | 219 # command, in case the host does not use a POSIX shell (e.g. compiling |
| 220 ar_wrapper = rebase_path("//build/toolchain/gcc_ar_wrapper.py") | 220 # POSIX-like toolchains such as NaCl on Windows). |
| 221 command = "$python_path $ar_wrapper --output={{output}} --ar=$ar $arflags
rcs @$rspfile" | 221 ar_wrapper = |
| 222 rebase_path("//build/toolchain/gcc_ar_wrapper.py", root_build_dir) |
| 223 command = "$python_path \"$ar_wrapper\" --output={{output}} --ar=$ar $arfl
ags rcs @\"$rspfile\"" |
| 222 description = "AR {{output}}" | 224 description = "AR {{output}}" |
| 223 rspfile_content = "{{inputs}}" | 225 rspfile_content = "{{inputs}}" |
| 224 outputs = [ | 226 outputs = [ |
| 225 "{{target_out_dir}}/{{target_output_name}}{{output_extension}}", | 227 "{{target_out_dir}}/{{target_output_name}}{{output_extension}}", |
| 226 ] | 228 ] |
| 227 default_output_extension = ".a" | 229 default_output_extension = ".a" |
| 228 output_prefix = "lib" | 230 output_prefix = "lib" |
| 229 } | 231 } |
| 230 | 232 |
| 231 tool("solink") { | 233 tool("solink") { |
| 232 soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so". | 234 soname = "{{target_output_name}}{{output_extension}}" # e.g. "libfoo.so". |
| 233 sofile = "{{root_out_dir}}/$soname" # Possibly including toolchain dir. | 235 sofile = "{{root_out_dir}}/$soname" # Possibly including toolchain dir. |
| 234 if (shlib_subdir != ".") { | 236 if (shlib_subdir != ".") { |
| 235 sofile = "{{root_out_dir}}/$shlib_subdir/$soname" | 237 sofile = "{{root_out_dir}}/$shlib_subdir/$soname" |
| 236 } | 238 } |
| 237 rspfile = sofile + ".rsp" | 239 rspfile = sofile + ".rsp" |
| 238 | 240 |
| 239 unstripped_sofile = sofile | 241 unstripped_sofile = sofile |
| 240 if (defined(invoker.strip)) { | 242 if (defined(invoker.strip)) { |
| 241 unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" | 243 unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" |
| 242 } | 244 } |
| 243 | 245 |
| 244 # These variables are not built into GN but are helpers that | 246 # These variables are not built into GN but are helpers that |
| 245 # implement (1) linking to produce a .so, (2) extracting the symbols | 247 # implement (1) linking to produce a .so, (2) extracting the symbols |
| 246 # from that file (3) if the extracted list differs from the existing | 248 # from that file (3) if the extracted list differs from the existing |
| 247 # .TOC file, overwrite it, otherwise, don't change it. | 249 # .TOC file, overwrite it, otherwise, don't change it. |
| 248 tocfile = sofile + ".TOC" | 250 tocfile = sofile + ".TOC" |
| 249 | 251 |
| 250 link_command = "$ld -shared {{ldflags}} -o $unstripped_sofile -Wl,-soname=
$soname @$rspfile" | 252 link_command = "$ld -shared {{ldflags}} -o \"$unstripped_sofile\" -Wl,-son
ame=\"$soname\" @\"$rspfile\"" |
| 251 | 253 |
| 252 assert(defined(readelf), "to solink you must have a readelf") | 254 assert(defined(readelf), "to solink you must have a readelf") |
| 253 assert(defined(nm), "to solink you must have an nm") | 255 assert(defined(nm), "to solink you must have an nm") |
| 254 strip_switch = "" | 256 strip_switch = "" |
| 255 if (defined(invoker.strip)) { | 257 if (defined(invoker.strip)) { |
| 256 strip_switch = "--strip=${invoker.strip}" | 258 strip_switch = "--strip=${invoker.strip}" |
| 257 } | 259 } |
| 258 | 260 |
| 259 # This needs a Python script to avoid using a complex shell command | 261 # This needs a Python script to avoid using a complex shell command |
| 260 # requiring sh control structures, pipelines, and POSIX utilities. | 262 # requiring sh control structures, pipelines, and POSIX utilities. |
| 261 # The host might not have a POSIX shell and utilities (e.g. Windows). | 263 # The host might not have a POSIX shell and utilities (e.g. Windows). |
| 262 solink_wrapper = rebase_path("//build/toolchain/gcc_solink_wrapper.py") | 264 solink_wrapper = rebase_path("//build/toolchain/gcc_solink_wrapper.py") |
| 263 command = "$python_path $solink_wrapper --readelf=$readelf --nm=$nm $strip
_switch --sofile=$unstripped_sofile --tocfile=$tocfile --output=$sofile -- $link
_command" | 265 command = "$python_path $solink_wrapper --readelf=$readelf --nm=$nm $strip
_switch --sofile=\"$unstripped_sofile\" --tocfile=\"$tocfile\" --output=\"$sofil
e\" -- $link_command" |
| 264 | 266 |
| 265 rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whol
e-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix" | 267 rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whol
e-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix" |
| 266 | 268 |
| 267 description = "SOLINK $sofile" | 269 description = "SOLINK $sofile" |
| 268 | 270 |
| 269 # Use this for {{output_extension}} expansions unless a target manually | 271 # Use this for {{output_extension}} expansions unless a target manually |
| 270 # overrides it (in which case {{output_extension}} will be what the target | 272 # overrides it (in which case {{output_extension}} will be what the target |
| 271 # specifies). | 273 # specifies). |
| 272 default_output_extension = default_shlib_extension | 274 default_output_extension = default_shlib_extension |
| 273 | 275 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 297 if (shlib_subdir != ".") { | 299 if (shlib_subdir != ".") { |
| 298 sofile = "{{root_out_dir}}/$shlib_subdir/$soname" | 300 sofile = "{{root_out_dir}}/$shlib_subdir/$soname" |
| 299 } | 301 } |
| 300 rspfile = sofile + ".rsp" | 302 rspfile = sofile + ".rsp" |
| 301 | 303 |
| 302 unstripped_sofile = sofile | 304 unstripped_sofile = sofile |
| 303 if (defined(invoker.strip)) { | 305 if (defined(invoker.strip)) { |
| 304 unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" | 306 unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" |
| 305 } | 307 } |
| 306 | 308 |
| 307 command = "$ld -shared {{ldflags}} -o $unstripped_sofile -Wl,-soname=$sona
me @$rspfile" | 309 command = "$ld -shared {{ldflags}} -o \"$unstripped_sofile\" -Wl,-soname=\
"$soname\" @\"$rspfile\"" |
| 308 | 310 |
| 309 if (defined(invoker.strip)) { | 311 if (defined(invoker.strip)) { |
| 310 strip_command = | 312 strip_command = "${invoker.strip} --strip-unneeded -o \"$sofile\" \"$uns
tripped_sofile\"" |
| 311 "${invoker.strip} --strip-unneeded -o $sofile $unstripped_sofile" | |
| 312 command += " && " + strip_command | 313 command += " && " + strip_command |
| 313 } | 314 } |
| 314 rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whol
e-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix" | 315 rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whol
e-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix" |
| 315 | 316 |
| 316 description = "SOLINK_MODULE $sofile" | 317 description = "SOLINK_MODULE $sofile" |
| 317 | 318 |
| 318 # Use this for {{output_extension}} expansions unless a target manually | 319 # Use this for {{output_extension}} expansions unless a target manually |
| 319 # overrides it (in which case {{output_extension}} will be what the target | 320 # overrides it (in which case {{output_extension}} will be what the target |
| 320 # specifies). | 321 # specifies). |
| 321 default_output_extension = default_shlib_extension | 322 default_output_extension = default_shlib_extension |
| (...skipping 16 matching lines...) Expand all Loading... |
| 338 | 339 |
| 339 # Use this for {{output_extension}} expansions unless a target manually | 340 # Use this for {{output_extension}} expansions unless a target manually |
| 340 # overrides it (in which case {{output_extension}} will be what the target | 341 # overrides it (in which case {{output_extension}} will be what the target |
| 341 # specifies). | 342 # specifies). |
| 342 default_output_extension = default_executable_extension | 343 default_output_extension = default_executable_extension |
| 343 | 344 |
| 344 if (defined(invoker.strip)) { | 345 if (defined(invoker.strip)) { |
| 345 unstripped_outfile = "{{root_out_dir}}/exe.unstripped/$exename" | 346 unstripped_outfile = "{{root_out_dir}}/exe.unstripped/$exename" |
| 346 } | 347 } |
| 347 | 348 |
| 348 command = "$ld {{ldflags}} -o $unstripped_outfile -Wl,--start-group @$rspf
ile {{solibs}} -Wl,--end-group $libs_section_prefix {{libs}} $libs_section_postf
ix" | 349 command = "$ld {{ldflags}} -o \"$unstripped_outfile\" -Wl,--start-group @\
"$rspfile\" {{solibs}} -Wl,--end-group $libs_section_prefix {{libs}} $libs_secti
on_postfix" |
| 349 if (defined(invoker.strip)) { | 350 if (defined(invoker.strip)) { |
| 350 link_wrapper = rebase_path("//build/toolchain/gcc_link_wrapper.py") | 351 link_wrapper = |
| 351 command = "$python_path $link_wrapper --strip=${invoker.strip} --unstrip
ped-file=$unstripped_outfile --output=$outfile -- $command" | 352 rebase_path("//build/toolchain/gcc_link_wrapper.py", root_build_dir) |
| 353 command = "$python_path \"$link_wrapper\" --strip=${invoker.strip} --uns
tripped-file=\"$unstripped_outfile\" --output=\"$outfile\" -- $command" |
| 352 } | 354 } |
| 353 description = "LINK $outfile" | 355 description = "LINK $outfile" |
| 354 rspfile_content = "{{inputs}}" | 356 rspfile_content = "{{inputs}}" |
| 355 outputs = [ | 357 outputs = [ |
| 356 outfile, | 358 outfile, |
| 357 ] | 359 ] |
| 358 if (outfile != unstripped_outfile) { | 360 if (outfile != unstripped_outfile) { |
| 359 outputs += [ unstripped_outfile ] | 361 outputs += [ unstripped_outfile ] |
| 360 } | 362 } |
| 361 if (defined(invoker.link_outputs)) { | 363 if (defined(invoker.link_outputs)) { |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 nm = "${toolprefix}nm" | 443 nm = "${toolprefix}nm" |
| 442 | 444 |
| 443 forward_variables_from(invoker, | 445 forward_variables_from(invoker, |
| 444 [ | 446 [ |
| 445 "toolchain_cpu", | 447 "toolchain_cpu", |
| 446 "toolchain_os", | 448 "toolchain_os", |
| 447 "use_gold", | 449 "use_gold", |
| 448 ]) | 450 ]) |
| 449 } | 451 } |
| 450 } | 452 } |
| OLD | NEW |