Add support for building with the JDK11 based desugared library
With the new option to test.py one can run
tools/test.py --desugared-library-configuration=jdk11 --desugared-library=HEAD ...
to use the JDK11 based desugared library.
The configuration diff for desugar_jdk_libs.json is:
diff -u2 desugar_jdk_libs.json jdk11/desugar_jdk_libs.json
--- desugar_jdk_libs.json 2021-03-11 14:56:35.790624175 +0100
+++ jdk11/desugar_jdk_libs.json 2021-03-11 15:03:35.983412505 +0100
@@ -76,5 +76,7 @@
"j$.time.": "java.time.",
"java.time.": "j$.time.",
- "java.util.Desugar": "j$.util.Desugar"
+ "java.util.Desugar": "j$.util.Desugar",
+ "sun.misc.Desugar": "j$.sun.misc.Desugar",
+ "jdk.internal.util.Preconditions": "j$.jdk.internal.util.Preconditions"
},
"retarget_lib_member": {
@@ -112,8 +114,12 @@
"java.util.StringJoiner": "j$.util.StringJoiner",
"java.util.Tripwire": "j$.util.Tripwire",
- "java.util.concurrent.DesugarUnsafe": "j$.util.concurrent.DesugarUnsafe",
+ "java.util.concurrent.Helpers": "j$.util.concurrent.Helpers",
"java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom",
"java.util.concurrent.atomic.DesugarAtomic": "j$.util.concurrent.atomic.DesugarAtomic",
- "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap"
+ "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap",
+ "java.util.AbstractList": "j$.util.AbstractList",
+ "java.util.CollSer": "j$.util.CollSer",
+ "java.util.ImmutableCollections": "j$.util.ImmutableCollections",
+ "java.util.KeyValueHolder": "j$.util.KeyValueHolder"
},
"retarget_lib_member": {
And for desugar_jdk_libs_alternative_3.json:
diff -u2 desugar_jdk_libs_alternative_3.json jdk11/desugar_jdk_libs_alternative_3.json
--- desugar_jdk_libs_alternative_3.json 2021-03-11 15:01:37.471906496 +0100
+++ jdk11/desugar_jdk_libs_alternative_3.json 2021-03-11 15:00:34.517792562 +0100
@@ -76,5 +76,7 @@
"j$.time.": "java.time.",
"java.time.": "j$.time.",
- "java.util.Desugar": "j$.util.Desugar"
+ "java.util.Desugar": "j$.util.Desugar",
+ "sun.misc.Desugar": "j$.sun.misc.Desugar",
+ "jdk.internal.util.Preconditions": "j$.jdk.internal.util.Preconditions"
},
"retarget_lib_member": {
@@ -112,8 +114,13 @@
"java.util.StringJoiner": "j$.util.StringJoiner",
"java.util.Tripwire": "j$.util.Tripwire",
- "java.util.concurrent.DesugarUnsafe": "j$.util.concurrent.DesugarUnsafe",
+ "java.util.concurrent.Helpers": "j$.util.concurrent.Helpers",
"java.util.concurrent.ThreadLocalRandom": "j$.util.concurrent.ThreadLocalRandom",
"java.util.concurrent.atomic.DesugarAtomic": "j$.util.concurrent.atomic.DesugarAtomic",
"java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap",
+ "java.util.concurrent.ConcurrentHashMap": "j$.util.concurrent.ConcurrentHashMap",
+ "java.util.AbstractList": "j$.util.AbstractList",
+ "java.util.CollSer": "j$.util.CollSer",
+ "java.util.ImmutableCollections": "j$.util.ImmutableCollections",
+ "java.util.KeyValueHolder": "j$.util.KeyValueHolder",
"java.io.DesugarBufferedReader": "j$.io.DesugarBufferedReader",
"java.io.UncheckedIOException": "j$.io.UncheckedIOException"
Bug: 182463100
Change-Id: I31b4bb20b7ee80e351f996b0d1e9280285a1d0ff
diff --git a/tools/archive_desugar_jdk_libs.py b/tools/archive_desugar_jdk_libs.py
index 403212f..825cb91 100755
--- a/tools/archive_desugar_jdk_libs.py
+++ b/tools/archive_desugar_jdk_libs.py
@@ -85,10 +85,12 @@
'https://github.com/'
+ github_account + '/' + LIBRARY_NAME, checkout_dir)
-def BuildDesugaredLibrary(checkout_dir):
+def BuildDesugaredLibrary(checkout_dir, variant):
+ if (variant != 'jdk8' and variant != 'jdk11'):
+ raise Exception('Variant ' + variant + 'is not supported')
with utils.ChangedWorkingDirectory(checkout_dir):
bazel = os.path.join(utils.BAZEL_TOOL, 'lib', 'bazel', 'bin', 'bazel')
- cmd = [bazel, 'build', 'maven_release']
+ cmd = [bazel, 'build', 'maven_release' + ('_jdk11' if variant == 'jdk11' else '')]
utils.PrintCmd(cmd)
subprocess.check_call(cmd)
cmd = [bazel, 'shutdown']
@@ -97,9 +99,16 @@
# Locate the library jar and the maven zip with the jar from the
# bazel build.
- library_jar = os.path.join(
- checkout_dir, 'bazel-bin', 'src', 'share', 'classes', 'java', 'libjava.jar')
- maven_zip = os.path.join(checkout_dir, 'bazel-bin', LIBRARY_NAME +'.zip')
+ if variant == 'jdk8':
+ library_jar = os.path.join(
+ checkout_dir, 'bazel-bin', 'src', 'share', 'classes', 'java', 'libjava.jar')
+ else:
+ library_jar = os.path.join(
+ checkout_dir, 'bazel-bin', 'jdk11', 'src', 'java_base_selected.jar')
+ maven_zip = os.path.join(
+ checkout_dir,
+ 'bazel-bin',
+ LIBRARY_NAME + ('_jdk11' if variant != 'jdk11' else '') +'.zip')
return (library_jar, maven_zip)
@@ -124,11 +133,12 @@
# Make sure bazel is extracted in third_party.
utils.DownloadFromGoogleCloudStorage(utils.BAZEL_SHA_FILE)
utils.DownloadFromGoogleCloudStorage(utils.JAVA8_SHA_FILE)
+ utils.DownloadFromGoogleCloudStorage(utils.JAVA11_SHA_FILE)
if options.build_only:
with utils.TempDir() as checkout_dir:
CloneDesugaredLibrary(options.github_account, checkout_dir)
- (library_jar, maven_zip) = BuildDesugaredLibrary(checkout_dir)
+ (library_jar, maven_zip) = BuildDesugaredLibrary(checkout_dir, "jdk8")
shutil.copyfile(
library_jar,
os.path.join(options.build_only, os.path.basename(library_jar)))
@@ -150,7 +160,7 @@
raise Exception(
'Target archive directory %s already exists' % destination)
- (library_jar, maven_zip) = BuildDesugaredLibrary(checkout_dir)
+ (library_jar, maven_zip) = BuildDesugaredLibrary(checkout_dir, "jdk8")
storage_path = LIBRARY_NAME + '/' + version
# Upload the jar file with the library.
diff --git a/tools/test.py b/tools/test.py
index 9e2a3e2..f7b204f 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -162,6 +162,8 @@
help='Enable Java debug agent and suspend compilation (default disabled)',
default=False,
action='store_true')
+ result.add_option('--desugared-library-configuration', '--desugared_library-configuration',
+ help='Use alternative desugared library configuration.')
result.add_option('--desugared-library', '--desugared_library',
help='Build and use desugared library from GitHub.')
return result.parse_args()
@@ -181,6 +183,13 @@
if utils.is_bot():
gradle.RunGradle(['--no-daemon', 'clean'])
+ desugar_jdk_json_dir = None
+ if options.desugared_library_configuration:
+ if options.desugared_library_configuration != 'jdk11':
+ print("Only value supported for --desugared-library is 'jdk11'")
+ exit(1)
+ desugar_jdk_json_dir = 'src/library_desugar/jdk11'
+
desugar_jdk_libs = None
if options.desugared_library:
if options.desugared_library != 'HEAD':
@@ -195,12 +204,12 @@
# Make sure bazel is extracted in third_party.
utils.DownloadFromGoogleCloudStorage(utils.BAZEL_SHA_FILE)
utils.DownloadFromGoogleCloudStorage(utils.JAVA8_SHA_FILE)
- (library_jar, maven_zip) = archive_desugar_jdk_libs.BuildDesugaredLibrary(checkout_dir)
+ utils.DownloadFromGoogleCloudStorage(utils.JAVA11_SHA_FILE)
+ (library_jar, maven_zip) = archive_desugar_jdk_libs.BuildDesugaredLibrary(checkout_dir, 'jdk11' if options.desugared_library_configuration == 'jdk11' else 'jdk8')
desugar_jdk_libs = os.path.join(desugar_jdk_libs_dir, os.path.basename(library_jar))
shutil.copyfile(library_jar, desugar_jdk_libs)
print('Desugared library for test in ' + desugar_jdk_libs)
-
gradle_args = ['--stacktrace']
if utils.is_bot():
# Bots don't like dangling processes.
@@ -284,6 +293,8 @@
gradle_args.append('--no-daemon')
if options.debug_agent:
gradle_args.append('--no-daemon')
+ if desugar_jdk_json_dir:
+ gradle_args.append('-Pdesugar_jdk_json_dir=' + desugar_jdk_json_dir)
if desugar_jdk_libs:
gradle_args.append('-Pdesugar_jdk_libs=' + desugar_jdk_libs)
diff --git a/tools/utils.py b/tools/utils.py
index 1820991..da4a0e4 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -83,6 +83,7 @@
BAZEL_SHA_FILE = os.path.join(THIRD_PARTY, 'bazel.tar.gz.sha1')
BAZEL_TOOL = os.path.join(THIRD_PARTY, 'bazel')
JAVA8_SHA_FILE = os.path.join(THIRD_PARTY, 'openjdk', 'jdk8', 'linux-x86.tar.gz.sha1')
+JAVA11_SHA_FILE = os.path.join(THIRD_PARTY, 'openjdk', 'jdk-11', 'linux.tar.gz.sha1')
IGNORE_WARNINGS_RULES = os.path.join(REPO_ROOT, 'src', 'test', 'ignorewarnings.rules')
ANDROID_HOME_ENVIROMENT_NAME = "ANDROID_HOME"