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

Unified Diff: build/toolchain/gcc_toolchain.gni

Issue 1413073005: GN: Avoid nontrivial shell commands in gcc_toolchain tools (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: pedantically correct os.remove error handling Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/toolchain/gcc_solink_wrapper.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/toolchain/gcc_toolchain.gni
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni
index 3960acb1f342de9437a7cb4fedfa688ddf49f996..6746f5e0db9ffe5bd5c804553d99c2ad20aadce4 100644
--- a/build/toolchain/gcc_toolchain.gni
+++ b/build/toolchain/gcc_toolchain.gni
@@ -214,7 +214,11 @@ template("gcc_toolchain") {
root_build_dir)
arflags = "--plugin $gold_plugin_path"
}
- command = "rm -f {{output}} && $ar rcs $arflags {{output}} @$rspfile"
+
+ # This needs a Python script to avoid using simple sh features in this
+ # command, in case the host does not use a POSIX shell (e.g. Windows).
+ ar_wrapper = rebase_path("//build/toolchain/gcc_ar_wrapper.py")
+ command = "$python_path $ar_wrapper --output={{output}} --ar=$ar $arflags rcs @$rspfile"
description = "AR {{output}}"
rspfile_content = "{{inputs}}"
outputs = [
@@ -237,25 +241,27 @@ template("gcc_toolchain") {
unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname"
}
- # These variables are not built into GN but are helpers that implement
- # (1) linking to produce a .so, (2) extracting the symbols from that file
- # to a temporary file, (3) if the temporary file has differences from the
- # existing .TOC file, overwrite it, otherwise, don't change it.
+ # These variables are not built into GN but are helpers that
+ # implement (1) linking to produce a .so, (2) extracting the symbols
+ # from that file (3) if the extracted list differs from the existing
+ # .TOC file, overwrite it, otherwise, don't change it.
tocfile = sofile + ".TOC"
- temporary_tocname = sofile + ".tmp"
link_command = "$ld -shared {{ldflags}} -o $unstripped_sofile -Wl,-soname=$soname @$rspfile"
+
assert(defined(readelf), "to solink you must have a readelf")
assert(defined(nm), "to solink you must have an nm")
- toc_command = "{ $readelf -d $unstripped_sofile | grep SONAME ; $nm -gD -f p $unstripped_sofile | cut -f1-2 -d' '; } > $temporary_tocname"
- replace_command = "if ! cmp -s $temporary_tocname $tocfile; then mv $temporary_tocname $tocfile; fi"
-
- command = "$link_command && $toc_command && $replace_command"
+ strip_switch = ""
if (defined(invoker.strip)) {
- strip_command =
- "${invoker.strip} --strip-unneeded -o $sofile $unstripped_sofile"
- command += " && " + strip_command
+ strip_switch = "--strip=${invoker.strip}"
}
+
+ # This needs a Python script to avoid using a complex shell command
+ # requiring sh control structures, pipelines, and POSIX utilities.
+ # The host might not have a POSIX shell and utilities (e.g. Windows).
+ solink_wrapper = rebase_path("//build/toolchain/gcc_solink_wrapper.py")
+ command = "$python_path $solink_wrapper --readelf=$readelf --nm=$nm $strip_switch --sofile=$unstripped_sofile --tocfile=$tocfile --output=$sofile -- $link_command"
+
rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whole-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix"
description = "SOLINK $sofile"
« no previous file with comments | « build/toolchain/gcc_solink_wrapper.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698