diff options
| author | 2017-03-08 22:22:42 +0000 | |
|---|---|---|
| committer | 2017-03-08 22:22:42 +0000 | |
| commit | 43cfb467ef76d3787753594f9da1460a3a5c3732 (patch) | |
| tree | 47a997454f157a403269dfbaaf719f1cbd68fb4a | |
| parent | caa348cee1312150a957bd308ce77ad406f3eb64 (diff) | |
| parent | e381ffe345281dc175695c9839488b1980948677 (diff) | |
Merge changes I2f8edd95,I17d67431
* changes:
Allow building Android builds locally
Allow test runner to build master-art-host targets
| -rwxr-xr-x | test/testrunner/run_build_test_target.py | 58 | ||||
| -rw-r--r-- | test/testrunner/target_config.py | 257 | ||||
| -rwxr-xr-x | test/testrunner/testrunner.py | 111 |
3 files changed, 383 insertions, 43 deletions
diff --git a/test/testrunner/run_build_test_target.py b/test/testrunner/run_build_test_target.py new file mode 100755 index 0000000000..0cd1ddee7b --- /dev/null +++ b/test/testrunner/run_build_test_target.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python +# +# Copyright 2017, The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse +import os +import subprocess + +from target_config import target_config +import env + +parser = argparse.ArgumentParser() +parser.add_argument('--build-target', required=True, dest='build_target') +parser.add_argument('-j', default='1', dest='n_threads') +options = parser.parse_args() + +target = target_config[options.build_target] +n_threads = options.n_threads +custom_env = target.get('env', {}) +custom_env['SOONG_ALLOW_MISSING_DEPENDENCIES'] = 'true' +print custom_env +os.environ.update(custom_env) + + +if target.get('target'): + build_command = 'make' + build_command += ' -j' + str(n_threads) + build_command += ' -C ' + env.ANDROID_BUILD_TOP + build_command += ' ' + target.get('target') + print build_command.split() + if subprocess.call(build_command.split()): + sys.exit(1) + +else: + run_test_command = [os.path.join(env.ANDROID_BUILD_TOP, + 'art/test/testrunner/testrunner.py')] + run_test_command += target.get('flags', []) + run_test_command += ['-j', str(n_threads)] + run_test_command += ['-b'] + run_test_command += ['--verbose'] + + print run_test_command + if subprocess.call(run_test_command): + sys.exit(1) + +sys.exit(0) diff --git a/test/testrunner/target_config.py b/test/testrunner/target_config.py new file mode 100644 index 0000000000..5387d6a8e8 --- /dev/null +++ b/test/testrunner/target_config.py @@ -0,0 +1,257 @@ +target_config = { + 'art-test' : { + 'flags' : [], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-interpreter' : { + 'flags' : ['--interpreter'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-interpreter-access-checks' : { + 'flags' : ['--interp-ac'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-jit' : { + 'flags' : ['--jit'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-gcstress-gcverify': { + 'flags' : ['--gcstress', + '--gcverify'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + 'ART_DEFAULT_GC_TYPE' : 'SS' + } + }, + 'art-interpreter-gcstress' : { + 'flags': ['--interpreter', + '--gcstress'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + 'ART_DEFAULT_GC_TYPE' : 'SS' + } + }, + 'art-optimizing-gcstress' : { + 'flags': ['--gcstress', + '--optimizing'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + 'ART_DEFAULT_GC_TYPE' : 'SS' + } + }, + 'art-jit-gcstress' : { + 'flags': ['--jit', + '--gcstress'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-read-barrier' : { + 'flags': ['--interpreter', + '--optimizing'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'true', + 'ART_HEAP_POISONING' : 'true' + } + }, + 'art-read-barrier-gcstress' : { + 'flags' : ['--interpreter', + '--optimizing', + '--gcstress'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'true', + 'ART_HEAP_POISONING' : 'true' + } + }, + 'art-read-barrier-table-lookup' : { + 'flags' : ['--interpreter', + '--optimizing'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'true', + 'ART_READ_BARRIER_TYPE' : 'TABLELOOKUP', + 'ART_HEAP_POISONING' : 'true' + } + }, + 'art-debug-gc' : { + 'flags' : ['--interpreter', + '--optimizing'], + 'env' : { + 'ART_TEST_DEBUG_GC' : 'true', + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-ss-gc' : { + 'flags' : ['--interpreter', + '--optimizing', + '--jit'], + 'env' : { + 'ART_DEFAULT_GC_TYPE' : 'SS', + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-gss-gc' : { + 'flags' : ['--interpreter', + '--optimizing', + '--jit'], + 'env' : { + 'ART_DEFAULT_GC_TYPE' : 'GSS', + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-ss-gc-tlab' : { + 'flags' : ['--interpreter', + '--optimizing', + '--jit'], + 'env' : { + 'ART_DEFAULT_GC_TYPE' : 'SS', + 'ART_USE_TLAB' : 'true', + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-gss-gc-tlab' : { + 'flags' : ['--interpreter', + '--optimizing', + '--jit'], + 'env' : { + 'ART_DEFAULT_GC_TYPE' : 'GSS', + 'ART_USE_TLAB' : 'true', + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-tracing' : { + 'flags' : ['--trace'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-interpreter-tracing' : { + 'flags' : ['--interpreter', + '--trace'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + } + }, + 'art-forcecopy' : { + 'flags' : ['--forcecopy'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + } + }, + 'art-no-prebuild' : { + 'flags' : ['--no-prebuild'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + } + }, + 'art-no-image' : { + 'flags' : ['--no-image'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + } + }, + 'art-interpreter-no-image' : { + 'flags' : ['--interpreter', + '--no-image'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + } + }, + 'art-relocate-no-patchoat' : { + 'flags' : ['--relocate-npatchoat'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + } + }, + 'art-no-dex2oat' : { + 'flags' : ['--no-dex2oat'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + } + }, + 'art-heap-poisoning' : { + 'flags' : ['--interpreter', + '--optimizing'], + 'env' : { + 'ART_USE_READ_BARRIER' : 'false', + 'ART_HEAP_POISONING' : 'true' + } + }, + 'art-gtest' : { + 'target' : 'test-art-gtest', + 'env' : { + 'ART_USE_READ_BARRIER' : 'true' + } + }, + 'art-gtest-read-barrier': { + 'target' : 'test-art-gtest', + 'env' : { + 'ART_USE_READ_BARRIER' : 'true', + 'ART_HEAP_POISONING' : 'true' + } + }, + 'art-gtest-read-barrier-table-lookup': { + 'target' : 'test-art-gtest', + 'env': { + 'ART_USE_READ_BARRIER' : 'true', + 'ART_READ_BARRIER_TYPE' : 'TABLELOOKUP', + 'ART_HEAP_POISONING' : 'true' + } + }, + 'art-gtest-ss-gc': { + 'target' : 'test-art-gtest', + 'env': { + 'ART_DEFAULT_GC_TYPE' : 'SS', + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-gtest-gss-gc': { + 'target' : 'test-art-gtest', + 'env' : { + 'ART_DEFAULT_GC_TYPE' : 'GSS', + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-gtest-ss-gc-tlab': { + 'target' : 'test-art-gtest', + 'env': { + 'ART_DEFAULT_GC_TYPE' : 'SS', + 'ART_USE_TLAB' : 'true', + 'ART_USE_READ_BARRIER' : 'false', + } + }, + 'art-gtest-gss-gc-tlab': { + 'target' : 'test-art-gtest', + 'env': { + 'ART_DEFAULT_GC_TYPE' : 'GSS', + 'ART_USE_TLAB' : 'true', + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-gtest-valgrind32': { + 'target' : 'valgrind-test-art-host32', + 'env': { + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-gtest-valgrind64': { + 'target' : 'valgrind-test-art-host64', + 'env': { + 'ART_USE_READ_BARRIER' : 'false' + } + }, + 'art-gtest-heap-poisoning': { + 'target' : 'valgrind-test-art-host64', + 'env' : { + 'ART_HEAP_POISONING' : 'true', + 'ART_USE_READ_BARRIER' : 'false' + } + } +} diff --git a/test/testrunner/testrunner.py b/test/testrunner/testrunner.py index 9c8d3b870c..f77e9adb10 100755 --- a/test/testrunner/testrunner.py +++ b/test/testrunner/testrunner.py @@ -56,6 +56,7 @@ import threading import time import env +from target_config import target_config TARGET_TYPES = set() RUN_TYPES = set() @@ -704,6 +705,25 @@ def parse_test_name(test_name): return {match.group(12)} raise ValueError(test_name + " is not a valid test") + +def setup_env_for_build_target(build_target, parser, options): + """Setup environment for the build target + + The method setup environment for the master-art-host targets. + """ + os.environ.update(build_target['env']) + os.environ['SOONG_ALLOW_MISSING_DEPENDENCIES'] = 'true' + print_text('%s\n' % (str(os.environ))) + + target_options = vars(parser.parse_args(build_target['flags'])) + target_options['host'] = True + target_options['verbose'] = True + target_options['build'] = True + target_options['n_thread'] = options['n_thread'] + target_options['dry_run'] = options['dry_run'] + + return target_options + def parse_option(): global verbose global dry_run @@ -733,90 +753,95 @@ def parse_option(): action='store_true', dest='build', help="Build dependencies under all circumstances. By default we will " + "not build dependencies unless ART_TEST_RUN_TEST_BUILD=true.") + parser.add_argument('--build-target', dest='build_target', help='master-art-host targets') parser.set_defaults(build = env.ART_TEST_RUN_TEST_BUILD) parser.add_argument('--gdb', action='store_true', dest='gdb') parser.add_argument('--gdb-arg', dest='gdb_arg') - options = parser.parse_args() + options = vars(parser.parse_args()) + if options['build_target']: + options = setup_env_for_build_target(target_config[options['build_target']], + parser, options) + test = '' - env.EXTRA_DISABLED_TESTS.update(set(options.skips)) - if options.test: - test = parse_test_name(options.test) - if options.pictest: + env.EXTRA_DISABLED_TESTS.update(set(options['skips'])) + if options['test']: + test = parse_test_name(options['test']) + if options['pictest']: PICTEST_TYPES.add('pictest') - if options.ndebug: + if options['ndebug']: RUN_TYPES.add('ndebug') - if options.interp_ac: + if options['interp_ac']: COMPILER_TYPES.add('interp-ac') - if options.picimage: + if options['picimage']: IMAGE_TYPES.add('picimage') - if options.n64: + if options['n64']: ADDRESS_SIZES.add('64') - if options.interpreter: + if options['interpreter']: COMPILER_TYPES.add('interpreter') - if options.jni: + if options['jni']: JNI_TYPES.add('jni') - if options.relocate_npatchoat: + if options['relocate_npatchoat']: RELOCATE_TYPES.add('relocate-npatchoat') - if options.no_prebuild: + if options['no_prebuild']: PREBUILD_TYPES.add('no-prebuild') - if options.npictest: + if options['npictest']: PICTEST_TYPES.add('npictest') - if options.no_dex2oat: + if options['no_dex2oat']: PREBUILD_TYPES.add('no-dex2oat') - if options.jit: + if options['jit']: COMPILER_TYPES.add('jit') - if options.relocate: + if options['relocate']: RELOCATE_TYPES.add('relocate') - if options.ndebuggable: + if options['ndebuggable']: DEBUGGABLE_TYPES.add('ndebuggable') - if options.no_image: + if options['no_image']: IMAGE_TYPES.add('no-image') - if options.optimizing: + if options['optimizing']: COMPILER_TYPES.add('optimizing') - if options.trace: + if options['trace']: TRACE_TYPES.add('trace') - if options.gcstress: + if options['gcstress']: GC_TYPES.add('gcstress') - if options.no_relocate: + if options['no_relocate']: RELOCATE_TYPES.add('no-relocate') - if options.target: + if options['target']: TARGET_TYPES.add('target') - if options.forcecopy: + if options['forcecopy']: JNI_TYPES.add('forcecopy') - if options.n32: + if options['n32']: ADDRESS_SIZES.add('32') - if options.host: + if options['host']: TARGET_TYPES.add('host') - if options.gcverify: + if options['gcverify']: GC_TYPES.add('gcverify') - if options.debuggable: + if options['debuggable']: DEBUGGABLE_TYPES.add('debuggable') - if options.prebuild: + if options['prebuild']: PREBUILD_TYPES.add('prebuild') - if options.debug: + if options['debug']: RUN_TYPES.add('debug') - if options.checkjni: + if options['checkjni']: JNI_TYPES.add('checkjni') - if options.ntrace: + if options['ntrace']: TRACE_TYPES.add('ntrace') - if options.cms: + if options['cms']: GC_TYPES.add('cms') - if options.multipicimage: + if options['multipicimage']: IMAGE_TYPES.add('multipicimage') - if options.verbose: + if options['verbose']: verbose = True - if options.n_thread: - n_thread = max(1, options.n_thread) - if options.dry_run: + if options['n_thread']: + n_thread = max(1, options['n_thread']) + if options['dry_run']: dry_run = True verbose = True - build = options.build - if options.gdb: + build = options['build'] + if options['gdb']: n_thread = 1 gdb = True - if options.gdb_arg: - gdb_arg = options.gdb_arg + if options['gdb_arg']: + gdb_arg = options['gdb_arg'] return test |