Commit graph

26 commits

Author SHA1 Message Date
Adam Duskett 20d8d2aab0 package/{openjdk,openjdk-bin}: bump to version 11.0.8+10
Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2020-07-16 09:14:57 +02:00
Adam Duskett 316c144e27 package/openjdk: fix building against gcc10
GCC10 set's the -fno-common flag by default which causes OpenJDK to fail when
compiling.

Because there is no easy way to create a patch from the OpenJDK mercurial
repository, this patch was created by hand from the three commits listed in
the provided patch itself.

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-06-18 21:35:03 +02:00
Adam Duskett e9a02417f3 package/openjdk-bin: install to host/usr/lib/jvm
Buildroot currently installs openjdk-bin to $(HOST_DIR)/ instead of the more
traditional (for java installations) $(HOST_DIR)/usr/lib/jvm.

As described in https://bugs.busybox.net/show_bug.cgi?id=13001

"Openjdk-bin provides it's own libfreetype.so and places it into
$(HOST_DIR)/lib/. This library causes build failures with the
host-xapp_mkfontscale package due to the overwritten libfreetype.so.

mkfontscale.o: In function `doDirectory':
mkfontscale.c:(.text+0x1a80): undefined reference to `FT_Get_BDF_Property'
collect2: error: ld returned 1 exit status

Reproducing the error is done by repeating the following steps.
make host-freetype
make host-openjdk-bin
make host-xapp_mkfontscale"

There are two options for fixing this problem:

 1) add host-freetype and host-lksctp-tools as dependencies to host-openjdk-bin
    and then remove the provided libfreetype.so and libsctp.so libraries
    in a post_extract_hook.

 2) change the installation directory from $(HOST_DIR)/ to
    $(HOST_DIR)/usr/lib/jvm just like the target OpenJDK package and
    copy the entire source directories contents to the above location.

The second option provides the following advantages:
  - the directory structure is consistent with how we handle the target OpenJDK.

  - the HOST_OPENJDK_BIN_INSTALL_CMDS step is simplified.

  - packages such as Maven require directories of which we are currently not
    copying. These missing directories cause programs such as Maven to crash
    when running with an error such as
    "Can't read cryptographic policy directory: unlimited."

  - does not miss any other libraries that solution 1 would not cope with
    (e.g. libzip.so from host-libzip, or libnet.so from not-yet existing
    host-libnet, or libsctp.so from not-yet existing host-lksctp-tools)

Because the second option is both simple, easier to implement, is low-impact,
and fixes the problems described above wholly, it is the best to implement.

To implement the above changes, we must also modify the following files in the
same patch to match the host's new directory paths:

 - openjdk.mk
 - openjdk-jni-test.mk
 - openjdk-hello-world.mk

To avoid having to change all those packages in the future, expose two
new variables, HOST_OPENJDK_BIN_ROOT_DIR which contains the path where
the openjdk-bin was installed in, and JAVAC, which contains the path to
the javac compiler (modeled after the way the autoconf et al. variables
are set and exposed).

Tested with:
./support/testing/run-tests -o out -d dl tests.package.test_openjdk.TestOpenJdk

Fixes: https://bugs.busybox.net/show_bug.cgi?id=13001

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
[yann.morin.1998@free.fr:
  - introduce HOST_OPENJDK_BIN_ROOT_DIR and JAVAC
  - expand and tweak the commit log
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-06-18 11:01:41 +02:00
Adam Duskett 9815f143ff package/openjdk: install header files to staging
These files are necessary for C or C++ programs to use the native java
interface (JNI.)

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2020-06-17 22:01:20 +02:00
Adam Duskett 555aff43a5 package/{openjdk, openjdk-bin}: add support for building either lts or latest
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>
2020-04-23 21:54:46 +02:00
Adam Duskett e56d21ad63 package/{openjdk, openjdk-bin}: bump version to 14.0.1+7
Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-04-22 21:46:37 +02:00
Adam Duskett 1b48a1a650 packageJopenjdk: add support for building the full jdk
Some users may require the full JDK on the target to debug their programs.
This change is relatively trivial to add.

While the full JDK does have programs used for compiling on a target,
which is against Buildroot policy, the JDK also has several utilities used for
debugging purposes, which the JRE target does not build, and Buildroot supports
applications used for debugging purposes such as GDB.

As such, JDK support should be available for debugging purposes, and a note in
the Config.in file has been added under the JDK section, which informs the user
that JDK support is for debugging purposes only and that developing on a
target is not supported by Buildroot.

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Reviewed-by: Ryan Barnett <ryan.barnett@rockwellcollins.com>
Tested-by: Ryan Barnett <ryan.barnett@rockwellcollins.com>
[yann.morin.1998@free.fr:
  - s/OPENJDK_INSTALL_DIR/OPENJDK_VARIANT/
  - slightly rewrap help text
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-04-22 21:29:55 +02:00
Adam Duskett 6ee7de3d2f package/openjdk: Remove sparc support
Sparc support is deprecated and may be removed in future releases. There are
two choices to fix this issue:

1) Set --enable-deprecated-ports=yes in the CONF_OPTS to supress the error.
2) Remove support for Sparc.

