Chromium Code Reviews| Index: build/toolchain/mac/BUILD.gn |
| diff --git a/build/toolchain/mac/BUILD.gn b/build/toolchain/mac/BUILD.gn |
| index 146744030c2e838f51fe3b71a9adc55c1e20f721..3ea247265aa12a25fbde0be8e3227653a02ad3da 100644 |
| --- a/build/toolchain/mac/BUILD.gn |
| +++ b/build/toolchain/mac/BUILD.gn |
| @@ -59,8 +59,23 @@ template("mac_toolchain") { |
| cxx = invoker.cxx |
| ld = invoker.ld |
| + # When implementing tools using Python scripts, a TOOL_VERSION=N env |
|
brettw
2016/06/17 17:29:43
I just filed https://bugs.chromium.org/p/chromium/
Robert Sesek
2016/06/17 18:07:53
Done.
|
| + # variable is placed in front of the command. The N should be incremented |
| + # whenever the script is changed, so that the build system rebuilds all |
| + # edges that utilize the script. Ideally this should be changed to use |
| + # proper input-dirty checking, but that could be expensive. Instead, use a |
| + # script to get the tool script's modification time to set as the version. |
| + # This won't cause a re-generation of GN files when the tool script changes |
| + # but it will cause edges to be marked as dirty if the ninja files are |
| + # regenerated. See https://crbug.com/619083 for details. |
| + get_tool_mtime = "get_tool_mtime.py" |
| + |
| linker_driver = |
| rebase_path("//build/toolchain/mac/linker_driver.py", root_build_dir) |
| + linker_driver = |
| + "TOOL_VERSION=" + |
| + exec_script(get_tool_mtime, [ linker_driver ], "trim string") + |
| + " $linker_driver" |
| # Make these apply to all tools below. |
| lib_switch = "-l" |
| @@ -136,7 +151,8 @@ template("mac_toolchain") { |
| tool("alink") { |
| script = |
| rebase_path("//build/toolchain/mac/filter_libtool.py", root_build_dir) |
| - command = "rm -f {{output}} && python $script libtool -static {{arflags}} -o {{output}} {{inputs}}" |
| + tool_version = exec_script(get_tool_mtime, [ script ], "trim string") |
|
sdefresne
2016/06/16 18:15:25
I'm not really sure about using exec_script becaus
Robert Sesek
2016/06/16 18:26:16
Right. I wrote that in both the comment above and
|
| + command = "rm -f {{output}} && TOOL_VERSION=$tool_version python $script libtool -static {{arflags}} -o {{output}} {{inputs}}" |
| description = "LIBTOOL-STATIC {{output}}" |
| outputs = [ |
| "{{output_dir}}/{{target_output_name}}{{output_extension}}", |
| @@ -278,13 +294,16 @@ template("mac_toolchain") { |
| tool("copy_bundle_data") { |
| _tool = rebase_path("//build/toolchain/mac/copy_bundle_data.py", |
| root_build_dir) |
| - command = "python $_tool {{source}} {{output}}" |
| + _tool_version = exec_script(get_tool_mtime, [ _tool ], "trim string") |
| + command = |
| + "TOOL_VERSION=$_tool_version python $_tool {{source}} {{output}}" |
| description = "COPY_BUNDLE_DATA {{source}} {{output}}" |
| pool = ":bundle_pool($default_toolchain)" |
| } |
| tool("compile_xcassets") { |
| _tool = rebase_path("//build/toolchain/mac/compile_xcassets.py", |
| root_build_dir) |
| + _tool_version = exec_script(get_tool_mtime, [ _tool ], "trim string") |
|
brettw
2016/06/17 17:29:43
It looks like the shortest exec_script time I see
Robert Sesek
2016/06/17 18:07:53
Done. Some numbers for reference:
Before this cha
|
| if (is_ios) { |
| _sdk_name = ios_sdk_name |
| _min_deployment_target = ios_deployment_target |
| @@ -292,7 +311,7 @@ template("mac_toolchain") { |
| _sdk_name = mac_sdk_name |
| _min_deployment_target = mac_deployment_target |
| } |
| - command = "rm -f {{output}} && " + |
| + command = "rm -f {{output}} && " + "TOOL_VERSION=$_tool_version " + |
| "python $_tool -p $_sdk_name -t $_min_deployment_target " + |
| "-o {{output}} {{inputs}}" |