| 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/sanitizers/sanitizers.gni") | 5 import("//build/config/sanitizers/sanitizers.gni") |
| 6 import("//build/config/win/visual_studio_version.gni") | 6 import("//build/config/win/visual_studio_version.gni") |
| 7 import("//build/toolchain/goma.gni") | 7 import("//build/toolchain/goma.gni") |
| 8 import("//build/toolchain/toolchain.gni") | 8 import("//build/toolchain/toolchain.gni") |
| 9 | 9 |
| 10 # Should only be running on Windows. | 10 # Should only be running on Windows. |
| 11 assert(is_win) | 11 assert(is_win) |
| 12 | 12 |
| 13 declare_args() { |
| 14 # Set to true to use lld, the LLVM linker. |
| 15 use_lld = false |
| 16 } |
| 17 |
| 13 # Setup the Visual Studio state. | 18 # Setup the Visual Studio state. |
| 14 # | 19 # |
| 15 # Its arguments are the VS path and the compiler wrapper tool. It will write | 20 # Its arguments are the VS path and the compiler wrapper tool. It will write |
| 16 # "environment.x86" and "environment.x64" to the build directory and return a | 21 # "environment.x86" and "environment.x64" to the build directory and return a |
| 17 # list to us. | 22 # list to us. |
| 18 gyp_win_tool_path = | 23 gyp_win_tool_path = |
| 19 rebase_path("//tools/gyp/pylib/gyp/win_tool.py", root_build_dir) | 24 rebase_path("//tools/gyp/pylib/gyp/win_tool.py", root_build_dir) |
| 20 | 25 |
| 21 if (use_goma) { | 26 if (use_goma) { |
| 22 goma_prefix = "$goma_dir/gomacc.exe " | 27 goma_prefix = "$goma_dir/gomacc.exe " |
| (...skipping 27 matching lines...) Expand all Loading... |
| 50 # environment: File name of environment file. | 55 # environment: File name of environment file. |
| 51 template("msvc_toolchain") { | 56 template("msvc_toolchain") { |
| 52 if (defined(invoker.concurrent_links)) { | 57 if (defined(invoker.concurrent_links)) { |
| 53 concurrent_links = invoker.concurrent_links | 58 concurrent_links = invoker.concurrent_links |
| 54 } | 59 } |
| 55 | 60 |
| 56 env = invoker.environment | 61 env = invoker.environment |
| 57 | 62 |
| 58 cl = invoker.cl | 63 cl = invoker.cl |
| 59 | 64 |
| 65 if (use_lld) { |
| 66 if (host_os == "win") { |
| 67 lld_link = "lld-link.exe" |
| 68 } else { |
| 69 lld_link = "lld-link" |
| 70 } |
| 71 prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", |
| 72 root_build_dir) |
| 73 |
| 74 # lld-link includes a replacement for lib.exe that can produce thin |
| 75 # archives and understands bitcode (for lto builds). |
| 76 lib = "$prefix/$lld_link /lib /llvmlibthin" |
| 77 link = "$prefix/$lld_link" |
| 78 } else { |
| 79 lib = "lib.exe" |
| 80 link = "link.exe" |
| 81 } |
| 82 |
| 60 toolchain(target_name) { | 83 toolchain(target_name) { |
| 61 # Make these apply to all tools below. | 84 # Make these apply to all tools below. |
| 62 lib_switch = "" | 85 lib_switch = "" |
| 63 lib_dir_switch = "/LIBPATH:" | 86 lib_dir_switch = "/LIBPATH:" |
| 64 | 87 |
| 65 # Object files go in this directory. | 88 # Object files go in this directory. |
| 66 object_subdir = "{{target_out_dir}}/{{label_name}}" | 89 object_subdir = "{{target_out_dir}}/{{label_name}}" |
| 67 | 90 |
| 68 tool("cc") { | 91 tool("cc") { |
| 69 rspfile = "{{output}}.rsp" | 92 rspfile = "{{output}}.rsp" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 } | 138 } |
| 116 command = "$python_path gyp-win-tool asm-wrapper $env $ml {{defines}} {{in
clude_dirs}} {{asmflags}} /c /Fo{{output}} {{source}}" | 139 command = "$python_path gyp-win-tool asm-wrapper $env $ml {{defines}} {{in
clude_dirs}} {{asmflags}} /c /Fo{{output}} {{source}}" |
| 117 description = "ASM {{output}}" | 140 description = "ASM {{output}}" |
| 118 outputs = [ | 141 outputs = [ |
| 119 "$object_subdir/{{source_name_part}}.obj", | 142 "$object_subdir/{{source_name_part}}.obj", |
| 120 ] | 143 ] |
| 121 } | 144 } |
| 122 | 145 |
| 123 tool("alink") { | 146 tool("alink") { |
| 124 rspfile = "{{output}}.rsp" | 147 rspfile = "{{output}}.rsp" |
| 125 command = "$python_path gyp-win-tool link-wrapper $env False lib.exe /nolo
go /ignore:4221 /OUT:{{output}} @$rspfile" | 148 command = "$python_path gyp-win-tool link-wrapper $env False $lib /nologo
/ignore:4221 /OUT:{{output}} @$rspfile" |
| 126 description = "LIB {{output}}" | 149 description = "LIB {{output}}" |
| 127 outputs = [ | 150 outputs = [ |
| 128 # Ignore {{output_extension}} and always use .lib, there's no reason to | 151 # Ignore {{output_extension}} and always use .lib, there's no reason to |
| 129 # allow targets to override this extension on Windows. | 152 # allow targets to override this extension on Windows. |
| 130 "{{target_out_dir}}/{{target_output_name}}.lib", | 153 "{{target_out_dir}}/{{target_output_name}}.lib", |
| 131 ] | 154 ] |
| 132 default_output_extension = ".lib" | 155 default_output_extension = ".lib" |
| 133 | 156 |
| 134 # The use of inputs_newline is to work around a fixed per-line buffer | 157 # The use of inputs_newline is to work around a fixed per-line buffer |
| 135 # size in the linker. | 158 # size in the linker. |
| 136 rspfile_content = "{{inputs_newline}}" | 159 rspfile_content = "{{inputs_newline}}" |
| 137 } | 160 } |
| 138 | 161 |
| 139 tool("solink") { | 162 tool("solink") { |
| 140 dllname = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" #
e.g. foo.dll | 163 dllname = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" #
e.g. foo.dll |
| 141 libname = "${dllname}.lib" # e.g. foo.dll.lib | 164 libname = "${dllname}.lib" # e.g. foo.dll.lib |
| 142 rspfile = "${dllname}.rsp" | 165 rspfile = "${dllname}.rsp" |
| 143 | 166 |
| 144 link_command = "$python_path gyp-win-tool link-wrapper $env False link.exe
/nologo /IMPLIB:$libname /DLL /OUT:$dllname /PDB:${dllname}.pdb @$rspfile" | 167 link_command = "$python_path gyp-win-tool link-wrapper $env False $link /n
ologo /IMPLIB:$libname /DLL /OUT:$dllname /PDB:${dllname}.pdb @$rspfile" |
| 145 | 168 |
| 146 # TODO(brettw) support manifests | 169 # TODO(brettw) support manifests |
| 147 #manifest_command = "$python_path gyp-win-tool manifest-wrapper $env mt.ex
e -nologo -manifest $manifests -out:${dllname}.manifest" | 170 #manifest_command = "$python_path gyp-win-tool manifest-wrapper $env mt.ex
e -nologo -manifest $manifests -out:${dllname}.manifest" |
| 148 #command = "cmd /c $link_command && $manifest_command" | 171 #command = "cmd /c $link_command && $manifest_command" |
| 149 command = link_command | 172 command = link_command |
| 150 | 173 |
| 151 default_output_extension = ".dll" | 174 default_output_extension = ".dll" |
| 152 description = "LINK(DLL) {{output}}" | 175 description = "LINK(DLL) {{output}}" |
| 153 outputs = [ | 176 outputs = [ |
| 154 dllname, | 177 dllname, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 165 | 188 |
| 166 # The use of inputs_newline is to work around a fixed per-line buffer | 189 # The use of inputs_newline is to work around a fixed per-line buffer |
| 167 # size in the linker. | 190 # size in the linker. |
| 168 rspfile_content = "{{libs}} {{solibs}} {{inputs_newline}} {{ldflags}}" | 191 rspfile_content = "{{libs}} {{solibs}} {{inputs_newline}} {{ldflags}}" |
| 169 } | 192 } |
| 170 | 193 |
| 171 tool("solink_module") { | 194 tool("solink_module") { |
| 172 dllname = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" #
e.g. foo.dll | 195 dllname = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" #
e.g. foo.dll |
| 173 rspfile = "${dllname}.rsp" | 196 rspfile = "${dllname}.rsp" |
| 174 | 197 |
| 175 link_command = "$python_path gyp-win-tool link-wrapper $env False link.exe
/nologo /DLL /OUT:$dllname /PDB:${dllname}.pdb @$rspfile" | 198 link_command = "$python_path gyp-win-tool link-wrapper $env False $link /n
ologo /DLL /OUT:$dllname /PDB:${dllname}.pdb @$rspfile" |
| 176 | 199 |
| 177 command = link_command | 200 command = link_command |
| 178 | 201 |
| 179 default_output_extension = ".dll" | 202 default_output_extension = ".dll" |
| 180 description = "LINK_MODULE(DLL) {{output}}" | 203 description = "LINK_MODULE(DLL) {{output}}" |
| 181 outputs = [ | 204 outputs = [ |
| 182 dllname, | 205 dllname, |
| 183 ] | 206 ] |
| 184 | 207 |
| 185 # The use of inputs_newline is to work around a fixed per-line buffer | 208 # The use of inputs_newline is to work around a fixed per-line buffer |
| 186 # size in the linker. | 209 # size in the linker. |
| 187 rspfile_content = "{{libs}} {{solibs}} {{inputs_newline}} {{ldflags}}" | 210 rspfile_content = "{{libs}} {{solibs}} {{inputs_newline}} {{ldflags}}" |
| 188 } | 211 } |
| 189 | 212 |
| 190 tool("link") { | 213 tool("link") { |
| 191 rspfile = "{{output}}.rsp" | 214 rspfile = "{{output}}.rsp" |
| 192 | 215 |
| 193 link_command = "$python_path gyp-win-tool link-wrapper $env False link.exe
/nologo /OUT:{{output}} /PDB:{{output}}.pdb @$rspfile" | 216 link_command = "$python_path gyp-win-tool link-wrapper $env False $link /n
ologo /OUT:{{output}} /PDB:{{output}}.pdb @$rspfile" |
| 194 | 217 |
| 195 # TODO(brettw) support manifests | 218 # TODO(brettw) support manifests |
| 196 #manifest_command = "$python_path gyp-win-tool manifest-wrapper $env mt.ex
e -nologo -manifest $manifests -out:{{output}}.manifest" | 219 #manifest_command = "$python_path gyp-win-tool manifest-wrapper $env mt.ex
e -nologo -manifest $manifests -out:{{output}}.manifest" |
| 197 #command = "cmd /c $link_command && $manifest_command" | 220 #command = "cmd /c $link_command && $manifest_command" |
| 198 command = link_command | 221 command = link_command |
| 199 | 222 |
| 200 default_output_extension = ".exe" | 223 default_output_extension = ".exe" |
| 201 description = "LINK {{output}}" | 224 description = "LINK {{output}}" |
| 202 outputs = [ | 225 outputs = [ |
| 203 "{{root_out_dir}}/{{target_output_name}}{{output_extension}}", | 226 "{{root_out_dir}}/{{target_output_name}}{{output_extension}}", |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 361 | 384 |
| 362 msvc_toolchain("winrt_x64") { | 385 msvc_toolchain("winrt_x64") { |
| 363 environment = "environment.winrt_x64" | 386 environment = "environment.winrt_x64" |
| 364 cl = "${goma_prefix}\"${vc_bin_dir}/cl.exe\"" | 387 cl = "${goma_prefix}\"${vc_bin_dir}/cl.exe\"" |
| 365 is_clang = false | 388 is_clang = false |
| 366 | 389 |
| 367 toolchain_cpu = "x64" | 390 toolchain_cpu = "x64" |
| 368 toolchain_os = current_os | 391 toolchain_os = current_os |
| 369 } | 392 } |
| 370 } | 393 } |
| OLD | NEW |