Because this port is deprecated, it's safer to remove support alltogether.

Fixes:
    http://autobuild.buildroot.net/results/692820b4b6d4da42cd557fa7badbbd11806bbeba/

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-04-22 21:21:17 +02:00
Adam Duskett 63b576095b package/openjdk: copy all directories and files when installing
Several directories and files are currently not installed during the
target installation, these include:
  - conf
    Several configuration files, including security configuration files which
    may be necessary for running various java applications.

  - legal
    This directory contains legal notices that some java applications may
    require, as they may print legal information and will throw exceptions at
    runtime if the legal files are not present on the system.

  - release
    This file contains a list of modules included in the image.

Because these directories take up less than of megabyte extra, it is not an
issue to install all of them.

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Reviewed-by: Ryan Barnett <ryan.barnett@rockwellcollins.com>
Tested-by: Ryan Barnett <ryan.barnett@rockwellcollins.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-04-21 23:24:29 +02:00
Adam Duskett 3edb915709 package/openjdk: fix installation with merged usr directories
Currently, Buildroot installs the jre libraries using
cp -dprf /build/linux-*-release/images/jre/lib/* $(TARGET_DIR)/usr/lib/

However, if a system has a merged /usr directory, and there is a built kernel
before installing OpenJDK, the installation fails because jre/lib has binary
modules file, which causes the following error: cp: cannot overwrite directory
'/usr/lib/modules with non-directory

The obvious fix is to install the modules to /usr/lib/jvm/ and set the
appropriate rpaths via the --with-extra-ldflags conf option. However, this fix
does not work because the built binaries themselves do not link against
libjava.so

Indeed, running readelf on the built java binary reports the following:
"(RUNPATH) Library runpath: [/usr/lib/jvm]" and /usr/lib/jvm/libjava.so exists.
However, when running the Java binary on the target, the following error
occurs: "Error: could not find libjava.so."

The following is the result of "strace java" ran on the target:
faccessat(AT_FDCWD, "/usr/lib/libjava.so", F_OK) = -1 ENOENT
faccessat(AT_FDCWD, "/usr/jre/lib/libjava.so", F_OK) = -1 ENOENT
newfstatat(AT_FDCWD, "/usr/lib/libjava.so", 0x7ffe7b4af8, 0) = -1 ENOENT
newfstatat(AT_FDCWD, "/usr/lib/jvm/libjli.so", [sic] AT_SYMLINK_NOFOLLOW) = 0

As seen above, the java binary searches for libjli.so in /usr/lib/jvm,
which demonstrates that the java binary searches for some of the
DT_NEEDED libraries using the correct rpath. But libjava.so is not
searched from the rpath; it is instead dl-opened manually, looked for in
the search paths hardcoded to the following directories:
  - /usr/lib/
  - /usr/jre/lib/
  - $(dirname $0)/../lib/

The reason behind the hardcoded paths given by the maintainers is due to
historical purposes for the need to support several java versions at the
same time on a single system, and that changing the above behavior is not
likely to ever happen.

As such, most distributions such as Redhat do the following:
  - Create the directory /usr/lib/jvm/java-$(JAVA_VERSION)/
  - Install all directories and files found in images/jre to that directory.
  - Symlink the binaries to in /usr/lib/jvm/java-$(JAVA_VERSION)/bin to
    /usr/bin.

However, because Buildroot does not need to support multiple versions of java
concurrently, there is no need for the additional java-$(JAVA_VERSION)
directory.

To fix the above issue, the following changes are performed:
  - Introduce the variable "OPENJDK_INSTALL_BASE" which points to /usr/lib/jvm
  - Set the --with-extra-ldflags conf_opt to
      "-Wl,-rpath,$(OPENJDK_INSTALL_BASE)/lib,-rpath,
      $(OPENJDK_INSTALL_BASE)/lib/$(OPENJDK_JVM_VARIANT)"
  - Run "mkdir -p $(TARGET_DIR)/usr/lib/jvm/" in the INSTALL_TARGET_CMDS step.
  - Copy both the lib and bin directories to /usr/lib/jvm/
  - Symlink the binaries in /usr/lib/jvm/bin/ to /usr/bin.

Fixes: https://bugs.busybox.net/show_bug.cgi?id=12751

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Reviewed-by: Ryan Barnett <ryan.barnett@rockwellcollins.com>
Tested-by: Ryan Barnett <ryan.barnett@rockwellcollins.com>
[yann.morin.1998@free.fr: fix two remaining mis-placed '/']
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-04-21 23:17:18 +02:00
Adam Duskett b8082a8082 package/{openjdk, openjdk-bin}: bump version to 14+36
Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2020-03-24 21:28:50 +01:00
Adam Duskett e1215b7bc0 package/{openjdk,openjdk-bin}: bump version to 13.0.2+8
Other changes:
  - Add --with-stdc++lib=dynamic to openjdk.mk or else openjdk will fail to
    build because it defaults to looking for a static libstdc++ library.

Signed-off-by: Adam Duskett <aduskett@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2020-02-03 14:12:30 +01:00
Tudor Holton c55fe54d8a package/openjdk: use official hg.openjdk.java.net repository
Since Java 11 (and possibly earlier), OpenJDK now has its own official
repository at hg.openjdk.java.net which is referenced in all OpenJDK
documentation.  This patch brings buildroot into line with that
source, reducing the opportunity for code injection, and allowing
consistent patching both across projects and for patches specific to
buildroot environments.

diff -ru shows that the only changes between the downstream and upstream files at
this point in time is the addition of a .hg_archive.txt file,  containing:

repo: fd16c54261b32be1aaedd863b7e856801b7f8543
node: 7b6accc7c009304dd2979ea16c1cb15bf749a1fc
branch: default
tag: jdk-12.0.2+10
tag: jdk-12.0.2-ga

This does, however, change the hash for the tar.gz file (but not for the license).

With respect to the concern regarding upstream hash consistency, we have now been
using these archives for just over a year (since OpenJDK 11) and we haven't seen an
archive hash change in that time.  This was a vast improvement on the previous
Mercurial forest.  /archive is exactly as is sounds.  It's an archive that doesn't
change, which is why it effectively negates the need for a "downstream" mirror.

Tests completed successfully (which is not surprising since there are no code changes here):

$ ./support/testing/run-tests -d ./dl/ -k -o test_dir tests.package.test_openjdk.TestOpenJdk
14:35:25 TestOpenJdk                              Starting
['Hello, World']
['Test: Get JNI Version passed', 'Test: Read Native String Constant passed', 'Test: Write Java String to Native Library passed', 'Test: Write Java Char Array to Native Library passed', 'Test: Write String Member to Native Library passed', 'Test: Set String Member from Native Library passed', 'Test: Execeute Java Function from Native Library passed', 'Test: Instantiate Java Class passed', 'Test: Call Native Library to Set System Time passed']
14:35:46 TestOpenJdk                              Cleaning up
.
----------------------------------------------------------------------
Ran 1 test in 20.614s

OK

Signed-off-by: Tudor Holton <tudor@tudorholton.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-12-05 21:59:47 +01:00
Peter Korsgaard 3d1fe8b0f7 package/openjdk{, -bin}: security bump to version 12.0.2_10
Fixes the following security issues:

CVE-2019-7317 CVE-2019-2821 CVE-2019-2769 CVE-2019-2762 CVE-2019-2745
CVE-2019-2816 CVE-2019-2842 CVE-2019-2786 CVE-2019-2818 CVE-2019-2766
CVE-2019-6129

For details. see the advisory:
https://openjdk.java.net/groups/vulnerability/advisories/2019-07-16

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2019-07-30 17:27:15 +02:00
Adam Duskett 7e99d1de50 package/openjdk and package/openjdk-bin: bump to version 12.0.1+12
Signed-off-by: Adam Duskett <Aduskett@gmail.com>
[Arnout: rebase after change of version formatting]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
2019-06-30 16:05:23 +02:00
Victor Huesca b34ead55c0 package: remove non-conventional prefix/suffix from github-fetched packages
On Github, a large number of projects name their tag
<some-prefix>-0.3-<some-suffix> (i.e release-3.0, poco-0.1-release,
etc.). In fact majority of the cased adressed in this commit concerns
prefixes.

In most packages, we encode those prefix/suffix in the <pkg>_VERSION
variable.

The problem with this approach is that when used in conjunction with
release-monitoring.org, it doesn't work very well, because
release-monitoring.org has the concept of "version prefix/suffix" and
using that they drop the prefix/suffix to really get the version. For
example on https://release-monitoring.org/project/5418/ the latest
release of "poco" is "1.8.1", not "poco-1.8.1-release".

Therefore, a number of packages in Buildroot have a version that
doesn't match with release-monitoring.org.

Since really the version number of 1.8.1, is makes sense to update our
packages to drop these prefixes/suffixes.

This commit addreses the case of github-fetched packages with
non-conventional prefixes/suffixes.

Note that these changes modify the name of the files stored in DL_DIR,
which means that this will force a re-download of those package source
code for all users, and requires a change to their .hash file.

Signed-off-by: Victor Huesca <victor.huesca@bootlin.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
2019-06-19 23:26:35 +02:00
Fabrice Fontaine 10aa85ac8a package/openjdk: set PATH before calling make
PATH must be set to $(BR_PATH) thanks to $(TARGET_MAKE_ENV) before
calling make otherwise build fails on:
/bin/bash: gawk: command not found

When build fails, config.log contains the following line:

configure:13709: checking for gawk
configure:13725: found /home/buildroot/autobuild/run/instance-3/output/host/bin/gawk
configure:13736: result: gawk
[...]
ac_cv_prog_AWK=gawk

Fixes:
 - http://autobuild.buildroot.org/results/43c5d08f599e8f44b59a576d243ae1c7b27de7a3

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
2019-06-10 16:48:44 +02:00
Fabrice Fontaine 5493c18061 package/openjdk: needs host-gawk
Fixes:
 - http://autobuild.buildroot.org/results/bb1bb1cf8b58bf28039186866ed01521114acb72

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-06-01 23:06:57 +02:00
Adam Duskett 946ba7252b package/openjdk: only support a single variant at a time
The Zero variant won't build with the server or client also selected at the same
time, and expressing this in the Config.in would be too complicated to do.
Even so, selecting multiple variants doesn't seem to be that important in the
context of Buildroot.

This patch removes the ability to select multiple variants in favor
of just selecting one. The default is server as that is what all of the major
distributions currently use as the default as well.

Fixes:
http://autobuild.buildroot.net/results/a45cfa9b3602fd05f6adbf070a1bad6510975c36

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-04-17 21:05:07 +02:00
Adam Duskett aa47e2bebd package/openjdk: remove mips support
The mips-port project has been abandoned for some time:

  https://mail.openjdk.java.net/pipermail/mips-port/2018-August/000082.html

Fixes:

  http://autobuild.buildroot.net/results/1059026c9b5f503684fe1589cd43d25a8484290b/

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-04-17 08:51:40 +02:00
Adam Duskett 5e02703c32 package/openjdk: fix alsa-lib dependencies
OpenJDK requires the following alsa-lib modules to be build:
  - mixer
  - pcm
  - rawmidi
  - seq

Fixes:

  http://autobuild.buildroot.net/results/c35d64e659960663c935a31f4cb8ed4180728eb1
  http://autobuild.buildroot.net/results/845fe32967c9879b6c1adbf0630f358be215e174

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-04-08 22:30:38 +02:00
Adam Duskett 3d0b60e656 package/{openjdk,openjdk-bin}: bump version to 12+33
Because one package relies on the other, bump both at the same time.

Other changes:
 - Drop --with-cpu-port=aarch64 option as it is no longer a valid option.
   (See https://openjdk.java.net/jeps/340)
 - Add xlib_libXrandr as a dependency.

Tested with:
./support/testing/run-tests -s -o ./output/ -d dl tests.package.test_openjdk.TestOpenJdk

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-25 19:36:32 +01:00
Adam Duskett 011c2b915f package/openjdk: restrict to support architectures
This list is taken from make/autoconf/platform.m4 and fixes
http://autobuild.buildroot.net/results/df7/df7f393ec62f0e38034837ffa591ac5af424c373
http://autobuild.buildroot.net/results/c57/c5782d6b52516d07469adf6600d4fc69c4016157
http://autobuild.buildroot.net/results/f36/f36b96c91604dda021ee05dd0a79c4f7e89e5a5b

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
[Thomas:
 - rename option to BR2_PACKAGE_OPENJDK_ARCH_SUPPORTS
 - actually use it in the Config.in comments]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-25 17:50:30 +01:00
Matt Weber a54194f35c package/openjdk: support zero hotspot variant
The OpenJDK package supports a non-assembler variant of the hotspot
virtual machine.  This allows archtectures which don't have hard-coded
support (which provides better performance) to still build a virtual
machine that can execute JAVA.

Signed-off-by: Matthew Weber <matthew.weber@rockwellcollins.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-17 14:26:18 +01:00
Adam Duskett 3641d98ec4 package/openjdk: use AArch64 optimizations
Signed-off-by: Adam Duskett <Aduskett@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2019-03-17 13:50:50 +01:00
Adam Duskett 5366b8f734 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-17 13:49:35 +01:00