From 5fcb6295fbe2edb9b20cdd40f9db8fee35fa6b22 Mon Sep 17 00:00:00 2001 From: Tao Liu Date: Thu, 8 Jun 2023 17:20:37 -0400 Subject: [PATCH] Integrate OpenJCEPlus into Semeru OpenJDK module openjceplus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tao Liu Integrate the building of OpenJCEPlus with Semeru OpenJDK as a module “openjceplus”. The java codes will be built with Semeru OpenJDK as a jmod, and the native codes will be built as a “.so” library. --- .gitignore | 1 + closed/autoconf/custom-hook.m4 | 27 ++++++++ closed/autoconf/custom-spec.gmk.in | 7 ++ closed/custom/Main.gmk | 50 +++++++++++++++ closed/custom/common/Modules.gmk | 3 +- closed/get_j9_source.sh | 67 ++++++++++++++++++++ closed/make/modules/openjceplus/Copy.gmk | 44 +++++++++++++ get_source.sh | 11 +++- src/java.base/share/classes/module-info.java | 38 +++++++---- 9 files changed, 232 insertions(+), 16 deletions(-) create mode 100644 closed/make/modules/openjceplus/Copy.gmk diff --git a/.gitignore b/.gitignore index b9a4f673906..310d1e14ec2 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ # exclude all source directories /omr /openj9 +/OpenJCEPlus /openssl # exclude optional eclipse project file /.project diff --git a/closed/autoconf/custom-hook.m4 b/closed/autoconf/custom-hook.m4 index da658cf95b0..9dd84b958b3 100644 --- a/closed/autoconf/custom-hook.m4 +++ b/closed/autoconf/custom-hook.m4 @@ -52,6 +52,7 @@ AC_DEFUN_ONCE([CUSTOM_EARLY_HOOK], OPENJ9_CONFIGURE_INLINE_TYPES OPENJ9_THIRD_PARTY_REQUIREMENTS OPENJ9_CHECK_NASM_VERSION + OPENJCEPLUS_SETUP ]) AC_DEFUN([OPENJ9_CONFIGURE_CMAKE], @@ -818,3 +819,29 @@ AC_DEFUN([OPENJ9_GENERATE_TOOL_WRAPPERS], OPENJ9_GENERATE_TOOL_WRAPPER([nasm], [$NASM]) OPENJ9_GENERATE_TOOL_WRAPPER([rc], [$RC]) ]) + +AC_DEFUN([OPENJCEPLUS_SETUP], +[ + BUILD_JGSKIT=false + GSKIT_HOME= + OPENJCEPLUS_TOPDIR= + OPENJCEPLUS_TOPDIR_JAVA= + + OPENJCEPLUS_TOPDIR="$TOPDIR/OpenJCEPlus" + OPENJCEPLUS_TOPDIR_JAVA="$TOPDIR/OpenJCEPlus/src/main" + GSKIT_HOME="$TOPDIR/OpenJCEPlus/icc/jgsk_sdk" + + AC_MSG_CHECKING([if OpenJCEPlus will be built with Semeru]) + if ! test -d "$OPENJCEPLUS_TOPDIR" ; then + BUILD_JGSKIT=false + AC_MSG_RESULT([no]) + else + BUILD_JGSKIT=true + AC_MSG_RESULT([yes]) + fi + + AC_SUBST(BUILD_JGSKIT) + AC_SUBST(GSKIT_HOME) + AC_SUBST(OPENJCEPLUS_TOPDIR) + AC_SUBST(OPENJCEPLUS_TOPDIR_JAVA) +]) diff --git a/closed/autoconf/custom-spec.gmk.in b/closed/autoconf/custom-spec.gmk.in index 9b8063fd454..389377ba357 100644 --- a/closed/autoconf/custom-spec.gmk.in +++ b/closed/autoconf/custom-spec.gmk.in @@ -52,6 +52,7 @@ WARNING_MODULES := \ openj9.dtfj \ openj9.dtfjview \ openj9.traceformat \ + openjceplus \ # ifneq (,$(filter $(WARNING_MODULES),$(MODULE))) @@ -182,3 +183,9 @@ J9JCL_SOURCES_DONEFILE := $(MAKESUPPORT_OUTPUTDIR)/j9jcl.done # Disable all hotspot features. JVM_FEATURES_server := + +# required by OpenJCEPlus +BUILD_JGSKIT := @BUILD_JGSKIT@ +GSKIT_HOME := @GSKIT_HOME@ +OPENJCEPLUS_TOPDIR := @OPENJCEPLUS_TOPDIR@ +OPENJCEPLUS_TOPDIR_JAVA := @OPENJCEPLUS_TOPDIR_JAVA@ diff --git a/closed/custom/Main.gmk b/closed/custom/Main.gmk index 48d2169c400..bda6818a9d3 100644 --- a/closed/custom/Main.gmk +++ b/closed/custom/Main.gmk @@ -119,3 +119,53 @@ ifneq (,$(HEALTHCENTER_JAR)) # The content must be extracted before module-info can be compiled. ibm.healthcenter-java : ibm.healthcenter-copy endif # HEALTHCENTER_JAR + +ifeq (true,$(BUILD_JGSKIT)) + +# Identify the desired JGSKIT target platform. +JGSKIT_TARGET := +JGSKIT_MAKE := jgskit.mak +JGSKIT_MAKE_PATH := $(OPENJCEPLUS_TOPDIR)/src/main/native/ +JCE_CLASSPATH := $(OPENJCEPLUS_TOPDIR)/src/main/java:$(TOPDIR)/src/java.base/share/classes +JCE_CLASSPATH_WIN64 := "$(call MixedPath,$(OPENJCEPLUS_TOPDIR)/src/main/java)\;$(call MixedPath,$(TOPDIR)/src/java.base/share/classes)" + +ifeq ($(OPENJDK_TARGET_OS), aix) + JGSKIT_TARGET := ppc-aix64 +else ifeq ($(OPENJDK_TARGET_OS), linux) + ifeq ($(OPENJDK_TARGET_CPU), x86_64) + JGSKIT_TARGET := x86-linux64 + else ifeq ($(OPENJDK_TARGET_CPU), ppc64le) + JGSKIT_TARGET := ppcle-linux64 + endif +else ifeq ($(OPENJDK_TARGET_OS), windows) + ifeq ($(OPENJDK_TARGET_CPU), x86_64) + JGSKIT_TARGET := win64 + JGSKIT_MAKE := jgskit.win64.mak + JCE_CLASSPATH := $(JCE_CLASSPATH_WIN64) + GSKIT_HOME := $(call MixedPath,$(GSKIT_HOME)) + BOOT_JDK := $(call MixedPath,$(BOOT_JDK)) + endif +endif # OPENJDK_TARGET_OS + +ifeq (,$(JGSKIT_TARGET)) + $(error Unsupported platform $(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU)) +endif # JGSKIT_TARGET + +.PHONY : clean-openjceplus openjceplus-libs + +clean : clean-openjceplus + +clean-openjceplus : + @$(ECHO) Cleaning OpenJCEPlus native + @$(RM) -f $(addprefix $(JGSKIT_MAKE_PATH), com_ibm_crypto_plus_provider_icc_NativeInterface.h com_ibm_crypto_plus_provider_icc_FastJNIBuffer.h libjgskit.x) + $(MAKE) -C $(JGSKIT_MAKE_PATH) -f $(JGSKIT_MAKE) cleanAll + +openjceplus-copy : openjceplus-libs + +openjceplus-libs : + @$(ECHO) Compiling OpenJCEPlus native + export PLATFORM=$(JGSKIT_TARGET) JAVA_HOME=$(BOOT_JDK) GSKIT_HOME=$(GSKIT_HOME) JCE_CLASSPATH=$(JCE_CLASSPATH) \ + && $(MAKE) -j1 -C $(JGSKIT_MAKE_PATH) -f $(JGSKIT_MAKE) all + @$(ECHO) OpenJCEplus compile complete + +endif # BUILD_JGSKIT diff --git a/closed/custom/common/Modules.gmk b/closed/custom/common/Modules.gmk index fc0a05a0a67..74df4a6f3e8 100644 --- a/closed/custom/common/Modules.gmk +++ b/closed/custom/common/Modules.gmk @@ -1,5 +1,5 @@ # =========================================================================== -# (c) Copyright IBM Corp. 2017, 2022 All Rights Reserved +# (c) Copyright IBM Corp. 2017, 2023 All Rights Reserved # =========================================================================== # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as @@ -54,6 +54,7 @@ MODULES_FILTER += \ TOP_SRC_DIRS += \ $(J9JCL_SOURCES_DIR) \ + $(OPENJCEPLUS_TOPDIR_JAVA) \ # .PHONY : generate-j9jcl-sources diff --git a/closed/get_j9_source.sh b/closed/get_j9_source.sh index c5754c82a79..45f58654f08 100644 --- a/closed/get_j9_source.sh +++ b/closed/get_j9_source.sh @@ -39,6 +39,13 @@ usage() { echo " -omr-branch the OpenJ9/omr git branch: openj9" echo " -omr-sha a commit SHA for the omr repository" echo " -omr-reference a local repo to use as a clone reference" + echo " -openjceplus-repo the OpenJCEPlus repository url" + echo " -openjceplus-branch the OpenJCEPlus git branch" + echo " -openjceplus-sha a commit SHA for the OpenJCEPlus repository" + echo " -openjceplus-reference a local repo to use as a clone reference" + echo " -with-gskit-bin the GSKit binary url" + echo " -with-gskit-sdk-bin the GSKIT SDK binary url" + echo " -with-gskit-bin-credential the credential for downloading the GSKit binaries" echo " -parallel (boolean) if 'true' then the clone j9 repository commands run in parallel, default is false" echo "" exit 1 @@ -108,6 +115,34 @@ for i in "$@" ; do references[omr]="${i#*=}" ;; + -openjceplus-repo=* ) + git_urls[OpenJCEPlus]="${i#*=}" + ;; + + -openjceplus-branch=* ) + branches[OpenJCEPlus]="${i#*=}" + ;; + + -openjceplus-sha=* ) + shas[OpenJCEPlus]="${i#*=}" + ;; + + -with-gskit-bin=* ) + gskit_bin="${i#*=}" + ;; + + -with-gskit-sdk-bin=* ) + gskit_sdk_bin="${i#*=}" + ;; + + -with-gskit-bin-credential=* ) + gskit_bin_credential="${i#*=}" + ;; + + -openjceplus-reference=* ) + references[OpenJCEPlus]="${i#*=}" + ;; + -parallel=* ) pflag="${i#*=}" ;; @@ -173,6 +208,38 @@ if [ ${pflag} = true ] ; then wait fi +# Download ICC binaries and create Java module folder +openjceplus_source="OpenJCEPlus" +if [ "${git_urls[$openjceplus_source]}" ]; then + + echo + echo "$openjceplus_source exists, download ICC binaries" + echo + + cd $openjceplus_source + mkdir -p ./icc/jgsk_sdk/lib64/ + + if [ $gskit_bin_credential ]; then + # Download GSKit binaries from artifactory + curl -vk -u "$gskit_bin_credential" -X GET $gskit_bin > ./icc/jgsk_crypto.tar + curl -vk -u "$gskit_bin_credential" -X GET $gskit_sdk_bin > ./icc/jgsk_crypto_sdk.tar + else + echo + echo "GSKit binaries are needed for compiling $openjceplus_source" + echo "Please set -with-gskit-bin, -with-gskit-sdk-bin, and -with-gskit-bin-credential" + exit 1 + fi + + tar -xf ./icc/jgsk_crypto_sdk.tar -C ./icc/ + tar -xf ./icc/jgsk_crypto.tar -C ./icc/jgsk_sdk/lib64/ + + # Create OpenJCEPlus Java module folder + mkdir -p ./src/main/openjceplus/share/classes/ + cp -r ./src/main/java/* ./src/main/openjceplus/share/classes/ + + cd .. +fi + END_TIME=$(date +%s) date "+[%F %T] OpenJ9 clone repositories finished in $(($END_TIME - $START_TIME)) seconds" diff --git a/closed/make/modules/openjceplus/Copy.gmk b/closed/make/modules/openjceplus/Copy.gmk new file mode 100644 index 00000000000..87cd7054fec --- /dev/null +++ b/closed/make/modules/openjceplus/Copy.gmk @@ -0,0 +1,44 @@ +# =========================================================================== +# (c) Copyright IBM Corp. 2021, 2023 All Rights Reserved +# =========================================================================== +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# IBM designates this particular file as subject to the "Classpath" exception +# as provided by IBM in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, see . +# =========================================================================== + +include $(TOPDIR)/closed/CopySupport.gmk + +ifeq (true,$(BUILD_JGSKIT)) + # Copy OpenJCEPlus native libraries + $(eval $(call SetupCopyFiles, COPY_JGSKIT_LIBS, \ + SRC := $(OPENJCEPLUS_TOPDIR), \ + FILES := $(filter %.so %.x %.dll,$(call FindFiles, $(OPENJCEPLUS_TOPDIR))), \ + FLATTEN := true, \ + DEST := $(LIB_DST_DIR), \ + )) + + TARGETS += $(COPY_JGSKIT_LIBS) + + # Bundle GSKIT library + ICC_DIR := $(GSKIT_HOME)/lib64 + + $(eval $(call SetupCopyFiles, COPY_ICC, \ + SRC := $(ICC_DIR), \ + DEST := $(LIB_DST_DIR), \ + FILES := $(call FindFiles, $(ICC_DIR)), \ + )) + + TARGETS += $(COPY_ICC) +endif # BUILD_JGSKIT diff --git a/get_source.sh b/get_source.sh index 90756e803f2..c599c71ee3c 100644 --- a/get_source.sh +++ b/get_source.sh @@ -1,6 +1,6 @@ #!/bin/bash # =========================================================================== -# (c) Copyright IBM Corp. 2017, 2022 All Rights Reserved +# (c) Copyright IBM Corp. 2017, 2023 All Rights Reserved # =========================================================================== # # This code is free software; you can redistribute it and/or modify it @@ -40,6 +40,13 @@ usage() { echo " -omr-branch the OpenJ9/omr git branch: openj9" echo " -omr-sha a commit SHA for the omr repository" echo " -omr-reference a local repo to use as a clone reference" + echo " -openjceplus-repo the OpenJCEPlus repository url" + echo " -openjceplus-branch the OpenJCEPlus git branch" + echo " -openjceplus-sha a commit SHA for the OpenJCEPlus repository" + echo " -openjceplus-reference a local repo to use as a clone reference" + echo " -with-gskit-bin the GSKit binary url" + echo " -with-gskit-sdk-bin the GSKIT SDK binary url" + echo " -with-gskit-bin-credential the credential for downloading the GSKit binaries" echo " -parallel (boolean) if 'true' then the clone j9 repository commands run in parallel, default is false" echo " --openssl-repo Specify the OpenSSL repository to download from" echo " --openssl-version Specify the version of OpenSSL source to download" @@ -57,7 +64,7 @@ for i in "$@" ; do usage ;; - -openj9-repo=* | -openj9-branch=* | -openj9-sha=* | -openj9-reference=* | -omr-repo=* | -omr-branch=* | -omr-sha=* | -omr-reference=* | -parallel=* ) + -openj9-repo=* | -openj9-branch=* | -openj9-sha=* | -openj9-reference=* | -omr-repo=* | -omr-branch=* | -omr-sha=* | -omr-reference=* | -openjceplus-repo=* | -openjceplus-branch=* | -openjceplus-sha=* | -openjceplus-reference=* | -with-gskit-bin=* | -with-gskit-sdk-bin=* | -with-gskit-bin-credential=* | -parallel=* ) j9options="${j9options} ${i}" ;; diff --git a/src/java.base/share/classes/module-info.java b/src/java.base/share/classes/module-info.java index 644c1a6e13b..691686ce542 100644 --- a/src/java.base/share/classes/module-info.java +++ b/src/java.base/share/classes/module-info.java @@ -25,7 +25,7 @@ /* * =========================================================================== - * (c) Copyright IBM Corp. 2022, 2022 All Rights Reserved + * (c) Copyright IBM Corp. 2022, 2023 All Rights Reserved * =========================================================================== */ @@ -141,7 +141,8 @@ // see make/gensrc/GenModuleInfo.gmk exports com.sun.crypto.provider to - jdk.crypto.cryptoki; + jdk.crypto.cryptoki, + openjceplus; exports sun.invoke.util to jdk.compiler, jdk.incubator.foreign; @@ -182,7 +183,8 @@ jdk.compiler, jdk.jlink; exports jdk.internal.logger to - java.logging; + java.logging, + openjceplus; exports jdk.internal.org.objectweb.asm to jdk.jartool, jdk.jfr, @@ -216,7 +218,8 @@ jdk.nio.mapmode, jdk.unsupported, jdk.internal.vm.ci, - jdk.incubator.foreign; + jdk.incubator.foreign, + openjceplus; exports jdk.internal.module to java.instrument, java.management.rmi, @@ -280,7 +283,8 @@ jdk.sctp; exports sun.net.www to java.net.http, - jdk.jartool; + jdk.jartool, + openjceplus; exports sun.net.www.protocol.http to java.security.jgss; exports sun.nio.ch to @@ -310,14 +314,17 @@ jdk.crypto.ec, jdk.incubator.foreign; exports sun.security.internal.interfaces to - jdk.crypto.cryptoki; + jdk.crypto.cryptoki, + openjceplus; exports sun.security.internal.spec to - jdk.crypto.cryptoki; + jdk.crypto.cryptoki, + openjceplus; exports sun.security.jca to java.smartcardio, jdk.crypto.ec, jdk.crypto.cryptoki, - jdk.naming.dns; + jdk.naming.dns, + openjceplus; exports sun.security.pkcs to jdk.crypto.ec, jdk.jartool; @@ -326,7 +333,8 @@ java.security.jgss, jdk.crypto.cryptoki, jdk.crypto.ec, - jdk.security.auth; + jdk.security.auth, + openjceplus; exports sun.security.provider.certpath to java.naming, jdk.jartool; @@ -348,7 +356,8 @@ jdk.crypto.cryptoki, jdk.jartool, jdk.security.auth, - jdk.security.jgss; + jdk.security.jgss, + openjceplus; exports sun.security.util.math to jdk.crypto.ec; exports sun.security.util.math.intpoly to @@ -356,7 +365,8 @@ exports sun.security.x509 to jdk.crypto.ec, jdk.crypto.cryptoki, - jdk.jartool; + jdk.jartool, + openjceplus; exports sun.security.validator to jdk.jartool; exports sun.util.cldr to @@ -368,14 +378,16 @@ exports sun.util.logging to java.desktop, java.logging, - java.prefs; + java.prefs, + openjceplus; exports sun.util.resources to jdk.localedata; exports jdk.internal.invoke to jdk.incubator.foreign; exports openj9.internal.security to jdk.crypto.cryptoki, - jdk.crypto.ec; + jdk.crypto.ec, + openjceplus; // the service types defined by the APIs in this module