All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v6 1/3] openjdk-bin: new package
@ 2019-02-09 20:47 aduskett at gmail.com
  2019-02-09 20:47 ` [Buildroot] [PATCH v6 2/3] openjdk: " aduskett at gmail.com
  2019-02-09 20:47 ` [Buildroot] [PATCH v6 3/3] openjdk-hello-world: new test aduskett at gmail.com
  0 siblings, 2 replies; 5+ messages in thread
From: aduskett at gmail.com @ 2019-02-09 20:47 UTC (permalink / raw)
  To: buildroot

From: Adam Duskett <Aduskett@gmail.com>

Paradoxically, building OpenJDK requires a pre-existing JDK.
This pre-existing JDK is called the "boot JDK."

The boot JDK for building JDK major version N should be a JDK of major
version N-1, so for building JDK11, JDK10 would be needed. This requirement is
an issue when building on most distributions, as the host JDK tends to be JDK8.

The AdoptOpenJDK project provides binaries that can act as the boot JDK to
build the target JDK, which is what this package provides.

Currently, only a x86_64 host is supported, for two reasons:
1) A 32bit x86 binary distribution is not available from AdoptOpenJDK
2) Access to a machine that is not x86_64 that can build Buildroot is not
   avaliable.

The provided unpack200 has an invalid RPATH and relies on libzlib.
When host-libzlib runs the install step, the following error is generated:

*** ERROR: package host-libzlib installs executables without proper RPATH:
***   $(HOST_DIR)/bin/unpack200

Because unpack200 is a deprecated tool, removing it after installation
is safe and fixes the issue.

Signed-off-by: Adam Duskett <Aduskett@gmail.com>
---
Changes v1 -> v2:
  - No change

