summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shubham Ajmera <shubhamajmera@google.com> 2017-03-08 22:22:42 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2017-03-08 22:22:42 +0000
commit43cfb467ef76d3787753594f9da1460a3a5c3732 (patch)
tree47a997454f157a403269dfbaaf719f1cbd68fb4a
parentcaa348cee1312150a957bd308ce77ad406f3eb64 (diff)
parente381ffe345281dc175695c9839488b1980948677 (diff)
Merge changes I2f8edd95,I17d67431
* changes: Allow building Android builds locally Allow test runner to build master-art-host targets
-rwxr-xr-xtest/testrunner/run_build_test_target.py58
-rw-r--r--test/testrunner/target_config.py257
-rwxr-xr-xtest/testrunner/testrunner.py111
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