| 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. |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 | 73 |
| 74 # lld-link includes a replacement for lib.exe that can produce thin | 74 # lld-link includes a replacement for lib.exe that can produce thin |
| 75 # archives and understands bitcode (for lto builds). | 75 # archives and understands bitcode (for lto builds). |
| 76 lib = "$prefix/$lld_link /lib /llvmlibthin" | 76 lib = "$prefix/$lld_link /lib /llvmlibthin" |
| 77 link = "$prefix/$lld_link" | 77 link = "$prefix/$lld_link" |
| 78 } else { | 78 } else { |
| 79 lib = "lib.exe" | 79 lib = "lib.exe" |
| 80 link = "link.exe" | 80 link = "link.exe" |
| 81 } | 81 } |
| 82 | 82 |
| 83 # If possible, pass system includes as flags to the compiler. When that's |
| 84 # not possible, load a full environment file (containing %INCLUDE% and |
| 85 # %PATH%) -- e.g. 32-bit MSVS builds require %PATH% to be set and just passing |
| 86 # in a list of include directories isn't enough. |
| 87 if (defined(invoker.sys_include_flags)) { |
| 88 env_wrapper = "" |
| 89 sys_include_flags = "${invoker.sys_include_flags} " # Note trailing space. |
| 90 } else { |
| 91 # clang-cl doesn't need this env hoop, so omit it there. |
| 92 assert(!invoker.is_clang) |
| 93 env_wrapper = "ninja -t msvc -e $env -- " # Note trailing space. |
| 94 sys_include_flags = "" |
| 95 } |
| 96 |
| 83 toolchain(target_name) { | 97 toolchain(target_name) { |
| 84 # Make these apply to all tools below. | 98 # Make these apply to all tools below. |
| 85 lib_switch = "" | 99 lib_switch = "" |
| 86 lib_dir_switch = "/LIBPATH:" | 100 lib_dir_switch = "/LIBPATH:" |
| 87 | 101 |
| 88 # Object files go in this directory. | 102 # Object files go in this directory. |
| 89 object_subdir = "{{target_out_dir}}/{{label_name}}" | 103 object_subdir = "{{target_out_dir}}/{{label_name}}" |
| 90 | 104 |
| 91 tool("cc") { | 105 tool("cc") { |
| 92 rspfile = "{{output}}.rsp" | 106 rspfile = "{{output}}.rsp" |
| 93 precompiled_header_type = "msvc" | 107 precompiled_header_type = "msvc" |
| 94 pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb" | 108 pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb" |
| 95 | 109 |
| 96 # Label names may have spaces in them so the pdbname must be quoted. The | 110 # Label names may have spaces in them so the pdbname must be quoted. The |
| 97 # source and output don't need to be quoted because GN knows they're a | 111 # source and output don't need to be quoted because GN knows they're a |
| 98 # full file name and will quote automatically when necessary. | 112 # full file name and will quote automatically when necessary. |
| 99 command = "ninja -t msvc -e $env -- $cl /nologo /showIncludes /FC @$rspfil
e /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" | 113 command = "$env_wrapper$cl /nologo /showIncludes /FC @$rspfile /c {{source
}} /Fo{{output}} /Fd\"$pdbname\"" |
| 100 depsformat = "msvc" | 114 depsformat = "msvc" |
| 101 description = "CC {{output}}" | 115 description = "CC {{output}}" |
| 102 outputs = [ | 116 outputs = [ |
| 103 "$object_subdir/{{source_name_part}}.obj", | 117 "$object_subdir/{{source_name_part}}.obj", |
| 104 ] | 118 ] |
| 105 rspfile_content = "{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}" | 119 rspfile_content = "$sys_include_flags{{defines}} {{include_dirs}} {{cflags
}} {{cflags_c}}" |
| 106 } | 120 } |
| 107 | 121 |
| 108 tool("cxx") { | 122 tool("cxx") { |
| 109 rspfile = "{{output}}.rsp" | 123 rspfile = "{{output}}.rsp" |
| 110 precompiled_header_type = "msvc" | 124 precompiled_header_type = "msvc" |
| 111 | 125 |
| 112 # The PDB name needs to be different between C and C++ compiled files. | 126 # The PDB name needs to be different between C and C++ compiled files. |
| 113 pdbname = "{{target_out_dir}}/{{label_name}}_cc.pdb" | 127 pdbname = "{{target_out_dir}}/{{label_name}}_cc.pdb" |
| 114 | 128 |
| 115 # See comment in CC tool about quoting. | 129 # See comment in CC tool about quoting. |
| 116 command = "ninja -t msvc -e $env -- $cl /nologo /showIncludes /FC @$rspfil
e /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" | 130 command = "$env_wrapper$cl /nologo /showIncludes /FC @$rspfile /c {{source
}} /Fo{{output}} /Fd\"$pdbname\"" |
| 117 depsformat = "msvc" | 131 depsformat = "msvc" |
| 118 description = "CXX {{output}}" | 132 description = "CXX {{output}}" |
| 119 outputs = [ | 133 outputs = [ |
| 120 "$object_subdir/{{source_name_part}}.obj", | 134 "$object_subdir/{{source_name_part}}.obj", |
| 121 ] | 135 ] |
| 122 rspfile_content = "{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}" | 136 rspfile_content = "$sys_include_flags{{defines}} {{include_dirs}} {{cflags
}} {{cflags_cc}}" |
| 123 } | 137 } |
| 124 | 138 |
| 125 tool("rc") { | 139 tool("rc") { |
| 126 command = "$python_path gyp-win-tool rc-wrapper $env rc.exe {{defines}} {{
include_dirs}} /fo{{output}} {{source}}" | 140 command = "$python_path gyp-win-tool rc-wrapper $env rc.exe {{defines}} {{
include_dirs}} /fo{{output}} {{source}}" |
| 127 outputs = [ | 141 outputs = [ |
| 128 "$object_subdir/{{source_name_part}}.res", | 142 "$object_subdir/{{source_name_part}}.res", |
| 129 ] | 143 ] |
| 130 description = "RC {{output}}" | 144 description = "RC {{output}}" |
| 131 } | 145 } |
| 132 | 146 |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 "is_clang", | 262 "is_clang", |
| 249 "is_component_build", | 263 "is_component_build", |
| 250 ]) | 264 ]) |
| 251 | 265 |
| 252 # This value needs to be passed through unchanged. | 266 # This value needs to be passed through unchanged. |
| 253 host_toolchain = host_toolchain | 267 host_toolchain = host_toolchain |
| 254 } | 268 } |
| 255 } | 269 } |
| 256 } | 270 } |
| 257 | 271 |
| 272 if (is_clang) { |
| 273 sys_include_prefix = "-imsvc" |
| 274 } else { |
| 275 # MSVC doesn't have the concept of system headers. |
| 276 sys_include_prefix = "/I" |
| 277 } |
| 278 |
| 258 if (host_os == "win") { | 279 if (host_os == "win") { |
| 259 clang_cl = "clang-cl.exe" | 280 clang_cl = "clang-cl.exe" |
| 260 } else { | 281 } else { |
| 261 clang_cl = "clang-cl" | 282 clang_cl = "clang-cl" |
| 262 } | 283 } |
| 263 | 284 |
| 264 # 32-bit toolchains. Only define these when the target architecture is 32-bit | 285 # 32-bit toolchains. Only define these when the target architecture is 32-bit |
| 265 # since we don't do any 32-bit cross compiles when targeting 64-bit (the | 286 # since we don't do any 32-bit cross compiles when targeting 64-bit (the |
| 266 # build does generate some 64-bit stuff from 32-bit target builds). | 287 # build does generate some 64-bit stuff from 32-bit target builds). |
| 267 if (target_cpu == "x86") { | 288 if (target_cpu == "x86") { |
| 268 x86_toolchain_data = exec_script("setup_toolchain.py", | 289 x86_toolchain_data = exec_script("setup_toolchain.py", |
| 269 [ | 290 [ |
| 270 visual_studio_path, | 291 visual_studio_path, |
| 271 gyp_win_tool_path, | 292 gyp_win_tool_path, |
| 272 windows_sdk_path, | 293 windows_sdk_path, |
| 273 visual_studio_runtime_dirs, | 294 visual_studio_runtime_dirs, |
| 274 "x86", | 295 "x86", |
| 296 "${sys_include_prefix}", |
| 275 ], | 297 ], |
| 276 "scope") | 298 "scope") |
| 277 | 299 |
| 278 msvc_toolchain("x86") { | 300 msvc_toolchain("x86") { |
| 279 environment = "environment.x86" | 301 environment = "environment.x86" |
| 280 toolchain_cpu = "x86" | 302 toolchain_cpu = "x86" |
| 281 cl = "${goma_prefix}\"${x86_toolchain_data.vc_bin_dir}/cl.exe\"" | 303 cl = "${goma_prefix}\"${x86_toolchain_data.vc_bin_dir}/cl.exe\"" |
| 282 is_clang = false | 304 is_clang = false |
| 283 } | 305 } |
| 284 | 306 |
| 285 msvc_toolchain("clang_x86") { | 307 msvc_toolchain("clang_x86") { |
| 286 environment = "environment.x86" | 308 environment = "environment.x86" |
| 287 toolchain_cpu = "x86" | 309 toolchain_cpu = "x86" |
| 288 prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", | 310 prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", |
| 289 root_build_dir) | 311 root_build_dir) |
| 290 cl = "${goma_prefix}$prefix/${clang_cl}" | 312 cl = "${goma_prefix}$prefix/${clang_cl}" |
| 291 toolchain_os = "win" | 313 toolchain_os = "win" |
| 292 is_clang = true | 314 is_clang = true |
| 315 sys_include_flags = "${x86_toolchain_data.include_flags}" |
| 293 } | 316 } |
| 294 } | 317 } |
| 295 | 318 |
| 296 # 64-bit toolchains. | 319 # 64-bit toolchains. |
| 297 x64_toolchain_data = exec_script("setup_toolchain.py", | 320 x64_toolchain_data = exec_script("setup_toolchain.py", |
| 298 [ | 321 [ |
| 299 visual_studio_path, | 322 visual_studio_path, |
| 300 gyp_win_tool_path, | 323 gyp_win_tool_path, |
| 301 windows_sdk_path, | 324 windows_sdk_path, |
| 302 visual_studio_runtime_dirs, | 325 visual_studio_runtime_dirs, |
| 303 "x64", | 326 "x64", |
| 327 "${sys_include_prefix}", |
| 304 ], | 328 ], |
| 305 "scope") | 329 "scope") |
| 306 | 330 |
| 307 template("win_x64_toolchains") { | 331 template("win_x64_toolchains") { |
| 308 # TODO(mcgrathr): These assignments are only required because of | 332 # TODO(mcgrathr): These assignments are only required because of |
| 309 # crbug.com/395883. Drop them if that ever gets fixed in GN. | 333 # crbug.com/395883. Drop them if that ever gets fixed in GN. |
| 310 concurrent_links = invoker.concurrent_links | 334 concurrent_links = invoker.concurrent_links |
| 311 goma_prefix = invoker.goma_prefix | 335 goma_prefix = invoker.goma_prefix |
| 312 x64_toolchain_data = invoker.x64_toolchain_data | 336 x64_toolchain_data = invoker.x64_toolchain_data |
| 313 clang_cl = invoker.clang_cl | 337 clang_cl = invoker.clang_cl |
| 314 | 338 |
| 315 msvc_toolchain(target_name) { | 339 msvc_toolchain(target_name) { |
| 316 environment = "environment.x64" | 340 environment = "environment.x64" |
| 317 toolchain_cpu = "x64" | 341 toolchain_cpu = "x64" |
| 318 cl = "${goma_prefix}\"${x64_toolchain_data.vc_bin_dir}/cl.exe\"" | 342 cl = "${goma_prefix}\"${x64_toolchain_data.vc_bin_dir}/cl.exe\"" |
| 319 is_clang = false | 343 is_clang = false |
| 320 | 344 |
| 321 forward_variables_from(invoker, [ "is_component_build" ]) | 345 forward_variables_from(invoker, [ "is_component_build" ]) |
| 322 } | 346 } |
| 323 | 347 |
| 324 msvc_toolchain("clang_" + target_name) { | 348 msvc_toolchain("clang_" + target_name) { |
| 325 environment = "environment.x64" | 349 environment = "environment.x64" |
| 326 toolchain_cpu = "x64" | 350 toolchain_cpu = "x64" |
| 327 prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", | 351 prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", |
| 328 root_build_dir) | 352 root_build_dir) |
| 329 cl = "${goma_prefix}$prefix/${clang_cl}" | 353 cl = "${goma_prefix}$prefix/${clang_cl}" |
| 330 toolchain_os = "win" | 354 toolchain_os = "win" |
| 331 is_clang = true | 355 is_clang = true |
| 356 sys_include_flags = "${x64_toolchain_data.include_flags}" |
| 332 | 357 |
| 333 forward_variables_from(invoker, [ "is_component_build" ]) | 358 forward_variables_from(invoker, [ "is_component_build" ]) |
| 334 } | 359 } |
| 335 } | 360 } |
| 336 | 361 |
| 337 win_x64_toolchains("x64") { | 362 win_x64_toolchains("x64") { |
| 338 # TODO(mcgrathr): These assignments are only required because of | 363 # TODO(mcgrathr): These assignments are only required because of |
| 339 # crbug.com/395883. Drop them if that ever gets fixed in GN. | 364 # crbug.com/395883. Drop them if that ever gets fixed in GN. |
| 340 concurrent_links = concurrent_links | 365 concurrent_links = concurrent_links |
| 341 goma_prefix = goma_prefix | 366 goma_prefix = goma_prefix |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 | 401 |
| 377 msvc_toolchain("winrt_x64") { | 402 msvc_toolchain("winrt_x64") { |
| 378 environment = "environment.winrt_x64" | 403 environment = "environment.winrt_x64" |
| 379 cl = "${goma_prefix}\"${vc_bin_dir}/cl.exe\"" | 404 cl = "${goma_prefix}\"${vc_bin_dir}/cl.exe\"" |
| 380 is_clang = false | 405 is_clang = false |
| 381 | 406 |
| 382 toolchain_cpu = "x64" | 407 toolchain_cpu = "x64" |
| 383 toolchain_os = current_os | 408 toolchain_os = current_os |
| 384 } | 409 } |
| 385 } | 410 } |
| OLD | NEW |