Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: build/toolchain/win/BUILD.gn

Issue 1724533002: clang/gn/win: Stop running the compiler through `ninja -t msvc -e environment.foo` (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: poc Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | build/toolchain/win/setup_toolchain.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 # environment: File name of environment file. 55 # environment: File name of environment file.
56 template("msvc_toolchain") { 56 template("msvc_toolchain") {
57 if (defined(invoker.concurrent_links)) { 57 if (defined(invoker.concurrent_links)) {
58 concurrent_links = invoker.concurrent_links 58 concurrent_links = invoker.concurrent_links
59 } 59 }
60 60
61 env = invoker.environment 61 env = invoker.environment
62 62
63 cl = invoker.cl 63 cl = invoker.cl
64 64
65 # If possible, pass system includes as flags to the compiler. When that's
66 # not possible, load a full environment file (containing %INCLUDE% and
67 # %PATH%) -- e.g. 32-bit MSVS builds require %PATH% to be set and just passing
68 # in a list of include directories isn't enough.
69 if (defined(invoker.sys_include_flags)) {
70 env_wrapper = ""
71
72 # -nostdlibinc so that clang-cl _only_ looks in sys_include_flags, instead
scottmg 2016/02/26 19:55:22 -nostdlibinc doesn't appear to be mentioned in the
Nico 2016/02/26 19:58:22 Yes, clang-cl doesn't expose that flag yet. It's n
73 # of in addition to eventual headers from an installed MSVC.
74 # Note trailing space.
75 sys_include_flags = "-isystem ..\..\third_party\llvm-build\Release+Asserts\l ib\clang\3.9.0\include ${invoker.sys_include_flags} "
scottmg 2016/02/26 19:55:22 I guess we should have an assert(invoker.is_clang)
Nico 2016/02/26 19:58:22 Yes, if I go ahead with that I'll add that. But it
76 } else {
77 # clang-cl doesn't need this env hoop, so omit it there.
78 assert(!invoker.is_clang)
79 env_wrapper = "ninja -t msvc -e $env -- " # Note trailing space.
80 sys_include_flags = ""
81 }
82
65 toolchain(target_name) { 83 toolchain(target_name) {
66 # Make these apply to all tools below. 84 # Make these apply to all tools below.
67 lib_switch = "" 85 lib_switch = ""
68 lib_dir_switch = "/LIBPATH:" 86 lib_dir_switch = "/LIBPATH:"
69 87
70 # Object files go in this directory. 88 # Object files go in this directory.
71 object_subdir = "{{target_out_dir}}/{{label_name}}" 89 object_subdir = "{{target_out_dir}}/{{label_name}}"
72 90
73 tool("cc") { 91 tool("cc") {
74 rspfile = "{{output}}.rsp" 92 rspfile = "{{output}}.rsp"
75 precompiled_header_type = "msvc" 93 precompiled_header_type = "msvc"
76 pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb" 94 pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb"
77 command = "ninja -t msvc -e $env -- $cl /nologo /showIncludes /FC @$rspfil e /c {{source}} /Fo{{output}} /Fd$pdbname" 95 command = "$env_wrapper$cl /nologo /showIncludes /FC @$rspfile /c {{source }} /Fo{{output}} /Fd$pdbname"
78 depsformat = "msvc" 96 depsformat = "msvc"
79 description = "CC {{output}}" 97 description = "CC {{output}}"
80 outputs = [ 98 outputs = [
81 "$object_subdir/{{source_name_part}}.obj", 99 "$object_subdir/{{source_name_part}}.obj",
82 ] 100 ]
83 rspfile_content = "{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}" 101 rspfile_content = "$sys_include_flags{{defines}} {{include_dirs}} {{cflags }} {{cflags_c}}"
84 } 102 }
85 103
86 tool("cxx") { 104 tool("cxx") {
87 rspfile = "{{output}}.rsp" 105 rspfile = "{{output}}.rsp"
88 precompiled_header_type = "msvc" 106 precompiled_header_type = "msvc"
89 107
90 # The PDB name needs to be different between C and C++ compiled files. 108 # The PDB name needs to be different between C and C++ compiled files.
91 pdbname = "{{target_out_dir}}/{{label_name}}_cc.pdb" 109 pdbname = "{{target_out_dir}}/{{label_name}}_cc.pdb"
92 command = "ninja -t msvc -e $env -- $cl /nologo /showIncludes /FC @$rspfil e /c {{source}} /Fo{{output}} /Fd$pdbname" 110 command = "$env_wrapper$cl /nologo /showIncludes /FC @$rspfile /c {{source }} /Fo{{output}} /Fd$pdbname"
93 depsformat = "msvc" 111 depsformat = "msvc"
94 description = "CXX {{output}}" 112 description = "CXX {{output}}"
95 outputs = [ 113 outputs = [
96 "$object_subdir/{{source_name_part}}.obj", 114 "$object_subdir/{{source_name_part}}.obj",
97 ] 115 ]
98 rspfile_content = "{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}" 116 rspfile_content = "$sys_include_flags{{defines}} {{include_dirs}} {{cflags }} {{cflags_cc}}"
99 } 117 }
100 118
101 tool("rc") { 119 tool("rc") {
102 command = "$python_path gyp-win-tool rc-wrapper $env rc.exe {{defines}} {{ include_dirs}} /fo{{output}} {{source}}" 120 command = "$python_path gyp-win-tool rc-wrapper $env rc.exe {{defines}} {{ include_dirs}} /fo{{output}} {{source}}"
103 outputs = [ 121 outputs = [
104 "$object_subdir/{{source_name_part}}.res", 122 "$object_subdir/{{source_name_part}}.res",
105 ] 123 ]
106 description = "RC {{output}}" 124 description = "RC {{output}}"
107 } 125 }
108 126
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 "is_clang", 250 "is_clang",
233 "is_component_build", 251 "is_component_build",
234 ]) 252 ])
235 253
236 # This value needs to be passed through unchanged. 254 # This value needs to be passed through unchanged.
237 host_toolchain = host_toolchain 255 host_toolchain = host_toolchain
238 } 256 }
239 } 257 }
240 } 258 }
241 259
260 if (is_clang) {
261 sys_include_prefix = "-isystem"
262 } else {
263 # MSVC doesn't have the concept of system headers.
264 sys_include_prefix = "/I"
265 }
266
242 if (host_os == "win") { 267 if (host_os == "win") {
243 clang_cl = "clang-cl.exe" 268 clang_cl = "clang-cl.exe"
244 } else { 269 } else {
245 clang_cl = "clang-cl" 270 clang_cl = "clang-cl"
246 } 271 }
247 272
248 # 32-bit toolchains. Only define these when the target architecture is 32-bit 273 # 32-bit toolchains. Only define these when the target architecture is 32-bit
249 # since we don't do any 32-bit cross compiles when targeting 64-bit (the 274 # since we don't do any 32-bit cross compiles when targeting 64-bit (the
250 # build does generate some 64-bit stuff from 32-bit target builds). 275 # build does generate some 64-bit stuff from 32-bit target builds).
251 if (target_cpu == "x86") { 276 if (target_cpu == "x86") {
252 x86_toolchain_data = exec_script("setup_toolchain.py", 277 x86_toolchain_data = exec_script("setup_toolchain.py",
253 [ 278 [
254 visual_studio_path, 279 visual_studio_path,
255 gyp_win_tool_path, 280 gyp_win_tool_path,
256 windows_sdk_path, 281 windows_sdk_path,
257 visual_studio_runtime_dirs, 282 visual_studio_runtime_dirs,
258 "x86", 283 "x86",
284 "${sys_include_prefix}",
259 ], 285 ],
260 "scope") 286 "scope")
261 287
262 msvc_toolchain("x86") { 288 msvc_toolchain("x86") {
263 environment = "environment.x86" 289 environment = "environment.x86"
264 toolchain_cpu = "x86" 290 toolchain_cpu = "x86"
265 cl = "${goma_prefix}\"${x86_toolchain_data.vc_bin_dir}/cl.exe\"" 291 cl = "${goma_prefix}\"${x86_toolchain_data.vc_bin_dir}/cl.exe\""
266 is_clang = false 292 is_clang = false
267 } 293 }
268 294
269 msvc_toolchain("clang_x86") { 295 msvc_toolchain("clang_x86") {
270 environment = "environment.x86" 296 environment = "environment.x86"
271 toolchain_cpu = "x86" 297 toolchain_cpu = "x86"
272 prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", 298 prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin",
273 root_build_dir) 299 root_build_dir)
274 cl = "${goma_prefix}$prefix/${clang_cl}" 300 cl = "${goma_prefix}$prefix/${clang_cl}"
275 toolchain_os = "win" 301 toolchain_os = "win"
276 is_clang = true 302 is_clang = true
303 sys_include_flags = "${x86_toolchain_data.include_flags}"
277 } 304 }
278 } 305 }
279 306
280 # 64-bit toolchains. 307 # 64-bit toolchains.
281 x64_toolchain_data = exec_script("setup_toolchain.py", 308 x64_toolchain_data = exec_script("setup_toolchain.py",
282 [ 309 [
283 visual_studio_path, 310 visual_studio_path,
284 gyp_win_tool_path, 311 gyp_win_tool_path,
285 windows_sdk_path, 312 windows_sdk_path,
286 visual_studio_runtime_dirs, 313 visual_studio_runtime_dirs,
287 "x64", 314 "x64",
315 "${sys_include_prefix}",
288 ], 316 ],
289 "scope") 317 "scope")
290 318
291 template("win_x64_toolchains") { 319 template("win_x64_toolchains") {
292 # TODO(mcgrathr): These assignments are only required because of 320 # TODO(mcgrathr): These assignments are only required because of
293 # crbug.com/395883. Drop them if that ever gets fixed in GN. 321 # crbug.com/395883. Drop them if that ever gets fixed in GN.
294 concurrent_links = invoker.concurrent_links 322 concurrent_links = invoker.concurrent_links
295 goma_prefix = invoker.goma_prefix 323 goma_prefix = invoker.goma_prefix
296 x64_toolchain_data = invoker.x64_toolchain_data 324 x64_toolchain_data = invoker.x64_toolchain_data
297 clang_cl = invoker.clang_cl 325 clang_cl = invoker.clang_cl
298 326
299 msvc_toolchain(target_name) { 327 msvc_toolchain(target_name) {
300 environment = "environment.x64" 328 environment = "environment.x64"
301 toolchain_cpu = "x64" 329 toolchain_cpu = "x64"
302 cl = "${goma_prefix}\"${x64_toolchain_data.vc_bin_dir}/cl.exe\"" 330 cl = "${goma_prefix}\"${x64_toolchain_data.vc_bin_dir}/cl.exe\""
303 is_clang = false 331 is_clang = false
304 332
305 forward_variables_from(invoker, [ "is_component_build" ]) 333 forward_variables_from(invoker, [ "is_component_build" ])
306 } 334 }
307 335
308 msvc_toolchain("clang_" + target_name) { 336 msvc_toolchain("clang_" + target_name) {
309 environment = "environment.x64" 337 environment = "environment.x64"
310 toolchain_cpu = "x64" 338 toolchain_cpu = "x64"
311 prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin", 339 prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin",
312 root_build_dir) 340 root_build_dir)
313 cl = "${goma_prefix}$prefix/${clang_cl}" 341 cl = "${goma_prefix}$prefix/${clang_cl}"
314 toolchain_os = "win" 342 toolchain_os = "win"
315 is_clang = true 343 is_clang = true
344 sys_include_flags = "${x64_toolchain_data.include_flags}"
316 345
317 forward_variables_from(invoker, [ "is_component_build" ]) 346 forward_variables_from(invoker, [ "is_component_build" ])
318 } 347 }
319 } 348 }
320 349
321 win_x64_toolchains("x64") { 350 win_x64_toolchains("x64") {
322 # TODO(mcgrathr): These assignments are only required because of 351 # TODO(mcgrathr): These assignments are only required because of
323 # crbug.com/395883. Drop them if that ever gets fixed in GN. 352 # crbug.com/395883. Drop them if that ever gets fixed in GN.
324 concurrent_links = concurrent_links 353 concurrent_links = concurrent_links
325 goma_prefix = goma_prefix 354 goma_prefix = goma_prefix
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 389
361 msvc_toolchain("winrt_x64") { 390 msvc_toolchain("winrt_x64") {
362 environment = "environment.winrt_x64" 391 environment = "environment.winrt_x64"
363 cl = "${goma_prefix}\"${vc_bin_dir}/cl.exe\"" 392 cl = "${goma_prefix}\"${vc_bin_dir}/cl.exe\""
364 is_clang = false 393 is_clang = false
365 394
366 toolchain_cpu = "x64" 395 toolchain_cpu = "x64"
367 toolchain_os = current_os 396 toolchain_os = current_os
368 } 397 }
369 } 398 }
OLDNEW
« no previous file with comments | « no previous file | build/toolchain/win/setup_toolchain.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698