Changes v2 -> v3:
  - Changed the location of the installed binaries to just $(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:
  - Removed first person wordage. (Thomas)
  - Changed GPLv2+ -> GPL-2.0+ (Thomas)
  - Removed Config.in.host (Thomas)

Changes v4 -> v5:
  - Changed the install location to just $(HOST_DIR)/bin and ${HOST_DIR}/lib
  - Remove unpack200 from ${HOSt_DIR}/bin due to bad RPATHS in the binary.
  - Remove support/testing/tests/package/br2-external/openjdk/ from DEVELOPERS
    (Matthew)
  - Update version to 11.0.2+9

Changes v5 -> v6:
  - Fix error message in comments in openjdk-bin.mk.

 DEVELOPERS                           |  1 +
 package/openjdk-bin/openjdk-bin.hash |  6 ++++++
 package/openjdk-bin/openjdk-bin.mk   | 30 ++++++++++++++++++++++++++++
 3 files changed, 37 insertions(+)
 create mode 100644 package/openjdk-bin/openjdk-bin.hash
 create mode 100644 package/openjdk-bin/openjdk-bin.mk

diff --git a/DEVELOPERS b/DEVELOPERS
index f2e69cc041..e7ab584be6 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-bin/
 F:	package/policycoreutils/
 F:	package/python-flask-sqlalchemy/
 F:	package/python-mutagen/
diff --git a/package/openjdk-bin/openjdk-bin.hash b/package/openjdk-bin/openjdk-bin.hash
new file mode 100644
index 0000000000..d36a582a33
--- /dev/null
+++ b/package/openjdk-bin/openjdk-bin.hash
@@ -0,0 +1,6 @@
+# From https://github.com/AdoptOpenJDK/openjdk11-binaries/releases
+sha256	d02089d834f7702ac1a9776d8d0d13ee174d0656cf036c6b68b9ffb71a6f610e	OpenJDK11U-jdk_x64_linux_hotspot_11.0.2_9.tar.gz
+
+# Locally calculated
+sha256	4b9abebc4338048a7c2dc184e9f800deb349366bdf28eb23c2677a77b4c87726	legal/java.prefs/LICENSE
+sha256	a44eb7b5caf5534c6ef536b21edb40b4d6babf91bf97d9d45596868618b2c6fb	legal/java.prefs/ASSEMBLY_EXCEPTION
diff --git a/package/openjdk-bin/openjdk-bin.mk b/package/openjdk-bin/openjdk-bin.mk
new file mode 100644
index 0000000000..49764f9485
--- /dev/null
+++ b/package/openjdk-bin/openjdk-bin.mk
@@ -0,0 +1,30 @@
+################################################################################
+#
+# host-openjdk-bin
+#
+################################################################################
+
+HOST_OPENJDK_BIN_VERSION_MAJOR = 11.0.2
+HOST_OPENJDK_BIN_VERSION_MINOR = 9
+HOST_OPENJDK_BIN_VERSION = $(HOST_OPENJDK_BIN_VERSION_MAJOR)_$(HOST_OPENJDK_BIN_VERSION_MINOR)
+HOST_OPENJDK_BIN_SOURCE = OpenJDK11U-jdk_x64_linux_hotspot_$(HOST_OPENJDK_BIN_VERSION).tar.gz
+HOST_OPENJDK_BIN_SITE = https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-$(HOST_OPENJDK_BIN_VERSION_MAJOR)%2B$(HOST_OPENJDK_BIN_VERSION_MINOR)
+HOST_OPENJDK_BIN_LICENSE = GPL-2.0+ with exception
+HOST_OPENJDK_BIN_LICENSE_FILES = legal/java.prefs/LICENSE legal/java.prefs/ASSEMBLY_EXCEPTION
+
+# If the files are installed to $(HOST_DIR)/bin and $(HOST_DIR)/lib
+# the build will fail because the RPATH of java binaries do not have a proper
+# RPATH
+define HOST_OPENJDK_BIN_INSTALL_CMDS
+	cp -aLrf $(@D)/bin/* $(HOST_DIR)/bin/
+	cp -aLrf $(@D)/lib/* $(HOST_DIR)/lib/
+	# unpack200 has an invalid RPATH and relies on libzlib. When host-libzlib
+	# is installed on the system, the error
+	# "ERROR: package host-libzlib installs executables without proper RPATH:
+	#     output/host/bin/unpack200"
+	# will occure. Because unpack200 is a deprecated tool, removing it to fix
+	# this issue is safe.
+	$(RM) $(HOST_DIR)/bin/unpack200
+endef
+
+$(eval $(host-generic-package))
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Buildroot] [PATCH v6 2/3] openjdk: new package
  2019-02-09 20:47 [Buildroot] [PATCH v6 1/3] openjdk-bin: new package aduskett at gmail.com
@ 2019-02-09 20:47 ` aduskett at gmail.com
  2019-02-10 14:00   ` Thomas Petazzoni
  2019-02-09 20:47 ` [Buildroot] [PATCH v6 3/3] openjdk-hello-world: new test aduskett at gmail.com
  1 sibling, 1 reply; 5+ messages in thread
From: aduskett at gmail.com @ 2019-02-09 20:47 UTC (permalink / raw)
  To: buildroot

From: Adam Duskett <Aduskett@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 documented below:

- X11, alsa, and cups are required to build Java, even if it's a headless build.

- There is no autogen.sh file, instead, a user calls ./configure autogen.

- If ccache is enabled, BuildRoot sets CC, CXX, and CPP to
  the ccache binary, which causes OpenJDK to throw an error during the
  configure step, so LD, CC, CXX, and CPP must set explicitly to the actual
  binaries.

- Some variables are ignored unless set as a configure option. These variables
  are OBJCOPY, OBJDUMP, NM, STRIP, and AR.

- Other variables must be environment variables, these are PATH, LD, CC, CXX,
  and CPP.

- Parallel make is possible, but not with make -jN, instead, one has to pass the
  --with-jobs=$(PARALLEL_JOBS) to ./configure, or pass JOBS=$(PARALLEL_JOBS) to
  make. The formner was chosen as it seems cleaner.

- Even when cross-compiling, OpenJDK will build a myriad of host-tools using the
  host's gcc. In the case of zlib, if a host doesn't have the zlib dev
  package installed, OpenJDK compilation will stop because zlib.h won't be on
  the host system. Using --with-zlib=bundled fixes this issue.

Signed-off-by: Adam Duskett <Aduskett@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.


 DEVELOPERS                   |   1 +
 package/Config.in            |   1 +
 package/openjdk/Config.in    |  56 ++++++++++++++++
 package/openjdk/openjdk.hash |   3 +
 package/openjdk/openjdk.mk   | 120 +++++++++++++++++++++++++++++++++++
 5 files changed, 181 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 e7ab584be6..6606205f7d 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
+	select BR2_PACKAGE_ALSA_LIB
+	select BR2_PACKAGE_CUPS
+	select BR2_PACKAGE_FONTCONFIG
+	select BR2_PACKAGE_GIFLIB
+	select BR2_PACKAGE_JPEG
+	select BR2_PACKAGE_LCMS2
+	select BR2_PACKAGE_LIBPNG
+	select BR2_PACKAGE_LIBUSB
+	select BR2_PACKAGE_XLIB_LIBXRENDER
+	select BR2_PACKAGE_XLIB_LIBXT
+	select BR2_PACKAGE_XLIB_LIBXTST
+	help
+	  OpenJDK is a free and open-source implementation of the
+	  Java Platform.
+
+	  http://openjdk.java.net/
+
+if BR2_PACKAGE_OPENJDK
+
+menu "JVM Variants"
+
+config BR2_PACKAGE_OPENJDK_JVM_VARIANT_CLIENT
+	bool "client"
+	help
+	  Quick loading, but slower run-time performance.
+
+config BR2_PACKAGE_OPENJDK_JVM_VARIANT_SERVER
+	bool "server"
+	default y
+	help
+	  Slower loading, but faster run-time performance.
+
+endmenu
+endif
+
+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
+
+comment "OpenJDK does not support soft floats"
+	depends on BR2_SOFT_FLOAT
diff --git a/package/openjdk/openjdk.hash b/package/openjdk/openjdk.hash
new file mode 100644
index 0000000000..8b14609066
--- /dev/null
+++ b/package/openjdk/openjdk.hash
@@ -0,0 +1,3 @@
+# Locally computed
+sha256 6c69a2c1b5177659d4263545cf83e0fbcd697669b0107481372be3648af7b89b  openjdk-jdk-11.0.2+9.tar.gz
+sha256 4b9abebc4338048a7c2dc184e9f800deb349366bdf28eb23c2677a77b4c87726  LICENSE
diff --git a/package/openjdk/openjdk.mk b/package/openjdk/openjdk.mk
new file mode 100644
index 0000000000..89351dbe1d
--- /dev/null
+++ b/package/openjdk/openjdk.mk
@@ -0,0 +1,118 @@
+################################################################################
+#
+# openjdk
+#
+################################################################################
+
+OPENJDK_VERSION_MAJOR = 11.0.2
+OPENJDK_VERSION_MINOR = 9
+OPENJDK_VERSION=jdk-$(OPENJDK_VERSION_MAJOR)+$(OPENJDK_VERSION_MINOR)
+OPENJDK_RELEASE = jdk11u
+OPENJDK_SITE = $(call github,AdoptOpenJDK,openjdk-jdk11u,$(OPENJDK_VERSION))
+OPENJDK_LICENSE = GPL-2.0+ with exception
+OPENJDK_LICENSE_FILES = LICENSE
+
+OPENJDK_DEPENDENCIES = \
+	host-openjdk-bin \
+	host-pkgconf \
+	host-zip \
+	alsa-lib \
+	cups \
+	fontconfig \
+	giflib \
+	jpeg \
+	lcms2 \
+	libpng \
+	libusb \
+	xlib_libXrender \
+	xlib_libXt \
+	xlib_libXtst
+
+# JVM variants
+ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_CLIENT),y)
+OPENJDK_JVM_VARIANTS += client
+endif
+
+ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_SERVER),y)
+OPENJDK_JVM_VARIANTS += server
+endif
+OPENJDK_JVM_VARIANT_LIST = $(subst $(space),$(comma),$(OPENJDK_JVM_VARIANTS))
+
+# Some variables will be ignored unless passed via the environment.
+# OpenJDK will default to ld, but will pass -Xlinker and -z as arguments,
+# which will cause compilation failures. Instead, tell OpenJDK to use gcc.
+# Furthermore, if ccache is enabled, BuildRoot will set CC,CXX, and CPP to
+# the ccache binary, which will cause OpenJDK to throw an error during the
+# configure step, so we must set these variables explicitly to the actual
+# binaries.
+OPENJDK_CONF_ENV = \
+	PATH=$(BR_PATH) \
+	LD=$(TARGET_CC) \
+	CC=$(TARGET_CC) \
+	CXX=$(TARGET_CXX) \
+	CPP=$(TARGET_CPP)
+
+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) \
+	--prefix=$(TARGET_DIR)/usr \
+	--with-boot-jdk=$(HOST_DIR) \
+	--with-debug-level=release \
+	--with-devkit=$(HOST_DIR) \
+	--with-extra-cflags="$(TARGET_CFLAGS)" \
+	--with-extra-cxxflags="$(TARGET_CXXFLAGS)" \
+	--with-extra-path=$(HOST_DIR)/bin:$(HOST_DIR)/sbin \
+	--with-giflib=system \
+	--with-jobs=$(PARALLEL_JOBS) \
+	--with-jvm-variants=$(OPENJDK_JVM_VARIANT_LIST) \
+	--with-lcms=system \
+	--with-libjpeg=system \
+	--with-libpng=system \
+	--with-zlib=bundled \
+	--with-native-debug-symbols=none \
+	--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)" \
+	--without-version-pre
+
+# If building for aarch64, use the provided cpu port.
+ifeq ($(BR2_aarch64),y)
+OPENJDK_CONF_OPTS += --with-cpu-port=aarch64 --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 done in a single step.
+define OPENJDK_CONFIGURE_CMDS
+	chmod +x $(@D)/configure
+	cd $(@D); $(OPENJDK_CONF_ENV) ./configure autogen $(OPENJDK_CONF_OPTS)
+endef
+
+# Build just the JRE image for the target.
+# Make -jn is unsupported, so $(MAKE1) is called and --with-jobs is specified
+# in the configure options.
+define OPENJDK_BUILD_CMDS
+	$(MAKE1) -C $(@D) legacy-jre-image
+endef
+
+# Calling make install will build and install the JDK instad of the JRE,
+# which makes manual installation necessary.
+define OPENJDK_INSTALL_TARGET_CMDS
+	cp -rf $(@D)/build/linux-*-release/images/jre/bin/* $(TARGET_DIR)/usr/bin/
+	cp -rf $(@D)/build/linux-*-release/images/jre/lib/* $(TARGET_DIR)/usr/lib/
+endef
+
+$(eval $(generic-package))
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Buildroot] [PATCH v6 3/3] openjdk-hello-world: new test
  2019-02-09 20:47 [Buildroot] [PATCH v6 1/3] openjdk-bin: new package aduskett at gmail.com
  2019-02-09 20:47 ` [Buildroot] [PATCH v6 2/3] openjdk: " aduskett at gmail.com
@ 2019-02-09 20:47 ` aduskett at gmail.com
  2019-02-11 17:30   ` Matthew Weber
  1 sibling, 1 reply; 5+ messages in thread
From: aduskett at gmail.com @ 2019-02-09 20:47 UTC (permalink / raw)
  To: buildroot

From: Daniel J. Leach <dleach@belcan.com>

This test is a simple "Hello, World" integration test of the OpenJDK package.

It compiles the Java app on the host, then runs it on an emulated AARCH64
target and verifies "Hello, World" is printed.

Signed-off-by: Daniel J. Leach <dleach@belcan.com>
Signed-off-by: Adam Duskett <Aduskett@gmail.com>
---
Changes v1 -> v3:
  - Added this patch to the series.

Changes v3 -> v5:
  - None

Changes v5 -> v6:
  - Updated .gitlab-ci.yml entry.
  - Fixed From: and SOB line.

 .gitlab-ci.yml                                |  1 +
 DEVELOPERS                                    |  1 +
 .../package/br2-external/openjdk/Config.in    |  1 +
 .../br2-external/openjdk/external.desc        |  1 +
 .../package/br2-external/openjdk/external.mk  |  1 +
 .../package/openjdk-hello-world/Config.in     | 26 ++++++++++++
 .../openjdk-hello-world/HelloWorld.java       |  7 ++++
 .../openjdk-hello-world.mk                    | 18 ++++++++
 support/testing/tests/package/test_openjdk.py | 42 +++++++++++++++++++
 9 files changed, 98 insertions(+)
 create mode 100644 support/testing/tests/package/br2-external/openjdk/Config.in
 create mode 100644 support/testing/tests/package/br2-external/openjdk/external.desc
 create mode 100644 support/testing/tests/package/br2-external/openjdk/external.mk
 create mode 100644 support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/Config.in
 create mode 100644 support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/HelloWorld.java
 create mode 100644 support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/openjdk-hello-world.mk
 create mode 100644 support/testing/tests/package/test_openjdk.py

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2f0ebaa25c..b055d08634 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -328,6 +328,7 @@ tests.package.test_ipython.TestIPythonPy2: { extends: .runtime_test }
 tests.package.test_ipython.TestIPythonPy3: { extends: .runtime_test }
 tests.package.test_lua.TestLua: { extends: .runtime_test }
 tests.package.test_lua.TestLuajit: { extends: .runtime_test }
+tests.package.test_openjdk.TestOpenJdk: { extends: .runtime_test }
 tests.package.test_perl.TestPerl: { extends: .runtime_test }
 tests.package.test_perl_class_load.TestPerlClassLoad: { extends: .runtime_test }
 tests.package.test_perl_dbd_mysql.TestPerlDBDmysql: { extends: .runtime_test }
diff --git a/DEVELOPERS b/DEVELOPERS
index 6606205f7d..56213c5307 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1475,6 +1475,7 @@ F:	package/valijson/
 F:	package/wpa_supplicant/
 F:	package/wireless_tools/
 F:	package/xen/
+F:	support/testing/tests/package/br2-external/openjdk/
 
 N:	Mauro Condarelli <mc5686@mclink.it>
 F:	package/mc/
diff --git a/support/testing/tests/package/br2-external/openjdk/Config.in b/support/testing/tests/package/br2-external/openjdk/Config.in
new file mode 100644
index 0000000000..00c7fd4799
--- /dev/null
+++ b/support/testing/tests/package/br2-external/openjdk/Config.in
@@ -0,0 +1 @@
+source "$BR2_EXTERNAL_OPENJDK_PATH/package/openjdk-hello-world/Config.in"
diff --git a/support/testing/tests/package/br2-external/openjdk/external.desc b/support/testing/tests/package/br2-external/openjdk/external.desc
new file mode 100644
index 0000000000..f28ba5060c
--- /dev/null
+++ b/support/testing/tests/package/br2-external/openjdk/external.desc
@@ -0,0 +1 @@
+name: OPENJDK
diff --git a/support/testing/tests/package/br2-external/openjdk/external.mk b/support/testing/tests/package/br2-external/openjdk/external.mk
new file mode 100644
index 0000000000..54c24e8c64
--- /dev/null
+++ b/support/testing/tests/package/br2-external/openjdk/external.mk
@@ -0,0 +1 @@
+include $(sort $(wildcard $(BR2_EXTERNAL_OPENJDK_PATH)/package/*/*.mk))
diff --git a/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/Config.in b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/Config.in
new file mode 100644
index 0000000000..4f9022fb92
--- /dev/null
+++ b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/Config.in
@@ -0,0 +1,26 @@
+config BR2_PACKAGE_OPENJDK_HELLO_WORLD
+	bool "openjdk hello world"
+	depends on BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS
+	depends on BR2_TOOLCHAIN_USES_GLIBC
+	depends on BR2_PACKAGE_XORG7
+	depends on BR2_USE_WCHAR # gtk2 -> glib2
+	depends on BR2_TOOLCHAIN_HAS_THREADS # gtk2 -> glib2
+	depends on BR2_USE_MMU # gtk2 -> glib2
+	depends on BR2_INSTALL_LIBSTDCPP # gtk2, cups
+	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4 # gtk2 -> pango -> harfbuzz
+	depends on !BR2_STATIC_LIBS
+	select BR2_PACKAGE_OPENJDK
+	help
+	  Simple class for testing openjdk
+
+comment "OpenJDK-hello-world needs a glibc toolchain w/ wchar, dynamic library, threads, C++, gcc >= 4.9"
+	depends on BR2_USE_MMU
+	depends on BR2_TOOLCHAIN_HAS_SYNC_4
+	depends on BR2_PACKAGE_XORG7
+	depends on !BR2_USE_WCHAR || \
+		BR2_STATIC_LIBS || \
+		!BR2_INSTALL_LIBSTDCPP || \
+		!BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \
+		!BR2_TOOLCHAIN_HAS_THREADS || \
+		!BR2_TOOLCHAIN_USES_GLIBC
diff --git a/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/HelloWorld.java b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/HelloWorld.java
new file mode 100644
index 0000000000..37489e44c3
--- /dev/null
+++ b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/HelloWorld.java
@@ -0,0 +1,7 @@
+public class HelloWorld
+{
+    public static void main(String[] args)
+    {
+        System.out.println("Hello, World");
+    }
+}
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
new file mode 100644
index 0000000000..998117b8e2
--- /dev/null
+++ b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/openjdk-hello-world.mk
@@ -0,0 +1,18 @@
+################################################################################
+#
+# openjdk hello world
+#
+################################################################################
+
+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
+endef
+
+define OPENJDK_HELLO_WORLD_INSTALL_TARGET_CMDS
+	$(INSTALL) -D -m 755 $(@D)/HelloWorld.class $(TARGET_DIR)/usr/bin/HelloWorld.class
+endef
+
+$(eval $(generic-package))
diff --git a/support/testing/tests/package/test_openjdk.py b/support/testing/tests/package/test_openjdk.py
new file mode 100644
index 0000000000..ed8a1f1be4
--- /dev/null
+++ b/support/testing/tests/package/test_openjdk.py
@@ -0,0 +1,42 @@
+import os
+
+import infra.basetest
+
+
+class TestOpenJdk(infra.basetest.BRTest):
+    br2_external = [infra.filepath("tests/package/br2-external/openjdk")]
+    config = \
+        """
+        BR2_aarch64=y
+        BR2_TOOLCHAIN_EXTERNAL=y
+        BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
+        BR2_LINUX_KERNEL=y
+        BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+        BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.16.7"
+        BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+        BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
+        BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
+        BR2_TARGET_ROOTFS_CPIO=y
+        BR2_TARGET_ROOTFS_CPIO_GZIP=y
+        BR2_PACKAGE_XORG7=y
+        BR2_PACKAGE_OPENJDK=y
+        BR2_PACKAGE_OPENJDK_HELLO_WORLD=y
+        """
+
+    def login(self):
+        img = os.path.join(self.builddir, "images", "rootfs.cpio.gz")
+        kern = os.path.join(self.builddir, "images", "Image")
+        self.emulator.boot(arch="aarch64",
+                           kernel=kern,
+                           kernel_cmdline=["console=ttyAMA0"],
+                           options=["-M", "virt", "-cpu", "cortex-a57", "-m", "512M", "-initrd", img])
+        self.emulator.login()
+
+    def test_run(self):
+        self.login()
+
+        cmd = "java -cp /usr/bin HelloWorld"
+        output, exit_code = self.emulator.run(cmd)
+        print(output)
+        self.assertEqual(exit_code, 0)
+        self.assertEqual(output, ["Hello, World"])
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Buildroot] [PATCH v6 2/3] openjdk: new package
  2019-02-09 20:47 ` [Buildroot] [PATCH v6 2/3] openjdk: " aduskett at gmail.com
@ 2019-02-10 14:00   ` Thomas Petazzoni
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Petazzoni @ 2019-02-10 14:00 UTC (permalink / raw)
  To: buildroot

