| # Copyright 2015 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/config/sanitizers/sanitizers.gni") |
| |
| prebuilt_available = |
| is_msan && (msan_track_origins == 0 || msan_track_origins == 2) |
| |
| group("deps") { |
| if (use_prebuilt_instrumented_libraries) { |
| assert(prebuilt_available, |
| "Prebuilt instrumented libraries are only available when " + |
| "is_msan = true and msan_track_origins = {0, 2}") |
| deps = [ |
| ":prebuilt", |
| ] |
| } |
| } |
| |
| if (prebuilt_available) { |
| group("prebuilt") { |
| visibility = [ ":deps" ] |
| public_configs = [ ":prebuilt_link_helper" ] |
| deps = [ |
| ":extract_prebuilt_instrumented_libraries", |
| ] |
| } |
| |
| if (is_msan) { |
| sanitizer_type = "msan" |
| if (msan_track_origins == 0) { |
| archive_prefix = "msan-no-origins" |
| } else if (msan_track_origins == 2) { |
| archive_prefix = "msan-chained-origins" |
| } |
| } |
| |
| # TODO(GYP): scripts/download_binaries.py uses GYP_DEFINES to decide whether |
| # to download the archives extracted here. |
| # Note: This requires a clobber whenever Ubuntu version changes. |
| action("extract_prebuilt_instrumented_libraries") { |
| visibility = [ ":prebuilt" ] |
| script = "scripts/unpack_binaries.py" |
| depfile = "$target_out_dir/$archive_prefix.d" |
| args = [ |
| archive_prefix, |
| rebase_path("binaries"), |
| rebase_path(root_build_dir + "/instrumented_libraries_prebuilt"), |
| rebase_path(target_out_dir, root_build_dir), |
| ] |
| outputs = [ |
| "$target_out_dir/$archive_prefix.txt", |
| ] |
| } |
| |
| config("prebuilt_link_helper") { |
| visibility = [ ":prebuilt" ] |
| ldflags = [ |
| # Add a relative RPATH entry to Chromium binaries. This puts instrumented |
| # DSOs before system-installed versions in library search path. |
| "-Wl,-R,\$ORIGIN/instrumented_libraries_prebuilt/$sanitizer_type/lib", |
| "-Wl,-z,origin", |
| ] |
| } |
| } |
| # TODO(GYP): Support building instrumented libraries from source. |