Add embedded jdk support for ppc64le This adds support for embedding OpenJDK in bazel for ppc64le. Azul Systems does not create Zulu/OpenJDK builds for ppc64le, but AdoptOpenjdk.net does. This PR adds the necessary configs and conditionals and http_file configuration URLs for adoptopenjdk downloads. The minimize_jdk.sh script needed a slight generalization. I've been using adoptOpenjdk-embedded bazel for quite a while and can vouch for its stability. Closes #11436. PiperOrigin-RevId: 313571170
diff --git a/WORKSPACE b/WORKSPACE index c8b46c2..77f3262 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -324,6 +324,16 @@ ) http_file( + name = "openjdk_linux_ppc64le_vanilla", + downloaded_file_path="adoptopenjdk-ppc64le-vanilla.tar.gz", + sha256 = "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a", + urls = [ + "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7%2B10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz", + "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7%2B10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz", + ], +) + +http_file( name = "openjdk_macos", downloaded_file_path = "zulu-macos.tar.gz", sha256 = "8e283cfd23c7555be8e17295ed76eb8f00324c88ab904b8de37bbe08f90e569b", @@ -689,6 +699,20 @@ # This must be kept in sync with src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE. http_archive( + name = "remotejdk11_linux_ppc64le_for_testing", + build_file = "@local_jdk//:BUILD.bazel", + patch_cmds = EXPORT_WORKSPACE_IN_BUILD_BAZEL_FILE, + patch_cmds_win = EXPORT_WORKSPACE_IN_BUILD_BAZEL_FILE_WIN, + sha256 = "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a", + strip_prefix = "jdk-11.0.7+10", + urls = [ + "https://mirror.bazel.build/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7%2B10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz", + "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7%2B10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz", + ], +) + +# This must be kept in sync with src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE. +http_archive( name = "remotejdk11_macos_for_testing", build_file = "@local_jdk//:BUILD.bazel", patch_cmds = EXPORT_WORKSPACE_IN_BUILD_BAZEL_FILE,
diff --git a/src/BUILD b/src/BUILD index 0d46818..124585b 100644 --- a/src/BUILD +++ b/src/BUILD
@@ -226,6 +226,9 @@ "//src/conditions:linux_aarch64": [ "@openjdk_linux_aarch64_vanilla//file", ], + "//src/conditions:linux_ppc64le": [ + "@openjdk_linux_ppc64le_vanilla//file", + ], "//conditions:default": [ "@openjdk_linux_vanilla//file", ], @@ -758,6 +761,7 @@ "@remote_java_tools_windows_for_testing//:WORKSPACE", "@remotejdk11_linux_aarch64_for_testing//:WORKSPACE", "@remotejdk11_linux_for_testing//:WORKSPACE", + "@remotejdk11_linux_ppc64le_for_testing//:WORKSPACE", "@remotejdk11_macos_for_testing//:WORKSPACE", "@remotejdk11_win_for_testing//:WORKSPACE", "@rules_cc//:WORKSPACE",
diff --git a/src/conditions/BUILD b/src/conditions/BUILD index dd0b481..bfc88c8 100644 --- a/src/conditions/BUILD +++ b/src/conditions/BUILD
@@ -23,6 +23,12 @@ ) config_setting( + name = "linux_ppc64le", + values = {"cpu": "ppc"}, + visibility = ["//visibility:public"], +) + +config_setting( name = "linux_s390x", values = {"cpu": "s390x"}, visibility = ["//visibility:public"],
diff --git a/src/conditions/BUILD.tools b/src/conditions/BUILD.tools index 4d94790..393add7 100644 --- a/src/conditions/BUILD.tools +++ b/src/conditions/BUILD.tools
@@ -23,6 +23,12 @@ ) config_setting( + name = "linux_ppc64le", + values = {"cpu": "ppc"}, + visibility = ["//visibility:public"], +) + +config_setting( name = "linux_s390x", values = {"cpu": "s390x"}, visibility = ["//visibility:public"],
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE index 95f7f0b..c5f8ef6 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/jdk.WORKSPACE
@@ -120,6 +120,19 @@ # This must be kept in sync with the top-level WORKSPACE file. maybe( http_archive, + name = "remotejdk11_linux_ppc64le", + build_file = "@local_jdk//:BUILD.bazel", + sha256 = "a417db0295b1f4b538ecbaf7c774f3a177fab9657a665940170936c0eca4e71a", + strip_prefix = "jdk-11.0.7+10", + urls = [ + "https://mirror.bazel.com/openjdk/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7%2B10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz", + "https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.7%2B10/OpenJDK11U-jdk_ppc64le_linux_hotspot_11.0.7_10.tar.gz", + ], +) + +# This must be kept in sync with the top-level WORKSPACE file. +maybe( + http_archive, name = "remotejdk11_macos", build_file = "@local_jdk//:BUILD.bazel", sha256 = "e1fe56769f32e2aaac95e0a8f86b5a323da5af3a3b4bba73f3086391a6cc056f",
diff --git a/src/minimize_jdk.sh b/src/minimize_jdk.sh index fb9186b..52e1c79 100755 --- a/src/minimize_jdk.sh +++ b/src/minimize_jdk.sh
@@ -30,6 +30,14 @@ fi fulljdk=$1 out=$3 +ARCH=`uname -p` +if [[ "${ARCH}" == 'ppc64le' ]]; then + FULL_JDK_DIR="jdk*" + DOCS="" +else + FULL_JDK_DIR="zulu*" + DOCS="DISCLAIMER readme.txt" +fi UNAME=$(uname -s | tr 'A-Z' 'a-z') @@ -38,11 +46,11 @@ mkdir "tmp.$$" cd "tmp.$$" unzip "../$fulljdk" - cd zulu* + cd $FULL_JDK_DIR ./bin/jlink --module-path ./jmods/ --add-modules "$modules" \ --vm=server --strip-debug --no-man-pages \ --output reduced - cp DISCLAIMER readme.txt legal/java.base/ASSEMBLY_EXCEPTION \ + cp $DOCS legal/java.base/ASSEMBLY_EXCEPTION \ reduced/ # These are necessary for --host_jvm_debug to work. cp bin/dt_socket.dll bin/jdwp.dll reduced/bin @@ -55,11 +63,11 @@ # to the owner stored in the archive - it will try to do that when running as # root, but fail when running inside Docker, so we explicitly disable it. tar xf "$fulljdk" --no-same-owner - cd zulu* + cd $FULL_JDK_DIR ./bin/jlink --module-path ./jmods/ --add-modules "$modules" \ --vm=server --strip-debug --no-man-pages \ --output reduced - cp DISCLAIMER readme.txt legal/java.base/ASSEMBLY_EXCEPTION \ + cp $DOCS legal/java.base/ASSEMBLY_EXCEPTION \ reduced/ # These are necessary for --host_jvm_debug to work. if [[ "$UNAME" =~ darwin ]]; then
diff --git a/src/test/py/bazel/test_base.py b/src/test/py/bazel/test_base.py index 8f92c52..1909afe 100644 --- a/src/test/py/bazel/test_base.py +++ b/src/test/py/bazel/test_base.py
@@ -58,6 +58,7 @@ 'rules_proto', 'remotejdk11_linux_for_testing', 'remotejdk11_linux_aarch64_for_testing', + 'remotejdk11_linux_ppc64le_for_testing', 'remotejdk11_macos_for_testing', 'remotejdk11_win_for_testing', 'remote_java_tools_darwin_for_testing',
diff --git a/src/test/shell/testenv.sh b/src/test/shell/testenv.sh index cd44777..46ec437 100755 --- a/src/test/shell/testenv.sh +++ b/src/test/shell/testenv.sh
@@ -309,6 +309,7 @@ "remote_java_tools_windows_for_testing" "remotejdk11_linux_for_testing" "remotejdk11_linux_aarch64_for_testing" + "remotejdk11_linux_ppc64le_for_testing" "remotejdk11_macos_for_testing" "remotejdk11_win_for_testing" "rules_cc"
diff --git a/tools/jdk/BUILD b/tools/jdk/BUILD index cbcff60..8d8120a 100644 --- a/tools/jdk/BUILD +++ b/tools/jdk/BUILD
@@ -498,6 +498,7 @@ "//src/conditions:windows": "@remotejdk11_win//:jdk", "//src/conditions:linux_aarch64": "@remotejdk11_linux_aarch64//:jdk", "//src/conditions:linux_x86_64": "@remotejdk11_linux//:jdk", + "//src/conditions:linux_ppc64le": "@remotejdk11_linux_ppc64le//:jdk", }, no_match_error = "Could not find a JDK for host execution environment, please explicitly" + " provide one using `--host_javabase.`",