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

Yann E. MORIN yann.morin.1998 at free.fr
Wed Apr 22 19:33:54 UTC 2020


Adam, all,

On 2020-04-18 12:07 -0700, aduskett at gmail.com spake thusly:
> 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>

Applied to master, with two minor changes, see below...

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

I've rewrapped that section so that it uses the full-width on all lines.

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

I've changed OPENJDK_INSTALL_DIR to OPENJDK_VARIANT, because"

  - the former sounded too generic
  - the former looked like it was the directory it was installed into
  - it risked too much collision with similarly-named _DIR variables
    from the infra

Pushed to master now, thanks! :-)

Regards,
Yann E. MORIN.

>  # 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
> 
> _______________________________________________
> 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