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