[Buildroot] [PATCH v7 1/3] openjdk: new package

Matthew Weber matthew.weber at rockwellcollins.com
Tue Feb 26 14:46:48 UTC 2019


Adam,

On Mon, Feb 11, 2019 at 1:12 PM <aduskett at gmail.com> wrote:
>
> From: Adam Duskett <Aduskett at gmail.com>
>
> 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.
>
> - If ccache is enabled, Buildroot sets CC, CXX, and CPP to the ccache binary,
>   which causes the configuration error:
>   "Please use --enable-ccache instead of providing a wrapped compiler."
>   This error is why CC, CPP, and CXX are explicitly set to point to their
>   actual binaries.
>
> - Make -jn is unsupported. Instead, one must use the "--with-jobs=" configure
>   option, and use $(MAKE1).
>
> - Even when cross-compiling, OpenJDK builds several host-tools using the host's
>   gcc. In the case of zlib, if a host doesn't have the zlib development package
>   installed, OpenJDK compilation stops because zlib.h won't exist on the host
>   system. Because zlib is used to compile both native tools and cross-compiled
>   tools, patching make/autoconf/lib-bundled.m4 to call PKG_CHECK_MODULES for
>   zlib results in the host gcc trying to use cross-compiled libraries for
>   compiling native tools, which results in linking failures.
>   Using --with-zlib=bundled allows OpenJDK to compile correctly.
>
> Signed-off-by: Adam Duskett <Aduskett at gmail.com>
> ---
> Changes v1 -> v2:
>   - Fixed the patch name.
>
> Changes v2 -> v3:
>   - Changed the install location of the libraries and binaries to
>     $(TARGET_DIR)/bin and $(TARGET_DIR)/lib.
>
>   - Changed -with-boot-jdk location to $(HOST_DIR)/openjdk
>
>   - Added a more in-depth commit message explaining some of the my reasoning
>     for some of the quirks in the package files.
>
> Changes v3 -> v4:
>   - Changed GPLv2+ -> GPL-2.0+ (Thomas)
>   - Added BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS to Config.in
>   - Removed first person wordage. (Thomas)
>
> Changes v4 -> v5:
>   - Add jpeg, giflib, libpng, and zlib as dependencies. (Thomas)
>   - Remove dependencies that aren't necessary. (Thomas)
>   - Add better comments in the openjdk.mk file. (Matthew)
>   - Change --with-boot-jdk location to just $(HOST_DIR)
>   - Use newer Oracle provided cpu port for aarch64.
>   - Update version to 11.0.2+9
>
> Changes v5 -> v6:
>   - Added comment about zlib in the commit message.
>   - Added LCMS2 as a dependency.
>   - Added more comments in Config.in
>   - Added host-zip as a dependency in openjdk.mk.
>   - Drop zlib as a dependency (See above comment.)
>   - Changed --with-zlib=system to --with-zlib=bundled (See above comment.)
>   - Cleaned up grammar in openjdk.mk.
>   - Removed uneeded conf_opts in openjdk.mk.
>   - Reverted previous change of --with-cpu-port=aarch64 to
>     --with-cpu-port=arm64. This change breaks compiling, with missing calls to
>     NativePltCall.
>
> Changes v6 -> v7:
>   - Removed AArch64 support in favor of a separate patch.
>     OpenJDK works on AArch64 without the option; it just isn't as fast.
>     This change makes the patch set follow section 21.5.1 of the Buildroot
>     manual:
>     "The patch itself should do only one change, but do it completely."
>   - Fix typos (Thomas)
>   - Clean up spacing in oppenjdk.mk (Thomas)
>   - Add more explanations to the commit message (Thomas)
>   - Clean up grammar in the openjdk.mk comments.
>   - Clean up grammar in the commit message.
>   - Reword many of the comments in the openjdk.mk file to better explain why
>     the reasoning behind the logic.
>   - Remove --prefix from configure options. This option is used only if
>     "make install" is called.
>   - Removed --with-extra-path=$(HOST_DIR)/bin:$(HOST_DIR)/sbin, as this is also
>     not needed.
>   - Change cp -rf to cp -dpfr for the OPENJDK_INSTALL_TARGET_CMDS step.
>
>
>  DEVELOPERS                   |   1 +
>  package/Config.in            |   1 +
>  package/openjdk/Config.in    |  56 +++++++++++++++++
>  package/openjdk/openjdk.hash |   3 +
>  package/openjdk/openjdk.mk   | 114 +++++++++++++++++++++++++++++++++++
>  5 files changed, 175 insertions(+)
>  create mode 100644 package/openjdk/Config.in
>  create mode 100644 package/openjdk/openjdk.hash
>  create mode 100644 package/openjdk/openjdk.mk
>
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 89a8e2d2a2..a36c359561 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -50,6 +50,7 @@ F:    package/libselinux/
>  F:     package/libsemanage/
>  F:     package/libsepol/
>  F:     package/nginx-naxsi/
> +F:     package/openjdk/
>  F:     package/openjdk-bin/
>  F:     package/policycoreutils/
>  F:     package/python-flask-sqlalchemy/
> diff --git a/package/Config.in b/package/Config.in
> index 29862c478c..4bd946d65e 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -668,6 +668,7 @@ menu "Mono libraries/modules"
>  endmenu
>  endif
>         source "package/nodejs/Config.in"
> +       source "package/openjdk/Config.in"
>         source "package/perl/Config.in"
>  if BR2_PACKAGE_PERL
>  menu "Perl libraries/modules"
> diff --git a/package/openjdk/Config.in b/package/openjdk/Config.in
> new file mode 100644
> index 0000000000..4dd55764b7
> --- /dev/null
> +++ b/package/openjdk/Config.in
> @@ -0,0 +1,56 @@
> +config BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS
> +       bool
> +       default y if BR2_HOSTARCH = "x86_64"
> +
> +config BR2_PACKAGE_OPENJDK
> +       bool "OpenJDK"
> +       depends on !BR2_SOFT_FLOAT
> +       depends on !BR2_STATIC_LIBS # Glibc
> +       depends on BR2_INSTALL_LIBSTDCPP # cups
> +       depends on BR2_TOOLCHAIN_HAS_THREADS # alsa-lib, cups, libusb
> +       depends on BR2_TOOLCHAIN_USES_GLIBC
> +       depends on BR2_USE_MMU # cups
> +       depends on BR2_PACKAGE_XORG7

I was getting setup to test this on powerpc and noticed it would be
good to have a conditional comment about requiring xorg if it isn't
enabled.  Maybe break that out from the comment below that requires
both the toolchain and xorg dependencies before displaying the note.

>
> +
> +comment "OpenJDK needs X11, glibc, and a toolchain w/ wchar, dynamic library, threads, C++"
> +       depends on BR2_USE_MMU
> +       depends on BR2_PACKAGE_XORG7
> +       depends on BR2_STATIC_LIBS || !BR2_INSTALL_LIBSTDCPP || \
> +               !BR2_TOOLCHAIN_HAS_THREADS || !BR2_TOOLCHAIN_USES_GLIBC
> +
>

Matt


More information about the buildroot mailing list