Hello Adam,

On Sat,  9 Feb 2019 15:47:15 -0500
aduskett at gmail.com wrote:

> From: Adam Duskett <Aduskett@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 documented below:
> 
> - X11, alsa, and cups are required to build Java, even if it's a headless build.
> 
> - There is no autogen.sh file, instead, a user calls ./configure autogen.
> 
> - If ccache is enabled, BuildRoot sets CC, CXX, and CPP to

Buildroot, not BuildRoot

> - Even when cross-compiling, OpenJDK will build a myriad of host-tools using the
>   host's gcc. In the case of zlib, if a host doesn't have the zlib dev
>   package installed, OpenJDK compilation will stop because zlib.h won't be on
>   the host system. Using --with-zlib=bundled fixes this issue.

Meh, this looks dubious. What's happening exactly ?

> 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.

Why is host-zip needed ?


> +OPENJDK_VERSION_MAJOR = 11.0.2
> +OPENJDK_VERSION_MINOR = 9
> +OPENJDK_VERSION=jdk-$(OPENJDK_VERSION_MAJOR)+$(OPENJDK_VERSION_MINOR)

Spaces around =

> +OPENJDK_RELEASE = jdk11u

Unless I missed something, this variable is not used anywhere.

> +OPENJDK_SITE = $(call github,AdoptOpenJDK,openjdk-jdk11u,$(OPENJDK_VERSION))
> +OPENJDK_LICENSE = GPL-2.0+ with exception
> +OPENJDK_LICENSE_FILES = LICENSE
> +
> +OPENJDK_DEPENDENCIES = \
> +	host-openjdk-bin \
> +	host-pkgconf \
> +	host-zip \
> +	alsa-lib \
> +	cups \
> +	fontconfig \
> +	giflib \
> +	jpeg \
> +	lcms2 \
> +	libpng \
> +	libusb \
> +	xlib_libXrender \
> +	xlib_libXt \
> +	xlib_libXtst
> +
> +# JVM variants
> +ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_CLIENT),y)
> +OPENJDK_JVM_VARIANTS += client
> +endif
> +
> +ifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_SERVER),y)
> +OPENJDK_JVM_VARIANTS += server
> +endif
> +OPENJDK_JVM_VARIANT_LIST = $(subst $(space),$(comma),$(OPENJDK_JVM_VARIANTS))
> +
> +# Some variables will be ignored unless passed via the environment.
> +# OpenJDK will default to ld, but will pass -Xlinker and -z as arguments,
> +# which will cause compilation failures. Instead, tell OpenJDK to use gcc.
> +# Furthermore, if ccache is enabled, BuildRoot will set CC,CXX, and CPP to

