Index: build/toolchain/gcc_toolchain.gni |
diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni |
index f38b5a3bfd50ef2fc47581e3dd9a826ecd3ddc82..4490de73afd7566b98eded60d0d8e60ff8bbff11 100644 |
--- a/build/toolchain/gcc_toolchain.gni |
+++ b/build/toolchain/gcc_toolchain.gni |
@@ -22,9 +22,9 @@ if (allow_posix_link_time_opt || is_cfi) { |
# (including clang). |
# |
# It requires the following variables specifying the executables to run: |
+# - ar |
# - cc |
# - cxx |
-# - ar |
# - ld |
# and the following which is used in the toolchain_args |
# - toolchain_cpu (What "current_cpu" should be set to when invoking a |
@@ -34,6 +34,18 @@ if (allow_posix_link_time_opt || is_cfi) { |
# |
# Optional parameters that control the tools: |
# |
+# - extra_cflags |
+# Extra flags to be appended when compiling C files (but not C++ files). |
+# - extra_cppflags |
+# Extra flags to be appended when compiling both C and C++ files. "CPP" |
+# stands for "C PreProcessor" in this context, although it can be |
+# used for non-preprocessor flags as well. Not to be confused with |
+# "CXX" (which follows). |
+# - extra_cxxflags |
+# Extra flags to be appended when compiling C++ files (but not C files). |
+# - extra_ldflags |
+# Extra flags to be appended when linking |
+# |
# - libs_section_prefix |
# - libs_section_postfix |
# The contents of these strings, if specified, will be placed around |
@@ -94,9 +106,9 @@ if (allow_posix_link_time_opt || is_cfi) { |
# toolchain has a custom link step that is not actually using Gold. |
template("gcc_toolchain") { |
toolchain(target_name) { |
+ assert(defined(invoker.ar), "gcc_toolchain() must specify a \"ar\" value") |
assert(defined(invoker.cc), "gcc_toolchain() must specify a \"cc\" value") |
assert(defined(invoker.cxx), "gcc_toolchain() must specify a \"cxx\" value") |
- assert(defined(invoker.ar), "gcc_toolchain() must specify a \"ar\" value") |
assert(defined(invoker.ld), "gcc_toolchain() must specify a \"ld\" value") |
assert(defined(invoker.toolchain_cpu), |
"gcc_toolchain() must specify a \"toolchain_cpu\"") |
@@ -180,6 +192,30 @@ template("gcc_toolchain") { |
solink_libs_section_postfix = "" |
} |
+ if (defined(invoker.extra_cflags) && invoker.extra_cflags != "") { |
+ extra_cflags = " " + invoker.extra_cflags |
+ } else { |
+ extra_cflags = "" |
+ } |
+ |
+ if (defined(invoker.extra_cppflags) && invoker.extra_cppflags != "") { |
+ extra_cppflags = " " + invoker.extra_cppflags |
+ } else { |
+ extra_cppflags = "" |
+ } |
+ |
+ if (defined(invoker.extra_cxxflags) && invoker.extra_cxxflags != "") { |
+ extra_cxxflags = " " + invoker.extra_cxxflags |
+ } else { |
+ extra_cxxflags = "" |
+ } |
+ |
+ if (defined(invoker.extra_ldflags) && invoker.extra_ldflags != "") { |
+ extra_ldflags = " " + invoker.extra_ldflags |
+ } else { |
+ extra_ldflags = "" |
+ } |
+ |
# These library switches can apply to all tools below. |
lib_switch = "-l" |
lib_dir_switch = "-L" |
@@ -189,7 +225,7 @@ template("gcc_toolchain") { |
tool("cc") { |
depfile = "{{output}}.d" |
- command = "$cc -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}" |
+ command = "$cc -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}${extra_cppflags}${extra_cflags} -c {{source}} -o {{output}}" |
depsformat = "gcc" |
description = "CC {{output}}" |
outputs = [ |
@@ -199,7 +235,7 @@ template("gcc_toolchain") { |
tool("cxx") { |
depfile = "{{output}}.d" |
- command = "$cxx -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} -c {{source}} -o {{output}}" |
+ command = "$cxx -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}${extra_cppflags}${extra_cxxflags} -c {{source}} -o {{output}}" |
depsformat = "gcc" |
description = "CXX {{output}}" |
outputs = [ |
@@ -257,7 +293,7 @@ template("gcc_toolchain") { |
# .TOC file, overwrite it, otherwise, don't change it. |
tocfile = sofile + ".TOC" |
- link_command = "$ld -shared {{ldflags}} -o \"$unstripped_sofile\" -Wl,-soname=\"$soname\" @\"$rspfile\"" |
+ link_command = "$ld -shared {{ldflags}}${extra_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") |
@@ -317,7 +353,7 @@ template("gcc_toolchain") { |
unstripped_sofile = sofile |
} |
- command = "$ld -shared {{ldflags}} -o \"$unstripped_sofile\" -Wl,-soname=\"$soname\" @\"$rspfile\"" |
+ command = "$ld -shared {{ldflags}}${extra_ldflags} -o \"$unstripped_sofile\" -Wl,-soname=\"$soname\" @\"$rspfile\"" |
if (defined(invoker.strip)) { |
strip_command = "${invoker.strip} --strip-unneeded -o \"$sofile\" \"$unstripped_sofile\"" |
@@ -368,7 +404,7 @@ template("gcc_toolchain") { |
unstripped_outfile = "{{root_out_dir}}/exe.unstripped/$exename" |
} |
- command = "$ld {{ldflags}} -o \"$unstripped_outfile\" -Wl,--start-group @\"$rspfile\" {{solibs}} -Wl,--end-group $libs_section_prefix {{libs}} $libs_section_postfix" |
+ command = "$ld {{ldflags}}${extra_ldflags} -o \"$unstripped_outfile\" -Wl,--start-group @\"$rspfile\" {{solibs}} -Wl,--end-group $libs_section_prefix {{libs}} $libs_section_postfix" |
if (defined(invoker.strip)) { |
link_wrapper = |
rebase_path("//build/toolchain/gcc_link_wrapper.py", root_build_dir) |
@@ -428,6 +464,9 @@ template("gcc_toolchain") { |
if (defined(invoker.use_gold)) { |
use_gold = invoker.use_gold |
} |
+ if (defined(invoker.use_sysroot)) { |
+ use_sysroot = invoker.use_sysroot |
+ } |
if (defined(invoker.clear_sanitizers) && invoker.clear_sanitizers) { |
is_asan = false |