[Buildroot] [PATCH] package/openjdk-bin: install to host/usr/lib/jvm
Yann E. MORIN
yann.morin.1998 at free.fr
Thu Jun 18 11:42:46 UTC 2020
Adam, All,
On 2020-06-17 14:55 -0700, aduskett at gmail.com spake thusly:
> From: Adam Duskett <Aduskett at gmail.com>
> 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."
>
> 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
>
> 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 at gmail.com>
I've slightly changed that patch, see the commit I just pushed:
- introduce HOST_OPENJDK_BIN_ROOT_DIR and JAVAC
- expand and tweak the commit log
Thanks!
Regards,
Yann E. MORIN.
> ---
> package/openjdk-bin/openjdk-bin.mk | 8 +++-----
> package/openjdk/openjdk.mk | 2 +-
> .../package/openjdk-hello-world/openjdk-hello-world.mk | 2 +-
> .../openjdk/package/openjdk-jni-test/openjdk-jni-test.mk | 2 +-
> 4 files changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/package/openjdk-bin/openjdk-bin.mk b/package/openjdk-bin/openjdk-bin.mk
> index f4a8979e0b..f67f3b7ee5 100644
> --- a/package/openjdk-bin/openjdk-bin.mk
> +++ b/package/openjdk-bin/openjdk-bin.mk
> @@ -26,11 +26,9 @@ HOST_OPENJDK_BIN_LICENSE_FILES = legal/java.prefs/LICENSE legal/java.prefs/ASSEM
> # Because unpack200 is a deprecated tool, removing it to fix this
> # issue is safe.
> define HOST_OPENJDK_BIN_INSTALL_CMDS
> - mkdir -p $(HOST_DIR)/bin
> - cp -dpfr $(@D)/bin/* $(HOST_DIR)/bin/
> - mkdir -p $(HOST_DIR)/lib
> - cp -dpfr $(@D)/lib/* $(HOST_DIR)/lib/
> - $(RM) -f $(HOST_DIR)/bin/unpack200
> + mkdir -p $(HOST_DIR)/usr/lib/jvm
> + cp -dpfr $(@D)/* $(HOST_DIR)/usr/lib/jvm/
> + $(RM) -f $(HOST_DIR)/usr/lib/jvm/bin/unpack200
> endef
>
> $(eval $(host-generic-package))
> diff --git a/package/openjdk/openjdk.mk b/package/openjdk/openjdk.mk
> index 22c9a777b5..baefdf59bb 100644
> --- a/package/openjdk/openjdk.mk
> +++ b/package/openjdk/openjdk.mk
> @@ -94,7 +94,7 @@ OPENJDK_CONF_OPTS = \
> --enable-openjdk-only \
> --enable-unlimited-crypto \
> --openjdk-target=$(GNU_TARGET_NAME) \
> - --with-boot-jdk=$(HOST_DIR) \
> + --with-boot-jdk=$(HOST_DIR)/usr/lib/jvm \
> --with-stdc++lib=dynamic \
> --with-debug-level=release \
> --with-devkit=$(HOST_DIR) \
> diff --git a/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/openjdk-hello-world.mk b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/openjdk-hello-world.mk
> index 998117b8e2..6157c4dd9c 100644
> --- a/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/openjdk-hello-world.mk
> +++ b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/openjdk-hello-world.mk
> @@ -8,7 +8,7 @@ OPENJDK_HELLO_WORLD_DEPENDENCIES = openjdk
>
> define OPENJDK_HELLO_WORLD_BUILD_CMDS
> $(INSTALL) -D $(OPENJDK_HELLO_WORLD_PKGDIR)/HelloWorld.java $(@D)/HelloWorld.java
> - $(HOST_DIR)/bin/javac $(@D)/HelloWorld.java
> + $(HOST_DIR)/usr/lib/jvm/bin/javac $(@D)/HelloWorld.java
> endef
>
> define OPENJDK_HELLO_WORLD_INSTALL_TARGET_CMDS
> diff --git a/support/testing/tests/package/br2-external/openjdk/package/openjdk-jni-test/openjdk-jni-test.mk b/support/testing/tests/package/br2-external/openjdk/package/openjdk-jni-test/openjdk-jni-test.mk
> index f279e5cd70..51ae44cabd 100644
> --- a/support/testing/tests/package/br2-external/openjdk/package/openjdk-jni-test/openjdk-jni-test.mk
> +++ b/support/testing/tests/package/br2-external/openjdk/package/openjdk-jni-test/openjdk-jni-test.mk
> @@ -10,7 +10,7 @@ JNI_INCLUDE_PATH = $(BUILD_DIR)/openjdk-$(OPENJDK_VERSION)/build/linux-aarch64-s
>
> define OPENJDK_JNI_TEST_BUILD_CMDS
> # Compile Java classes and generate native headers
> - $(HOST_DIR)/bin/javac -d $(@D) -h $(@D) \
> + $(HOST_DIR)/usr/lib/jvm/bin/javac -d $(@D) -h $(@D) \
> $(OPENJDK_JNI_TEST_PKGDIR)/JniTest.java \
> $(OPENJDK_JNI_TEST_PKGDIR)/JniWrapper.java \
> $(OPENJDK_JNI_TEST_PKGDIR)/JniHelper.java
> --
> 2.26.2
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
More information about the buildroot
mailing list