BuildRoot -> Buildroot

> +# the ccache binary, which will cause OpenJDK to throw an error during the
> +# configure step, so we must set these variables explicitly to the actual
> +# binaries.
> +OPENJDK_CONF_ENV = \
> +	PATH=$(BR_PATH) \
> +	LD=$(TARGET_CC) \
> +	CC=$(TARGET_CC) \
> +	CXX=$(TARGET_CXX) \
> +	CPP=$(TARGET_CPP)
> +
> +OPENJDK_CONF_OPTS = \
> +	--disable-full-docs \
> +	--disable-hotspot-gtest \
> +	--disable-manpages \
> +	--disable-warnings-as-errors \
> +	--enable-headless-only \

So even if you enable this option, it depends on X11 ?

> +	--enable-openjdk-only \
> +	--enable-unlimited-crypto \
> +	--openjdk-target=$(GNU_TARGET_NAME) \
> +	--prefix=$(TARGET_DIR)/usr \

This looks suspicious. It should be --prefix=/usr, unless OpenJDK has a
non-standard semantic for --prefix.

> +	--with-boot-jdk=$(HOST_DIR) \
> +	--with-debug-level=release \
> +	--with-devkit=$(HOST_DIR) \
> +	--with-extra-cflags="$(TARGET_CFLAGS)" \
> +	--with-extra-cxxflags="$(TARGET_CXXFLAGS)" \
> +	--with-extra-path=$(HOST_DIR)/bin:$(HOST_DIR)/sbin \
> +	--with-giflib=system \
> +	--with-jobs=$(PARALLEL_JOBS) \
> +	--with-jvm-variants=$(OPENJDK_JVM_VARIANT_LIST) \
> +	--with-lcms=system \
> +	--with-libjpeg=system \
> +	--with-libpng=system \
> +	--with-zlib=bundled \
> +	--with-native-debug-symbols=none \
> +	--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)" \
> +	--without-version-pre
> +
> +# If building for aarch64, use the provided cpu port.
> +ifeq ($(BR2_aarch64),y)
> +OPENJDK_CONF_OPTS += --with-cpu-port=aarch64 --with-abi-profile=aarch64
> +endif

