kumquat-buildroot/package/openjdk/openjdk.mk

123 lines
3.5 KiB
Makefile
Raw Normal View History

package/openjdk: new package OpenJDK is a free and open-source implementation of the Java Platform. This package provides the option to build a client or a server JVM interpreter. The default option is the server option, as that is what the majority of users use. This JVM interpreter loads more slowly, putting more effort into JIT compilations to yield higher performance. Unlike most autotools packages, OpenJDK is exceptionally different and has many quirks, some of which are below: - X11, alsa, and cups are required to build Java, even if it's a headless build. See http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/common/doc/building.html#external-library-requirements for more information. - host-zip is needed for the zip executable. - There is no autogen.sh file, instead, a user must call "./configure autogen." - 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 linking failures. To fix this issue, ld is set to gcc. - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure option, and use $(MAKE1). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [Thomas: - drop explanations about CC, LD, CXX, etc. be set to their "actual binaries" instead of ccache: TARGET_CC/TARGET_LD/TARGET_CXX point to the compiler wrapper, so the usage of ccache is hidden - make sure at least one of the variants is enabled in Config.in - drop the submenu for variant selection - use system zlib instead of the bundled one. This works fine when BUILD_SYSROOT_CFLAGS and BUILD_SYSROOT_LDFLAGS are passed - fix minor nits in the Config.in comments] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-15 21:52:31 +01:00
################################################################################
#
# openjdk
#
################################################################################
OPENJDK_VERSION_MAJOR = 12.0.2
OPENJDK_VERSION_MINOR = 10
OPENJDK_VERSION = $(OPENJDK_VERSION_MAJOR)+$(OPENJDK_VERSION_MINOR)
OPENJDK_SITE = $(call github,AdoptOpenJDK,openjdk-jdk12u,jdk-$(OPENJDK_VERSION))
package/openjdk: new package OpenJDK is a free and open-source implementation of the Java Platform. This package provides the option to build a client or a server JVM interpreter. The default option is the server option, as that is what the majority of users use. This JVM interpreter loads more slowly, putting more effort into JIT compilations to yield higher performance. Unlike most autotools packages, OpenJDK is exceptionally different and has many quirks, some of which are below: - X11, alsa, and cups are required to build Java, even if it's a headless build. See http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/common/doc/building.html#external-library-requirements for more information. - host-zip is needed for the zip executable. - There is no autogen.sh file, instead, a user must call "./configure autogen." - 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 linking failures. To fix this issue, ld is set to gcc. - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure option, and use $(MAKE1). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [Thomas: - drop explanations about CC, LD, CXX, etc. be set to their "actual binaries" instead of ccache: TARGET_CC/TARGET_LD/TARGET_CXX point to the compiler wrapper, so the usage of ccache is hidden - make sure at least one of the variants is enabled in Config.in - drop the submenu for variant selection - use system zlib instead of the bundled one. This works fine when BUILD_SYSROOT_CFLAGS and BUILD_SYSROOT_LDFLAGS are passed - fix minor nits in the Config.in comments] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-15 21:52:31 +01:00
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 \
package/openjdk: new package OpenJDK is a free and open-source implementation of the Java Platform. This package provides the option to build a client or a server JVM interpreter. The default option is the server option, as that is what the majority of users use. This JVM interpreter loads more slowly, putting more effort into JIT compilations to yield higher performance. Unlike most autotools packages, OpenJDK is exceptionally different and has many quirks, some of which are below: - X11, alsa, and cups are required to build Java, even if it's a headless build. See http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/common/doc/building.html#external-library-requirements for more information. - host-zip is needed for the zip executable. - There is no autogen.sh file, instead, a user must call "./configure autogen." - 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 linking failures. To fix this issue, ld is set to gcc. - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure option, and use $(MAKE1). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [Thomas: - drop explanations about CC, LD, CXX, etc. be set to their "actual binaries" instead of ccache: TARGET_CC/TARGET_LD/TARGET_CXX point to the compiler wrapper, so the usage of ccache is hidden - make sure at least one of the variants is enabled in Config.in - drop the submenu for variant selection - use system zlib instead of the bundled one. This works fine when BUILD_SYSROOT_CFLAGS and BUILD_SYSROOT_LDFLAGS are passed - fix minor nits in the Config.in comments] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-15 21:52:31 +01:00
host-openjdk-bin \
host-pkgconf \
host-zip \
host-zlib \
alsa-lib \
cups \
fontconfig \
giflib \
jpeg \
lcms2 \
libpng \
libusb \
xlib_libXrandr \
package/openjdk: new package OpenJDK is a free and open-source implementation of the Java Platform. This package provides the option to build a client or a server JVM interpreter. The default option is the server option, as that is what the majority of users use. This JVM interpreter loads more slowly, putting more effort into JIT compilations to yield higher performance. Unlike most autotools packages, OpenJDK is exceptionally different and has many quirks, some of which are below: - X11, alsa, and cups are required to build Java, even if it's a headless build. See http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/common/doc/building.html#external-library-requirements for more information. - host-zip is needed for the zip executable. - There is no autogen.sh file, instead, a user must call "./configure autogen." - 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 linking failures. To fix this issue, ld is set to gcc. - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure option, and use $(MAKE1). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [Thomas: - drop explanations about CC, LD, CXX, etc. be set to their "actual binaries" instead of ccache: TARGET_CC/TARGET_LD/TARGET_CXX point to the compiler wrapper, so the usage of ccache is hidden - make sure at least one of the variants is enabled in Config.in - drop the submenu for variant selection - use system zlib instead of the bundled one. This works fine when BUILD_SYSROOT_CFLAGS and BUILD_SYSROOT_LDFLAGS are passed - fix minor nits in the Config.in comments] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-15 21:52:31 +01:00
xlib_libXrender \
xlib_libXt \
xlib_libXtst \
zlib
# JVM variants
ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_CLIENT),y)
OPENJDK_JVM_VARIANT = client
package/openjdk: new package OpenJDK is a free and open-source implementation of the Java Platform. This package provides the option to build a client or a server JVM interpreter. The default option is the server option, as that is what the majority of users use. This JVM interpreter loads more slowly, putting more effort into JIT compilations to yield higher performance. Unlike most autotools packages, OpenJDK is exceptionally different and has many quirks, some of which are below: - X11, alsa, and cups are required to build Java, even if it's a headless build. See http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/common/doc/building.html#external-library-requirements for more information. - host-zip is needed for the zip executable. - There is no autogen.sh file, instead, a user must call "./configure autogen." - 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 linking failures. To fix this issue, ld is set to gcc. - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure option, and use $(MAKE1). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [Thomas: - drop explanations about CC, LD, CXX, etc. be set to their "actual binaries" instead of ccache: TARGET_CC/TARGET_LD/TARGET_CXX point to the compiler wrapper, so the usage of ccache is hidden - make sure at least one of the variants is enabled in Config.in - drop the submenu for variant selection - use system zlib instead of the bundled one. This works fine when BUILD_SYSROOT_CFLAGS and BUILD_SYSROOT_LDFLAGS are passed - fix minor nits in the Config.in comments] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-15 21:52:31 +01:00
endif
ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_SERVER),y)
OPENJDK_JVM_VARIANT = server
package/openjdk: new package OpenJDK is a free and open-source implementation of the Java Platform. This package provides the option to build a client or a server JVM interpreter. The default option is the server option, as that is what the majority of users use. This JVM interpreter loads more slowly, putting more effort into JIT compilations to yield higher performance. Unlike most autotools packages, OpenJDK is exceptionally different and has many quirks, some of which are below: - X11, alsa, and cups are required to build Java, even if it's a headless build. See http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/common/doc/building.html#external-library-requirements for more information. - host-zip is needed for the zip executable. - There is no autogen.sh file, instead, a user must call "./configure autogen." - 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 linking failures. To fix this issue, ld is set to gcc. - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure option, and use $(MAKE1). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [Thomas: - drop explanations about CC, LD, CXX, etc. be set to their "actual binaries" instead of ccache: TARGET_CC/TARGET_LD/TARGET_CXX point to the compiler wrapper, so the usage of ccache is hidden - make sure at least one of the variants is enabled in Config.in - drop the submenu for variant selection - use system zlib instead of the bundled one. This works fine when BUILD_SYSROOT_CFLAGS and BUILD_SYSROOT_LDFLAGS are passed - fix minor nits in the Config.in comments] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-15 21:52:31 +01:00
endif
ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_ZERO),y)
OPENJDK_JVM_VARIANT = zero
OPENJDK_DEPENDENCIES += libffi
endif
package/openjdk: new package OpenJDK is a free and open-source implementation of the Java Platform. This package provides the option to build a client or a server JVM interpreter. The default option is the server option, as that is what the majority of users use. This JVM interpreter loads more slowly, putting more effort into JIT compilations to yield higher performance. Unlike most autotools packages, OpenJDK is exceptionally different and has many quirks, some of which are below: - X11, alsa, and cups are required to build Java, even if it's a headless build. See http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/common/doc/building.html#external-library-requirements for more information. - host-zip is needed for the zip executable. - There is no autogen.sh file, instead, a user must call "./configure autogen." - 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 linking failures. To fix this issue, ld is set to gcc. - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure option, and use $(MAKE1). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [Thomas: - drop explanations about CC, LD, CXX, etc. be set to their "actual binaries" instead of ccache: TARGET_CC/TARGET_LD/TARGET_CXX point to the compiler wrapper, so the usage of ccache is hidden - make sure at least one of the variants is enabled in Config.in - drop the submenu for variant selection - use system zlib instead of the bundled one. This works fine when BUILD_SYSROOT_CFLAGS and BUILD_SYSROOT_LDFLAGS are passed - fix minor nits in the Config.in comments] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-15 21:52:31 +01:00
# 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-debug-level=release \
--with-devkit=$(HOST_DIR) \
--with-extra-cflags="$(TARGET_CFLAGS)" \
--with-extra-cxxflags="$(TARGET_CXXFLAGS)" \
--with-giflib=system \
--with-jobs=$(PARALLEL_JOBS) \
--with-jvm-variants=$(OPENJDK_JVM_VARIANT) \
package/openjdk: new package OpenJDK is a free and open-source implementation of the Java Platform. This package provides the option to build a client or a server JVM interpreter. The default option is the server option, as that is what the majority of users use. This JVM interpreter loads more slowly, putting more effort into JIT compilations to yield higher performance. Unlike most autotools packages, OpenJDK is exceptionally different and has many quirks, some of which are below: - X11, alsa, and cups are required to build Java, even if it's a headless build. See http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/common/doc/building.html#external-library-requirements for more information. - host-zip is needed for the zip executable. - There is no autogen.sh file, instead, a user must call "./configure autogen." - 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 linking failures. To fix this issue, ld is set to gcc. - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure option, and use $(MAKE1). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [Thomas: - drop explanations about CC, LD, CXX, etc. be set to their "actual binaries" instead of ccache: TARGET_CC/TARGET_LD/TARGET_CXX point to the compiler wrapper, so the usage of ccache is hidden - make sure at least one of the variants is enabled in Config.in - drop the submenu for variant selection - use system zlib instead of the bundled one. This works fine when BUILD_SYSROOT_CFLAGS and BUILD_SYSROOT_LDFLAGS are passed - fix minor nits in the Config.in comments] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-15 21:52:31 +01:00
--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-vendor-name="AdoptOpenJDK" \
--with-vendor-url="https://adoptopenjdk.net/" \
--with-vendor-version-string="AdoptOpenJDK" \
--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
package/openjdk: new package OpenJDK is a free and open-source implementation of the Java Platform. This package provides the option to build a client or a server JVM interpreter. The default option is the server option, as that is what the majority of users use. This JVM interpreter loads more slowly, putting more effort into JIT compilations to yield higher performance. Unlike most autotools packages, OpenJDK is exceptionally different and has many quirks, some of which are below: - X11, alsa, and cups are required to build Java, even if it's a headless build. See http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/common/doc/building.html#external-library-requirements for more information. - host-zip is needed for the zip executable. - There is no autogen.sh file, instead, a user must call "./configure autogen." - 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 linking failures. To fix this issue, ld is set to gcc. - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure option, and use $(MAKE1). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [Thomas: - drop explanations about CC, LD, CXX, etc. be set to their "actual binaries" instead of ccache: TARGET_CC/TARGET_LD/TARGET_CXX point to the compiler wrapper, so the usage of ccache is hidden - make sure at least one of the variants is enabled in Config.in - drop the submenu for variant selection - use system zlib instead of the bundled one. This works fine when BUILD_SYSROOT_CFLAGS and BUILD_SYSROOT_LDFLAGS are passed - fix minor nits in the Config.in comments] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-15 21:52:31 +01:00
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) $(MAKE1) -C $(@D) legacy-jre-image
package/openjdk: new package OpenJDK is a free and open-source implementation of the Java Platform. This package provides the option to build a client or a server JVM interpreter. The default option is the server option, as that is what the majority of users use. This JVM interpreter loads more slowly, putting more effort into JIT compilations to yield higher performance. Unlike most autotools packages, OpenJDK is exceptionally different and has many quirks, some of which are below: - X11, alsa, and cups are required to build Java, even if it's a headless build. See http://hg.openjdk.java.net/jdk10/jdk10/raw-file/tip/common/doc/building.html#external-library-requirements for more information. - host-zip is needed for the zip executable. - There is no autogen.sh file, instead, a user must call "./configure autogen." - 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 linking failures. To fix this issue, ld is set to gcc. - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure option, and use $(MAKE1). Signed-off-by: Adam Duskett <Aduskett@gmail.com> [Thomas: - drop explanations about CC, LD, CXX, etc. be set to their "actual binaries" instead of ccache: TARGET_CC/TARGET_LD/TARGET_CXX point to the compiler wrapper, so the usage of ccache is hidden - make sure at least one of the variants is enabled in Config.in - drop the submenu for variant selection - use system zlib instead of the bundled one. This works fine when BUILD_SYSROOT_CFLAGS and BUILD_SYSROOT_LDFLAGS are passed - fix minor nits in the Config.in comments] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-15 21:52:31 +01:00
endef
# Calling make install always builds and installs the JDK instead of the JRE,
# which makes manual installation necessary.
define OPENJDK_INSTALL_TARGET_CMDS
cp -dpfr $(@D)/build/linux-*-release/images/jre/bin/* $(TARGET_DIR)/usr/bin/
cp -dpfr $(@D)/build/linux-*-release/images/jre/lib/* $(TARGET_DIR)/usr/lib/
endef
$(eval $(generic-package))