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

Side by Side Diff: third_party/instrumented_libraries/download_build_install.py

Issue 96083003: Add instrumented libraries build with msan (Closed) Base URL: https://src.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years 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 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Downloads, builds (with instrumentation) and installs shared libraries.""" 6 """Downloads, builds (with instrumentation) and installs shared libraries."""
7 7
8 import argparse 8 import argparse
9 import os 9 import os
10 import shutil 10 import shutil
11 import subprocess 11 import subprocess
12 import sys 12 import sys
13 13
14 # Should be a dict from 'sanitizer type' to 'compiler flag'. 14 # Should be a dict from 'sanitizer type' to 'compiler flag'.
15 SUPPORTED_SANITIZERS = {'asan': 'address'} 15 SUPPORTED_SANITIZERS = {
alextaran1 2013/12/03 11:35:47 Looks like a part of gyp-file. Not sure should thi
Alexander Potapenko 2013/12/03 11:46:46 Yeah, probably. Let us leave it as is and then ref
16 'asan': {'compiler_flags': '-fsanitize=address -g -fPIC -w'},
Alexander Potapenko 2013/12/03 11:46:46 Please use -gline-tables-only instead of -g.
17 'msan': {'compiler_flags':
18 '-fsanitize=memory -fsanitize-memory-track-origins -g -fPIC -w'
19 },
20 }
16 21
17 22
18 class ScopedChangeDirectory(object): 23 class ScopedChangeDirectory(object):
19 """Changes current working directory and restores it back automatically.""" 24 """Changes current working directory and restores it back automatically."""
20 def __init__(self, path): 25 def __init__(self, path):
21 self.path = path 26 self.path = path
22 self.old_path = '' 27 self.old_path = ''
23 28
24 def __enter__(self): 29 def __enter__(self):
25 self.old_path = os.getcwd() 30 self.old_path = os.getcwd()
26 os.chdir(self.path) 31 os.chdir(self.path)
27 32
28 def __exit__(self, exc_type, exc_value, traceback): 33 def __exit__(self, exc_type, exc_value, traceback):
29 os.chdir(self.old_path) 34 os.chdir(self.old_path)
30 35
31 36
32 def get_script_absolute_path(): 37 def get_script_absolute_path():
33 return os.path.dirname(os.path.abspath(__file__)) 38 return os.path.dirname(os.path.abspath(__file__))
34 39
35 40
36 def get_library_build_dependencies(library): 41 def get_library_build_dependencies(library):
37 command = 'apt-get -s build-dep %s | grep Inst | cut -d " " -f 2' % library 42 command = 'apt-get -s build-dep %s | grep Inst | cut -d " " -f 2' % library
38 command_result = subprocess.Popen(command, stdout=subprocess.PIPE, 43 command_result = subprocess.Popen(command, stdout=subprocess.PIPE,
39 shell=True) 44 shell=True)
45 if command_result.wait():
46 raise Exception("Failed to determine build dependencies for %s" % library)
40 build_dependencies = [l.strip() for l in command_result.stdout] 47 build_dependencies = [l.strip() for l in command_result.stdout]
41 return build_dependencies 48 return build_dependencies
42 49
43 50
44 def download_build_install(parsed_arguments): 51 def download_build_install(parsed_arguments):
45 sanitizer_flag = SUPPORTED_SANITIZERS[parsed_arguments.sanitizer_type] 52 sanitizer_params = SUPPORTED_SANITIZERS[parsed_arguments.sanitizer_type]
46 53
47 environment = os.environ.copy() 54 environment = os.environ.copy()
48 environment['CFLAGS'] = '-fsanitize=%s -g -fPIC -w' % sanitizer_flag 55 environment['CFLAGS'] = sanitizer_params['compiler_flags']
49 environment['CXXFLAGS'] = '-fsanitize=%s -g -fPIC -w' % sanitizer_flag 56 environment['CXXFLAGS'] = sanitizer_params['compiler_flags']
50 # We use XORIGIN as RPATH and after building library replace it to $ORIGIN 57 # We use XORIGIN as RPATH and after building library replace it to $ORIGIN
51 # The reason: this flag goes through configure script and makefiles 58 # The reason: this flag goes through configure script and makefiles
52 # differently for different libraries. So the dollar sign '$' should be 59 # differently for different libraries. So the dollar sign '$' should be
53 # differently escaped. Instead of having problems with that it just 60 # differently escaped. Instead of having problems with that it just
54 # uses XORIGIN to build library and after that replaces it to $ORIGIN 61 # uses XORIGIN to build library and after that replaces it to $ORIGIN
55 # directly in .so file. 62 # directly in .so file.
56 environment['LDFLAGS'] = '-Wl,-z,origin -Wl,-R,XORIGIN/.' 63 environment['LDFLAGS'] = '-Wl,-z,origin -Wl,-R,XORIGIN/.'
Alexander Potapenko 2013/12/03 11:46:46 Aren't you passing -fsanitize=... to the linker?
alextaran1 2013/12/03 12:15:55 Sorry, my fault, due to http://clang.llvm.org/docs
57 64
58 library_directory = '%s/%s' % (parsed_arguments.intermediate_directory, 65 library_directory = '%s/%s' % (parsed_arguments.intermediate_directory,
59 parsed_arguments.library) 66 parsed_arguments.library)
60 67
61 install_prefix = '%s/%s/instrumented_libraries/%s' % ( 68 install_prefix = '%s/%s/instrumented_libraries/%s' % (
62 get_script_absolute_path(), 69 get_script_absolute_path(),
63 parsed_arguments.product_directory, 70 parsed_arguments.product_directory,
64 parsed_arguments.sanitizer_type) 71 parsed_arguments.sanitizer_type)
65 72
66 if not os.path.exists(library_directory): 73 if not os.path.exists(library_directory):
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 print >> sys.stderr, 'One-liner for APT:' 129 print >> sys.stderr, 'One-liner for APT:'
123 print >> sys.stderr, 'sudo apt-get -y --no-remove build-dep %s' % \ 130 print >> sys.stderr, 'sudo apt-get -y --no-remove build-dep %s' % \
124 parsed_arguments.library 131 parsed_arguments.library
125 sys.exit(1) 132 sys.exit(1)
126 133
127 download_build_install(parsed_arguments) 134 download_build_install(parsed_arguments)
128 135
129 136
130 if __name__ == '__main__': 137 if __name__ == '__main__':
131 main() 138 main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698