On Wed, Jan 22, 2020 at 5:22 AM Waldemar Kozaczuk <jwkozac...@gmail.com>
wrote:

> Java 7 reached end of life almost 5 years ago and has since
> been largely replaced by Java 8 which is still widely used.
>
> This patch eliminates openjdk7 module and adds new openjdk8-from-host one
> as a default java module. This patch also replaces dependencies in the
> main makefile on antique openjdk7 in external/x64 with openjdk8
> from host that should be installed by setup.py.
>

I'll commit this because I like this direction, but I wonder (I'm not
up-to-date with the current Java
trends) - how do we know that the Java that will be installed on the host
is specifically Java 8?
Shouldn't we just call it "java-from-host", because it will use whatever is
available in the host -
couldn't this be Java 9, or 10, or 11, or whatever is the current version
nowadays (as I said, I
really did not keep up with Java...).


> This patch also removes external/x64/openjdk.bin and
> external/aarch64/openjdk.bin modules.
>
> References #743
>
> Signed-off-by: Waldemar Kozaczuk <jwkozac...@gmail.com>
> ---
>  .gitmodules                            |  7 -----
>  Makefile                               |  9 +-----
>  external/aarch64/openjdk.bin           |  1 -
>  external/x64/openjdk.bin               |  1 -
>  modules/httpserver-jvm-plugin/Makefile |  3 +-
>  modules/java-base/common.gmk           |  2 ++
>  modules/java/module.py                 |  2 +-
>  modules/openjdk7/module.py             | 22 --------------
>  modules/openjdk8-from-host/.gitignore  |  1 +
>  modules/openjdk8-from-host/Makefile    | 14 +++++++++
>  modules/openjdk8-from-host/module.py   | 40 ++++++++++++++++++++++++++
>  scripts/build                          | 11 ++++---
>  12 files changed, 65 insertions(+), 48 deletions(-)
>  delete mode 160000 external/aarch64/openjdk.bin
>  delete mode 160000 external/x64/openjdk.bin
>  delete mode 100644 modules/openjdk7/module.py
>  create mode 100644 modules/openjdk8-from-host/.gitignore
>  create mode 100644 modules/openjdk8-from-host/Makefile
>  create mode 100644 modules/openjdk8-from-host/module.py
>
> diff --git a/.gitmodules b/.gitmodules
> index a9fc9c64..8244a0e7 100644
> --- a/.gitmodules
> +++ b/.gitmodules
> @@ -1,7 +1,3 @@
> -[submodule "external/x64/openjdk.bin"]
> -       path = external/x64/openjdk.bin
> -       url = ../../cloudius-systems/openjdk.bin
> -       ignore = dirty
>  [submodule "external/x64/gcc.bin"]
>         path = external/x64/gcc.bin
>         url = ../../cloudius-systems/gcc.bin
> @@ -24,9 +20,6 @@
>  [submodule "external/aarch64/misc.bin"]
>         path = external/aarch64/misc.bin
>         url = ../../cloudius-systems/aarch64-misc.bin.git
> -[submodule "external/aarch64/openjdk.bin"]
> -       path = external/aarch64/openjdk.bin
> -       url = ../../cloudius-systems/aarch64-openjdk.bin.git
>  [submodule "modules/httpserver/swagger-ui"]
>         path = modules/httpserver-html5-gui/swagger-ui
>         url = ../../cloudius-systems/swagger-ui.git
> diff --git a/Makefile b/Makefile
> index cbe90704..a4b000d6 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -112,7 +112,6 @@ endif
>  #   musl/ -  for some of the header files (symbolic links in include/api)
> and
>  #            some of the source files ($(musl) below).
>  #   external/x64/acpica - for the ACPICA library (see $(acpi) below).
> -#   external/x64/openjdk.bin - for $(java-targets) below.
>  # Additional submodules are need when certain make parameters are used.
>  ifeq (,$(wildcard musl/include))
>      $(error Missing musl/ directory. Please run "git submodule update
> --init --recursive")
> @@ -120,9 +119,6 @@ endif
>  ifeq (,$(wildcard external/x64/acpica/source))
>      $(error Missing external/x64/acpica/ directory. Please run "git
> submodule update --init --recursive")
>  endif
> -ifeq (,$(wildcard external/x64/openjdk.bin/usr))
> -    $(error Missing external/x64/openjdk.bin/ directory. Please run "git
> submodule update --init --recursive")
> -endif
>
>  # This makefile wraps all commands with the $(quiet) or $(very-quiet)
> macros
>  # so that instead of half-a-screen-long command lines we short summaries
> @@ -233,9 +229,6 @@ INCLUDES += -isystem include/glibc-compat
>
>  gccbase = external/$(arch)/gcc.bin
>  miscbase = external/$(arch)/misc.bin
> -jdkbase := $(shell find external/$(arch)/openjdk.bin/usr/lib/jvm \
> -                         -maxdepth 1 -type d -name 'java*')
> -
>
>  ifeq ($(gcc_include_env), external)
>    gcc-inc-base := $(dir $(shell find $(gccbase)/ -name vector | grep -v
> -e debug/vector$$ -e profile/vector$$))
> @@ -1933,7 +1926,7 @@ $(bootfs_manifest_dep): phony
>  $(out)/bootfs.bin: scripts/mkbootfs.py $(bootfs_manifest)
> $(bootfs_manifest_dep) $(tools:%=$(out)/%) \
>                 $(out)/zpool.so $(out)/zfs.so $(out)/libenviron.so
> $(out)/libvdso.so
>         $(call quiet, olddir=`pwd`; cd $(out);
> "$$olddir"/scripts/mkbootfs.py -o bootfs.bin -d bootfs.bin.d -m
> "$$olddir"/$(bootfs_manifest) \
> -               -D jdkbase="$$olddir"/$(jdkbase) -D
> gccbase="$$olddir"/$(gccbase) \
> +               -D gccbase="$$olddir"/$(gccbase) \
>                 -D miscbase="$$olddir"/$(miscbase), MKBOOTFS $@)
>
>  $(out)/bootfs.o: $(out)/bootfs.bin
> diff --git a/external/aarch64/openjdk.bin b/external/aarch64/openjdk.bin
> deleted file mode 160000
> index 443f2cca..00000000
> --- a/external/aarch64/openjdk.bin
> +++ /dev/null
> @@ -1 +0,0 @@
> -Subproject commit 443f2cca797910915274a0a3a42ea8a67752c063
> diff --git a/external/x64/openjdk.bin b/external/x64/openjdk.bin
> deleted file mode 160000
> index 019ea95e..00000000
> --- a/external/x64/openjdk.bin
> +++ /dev/null
> @@ -1 +0,0 @@
> -Subproject commit 019ea95e844cc9e51c149a519391e2a99915ad39
> diff --git a/modules/httpserver-jvm-plugin/Makefile
> b/modules/httpserver-jvm-plugin/Makefile
> index fdc20bb7..e92bec2c 100644
> --- a/modules/httpserver-jvm-plugin/Makefile
> +++ b/modules/httpserver-jvm-plugin/Makefile
> @@ -1,7 +1,6 @@
>
>  INCLUDES = -I$(src)/build/$(mode)/gen/include
> -INCLUDES += -I../../include -I. -I../../java -I../../arch/$(ARCH) -I../..
> -INCLUDES += -I$(jdkbase)/include -I$(jdkbase)/include/linux
> +INCLUDES += -I../../include -I. -I../../arch/$(ARCH) -I../..
>  INCLUDES += -I../httpserver-api
>
>  # compiler flags:
> diff --git a/modules/java-base/common.gmk b/modules/java-base/common.gmk
> index 0e2e4690..3d0a1c98 100644
> --- a/modules/java-base/common.gmk
> +++ b/modules/java-base/common.gmk
> @@ -1,3 +1,5 @@
> +jdkbase = $(dir $(shell readlink -f $$(which javac)))/..
> +
>  INCLUDES = -I$(src)/arch/$(arch) -I$(src) -I$(src)/include
> -I$(src)/arch/common
>  INCLUDES += -I$(src)/include/glibc-compat
>  INCLUDES += $(shell $(CXX) -E -xc++ - -v </dev/null 2>&1 | awk '/^End/
> {exit} /^ .*c\+\+/ {print "-isystem" $$0}')
> diff --git a/modules/java/module.py b/modules/java/module.py
> index 7af25104..114c5fb9 100644
> --- a/modules/java/module.py
> +++ b/modules/java/module.py
> @@ -1,4 +1,4 @@
>  from osv.modules import api
>
>  api.require('java-non-isolated')
> -api.require('openjdk7')
> +api.require('openjdk8-from-host')
> diff --git a/modules/openjdk7/module.py b/modules/openjdk7/module.py
> deleted file mode 100644
> index e4895465..00000000
> --- a/modules/openjdk7/module.py
> +++ /dev/null
> @@ -1,22 +0,0 @@
> -from osv.modules.filemap import FileMap
> -from osv.modules import api
> -import os, os.path
> -
> -api.require('java-cmd')
> -provides = ['java']
> -
> -usr_files = FileMap()
> -
> -jdkdir = os.path.basename(os.path.expandvars('${jdkbase}'))
> -
> -usr_files.add('${jdkbase}').to('/usr/lib/jvm/java') \
> -    .include('lib/**') \
> -    .include('jre/**') \
> -    .include('bin/java') \
> -    .exclude('jre/lib/security/cacerts') \
> -    .exclude('jre/lib/audio/**')
> -
> -usr_files.link('/usr/lib/jvm/' + jdkdir).to('java')
> -usr_files.link('/usr/lib/jvm/jre').to('java/jre')
>
> -usr_files.link('/usr/lib/jvm/java/jre/lib/security/cacerts').to('/etc/pki/java/cacerts')
> -usr_files.link('/usr/bin/java').to('/usr/lib/jvm/java/bin/java')
> diff --git a/modules/openjdk8-from-host/.gitignore
> b/modules/openjdk8-from-host/.gitignore
> new file mode 100644
> index 00000000..f9235a6b
> --- /dev/null
> +++ b/modules/openjdk8-from-host/.gitignore
> @@ -0,0 +1 @@
> +usr.manifest
> diff --git a/modules/openjdk8-from-host/Makefile
> b/modules/openjdk8-from-host/Makefile
> new file mode 100644
> index 00000000..1bd8b898
> --- /dev/null
> +++ b/modules/openjdk8-from-host/Makefile
> @@ -0,0 +1,14 @@
> +.PHONY: module clean
> +
> +SRC = $(shell readlink -f ../..)
> +
> +javac_exe_path = $(shell realpath $$(which javac))
> +javac_bin_path = $(shell dirname $(javac_exe_path))
> +java_jdk_path = $(shell dirname $(javac_bin_path))
> +
> +module:
> +       $(SRC)/scripts/manifest_from_host.sh
> $(java_jdk_path)/jre/lib/amd64/libsunec.so > usr.manifest
> +       $(SRC)/scripts/manifest_from_host.sh -l libfreeblpriv3.so >>
> usr.manifest
> +
> +clean:
> +       rm -rf usr.manifest
> diff --git a/modules/openjdk8-from-host/module.py
> b/modules/openjdk8-from-host/module.py
> new file mode 100644
> index 00000000..a55c78e9
> --- /dev/null
> +++ b/modules/openjdk8-from-host/module.py
> @@ -0,0 +1,40 @@
> +from osv.modules.filemap import FileMap
> +from osv.modules import api
> +import os, os.path
> +import subprocess
> +
> +api.require('java-cmd')
> +provides = ['java','java8']
> +
> +#Verify that the jdk exists by trying to locate javac (java compiler)
> +if subprocess.call(['which', 'javac']) != 0:
> +     print('Could not find any jdk on the host. Please install openjdk8!')
> +     os.exit(-1)
> +
> +java_version = subprocess.check_output(['java', '-version'],
> stderr=subprocess.STDOUT)
> +if not 'openjdk version "1.8.0' in java_version:
> +    print('Could not find openjdk version 8 on the host. Please install
> openjdk8!')
> +    os.exit(-1)
> +
> +javac_path = subprocess.check_output(['which', 'javac']).split('\n')[0]
> +javac_real_path = os.path.realpath(javac_path)
> +jdk_path = os.path.dirname(os.path.dirname(javac_real_path))
> +
> +usr_files = FileMap()
> +
> +jdk_dir = os.path.basename(jdk_path)
> +
> +usr_files.add(jdk_path).to('/usr/lib/jvm/java') \
> +    .include('jre/**') \
> +    .exclude('jre/lib/security/cacerts') \
> +    .exclude('jre/lib/amd64/*audio*') \
> +    .exclude('jre/lib/amd64/*sound*') \
> +    .exclude('') \
> +    .exclude('jre/man/**') \
> +    .exclude('jre/bin/**') \
> +    .include('jre/bin/java')
> +
> +usr_files.link('/usr/lib/jvm/' + jdk_dir).to('java')
> +usr_files.link('/usr/lib/jvm/jre').to('java/jre')
>
> +usr_files.link('/usr/lib/jvm/java/jre/lib/security/cacerts').to('/etc/pki/java/cacerts')
> +usr_files.link('/usr/bin/java').to('/usr/lib/jvm/java/jre/bin/java')
> diff --git a/scripts/build b/scripts/build
> index 2a4ba957..b72a8d67 100755
> --- a/scripts/build
> +++ b/scripts/build
> @@ -170,7 +170,6 @@ esac
>  modules=${vars[modules]-!$image}
>
>  # TODO: some modules need these... Would be better if they wouldn't...
> -jdkbase=${vars[jdkbase]-`find
> "$SRC"/external/$arch/openjdk.bin/usr/lib/jvm -maxdepth 1 -type d -name
> 'java*'`}
>  gccbase=${vars[gccbase]-"$SRC"/external/$arch/gcc.bin}
>  miscbase=${vars[miscbase]-"$SRC"/external/$arch/misc.bin}
>
> @@ -221,8 +220,8 @@ fi
>                         export "$i" ;;
>                 esac
>         done
> -       # Export the variables we already have. This makes it unnecessary
> to do "fs__type=$fstype jdkbase $jdkbase ..."
> -       export fs_type jdkbase mode OSV_BUILD_PATH
> +       # Export the variables we already have. This makes it unnecessary
> to do "fs__type=$fstype ..."
> +       export fs_type mode OSV_BUILD_PATH
>         # Other variables we wanted to rename, I don't know why
>         export ARCH=$arch OSV_BASE=$SRC
>         # Run what we wanted to run. It will inherit everything we
> exported above.
> @@ -269,15 +268,15 @@ zfs)
>
>         if [ "$export" == "none" ]
>         then
> -               "$SRC"/scripts/upload_manifest.py -o usr.img -m
> usr.manifest -D jdkbase="$jdkbase" -D gccbase="$gccbase" -D
> miscbase="$miscbase"
> +               "$SRC"/scripts/upload_manifest.py -o usr.img -m
> usr.manifest -D gccbase="$gccbase" -D miscbase="$miscbase"
>         else
>                 export_dir=${vars[export_dir]-$SRC/build/export}
> -               "$SRC"/scripts/export_manifest.py -e "$export_dir" -m
> usr.manifest -D jdkbase="$jdkbase" -D gccbase="$gccbase" -D
> miscbase="$miscbase"
> +               "$SRC"/scripts/export_manifest.py -e "$export_dir" -m
> usr.manifest -D gccbase="$gccbase" -D miscbase="$miscbase"
>         fi
>         ;;
>  rofs)
>         rm -rf rofs.img
> -       "$SRC"/scripts/gen-rofs-img.py -o rofs.img -m usr.manifest -D
> jdkbase="$jdkbase" -D gccbase="$gccbase" -D miscbase="$miscbase"
> +       "$SRC"/scripts/gen-rofs-img.py -o rofs.img -m usr.manifest -D
> gccbase="$gccbase" -D miscbase="$miscbase"
>         rofs_size=`stat --printf %s rofs.img`
>         img_size=$((kernel_end + rofs_size))
>         cp loader.img bare.raw
> --
> 2.20.1
>
> --
> You received this message because you are subscribed to the Google Groups
> "OSv Development" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to osv-dev+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/osv-dev/20200122032153.6195-2-jwkozaczuk%40gmail.com
> .
>

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/CANEVyjsPp0L%2BAk%3D9KFWEB0b5s8yA8MEyAntO9%2B%2Bj-HUR-UYKDQ%40mail.gmail.com.

Reply via email to