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

Side by Side Diff: build/toolchain/gcc_toolchain.gni

Issue 2667853004: Remove dependency on scan-build wrapper script for Clang analysis builds. (Closed)
Patch Set: WIP clang on windows Created 3 years, 9 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 | « build/toolchain/clang_static_analyzer_wrapper.py ('k') | build/toolchain/nacl/BUILD.gn » ('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/android/config.gni") 5 import("//build/config/android/config.gni")
6 import("//build/config/clang/clang.gni") 6 import("//build/config/clang/clang.gni")
7 import("//build/config/nacl/config.gni") 7 import("//build/config/nacl/config.gni")
8 import("//build/config/sanitizers/sanitizers.gni") 8 import("//build/config/sanitizers/sanitizers.gni")
9 import("//build/config/v8_target_cpu.gni") 9 import("//build/config/v8_target_cpu.gni")
10 import("//build/toolchain/cc_wrapper.gni") 10 import("//build/toolchain/cc_wrapper.gni")
11 import("//build/toolchain/clang_static_analyzer.gni") 11 import("//build/toolchain/clang_static_analyzer.gni")
12 import("//build/toolchain/goma.gni") 12 import("//build/toolchain/goma.gni")
13 import("//build/toolchain/toolchain.gni") 13 import("//build/toolchain/toolchain.gni")
14 14
15 # Path to the Clang static analysis wrapper script.
16 analyzer_wrapper =
17 rebase_path("//build/toolchain/clang_static_analyzer_wrapper.py",
18 root_build_dir)
19
15 # This template defines a toolchain for something that works like gcc 20 # This template defines a toolchain for something that works like gcc
16 # (including clang). 21 # (including clang).
17 # 22 #
18 # It requires the following variables specifying the executables to run: 23 # It requires the following variables specifying the executables to run:
19 # - ar 24 # - ar
20 # - cc 25 # - cc
21 # - cxx 26 # - cxx
22 # - ld 27 # - ld
23 # 28 #
24 # Optional parameters that control the tools: 29 # Optional parameters that control the tools:
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 if (defined(toolchain_args.use_goma)) { 124 if (defined(toolchain_args.use_goma)) {
120 toolchain_uses_goma = toolchain_args.use_goma 125 toolchain_uses_goma = toolchain_args.use_goma
121 } else { 126 } else {
122 toolchain_uses_goma = use_goma 127 toolchain_uses_goma = use_goma
123 } 128 }
124 if (defined(toolchain_args.cc_wrapper)) { 129 if (defined(toolchain_args.cc_wrapper)) {
125 toolchain_cc_wrapper = toolchain_args.cc_wrapper 130 toolchain_cc_wrapper = toolchain_args.cc_wrapper
126 } else { 131 } else {
127 toolchain_cc_wrapper = cc_wrapper 132 toolchain_cc_wrapper = cc_wrapper
128 } 133 }
134 assert(!(toolchain_cc_wrapper != "" && toolchain_uses_goma),
135 "Goma and cc_wrapper can't be used together.")
129 136
130 # Compute the compiler prefix. 137 # When the invoker has explicitly overridden use_goma or cc_wrapper in the
138 # toolchain args, use those values, otherwise default to the global one.
139 # This works because the only reasonable override that toolchains might
140 # supply for these values are to force-disable them.
131 if (toolchain_uses_goma) { 141 if (toolchain_uses_goma) {
132 assert(toolchain_cc_wrapper == "", 142 goma_path = "$goma_dir/gomacc"
133 "Goma and cc_wrapper can't be used together.") 143
134 compiler_prefix = "$goma_dir/gomacc " 144 # Use the static analysis script if static analysis is turned on
135 } else if (toolchain_cc_wrapper != "") { 145 # AND the tool has not opted out by setting
136 compiler_prefix = toolchain_cc_wrapper + " " 146 # 'is_clang_static_analysis_supported' to false.
147 if (is_clang && use_clang_static_analyzer &&
148 (!defined(invoker.is_clang_analysis_supported) ||
149 invoker.is_clang_analysis_supported)) {
150 compiler_prefix = "${analyzer_wrapper} ${goma_path} "
151
152 # Create a distinct variable for "asm", since analysis runs pass
153 # a bunch of flags to clang/clang++ that are nonsensical on assembler
154 # runs.
155 asm = "${goma_path} ${invoker.cc}"
156 } else {
157 compiler_prefix = "${goma_path} "
158 }
137 } else { 159 } else {
138 compiler_prefix = "" 160 if (is_clang && use_clang_static_analyzer &&
161 (!defined(invoker.is_clang_analysis_supported) ||
162 invoker.is_clang_analysis_supported)) {
163 compiler_prefix = "${analyzer_wrapper} "
164 asm = invoker.cc
165 } else {
166 compiler_prefix = "${toolchain_cc_wrapper} "
167 }
139 } 168 }
140 169
141 cc = compiler_prefix + invoker.cc 170 cc = compiler_prefix + invoker.cc
142 cxx = compiler_prefix + invoker.cxx 171 cxx = compiler_prefix + invoker.cxx
143 ar = invoker.ar 172 ar = invoker.ar
144 ld = invoker.ld 173 ld = invoker.ld
174 if (!defined(asm)) {
175 asm = cc
176 }
145 if (defined(invoker.readelf)) { 177 if (defined(invoker.readelf)) {
146 readelf = invoker.readelf 178 readelf = invoker.readelf
147 } else { 179 } else {
148 readelf = "readelf" 180 readelf = "readelf"
149 } 181 }
150 if (defined(invoker.nm)) { 182 if (defined(invoker.nm)) {
151 nm = invoker.nm 183 nm = invoker.nm
152 } else { 184 } else {
153 nm = "nm" 185 nm = "nm"
154 } 186 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 compile_wrapper = 288 compile_wrapper =
257 rebase_path("//build/toolchain/gcc_compile_wrapper.py", 289 rebase_path("//build/toolchain/gcc_compile_wrapper.py",
258 root_build_dir) 290 root_build_dir)
259 command = "$python_path \"$compile_wrapper\" --resource-whitelist=\"{{ou tput}}.whitelist\" $command" 291 command = "$python_path \"$compile_wrapper\" --resource-whitelist=\"{{ou tput}}.whitelist\" $command"
260 } 292 }
261 } 293 }
262 294
263 tool("asm") { 295 tool("asm") {
264 # For GCC we can just use the C compiler to compile assembly. 296 # For GCC we can just use the C compiler to compile assembly.
265 depfile = "{{output}}.d" 297 depfile = "{{output}}.d"
266 command = "$cc -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_di rs}} {{asmflags}} -c {{source}} -o {{output}}" 298 command = "$asm -MMD -MF $depfile ${rebuild_string}{{defines}} {{include_d irs}} {{asmflags}} -c {{source}} -o {{output}}"
267 depsformat = "gcc" 299 depsformat = "gcc"
268 description = "ASM {{output}}" 300 description = "ASM {{output}}"
269 outputs = [ 301 outputs = [
270 "$object_subdir/{{source_name_part}}.o", 302 "$object_subdir/{{source_name_part}}.o",
271 ] 303 ]
272 } 304 }
273 305
274 tool("alink") { 306 tool("alink") {
275 rspfile = "{{output}}.rsp" 307 rspfile = "{{output}}.rsp"
276 whitelist_flag = " " 308 whitelist_flag = " "
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 toolprefix = invoker.toolprefix 543 toolprefix = invoker.toolprefix
512 } else { 544 } else {
513 toolprefix = "" 545 toolprefix = ""
514 } 546 }
515 547
516 gcc_toolchain(target_name) { 548 gcc_toolchain(target_name) {
517 prefix = rebase_path("$clang_base_path/bin", root_build_dir) 549 prefix = rebase_path("$clang_base_path/bin", root_build_dir)
518 cc = "$prefix/clang" 550 cc = "$prefix/clang"
519 cxx = "$prefix/clang++" 551 cxx = "$prefix/clang++"
520 ld = cxx 552 ld = cxx
521
522 if (use_clang_static_analyzer) {
523 # Static analysis isn't supported under GOMA. See crbug.com/687245
524 # for progress on this issue.
525 assert(!use_goma, "'use_clang_static_analyzer' cannot be used with GOMA.")
526
527 # Call "ccc-analyzer" or "c++-analyzer" instead of directly calling Clang.
528 # |wrapper_tool| sets the environment variables which are read by the
529 # analyzer tools.
530 analyzer_wrapper =
531 rebase_path("//build/toolchain/clang_static_analyzer_wrapper.py",
532 root_build_dir)
533 cc = analyzer_wrapper + " --clang-cc-path=${cc} --analyzer=" +
534 rebase_path("//third_party/scan-build/src/libexec/ccc-analyzer",
535 root_build_dir)
536 cxx = analyzer_wrapper + " --clang-cxx-path=${cxx} --analyzer=" +
537 rebase_path("//third_party/scan-build/src/libexec/c++-analyzer",
538 root_build_dir)
539 }
540
541 readelf = "${toolprefix}readelf" 553 readelf = "${toolprefix}readelf"
542 ar = "${toolprefix}ar" 554 ar = "${toolprefix}ar"
543 nm = "${toolprefix}nm" 555 nm = "${toolprefix}nm"
544 556
545 forward_variables_from(invoker, 557 forward_variables_from(invoker,
546 [ 558 [
559 "strip",
560 "is_clang_analysis_supported",
547 "enable_linker_map", 561 "enable_linker_map",
548 "strip",
549 ]) 562 ])
550 563
551 toolchain_args = { 564 toolchain_args = {
552 if (defined(invoker.toolchain_args)) { 565 if (defined(invoker.toolchain_args)) {
553 forward_variables_from(invoker.toolchain_args, "*") 566 forward_variables_from(invoker.toolchain_args, "*")
554 } 567 }
555 is_clang = true 568 is_clang = true
556 } 569 }
557 } 570 }
558 } 571 }
OLDNEW
« no previous file with comments | « build/toolchain/clang_static_analyzer_wrapper.py ('k') | build/toolchain/nacl/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698