What about other architectures ? For example, ARM also has some
--with-cpu-port/--with-abi-profile options.

> +# Calling make install will build and install the JDK instad of the JRE,

instad -> instead

> +# which makes manual installation necessary.
> +define OPENJDK_INSTALL_TARGET_CMDS
> +	cp -rf $(@D)/build/linux-*-release/images/jre/bin/* $(TARGET_DIR)/usr/bin/
> +	cp -rf $(@D)/build/linux-*-release/images/jre/lib/* $(TARGET_DIR)/usr/lib/
> +endef
> +
> +$(eval $(generic-package))

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Buildroot] [PATCH v6 3/3] openjdk-hello-world: new test
  2019-02-09 20:47 ` [Buildroot] [PATCH v6 3/3] openjdk-hello-world: new test aduskett at gmail.com
@ 2019-02-11 17:30   ` Matthew Weber
  0 siblings, 0 replies; 5+ messages in thread
From: Matthew Weber @ 2019-02-11 17:30 UTC (permalink / raw)
  To: buildroot

Adam,

On Sat, Feb 9, 2019 at 2:47 PM <aduskett@gmail.com> wrote:
>
> From: Daniel J. Leach <dleach@belcan.com>
>
> This test is a simple "Hello, World" integration test of the OpenJDK package.
>
> It compiles the Java app on the host, then runs it on an emulated AARCH64
> target and verifies "Hello, World" is printed.
>
> Signed-off-by: Daniel J. Leach <dleach@belcan.com>
> Signed-off-by: Adam Duskett <Aduskett@gmail.com>
> ---
> Changes v1 -> v3:
>   - Added this patch to the series.
>
> Changes v3 -> v5:
>   - None
>
> Changes v5 -> v6:
>   - Updated .gitlab-ci.yml entry.
>   - Fixed From: and SOB line.
>
>  .gitlab-ci.yml                                |  1 +
>  DEVELOPERS                                    |  1 +
>  .../package/br2-external/openjdk/Config.in    |  1 +
>  .../br2-external/openjdk/external.desc        |  1 +
>  .../package/br2-external/openjdk/external.mk  |  1 +
>  .../package/openjdk-hello-world/Config.in     | 26 ++++++++++++
>  .../openjdk-hello-world/HelloWorld.java       |  7 ++++
>  .../openjdk-hello-world.mk                    | 18 ++++++++
>  support/testing/tests/package/test_openjdk.py | 42 +++++++++++++++++++
>  9 files changed, 98 insertions(+)
>  create mode 100644 support/testing/tests/package/br2-external/openjdk/Config.in
>  create mode 100644 support/testing/tests/package/br2-external/openjdk/external.desc
>  create mode 100644 support/testing/tests/package/br2-external/openjdk/external.mk
>  create mode 100644 support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/Config.in
>  create mode 100644 support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/HelloWorld.java
>  create mode 100644 support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/openjdk-hello-world.mk
>  create mode 100644 support/testing/tests/package/test_openjdk.py
>
> diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
> index 2f0ebaa25c..b055d08634 100644
> --- a/.gitlab-ci.yml
> +++ b/.gitlab-ci.yml
> @@ -328,6 +328,7 @@ tests.package.test_ipython.TestIPythonPy2: { extends: .runtime_test }
>  tests.package.test_ipython.TestIPythonPy3: { extends: .runtime_test }
>  tests.package.test_lua.TestLua: { extends: .runtime_test }
>  tests.package.test_lua.TestLuajit: { extends: .runtime_test }
> +tests.package.test_openjdk.TestOpenJdk: { extends: .runtime_test }
>  tests.package.test_perl.TestPerl: { extends: .runtime_test }
>  tests.package.test_perl_class_load.TestPerlClassLoad: { extends: .runtime_test }
>  tests.package.test_perl_dbd_mysql.TestPerlDBDmysql: { extends: .runtime_test }
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 6606205f7d..56213c5307 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -1475,6 +1475,7 @@ F:        package/valijson/
>  F:     package/wpa_supplicant/
>  F:     package/wireless_tools/
>  F:     package/xen/
> +F:     support/testing/tests/package/br2-external/openjdk/
>
>  N:     Mauro Condarelli <mc5686@mclink.it>
>  F:     package/mc/
> diff --git a/support/testing/tests/package/br2-external/openjdk/Config.in b/support/testing/tests/package/br2-external/openjdk/Config.in
> new file mode 100644
> index 0000000000..00c7fd4799
> --- /dev/null
> +++ b/support/testing/tests/package/br2-external/openjdk/Config.in
> @@ -0,0 +1 @@
> +source "$BR2_EXTERNAL_OPENJDK_PATH/package/openjdk-hello-world/Config.in"
> diff --git a/support/testing/tests/package/br2-external/openjdk/external.desc b/support/testing/tests/package/br2-external/openjdk/external.desc
> new file mode 100644
> index 0000000000..f28ba5060c
> --- /dev/null
> +++ b/support/testing/tests/package/br2-external/openjdk/external.desc
> @@ -0,0 +1 @@
> +name: OPENJDK
> diff --git a/support/testing/tests/package/br2-external/openjdk/external.mk b/support/testing/tests/package/br2-external/openjdk/external.mk
> new file mode 100644
> index 0000000000..54c24e8c64
> --- /dev/null
> +++ b/support/testing/tests/package/br2-external/openjdk/external.mk
> @@ -0,0 +1 @@
> +include $(sort $(wildcard $(BR2_EXTERNAL_OPENJDK_PATH)/package/*/*.mk))
> diff --git a/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/Config.in b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/Config.in
> new file mode 100644
> index 0000000000..4f9022fb92
> --- /dev/null
> +++ b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/Config.in
> @@ -0,0 +1,26 @@
> +config BR2_PACKAGE_OPENJDK_HELLO_WORLD
> +       bool "openjdk hello world"
> +       depends on BR2_PACKAGE_HOST_OPENJDK_BIN_ARCH_SUPPORTS
> +       depends on BR2_TOOLCHAIN_USES_GLIBC
> +       depends on BR2_PACKAGE_XORG7
> +       depends on BR2_USE_WCHAR # gtk2 -> glib2
> +       depends on BR2_TOOLCHAIN_HAS_THREADS # gtk2 -> glib2
> +       depends on BR2_USE_MMU # gtk2 -> glib2
> +       depends on BR2_INSTALL_LIBSTDCPP # gtk2, cups
> +       depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 # C++11
> +       depends on BR2_TOOLCHAIN_HAS_SYNC_4 # gtk2 -> pango -> harfbuzz
> +       depends on !BR2_STATIC_LIBS
> +       select BR2_PACKAGE_OPENJDK
> +       help
> +         Simple class for testing openjdk
> +
> +comment "OpenJDK-hello-world needs a glibc toolchain w/ wchar, dynamic library, threads, C++, gcc >= 4.9"
> +       depends on BR2_USE_MMU
> +       depends on BR2_TOOLCHAIN_HAS_SYNC_4
> +       depends on BR2_PACKAGE_XORG7
> +       depends on !BR2_USE_WCHAR || \
> +               BR2_STATIC_LIBS || \
> +               !BR2_INSTALL_LIBSTDCPP || \
> +               !BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 || \
> +               !BR2_TOOLCHAIN_HAS_THREADS || \
> +               !BR2_TOOLCHAIN_USES_GLIBC
> diff --git a/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/HelloWorld.java b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/HelloWorld.java
> new file mode 100644
> index 0000000000..37489e44c3
> --- /dev/null
> +++ b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/HelloWorld.java
> @@ -0,0 +1,7 @@
> +public class HelloWorld
> +{
> +    public static void main(String[] args)
> +    {
> +        System.out.println("Hello, World");
> +    }
> +}
> 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
> new file mode 100644
> index 0000000000..998117b8e2
> --- /dev/null
> +++ b/support/testing/tests/package/br2-external/openjdk/package/openjdk-hello-world/openjdk-hello-world.mk
> @@ -0,0 +1,18 @@
> +################################################################################
> +#
> +# openjdk hello world
> +#
> +################################################################################
> +
> +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
> +endef
> +
> +define OPENJDK_HELLO_WORLD_INSTALL_TARGET_CMDS
> +       $(INSTALL) -D -m 755 $(@D)/HelloWorld.class $(TARGET_DIR)/usr/bin/HelloWorld.class
> +endef
> +
> +$(eval $(generic-package))
> diff --git a/support/testing/tests/package/test_openjdk.py b/support/testing/tests/package/test_openjdk.py
> new file mode 100644
> index 0000000000..ed8a1f1be4
> --- /dev/null
> +++ b/support/testing/tests/package/test_openjdk.py
> @@ -0,0 +1,42 @@
> +import os
> +
> +import infra.basetest
> +
> +
> +class TestOpenJdk(infra.basetest.BRTest):
> +    br2_external = [infra.filepath("tests/package/br2-external/openjdk")]
> +    config = \
> +        """
> +        BR2_aarch64=y
> +        BR2_TOOLCHAIN_EXTERNAL=y
> +        BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
> +        BR2_LINUX_KERNEL=y
> +        BR2_LINUX_KERNEL_CUSTOM_VERSION=y
> +        BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.16.7"
> +        BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
> +        BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
> +        BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
> +        BR2_TARGET_ROOTFS_CPIO=y
> +        BR2_TARGET_ROOTFS_CPIO_GZIP=y
> +        BR2_PACKAGE_XORG7=y
> +        BR2_PACKAGE_OPENJDK=y
> +        BR2_PACKAGE_OPENJDK_HELLO_WORLD=y
> +        """
> +
> +    def login(self):
> +        img = os.path.join(self.builddir, "images", "rootfs.cpio.gz")
> +        kern = os.path.join(self.builddir, "images", "Image")
> +        self.emulator.boot(arch="aarch64",
> +                           kernel=kern,
> +                           kernel_cmdline=["console=ttyAMA0"],
> +                           options=["-M", "virt", "-cpu", "cortex-a57", "-m", "512M", "-initrd", img])
> +        self.emulator.login()
> +
> +    def test_run(self):
> +        self.login()
> +
> +        cmd = "java -cp /usr/bin HelloWorld"
> +        output, exit_code = self.emulator.run(cmd)

