diff options
author | Zhizhou Yang <zhizhouy@google.com> | 2017-07-22 01:20:28 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-07-22 01:20:28 +0000 |
commit | ec1dfabf71cfe08796ba80ae03f4857b2797f5f9 (patch) | |
tree | bf139ee25415cecde142e95791edba3803b2452a /binary_search_tool/run_bisect_test.py | |
parent | 3690e025de8daaed03c4acb02d2b054e5c4c0dd5 (diff) | |
parent | f1a93c225b92dc0059e7d7e2de7c7bd0a493e23d (diff) | |
download | toolchain-utils-ec1dfabf71cfe08796ba80ae03f4857b2797f5f9.tar.gz |
Merge branch 'aosp/mirror-chromium-master' into update_utils am: 4307f4735e am: 18caef1edd am: 6c551e0d52 am: ddfea1f7e7android-wear-9.0.0_r9android-wear-9.0.0_r8android-wear-9.0.0_r7android-wear-9.0.0_r6android-wear-9.0.0_r5android-wear-9.0.0_r4android-wear-9.0.0_r34android-wear-9.0.0_r33android-wear-9.0.0_r32android-wear-9.0.0_r31android-wear-9.0.0_r30android-wear-9.0.0_r3android-wear-9.0.0_r29android-wear-9.0.0_r28android-wear-9.0.0_r27android-wear-9.0.0_r26android-wear-9.0.0_r25android-wear-9.0.0_r24android-wear-9.0.0_r23android-wear-9.0.0_r22android-wear-9.0.0_r21android-wear-9.0.0_r20android-wear-9.0.0_r2android-wear-9.0.0_r19android-wear-9.0.0_r18android-wear-9.0.0_r17android-wear-9.0.0_r16android-wear-9.0.0_r15android-wear-9.0.0_r14android-wear-9.0.0_r13android-wear-9.0.0_r12android-wear-9.0.0_r11android-wear-9.0.0_r10android-wear-9.0.0_r1android-vts-9.0_r9android-vts-9.0_r8android-vts-9.0_r7android-vts-9.0_r6android-vts-9.0_r5android-vts-9.0_r4android-vts-9.0_r19android-vts-9.0_r18android-vts-9.0_r17android-vts-9.0_r16android-vts-9.0_r15android-vts-9.0_r14android-vts-9.0_r13android-vts-9.0_r12android-vts-9.0_r11android-vts-9.0_r10android-security-9.0.0_r76android-security-9.0.0_r75android-security-9.0.0_r74android-security-9.0.0_r73android-security-9.0.0_r72android-security-9.0.0_r71android-security-9.0.0_r70android-security-9.0.0_r69android-security-9.0.0_r68android-security-9.0.0_r67android-security-9.0.0_r66android-security-9.0.0_r65android-security-9.0.0_r64android-security-9.0.0_r63android-security-9.0.0_r62android-o-mr1-iot-release-1.0.4android-o-mr1-iot-release-1.0.3android-cts-9.0_r9android-cts-9.0_r8android-cts-9.0_r7android-cts-9.0_r6android-cts-9.0_r5android-cts-9.0_r4android-cts-9.0_r3android-cts-9.0_r20android-cts-9.0_r2android-cts-9.0_r19android-cts-9.0_r18android-cts-9.0_r17android-cts-9.0_r16android-cts-9.0_r15android-cts-9.0_r14android-cts-9.0_r13android-cts-9.0_r12android-cts-9.0_r11android-cts-9.0_r10android-cts-9.0_r1android-9.0.0_r9android-9.0.0_r8android-9.0.0_r7android-9.0.0_r61android-9.0.0_r60android-9.0.0_r6android-9.0.0_r59android-9.0.0_r58android-9.0.0_r57android-9.0.0_r56android-9.0.0_r55android-9.0.0_r54android-9.0.0_r53android-9.0.0_r52android-9.0.0_r51android-9.0.0_r50android-9.0.0_r5android-9.0.0_r49android-9.0.0_r48android-9.0.0_r47android-9.0.0_r46android-9.0.0_r45android-9.0.0_r44android-9.0.0_r43android-9.0.0_r42android-9.0.0_r41android-9.0.0_r40android-9.0.0_r39android-9.0.0_r38android-9.0.0_r37android-9.0.0_r36android-9.0.0_r35android-9.0.0_r34android-9.0.0_r33android-9.0.0_r32android-9.0.0_r31android-9.0.0_r30android-9.0.0_r3android-9.0.0_r22android-9.0.0_r21android-9.0.0_r20android-9.0.0_r2android-9.0.0_r19android-9.0.0_r18android-9.0.0_r17android-9.0.0_r16android-9.0.0_r12android-9.0.0_r11android-9.0.0_r10android-9.0.0_r1security-pi-releasepie-vts-releasepie-security-releasepie-s2-releasepie-release-2pie-releasepie-r2-s2-releasepie-r2-s1-releasepie-r2-releasepie-qpr3-s1-releasepie-qpr3-releasepie-qpr3-b-releasepie-qpr2-releasepie-qpr1-s3-releasepie-qpr1-s2-releasepie-qpr1-s1-releasepie-qpr1-releasepie-platform-releasepie-gsipie-dr1-releasepie-dr1-devpie-devpie-cuttlefish-testingpie-cts-releasepie-b4s4-releasepie-b4s4-dev
am: f1a93c225b
Change-Id: I60d258ddb8fd0bf9632f1f70c5cdeb3078938059
Diffstat (limited to 'binary_search_tool/run_bisect_test.py')
-rwxr-xr-x | binary_search_tool/run_bisect_test.py | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/binary_search_tool/run_bisect_test.py b/binary_search_tool/run_bisect_test.py new file mode 100755 index 00000000..d4ff4f73 --- /dev/null +++ b/binary_search_tool/run_bisect_test.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python2 +"""Run full bisection test.""" + +from __future__ import print_function + +import argparse +import os +import sys + +from cros_utils import command_executer + +TEST_DIR = 'full_bisect_test' +DEFAULT_BISECT_DIR = '/tmp/sysroot_bisect' + + +def populate_good_files(top_dir, ce, bisect_dir=DEFAULT_BISECT_DIR): + # 'make clean' + work_dir = os.path.join(top_dir, TEST_DIR, 'work') + cmd = 'rm -f %s/*.o' % work_dir + status = ce.RunCommand(cmd) + if status != 0: + print('Error trying to clean out work directory: %s' % cmd) + return status + + # set up the 'good' source files + script = os.path.join(top_dir, TEST_DIR, 'make_sources_good.sh') + status = ce.RunCommand(script) + if status != 0: + print('Error setting up "good" source files: %s' % script) + return status + + export_bisect = 'export BISECT_DIR=%s; ' % bisect_dir + # build the good source files + script_path = os.path.join(top_dir, TEST_DIR) + if os.path.exists('/usr/bin/x86_64-cros-linux-gnu-gcc'): + build_script = 'chromeos_build.sh' + else: + build_script = 'build.sh' + cmd = ('%s export BISECT_STAGE=POPULATE_GOOD; pushd %s; ./%s; popd' % + (export_bisect, script_path, build_script)) + status = ce.RunCommand(cmd) + return status + + +def populate_bad_files(top_dir, ce, bisect_dir=DEFAULT_BISECT_DIR): + # 'make clean' + work_dir = os.path.join(top_dir, TEST_DIR, 'work') + cmd = 'rm -f %s/*.o' % work_dir + status = ce.RunCommand(cmd) + if status != 0: + print('Error trying to clean out work directory: %s' % cmd) + return status + + # set up the 'bad' source files + script = os.path.join(top_dir, TEST_DIR, 'make_sources_bad.sh') + status = ce.RunCommand(script) + if status != 0: + print('Error setting up "bad" source files: %s' % script) + return status + + export_bisect = 'export BISECT_DIR=%s; ' % bisect_dir + # build the bad source files + script_path = os.path.join(top_dir, TEST_DIR) + if os.path.exists('/usr/bin/x86_64-cros-linux-gnu-gcc'): + build_script = 'chromeos_build.sh' + else: + build_script = 'build.sh' + cmd = ('%s export BISECT_STAGE=POPULATE_BAD; pushd %s; ./%s ; popd' % + (export_bisect, script_path, build_script)) + status = ce.RunCommand(cmd) + return status + + +def run_main_bisection_test(top_dir, ce): + test_script = os.path.join(top_dir, TEST_DIR, 'main-bisect-test.sh') + status = ce.RunCommand(test_script) + return status + + +def verify_compiler_and_wrapper(): + # We don't need to do any special setup if running inside a ChromeOS + # chroot. + if os.path.exists('/usr/bin/x86_64-cros-linux-gnu-gcc'): + return + + message = """ +*** IMPORTANT --- READ THIS CAREFULLY!! *** + +This test uses the command 'gcc' to compile the good/bad versions of the +source program. BEFORE you can run this script you must make sure that +your compiler wrapper is in the right place, with the right name, so that +a call to 'gcc' will go through your compiler wrapper and "do the right +thing". + +Is your compiler wrapper properly set up? [Y/n] +""" + + print(message) + inp = sys.stdin.readline() + inp = inp.strip() + inp = inp.lower() + return not inp or inp == 'y' or inp == 'yes' + + +def Main(argv): + parser = argparse.ArgumentParser() + parser.add_argument( + '--dir', + dest='directory', + help='Bisection work tree, where good & bad object ' + 'files go. Default is /tmp/sysroot_bisect') + + options = parser.parse_args(argv) + + # Make sure the compiler wrapper & soft links are properly set up. + wrapper_is_setup = verify_compiler_and_wrapper() + if not wrapper_is_setup: + print('Exiting now. Please re-run after you have set up the compiler ' + 'wrapper.') + return 0 + + # Make sure we're in the correct directory for running this test. + cwd = os.getcwd() + if not os.path.exists(os.path.join(cwd, 'full_bisect_test')): + print('Error: Wrong directory. This script must be run from the top level' + ' of the binary_search_tool tree (under toolchain_utils).') + return 1 + + ce = command_executer.GetCommandExecuter() + bisect_dir = options.directory + if not bisect_dir: + bisect_dir = DEFAULT_BISECT_DIR + + # Make sure BISECT_DIR is clean + if os.path.exists(bisect_dir): + cmd = 'rm -Rf %s/*' % bisect_dir + retv = ce.RunCommand(cmd) + if retv != 0: + return retv + + retv = populate_good_files(cwd, ce, bisect_dir) + if retv != 0: + return retv + + retv = populate_bad_files(cwd, ce, bisect_dir) + if retv != 0: + return retv + + # Set up good/bad work soft links + cmd = ('rm -f %s/%s/good-objects; ln -s %s/good %s/%s/good-objects' % + (cwd, TEST_DIR, bisect_dir, cwd, TEST_DIR)) + + status = ce.RunCommand(cmd) + if status != 0: + print('Error executing: %s; exiting now.' % cmd) + return status + + cmd = ('rm -f %s/%s/bad-objects; ln -s %s/bad %s/%s/bad-objects' % + (cwd, TEST_DIR, bisect_dir, cwd, TEST_DIR)) + + status = ce.RunCommand(cmd) + if status != 0: + print('Error executing: %s; exiting now.' % cmd) + return status + + retv = run_main_bisection_test(cwd, ce) + return retv + + +if __name__ == '__main__': + retval = Main(sys.argv[1:]) + sys.exit(retval) |