diff --git a/.gitignore b/.gitignore index 043c19a1b00..8945e729432 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/GensrcJ9JCL.gmk b/closed/GensrcJ9JCL.gmk index eaded1a21df..7715d441f36 100644 --- a/closed/GensrcJ9JCL.gmk +++ b/closed/GensrcJ9JCL.gmk @@ -46,6 +46,7 @@ $(eval $(call SetupCopyFiles,COPY_OVERLAY_FILES, \ src/java.base/share/classes/java/util/TimerTask.java \ src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java \ src/java.base/share/classes/jdk/internal/misc/JavaNetInetAddressAccess.java \ + src/java.base/share/classes/module-info.java \ src/java.base/share/classes/sun/security/jca/ProviderConfig.java \ src/java.base/share/classes/sun/security/jca/ProviderList.java \ src/java.base/unix/classes/java/lang/ProcessEnvironment.java \ diff --git a/closed/JPP.gmk b/closed/JPP.gmk index d7ace87aadf..8bc3e332775 100644 --- a/closed/JPP.gmk +++ b/closed/JPP.gmk @@ -30,6 +30,10 @@ ifeq (true,$(OPENJ9_ENABLE_CRIU_SUPPORT)) JPP_TAGS += CRIU_SUPPORT endif # OPENJ9_ENABLE_CRIU_SUPPORT +ifeq (true,$(BUILD_OPENJCEPLUS)) + JPP_TAGS += OPENJCEPLUS_SUPPORT +endif # BUILD_OPENJCEPLUS + ifeq (true,$(OPENJ9_ENABLE_OPENJDK_METHODHANDLES)) JPP_TAGS += OPENJDK_METHODHANDLES endif # OPENJ9_ENABLE_OPENJDK_METHODHANDLES diff --git a/closed/autoconf/custom-hook.m4 b/closed/autoconf/custom-hook.m4 index d158e0ab84e..81381880352 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_OPENJDK_METHODHANDLES OPENJ9_THIRD_PARTY_REQUIREMENTS OPENJ9_CHECK_NASM_VERSION + OPENJCEPLUS_SETUP ]) AC_DEFUN([OPENJ9_CONFIGURE_CMAKE], @@ -826,3 +827,17 @@ AC_DEFUN([OPENJ9_GENERATE_TOOL_WRAPPERS], OPENJ9_GENERATE_TOOL_WRAPPER([nasm], [$NASM]) OPENJ9_GENERATE_TOOL_WRAPPER([rc], [$RC]) ]) + +AC_DEFUN([OPENJCEPLUS_SETUP], +[ + AC_MSG_CHECKING([for OpenJCEPlus]) + if test -d "$TOPDIR/OpenJCEPlus" ; then + BUILD_OPENJCEPLUS=true + AC_MSG_RESULT([yes]) + else + BUILD_OPENJCEPLUS=false + AC_MSG_RESULT([no]) + fi + + AC_SUBST(BUILD_OPENJCEPLUS) +]) diff --git a/closed/autoconf/custom-spec.gmk.in b/closed/autoconf/custom-spec.gmk.in index 74d0107719b..198a98d23c8 100644 --- a/closed/autoconf/custom-spec.gmk.in +++ b/closed/autoconf/custom-spec.gmk.in @@ -179,3 +179,7 @@ ifeq (riscv64,$(OPENJDK_TARGET_CPU)) JAVA_FLAGS += -DserverStartupTimeout=36000 endif endif + +# Required by OpenJCEPlus. +BUILD_OPENJCEPLUS := @BUILD_OPENJCEPLUS@ +OPENJCEPLUS_TOPDIR := $(TOPDIR)/OpenJCEPlus diff --git a/closed/custom/Images-pre.gmk b/closed/custom/Images-pre.gmk index 6e343fd396b..1c7443d6d82 100644 --- a/closed/custom/Images-pre.gmk +++ b/closed/custom/Images-pre.gmk @@ -1,5 +1,5 @@ # =========================================================================== -# (c) Copyright IBM Corp. 2020, 2021 All Rights Reserved +# (c) Copyright IBM Corp. 2020, 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 @@ -24,4 +24,5 @@ JRE_MODULES += \ openj9.dataaccess \ openj9.dtfj \ openj9.gpu \ + $(if $(call equals, $(BUILD_OPENJCEPLUS), true), openjceplus) \ # diff --git a/closed/custom/Main.gmk b/closed/custom/Main.gmk index b086f61c5d1..d28a29282de 100644 --- a/closed/custom/Main.gmk +++ b/closed/custom/Main.gmk @@ -109,3 +109,28 @@ 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_OPENJCEPLUS)) + +JGSKIT_MAKE := jgskit.mak +ifeq ($(call isTargetOs, windows), true) + ifeq ($(call isTargetCpu, x86_64), true) + JGSKIT_MAKE := jgskit.win64.mak + endif +endif + +openjceplus-copy : openjceplus-libs + +.PHONY : openjceplus-clean + +openjceplus-clean : + @$(ECHO) Cleaning OpenJCEPlus native + @$(RM) -f \ + $(addprefix $(OPENJCEPLUS_TOPDIR)/src/main/native/, \ + com_ibm_crypto_plus_provider_icc_FastJNIBuffer.h \ + com_ibm_crypto_plus_provider_icc_NativeInterface.h) + $(MAKE) -C $(OPENJCEPLUS_TOPDIR)/src/main/native -f $(JGSKIT_MAKE) cleanAll + +clean : openjceplus-clean + +endif # BUILD_OPENJCEPLUS diff --git a/closed/custom/common/Modules.gmk b/closed/custom/common/Modules.gmk index fc0a05a0a67..394236b8885 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 @@ -56,6 +56,10 @@ TOP_SRC_DIRS += \ $(J9JCL_SOURCES_DIR) \ # +ifeq (true,$(BUILD_OPENJCEPLUS)) + TOP_SRC_DIRS += $(OPENJCEPLUS_TOPDIR)/src/main +endif + .PHONY : generate-j9jcl-sources generate-j9jcl-sources $(J9JCL_SOURCES_DONEFILE) : diff --git a/closed/get_j9_source.sh b/closed/get_j9_source.sh index c5754c82a79..ef0911da8b0 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 " -gskit-bin the GSKit binary url" + echo " -gskit-sdk-bin the GSKIT SDK binary url" + echo " -gskit-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#*=}" + ;; + + -openjceplus-reference=* ) + references[OpenJCEPlus]="${i#*=}" + ;; + + -gskit-bin=* ) + gskit_bin="${i#*=}" + ;; + + -gskit-sdk-bin=* ) + gskit_sdk_bin="${i#*=}" + ;; + + -gskit-credential=* ) + gskit_credential="${i#*=}" + ;; + -parallel=* ) pflag="${i#*=}" ;; @@ -173,6 +208,38 @@ if [ ${pflag} = true ] ; then wait fi +# Download OCK binaries and create Java module folder +openjceplus_source=OpenJCEPlus +if [ -n "${git_urls[$openjceplus_source]}" ] ; then + + echo + echo "$openjceplus_source exists, download OCK binaries" + echo + + cd $openjceplus_source + mkdir -p ock/jgsk_sdk/lib64 + + if [ $gskit_credential ]; then + # Download GSKit binaries from artifactory + curl -vk -u "$gskit_credential" -X GET $gskit_bin > ./ock/jgsk_crypto.tar + curl -vk -u "$gskit_credential" -X GET $gskit_sdk_bin > ./ock/jgsk_crypto_sdk.tar + else + echo + echo "GSKit binaries are needed for compiling $openjceplus_source" + echo "Please set -gskit-bin, -gskit-sdk-bin, and -gskit-credential" + exit 1 + fi + + tar -xf ./ock/jgsk_crypto_sdk.tar -C ./ock/ + tar -xf ./ock/jgsk_crypto.tar -C ./ock/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/copy/Copy-openjceplus.gmk b/closed/make/copy/Copy-openjceplus.gmk new file mode 100644 index 00000000000..ec20171d3d0 --- /dev/null +++ b/closed/make/copy/Copy-openjceplus.gmk @@ -0,0 +1,49 @@ +# =========================================================================== +# (c) Copyright IBM Corp. 2023, 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_OPENJCEPLUS)) + # Copy OpenJCEPlus native libraries. + $(eval $(call SetupCopyFiles, OPENJCEPLUS_JGSKIT_LIBS_COPY, \ + SRC := $(OPENJCEPLUS_TOPDIR)/target, \ + FILES := $(filter %.dll %.so %.x, $(call FindFiles, $(OPENJCEPLUS_TOPDIR)/target)), \ + FLATTEN := true, \ + DEST := $(LIB_DST_DIR), \ + )) + + TARGETS += $(OPENJCEPLUS_JGSKIT_LIBS_COPY) + + # Bundle GSKIT library. + OPENJCEPLUS_OCK_DIR := $(TOPDIR)/OpenJCEPlus/ock/jgsk_sdk/lib64 + ifeq ($(call isTargetOs, windows), true) + OPENJCEPLUS_OCK_SUB_DIR := modules_cmds + else + OPENJCEPLUS_OCK_SUB_DIR := modules_libs + endif + + $(eval $(call SetupCopyFiles, OPENJCEPLUS_OCK_COPY, \ + SRC := $(OPENJCEPLUS_OCK_DIR), \ + DEST := $(SUPPORT_OUTPUTDIR)/$(OPENJCEPLUS_OCK_SUB_DIR)/$(MODULE), \ + FILES := $(call FindFiles, $(OPENJCEPLUS_OCK_DIR)), \ + )) + + TARGETS += $(OPENJCEPLUS_OCK_COPY) +endif # BUILD_OPENJCEPLUS diff --git a/closed/make/lib/Lib-openjceplus.gmk b/closed/make/lib/Lib-openjceplus.gmk new file mode 100644 index 00000000000..66eb3b209d4 --- /dev/null +++ b/closed/make/lib/Lib-openjceplus.gmk @@ -0,0 +1,68 @@ +# =========================================================================== +# (c) Copyright IBM Corp. 2023, 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 LibCommon.gmk + +ifeq (true,$(BUILD_OPENJCEPLUS)) + +# Identify the desired JGSKIT target platform. +GSKIT_HOME := $(OPENJCEPLUS_TOPDIR)/ock/jgsk_sdk +JGSKIT_PLATFORM := +JGSKIT_MAKE := jgskit.mak +JGSKIT_MAKE_PATH := $(OPENJCEPLUS_TOPDIR)/src/main/native +JCE_CLASSPATH := $(JDK_OUTPUTDIR)/modules/openjceplus:$(JDK_OUTPUTDIR)/modules/java.base + +ifeq ($(call isTargetOs, aix), true) + JGSKIT_PLATFORM := ppc-aix64 +else ifeq ($(call isTargetOs, linux), true) + ifeq ($(call isTargetCpu, ppc64le), true) + JGSKIT_PLATFORM := ppcle-linux64 + else ifeq ($(call isTargetCpu, x86_64), true) + JGSKIT_PLATFORM := x86-linux64 + endif +else ifeq ($(call isTargetOs, windows), true) + ifeq ($(call isTargetCpu, x86_64), true) + JGSKIT_PLATFORM := win64 + JGSKIT_MAKE := jgskit.win64.mak + JCE_CLASSPATH := "$(call MixedPath,$(OPENJCEPLUS_TOPDIR)/src/main/java)\;$(call MixedPath,$(TOPDIR)/src/java.base/share/classes)" + GSKIT_HOME := $(call MixedPath,$(GSKIT_HOME)) + BOOT_JDK := $(call MixedPath,$(BOOT_JDK)) + endif +endif + +ifeq (,$(JGSKIT_PLATFORM)) + $(error Unsupported platform $(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU)) +endif # JGSKIT_PLATFORM + +.PHONY : compile-libs + +compile-libs : + @$(ECHO) Compiling OpenJCEPlus native + export \ + GSKIT_HOME=$(GSKIT_HOME) \ + JAVA_HOME=$(BOOT_JDK) \ + JCE_CLASSPATH=$(JCE_CLASSPATH) \ + PLATFORM=$(JGSKIT_PLATFORM) \ + && $(MAKE) -j1 -C $(JGSKIT_MAKE_PATH) -f $(JGSKIT_MAKE) all + @$(ECHO) OpenJCEplus compile complete + +TARGETS += compile-libs + +endif # BUILD_OPENJCEPLUS diff --git a/get_source.sh b/get_source.sh index 90756e803f2..7fcaec15b56 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 " -gskit-bin the GSKit binary url" + echo " -gskit-sdk-bin the GSKIT SDK binary url" + echo " -gskit-credential the credential for downloading the GSKit and GSKit SDK" 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,23 @@ for i in "$@" ; do usage ;; - -openj9-repo=* | -openj9-branch=* | -openj9-sha=* | -openj9-reference=* | -omr-repo=* | -omr-branch=* | -omr-sha=* | -omr-reference=* | -parallel=* ) + -gskit-bin=* \ + | -gskit-credential=* \ + | -gskit-sdk-bin=* \ + | -omr-branch=* \ + | -omr-reference=* \ + | -omr-repo=* \ + | -omr-sha=* \ + | -openj9-branch=* \ + | -openj9-reference=* \ + | -openj9-repo=* \ + | -openj9-sha=* \ + | -openjceplus-branch=* \ + | -openjceplus-reference=* \ + | -openjceplus-repo=* \ + | -openjceplus-sha=* \ + | -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 6805f533c45..a1d079199d9 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 * =========================================================================== */ @@ -160,6 +160,9 @@ jdk.compiler, jdk.jlink; exports jdk.internal.logger to +/*[IF OPENJCEPLUS_SUPPORT]*/ + openjceplus, +/*[ENDIF] OPENJCEPLUS_SUPPORT */ java.logging; exports jdk.internal.org.objectweb.asm to jdk.jartool, @@ -182,6 +185,9 @@ exports jdk.internal.org.xml.sax.helpers to jdk.jfr; exports jdk.internal.misc to +/*[IF OPENJCEPLUS_SUPPORT]*/ + openjceplus, +/*[ENDIF] OPENJCEPLUS_SUPPORT */ java.desktop, java.logging, java.management, @@ -252,7 +258,9 @@ jdk.jconsole, jdk.sctp; exports sun.net.www to - java.desktop, +/*[IF OPENJCEPLUS_SUPPORT]*/ + openjceplus, +/*[ENDIF] OPENJCEPLUS_SUPPORT */ java.net.http, jdk.jartool; exports sun.net.www.protocol.http to @@ -283,8 +291,14 @@ java.security.jgss, jdk.crypto.ec; exports sun.security.internal.interfaces to +/*[IF OPENJCEPLUS_SUPPORT]*/ + openjceplus, +/*[ENDIF] OPENJCEPLUS_SUPPORT */ jdk.crypto.cryptoki; exports sun.security.internal.spec to +/*[IF OPENJCEPLUS_SUPPORT]*/ + openjceplus, +/*[ENDIF] OPENJCEPLUS_SUPPORT */ jdk.crypto.cryptoki; exports sun.security.jca to java.smartcardio, @@ -292,6 +306,9 @@ jdk.crypto.cryptoki, jdk.naming.dns; exports sun.security.pkcs to +/*[IF OPENJCEPLUS_SUPPORT]*/ + openjceplus, +/*[ENDIF] OPENJCEPLUS_SUPPORT */ jdk.crypto.ec, jdk.jartool; exports sun.security.provider to @@ -311,6 +328,9 @@ exports sun.security.tools to jdk.jartool; exports sun.security.util to +/*[IF OPENJCEPLUS_SUPPORT]*/ + openjceplus, +/*[ENDIF] OPENJCEPLUS_SUPPORT */ java.desktop, java.naming, java.rmi, @@ -329,6 +349,9 @@ exports sun.security.util.math.intpoly to jdk.crypto.ec exports sun.security.x509 to +/*[IF OPENJCEPLUS_SUPPORT]*/ + openjceplus, +/*[ENDIF] OPENJCEPLUS_SUPPORT */ jdk.crypto.ec, jdk.crypto.cryptoki, jdk.jartool; @@ -341,6 +364,9 @@ jdk.jlink, jdk.localedata; exports sun.util.logging to +/*[IF OPENJCEPLUS_SUPPORT]*/ + openjceplus, +/*[ENDIF] OPENJCEPLUS_SUPPORT */ java.desktop, java.logging, java.prefs;