| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |