Skip to content

Commit

Permalink
Integrate OpenJCEPlus into Semeru OpenJDK
Browse files Browse the repository at this point in the history
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" or ".dll"
library.

Signed-off-by: Jinhang Zhang <Jinhang.Zhang@ibm.com>
  • Loading branch information
JinhangZhang committed Mar 15, 2024
1 parent 5d727cc commit 2b743ec
Show file tree
Hide file tree
Showing 17 changed files with 380 additions and 15 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ===========================================================================
# (c) Copyright IBM Corp. 2017, 2023 All Rights Reserved
# (c) Copyright IBM Corp. 2017, 2024 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
Expand All @@ -21,6 +21,7 @@
# exclude all source directories
/omr
/openj9
/OpenJCEPlus
/openssl
# exclude optional eclipse project file
/.project
Expand Down
1 change: 1 addition & 0 deletions closed/GensrcJ9JCL.gmk
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ $(eval $(call SetupCopyFiles,COPY_OVERLAY_FILES, \
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/jdk/internal/ref/PhantomCleanable.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/share/classes/sun/security/provider/DigestBase.java \
Expand Down
6 changes: 5 additions & 1 deletion closed/JPP.gmk
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ===========================================================================
# (c) Copyright IBM Corp. 2023, 2023 All Rights Reserved
# (c) Copyright IBM Corp. 2023, 2024 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
Expand Down Expand Up @@ -34,6 +34,10 @@ ifeq (true,$(OPENJ9_ENABLE_OPENJDK_METHODHANDLES))
JPP_TAGS += OPENJDK_METHODHANDLES
endif # OPENJ9_ENABLE_OPENJDK_METHODHANDLES

ifeq (true,$(BUILD_OPENJCEPLUS))
JPP_TAGS += OPENJCEPLUS_SUPPORT
endif # BUILD_OPENJCEPLUS

# invoke JPP to preprocess java source files
# $1 - configuration
# $2 - source directory
Expand Down
28 changes: 27 additions & 1 deletion closed/autoconf/custom-hook.m4
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ===========================================================================
# (c) Copyright IBM Corp. 2017, 2023 All Rights Reserved
# (c) Copyright IBM Corp. 2017, 2024 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
Expand Down Expand Up @@ -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],
Expand Down Expand Up @@ -826,3 +827,28 @@ AC_DEFUN([OPENJ9_GENERATE_TOOL_WRAPPERS],
OPENJ9_GENERATE_TOOL_WRAPPER([nasm], [$NASM])
OPENJ9_GENERATE_TOOL_WRAPPER([rc], [$RC])
])

AC_DEFUN([OPENJCEPLUS_SETUP],
[
AC_ARG_ENABLE([openjceplus], [AS_HELP_STRING([--enable-openjceplus],
[enable OpenJCEPlus integration @<:@disabled@:>@])])
AC_MSG_CHECKING([for OpenJCEPlus])
if test "x$enable_openjceplus" = xyes ; then
if test -d "$TOPDIR/OpenJCEPlus" ; then
AC_MSG_RESULT([yes (explicitly set)])
BUILD_OPENJCEPLUS=true
else
AC_MSG_RESULT([no])
AC_MSG_ERROR([OpenJCEPlus not found at $TOPDIR/OpenJCEPlus])
fi
elif test "x$enable_openjceplus" = xno ; then
AC_MSG_RESULT([no])
BUILD_OPENJCEPLUS=false
elif test "x$enable_openjceplus" = x ; then
AC_MSG_RESULT([no (default)])
BUILD_OPENJCEPLUS=false
else
AC_MSG_ERROR([--enable-openjceplus accepts no argument])
fi
AC_SUBST(BUILD_OPENJCEPLUS)
])
6 changes: 5 additions & 1 deletion closed/autoconf/custom-spec.gmk.in
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ===========================================================================
# (c) Copyright IBM Corp. 2017, 2023 All Rights Reserved
# (c) Copyright IBM Corp. 2017, 2024 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
Expand Down Expand Up @@ -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
3 changes: 2 additions & 1 deletion closed/custom/Images-pre.gmk
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ===========================================================================
# (c) Copyright IBM Corp. 2020, 2021 All Rights Reserved
# (c) Copyright IBM Corp. 2020, 2024 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
Expand All @@ -24,4 +24,5 @@ JRE_MODULES += \
openj9.dataaccess \
openj9.dtfj \
openj9.gpu \
$(if $(call equals, $(BUILD_OPENJCEPLUS), true), openjceplus) \
#
22 changes: 21 additions & 1 deletion closed/custom/Main.gmk
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ===========================================================================
# (c) Copyright IBM Corp. 2017, 2023 All Rights Reserved
# (c) Copyright IBM Corp. 2017, 2024 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
Expand Down Expand Up @@ -109,3 +109,23 @@ 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))

