Chromium Code Reviews| Index: build/toolchain/gcc_toolchain.gni |
| diff --git a/build/toolchain/gcc_toolchain.gni b/build/toolchain/gcc_toolchain.gni |
| index 14a66e40f2771860589c1a828c56fbc98976f301..92e1fc184f53c1cfbb214111f97850fabc2fb11d 100644 |
| --- a/build/toolchain/gcc_toolchain.gni |
| +++ b/build/toolchain/gcc_toolchain.gni |
| @@ -30,13 +30,37 @@ concurrent_links = exec_script("get_concurrent_links.py", [], "value") |
| # - solink_libs_section_prefix |
| # - solink_libs_section_postfix |
| # Same as libs_section_{pre,post}fix except used for solink instead of link. |
| +# - link_outputs |
| +# The content of this array, if specified, will be added to the list of |
| +# outputs from the link command. This can be useful in conjunction with |
| +# the post_link parameter. |
| +# - post_link |
| +# The content of this string, if specified, will be appended to the link |
| +# command. |
|
Roland McGrath
2015/08/28 19:59:37
This sounds like it's for arguments to be added to
Dirk Pranke
2015/08/28 20:05:33
That makes sense. I will fix it.
|
| # - post_solink |
| # The content of this string, if specified, will be appended to the solink |
| # command. |
|
Dirk Pranke
2015/08/28 20:45:30
turns out post_solink isn't actually implemented o
|
| # - deps |
| # Just forwarded to the toolchain definition. |
| +# - executable_extension |
| +# If this string is specified it will be used for the file extension |
| +# for an executable, rather than using no extension; targets will |
| +# still be able to override the extension using the output_extension |
| +# variable. |
| # - is_clang |
| # Whether to use clang instead of gcc. |
| +# - is_component_build |
| +# Whether to forceably enable or disable component builds for this |
|
Roland McGrath
2015/08/28 19:59:37
"forcibly"
Dirk Pranke
2015/08/28 20:05:33
Acknowledged.
|
| +# toolchain; if not specified, the toolchain will inherit the |
| +# default setting. |
| +# - rebuild_define |
| +# The contents of this string, if specified, will be passed as a #define |
| +# to the toolchain. It can be used to force recompiles whenever a |
| +# toolchain is updated. |
| +# - shlib_extension |
| +# If this string is specified it will be used for the file extension |
| +# for a shared library, rather than default value specified in |
| +# toolchain.gni |
| # - strip |
| # Location of the strip executable. When specified, strip will be run on |
| # all shared libraries and executables as they are built. The pre-stripped |
| @@ -52,6 +76,14 @@ template("gcc_toolchain") { |
| assert(defined(invoker.toolchain_os), |
| "gcc_toolchain() must specify a \"toolchain_os\"") |
| + # This define changes when the toolchain changes, forcing a rebuild. |
| + # Nothing should ever use this define. |
| + if (defined(invoker.rebuild_define)) { |
| + rebuild_string = "-D" + invoker.rebuild_define + " " |
| + } else { |
| + rebuild_string = "" |
| + } |
| + |
| # We can't do string interpolation ($ in strings) on things with dots in |
| # them. To allow us to use $cc below, for example, we create copies of |
| # these values in our scope. |
| @@ -70,6 +102,18 @@ template("gcc_toolchain") { |
| nm = "nm" |
| } |
| + if (defined(invoker.shlib_extension)) { |
| + default_shlib_extension = invoker.shlib_extension |
| + } else { |
| + default_shlib_extension = shlib_extension |
| + } |
| + |
| + if (defined(invoker.executable_extension)) { |
| + default_executable_extension = invoker.executable_extension |
| + } else { |
| + default_executable_extension = "" |
| + } |
| + |
| # Bring these into our scope for string interpolation with default values. |
| if (defined(invoker.libs_section_prefix)) { |
| libs_section_prefix = invoker.libs_section_prefix |
| @@ -101,7 +145,7 @@ template("gcc_toolchain") { |
| tool("cc") { |
| depfile = "{{output}}.d" |
| - command = "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}" |
| + command = "$cc -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| description = "CC {{output}}" |
| outputs = [ |
| @@ -111,7 +155,7 @@ template("gcc_toolchain") { |
| tool("cxx") { |
| depfile = "{{output}}.d" |
| - command = "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} -c {{source}} -o {{output}}" |
| + command = "$cxx -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| description = "CXX {{output}}" |
| outputs = [ |
| @@ -122,7 +166,7 @@ template("gcc_toolchain") { |
| tool("asm") { |
| # For GCC we can just use the C compiler to compile assembly. |
| depfile = "{{output}}.d" |
| - command = "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}" |
| + command = "$cc -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| description = "ASM {{output}}" |
| outputs = [ |
| @@ -181,10 +225,7 @@ template("gcc_toolchain") { |
| # Use this for {{output_extension}} expansions unless a target manually |
| # overrides it (in which case {{output_extension}} will be what the target |
| # specifies). |
| - default_output_extension = shlib_extension |
| - if (defined(invoker.default_output_extension)) { |
| - default_output_extension = invoker.default_output_extension |
| - } |
| + default_output_extension = default_shlib_extension |
| output_prefix = "lib" |
| @@ -211,6 +252,12 @@ template("gcc_toolchain") { |
| outfile = "{{root_out_dir}}/$exename" |
| rspfile = "$outfile.rsp" |
| unstripped_outfile = outfile |
| + |
| + # Use this for {{output_extension}} expansions unless a target manually |
| + # overrides it (in which case {{output_extension}} will be what the target |
| + # specifies). |
| + default_output_extension = default_executable_extension |
| + |
| if (defined(invoker.strip)) { |
| unstripped_outfile = "{{root_out_dir}}/exe.unstripped/$exename" |
| } |
| @@ -221,6 +268,9 @@ template("gcc_toolchain") { |
| "${invoker.strip} --strip-unneeded -o $outfile $unstripped_outfile" |
| command += " && " + strip_command |
| } |
| + if (defined(invoker.postlink)) { |
| + command += " && " + invoker.postlink |
| + } |
| description = "LINK $outfile" |
| rspfile_content = "{{inputs}}" |
| outputs = [ |
| @@ -229,6 +279,9 @@ template("gcc_toolchain") { |
| if (outfile != unstripped_outfile) { |
| outputs += [ unstripped_outfile ] |
| } |
| + if (defined(invoker.link_outputs)) { |
| + outputs += invoker.link_outputs |
| + } |
| } |
| tool("stamp") { |
| @@ -254,6 +307,9 @@ template("gcc_toolchain") { |
| if (defined(invoker.is_clang)) { |
| is_clang = invoker.is_clang |
| } |
| + if (defined(invoker.is_component_build)) { |
| + is_component_build = invoker.is_component_build |
| + } |
| } |
| if (defined(invoker.deps)) { |