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

Side by Side Diff: build/config/sanitizers/BUILD.gn

Issue 2911513002: Partition libcxx build code from build/config/sanitizers (Closed)
Patch Set: Fix asan Created 3 years, 7 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
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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_overrides/build.gni") 5 import("//build_overrides/build.gni")
6 import("//build/config/chrome_build.gni") 6 import("//build/config/chrome_build.gni")
7 import("//build/config/chromecast_build.gni") 7 import("//build/config/chromecast_build.gni")
8 import("//build/config/clang/clang.gni") 8 import("//build/config/clang/clang.gni")
9 import("//build/config/sanitizers/sanitizers.gni") 9 import("//build/config/sanitizers/sanitizers.gni")
10 import("//build/toolchain/toolchain.gni") 10 import("//build/toolchain/toolchain.gni")
11 11
12 if (is_ios) { 12 if (is_ios) {
13 import("//build/config/ios/ios_sdk.gni") 13 import("//build/config/ios/ios_sdk.gni")
14 } 14 }
15 15
16 # Contains the dependencies needed for sanitizers to link into 16 # Contains the dependencies needed for sanitizers to link into
17 # executables and shared_libraries. Unconditionally depend upon 17 # executables and shared_libraries. Unconditionally depend upon
18 # "//build/config:exe_and_shlib_deps" to pull in this target. 18 # "//build/config:exe_and_shlib_deps" to pull in this target.
19 group("deps") { 19 group("deps") {
20 visibility = [ "//build/config:exe_and_shlib_deps" ] 20 visibility = [ "//build/config:exe_and_shlib_deps" ]
21 public_deps = [
22 ":deps_no_options",
23 ]
24 if (using_sanitizer) { 21 if (using_sanitizer) {
25 public_configs = [ 22 public_configs = [
26 ":sanitizer_options_link_helper", 23 ":sanitizer_options_link_helper",
27 24
28 # Even when a target removes default_sanitizer_flags, it may be depending 25 # Even when a target removes default_sanitizer_flags, it may be depending
29 # on a library that did not remove default_sanitizer_flags. Thus, we need 26 # on a library that did not remove default_sanitizer_flags. Thus, we need
30 # to add the ldflags here as well as in default_sanitizer_flags. 27 # to add the ldflags here as well as in default_sanitizer_flags.
31 ":default_sanitizer_ldflags", 28 ":default_sanitizer_ldflags",
32 ] 29 ]
33 deps = [ 30 deps = [
34 ":options_sources", 31 ":options_sources",
35 ] 32 ]
36 }
37 if (use_afl) {
38 deps += [ "//third_party/afl" ]
39 }
40 }
41
42 group("deps_no_options") {
43 if (using_sanitizer) {
44 public_configs = [
45 # Even when a target removes default_sanitizer_flags, it may be depending
46 # on a library that did not remove default_sanitizer_flags. Thus, we need
47 # to add the ldflags here as well as in default_sanitizer_flags.
48 ":default_sanitizer_ldflags",
49 ]
50 deps = []
51 public_deps = []
52
53 data = [
54 "//tools/valgrind/asan/",
55 ]
56 if (is_win) { 33 if (is_win) {
57 exe = ".exe" 34 exe = ".exe"
58 } else { 35 } else {
59 exe = "" 36 exe = ""
60 } 37 }
61 data += [ "$clang_base_path/bin/llvm-symbolizer${exe}" ] 38 data = [
39 "//tools/valgrind/asan/",
40 "$clang_base_path/bin/llvm-symbolizer${exe}",
41 ]
62 if (is_linux) { 42 if (is_linux) {
63 # llvm-symbolizer needs this. 43 # llvm-symbolizer needs this.
64 data += [ "$clang_base_path/lib/libstdc++.so.6" ] 44 data += [ "$clang_base_path/lib/libstdc++.so.6" ]
65 } 45 }
66 46
67 if (use_prebuilt_instrumented_libraries || 47 if (use_prebuilt_instrumented_libraries ||
68 use_locally_built_instrumented_libraries) { 48 use_locally_built_instrumented_libraries) {
69 deps += [ "//third_party/instrumented_libraries:deps" ] 49 deps += [ "//third_party/instrumented_libraries:deps" ]
70 } 50 }
71 if (use_custom_libcxx) {
72 public_deps += [ "//buildtools/third_party/libc++:libcxx_proxy" ]
73 data += [ "$root_out_dir/libc++.so" ]
74 }
75 51
76 # ASAN is supported on iOS but the runtime library depends on the compiler 52 # ASAN is supported on iOS but the runtime library depends on the compiler
77 # used (Chromium version of clang versus Xcode version of clang). Only copy 53 # used (Chromium version of clang versus Xcode version of clang). Only copy
78 # the ASAN runtime on iOS if building with Chromium clang. 54 # the ASAN runtime on iOS if building with Chromium clang.
79 if (is_win || is_mac || (is_ios && !use_xcode_clang)) { 55 if (is_win || is_mac || (is_ios && !use_xcode_clang)) {
80 data_deps = [ 56 data_deps = [
81 ":copy_asan_runtime", 57 ":copy_asan_runtime",
82 ] 58 ]
83 } 59 }
84 if (is_mac || (is_ios && !use_xcode_clang)) { 60 if (is_mac || (is_ios && !use_xcode_clang)) {
85 public_deps += [ ":asan_runtime_bundle_data" ] 61 public_deps = [
62 ":asan_runtime_bundle_data",
63 ]
86 } 64 }
87 } 65 }
88 } 66 }
89 67
90 if ((is_mac || is_win || (is_ios && !use_xcode_clang)) && using_sanitizer) { 68 if ((is_mac || is_win || (is_ios && !use_xcode_clang)) && using_sanitizer) {
91 if (is_mac) { 69 if (is_mac) {
92 _clang_rt_dso_path = "darwin/libclang_rt.asan_osx_dynamic.dylib" 70 _clang_rt_dso_path = "darwin/libclang_rt.asan_osx_dynamic.dylib"
93 } else if (is_ios) { 71 } else if (is_ios) {
94 _clang_rt_dso_path = "darwin/libclang_rt.asan_iossim_dynamic.dylib" 72 _clang_rt_dso_path = "darwin/libclang_rt.asan_iossim_dynamic.dylib"
95 } else if (is_win && target_cpu == "x86") { 73 } else if (is_win && target_cpu == "x86") {
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 "clang_rt.asan_dynamic-i386.lib", 246 "clang_rt.asan_dynamic-i386.lib",
269 "clang_rt.asan_dynamic_runtime_thunk-i386.lib", 247 "clang_rt.asan_dynamic_runtime_thunk-i386.lib",
270 ] 248 ]
271 } 249 }
272 } 250 }
273 } 251 }
274 } 252 }
275 253
276 config("common_sanitizer_flags") { 254 config("common_sanitizer_flags") {
277 cflags = [] 255 cflags = []
278 cflags_cc = []
279 256
280 # Sanitizers need line table info for stack traces. They don't need type info 257 # Sanitizers need line table info for stack traces. They don't need type info
281 # or variable info, so we can leave that out to speed up the build (unless 258 # or variable info, so we can leave that out to speed up the build (unless
282 # it's explicitly asked for by setting |sanitizer_keep_symbols| to true). 259 # it's explicitly asked for by setting |sanitizer_keep_symbols| to true).
283 if (using_sanitizer) { 260 if (using_sanitizer) {
284 assert(is_clang, "sanitizers only supported with clang") 261 assert(is_clang, "sanitizers only supported with clang")
285 if (!sanitizer_keep_symbols) { 262 if (!sanitizer_keep_symbols) {
286 cflags += [ "-gline-tables-only" ] 263 cflags += [ "-gline-tables-only" ]
287 } 264 }
288 265
289 cflags += [ 266 cflags += [
290 # Column info in debug data confuses Visual Studio's debugger, so don't 267 # Column info in debug data confuses Visual Studio's debugger, so don't
291 # use this by default. However, clusterfuzz needs it for good attribution 268 # use this by default. However, clusterfuzz needs it for good attribution
292 # of reports to CLs, so turn it on there. 269 # of reports to CLs, so turn it on there.
293 "-gcolumn-info", 270 "-gcolumn-info",
294 ] 271 ]
295 } 272 }
296 273
297 # Common options for AddressSanitizer, LeakSanitizer, ThreadSanitizer, 274 # Common options for AddressSanitizer, LeakSanitizer, ThreadSanitizer,
298 # MemorySanitizer and non-official CFI builds. 275 # MemorySanitizer and non-official CFI builds.
299 if (using_sanitizer || (is_cfi && !is_official_build)) { 276 if (using_sanitizer || (is_cfi && !is_official_build)) {
300 if (is_posix) { 277 if (is_posix) {
301 cflags += [ "-fno-omit-frame-pointer" ] 278 cflags += [ "-fno-omit-frame-pointer" ]
302 } else { 279 } else {
303 cflags += [ "/Oy-" ] 280 cflags += [ "/Oy-" ]
304 } 281 }
305 } 282 }
283 }
306 284
285 # TODO(thomasanderson): Move this out of build/config/sanitizers.
286 config("libcxx_flags") {
307 if (use_custom_libcxx) { 287 if (use_custom_libcxx) {
308 prefix = "//buildtools/third_party" 288 prefix = "//buildtools/third_party"
309 include = "trunk/include" 289 include = "trunk/include"
310 cflags_cc += [ 290 cflags_cc = [
311 "-nostdinc++", 291 "-nostdinc++",
312 "-isystem" + rebase_path("$prefix/libc++/$include", root_build_dir), 292 "-isystem" + rebase_path("$prefix/libc++/$include", root_build_dir),
313 "-isystem" + rebase_path("$prefix/libc++abi/$include", root_build_dir), 293 "-isystem" + rebase_path("$prefix/libc++abi/$include", root_build_dir),
314 ] 294 ]
315 } 295 }
316 } 296 }
317 297
318 config("asan_flags") { 298 config("asan_flags") {
319 cflags = [] 299 cflags = []
320 if (is_asan) { 300 if (is_asan) {
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 } 531 }
552 532
553 config("fuzzing_build_mode") { 533 config("fuzzing_build_mode") {
554 if (use_libfuzzer || use_afl) { 534 if (use_libfuzzer || use_afl) {
555 defines = [ "FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" ] 535 defines = [ "FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" ]
556 } 536 }
557 } 537 }
558 538
559 all_sanitizer_configs = [ 539 all_sanitizer_configs = [
560 ":common_sanitizer_flags", 540 ":common_sanitizer_flags",
541 ":libcxx_flags",
561 ":coverage_flags", 542 ":coverage_flags",
562 ":default_sanitizer_ldflags", 543 ":default_sanitizer_ldflags",
563 ":asan_flags", 544 ":asan_flags",
564 ":cfi_flags", 545 ":cfi_flags",
565 ":lsan_flags", 546 ":lsan_flags",
566 ":msan_flags", 547 ":msan_flags",
567 ":tsan_flags", 548 ":tsan_flags",
568 ":ubsan_flags", 549 ":ubsan_flags",
569 ":ubsan_no_recover", 550 ":ubsan_no_recover",
570 ":ubsan_null_flags", 551 ":ubsan_null_flags",
(...skipping 18 matching lines...) Expand all
589 # This allows to selectively disable ubsan_vptr, when needed. In particular, 570 # This allows to selectively disable ubsan_vptr, when needed. In particular,
590 # if some third_party code is required to be compiled without rtti, which 571 # if some third_party code is required to be compiled without rtti, which
591 # is a requirement for ubsan_vptr. 572 # is a requirement for ubsan_vptr.
592 config("default_sanitizer_flags_but_ubsan_vptr") { 573 config("default_sanitizer_flags_but_ubsan_vptr") {
593 configs = all_sanitizer_configs - [ ":ubsan_vptr_flags" ] 574 configs = all_sanitizer_configs - [ ":ubsan_vptr_flags" ]
594 } 575 }
595 576
596 config("default_sanitizer_flags_but_coverage") { 577 config("default_sanitizer_flags_but_coverage") {
597 configs = all_sanitizer_configs - [ ":coverage_flags" ] 578 configs = all_sanitizer_configs - [ ":coverage_flags" ]
598 } 579 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698