diff options
author | Sebastien Hertz <shertz@google.com> | 2015-02-24 17:39:50 +0100 |
---|---|---|
committer | Sebastien Hertz <shertz@google.com> | 2015-07-09 11:23:13 +0200 |
commit | 5ee9454dfee08a70dec62b0ed0fd4ad274274937 (patch) | |
tree | 0d59bfc38f70c677d8ecd066618ed17dd838259b /test/etc | |
parent | c2bf1255ebf360d009dd0763dcea8d2c9b9c676e (diff) | |
download | art-5ee9454dfee08a70dec62b0ed0fd4ad274274937.zip art-5ee9454dfee08a70dec62b0ed0fd4ad274274937.tar.gz art-5ee9454dfee08a70dec62b0ed0fd4ad274274937.tar.bz2 |
Support compiling run-tests with jack
This CL adds support to compile run-test source files with jack. When
a test needs to rely on class files, we use jill to convert them to a
jack library.
We need to pass the full classpath to jack containing at least core
classes (like java.lang.Object). This means the Android tree must
have been compiled with jack first so we find all the necessary
classes.jack files.
Some tests still rely on dex files generated with the old toolchain.
We keep building them this way for the moment and will update them
later, when they get ready for Jack.
Also updates a few tests dealing with garbage collection to avoid a
situation where a reference can be retained by a local DEX register.
Bug: 19467889
(cherry picked from commit 19ac0276208f0afef6ba8a4ab34b74a59b8d11d7)
Change-Id: Ia5a989b83430ffe8298a869a1da970b756721bb0
Diffstat (limited to 'test/etc')
-rwxr-xr-x | test/etc/default-build | 92 |
1 files changed, 66 insertions, 26 deletions
diff --git a/test/etc/default-build b/test/etc/default-build index fbe97f9..7995bd5 100755 --- a/test/etc/default-build +++ b/test/etc/default-build @@ -38,16 +38,52 @@ if [ -e classes.dex ]; then exit 0 fi -mkdir classes -${JAVAC} -implicit:none -classpath src-multidex -d classes `find src -name '*.java'` - -if [ -d src2 ]; then - ${JAVAC} -d classes `find src2 -name '*.java'` +if [ -d src-multidex ]; then + # Jack does not support this configuration unless we specify how to partition the DEX file + # with a .jpp file. + USE_JACK="false" fi -if [ ${NEED_DEX} = "true" ]; then - ${DX} -JXmx256m --debug --dex --dump-to=classes.lst --output=classes.dex \ - --dump-width=1000 ${DX_FLAGS} classes +if [ ${USE_JACK} = "true" ]; then + # Jack toolchain + if [ -d src ]; then + ${JACK} --output-jack src.jack src + imported_jack_files="--import src.jack" + fi + + if [ -d src2 ]; then + ${JACK} --output-jack src2.jack src2 + imported_jack_files="--import src2.jack ${imported_jack_files}" + fi + + # Compile jack files into a DEX file. We set jack.import.type.policy=keep-first to consider + # class definitions from src2 first. + ${JACK} ${imported_jack_files} -D jack.import.type.policy=keep-first --output-dex . +else + # Legacy toolchain with javac+dx + if [ -d src ]; then + mkdir classes + ${JAVAC} -implicit:none -classpath src-multidex -d classes `find src -name '*.java'` + fi + + if [ -d src-multidex ]; then + mkdir classes2 + ${JAVAC} -implicit:none -classpath src -d classes2 `find src-multidex -name '*.java'` + if [ ${NEED_DEX} = "true" ]; then + ${DX} -JXmx256m --debug --dex --dump-to=classes2.lst --output=classes2.dex \ + --dump-width=1000 ${DX_FLAGS} classes2 + fi + fi + + if [ -d src2 ]; then + mkdir -p classes + ${JAVAC} -d classes `find src2 -name '*.java'` + fi + + if [ ${NEED_DEX} = "true" ]; then + ${DX} -JXmx256m --debug --dex --dump-to=classes.lst --output=classes.dex \ + --dump-width=1000 ${DX_FLAGS} classes + fi fi if [ -d smali ]; then @@ -57,30 +93,34 @@ if [ -d smali ]; then fi if [ -d src-ex ]; then - mkdir classes-ex - ${JAVAC} -d classes-ex -cp classes `find src-ex -name '*.java'` - if [ ${NEED_DEX} = "true" ]; then - ${DX} -JXmx256m --debug --dex --dump-to=classes-ex.lst --output=classes-ex.dex \ - --dump-width=1000 ${DX_FLAGS} classes-ex + if [ ${USE_JACK} = "true" ]; then + # Rename previous "classes.dex" so it is not overwritten. + mv classes.dex classes-1.dex + #TODO find another way to append src.jack to the jack classpath + ${JACK}:src.jack --output-dex . src-ex + zip $TEST_NAME-ex.jar classes.dex + # Restore previous "classes.dex" so it can be zipped. + mv classes-1.dex classes.dex + else + mkdir classes-ex + ${JAVAC} -d classes-ex -cp classes `find src-ex -name '*.java'` + if [ ${NEED_DEX} = "true" ]; then + ${DX} -JXmx256m --debug --dex --dump-to=classes-ex.lst --output=classes-ex.dex \ + --dump-width=1000 ${DX_FLAGS} classes-ex - # quick shuffle so that the stored name is "classes.dex" - mv classes.dex classes-1.dex - mv classes-ex.dex classes.dex - zip $TEST_NAME-ex.jar classes.dex - mv classes.dex classes-ex.dex - mv classes-1.dex classes.dex + # quick shuffle so that the stored name is "classes.dex" + mv classes.dex classes-1.dex + mv classes-ex.dex classes.dex + zip $TEST_NAME-ex.jar classes.dex + mv classes.dex classes-ex.dex + mv classes-1.dex classes.dex + fi fi fi # Create a single jar with two dex files for multidex. if [ -d src-multidex ]; then - mkdir classes2 - ${JAVAC} -implicit:none -classpath src -d classes2 `find src-multidex -name '*.java'` - if [ ${NEED_DEX} = "true" ]; then - ${DX} -JXmx256m --debug --dex --dump-to=classes2.lst --output=classes2.dex \ - --dump-width=1000 ${DX_FLAGS} classes2 - zip $TEST_NAME.jar classes.dex classes2.dex - fi + zip $TEST_NAME.jar classes.dex classes2.dex elif [ ${NEED_DEX} = "true" ]; then zip $TEST_NAME.jar classes.dex fi |