| 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) { |
| 13 import("//build/config/ios/ios_sdk.gni") |
| 14 } |
| 15 |
| 12 # Contains the dependencies needed for sanitizers to link into executables and | 16 # Contains the dependencies needed for sanitizers to link into executables and |
| 13 # shared_libraries. Unconditionally depend upon this target as it is empty if | 17 # shared_libraries. Unconditionally depend upon this target as it is empty if |
| 14 # |is_asan|, |is_lsan|, |is_tsan|, |is_msan| and |use_custom_libcxx| are false. | 18 # |is_asan|, |is_lsan|, |is_tsan|, |is_msan| and |use_custom_libcxx| are false. |
| 15 group("deps") { | 19 group("deps") { |
| 16 public_deps = [ | 20 public_deps = [ |
| 17 ":deps_no_options", | 21 ":deps_no_options", |
| 18 ] | 22 ] |
| 19 if (using_sanitizer) { | 23 if (using_sanitizer) { |
| 20 public_configs = [ | 24 public_configs = [ |
| 21 ":sanitizer_options_link_helper", | 25 ":sanitizer_options_link_helper", |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 } | 64 } |
| 61 | 65 |
| 62 if (use_prebuilt_instrumented_libraries || | 66 if (use_prebuilt_instrumented_libraries || |
| 63 use_locally_built_instrumented_libraries) { | 67 use_locally_built_instrumented_libraries) { |
| 64 deps += [ "//third_party/instrumented_libraries:deps" ] | 68 deps += [ "//third_party/instrumented_libraries:deps" ] |
| 65 } | 69 } |
| 66 if (use_custom_libcxx) { | 70 if (use_custom_libcxx) { |
| 67 public_deps += [ "//buildtools/third_party/libc++:libcxx_proxy" ] | 71 public_deps += [ "//buildtools/third_party/libc++:libcxx_proxy" ] |
| 68 data += [ "$root_out_dir/libc++.so" ] | 72 data += [ "$root_out_dir/libc++.so" ] |
| 69 } | 73 } |
| 70 if (is_mac || is_win) { | 74 |
| 75 # ASAN is supported on iOS but the runtime library depends on the compiler |
| 76 # used (Chromium version of clang versus Xcode version of clang). Only copy |
| 77 # the ASAN runtime on iOS if building with Chromium clang. |
| 78 if (is_win || is_mac || (is_ios && !use_xcode_clang)) { |
| 71 data_deps = [ | 79 data_deps = [ |
| 72 ":copy_asan_runtime", | 80 ":copy_asan_runtime", |
| 73 ] | 81 ] |
| 74 } | 82 } |
| 75 if (is_mac) { | 83 if (is_mac || (is_ios && !use_xcode_clang)) { |
| 76 public_deps += [ ":asan_runtime_bundle_data" ] | 84 public_deps += [ ":asan_runtime_bundle_data" ] |
| 77 } | 85 } |
| 78 } | 86 } |
| 79 } | 87 } |
| 80 | 88 |
| 81 if ((is_mac || is_win) && using_sanitizer) { | 89 if ((is_mac || is_win || (is_ios && !use_xcode_clang)) && using_sanitizer) { |
| 82 copy("copy_asan_runtime") { | 90 if (is_mac) { |
| 83 if (is_mac) { | 91 _clang_rt_dso_path = "darwin/libclang_rt.asan_osx_dynamic.dylib" |
| 84 clang_rt_dso_path = "darwin/libclang_rt.asan_osx_dynamic.dylib" | 92 } else if (is_ios) { |
| 85 } else if (is_win && target_cpu == "x86") { | 93 _clang_rt_dso_path = "darwin/libclang_rt.asan_iossim_dynamic.dylib" |
| 86 clang_rt_dso_path = "windows/clang_rt.asan_dynamic-i386.dll" | 94 } else if (is_win && target_cpu == "x86") { |
| 87 } else if (is_win && target_cpu == "x64") { | 95 _clang_rt_dso_path = "windows/clang_rt.asan_dynamic-i386.dll" |
| 88 clang_rt_dso_path = "windows/clang_rt.asan_dynamic-x86_64.dll" | 96 } else if (is_win && target_cpu == "x64") { |
| 89 } | 97 _clang_rt_dso_path = "windows/clang_rt.asan_dynamic-x86_64.dll" |
| 90 sources = [ | |
| 91 "$clang_base_path/lib/clang/$clang_version/lib/$clang_rt_dso_path", | |
| 92 ] | |
| 93 outputs = [ | |
| 94 "$root_out_dir/{{source_file_part}}", | |
| 95 ] | |
| 96 } | 98 } |
| 97 | 99 |
| 98 if (is_mac) { | 100 _clang_rt_dso_full_path = |
| 101 "$clang_base_path/lib/clang/$clang_version/lib/$_clang_rt_dso_path" |
| 102 |
| 103 if (!is_ios) { |
| 104 copy("copy_asan_runtime") { |
| 105 sources = [ |
| 106 _clang_rt_dso_full_path, |
| 107 ] |
| 108 outputs = [ |
| 109 "$root_out_dir/{{source_file_part}}", |
| 110 ] |
| 111 } |
| 112 } else { |
| 113 # On iOS, the runtime library need to be code signed (adhoc signature) |
| 114 # starting with Xcode 8, so use an action instead of a copy on iOS. |
| 115 action("copy_asan_runtime") { |
| 116 script = "//build/config/ios/codesign.py" |
| 117 sources = [ |
| 118 _clang_rt_dso_full_path, |
| 119 ] |
| 120 outputs = [ |
| 121 "$root_out_dir/" + get_path_info(sources[0], "file"), |
| 122 ] |
| 123 args = [ |
| 124 "code-sign-file", |
| 125 "--identity=" + ios_code_signing_identity, |
| 126 "--output=" + rebase_path(outputs[0], root_build_dir), |
| 127 rebase_path(sources[0], root_build_dir), |
| 128 ] |
| 129 } |
| 130 } |
| 131 |
| 132 if (is_mac || is_ios) { |
| 99 bundle_data("asan_runtime_bundle_data") { | 133 bundle_data("asan_runtime_bundle_data") { |
| 100 sources = get_target_outputs(":copy_asan_runtime") | 134 sources = get_target_outputs(":copy_asan_runtime") |
| 101 outputs = [ | 135 outputs = [ |
| 102 "{{bundle_executable_dir}}/{{source_file_part}}", | 136 "{{bundle_executable_dir}}/{{source_file_part}}", |
| 103 ] | 137 ] |
| 104 public_deps = [ | 138 public_deps = [ |
| 105 ":copy_asan_runtime", | 139 ":copy_asan_runtime", |
| 106 ] | 140 ] |
| 107 } | 141 } |
| 108 } | 142 } |
| 109 } | 143 } |
| 110 | 144 |
| 111 config("sanitizer_options_link_helper") { | 145 config("sanitizer_options_link_helper") { |
| 112 if (is_mac) { | 146 if (is_mac || is_ios) { |
| 113 ldflags = [ "-Wl,-U,_sanitizer_options_link_helper" ] | 147 ldflags = [ "-Wl,-U,_sanitizer_options_link_helper" ] |
| 114 } else if (!is_win) { | 148 } else if (!is_win) { |
| 115 ldflags = [ "-Wl,-u_sanitizer_options_link_helper" ] | 149 ldflags = [ "-Wl,-u_sanitizer_options_link_helper" ] |
| 116 } | 150 } |
| 117 } | 151 } |
| 118 | 152 |
| 119 static_library("options_sources") { | 153 static_library("options_sources") { |
| 120 # This is a static_library instead of a source_set, as it shouldn't be | 154 # This is a static_library instead of a source_set, as it shouldn't be |
| 121 # unconditionally linked into targets. | 155 # unconditionally linked into targets. |
| 122 visibility = [ | 156 visibility = [ |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 # This allows to selectively disable ubsan_vptr, when needed. In particular, | 535 # This allows to selectively disable ubsan_vptr, when needed. In particular, |
| 502 # if some third_party code is required to be compiled without rtti, which | 536 # if some third_party code is required to be compiled without rtti, which |
| 503 # is a requirement for ubsan_vptr. | 537 # is a requirement for ubsan_vptr. |
| 504 config("default_sanitizer_flags_but_ubsan_vptr") { | 538 config("default_sanitizer_flags_but_ubsan_vptr") { |
| 505 configs = all_sanitizer_configs - [ ":ubsan_vptr_flags" ] | 539 configs = all_sanitizer_configs - [ ":ubsan_vptr_flags" ] |
| 506 } | 540 } |
| 507 | 541 |
| 508 config("default_sanitizer_flags_but_coverage") { | 542 config("default_sanitizer_flags_but_coverage") { |
| 509 configs = all_sanitizer_configs - [ ":coverage_flags" ] | 543 configs = all_sanitizer_configs - [ ":coverage_flags" ] |
| 510 } | 544 } |
| OLD | NEW |