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