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

Unified Diff: third_party/instrumented_libraries/scripts/build_and_package.py

Issue 2103683002: Add GN rules for building instrumented libraries. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months 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 side-by-side diff with in-line comments
Download patch
Index: third_party/instrumented_libraries/scripts/build_and_package.py
diff --git a/third_party/instrumented_libraries/scripts/build_and_package.py b/third_party/instrumented_libraries/scripts/build_and_package.py
new file mode 100755
index 0000000000000000000000000000000000000000..386cfc8fed3ce62f89276dd3c1e9883a3e9685df
--- /dev/null
+++ b/third_party/instrumented_libraries/scripts/build_and_package.py
@@ -0,0 +1,114 @@
+#!/usr/bin/python
+# Copyright 2016 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.
+"""Builds and packages instrumented libraries for dynamic tools."""
+
+import argparse
+import contextlib
+import os
+import shutil
+import subprocess
+import tarfile
+
+BUILD_TYPES = {
+ 'msan-no-origins': [
+ 'is_msan = true',
+ 'msan_track_origins = 0',
+ ],
+ 'msan-chained-origins': [
+ 'is_msan = true',
+ 'msan_track_origins = 2',
+ ],
+ 'tsan': ['is_tsan = true'],
+ 'asan': ['is_asan = true']
+}
+SUPPORTED_RELEASES = frozenset(['trusty'])
+
+
+class Error(Exception):
+ pass
+
+
+class UnsupportedReleaseError(Error):
+ pass
+
+
+def _get_release():
+ return subprocess.check_output(['lsb_release', '-cs']).strip()
+
+
+def _tar_filter(tar_info):
+ if tar_info.name.endswith('.txt'):
+ return None
+ return tar_info
+
+
+def build_libraries(build_type, ubuntu_release, jobs, use_goma):
+ archive_name = '%s-%s' % (build_type, ubuntu_release)
+ build_dir = 'out/Instrumented-%s' % archive_name
+ if not os.path.exists(build_dir):
+ os.makedirs(build_dir)
+
+ gn_args = [
+ 'is_debug = false',
+ 'use_goma = %s' % str(use_goma).lower(),
+ 'instrumented_libraries_jobs = %d' % jobs,
+ 'use_locally_built_instrumented_libraries = true',
+ ] + BUILD_TYPES[build_type]
+ with open(os.path.join(build_dir, 'args.gn'), 'w') as f:
+ f.write('\n'.join(gn_args))
+ subprocess.check_call(['gn', 'gen', build_dir, '--check'])
+ subprocess.check_call(['ninja', '-j2', '-C', build_dir,
+ 'third_party/instrumented_libraries:locally_built'])
+ with tarfile.open('%s.tgz' % archive_name, mode='w:gz') as f:
+ prefix = build_type.split('-', 1)[0]
+ f.add('%s/instrumented_libraries/%s' % (build_dir, prefix),
+ arcname=prefix,
+ filter=_tar_filter)
+ f.add('%s/instrumented_libraries/sources' % build_dir,
+ arcname='sources',
+ filter=_tar_filter)
+ return archive_name
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description=__doc__,
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+ parser.add_argument(
+ '--jobs',
+ '-j',
+ type=int,
+ default=8,
+ help='the default number of jobs to use when running make')
+ parser.add_argument('--use_goma',
+ action='store_true',
+ default=False,
+ help='whether to use goma to compile')
+ parser.add_argument('build_type',
+ nargs='*',
+ default='all',
+ choices=BUILD_TYPES.keys() + ['all'],
+ help='the type of instrumented library to build')
+ args = parser.parse_args()
+ if args.build_type == 'all' or 'all' in args.build_type:
+ args.build_type = BUILD_TYPES.keys()
+
+ ubuntu_release = _get_release()
+ if ubuntu_release not in SUPPORTED_RELEASES:
+ raise UnsupportedReleaseError('%s is not a supported release' %
+ _get_release())
+ archive_names = [
+ build_libraries(build_type, ubuntu_release, args.jobs, args.use_goma)
+ for build_type in sorted(set(args.build_type))
+ ]
+ print 'To upload, run:'
+ for archive_name in archive_names:
+ print('upload_to_google_storage.py -b '
+ 'chromium-instrumented-libraries %s.tgz') % archive_name
+ print 'You should then commit the resulting .sha1 files.'
+
+
+if __name__ == '__main__':
+ main()
« no previous file with comments | « third_party/instrumented_libraries/BUILD.gn ('k') | third_party/instrumented_libraries/scripts/download_build_install.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698