ifeq ($(call And, $(call isTargetOs, windows) $(call isTargetCpu, x86_64)), true)
OPENJCEPLUS_JGSKIT_MAKE := jgskit.win64.mak
else
OPENJCEPLUS_JGSKIT_MAKE := jgskit.mak
endif

openjceplus-copy : openjceplus-libs

.PHONY : openjceplus-clean

openjceplus-clean :
@$(ECHO) Cleaning OpenJCEPlus native code
$(MAKE) -C $(OPENJCEPLUS_TOPDIR)/src/main/native -f $(OPENJCEPLUS_JGSKIT_MAKE) cleanAll

clean-openjceplus : openjceplus-clean

endif # BUILD_OPENJCEPLUS
5 changes: 4 additions & 1 deletion closed/custom/ReleaseFile.gmk
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ===========================================================================
# (c) Copyright IBM Corp. 2017, 2022 All Rights Reserved
# (c) Copyright IBM Corp. 2017, 2024 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
Expand All @@ -21,3 +21,6 @@
SOURCE_REVISION := OpenJDK:$(shell $(GIT) -C $(TOPDIR) rev-parse --short HEAD)
SOURCE_REVISION += OpenJ9:$(shell $(GIT) -C $(OPENJ9_TOPDIR) rev-parse --short HEAD)
SOURCE_REVISION += OMR:$(shell $(GIT) -C $(OPENJ9OMR_TOPDIR) rev-parse --short HEAD)
ifeq (true,$(BUILD_OPENJCEPLUS))
SOURCE_REVISION += OpenJCEPlus:$(shell $(GIT) -C $(OPENJCEPLUS_TOPDIR) rev-parse --short HEAD)
endif
6 changes: 5 additions & 1 deletion closed/custom/common/Modules.gmk
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ===========================================================================
# (c) Copyright IBM Corp. 2017, 2022 All Rights Reserved
# (c) Copyright IBM Corp. 2017, 2024 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
Expand Down Expand Up @@ -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) :
Expand Down
3 changes: 2 additions & 1 deletion closed/custom/common/SetupJavaCompilers.gmk
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# ===========================================================================
# (c) Copyright IBM Corp. 2018, 2022 All Rights Reserved
# (c) Copyright IBM Corp. 2018, 2024 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
Expand All @@ -24,6 +24,7 @@ WARNING_MODULES := \
openj9.dtfj \
openj9.dtfjview \
openj9.traceformat \
openjceplus \
#

ifneq (,$(filter $(WARNING_MODULES),$(MODULE)))
Expand Down
68 changes: 67 additions & 1 deletion closed/get_j9_source.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash

# ===========================================================================
# (c) Copyright IBM Corp. 2017, 2023 All Rights Reserved
# (c) Copyright IBM Corp. 2017, 2024 All Rights Reserved
# ===========================================================================
#
# This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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#*=}"
;;
Expand Down Expand Up @@ -173,6 +208,37 @@ 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 [ -n "$gskit_credential" ] ; then
curl -u "$gskit_credential" $gskit_bin > ock/jgsk_crypto.tar
curl -u "$gskit_credential" $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"

Expand Down
58 changes: 58 additions & 0 deletions closed/make/copy/Copy-openjceplus.gmk
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# ===========================================================================
# (c) Copyright IBM Corp. 2023, 2024 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 <http://www.gnu.org/licenses/>.
# ===========================================================================

include $(TOPDIR)/closed/CopySupport.gmk

ifeq (true,$(BUILD_OPENJCEPLUS))
# Copy OpenJCEPlus legal files.
$(call openj9_copy_files,, \
$(OPENJCEPLUS_TOPDIR)/LICENSE \
$(LEGAL_DST_DIR)/OPENJCEPLUS_LICENSE)

$(call openj9_copy_files,, \
$(OPENJCEPLUS_TOPDIR)/NOTICES.md \
$(LEGAL_DST_DIR)/NOTICES.md)

# 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 := $(OPENJCEPLUS_TOPDIR)/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
Loading

0 comments on commit 2b743ec

Please sign in to comment.