| 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 | 
|---|