diff options
author | earthdok <earthdok@chromium.org> | 2015-03-23 14:02:06 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-23 21:02:52 +0000 |
commit | 3f04f1b92b7b490cd9ae9537dbc7b975ce38a572 (patch) | |
tree | ba36da2f0bb4632ef4722e86089e4eb25f394a81 | |
parent | aa41e91e7ef29cd6d73666e9ad930cdc88a366d6 (diff) | |
download | chromium_src-3f04f1b92b7b490cd9ae9537dbc7b975ce38a572.zip chromium_src-3f04f1b92b7b490cd9ae9537dbc7b975ce38a572.tar.gz chromium_src-3f04f1b92b7b490cd9ae9537dbc7b975ce38a572.tar.bz2 |
Re-land: Instrumented libraries: add a target for pre-built libraries.
With use_prebuilt_instrumented_libraries=1 in GYP_DEFINES, binaries are now
unpacked from archive and placed into output dir.
BUG=462636
TBR=glider@chromium.org, thakis@chromium.org
Review URL: https://codereview.chromium.org/1003273006
Cr-Commit-Position: refs/heads/master@{#321846}
-rw-r--r-- | build/common.gypi | 16 | ||||
-rw-r--r-- | third_party/instrumented_libraries/instrumented_libraries.gyp | 55 | ||||
-rwxr-xr-x | third_party/instrumented_libraries/scripts/unpack_binaries.sh | 15 |
3 files changed, 83 insertions, 3 deletions
diff --git a/build/common.gypi b/build/common.gypi index 07dbd6b..745035c 100644 --- a/build/common.gypi +++ b/build/common.gypi @@ -450,10 +450,16 @@ # -fsanitize=vptr only works with clang, but ubsan_vptr=1 implies clang=1 'ubsan_vptr%': 0, - # Use the dynamic libraries instrumented by one of the sanitizers - # instead of the standard system libraries. + # Use dynamic libraries instrumented by one of the sanitizers + # instead of the standard system libraries. Set this flag to build the + # libraries from source. 'use_instrumented_libraries%': 0, + # Use dynamic libraries instrumented by one of the sanitizers + # instead of the standard system libraries. Set this flag to download + # prebuilt binaries from GCS. + 'use_prebuilt_instrumented_libraries%': 0, + # Use libc++ (third_party/libc++ and third_party/libc++abi) instead of # stdlibc++ as standard library. This is intended to use for instrumented # builds. @@ -1153,6 +1159,7 @@ 'ubsan_blacklist%': '<(ubsan_blacklist)', 'ubsan_vptr%': '<(ubsan_vptr)', 'use_instrumented_libraries%': '<(use_instrumented_libraries)', + 'use_prebuilt_instrumented_libraries%': '<(use_prebuilt_instrumented_libraries)', 'use_custom_libcxx%': '<(use_custom_libcxx)', 'use_system_libcxx%': '<(use_system_libcxx)', 'clang_type_profiler%': '<(clang_type_profiler)', @@ -4413,6 +4420,11 @@ '<(DEPTH)/third_party/instrumented_libraries/instrumented_libraries.gyp:instrumented_libraries', ], }], + ['use_prebuilt_instrumented_libraries==1', { + 'dependencies': [ + '<(DEPTH)/third_party/instrumented_libraries/instrumented_libraries.gyp:prebuilt_instrumented_libraries', + ], + }], ['use_custom_libcxx==1', { 'dependencies': [ '<(DEPTH)/buildtools/third_party/libc++/libc++.gyp:libcxx_proxy', diff --git a/third_party/instrumented_libraries/instrumented_libraries.gyp b/third_party/instrumented_libraries/instrumented_libraries.gyp index 28fa65f..2d61a3b 100644 --- a/third_party/instrumented_libraries/instrumented_libraries.gyp +++ b/third_party/instrumented_libraries/instrumented_libraries.gyp @@ -82,6 +82,57 @@ 'targets': [ { + 'target_name': 'prebuilt_instrumented_libraries', + 'type': 'none', + 'variables': { + 'prune_self_dependency': 1, + # Don't add this target to the dependencies of targets with type=none. + 'link_dependency': 1, + 'conditions': [ + ['msan==1', { + 'conditions': [ + ['msan_track_origins==2', { + 'archive_name': 'msan-chained-origins-<(_ubuntu_release)', + }, { + 'archive_name': 'UNSUPPORTED_CONFIGURATION' + }], + ]}, { + 'archive_name': 'UNSUPPORTED_CONFIGURATION' + }], + ], + }, + 'actions': [ + { + 'action_name': 'unpack_<(archive_name).tgz', + 'inputs': [ + 'binaries/<(archive_name).tgz', + ], + 'outputs': [ + '<(PRODUCT_DIR)/instrumented_libraries_prebuilt/<(archive_name).txt', + ], + 'action': [ + 'scripts/unpack_binaries.sh', + 'binaries/<(archive_name).tgz', + '<(PRODUCT_DIR)/instrumented_libraries_prebuilt/', + '<(PRODUCT_DIR)/instrumented_libraries_prebuilt/<(archive_name).txt', + ], + }, + ], + 'direct_dependent_settings': { + 'target_conditions': [ + ['_toolset=="target"', { + '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)/<(_libdir)/', + '-Wl,-z,origin', + ], + }], + ], + }, + }, + { 'target_name': 'instrumented_libraries', 'type': 'none', 'variables': { @@ -174,7 +225,9 @@ 'target_conditions': [ ['_toolset=="target"', { 'ldflags': [ - # Add RPATH to result binary to make it linking instrumented libraries ($ORIGIN means relative RPATH) + # 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/<(_sanitizer_type)/<(_libdir)/', '-Wl,-z,origin', ], diff --git a/third_party/instrumented_libraries/scripts/unpack_binaries.sh b/third_party/instrumented_libraries/scripts/unpack_binaries.sh new file mode 100755 index 0000000..12af6ad --- /dev/null +++ b/third_party/instrumented_libraries/scripts/unpack_binaries.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# 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. + +# Unpacks an archive containing prebuilt instrumented libraries into output dir. + +archive_file=$1 +target_dir=$2 +stamp_file=$3 + +rm ${target_dir}/* -rf +tar -zxf ${archive_file} -C ${target_dir} + +touch ${stamp_file} |