555aff43a5
As Java is used quite a bit in the enterprise world, having the option to build the LTS version of OpenJDK is quite convenient and also a requirement for many companies wanting to use Java. As such, there are three options: 1) Continue only to support the latest version of OpenJDK. 2) Downgrade our existing OpenJDK package from 14 to 11. 3) Add an option to support either OpenJDK 11 or 14. OpenJDK 11 and 14 currently have: - The same configure options. - The same license files and hashes for those license files. - The same dependencies. - The same method to build and install. As such, supporting both 11 and 14 is not only an easy option to add to Buildroot, but also a nice feature for users who wish to use Java in an embedded environment with a company that mandates the use of the LTS version. To make it explicit that this choice really is about LTS vs. latest, and not about 11 vs. 14, the options are really named with LTS and LATEST, so that future defconfigs will not have to migrate when the versions changes (e.g. we update from 14->15, or from 11 to the next LTS). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [yann.morin.1998@free.fr: - keep latest as the default, for existing defconfigs - rename options: drop numbers, use LTS and LATEST ] Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
158 lines
4.8 KiB
Makefile
158 lines
4.8 KiB
Makefile
################################################################################
|
|
#
|
|
# openjdk
|
|
#
|
|
################################################################################
|
|
|
|
ifeq ($(BR2_OPENJDK_VERSION_LATEST),y)
|
|
OPENJDK_VERSION_MAJOR = 14.0.1
|
|
OPENJDK_VERSION_MINOR = 7
|
|
OPENJDK_VERSION = $(OPENJDK_VERSION_MAJOR)+$(OPENJDK_VERSION_MINOR)
|
|
OPENJDK_SOURCE = jdk-$(OPENJDK_VERSION).tar.gz
|
|
OPENJDK_SITE = https://hg.openjdk.java.net/jdk-updates/jdk14u/archive
|
|
else
|
|
OPENJDK_VERSION_MAJOR = 11.0.7
|
|
OPENJDK_VERSION_MINOR = 10
|
|
OPENJDK_VERSION = $(OPENJDK_VERSION_MAJOR)+$(OPENJDK_VERSION_MINOR)
|
|
OPENJDK_SOURCE = jdk-$(OPENJDK_VERSION).tar.gz
|
|
OPENJDK_SITE = https://hg.openjdk.java.net/jdk-updates/jdk11u/archive
|
|
endif
|
|
|
|
OPENJDK_LICENSE = GPL-2.0+ with exception
|
|
OPENJDK_LICENSE_FILES = LICENSE
|
|
|
|
# OpenJDK requires Alsa, cups, and X11 even for a headless build.
|
|
# host-zip is needed for the zip executable.
|
|
OPENJDK_DEPENDENCIES = \
|
|
host-gawk \
|
|
host-openjdk-bin \
|
|
host-pkgconf \
|
|
host-zip \
|
|
host-zlib \
|
|
alsa-lib \
|
|
cups \
|
|
fontconfig \
|
|
giflib \
|
|
jpeg \
|
|
lcms2 \
|
|
libpng \
|
|
libusb \
|
|
xlib_libXrandr \
|
|
xlib_libXrender \
|
|
xlib_libXt \
|
|
xlib_libXtst \
|
|
zlib
|
|
|
|
# JVM variants
|
|
ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_CLIENT),y)
|
|
OPENJDK_JVM_VARIANT = client
|
|
endif
|
|
ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_SERVER),y)
|
|
OPENJDK_JVM_VARIANT = server
|
|
endif
|
|
ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_ZERO),y)
|
|
OPENJDK_JVM_VARIANT = zero
|
|
OPENJDK_DEPENDENCIES += libffi
|
|
endif
|
|
|
|
ifeq ($(BR2_PACKAGE_OPENJDK_FULL_JDK),y)
|
|
OPENJDK_VARIANT = jdk
|
|
OPENJDK_MAKE_TARGET = jdk-image
|
|
else
|
|
OPENJDK_VARIANT = jre
|
|
OPENJDK_MAKE_TARGET = legacy-jre-image
|
|
endif
|
|
|
|
# OpenJDK installs a file named 'modules' in jre/lib, which gets installed as
|
|
# /usr/lib/modules. However, with a merged /usr, this conflicts with the
|
|
# directory named 'modules' installed by the kernel. If OpenJDK gets built
|
|
# after the kernel, this manifests itself with: "cp: cannot overwrite
|
|
# directory '/usr/lib/modules with non-directory."
|
|
OPENJDK_INSTALL_BASE = /usr/lib/jvm
|
|
|
|
# OpenJDK ignores some variables unless passed via the environment.
|
|
# These variables are PATH, LD, CC, CXX, and CPP.
|
|
# OpenJDK defaults ld to the ld binary but passes -Xlinker and -z as
|
|
# arguments during the linking process, which causes compilation failures.
|
|
# To fix this issue, LD is set to point to gcc.
|
|
OPENJDK_CONF_ENV = \
|
|
PATH=$(BR_PATH) \
|
|
CC=$(TARGET_CC) \
|
|
CPP=$(TARGET_CPP) \
|
|
CXX=$(TARGET_CXX) \
|
|
LD=$(TARGET_CC) \
|
|
BUILD_SYSROOT_CFLAGS="$(HOST_CFLAGS)" \
|
|
BUILD_SYSROOT_LDFLAGS="$(HOST_LDFLAGS)"
|
|
|
|
OPENJDK_CONF_OPTS = \
|
|
--disable-full-docs \
|
|
--disable-hotspot-gtest \
|
|
--disable-manpages \
|
|
--disable-warnings-as-errors \
|
|
--enable-headless-only \
|
|
--enable-openjdk-only \
|
|
--enable-unlimited-crypto \
|
|
--openjdk-target=$(GNU_TARGET_NAME) \
|
|
--with-boot-jdk=$(HOST_DIR) \
|
|
--with-stdc++lib=dynamic \
|
|
--with-debug-level=release \
|
|
--with-devkit=$(HOST_DIR) \
|
|
--with-extra-cflags="$(TARGET_CFLAGS)" \
|
|
--with-extra-cxxflags="$(TARGET_CXXFLAGS)" \
|
|
--with-extra-ldflags="-Wl,-rpath,$(OPENJDK_INSTALL_BASE)/lib,-rpath,$(OPENJDK_INSTALL_BASE)/lib/$(OPENJDK_JVM_VARIANT)" \
|
|
--with-giflib=system \
|
|
--with-jobs=$(PARALLEL_JOBS) \
|
|
--with-jvm-variants=$(OPENJDK_JVM_VARIANT) \
|
|
--with-lcms=system \
|
|
--with-libjpeg=system \
|
|
--with-libpng=system \
|
|
--with-zlib=system \
|
|
--with-native-debug-symbols=none \
|
|
--without-version-pre \
|
|
--with-sysroot=$(STAGING_DIR) \
|
|
--with-version-build="$(OPENJDK_VERSION_MAJOR)" \
|
|
--with-version-string="$(OPENJDK_VERSION_MAJOR)"
|
|
|
|
# If building for AArch64, use the provided CPU port.
|
|
ifeq ($(BR2_aarch64),y)
|
|
OPENJDK_CONF_OPTS += --with-abi-profile=aarch64
|
|
endif
|
|
|
|
ifeq ($(BR2_CCACHE),y)
|
|
OPENJDK_CONF_OPTS += \
|
|
--enable-ccache \
|
|
--with-ccache-dir=$(BR2_CCACHE_DIR)
|
|
endif
|
|
|
|
# Autogen and configure are performed in a single step.
|
|
define OPENJDK_CONFIGURE_CMDS
|
|
chmod +x $(@D)/configure
|
|
cd $(@D); $(OPENJDK_CONF_ENV) ./configure autogen $(OPENJDK_CONF_OPTS)
|
|
endef
|
|
|
|
# Make -jn is unsupported. Instead, set the "--with-jobs=" configure option,
|
|
# and use $(MAKE1).
|
|
define OPENJDK_BUILD_CMDS
|
|
$(TARGET_MAKE_ENV) $(OPENJDK_CONF_ENV) $(MAKE1) -C $(@D) $(OPENJDK_MAKE_TARGET)
|
|
endef
|
|
|
|
# Calling make install always builds and installs the JDK instead of the JRE,
|
|
# which makes manual installation necessary.
|
|
define OPENJDK_INSTALL_TARGET_CMDS
|
|
mkdir -p $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)
|
|
cp -dpfr $(@D)/build/linux-*-release/images/$(OPENJDK_VARIANT)/* \
|
|
$(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/
|
|
cd $(TARGET_DIR)/usr/bin && ln -snf ../..$(OPENJDK_INSTALL_BASE)/bin/* .
|
|
endef
|
|
|
|
# Demos and includes are not needed on the target
|
|
ifeq ($(BR2_PACKAGE_OPENJDK_FULL_JDK),y)
|
|
define OPENJDK_REMOVE_UNEEDED_JDK_DIRECTORIES
|
|
$(RM) -r $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/include/
|
|
$(RM) -r $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/demo/
|
|
endef
|
|
OPENJDK_TARGET_FINALIZE_HOOKS += OPENJDK_REMOVE_UNEEDED_JDK_DIRECTORIES
|
|
endif
|
|
|
|
$(eval $(generic-package))
|