Suggest updating to include a longer time out.  120sec worked on my
machine with slow disks :-)

output, exit_code = self.emulator.run(cmd, 120)

> +        print(output)
> +        self.assertEqual(exit_code, 0)
> +        self.assertEqual(output, ["Hello, World"])
> --
> 2.20.1
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot



-- 

Matthew Weber | Pr. Software Engineer | Commercial Avionics

COLLINS AEROSPACE

400 Collins Road NE, Cedar Rapids, Iowa 52498, USA

Tel: +1 319 295 7349 | FAX: +1 319 263 6099

matthew.weber at collins.com | collinsaerospace.com



CONFIDENTIALITY WARNING: This message may contain proprietary and/or
privileged information of Collins Aerospace and its affiliated
companies. If you are not the intended recipient, please 1) Do not
disclose, copy, distribute or use this message or its contents. 2)
Advise the sender by return email. 3) Delete all copies (including all
attachments) from your computer. Your cooperation is greatly
appreciated.


Any export restricted material should be shared using my
matthew.weber at corp.rockwellcollins.com address.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-02-11 17:30 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-09 20:47 [Buildroot] [PATCH v6 1/3] openjdk-bin: new package aduskett at gmail.com
2019-02-09 20:47 ` [Buildroot] [PATCH v6 2/3] openjdk: " aduskett at gmail.com
2019-02-10 14:00   ` Thomas Petazzoni
2019-02-09 20:47 ` [Buildroot] [PATCH v6 3/3] openjdk-hello-world: new test aduskett at gmail.com
2019-02-11 17:30   ` Matthew Weber

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.