[Buildroot] [PATCH v2 3/3] packageJopenjdk: add support for building the full jdk

aduskett at gmail.com aduskett at gmail.com
Sat Apr 18 19:07:01 UTC 2020


From: Adam Duskett <Aduskett at gmail.com>

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 at gmail.com>
---
Changes v1 -> v2:
  - Added a much more thurough commit message as to why the JDK may be useful.
  - Added a note in the Config.in file explaining that full JDK support is
    only for debugging purposes.
  - Added a target_finalize_hook which removes the include and demo directory
    from the target.

 package/openjdk/Config.in  | 54 ++++++++++++++++++++++++++++++++++++++
 package/openjdk/openjdk.mk | 21 +++++++++++++--
 2 files changed, 73 insertions(+), 2 deletions(-)

diff --git a/package/openjdk/Config.in b/package/openjdk/Config.in
index 61294ec49f..ff3eb12c3d 100644
--- a/package/openjdk/Config.in
+++ b/package/openjdk/Config.in
@@ -49,6 +49,60 @@ config BR2_PACKAGE_OPENJDK
 
 if BR2_PACKAGE_OPENJDK
 
+config BR2_PACKAGE_OPENJDK_FULL_JDK
+	bool "Build the full JDK"
+	help
+	  Install the full JDK instead of just the run time.
+	  The full JDK includes several packages used for debugging and
+	  development. Some useful tools included with the JDK are:
+	    - javaws
+	      Command line tool for launching Java Web Start and setting
+	      various options.
+
+	    - jcmd:
+	      JVM Diagnostic Commands tool: Sends diagnostic command
+	      requests to a running Java Virtual Machine.
+
+	    - jinfo
+	      Configuration Info for Java: Prints configuration
+	      information for a given process or core file or a remote
+	      debug server.
+
+	    - jmap
+	      Memory Map for Java: Prints shared object memory maps or
+	      heap memory details of a given process or core file or a
+	      remote debug server.
+
+	    - jsadebugd
+	      Serviceability Agent Debug Daemon for Java: Attaches to a
+	      process or core file and acts as a debug server.
+
+	    - jstack
+	      Stack Trace for Java - Prints a stack trace of threads for
+	      a given process or core file or remote debug server.
+
+	    - jstat
+	      JVM Statistics Monitoring Tool: Attaches to an
+	      instrumented HotSpot Java virtual machine and collects and
+	      logs performance statistics as specified by the command
+	      line options.
+
+	    - jstatd
+	      JVM jstat Daemon - Launches an RMI server application that
+	      monitors for the creation and termination of instrumented
+	      HotSpot Java virtual machines and provides an interface to
+	      allow remote monitoring tools to attach to Java virtual
+	      machines running on the local system.
+
+	  Note:
+	  While the JDK also comes with several tools which can be used
+	  for developing java applications on a target, Buildroot
+	  does not support development on a target. Building the
+	  full JDK is supported for debugging purposes only.
+
+	  Selecting this option increases the file system by
+	  approximately 110M.
+
 choice
 	prompt "openjdk variant"
 	default BR2_PACKAGE_OPENJDK_JVM_VARIANT_SERVER if !BR2_powerpc
diff --git a/package/openjdk/openjdk.mk b/package/openjdk/openjdk.mk
index ffa62dd10d..7382364b84 100644
--- a/package/openjdk/openjdk.mk
+++ b/package/openjdk/openjdk.mk
@@ -46,6 +46,14 @@ OPENJDK_JVM_VARIANT = zero
 OPENJDK_DEPENDENCIES += libffi
 endif
 
+ifeq ($(BR2_PACKAGE_OPENJDK_FULL_JDK),y)
+OPENJDK_INSTALL_DIR = jdk
+OPENJDK_MAKE_TARGET=jdk-image
+else
+OPENJDK_INSTALL_DIR = jre
+OPENJDK_MAKE_TARGET=legacy-jre-image
+endif
+
 # OpenJDK installs a file named 'modules' in jre/lib, which gets installed as
 # /usr/lib/modules. However, with a merged /usr, this conflicts with the
 # directory named 'modules' installed by the kernel. If OpenJDK gets built
@@ -116,16 +124,25 @@ 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
+	$(TARGET_MAKE_ENV) $(OPENJDK_CONF_ENV) $(MAKE1) -C $(@D) $(OPENJDK_MAKE_TARGET)
 endef
 
 # Calling make install always builds and installs the JDK instead of the JRE,
 # which makes manual installation necessary.
 define OPENJDK_INSTALL_TARGET_CMDS
 	mkdir -p $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)
-	cp -dpfr $(@D)/build/linux-*-release/images/jre/* \
+	cp -dpfr $(@D)/build/linux-*-release/images/$(OPENJDK_INSTALL_DIR)/* \
 		$(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/
 	cd $(TARGET_DIR)/usr/bin && ln -snf ../..$(OPENJDK_INSTALL_BASE)/bin/* .
 endef
 
+# Demos and includes are not needed on the target
+ifeq ($(BR2_PACKAGE_OPENJDK_FULL_JDK),y)
+define OPENJDK_REMOVE_UNEEDED_JDK_DIRECTORIES
+	$(RM) -r $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/include/
+	$(RM) -r $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/demo/
+endef
+OPENJDK_TARGET_FINALIZE_HOOKS += OPENJDK_REMOVE_UNEEDED_JDK_DIRECTORIES
+endif
+
 $(eval $(generic-package))
-- 
2.25.2



More information about the buildroot mailing list