diff --git a/.github/workflows/submit.yml b/.github/workflows/submit.yml
index 175bc0a9bdd..4f41156d45c 100644
--- a/.github/workflows/submit.yml
+++ b/.github/workflows/submit.yml
@@ -13,6 +13,7 @@ on:
description: "Platform(s) to execute on"
required: true
default: "Linux x64, Windows x64, macOS x64"
+# default: "Linux additional (hotspot only), Linux x64, Linux x86, Windows aarch64, Windows x64, macOS x64"
jobs:
prerequisites:
@@ -21,7 +22,10 @@ jobs:
outputs:
should_run: ${{ steps.check_submit.outputs.should_run }}
bundle_id: ${{ steps.check_bundle_id.outputs.bundle_id }}
+ platform_linux_additional: ${{ steps.check_platforms.outputs.platform_linux_additional }}
platform_linux_x64: ${{ steps.check_platforms.outputs.platform_linux_x64 }}
+ platform_linux_x86: ${{ steps.check_platforms.outputs.platform_linux_x86 }}
+ platform_windows_aarch64: ${{ steps.check_platforms.outputs.platform_windows_aarch64 }}
platform_windows_x64: ${{ steps.check_platforms.outputs.platform_windows_x64 }}
platform_macos_x64: ${{ steps.check_platforms.outputs.platform_macos_x64 }}
dependencies: ${{ steps.check_deps.outputs.dependencies }}
@@ -34,7 +38,10 @@ jobs:
- name: Check which platforms should be included
id: check_platforms
run: |
+ echo "::set-output name=platform_linux_additional::${{ contains(github.event.inputs.platforms, 'linux additional (hotspot only)') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'linux additional (hotspot only)'))) }}"
echo "::set-output name=platform_linux_x64::${{ contains(github.event.inputs.platforms, 'linux x64') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'linux x64'))) }}"
+ echo "::set-output name=platform_linux_x86::${{ contains(github.event.inputs.platforms, 'linux x86') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'linux x86'))) }}"
+ echo "::set-output name=platform_windows_aarch64::${{ contains(github.event.inputs.platforms, 'windows aarch64') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'windows aarch64'))) }}"
echo "::set-output name=platform_windows_x64::${{ contains(github.event.inputs.platforms, 'windows x64') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'windows x64'))) }}"
echo "::set-output name=platform_macos_x64::${{ contains(github.event.inputs.platforms, 'macos x64') || (github.event.inputs.platforms == '' && (secrets.JDK_SUBMIT_PLATFORMS == '' || contains(secrets.JDK_SUBMIT_PLATFORMS, 'macos x64'))) }}"
if: steps.check_submit.outputs.should_run != 'false'
@@ -52,7 +59,7 @@ jobs:
- name: Determine versions and locations to be used for dependencies
id: check_deps
- run: "echo ::set-output name=dependencies::`cat make/autoconf/version-numbers make/conf/test-dependencies | sed -e '1i {' -e 's/#.*//g' -e 's/\"//g' -e 's/\\(.*\\)=\\(.*\\)/\"\\1\": \"\\2\",/g' -e '$s/,\\s\\{0,\\}$/\\}/'`"
+ run: "echo ::set-output name=dependencies::`cat make/conf/version-numbers.conf make/conf/test-dependencies | sed -e '1i {' -e 's/#.*//g' -e 's/\"//g' -e 's/\\(.*\\)=\\(.*\\)/\"\\1\": \"\\2\",/g' -e '$s/,\\s\\{0,\\}$/\\}/'`"
working-directory: jdk
if: steps.check_submit.outputs.should_run != 'false'
@@ -101,7 +108,7 @@ jobs:
name: Linux x64
runs-on: "ubuntu-20.04"
needs: prerequisites
- if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_linux_x64 != 'false'
+ if: needs.prerequisites.outputs.should_run != 'false' && (needs.prerequisites.outputs.platform_linux_x64 != 'false' || needs.prerequisites.outputs.platform_linux_additional == 'true')
strategy:
fail-fast: false
@@ -377,6 +384,564 @@ jobs:
path: ~/linux-x64${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip
continue-on-error: true
+ linux_additional_build:
+ name: Linux additional
+ runs-on: "ubuntu-20.04"
+ needs:
+ - prerequisites
+ - linux_x64_build
+ if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_linux_additional != 'false'
+
+ strategy:
+ fail-fast: false
+ matrix:
+ flavor:
+ - hs x64 build only
+ - hs x64 zero build only
+ - hs x64 minimal build only
+ - hs x64 optimized build only
+ - hs aarch64 build only
+ - hs arm build only
+ - hs s390x build only
+ - hs ppc64le build only
+ include:
+ - flavor: hs x64 build only
+ flags: --enable-debug --disable-precompiled-headers
+ - flavor: hs x64 zero build only
+ flags: --enable-debug --disable-precompiled-headers --with-jvm-variants=zero
+ - flavor: hs x64 minimal build only
+ flags: --enable-debug --disable-precompiled-headers --with-jvm-variants=minimal
+ - flavor: hs x64 optimized build only
+ flags: --with-debug-level=optimized --disable-precompiled-headers
+ - flavor: hs aarch64 build only
+ flags: --enable-debug --disable-precompiled-headers
+ debian-arch: arm64
+ gnu-arch: aarch64
+ - flavor: hs arm build only
+ flags: --enable-debug --disable-precompiled-headers
+ debian-arch: armhf
+ gnu-arch: arm
+ gnu-flavor: eabihf
+ - flavor: hs s390x build only
+ flags: --enable-debug --disable-precompiled-headers
+ debian-arch: s390x
+ gnu-arch: s390x
+ - flavor: hs ppc64le build only
+ flags: --enable-debug --disable-precompiled-headers
+ debian-arch: ppc64el
+ gnu-arch: powerpc64le
+
+ env:
+ JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
+ BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
+ BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
+ BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
+ BOOT_JDK_SHA256: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_SHA256 }}"
+
+ steps:
+ - name: Checkout the source
+ uses: actions/checkout@v2
+ with:
+ path: jdk
+
+ - name: Restore boot JDK from cache
+ id: bootjdk
+ uses: actions/cache@v2
+ with:
+ path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
+ key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
+
+ - name: Download boot JDK
+ run: |
+ mkdir -p "${HOME}/bootjdk/${BOOT_JDK_VERSION}"
+ wget -O "${HOME}/bootjdk/${BOOT_JDK_FILENAME}" "${BOOT_JDK_URL}"
+ echo "${BOOT_JDK_SHA256} ${HOME}/bootjdk/${BOOT_JDK_FILENAME}" | sha256sum -c >/dev/null -
+ tar -xf "${HOME}/bootjdk/${BOOT_JDK_FILENAME}" -C "${HOME}/bootjdk/${BOOT_JDK_VERSION}"
+ mv "${HOME}/bootjdk/${BOOT_JDK_VERSION}/"*/* "${HOME}/bootjdk/${BOOT_JDK_VERSION}/"
+ if: steps.bootjdk.outputs.cache-hit != 'true'
+
+ - name: Restore build JDK
+ id: build_restore
+ uses: actions/download-artifact@v2
+ with:
+ name: transient_jdk-linux-x64_${{ needs.prerequisites.outputs.bundle_id }}
+ path: ~/jdk-linux-x64
+ continue-on-error: true
+
+ - name: Restore build JDK (retry)
+ uses: actions/download-artifact@v2
+ with:
+ name: transient_jdk-linux-x64_${{ needs.prerequisites.outputs.bundle_id }}
+ path: ~/jdk-linux-x64
+ if: steps.build_restore.outcome == 'failure'
+
+ - name: Unpack build JDK
+ run: |
+ mkdir -p "${HOME}/jdk-linux-x64/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x64_bin"
+ tar -xf "${HOME}/jdk-linux-x64/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x64_bin.tar.gz" -C "${HOME}/jdk-linux-x64/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x64_bin"
+
+ - name: Find root of build JDK image dir
+ run: |
+ build_jdk_root=`find ${HOME}/jdk-linux-x64/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x64_bin -name release -type f`
+ echo "build_jdk_root=`dirname ${build_jdk_root}`" >> $GITHUB_ENV
+
+ - name: Update apt
+ run: sudo apt-get update
+
+ - name: Install native host dependencies
+ run: |
+ sudo apt-get install gcc-10=10.2.0-5ubuntu1~20.04 g++-10=10.2.0-5ubuntu1~20.04 libxrandr-dev libxtst-dev libcups2-dev libasound2-dev
+ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10
+ if: matrix.debian-arch == ''
+
+ - name: Install cross-compilation host dependencies
+ run: sudo apt-get install gcc-10-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}=10.2.0-5ubuntu1~20.04cross1 g++-10-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}=10.2.0-5ubuntu1~20.04cross1
+ if: matrix.debian-arch != ''
+
+ - name: Cache sysroot
+ id: cache-sysroot
+ uses: actions/cache@v2
+ with:
+ path: ~/sysroot-${{ matrix.debian-arch }}/
+ key: sysroot-${{ matrix.debian-arch }}-${{ hashFiles('jdk/.github/workflows/submit.yml') }}
+ if: matrix.debian-arch != ''
+
+ - name: Install sysroot host dependencies
+ run: sudo apt-get install debootstrap qemu-user-static
+ if: matrix.debian-arch != '' && steps.cache-sysroot.outputs.cache-hit != 'true'
+
+ - name: Create sysroot
+ run: >
+ sudo qemu-debootstrap
+ --arch=${{ matrix.debian-arch }}
+ --verbose
+ --include=fakeroot,symlinks,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxrandr-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libasound2-dev,libfreetype6-dev,libpng-dev
+ --resolve-deps
+ buster
+ ~/sysroot-${{ matrix.debian-arch }}
+ http://httpredir.debian.org/debian/
+ if: matrix.debian-arch != '' && steps.cache-sysroot.outputs.cache-hit != 'true'
+
+ - name: Prepare sysroot for caching
+ run: |
+ sudo chroot ~/sysroot-${{ matrix.debian-arch }} symlinks -cr .
+ sudo chown ${USER} -R ~/sysroot-${{ matrix.debian-arch }}
+ rm -rf ~/sysroot-${{ matrix.debian-arch }}/{dev,proc,run,sys}
+ if: matrix.debian-arch != '' && steps.cache-sysroot.outputs.cache-hit != 'true'
+
+ - name: Configure cross compiler
+ run: |
+ echo "CC=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}-gcc-10" >> $GITHUB_ENV
+ echo "CXX=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}-g++-10" >> $GITHUB_ENV
+ if: matrix.debian-arch != ''
+
+ - name: Configure cross specific flags
+ run: >
+ echo "cross_flags=
+ --openjdk-target=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}
+ --with-sysroot=${HOME}/sysroot-${{ matrix.debian-arch }}/
+ --with-toolchain-path=${HOME}/sysroot-${{ matrix.debian-arch }}/
+ --with-freetype-lib=${HOME}/sysroot-${{ matrix.debian-arch }}/usr/lib/${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}/
+ --with-freetype-include=${HOME}/sysroot-${{ matrix.debian-arch }}/usr/include/freetype2/
+ --x-libraries=${HOME}/sysroot-${{ matrix.debian-arch }}/usr/lib/${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-flavor}}/
+ " >> $GITHUB_ENV
+ if: matrix.debian-arch != ''
+
+ - name: Configure
+ run: >
+ bash configure
+ --with-conf-name=linux-${{ matrix.gnu-arch }}-hotspot
+ ${{ matrix.flags }}
+ ${{ env.cross_flags }}
+ --with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA}
+ --with-version-build=0
+ --with-boot-jdk=${HOME}/bootjdk/${BOOT_JDK_VERSION}
+ --with-build-jdk=${{ env.build_jdk_root }}
+ --with-default-make-target="hotspot"
+ --with-zlib=system
+ working-directory: jdk
+
+ - name: Build
+ run: make CONF_NAME=linux-${{ matrix.gnu-arch }}-hotspot
+ working-directory: jdk
+
+ linux_x86_build:
+ name: Linux x86
+ runs-on: "ubuntu-20.04"
+ needs: prerequisites
+ if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_linux_x86 != 'false'
+
+ strategy:
+ fail-fast: false
+ matrix:
+ flavor:
+ - build release
+ - build debug
+ include:
+ - flavor: build debug
+ flags: --enable-debug
+ artifact: -debug
+
+ # Reduced 32-bit build uses the same boot JDK as 64-bit build
+ env:
+ JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
+ BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
+ BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
+ BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
+ BOOT_JDK_SHA256: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_SHA256 }}"
+
+ steps:
+ - name: Checkout the source
+ uses: actions/checkout@v2
+ with:
+ path: jdk
+
+ - name: Restore boot JDK from cache
+ id: bootjdk
+ uses: actions/cache@v2
+ with:
+ path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
+ key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
+
+ - name: Download boot JDK
+ run: |
+ mkdir -p "${HOME}/bootjdk/${BOOT_JDK_VERSION}"
+ wget -O "${HOME}/bootjdk/${BOOT_JDK_FILENAME}" "${BOOT_JDK_URL}"
+ echo "${BOOT_JDK_SHA256} ${HOME}/bootjdk/${BOOT_JDK_FILENAME}" | sha256sum -c >/dev/null -
+ tar -xf "${HOME}/bootjdk/${BOOT_JDK_FILENAME}" -C "${HOME}/bootjdk/${BOOT_JDK_VERSION}"
+ mv "${HOME}/bootjdk/${BOOT_JDK_VERSION}/"*/* "${HOME}/bootjdk/${BOOT_JDK_VERSION}/"
+ if: steps.bootjdk.outputs.cache-hit != 'true'
+
+ - name: Restore jtreg artifact
+ id: jtreg_restore
+ uses: actions/download-artifact@v2
+ with:
+ name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
+ path: ~/jtreg/
+ continue-on-error: true
+
+ - name: Restore jtreg artifact (retry)
+ uses: actions/download-artifact@v2
+ with:
+ name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
+ path: ~/jtreg/
+ if: steps.jtreg_restore.outcome == 'failure'
+
+ - name: Checkout gtest sources
+ uses: actions/checkout@v2
+ with:
+ repository: "google/googletest"
+ ref: "release-${{ fromJson(needs.prerequisites.outputs.dependencies).GTEST_VERSION }}"
+ path: gtest
+
+ # Roll in the multilib environment and its dependencies.
+ # Some multilib libraries do not have proper inter-dependencies, so we have to
+ # install their dependencies manually. Additionally, upgrading apt solves
+ # the libc6 installation bugs until base image catches up, see JDK-8260460.
+ - name: Install dependencies
+ run: |
+ sudo dpkg --add-architecture i386
+ sudo apt-get update
+ sudo apt-get install --only-upgrade apt
+ sudo apt-get install gcc-10-multilib g++-10-multilib libfreetype6-dev:i386 libxrandr-dev:i386 libxtst-dev:i386 libtiff-dev:i386 libcupsimage2-dev:i386 libcups2-dev:i386 libasound2-dev:i386
+ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10
+
+ - name: Configure
+ run: >
+ bash configure
+ --with-conf-name=linux-x86
+ --with-target-bits=32
+ ${{ matrix.flags }}
+ --with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA}
+ --with-version-build=0
+ --with-boot-jdk=${HOME}/bootjdk/${BOOT_JDK_VERSION}
+ --with-jtreg=${HOME}/jtreg
+ --with-gtest=${GITHUB_WORKSPACE}/gtest
+ --with-default-make-target="product-bundles test-bundles"
+ --with-zlib=system
+ --enable-jtreg-failure-handler
+ working-directory: jdk
+
+ - name: Build
+ run: make CONF_NAME=linux-x86
+ working-directory: jdk
+
+ - name: Persist test bundles
+ uses: actions/upload-artifact@v2
+ with:
+ name: transient_jdk-linux-x86${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
+ path: |
+ jdk/build/linux-x86/bundles/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x86_bin${{ matrix.artifact }}.tar.gz
+ jdk/build/linux-x86/bundles/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x86_bin-tests${{ matrix.artifact }}.tar.gz
+
+ linux_x86_test:
+ name: Linux x86
+ runs-on: "ubuntu-20.04"
+ needs:
+ - prerequisites
+ - linux_x86_build
+
+ strategy:
+ fail-fast: false
+ matrix:
+ test:
+ - jdk/tier1 part 1
+ - jdk/tier1 part 2
+ - jdk/tier1 part 3
+ - langtools/tier1
+ - hs/tier1 common
+ - hs/tier1 compiler
+ - hs/tier1 gc
+ - hs/tier1 runtime
+ - hs/tier1 serviceability
+ include:
+ - test: jdk/tier1 part 1
+ suites: test/jdk/:tier1_part1
+ - test: jdk/tier1 part 2
+ suites: test/jdk/:tier1_part2
+ - test: jdk/tier1 part 3
+ suites: test/jdk/:tier1_part3
+ - test: langtools/tier1
+ suites: test/langtools/:tier1
+ - test: hs/tier1 common
+ suites: test/hotspot/jtreg/:tier1_common
+ artifact: -debug
+ - test: hs/tier1 compiler
+ suites: test/hotspot/jtreg/:tier1_compiler
+ artifact: -debug
+ - test: hs/tier1 gc
+ suites: test/hotspot/jtreg/:tier1_gc
+ artifact: -debug
+ - test: hs/tier1 runtime
+ suites: test/hotspot/jtreg/:tier1_runtime
+ artifact: -debug
+ - test: hs/tier1 serviceability
+ suites: test/hotspot/jtreg/:tier1_serviceability
+ artifact: -debug
+
+ # Reduced 32-bit build uses the same boot JDK as 64-bit build
+ env:
+ JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
+ BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
+ BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_FILENAME }}"
+ BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_URL }}"
+ BOOT_JDK_SHA256: "${{ fromJson(needs.prerequisites.outputs.dependencies).LINUX_X64_BOOT_JDK_SHA256 }}"
+
+ steps:
+ - name: Checkout the source
+ uses: actions/checkout@v2
+
+ - name: Restore boot JDK from cache
+ id: bootjdk
+ uses: actions/cache@v2
+ with:
+ path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
+ key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
+
+ - name: Download boot JDK
+ run: |
+ mkdir -p "${HOME}/bootjdk/${BOOT_JDK_VERSION}"
+ wget -O "${HOME}/bootjdk/${BOOT_JDK_FILENAME}" "${BOOT_JDK_URL}"
+ echo "${BOOT_JDK_SHA256} ${HOME}/bootjdk/${BOOT_JDK_FILENAME}" | sha256sum -c >/dev/null -
+ tar -xf "${HOME}/bootjdk/${BOOT_JDK_FILENAME}" -C "${HOME}/bootjdk/${BOOT_JDK_VERSION}"
+ mv "${HOME}/bootjdk/${BOOT_JDK_VERSION}/"*/* "${HOME}/bootjdk/${BOOT_JDK_VERSION}/"
+ if: steps.bootjdk.outputs.cache-hit != 'true'
+
+ - name: Restore jtreg artifact
+ id: jtreg_restore
+ uses: actions/download-artifact@v2
+ with:
+ name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
+ path: ~/jtreg/
+ continue-on-error: true
+
+ - name: Restore jtreg artifact (retry)
+ uses: actions/download-artifact@v2
+ with:
+ name: transient_jtreg_${{ needs.prerequisites.outputs.bundle_id }}
+ path: ~/jtreg/
+ if: steps.jtreg_restore.outcome == 'failure'
+
+ - name: Restore build artifacts
+ id: build_restore
+ uses: actions/download-artifact@v2
+ with:
+ name: transient_jdk-linux-x86${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
+ path: ~/jdk-linux-x86${{ matrix.artifact }}
+ continue-on-error: true
+
+ - name: Restore build artifacts (retry)
+ uses: actions/download-artifact@v2
+ with:
+ name: transient_jdk-linux-x86${{ matrix.artifact }}_${{ needs.prerequisites.outputs.bundle_id }}
+ path: ~/jdk-linux-x86${{ matrix.artifact }}
+ if: steps.build_restore.outcome == 'failure'
+
+ - name: Unpack jdk
+ run: |
+ mkdir -p "${HOME}/jdk-linux-x86${{ matrix.artifact }}/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x86_bin${{ matrix.artifact }}"
+ tar -xf "${HOME}/jdk-linux-x86${{ matrix.artifact }}/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x86_bin${{ matrix.artifact }}.tar.gz" -C "${HOME}/jdk-linux-x86${{ matrix.artifact }}/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x86_bin${{ matrix.artifact }}"
+
+ - name: Unpack tests
+ run: |
+ mkdir -p "${HOME}/jdk-linux-x86${{ matrix.artifact }}/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x86_bin-tests${{ matrix.artifact }}"
+ tar -xf "${HOME}/jdk-linux-x86${{ matrix.artifact }}/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x86_bin-tests${{ matrix.artifact }}.tar.gz" -C "${HOME}/jdk-linux-x86${{ matrix.artifact }}/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x86_bin-tests${{ matrix.artifact }}"
+
+ - name: Find root of jdk image dir
+ run: |
+ imageroot=`find ${HOME}/jdk-linux-x86${{ matrix.artifact }}/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x86_bin${{ matrix.artifact }} -name release -type f`
+ echo "imageroot=`dirname ${imageroot}`" >> $GITHUB_ENV
+
+ - name: Run tests
+ run: >
+ JDK_IMAGE_DIR=${{ env.imageroot }}
+ TEST_IMAGE_DIR=${HOME}/jdk-linux-x86${{ matrix.artifact }}/jdk-${{ env.JDK_VERSION }}-internal+0_linux-x86_bin-tests${{ matrix.artifact }}
+ BOOT_JDK=${HOME}/bootjdk/${BOOT_JDK_VERSION}
+ JT_HOME=${HOME}/jtreg
+ make test-prebuilt
+ CONF_NAME=run-test-prebuilt
+ LOG_CMDLINES=true
+ JTREG_VERBOSE=fail,error,time
+ TEST="${{ matrix.suites }}"
+ TEST_OPTS_JAVA_OPTIONS=
+ JTREG_KEYWORDS="!headful"
+ JTREG="JAVA_OPTIONS=-XX:-CreateCoredumpOnCrash"
+
+ - name: Check that all tests executed successfully
+ if: always()
+ run: >
+ if ! grep --include=test-summary.txt -lqr build/*/test-results -e "TEST SUCCESS" ; then
+ cat build/*/test-results/*/text/newfailures.txt ;
+ exit 1 ;
+ fi
+
+ - name: Create suitable test log artifact name
+ if: always()
+ run: echo "logsuffix=`echo ${{ matrix.test }} | sed -e 's!/!_!'g -e 's! !_!'g`" >> $GITHUB_ENV
+
+ - name: Package test results
+ if: always()
+ working-directory: build/run-test-prebuilt/test-results/
+ run: >
+ zip -r9
+ "$HOME/linux-x86${{ matrix.artifact }}_testresults_${{ env.logsuffix }}.zip"
+ .
+ continue-on-error: true
+
+ - name: Package test support
+ if: always()
+ working-directory: build/run-test-prebuilt/test-support/
+ run: >
+ zip -r9
+ "$HOME/linux-x86${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip"
+ .
+ -i *.jtr
+ -i */hs_err*.log
+ -i */replay*.log
+ continue-on-error: true
+
+ - name: Persist test results
+ if: always()
+ uses: actions/upload-artifact@v2
+ with:
+ path: ~/linux-x86${{ matrix.artifact }}_testresults_${{ env.logsuffix }}.zip
+ continue-on-error: true
+
+ - name: Persist test outputs
+ if: always()
+ uses: actions/upload-artifact@v2
+ with:
+ path: ~/linux-x86${{ matrix.artifact }}_testsupport_${{ env.logsuffix }}.zip
+ continue-on-error: true
+
+ windows_aarch64_build:
+ name: Windows aarch64
+ runs-on: "windows-2019"
+ needs: prerequisites
+ if: needs.prerequisites.outputs.should_run != 'false' && needs.prerequisites.outputs.platform_windows_aarch64 != 'false'
+
+ strategy:
+ fail-fast: false
+ matrix:
+ flavor:
+ - build debug
+ include:
+ - flavor: build debug
+ flags: --enable-debug
+ artifact: -debug
+
+ env:
+ JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).DEFAULT_VERSION_FEATURE }}"
+ BOOT_JDK_VERSION: "${{ fromJson(needs.prerequisites.outputs.dependencies).BOOT_JDK_VERSION }}"
+ BOOT_JDK_FILENAME: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_FILENAME }}"
+ BOOT_JDK_URL: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_URL }}"
+ BOOT_JDK_SHA256: "${{ fromJson(needs.prerequisites.outputs.dependencies).WINDOWS_X64_BOOT_JDK_SHA256 }}"
+
+ steps:
+ - name: Restore cygwin packages from cache
+ id: cygwin
+ uses: actions/cache@v2
+ with:
+ path: ~/cygwin/packages
+ key: cygwin-packages-${{ runner.os }}-v1
+
+ - name: Install cygwin
+ run: |
+ New-Item -Force -ItemType directory -Path "$HOME\cygwin"
+ & curl -L "https://www.cygwin.com/setup-x86_64.exe" -o "$HOME/cygwin/setup-x86_64.exe"
+ Start-Process -FilePath "$HOME\cygwin\setup-x86_64.exe" -ArgumentList "--quiet-mode --packages autoconf,make,zip,unzip --root $HOME\cygwin\cygwin64 --local-package-dir $HOME\cygwin\packages --site http://mirrors.kernel.org/sourceware/cygwin --no-desktop --no-shortcuts --no-startmenu --no-admin" -Wait -NoNewWindow
+
+ - name: Checkout the source
+ uses: actions/checkout@v2
+ with:
+ path: jdk
+
+ - name: Restore boot JDK from cache
+ id: bootjdk
+ uses: actions/cache@v2
+ with:
+ path: ~/bootjdk/${{ env.BOOT_JDK_VERSION }}
+ key: bootjdk-${{ runner.os }}-${{ env.BOOT_JDK_VERSION }}-${{ env.BOOT_JDK_SHA256 }}-v1
+
+ - name: Download boot JDK
+ run: |
+ mkdir -p "$HOME\bootjdk\$env:BOOT_JDK_VERSION"
+ & curl -L "$env:BOOT_JDK_URL" -o "$HOME/bootjdk/$env:BOOT_JDK_FILENAME"
+ $FileHash = Get-FileHash -Algorithm SHA256 "$HOME/bootjdk/$env:BOOT_JDK_FILENAME"
+ $FileHash.Hash -eq $env:BOOT_JDK_SHA256
+ & tar -xf "$HOME/bootjdk/$env:BOOT_JDK_FILENAME" -C "$HOME/bootjdk/$env:BOOT_JDK_VERSION"
+ Get-ChildItem "$HOME\bootjdk\$env:BOOT_JDK_VERSION\*\*" | Move-Item -Destination "$HOME\bootjdk\$env:BOOT_JDK_VERSION"
+ if: steps.bootjdk.outputs.cache-hit != 'true'
+
+ - name: Ensure a specific version of MSVC is installed
+ run: >
+ Start-Process -FilePath 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe' -Wait -NoNewWindow -ArgumentList
+ 'modify --installPath "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise" --quiet
+ --add Microsoft.VisualStudio.Component.VC.14.28.arm64'
+
+ - name: Configure
+ run: >
+ $env:Path = "$HOME\cygwin\cygwin64\bin;$HOME\cygwin\cygwin64\bin;$env:Path" ;
+ $env:Path = $env:Path -split ";" -match "C:\\Windows|PowerShell|cygwin" -join ";" ;
+ $env:BOOT_JDK = cygpath "$HOME/bootjdk/$env:BOOT_JDK_VERSION" ;
+ & bash configure
+ --with-conf-name=windows-aarch64
+ --with-msvc-toolset-version=14.28
+ --openjdk-target=aarch64-unknown-cygwin
+ ${{ matrix.flags }}
+ --with-version-opt="$env:GITHUB_ACTOR-$env:GITHUB_SHA"
+ --with-version-build=0
+ --with-boot-jdk="$env:BOOT_JDK"
+ --with-default-make-target="hotspot"
+ working-directory: jdk
+
+ - name: Build
+ run: |
+ $env:Path = "$HOME\cygwin\cygwin64\bin;$HOME\cygwin\cygwin64\bin;$env:Path" ;
+ $env:Path = $env:Path -split ";" -match "C:\\Windows|PowerShell|cygwin" -join ";" ;
+ & make CONF_NAME=windows-aarch64
+ working-directory: jdk
+
windows_x64_build:
name: Windows x64
runs-on: "windows-2019"
@@ -463,24 +1028,26 @@ jobs:
run: >
Start-Process -FilePath 'C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe' -Wait -NoNewWindow -ArgumentList
'modify --installPath "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise" --quiet
- --add Microsoft.VisualStudio.Component.VC.14.27.x86.x64'
+ --add Microsoft.VisualStudio.Component.VC.14.28.x86.x64'
- name: Configure
run: >
$env:Path = "$HOME\cygwin\cygwin64\bin;$HOME\cygwin\cygwin64\bin;$env:Path" ;
$env:Path = $env:Path -split ";" -match "C:\\Windows|PowerShell|cygwin" -join ";" ;
+ $env:BOOT_JDK = cygpath "$HOME/bootjdk/$env:BOOT_JDK_VERSION" ;
+ $env:JT_HOME = cygpath "$HOME/jtreg" ;
+ $env:GTEST = cygpath "$env:GITHUB_WORKSPACE/gtest" ;
& bash configure
--with-conf-name=windows-x64
- --with-msvc-toolset-version=14.27
+ --with-msvc-toolset-version=14.28
${{ matrix.flags }}
--with-version-opt="$env:GITHUB_ACTOR-$env:GITHUB_SHA"
--with-version-build=0
- --with-boot-jdk="$HOME/bootjdk/$env:BOOT_JDK_VERSION"
- --with-jtreg="$HOME/jtreg"
- --with-gtest="$env:GITHUB_WORKSPACE/gtest"
+ --with-boot-jdk="$env:BOOT_JDK"
+ --with-jtreg="$env:JT_HOME"
+ --with-gtest="$env:GTEST"
--with-default-make-target="product-bundles test-bundles"
--enable-jtreg-failure-handler
- --disable-precompiled-headers
working-directory: jdk
- name: Build
@@ -994,7 +1561,10 @@ jobs:
continue-on-error: true
needs:
- prerequisites
+ - linux_additional_build
+ - windows_aarch64_build
- linux_x64_test
+ - linux_x86_test
- windows_x64_test
- macos_x64_test
diff --git a/doc/building.html b/doc/building.html
index 318a24aa840..0522bc4888b 100644
--- a/doc/building.html
+++ b/doc/building.html
@@ -97,12 +97,10 @@
Building the JDK
Getting Help
Hints and Suggestions for Advanced Users
Understanding the Build System
TL;DR (Instructions for the Impatient)
-If you are eager to try out building the JDK, these simple steps works most of the time. They assume that you have installed Mercurial (and Cygwin if running on Windows) and cloned the top-level JDK repository that you want to build.
+If you are eager to try out building the JDK, these simple steps works most of the time. They assume that you have installed Git (and Cygwin if running on Windows) and cloned the top-level JDK repository that you want to build.
Get the complete source code:
-hg clone http://hg.openjdk.java.net/jdk/jdk
+git clone https://git.openjdk.java.net/jdk/
Run configure:
bash configure
If configure
fails due to missing dependencies (to either the toolchain, build tools, external libraries or the boot JDK), most of the time it prints a suggestion on how to resolve the situation on your platform. Follow the instructions, and try running bash configure
again.
@@ -135,8 +133,8 @@ Introduction
The JDK is a complex software project. Building it requires a certain amount of technical expertise, a fair number of dependencies on external software, and reasonably powerful hardware.
If you just want to use the JDK and not build it yourself, this document is not for you. See for instance OpenJDK installation for some methods of installing a prebuilt JDK.
Getting the Source Code
-Make sure you are getting the correct version. As of JDK 10, the source is no longer split into separate repositories so you only need to clone one single repository. At the OpenJDK Mercurial server you can see a list of all available repositories. If you want to build an older version, e.g. JDK 8, it is recommended that you get the jdk8u
forest, which contains incremental updates, instead of the jdk8
forest, which was frozen at JDK 8 GA.
-If you are new to Mercurial, a good place to start is the Mercurial Beginner's Guide. The rest of this document assumes a working knowledge of Mercurial.
+Make sure you are getting the correct version. As of JDK 10, the source is no longer split into separate repositories so you only need to clone one single repository. At the OpenJDK Git site you can see a list of all available repositories. If you want to build an older version, e.g. JDK 11, it is recommended that you get the jdk11u
repo, which contains incremental updates, instead of the jdk11
repo, which was frozen at JDK 11 GA.
+If you are new to Git, a good place to start is the book Pro Git. The rest of this document assumes a working knowledge of Git.
Special Considerations
For a smooth building experience, it is recommended that you follow these rules on where and how to check out the source code.
@@ -194,7 +196,7 @@ Windows
Windows XP is not a supported platform, but all newer Windows should be able to build the JDK.
On Windows, it is important that you pay attention to the instructions in the Special Considerations.
Windows is the only non-POSIX OS supported by the JDK, and as such, requires some extra care. A POSIX support layer is required to build on Windows. Currently, the only supported such layers are Cygwin and Windows Subsystem for Linux (WSL). (Msys is no longer supported due to a too old bash; msys2 would likely be possible to support in a future version but that would require effort to implement.)
-Internally in the build system, all paths are represented as Unix-style paths, e.g. /cygdrive/c/hg/jdk9/Makefile
rather than C:\hg\jdk9\Makefile
. This rule also applies to input to the build system, e.g. in arguments to configure
. So, use --with-msvcr-dll=/cygdrive/c/msvcr100.dll
rather than --with-msvcr-dll=c:\msvcr100.dll
. For details on this conversion, see the section on Fixpath.
+Internally in the build system, all paths are represented as Unix-style paths, e.g. /cygdrive/c/git/jdk/Makefile
rather than C:\git\jdk\Makefile
. This rule also applies to input to the build system, e.g. in arguments to configure
. So, use --with-msvcr-dll=/cygdrive/c/msvcr100.dll
rather than --with-msvcr-dll=c:\msvcr100.dll
. For details on this conversion, see the section on Fixpath.
Cygwin
A functioning Cygwin environment is required for building the JDK on Windows. If you have a 64-bit OS, we strongly recommend using the 64-bit version of Cygwin.
Note: Cygwin has a model of continuously updating all packages without any easy way to install or revert to a specific version of a package. This means that whenever you add or update a package in Cygwin, you might (inadvertently) update tools that are used by the JDK build process, and that can cause unexpected build problems.
@@ -297,6 +299,7 @@ Apple Xcode
Microsoft Visual Studio
The minimum accepted version of Visual Studio is 2017. Older versions will not be accepted by configure
and will not work. The maximum accepted version of Visual Studio is 2019.
If you have multiple versions of Visual Studio installed, configure
will by default pick the latest. You can request a specific version to be used by setting --with-toolchain-version
, e.g. --with-toolchain-version=2017
.
+If you have Visual Studio installed but configure
fails to detect it, it may be because of spaces in path.
IBM XL C/C++
Please consult the AIX section of the Supported Build Platforms OpenJDK Build Wiki page for details about which versions of XLC are supported.
Boot JDK Requirements
@@ -400,7 +403,7 @@ --enable-jvm-feature-<feature>
or --disable-jvm-feature-<feature>
- Include (or exclude) <feature>
as a JVM feature in Hotspot. You can also specify a list of features to be enabled, separated by space or comma, as --with-jvm-features=<feature>[,<feature>...]
. If you prefix <feature>
with a -
, it will be disabled. These options will modify the default list of features for the JVM variant(s) you are building. For the custom
JVM variant, the default list is empty. A complete list of valid JVM features can be found using bash configure --help
.
--with-target-bits=<bits>
- Create a target binary suitable for running on a <bits>
platform. Use this to create 32-bit output on a 64-bit build platform, instead of doing a full cross-compile. (This is known as a reduced build.)
-On Linux, BSD and AIX, it is possible to override where Java by default searches for runtime/JNI libraries. This can be useful in situations where there is a special shared directory for system JNI libraries. This setting can in turn be overriden at runtime by setting the java.library.path
property.
+On Linux, BSD and AIX, it is possible to override where Java by default searches for runtime/JNI libraries. This can be useful in situations where there is a special shared directory for system JNI libraries. This setting can in turn be overridden at runtime by setting the java.library.path
property.
--with-jni-libpath=<path>
- Use the specified path as a default when searching for runtime libraries.
@@ -439,7 +442,7 @@ It is possible to control certain aspects of configure
by overriding the value of configure
variables, either on the command line or in the environment.
Normally, this is not recommended. If used improperly, it can lead to a broken configuration. Unless you're well versed in the build system, this is hard to use properly. Therefore, configure
will print a warning if this is detected.
-However, there are a few configure
variables, known as control variables that are supposed to be overriden on the command line. These are variables that describe the location of tools needed by the build, like MAKE
or GREP
. If any such variable is specified, configure
will use that value instead of trying to autodetect the tool. For instance, bash configure MAKE=/opt/gnumake4.0/bin/make
.
+However, there are a few configure
variables, known as control variables that are supposed to be overridden on the command line. These are variables that describe the location of tools needed by the build, like MAKE
or GREP
. If any such variable is specified, configure
will use that value instead of trying to autodetect the tool. For instance, bash configure MAKE=/opt/gnumake4.0/bin/make
.
If a configure argument exists, use that instead, e.g. use --with-jtreg
instead of setting JTREGEXE
.
Also note that, despite what autoconf claims, setting CFLAGS
will not accomplish anything. Instead use --with-extra-cflags
(and similar for cxxflags
and ldflags
).
Running Make
@@ -476,7 +479,7 @@ Common Make Targets
Make Control Variables
It is possible to control make
behavior by overriding the value of make
variables, either on the command line or in the environment.
Normally, this is not recommended. If used improperly, it can lead to a broken build. Unless you're well versed in the build system, this is hard to use properly. Therefore, make
will print a warning if this is detected.
-However, there are a few make
variables, known as control variables that are supposed to be overriden on the command line. These make up the "make time" configuration, as opposed to the "configure time" configuration.
+However, there are a few make
variables, known as control variables that are supposed to be overridden on the command line. These make up the "make time" configuration, as opposed to the "configure time" configuration.
General Make Control Variables
JOBS
- Specify the number of jobs to build with. See Build Performance.
@@ -758,14 +761,14 @@ Build Failure Summary
=== Output from failing command(s) repeated here ===
* For target hotspot_variant-server_libjvm_objs_psMemoryPool.o:
-/localhome/hg/jdk9-sandbox/hotspot/src/share/vm/services/psMemoryPool.cpp:1:1: error: 'failhere' does not name a type
+/localhome/git/jdk-sandbox/hotspot/src/share/vm/services/psMemoryPool.cpp:1:1: error: 'failhere' does not name a type
... (rest of output omitted)
-* All command lines available in /localhome/hg/jdk9-sandbox/build/linux-x64/make-support/failure-logs.
+* All command lines available in /localhome/git/jdk-sandbox/build/linux-x64/make-support/failure-logs.
=== End of repeated output ===
=== Make failed targets repeated here ===
-lib/CompileJvm.gmk:207: recipe for target '/localhome/hg/jdk9-sandbox/build/linux-x64/hotspot/variant-server/libjvm/objs/psMemoryPool.o' failed
+lib/CompileJvm.gmk:207: recipe for target '/localhome/git/jdk-sandbox/build/linux-x64/hotspot/variant-server/libjvm/objs/psMemoryPool.o' failed
make/Main.gmk:263: recipe for target 'hotspot-server-libs' failed
=== End of repeated output ===
@@ -792,7 +795,7 @@ Problems with Incremental Rebuilds
Here are a suggested list of things to try if you are having unexpected build problems. Each step requires more time than the one before, so try them in order. Most issues will be solved at step 1 or 2.
Make sure your repository is up-to-date
-Run hg pull -u
to make sure you have the latest changes.
+Run git pull origin master
to make sure you have the latest changes.
Clean build results
The simplest way to fix incremental rebuild issues is to run make clean
. This will remove all build results, but not the configuration or any build system support artifacts. In most cases, this will solve build errors resulting from incremental build mismatches.
Completely clean the build directory.
@@ -801,8 +804,8 @@ Problems with Incremental Rebuilds
make dist-clean
bash configure $(cat current-configuration)
make
-Re-clone the Mercurial repository
-Sometimes the Mercurial repository gets in a state that causes the product to be un-buildable. In such a case, the simplest solution is often the "sledgehammer approach": delete the entire repository, and re-clone it. If you have local changes, save them first to a different location using hg export
.
+Re-clone the Git repository
+Sometimes the Git repository gets in a state that causes the product to be un-buildable. In such a case, the simplest solution is often the "sledgehammer approach": delete the entire repository, and re-clone it. If you have local changes, save them first to a different location using git format-patch
.
Specific Build Issues
Clock Skew
@@ -817,23 +820,12 @@ Out of Memory Errors
cannot create ... Permission denied
spawn failed
This can be a sign of a Cygwin problem. See the information about solving problems in the Cygwin section. Rebooting the computer might help temporarily.
+Spaces in Path
+On Windows, when configuring, fixpath.sh
may report that some directory names have spaces. Usually, it assumes those directories have short paths. You can run fsutil file setshortname
in cmd
on certain directories, such as Microsoft Visual Studio
or Windows Kits
, to assign arbitrary short paths so configure
can access them.
Getting Help
If none of the suggestions in this document helps you, or if you find what you believe is a bug in the build system, please contact the Build Group by sending a mail to build-dev@openjdk.java.net. Please include the relevant parts of the configure and/or build log.
If you need general help or advice about developing for the JDK, you can also contact the Adoption Group. See the section on Contributing to OpenJDK for more information.
Hints and Suggestions for Advanced Users
-Setting Up a Repository for Pushing Changes (defpath)
-To help you prepare a proper push path for a Mercurial repository, there exists a useful tool known as defpath. It will help you setup a proper push path for pushing changes to the JDK.
-Install the extension by cloning http://hg.openjdk.java.net/code-tools/defpath
and updating your .hgrc
file. Here's one way to do this:
-
cd ~
-mkdir hg-ext
-cd hg-ext
-hg clone http://hg.openjdk.java.net/code-tools/defpath
-cat << EOT >> ~/.hgrc
-[extensions]
-defpath=~/hg-ext/defpath/defpath.py
-EOT
-You can now setup a proper push path using:
-hg defpath -d -u <your OpenJDK username>
Bash Completion
The configure
and make
commands tries to play nice with bash command-line completion (using <tab>
or <tab><tab>
). To use this functionality, make sure you enable completion in your ~/.bashrc
(see instructions for bash in your operating system).
Make completion will work out of the box, and will complete valid make targets. For instance, typing make jdk-i<tab>
will complete to make jdk-image
.
@@ -886,14 +878,6 @@ Skipping the Dependency Check
Rebuilding Part of java.base (JDK_FILTER)
If you are modifying files in java.base
, which is the by far largest module in the JDK, then you need to rebuild all those files whenever a single file has changed. (This inefficiency will hopefully be addressed in JDK 10.)
As a hack, you can use the make control variable JDK_FILTER
to specify a pattern that will be used to limit the set of files being recompiled. For instance, make java.base JDK_FILTER=javax/crypto
(or, to combine methods, make java.base-java-only JDK_FILTER=javax/crypto
) will limit the compilation to files in the javax.crypto
package.
-Learn About Mercurial
-To become an efficient JDK developer, it is recommended that you invest in learning Mercurial properly. Here are some links that can get you started:
-
Understanding the Build System
This section will give you a more technical description on the details of the build system.
Configurations
diff --git a/doc/building.md b/doc/building.md
index 197032182db..926148d463d 100644
--- a/doc/building.md
+++ b/doc/building.md
@@ -382,6 +382,9 @@ If you have multiple versions of Visual Studio installed, `configure` will by
default pick the latest. You can request a specific version to be used by
setting `--with-toolchain-version`, e.g. `--with-toolchain-version=2017`.
+If you have Visual Studio installed but `configure` fails to detect it, it may
+be because of [spaces in path](#spaces-in-path).
+
### IBM XL C/C++
Please consult the AIX section of the [Supported Build Platforms](
@@ -653,7 +656,7 @@ features, use `bash configure --help=short` instead.)
On Linux, BSD and AIX, it is possible to override where Java by default
searches for runtime/JNI libraries. This can be useful in situations where
there is a special shared directory for system JNI libraries. This setting
-can in turn be overriden at runtime by setting the `java.library.path` property.
+can in turn be overridden at runtime by setting the `java.library.path` property.
* `--with-jni-libpath=` - Use the specified path as a default
when searching for runtime libraries.
@@ -719,7 +722,7 @@ hard to use properly. Therefore, `configure` will print a warning if this is
detected.
However, there are a few `configure` variables, known as *control variables*
-that are supposed to be overriden on the command line. These are variables that
+that are supposed to be overridden on the command line. These are variables that
describe the location of tools needed by the build, like `MAKE` or `GREP`. If
any such variable is specified, `configure` will use that value instead of
trying to autodetect the tool. For instance, `bash configure
@@ -799,7 +802,7 @@ broken build. Unless you're well versed in the build system, this is hard to
use properly. Therefore, `make` will print a warning if this is detected.
However, there are a few `make` variables, known as *control variables* that
-are supposed to be overriden on the command line. These make up the "make time"
+are supposed to be overridden on the command line. These make up the "make time"
configuration, as opposed to the "configure time" configuration.
#### General Make Control Variables
@@ -1466,6 +1469,15 @@ This can be a sign of a Cygwin problem. See the information about solving
problems in the [Cygwin](#cygwin) section. Rebooting the computer might help
temporarily.
+#### Spaces in Path
+
+On Windows, when configuring, `fixpath.sh` may report that some directory
+names have spaces. Usually, it assumes those directories have
+[short paths](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/fsutil-8dot3name).
+You can run `fsutil file setshortname` in `cmd` on certain directories, such as
+`Microsoft Visual Studio` or `Windows Kits`, to assign arbitrary short paths so
+`configure` can access them.
+
### Getting Help
If none of the suggestions in this document helps you, or if you find what you
diff --git a/doc/hotspot-style.html b/doc/hotspot-style.html
index c04ac93dc91..36d0b098940 100644
--- a/doc/hotspot-style.html
+++ b/doc/hotspot-style.html
@@ -304,6 +304,7 @@ Additional Permitted Features
Dynamic initialization and destruction with concurrency (n2660)
final
virtual specifiers for classes and virtual functions (n2928), (n3206), (n3272)
Local and unnamed types as template parameters (n2657)
+Range-based for
loops (n2930) (range-for)
Excluded Features
diff --git a/doc/hotspot-style.md b/doc/hotspot-style.md
index 0225aac01c8..25c0dbc7793 100644
--- a/doc/hotspot-style.md
+++ b/doc/hotspot-style.md
@@ -750,6 +750,10 @@ part of the avoidance of the C++ Standard Library in HotSpot code.
* Local and unnamed types as template parameters
([n2657](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm))
+* Range-based `for` loops
+([n2930](http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html))
+([range-for](https://en.cppreference.com/w/cpp/language/range-for))
+
### Excluded Features
* New string and character literals
diff --git a/make/CompileCommands.gmk b/make/CompileCommands.gmk
index ad729830e53..494bbd1d3f1 100644
--- a/make/CompileCommands.gmk
+++ b/make/CompileCommands.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -45,11 +45,6 @@ $(OUTPUTDIR)/compile_commands.json: $(wildcard $(MAKESUPPORT_OUTPUTDIR)/compile-
$(RM) $@
$(FIND) $(MAKESUPPORT_OUTPUTDIR)/compile-commands/ -name \*.json | \
$(SORT) | $(XARGS) $(CAT) >> $@.tmp
- $(if $(FIXPATH),$(FIXPATH) $(AWK) 'BEGIN { \
- tmpfile = substr(ARGV[2],2); \
- cmd = "$(CP) " "\047" tmpfile "\047" " $@.tmp"; \
- system(cmd); \
- }' -- @$@.tmp)
$(SED) -e '1s/^/[\$(NEWLINE)/' -e '$(DOLLAR)s/,\s\{0,\}$(DOLLAR)/\$(NEWLINE)]/' $@.tmp > $@
$(RM) $@.tmp
diff --git a/make/CompileInterimLangtools.gmk b/make/CompileInterimLangtools.gmk
index 7c67a5a6d09..e860169891f 100644
--- a/make/CompileInterimLangtools.gmk
+++ b/make/CompileInterimLangtools.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -49,8 +49,8 @@ TARGETS += $(patsubst %, $(BUILDTOOLS_OUTPUTDIR)/gensrc/%/module-info.java, \
$(INTERIM_LANGTOOLS_MODULES))
$(eval $(call SetupCopyFiles, COPY_PREVIEW_FEATURES, \
- FILES := $(TOPDIR)/src/java.base/share/classes/jdk/internal/PreviewFeature.java, \
- DEST := $(BUILDTOOLS_OUTPUTDIR)/gensrc/java.base.interim/jdk/internal/, \
+ FILES := $(TOPDIR)/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java, \
+ DEST := $(BUILDTOOLS_OUTPUTDIR)/gensrc/java.base.interim/jdk/internal/javac/, \
))
TARGETS += $(COPY_PREVIEW_FEATURES)
@@ -74,15 +74,15 @@ define SetupInterimModule
EXCLUDE_FILES := $(TOPDIR)/src/$1/share/classes/module-info.java \
Standard.java, \
EXTRA_FILES := $(BUILDTOOLS_OUTPUTDIR)/gensrc/$1.interim/module-info.java, \
- COPY := .gif .png .xml .css .js .txt javax.tools.JavaCompilerTool, \
+ COPY := .gif .png .xml .css .js .js.template .txt javax.tools.JavaCompilerTool, \
BIN := $(BUILDTOOLS_OUTPUTDIR)/interim_langtools_modules/$1.interim, \
DISABLED_WARNINGS := module options, \
JAVAC_FLAGS := \
--module-path $(BUILDTOOLS_OUTPUTDIR)/interim_langtools_modules \
$$(INTERIM_LANGTOOLS_ADD_EXPORTS) \
--patch-module java.base=$(BUILDTOOLS_OUTPUTDIR)/gensrc/java.base.interim \
- --add-exports java.base/jdk.internal=java.compiler.interim \
- --add-exports java.base/jdk.internal=jdk.compiler.interim, \
+ --add-exports java.base/jdk.internal.javac=java.compiler.interim \
+ --add-exports java.base/jdk.internal.javac=jdk.compiler.interim, \
))
$1_DEPS_INTERIM := $$(addsuffix .interim, $$(filter \
diff --git a/make/CompileJavaModules.gmk b/make/CompileJavaModules.gmk
index e8997e0da83..c039ad30b00 100644
--- a/make/CompileJavaModules.gmk
+++ b/make/CompileJavaModules.gmk
@@ -31,521 +31,6 @@ include MakeBase.gmk
include Modules.gmk
include JavaCompilation.gmk
-# Hook to include the corresponding custom file, if present.
-$(eval $(call IncludeCustomExtension, CompileJavaModules.gmk))
-
-################################################################################
-# Module specific build settings
-
-java.base_DOCLINT += -Xdoclint:all/protected,-reference,-accessibility \
- '-Xdoclint/package:java.*,javax.*'
-java.base_JAVAC_FLAGS += -XDstringConcat=inline
-java.base_COPY += .icu .dat .spp .nrm content-types.properties \
- hijrah-config-Hijrah-umalqura_islamic-umalqura.properties
-java.base_CLEAN += intrinsic.properties
-
-java.base_EXCLUDE_FILES += \
- $(TOPDIR)/src/java.base/share/classes/jdk/internal/module/ModuleLoaderMap.java
-
-java.base_EXCLUDES += java/lang/doc-files
-
-# Exclude BreakIterator classes that are just used in compile process to generate
-# data files and shouldn't go in the product
-java.base_EXCLUDE_FILES += sun/text/resources/BreakIteratorRules.java
-
-ifeq ($(call isTargetOs, macosx aix), false)
- java.base_EXCLUDE_FILES += sun/nio/fs/PollingWatchService.java
-endif
-
-ifeq ($(call isTargetOs, windows), true)
- java.base_EXCLUDE_FILES += \
- sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \
- #
-endif
-
-################################################################################
-
-java.compiler_DOCLINT += -Xdoclint:all/protected \
- '-Xdoclint/package:java.*,javax.*'
-
-################################################################################
-
-java.datatransfer_DOCLINT += -Xdoclint:all/protected,-reference \
- '-Xdoclint/package:java.*,javax.*'
-java.datatransfer_COPY += flavormap.properties
-
-################################################################################
-
-java.desktop_DISABLED_WARNINGS += missing-explicit-ctor
-java.desktop_DOCLINT += -Xdoclint:all/protected,-reference \
- '-Xdoclint/package:java.*,javax.*'
-java.desktop_COPY += .gif .png .wav .txt .xml .css .pf
-java.desktop_CLEAN += iio-plugin.properties cursors.properties
-
-java.desktop_EXCLUDES += \
- java/awt/doc-files \
- javax/swing/doc-files \
- javax/swing/text/doc-files \
- javax/swing/plaf/synth/doc-files \
- javax/swing/undo/doc-files \
- sun/awt/X11/doc-files \
- #
-
-java.desktop_EXCLUDE_FILES += \
- javax/swing/plaf/nimbus/InternalFrameTitlePanePainter.java \
- javax/swing/plaf/nimbus/OptionPaneMessageAreaPainter.java \
- javax/swing/plaf/nimbus/ScrollBarPainter.java \
- javax/swing/plaf/nimbus/SliderPainter.java \
- javax/swing/plaf/nimbus/SpinnerPainter.java \
- javax/swing/plaf/nimbus/SplitPanePainter.java \
- javax/swing/plaf/nimbus/TabbedPanePainter.java \
- sun/awt/resources/security-icon-bw16.png \
- sun/awt/resources/security-icon-bw24.png \
- sun/awt/resources/security-icon-bw32.png \
- sun/awt/resources/security-icon-bw48.png \
- sun/awt/resources/security-icon-interim16.png \
- sun/awt/resources/security-icon-interim24.png \
- sun/awt/resources/security-icon-interim32.png \
- sun/awt/resources/security-icon-interim48.png \
- sun/awt/resources/security-icon-yellow16.png \
- sun/awt/resources/security-icon-yellow24.png \
- sun/awt/resources/security-icon-yellow32.png \
- sun/awt/resources/security-icon-yellow48.png \
- sun/awt/X11/java-icon16.png \
- sun/awt/X11/java-icon24.png \
- sun/awt/X11/java-icon32.png \
- sun/awt/X11/java-icon48.png \
- .template \
- #
-
-ifeq ($(call isTargetOs, macosx), true)
- # exclude all X11 on Mac.
- java.desktop_EXCLUDES += \
- sun/awt/X11 \
- sun/java2d/x11 \
- sun/java2d/jules \
- sun/java2d/xr \
- com/sun/java/swing/plaf/gtk \
- #
- java.desktop_EXCLUDE_FILES += \
- $(wildcard $(TOPDIR)/src/java.desktop/unix/classes/sun/java2d/*.java) \
- $(wildcard $(TOPDIR)/src/java.desktop/unix/classes/sun/java2d/opengl/*.java) \
- $(wildcard $(TOPDIR)/src/java.desktop/unix/classes/sun/awt/*.java) \
- $(wildcard $(TOPDIR)/src/java.desktop/unix/classes/sun/font/*.java) \
- #
-else
- # TBD: figure out how to eliminate this long list
- java.desktop_EXCLUDE_FILES += \
- sun/awt/X11/ScreenFormat.java \
- sun/awt/X11/XArc.java \
- sun/awt/X11/XChar2b.java \
- sun/awt/X11/XCharStruct.java \
- sun/awt/X11/XClassHint.java \
- sun/awt/X11/XComposeStatus.java \
- sun/awt/X11/XExtCodes.java \
- sun/awt/X11/XFontProp.java \
- sun/awt/X11/XFontSetExtents.java \
- sun/awt/X11/XFontStruct.java \
- sun/awt/X11/XGCValues.java \
- sun/awt/X11/XHostAddress.java \
- sun/awt/X11/XIMCallback.java \
- sun/awt/X11/XIMHotKeyTrigger.java \
- sun/awt/X11/XIMHotKeyTriggers.java \
- sun/awt/X11/XIMPreeditCaretCallbackStruct.java \
- sun/awt/X11/XIMPreeditDrawCallbackStruct.java \
- sun/awt/X11/XIMPreeditStateNotifyCallbackStruct.java \
- sun/awt/X11/XIMStatusDrawCallbackStruct.java \
- sun/awt/X11/XIMStringConversionCallbackStruct.java \
- sun/awt/X11/XIMStringConversionText.java \
- sun/awt/X11/XIMStyles.java \
- sun/awt/X11/XIMText.java \
- sun/awt/X11/XIMValuesList.java \
- sun/awt/X11/XImage.java \
- sun/awt/X11/XKeyboardControl.java \
- sun/awt/X11/XKeyboardState.java \
- sun/awt/X11/XOMCharSetList.java \
- sun/awt/X11/XOMFontInfo.java \
- sun/awt/X11/XOMOrientation.java \
- sun/awt/X11/XPoint.java \
- sun/awt/X11/XRectangle.java \
- sun/awt/X11/XSegment.java \
- sun/awt/X11/XStandardColormap.java \
- sun/awt/X11/XTextItem.java \
- sun/awt/X11/XTextItem16.java \
- sun/awt/X11/XTextProperty.java \
- sun/awt/X11/XTimeCoord.java \
- sun/awt/X11/XWindowChanges.java \
- sun/awt/X11/XdbeSwapInfo.java \
- sun/awt/X11/XmbTextItem.java \
- sun/awt/X11/XwcTextItem.java
-endif
-
-ifeq ($(call isTargetOs, windows), true)
- java.desktop_EXCLUDES += com/sun/java/swing/plaf/gtk
-endif
-
-ifeq ($(call isTargetOs, windows macosx), false)
- java.desktop_EXCLUDE_FILES += sun/awt/AWTCharset.java
-endif
-
-# These files do not appear in the build result of the old build. This
-# is because they are generated sources, but the AUTO_JAVA_FILES won't
-# pick them up since they aren't generated when the source dirs are
-# searched and they aren't referenced by any other classes so they won't
-# be picked up by implicit compilation. On a rebuild, they are picked up
-# and compiled. Exclude them here to produce the same rt.jar as the old
-# build does when building just once.
-java.desktop_EXCLUDE_FILES += \
- javax/swing/plaf/nimbus/InternalFrameTitlePanePainter.java \
- javax/swing/plaf/nimbus/OptionPaneMessageAreaPainter.java \
- javax/swing/plaf/nimbus/ScrollBarPainter.java \
- javax/swing/plaf/nimbus/SliderPainter.java \
- javax/swing/plaf/nimbus/SpinnerPainter.java \
- javax/swing/plaf/nimbus/SplitPanePainter.java \
- javax/swing/plaf/nimbus/TabbedPanePainter.java \
- #
-
-################################################################################
-
-java.scripting_DOCLINT += -Xdoclint:all/protected \
- '-Xdoclint/package:java.*,javax.*'
-java.scripting_COPY += .js
-java.scripting_CLEAN += .properties
-
-################################################################################
-
-java.instrument_DOCLINT += -Xdoclint:all/protected,-accessibility \
- '-Xdoclint/package:java.*,javax.*'
-
-################################################################################
-
-java.logging_DOCLINT += -Xdoclint:all/protected,-reference,-accessibility \
- '-Xdoclint/package:java.*,javax.*'
-
-################################################################################
-
-java.management_DOCLINT += -Xdoclint:all/protected,-reference,-accessibility \
- '-Xdoclint/package:java.*,javax.*'
-
-################################################################################
-
-java.management.rmi_DOCLINT += -Xdoclint:all/protected \
- '-Xdoclint/package:javax.*'
-
-################################################################################
-
-java.prefs_DOCLINT += -Xdoclint:all/protected \
- '-Xdoclint/package:java.*,javax.*'
-
-################################################################################
-
-java.transaction.xa_DOCLINT += -Xdoclint:all/protected \
- '-Xdoclint/package:javax.*'
-
-################################################################################
-
-java.sql_DOCLINT += -Xdoclint:all/protected \
- '-Xdoclint/package:java.*,javax.*'
-
-################################################################################
-
-java.sql.rowset_DOCLINT += -Xdoclint:all/protected,-accessibility \
- '-Xdoclint/package:java.*,javax.*'
-java.sql.rowset_CLEAN_FILES += $(wildcard \
- $(TOPDIR)/src/java.sql.rowset/share/classes/com/sun/rowset/*.properties \
- $(TOPDIR)/src/java.sql.rowset/share/classes/javax/sql/rowset/*.properties)
-
-################################################################################
-
-java.rmi_DOCLINT += -Xdoclint:all/protected \
- '-Xdoclint/package:java.*,javax.*'
-java.rmi_CLEAN_FILES += $(wildcard \
- $(TOPDIR)/src/java.rmi/share/classes/sun/rmi/registry/resources/*.properties \
- $(TOPDIR)/src/java.rmi/share/classes/sun/rmi/server/resources/*.properties)
-
-################################################################################
-
-java.xml_DOCLINT += -Xdoclint:all/protected,-accessibility \
- '-Xdoclint/package:$(call CommaList, javax.xml.catalog javax.xml.datatype \
- javax.xml.transform javax.xml.validation javax.xml.xpath)'
-java.xml_CLEAN += .properties
-
-################################################################################
-
-java.naming_DOCLINT += -Xdoclint:all/protected,-accessibility \
- '-Xdoclint/package:java.*,javax.*'
-java.naming_CLEAN += jndiprovider.properties
-
-################################################################################
-
-java.security.jgss_DOCLINT += -Xdoclint:all/protected \
- '-Xdoclint/package:java.*,javax.*'
-
-################################################################################
-
-java.smartcardio_DOCLINT += -Xdoclint:all/protected,-accessibility \
- '-Xdoclint/package:java.*,javax.*'
-
-################################################################################
-
-java.xml.crypto_DOCLINT += -Xdoclint:all/protected \
- '-Xdoclint/package:java.*,javax.*'
-java.xml.crypto_COPY += .dtd .xml
-java.xml.crypto_CLEAN += .properties
-
-################################################################################
-
-jdk.accessibility_DISABLED_WARNINGS += missing-explicit-ctor
-
-################################################################################
-
-jdk.charsets_COPY += .dat
-
-################################################################################
-
-################################################################################
-
-jdk.compiler_DOCLINT += -Xdoclint:all/protected \
- '-Xdoclint/package:-com.sun.tools.*,-jdk.internal.*,sun.tools.serialver.resources.*'
-jdk.compiler_JAVAC_FLAGS += -XDstringConcat=inline
-jdk.compiler_CLEAN_FILES += $(wildcard \
- $(patsubst %, $(TOPDIR)/src/jdk.compiler/share/classes/%/*.properties, \
- sun/tools/serialver/resources))
-
-################################################################################
-
-jdk.hotspot.agent_DISABLED_WARNINGS += rawtypes serial cast static overrides \
- fallthrough
-jdk.hotspot.agent_COPY += .gif .png .properties
-
-################################################################################
-
-jdk.editpad_COPY += .properties
-
-################################################################################
-
-jdk.jshell_COPY += .jsh .properties
-
-################################################################################
-
-jdk.internal.le_COPY += .properties .caps .txt
-
-################################################################################
-
-jdk.internal.opt_COPY += .properties
-
-################################################################################
-
-jdk.jcmd_COPY += _options
-
-################################################################################
-
-jdk.dynalink_CLEAN += .properties
-
-################################################################################
-
-jdk.javadoc_COPY += .xml .css .js .png .txt
-
-################################################################################
-
-jdk.jartool_DISABLED_WARNINGS += missing-explicit-ctor
-jdk.jartool_JAVAC_FLAGS += -XDstringConcat=inline
-
-################################################################################
-
-jdk.httpserver_DISABLED_WARNINGS += missing-explicit-ctor
-
-################################################################################
-
-jdk.unsupported.desktop_DISABLED_WARNINGS += missing-explicit-ctor
-
-################################################################################
-
-# No SCTP implementation on Mac OS X or AIX. These classes should be excluded.
-SCTP_IMPL_CLASSES = \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/AssociationChange.java \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/AssociationImpl.java \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/PeerAddrChange.java \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/ResultContainer.java \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpChannelImpl.java \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpMultiChannelImpl.java \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpNet.java \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpNotification.java \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SctpServerChannelImpl.java \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/SendFailed.java \
- $(TOPDIR)/src/jdk.sctp/unix/classes/sun/nio/ch/sctp/Shutdown.java
-
-ifeq ($(call isTargetOs, macosx), true)
- jdk.sctp_EXCLUDE_FILES += $(SCTP_IMPL_CLASSES)
-endif
-
-ifeq ($(call isTargetOs, aix), true)
- jdk.sctp_EXCLUDE_FILES += $(SCTP_IMPL_CLASSES)
-endif
-
-################################################################################
-
-jdk.jpackage_COPY += .gif .png .txt .spec .script .prerm .preinst \
- .postrm .postinst .list .sh .desktop .copyright .control .plist .template \
- .icns .scpt .wxs .wxl .wxi .ico .bmp .tiff
-
-jdk.jpackage_CLEAN += .properties
-
-################################################################################
-
-jdk.jconsole_COPY += .gif .png
-
-jdk.jconsole_CLEAN_FILES += $(wildcard \
- $(TOPDIR)/src/jdk.jconsole/share/classes/sun/tools/jconsole/resources/*.properties)
-
-################################################################################
-
-jdk.jdeps_COPY += .txt
-
-jdk.jdeps_CLEAN_FILES += $(wildcard \
- $(TOPDIR)/src/jdk.jdeps/share/classes/com/sun/tools/jdeps/resources/*.properties \
- $(TOPDIR)/src/jdk.jdeps/share/classes/com/sun/tools/javap/resources/*.properties)
-
-################################################################################
-
-jdk.jdi_EXCLUDES += \
- com/sun/tools/example/debug/bdi \
- com/sun/tools/example/debug/event \
- com/sun/tools/example/debug/gui \
- com/sun/jdi/doc-files \
- #
-
-jdk.jdi_EXCLUDE_FILES += jdi-overview.html
-
-################################################################################
-
-jdk.dev_CLEAN_FILES += $(wildcard \
- $(patsubst %, $(TOPDIR)/src/jdk.dev/share/classes/%/*.properties, \
- com/sun/tools/script/shell))
-
-jdk.dev_COPY += .js oqlhelp.html .txt
-
-################################################################################
-
-jdk.internal.jvmstat_COPY += aliasmap
-
-################################################################################
-
-# -parameters provides method's parameters information in class file,
-# JVMCI compilers make use of that information for various sanity checks.
-# Don't use Indy strings concatenation to have good JVMCI startup performance.
-# The exports are needed since JVMCI is dynamically exported (see
-# jdk.vm.ci.services.internal.ReflectionAccessJDK::openJVMCITo).
-
-jdk.internal.vm.ci_JAVAC_FLAGS += -parameters -XDstringConcat=inline
-
-################################################################################
-
-jdk.internal.vm.compiler_JAVAC_FLAGS += -parameters -XDstringConcat=inline \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.aarch64=jdk.internal.vm.compiler \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.amd64=jdk.internal.vm.compiler \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.code=jdk.internal.vm.compiler \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.code.site=jdk.internal.vm.compiler \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.code.stack=jdk.internal.vm.compiler \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.common=jdk.internal.vm.compiler \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot=jdk.internal.vm.compiler \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=jdk.internal.vm.compiler \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=jdk.internal.vm.compiler \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.meta=jdk.internal.vm.compiler \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.runtime=jdk.internal.vm.compiler \
- #
-
-jdk.internal.vm.compiler_EXCLUDES += \
- jdk.internal.vm.compiler.collections.test \
- jdk.tools.jaotc.test \
- org.graalvm.compiler.api.directives.test \
- org.graalvm.compiler.api.test \
- org.graalvm.compiler.asm.aarch64.test \
- org.graalvm.compiler.asm.amd64.test \
- org.graalvm.compiler.asm.test \
- org.graalvm.compiler.core.aarch64.test \
- org.graalvm.compiler.core.amd64.test \
- org.graalvm.compiler.core.jdk9.test \
- org.graalvm.compiler.core.match.processor \
- org.graalvm.compiler.core.test \
- org.graalvm.compiler.debug.test \
- org.graalvm.compiler.graph.test \
- org.graalvm.compiler.hotspot.aarch64.test \
- org.graalvm.compiler.hotspot.amd64.test \
- org.graalvm.compiler.hotspot.jdk15.test \
- org.graalvm.compiler.hotspot.jdk9.test \
- org.graalvm.compiler.hotspot.lir.test \
- org.graalvm.compiler.hotspot.test \
- org.graalvm.compiler.jtt \
- org.graalvm.compiler.lir.jtt \
- org.graalvm.compiler.lir.test \
- org.graalvm.compiler.loop.test \
- org.graalvm.compiler.microbenchmarks \
- org.graalvm.compiler.nodeinfo.processor \
- org.graalvm.compiler.nodes.test \
- org.graalvm.compiler.options.processor \
- org.graalvm.compiler.options.test \
- org.graalvm.compiler.phases.common.test \
- org.graalvm.compiler.processor \
- org.graalvm.compiler.replacements.jdk10.test \
- org.graalvm.compiler.replacements.jdk12.test \
- org.graalvm.compiler.replacements.jdk9.test \
- org.graalvm.compiler.replacements.processor \
- org.graalvm.compiler.replacements.test \
- org.graalvm.compiler.serviceprovider.processor \
- org.graalvm.compiler.test \
- org.graalvm.compiler.virtual.bench \
- org.graalvm.micro.benchmarks \
- org.graalvm.util.test \
- #
-
-################################################################################
-
-# -parameters provides method's parameters information in class file,
-# JVMCI compilers make use of that information for various sanity checks.
-# Don't use Indy strings concatenation to have good JAOTC startup performance.
-# The exports are needed since JVMCI is dynamically exported (see
-# jdk.vm.ci.services.internal.ReflectionAccessJDK::openJVMCITo).
-
-jdk.aot_JAVAC_FLAGS += -parameters -XDstringConcat=inline \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.aarch64=jdk.internal.vm.compiler,jdk.aot \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.amd64=jdk.internal.vm.compiler,jdk.aot \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.code=jdk.internal.vm.compiler,jdk.aot \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.code.site=jdk.internal.vm.compiler,jdk.aot \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.code.stack=jdk.internal.vm.compiler,jdk.aot \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.common=jdk.internal.vm.compiler,jdk.aot \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot=jdk.internal.vm.compiler,jdk.aot \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.aarch64=jdk.internal.vm.compiler,jdk.aot \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.hotspot.amd64=jdk.internal.vm.compiler,jdk.aot \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.meta=jdk.internal.vm.compiler,jdk.aot \
- --add-exports jdk.internal.vm.ci/jdk.vm.ci.runtime=jdk.internal.vm.compiler,jdk.aot \
- #
-
-jdk.aot_EXCLUDES += \
- jdk.tools.jaotc.test
- #
-
-################################################################################
-
-sun.charsets_COPY += .dat
-
-################################################################################
-
-jdk.localedata_COPY += _dict _th
-# Exclude BreakIterator classes that are just used in compile process to generate
-# data files and shouldn't go in the product
-jdk.localedata_EXCLUDE_FILES += sun/text/resources/ext/BreakIteratorRules_th.java
-jdk.localedata_KEEP_ALL_TRANSLATIONS := true
-################################################################################
-
-jdk.jfr_DISABLED_WARNINGS += exports
-jdk.jfr_COPY := .xsd .xml .dtd
-jdk.jfr_JAVAC_FLAGS := -XDstringConcat=inline
-
-################################################################################
-
-jdk.incubator.vector_DOCLINT += -Xdoclint:all/protected
-
################################################################################
# If this is an imported module that has prebuilt classes, only compile
# module-info.java.
@@ -582,29 +67,29 @@ MODULESOURCEPATH := $(call GetModuleSrcPath)
# Add imported modules to the modulepath
MODULEPATH := $(call PathList, $(IMPORT_MODULES_CLASSES))
-ifeq ($(MODULE), jdk.internal.vm.ci)
- ## WORKAROUND jdk.internal.vm.ci source structure issue
- JVMCI_MODULESOURCEPATH := $(MODULESOURCEPATH) \
- $(subst /$(MODULE)/,/*/, $(filter-out %processor/src, \
- $(wildcard $(TOPDIR)/src/$(MODULE)/share/classes/*/src)))
- MODULESOURCEPATH := $(call PathList, $(JVMCI_MODULESOURCEPATH))
-endif
+################################################################################
+# Copy zh_HK properties files from zh_TW (needed by some modules)
-ifeq ($(MODULE), jdk.internal.vm.compiler)
- ## WORKAROUND jdk.internal.vm.compiler source structure issue
- VM_COMPILER_MODULESOURCEPATH := $(MODULESOURCEPATH) \
- $(subst /$(MODULE)/,/*/, $(filter-out %processor/src %test/src %jtt/src %bench/src %microbenchmarks/src, \
- $(wildcard $(TOPDIR)/src/$(MODULE)/share/classes/*/src)))
- MODULESOURCEPATH := $(call PathList, $(VM_COMPILER_MODULESOURCEPATH))
-endif
+$(JDK_OUTPUTDIR)/modules/%_zh_HK.properties: $(JDK_OUTPUTDIR)/modules/%_zh_TW.properties
+ $(install-file)
-ifeq ($(MODULE), jdk.aot)
- ## WORKAROUND jdk.aot source structure issue
- AOT_MODULESOURCEPATH := $(MODULESOURCEPATH) \
- $(subst /$(MODULE)/,/*/, $(filter-out %processor/src, \
- $(wildcard $(TOPDIR)/src/$(MODULE)/share/classes/*/src)))
- MODULESOURCEPATH := $(call PathList, $(AOT_MODULESOURCEPATH))
-endif
+CreateHkTargets = \
+ $(call FilterExcludedTranslations, \
+ $(patsubst $(TOPDIR)/src/%, $(JDK_OUTPUTDIR)/modules/%, \
+ $(subst /share/classes,, \
+ $(subst _zh_TW,_zh_HK, $(filter %_zh_TW.properties, $1)) \
+ ) \
+ ), \
+ .properties \
+ )
+
+################################################################################
+# Include module specific build settings
+
+-include $(TOPDIR)/make/modules/$(MODULE)/Java.gmk
+
+################################################################################
+# Setup the main compilation
$(eval $(call SetupJavaCompilation, $(MODULE), \
SMALL_JAVA := false, \
@@ -615,15 +100,22 @@ $(eval $(call SetupJavaCompilation, $(MODULE), \
BIN := $(if $($(MODULE)_BIN), $($(MODULE)_BIN), $(JDK_OUTPUTDIR)/modules), \
HEADERS := $(SUPPORT_OUTPUTDIR)/headers, \
CREATE_API_DIGEST := true, \
+ CLEAN := $(CLEAN), \
+ CLEAN_FILES := $(CLEAN_FILES), \
+ COPY := $(COPY), \
+ DISABLED_WARNINGS := $(DISABLED_WARNINGS_java), \
+ EXCLUDES := $(EXCLUDES), \
+ EXCLUDE_FILES := $(EXCLUDE_FILES), \
+ KEEP_ALL_TRANSLATIONS := $(KEEP_ALL_TRANSLATIONS), \
JAVAC_FLAGS := \
- $($(MODULE)_DOCLINT) \
- $($(MODULE)_JAVAC_FLAGS) \
+ $(DOCLINT) \
+ $(JAVAC_FLAGS) \
--module-source-path $(MODULESOURCEPATH) \
--module-path $(MODULEPATH) \
--system none, \
))
-TARGETS += $($(MODULE)) $($(MODULE)_COPY_EXTRA)
+TARGETS += $($(MODULE))
# Declare dependencies between java compilations of different modules.
# Since the other modules are declared in different invocations of this file,
@@ -634,30 +126,6 @@ $($(MODULE)_COMPILE_TARGET): $(foreach d, $(call FindDepsForModule, $(MODULE)),
$(call SetupJavaCompilationApiTarget, $d, \
$(if $($d_BIN), $($d_BIN), $(JDK_OUTPUTDIR)/modules/$d)))
-################################################################################
-# Copy zh_HK properties files from zh_TW
-
-$(JDK_OUTPUTDIR)/modules/%_zh_HK.properties: $(JDK_OUTPUTDIR)/modules/%_zh_TW.properties
- $(install-file)
-
-CreateHkTargets = \
- $(call FilterExcludedTranslations, \
- $(patsubst $(TOPDIR)/src/%, $(JDK_OUTPUTDIR)/modules/%, \
- $(subst /share/classes,, \
- $(subst _zh_TW,_zh_HK, $(filter %_zh_TW.properties, $1)) \
- ) \
- ), \
- .properties \
- )
-
-ifeq ($(MODULE), java.sql.rowset)
- TARGETS += $(call CreateHkTargets, $(java.sql.rowset_CLEAN_FILES))
-endif
-
-ifeq ($(MODULE), java.rmi)
- TARGETS += $(call CreateHkTargets, $(java.rmi_CLEAN_FILES))
-endif
-
################################################################################
# If this is an imported module, copy the pre built classes and resources into
# the modules output dir
@@ -680,10 +148,6 @@ endif
################################################################################
-$(eval $(call IncludeCustomExtension, CompileJavaModules-post.gmk))
-
-################################################################################
-
all: $(TARGETS)
.PHONY: all
diff --git a/make/Docs.gmk b/make/Docs.gmk
index ae3416dc712..c9456d0f383 100644
--- a/make/Docs.gmk
+++ b/make/Docs.gmk
@@ -1,4 +1,4 @@
-# Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -57,14 +57,11 @@ $(eval $(call IncludeCustomExtension, Docs.gmk))
################################################################################
# Javadoc settings
+# Include configuration for URLs in generated javadoc
+include $(TOPDIR)/make/conf/javadoc.conf
+
MODULES_SOURCE_PATH := $(call PathList, $(call GetModuleSrcPath) )
-# URLs
-JAVADOC_BASE_URL := https://docs.oracle.com/pls/topic/lookup?ctx=javase$(VERSION_NUMBER)&id=homepage
-BUG_SUBMIT_URL := https://bugreport.java.com/bugreport/
-COPYRIGHT_URL := legal/copyright.html
-LICENSE_URL := https://www.oracle.com/java/javase/terms/license/java$(VERSION_NUMBER)speclicense.html
-REDISTRIBUTION_URL := https://www.oracle.com/technetwork/java/redist-137594.html
# In order to get a specific ordering it's necessary to specify the total
# ordering of tags as the tags are otherwise ordered in order of definition.
@@ -92,7 +89,6 @@ JAVADOC_TAGS := \
-tag see \
-taglet build.tools.taglet.ExtLink \
-taglet build.tools.taglet.Incubating \
- -taglet build.tools.taglet.Preview \
-tagletpath $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
$(CUSTOM_JAVADOC_TAGS) \
#
@@ -478,7 +474,7 @@ $(eval $(call SetupApiDocsGeneration, REFERENCE_API, \
SHORT_NAME := $(JAVASE_SHORT_NAME), \
LONG_NAME := $(JAVASE_LONG_NAME), \
TARGET_DIR := $(DOCS_REFERENCE_IMAGE_DIR)/api, \
- JAVADOC_CMD := $(JAVADOC), \
+ JAVADOC_CMD := $(DOCS_REFERENCE_JAVADOC), \
OPTIONS := $(REFERENCE_OPTIONS), \
TAGS := $(REFERENCE_TAGS), \
))
diff --git a/make/GenerateLinkOptData.gmk b/make/GenerateLinkOptData.gmk
index dd92bddc560..0de28d643fc 100644
--- a/make/GenerateLinkOptData.gmk
+++ b/make/GenerateLinkOptData.gmk
@@ -61,7 +61,7 @@ endif
# Save the stderr output of the command and print it along with stdout in case
# something goes wrong.
-$(CLASSLIST_FILE): $(INTERIM_IMAGE_DIR)/bin/java$(EXE_SUFFIX) $(CLASSLIST_JAR)
+$(CLASSLIST_FILE): $(INTERIM_IMAGE_DIR)/bin/java$(EXECUTABLE_SUFFIX) $(CLASSLIST_JAR)
$(call MakeDir, $(LINK_OPT_DIR))
$(call LogInfo, Generating $(patsubst $(OUTPUTDIR)/%, %, $@))
$(call LogInfo, Generating $(patsubst $(OUTPUTDIR)/%, %, $(JLI_TRACE_FILE)))
@@ -94,7 +94,7 @@ $(CLASSLIST_FILE): $(INTERIM_IMAGE_DIR)/bin/java$(EXE_SUFFIX) $(CLASSLIST_JAR)
# dependencies, make will correctly rebuild both jli trace and classlist
# incrementally using the single recipe above.
$(CLASSLIST_FILE): $(JLI_TRACE_FILE)
-$(JLI_TRACE_FILE): $(INTERIM_IMAGE_DIR)/bin/java$(EXE_SUFFIX) $(CLASSLIST_JAR)
+$(JLI_TRACE_FILE): $(INTERIM_IMAGE_DIR)/bin/java$(EXECUTABLE_SUFFIX) $(CLASSLIST_JAR)
TARGETS += $(CLASSLIST_FILE) $(JLI_TRACE_FILE)
diff --git a/make/Images.gmk b/make/Images.gmk
index d5a10423065..d135a281069 100644
--- a/make/Images.gmk
+++ b/make/Images.gmk
@@ -44,7 +44,7 @@ ALL_MODULES := $(call FindAllModules)
$(eval $(call ReadImportMetaData))
JRE_MODULES += $(filter $(ALL_MODULES), $(BOOT_MODULES) \
- $(PLATFORM_MODULES) $(JRE_TOOL_MODULES))
+ $(PLATFORM_MODULES) jdk.jdwp.agent)
JDK_MODULES += $(ALL_MODULES)
JRE_MODULES_LIST := $(call CommaList, $(JRE_MODULES))
diff --git a/make/Init.gmk b/make/Init.gmk
index 1df133eeef0..4d297ee85e9 100644
--- a/make/Init.gmk
+++ b/make/Init.gmk
@@ -200,7 +200,7 @@ ifeq ($(HAS_SPEC),)
COMPARE_BUILD="$(COMPARE_BUILD):NODRYRUN=true" main && \
$(MAKE) $(MFLAGS) $(MAKE_LOG_FLAGS) -r -R -f $(topdir)/make/Init.gmk \
SPEC=$(spec) HAS_SPEC=true ACTUAL_TOPDIR=$(topdir) \
- COMPARE_BUILD="$(COMPARE_BUILD)" post-compare-build && \
+ COMPARE_BUILD="$(COMPARE_BUILD):NODRYRUN=true" post-compare-build && \
) \
) true ) \
$(eval TARGET_DONE=true) \
diff --git a/make/InterimImage.gmk b/make/InterimImage.gmk
index 22d3db365aa..bb4b1fc6fd3 100644
--- a/make/InterimImage.gmk
+++ b/make/InterimImage.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -32,7 +32,7 @@ include Modules.gmk
################################################################################
# Use this file inside the image as target for make rule
-JIMAGE_TARGET_FILE := bin/java$(EXE_SUFFIX)
+JIMAGE_TARGET_FILE := bin/java$(EXECUTABLE_SUFFIX)
INTERIM_MODULES_LIST := $(call CommaList, $(INTERIM_IMAGE_MODULES))
diff --git a/make/RunTests.gmk b/make/RunTests.gmk
index 97fd016b361..4eeef218b08 100644
--- a/make/RunTests.gmk
+++ b/make/RunTests.gmk
@@ -60,19 +60,14 @@ define SetTestOpt
endif
endef
-# Setup _NT_SYMBOL_PATH on Windows
+# Setup _NT_SYMBOL_PATH on Windows, which points to our pdb files.
ifeq ($(call isTargetOs, windows), true)
ifndef _NT_SYMBOL_PATH
- # Can't use PathList here as it adds quotes around the value.
- _NT_SYMBOL_PATH := \
- $(subst $(SPACE),;,$(strip \
- $(foreach p, $(sort $(dir $(wildcard \
- $(addprefix $(SYMBOLS_IMAGE_DIR)/bin/, *.pdb */*.pdb)))), \
- $(call FixPath, $p) \
- ) \
- ))
- export _NT_SYMBOL_PATH
- $(call LogDebug, Rewriting _NT_SYMBOL_PATH to $(_NT_SYMBOL_PATH))
+ SYMBOL_PATH := $(call PathList, $(sort $(patsubst %/, %, $(dir $(wildcard \
+ $(addprefix $(SYMBOLS_IMAGE_DIR)/bin/, *.pdb */*.pdb))))))
+ export _NT_SYMBOL_PATH := $(subst \\,\, $(call FixPath, \
+ $(subst $(DQUOTE),, $(SYMBOL_PATH))))
+ $(call LogDebug, Setting _NT_SYMBOL_PATH to $(_NT_SYMBOL_PATH))
endif
endif
@@ -613,6 +608,7 @@ define SetupRunGtestTestBody
$$(FIXPATH) $$(TEST_IMAGE_DIR)/hotspot/gtest/$$($1_VARIANT)/gtestLauncher \
-jdk $(JDK_UNDER_TEST) $$($1_GTEST_FILTER) \
--gtest_output=xml:$$($1_TEST_RESULTS_DIR)/gtest.xml \
+ --gtest_catch_exceptions=0 \
$$($1_GTEST_REPEAT) $$(GTEST_OPTIONS) $$(GTEST_VM_OPTIONS) \
$$(GTEST_JAVA_OPTIONS) $$($1_AOT_OPTIONS) \
> >($(TEE) $$($1_TEST_RESULTS_DIR)/gtest.txt) \
diff --git a/make/RunTestsPrebuilt.gmk b/make/RunTestsPrebuilt.gmk
index 3468ca4daf1..1cbd8f2273a 100644
--- a/make/RunTestsPrebuilt.gmk
+++ b/make/RunTestsPrebuilt.gmk
@@ -189,15 +189,9 @@ ifeq ($(OPENJDK_TARGET_CPU), x86_64)
endif
ifeq ($(OPENJDK_TARGET_OS), windows)
- ifeq ($(wildcard $(TEST_IMAGE_DIR)/bin/fixpath.exe), )
- $(info Error: fixpath is missing from test image '$(TEST_IMAGE_DIR)')
- $(error Cannot continue.)
- endif
- FIXPATH := $(TEST_IMAGE_DIR)/bin/fixpath.exe -c
- PATH_SEP:=;
+ FIXPATH := $(BASH) $(TOPDIR)/make/scripts/fixpath.sh exec
else
FIXPATH :=
- PATH_SEP:=:
endif
# Check number of cores and memory in MB
@@ -280,7 +274,6 @@ $(call CreateNewSpec, $(NEW_SPEC), \
BASH := $(BASH), \
JIB_JAR := $(JIB_JAR), \
FIXPATH := $(FIXPATH), \
- PATH_SEP := $(PATH_SEP), \
OPENJDK_TARGET_OS := $(OPENJDK_TARGET_OS), \
OPENJDK_TARGET_OS_TYPE := $(OPENJDK_TARGET_OS_TYPE), \
OPENJDK_TARGET_OS_ENV := $(OPENJDK_TARGET_OS_ENV), \
diff --git a/make/RunTestsPrebuiltSpec.gmk b/make/RunTestsPrebuiltSpec.gmk
index 30cb6d85946..f423fea7198 100644
--- a/make/RunTestsPrebuiltSpec.gmk
+++ b/make/RunTestsPrebuiltSpec.gmk
@@ -116,16 +116,13 @@ JAVAC_CMD := $(BOOT_JDK)/bin/javac
JAR_CMD := $(BOOT_JDK)/bin/jar
JLINK_CMD := $(JDK_OUTPUTDIR)/bin/jlink
JMOD_CMD := $(JDK_OUTPUTDIR)/bin/jmod
-JARSIGNER_CMD := $(BOOT_JDK)/bin/jarsigner
JAVA := $(FIXPATH) $(JAVA_CMD) $(JAVA_FLAGS_BIG) $(JAVA_FLAGS)
JAVA_SMALL := $(FIXPATH) $(JAVA_CMD) $(JAVA_FLAGS_SMALL) $(JAVA_FLAGS)
-JAVA_DETACH := $(FIXPATH) $(FIXPATH_DETACH_FLAG) $(JAVA_CMD) $(JAVA_FLAGS_BIG) $(JAVA_FLAGS)
JAVAC := $(FIXPATH) $(JAVAC_CMD)
JAR := $(FIXPATH) $(JAR_CMD)
JLINK := $(FIXPATH) $(JLINK_CMD)
JMOD := $(FIXPATH) $(JMOD_CMD)
-JARSIGNER := $(FIXPATH) $(JARSIGNER_CMD)
BUILD_JAVA := $(JDK_IMAGE_DIR)/bin/JAVA
################################################################################
@@ -153,7 +150,6 @@ LN := ln
MIG := mig
MKDIR := mkdir
MV := mv
-NAWK := nawk
NICE := nice
PATCH := patch
PRINTF := printf
@@ -167,7 +163,6 @@ TAIL := tail
TEE := tee
TR := tr
TOUCH := touch
-UNIQ := uniq
WC := wc
XARGS := xargs
ZIPEXE := zip
@@ -178,7 +173,7 @@ HG := hg
ULIMIT := ulimit
ifeq ($(OPENJDK_BUILD_OS), windows)
- CYGPATH := cygpath
+ PATHTOOL := cygpath
endif
################################################################################
diff --git a/make/TestImage.gmk b/make/TestImage.gmk
index 8511c5dc87f..26d10f95d3b 100644
--- a/make/TestImage.gmk
+++ b/make/TestImage.gmk
@@ -30,34 +30,25 @@ include MakeBase.gmk
############################################################################
-ifeq ($(call isTargetOs, windows), true)
- FIXPATH_COPY := $(TEST_IMAGE_DIR)/bin/fixpath.exe
-
- $(FIXPATH_COPY): $(firstword $(FIXPATH))
- $(call install-file)
-
- FIXPATH_WORKSPACE_ROOT := $(call FixPath, $(WORKSPACE_ROOT))
- FIXPATH_OUTPUTDIR := $(call FixPath, $(OUTPUTDIR))
-else
- FIXPATH_WORKSPACE_ROOT := $(WORKSPACE_ROOT)
- FIXPATH_OUTPUTDIR := $(OUTPUTDIR)
-endif
-
-
BUILD_INFO_PROPERTIES := $(TEST_IMAGE_DIR)/build-info.properties
$(BUILD_INFO_PROPERTIES):
$(call MakeTargetDir)
$(ECHO) "# Build info properties for JDK tests" > $@
- $(ECHO) "build.workspace.root=$(FIXPATH_WORKSPACE_ROOT)" >> $@
- $(ECHO) "build.output.root=$(FIXPATH_OUTPUTDIR)" >> $@
+ $(ECHO) "build.workspace.root=$(call FixPath, $(WORKSPACE_ROOT))" >> $@
+ $(ECHO) "build.output.root=$(call FixPath, $(OUTPUTDIR))" >> $@
+
+README := $(TEST_IMAGE_DIR)/Readme.txt
+
+$(README):
+ $(call MakeTargetDir)
+ $(ECHO) > $@ 'JDK test image'
-prepare-test-image: $(FIXPATH_COPY) $(BUILD_INFO_PROPERTIES)
- $(call MakeDir, $(TEST_IMAGE_DIR))
- $(ECHO) > $(TEST_IMAGE_DIR)/Readme.txt 'JDK test image'
+TARGETS += $(BUILD_INFO_PROPERTIES) $(README)
################################################################################
+prepare-test-image: $(TARGETS)
all: prepare-test-image
.PHONY: default all prepare-test-image
diff --git a/make/ToolsJdk.gmk b/make/ToolsJdk.gmk
index 45a0cc8c64e..99e8bd9727c 100644
--- a/make/ToolsJdk.gmk
+++ b/make/ToolsJdk.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -67,9 +67,9 @@ TOOL_GENERATECURRENCYDATA = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_
TOOL_TZDB = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
build.tools.tzdb.TzdbZoneRulesCompiler
-TOOL_BLACKLISTED_CERTS = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
+TOOL_BLOCKED_CERTS = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
--add-exports java.base/sun.security.util=ALL-UNNAMED \
- build.tools.blacklistedcertsconverter.BlacklistedCertsConverter
+ build.tools.blockedcertsconverter.BlockedCertsConverter
TOOL_MAKEJAVASECURITY = $(JAVA_SMALL) -cp $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes \
build.tools.makejavasecurity.MakeJavaSecurity
diff --git a/make/autoconf/basic.m4 b/make/autoconf/basic.m4
index fb06fa5426a..60b4097cba9 100644
--- a/make/autoconf/basic.m4
+++ b/make/autoconf/basic.m4
@@ -70,27 +70,18 @@ AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
fi
if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
- PATH_SEP=";"
- EXE_SUFFIX=".exe"
- BASIC_CHECK_PATHS_WINDOWS
- else
- PATH_SEP=":"
- EXE_SUFFIX=""
+ BASIC_SETUP_PATHS_WINDOWS
fi
- AC_SUBST(PATH_SEP)
- AC_SUBST(EXE_SUFFIX)
# We get the top-level directory from the supporting wrappers.
+ BASIC_WINDOWS_VERIFY_DIR($TOPDIR, source)
+ UTIL_FIXUP_PATH(TOPDIR)
AC_MSG_CHECKING([for top-level directory])
AC_MSG_RESULT([$TOPDIR])
AC_SUBST(TOPDIR)
- AC_SUBST(CONFIGURE_START_DIR)
-
- # We can only call UTIL_FIXUP_PATH after BASIC_CHECK_PATHS_WINDOWS.
- UTIL_FIXUP_PATH(TOPDIR)
- UTIL_FIXUP_PATH(CONFIGURE_START_DIR)
if test "x$CUSTOM_ROOT" != x; then
+ BASIC_WINDOWS_VERIFY_DIR($CUSTOM_ROOT, custom root)
UTIL_FIXUP_PATH(CUSTOM_ROOT)
WORKSPACE_ROOT="${CUSTOM_ROOT}"
else
@@ -98,6 +89,9 @@ AC_DEFUN_ONCE([BASIC_SETUP_PATHS],
fi
AC_SUBST(WORKSPACE_ROOT)
+ UTIL_FIXUP_PATH(CONFIGURE_START_DIR)
+ AC_SUBST(CONFIGURE_START_DIR)
+
# Locate the directory of this script.
AUTOCONF_DIR=$TOPDIR/make/autoconf
@@ -234,9 +228,12 @@ AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
# if no Xcode installed, xcodebuild exits with 1
# if Xcode is installed, even if xcode-select is misconfigured, then it exits with 0
if test "x$DEVKIT_ROOT" != x || /usr/bin/xcodebuild -version >/dev/null 2>&1; then
- # We need to use xcodebuild in the toolchain dir provided by the user, this will
- # fall back on the stub binary in /usr/bin/xcodebuild
- AC_PATH_PROG([XCODEBUILD], [xcodebuild], [/usr/bin/xcodebuild], [$TOOLCHAIN_PATH])
+ # We need to use xcodebuild in the toolchain dir provided by the user
+ UTIL_LOOKUP_PROGS(XCODEBUILD, xcodebuild, $TOOLCHAIN_PATH)
+ if test x$XCODEBUILD = x; then
+ # fall back on the stub binary in /usr/bin/xcodebuild
+ XCODEBUILD=/usr/bin/xcodebuild
+ fi
else
# this should result in SYSROOT being empty, unless --with-sysroot is provided
# when only the command line tools are installed there are no SDKs, so headers
@@ -306,6 +303,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT],
AC_MSG_RESULT([$SYSROOT])
AC_MSG_CHECKING([for toolchain path])
AC_MSG_RESULT([$TOOLCHAIN_PATH])
+ AC_SUBST(TOOLCHAIN_PATH)
AC_MSG_CHECKING([for extra path])
AC_MSG_RESULT([$EXTRA_PATH])
])
@@ -380,6 +378,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_OUTPUT_DIR],
AC_MSG_CHECKING([what configuration name to use])
AC_MSG_RESULT([$CONF_NAME])
+ BASIC_WINDOWS_VERIFY_DIR($OUTPUTDIR, output)
UTIL_FIXUP_PATH(OUTPUTDIR)
CONFIGURESUPPORT_OUTPUTDIR="$OUTPUTDIR/configure-support"
@@ -416,26 +415,16 @@ AC_DEFUN([BASIC_CHECK_DIR_ON_LOCAL_DISK],
# df -l lists only local disks; if the given directory is not found then
# a non-zero exit code is given
if test "x$DF" = x; then
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- # msys does not have df; use Windows "net use" instead.
- IS_NETWORK_DISK=`net use | grep \`pwd -W | cut -d ":" -f 1 | tr a-z A-Z\`:`
- if test "x$IS_NETWORK_DISK" = x; then
- $2
- else
- $3
- fi
- else
- # No df here, say it's local
- $2
- fi
+ # No df here, say it's local
+ $2
else
# JDK-8189619
# df on AIX does not understand -l. On modern AIXes it understands "-T local" which
# is the same. On older AIXes we just continue to live with a "not local build" warning.
if test "x$OPENJDK_TARGET_OS" = xaix; then
DF_LOCAL_ONLY_OPTION='-T local'
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- # In WSL, we can only build on a drvfs file system (that is, a mounted real Windows drive)
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl1"; then
+ # In WSL1, we can only build on a drvfs file system (that is, a mounted real Windows drive)
DF_LOCAL_ONLY_OPTION='-t drvfs'
else
DF_LOCAL_ONLY_OPTION='-l'
diff --git a/make/autoconf/basic_tools.m4 b/make/autoconf/basic_tools.m4
index 9f0eea42d84..820d2f4924d 100644
--- a/make/autoconf/basic_tools.m4
+++ b/make/autoconf/basic_tools.m4
@@ -28,38 +28,37 @@
# but is used by much of the early bootstrap code.
AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
[
- # Start with tools that do not need have cross compilation support
- # and can be expected to be found in the default PATH. These tools are
- # used by configure.
-
- # First are all the simple required tools.
- UTIL_REQUIRE_PROGS(BASENAME, basename)
+ # Bootstrapping: These tools are needed by UTIL_LOOKUP_PROGS
+ AC_PATH_PROGS(BASENAME, basename)
+ UTIL_CHECK_NONEMPTY(BASENAME)
+ AC_PATH_PROGS(DIRNAME, dirname)
+ UTIL_CHECK_NONEMPTY(DIRNAME)
+ AC_PATH_PROGS(FILE, file)
+ UTIL_CHECK_NONEMPTY(FILE)
+ AC_PATH_PROGS(LDD, ldd)
+
+ # First are all the fundamental required tools.
UTIL_REQUIRE_PROGS(BASH, bash)
UTIL_REQUIRE_PROGS(CAT, cat)
UTIL_REQUIRE_PROGS(CHMOD, chmod)
- UTIL_REQUIRE_PROGS(CMP, cmp)
- UTIL_REQUIRE_PROGS(COMM, comm)
UTIL_REQUIRE_PROGS(CP, cp)
UTIL_REQUIRE_PROGS(CUT, cut)
UTIL_REQUIRE_PROGS(DATE, date)
- UTIL_REQUIRE_PROGS(DIFF, [gdiff diff])
- UTIL_REQUIRE_PROGS(DIRNAME, dirname)
+ UTIL_REQUIRE_PROGS(DIFF, gdiff diff)
UTIL_REQUIRE_PROGS(ECHO, echo)
UTIL_REQUIRE_PROGS(EXPR, expr)
- UTIL_REQUIRE_PROGS(FILE, file)
UTIL_REQUIRE_PROGS(FIND, find)
- UTIL_REQUIRE_PROGS(HEAD, head)
UTIL_REQUIRE_PROGS(GUNZIP, gunzip)
UTIL_REQUIRE_PROGS(GZIP, pigz gzip)
+ UTIL_REQUIRE_PROGS(HEAD, head)
UTIL_REQUIRE_PROGS(LN, ln)
UTIL_REQUIRE_PROGS(LS, ls)
# gmkdir is known to be safe for concurrent invocations with -p flag.
- UTIL_REQUIRE_PROGS(MKDIR, [gmkdir mkdir])
+ UTIL_REQUIRE_PROGS(MKDIR, gmkdir mkdir)
UTIL_REQUIRE_PROGS(MKTEMP, mktemp)
UTIL_REQUIRE_PROGS(MV, mv)
- UTIL_REQUIRE_PROGS(NAWK, [nawk gawk awk])
+ UTIL_REQUIRE_PROGS(AWK, gawk nawk awk)
UTIL_REQUIRE_PROGS(PRINTF, printf)
- UTIL_REQUIRE_PROGS(READLINK, [greadlink readlink])
UTIL_REQUIRE_PROGS(RM, rm)
UTIL_REQUIRE_PROGS(RMDIR, rmdir)
UTIL_REQUIRE_PROGS(SH, sh)
@@ -70,33 +69,31 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
UTIL_REQUIRE_PROGS(TOUCH, touch)
UTIL_REQUIRE_PROGS(TR, tr)
UTIL_REQUIRE_PROGS(UNAME, uname)
- UTIL_REQUIRE_PROGS(UNIQ, uniq)
UTIL_REQUIRE_PROGS(WC, wc)
UTIL_REQUIRE_PROGS(XARGS, xargs)
# Then required tools that require some special treatment.
- UTIL_REQUIRE_SPECIAL(AWK, [AC_PROG_AWK])
UTIL_REQUIRE_SPECIAL(GREP, [AC_PROG_GREP])
UTIL_REQUIRE_SPECIAL(EGREP, [AC_PROG_EGREP])
UTIL_REQUIRE_SPECIAL(FGREP, [AC_PROG_FGREP])
UTIL_REQUIRE_SPECIAL(SED, [AC_PROG_SED])
- # Always force rm.
- RM="$RM -f"
+ # Optional tools, we can do without them
+ UTIL_LOOKUP_PROGS(DF, df)
+ UTIL_LOOKUP_PROGS(NICE, nice)
+ UTIL_LOOKUP_PROGS(READLINK, greadlink readlink)
- # pwd behaves differently on various platforms and some don't support the -L flag.
- # Always use the bash builtin pwd to get uniform behavior.
- THEPWDCMD=pwd
+ # These are only needed on some platforms
+ UTIL_LOOKUP_PROGS(PATHTOOL, cygpath wslpath)
+ UTIL_LOOKUP_PROGS(LSB_RELEASE, lsb_release)
+ UTIL_LOOKUP_PROGS(CMD, cmd.exe, $PATH:/cygdrive/c/windows/system32:/mnt/c/windows/system32:/c/windows/system32)
- # These are not required on all platforms
- UTIL_PATH_PROGS(CYGPATH, cygpath)
- UTIL_PATH_PROGS(WSLPATH, wslpath)
- UTIL_PATH_PROGS(DF, df)
- UTIL_PATH_PROGS(CPIO, [cpio bsdcpio])
- UTIL_PATH_PROGS(NICE, nice)
+ # For compare.sh only
+ UTIL_LOOKUP_PROGS(CMP, cmp)
+ UTIL_LOOKUP_PROGS(UNIQ, uniq)
- UTIL_PATH_PROGS(LSB_RELEASE, lsb_release)
- UTIL_PATH_PROGS(CMD, cmd.exe, $PATH /cygdrive/c/Windows/System32 /mnt/c/Windows/System32)
+ # Always force rm.
+ RM="$RM -f"
])
###############################################################################
@@ -131,10 +128,14 @@ AC_DEFUN([BASIC_CHECK_MAKE_VERSION],
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
MAKE_EXPECTED_ENV='cygwin'
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys2"; then
MAKE_EXPECTED_ENV='msys'
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- MAKE_EXPECTED_ENV='x86_64-.*-linux-gnu'
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl1" || test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl2"; then
+ if test "x$OPENJDK_BUILD_CPU" = "xaarch64"; then
+ MAKE_EXPECTED_ENV='aarch64-.*-linux-gnu'
+ else
+ MAKE_EXPECTED_ENV='x86_64-.*-linux-gnu'
+ fi
else
AC_MSG_ERROR([Unknown Windows environment])
fi
@@ -186,14 +187,14 @@ AC_DEFUN([BASIC_CHECK_MAKE_OUTPUT_SYNC],
# Goes looking for a usable version of GNU make.
AC_DEFUN([BASIC_CHECK_GNU_MAKE],
[
- UTIL_SETUP_TOOL([MAKE],
+ UTIL_SETUP_TOOL(MAKE,
[
# Try our hardest to locate a correct version of GNU make
- AC_PATH_PROGS(CHECK_GMAKE, gmake)
+ UTIL_LOOKUP_PROGS(CHECK_GMAKE, gmake)
BASIC_CHECK_MAKE_VERSION("$CHECK_GMAKE", [gmake in PATH])
if test "x$FOUND_MAKE" = x; then
- AC_PATH_PROGS(CHECK_MAKE, make)
+ UTIL_LOOKUP_PROGS(CHECK_MAKE, make)
BASIC_CHECK_MAKE_VERSION("$CHECK_MAKE", [make in PATH])
fi
@@ -202,10 +203,10 @@ AC_DEFUN([BASIC_CHECK_GNU_MAKE],
# We have a toolchain path, check that as well before giving up.
OLD_PATH=$PATH
PATH=$TOOLCHAIN_PATH:$PATH
- AC_PATH_PROGS(CHECK_TOOLSDIR_GMAKE, gmake)
+ UTIL_LOOKUP_PROGS(CHECK_TOOLSDIR_GMAKE, gmake)
BASIC_CHECK_MAKE_VERSION("$CHECK_TOOLSDIR_GMAKE", [gmake in tools-dir])
if test "x$FOUND_MAKE" = x; then
- AC_PATH_PROGS(CHECK_TOOLSDIR_MAKE, make)
+ UTIL_LOOKUP_PROGS(CHECK_TOOLSDIR_MAKE, make)
BASIC_CHECK_MAKE_VERSION("$CHECK_TOOLSDIR_MAKE", [make in tools-dir])
fi
PATH=$OLD_PATH
@@ -335,24 +336,17 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
# Non-required basic tools
- UTIL_PATH_PROGS(LDD, ldd)
- if test "x$LDD" = "x"; then
- # List shared lib dependencies is used for
- # debug output and checking for forbidden dependencies.
- # We can build without it.
- LDD="true"
- fi
- UTIL_PATH_PROGS(READELF, [greadelf readelf])
- UTIL_PATH_PROGS(DOT, dot)
- UTIL_PATH_PROGS(HG, hg)
- UTIL_PATH_PROGS(GIT, git)
- UTIL_PATH_PROGS(STAT, stat)
- UTIL_PATH_PROGS(TIME, time)
- UTIL_PATH_PROGS(FLOCK, flock)
+ UTIL_LOOKUP_PROGS(READELF, greadelf readelf)
+ UTIL_LOOKUP_PROGS(DOT, dot)
+ UTIL_LOOKUP_PROGS(HG, hg)
+ UTIL_LOOKUP_PROGS(GIT, git)
+ UTIL_LOOKUP_PROGS(STAT, stat)
+ UTIL_LOOKUP_PROGS(TIME, time)
+ UTIL_LOOKUP_PROGS(FLOCK, flock)
# Dtrace is usually found in /usr/sbin, but that directory may not
# be in the user path.
- UTIL_PATH_PROGS(DTRACE, dtrace, $PATH:/usr/sbin)
- UTIL_PATH_PROGS(PATCH, [gpatch patch])
+ UTIL_LOOKUP_PROGS(DTRACE, dtrace, $PATH:/usr/sbin)
+ UTIL_LOOKUP_PROGS(PATCH, gpatch patch)
# Check if it's GNU time
IS_GNU_TIME=`$TIME --version 2>&1 | $GREP 'GNU time'`
if test "x$IS_GNU_TIME" != x; then
@@ -366,7 +360,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
UTIL_REQUIRE_PROGS(DSYMUTIL, dsymutil)
UTIL_REQUIRE_PROGS(MIG, mig)
UTIL_REQUIRE_PROGS(XATTR, xattr)
- UTIL_PATH_PROGS(CODESIGN, codesign)
+ UTIL_LOOKUP_PROGS(CODESIGN, codesign)
if test "x$CODESIGN" != "x"; then
# Check for user provided code signing identity.
@@ -407,7 +401,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS],
UTIL_REQUIRE_PROGS(SETFILE, SetFile)
fi
if ! test "x$OPENJDK_TARGET_OS" = "xwindows"; then
- UTIL_REQUIRE_BUILTIN_PROGS(ULIMIT, ulimit)
+ UTIL_REQUIRE_PROGS(ULIMIT, ulimit)
fi
])
@@ -453,7 +447,7 @@ AC_DEFUN_ONCE([BASIC_CHECK_BASH_OPTIONS],
#
AC_DEFUN_ONCE([BASIC_SETUP_PANDOC],
[
- UTIL_PATH_PROGS(PANDOC, pandoc)
+ UTIL_LOOKUP_PROGS(PANDOC, pandoc)
PANDOC_MARKDOWN_FLAG="markdown"
if test -n "$PANDOC"; then
diff --git a/make/autoconf/basic_windows.m4 b/make/autoconf/basic_windows.m4
index cadc53b6754..a8686e45d89 100644
--- a/make/autoconf/basic_windows.m4
+++ b/make/autoconf/basic_windows.m4
@@ -24,97 +24,160 @@
#
# Setup basic configuration paths, and platform-specific stuff related to PATHs.
-AC_DEFUN([BASIC_CHECK_PATHS_WINDOWS],
+AC_DEFUN([BASIC_SETUP_PATHS_WINDOWS],
[
- SRC_ROOT_LENGTH=`$THEPWDCMD -L|$WC -m`
- if test $SRC_ROOT_LENGTH -gt 100; then
- AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported])
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
+ # Clarify if it is wsl1 or wsl2, and use that as OS_ENV from this point forward
+ $PATHTOOL -w / > /dev/null 2>&1
+ if test $? -ne 0; then
+ # Without Windows access to our root, it's definitely WSL1
+ OPENJDK_BUILD_OS_ENV=windows.wsl1
+ else
+ # This test is not guaranteed, but there is no documented way of
+ # distinguishing between WSL1 and WSL2. Assume only WSL2 has WSL_INTEROP
+ # in /run/WSL
+ if test -d "/run/WSL" ; then
+ OPENJDK_BUILD_OS_ENV=windows.wsl2
+ else
+ OPENJDK_BUILD_OS_ENV=windows.wsl1
+ fi
+ fi
+ # This is a bit silly since we really don't have a target env as such,
+ # but do it to keep consistency.
+ OPENJDK_TARGET_OS_ENV=$OPENJDK_BUILD_OS_ENV
fi
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys2"; then
+ # Must be done prior to calling any commands to avoid mangling of command line
+ export MSYS2_ARG_CONV_EXCL="*"
+ fi
+
+ AC_MSG_CHECKING([Windows environment type])
+ WINENV_VENDOR=${OPENJDK_BUILD_OS_ENV#windows.}
+ AC_MSG_RESULT([$WINENV_VENDOR])
+
+ if test "x$WINENV_VENDOR" = x; then
+ AC_MSG_ERROR([Unknown Windows environment. Neither cygwin, msys2, wsl1 nor wsl2 was detected.])
+ fi
+
+ if test "x$PATHTOOL" = x; then
+ AC_MSG_ERROR([Incorrect $WINENV_VENDOR installation. Neither cygpath nor wslpath was found])
+ fi
+
+ if test "x$CMD" = x; then
+ AC_MSG_ERROR([Incorrect Windows/$WINENV_VENDOR setup. Could not locate cmd.exe])
+ fi
+
+ AC_MSG_CHECKING([$WINENV_VENDOR drive prefix])
+ WINENV_PREFIX=`$PATHTOOL -u c:/ | $SED -e 's!/c/!!'`
+ AC_MSG_RESULT(['$WINENV_PREFIX'])
+ AC_SUBST(WINENV_PREFIX)
+
+ AC_MSG_CHECKING([$WINENV_VENDOR root directory as Windows path])
+ if test "x$OPENJDK_BUILD_OS_ENV" != "xwindows.wsl1"; then
+ WINENV_ROOT=`$PATHTOOL -w / 2> /dev/null`
+ # msys2 has a trailing backslash; strip it
+ WINENV_ROOT=${WINENV_ROOT%\\}
+ else
+ WINENV_ROOT='[[unavailable]]'
+ fi
+ AC_MSG_RESULT(['$WINENV_ROOT'])
+ AC_SUBST(WINENV_ROOT)
+
+ AC_MSG_CHECKING([$WINENV_VENDOR temp directory])
+ WINENV_TEMP_DIR=$($PATHTOOL -u $($CMD /q /c echo %TEMP% 2> /dev/null) | $TR -d '\r\n')
+ AC_MSG_RESULT([$WINENV_TEMP_DIR])
+
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl2"; then
+ # Don't trust the current directory for WSL2, but change to an OK temp dir
+ cd "$WINENV_TEMP_DIR"
+ # Bring along confdefs.h or autoconf gets all confused
+ cp "$CONFIGURE_START_DIR/confdefs.h" "$WINENV_TEMP_DIR"
+ fi
+
+ AC_MSG_CHECKING([$WINENV_VENDOR release])
+ WINENV_UNAME_RELEASE=`$UNAME -r`
+ AC_MSG_RESULT([$WINENV_UNAME_RELEASE])
+
+ AC_MSG_CHECKING([$WINENV_VENDOR version])
+ WINENV_UNAME_VERSION=`$UNAME -v`
+ AC_MSG_RESULT([$WINENV_UNAME_VERSION])
+
+ WINENV_VERSION="$WINENV_UNAME_RELEASE, $WINENV_UNAME_VERSION"
+
AC_MSG_CHECKING([Windows version])
+
+ # We must change directory to one guaranteed to work, otherwise WSL1
+ # can complain (since it does not have a WINENV_ROOT so it can't access
+ # unix-style paths from Windows.
# Additional [] needed to keep m4 from mangling shell constructs.
- [ WINDOWS_VERSION=`$CMD /c ver.exe | $EGREP -o '([0-9]+\.)+[0-9]+'` ]
+ [ WINDOWS_VERSION=`cd $WINENV_TEMP_DIR && $CMD /c ver | $EGREP -o '([0-9]+\.)+[0-9]+'` ]
AC_MSG_RESULT([$WINDOWS_VERSION])
+ # Additional handling per specific env
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- AC_MSG_CHECKING([cygwin release])
- CYGWIN_RELEASE=`$UNAME -r`
- AC_MSG_RESULT([$CYGWIN_RELEASE])
-
- AC_MSG_CHECKING([cygwin version])
- CYGWIN_VERSION=`$UNAME -v`
- AC_MSG_RESULT([$CYGWIN_VERSION])
-
# Additional [] needed to keep m4 from mangling shell constructs.
- [ CYGWIN_VERSION_OLD=`$ECHO $CYGWIN_RELEASE | $GREP -e '^1\.[0-6]'` ]
+ [ CYGWIN_VERSION_OLD=`$ECHO $WINENV_UNAME_RELEASE | $GREP -e '^1\.[0-6]'` ]
if test "x$CYGWIN_VERSION_OLD" != x; then
AC_MSG_NOTICE([Your cygwin is too old. You are running $CYGWIN_RELEASE, but at least cygwin 1.7 is required. Please upgrade.])
AC_MSG_ERROR([Cannot continue])
fi
-
- WINDOWS_ENV_VENDOR='cygwin'
- WINDOWS_ENV_VERSION="$CYGWIN_RELEASE, $CYGWIN_VERSION"
-
- if test "x$CYGPATH" = x; then
- AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path])
+ if test "x$LDD" = x; then
+ AC_MSG_ERROR([ldd is missing, which is needed on cygwin])
fi
- AC_MSG_CHECKING([cygwin root directory as unix-style path])
- # The cmd output ends with Windows line endings (CR/LF)
- cygwin_winpath_root=`cd / ; cmd /c cd | $TR -d '\r\n'`
- # Force cygpath to report the proper root by including a trailing space, and then stripping it off again.
- CYGWIN_ROOT_PATH=`$CYGPATH -u "$cygwin_winpath_root " | $CUT -f 1 -d " "`
- AC_MSG_RESULT([$CYGWIN_ROOT_PATH])
- WINDOWS_ENV_ROOT_PATH="$CYGWIN_ROOT_PATH"
- test_cygdrive_prefix=`$ECHO $CYGWIN_ROOT_PATH | $GREP ^/cygdrive/`
- if test "x$test_cygdrive_prefix" = x; then
- AC_MSG_ERROR([Your cygdrive prefix is not /cygdrive. This is currently not supported. Change with mount -c.])
+ WINENV_MARKER_DLL=cygwin1.dll
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys2"; then
+ if test "x$LDD" = x; then
+ AC_MSG_ERROR([ldd is missing, which is needed on msys2])
fi
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- AC_MSG_CHECKING([msys release])
- MSYS_RELEASE=`$UNAME -r`
- AC_MSG_RESULT([$MSYS_RELEASE])
-
- AC_MSG_CHECKING([msys version])
- MSYS_VERSION=`$UNAME -v`
- AC_MSG_RESULT([$MSYS_VERSION])
-
- WINDOWS_ENV_VENDOR='msys'
- WINDOWS_ENV_VERSION="$MSYS_RELEASE, $MSYS_VERSION"
-
- AC_MSG_CHECKING([msys root directory as unix-style path])
- # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away
- MSYS_ROOT_PATH=`cd / ; cmd /c cd | $GREP ".*"`
- UTIL_REWRITE_AS_UNIX_PATH(MSYS_ROOT_PATH)
- AC_MSG_RESULT([$MSYS_ROOT_PATH])
- WINDOWS_ENV_ROOT_PATH="$MSYS_ROOT_PATH"
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
-
- AC_MSG_CHECKING([WSL kernel version])
- WSL_KERNEL_VERSION=`$UNAME -v`
- AC_MSG_RESULT([$WSL_KERNEL_VERSION])
-
- AC_MSG_CHECKING([WSL kernel release])
- WSL_KERNEL_RELEASE=`$UNAME -r`
- AC_MSG_RESULT([$WSL_KERNEL_RELEASE])
-
- AC_MSG_CHECKING([WSL distribution])
+ WINENV_MARKER_DLL=msys-2.0.dll
+ elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl1" || test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl2"; then
+ AC_MSG_CHECKING([wsl distribution])
WSL_DISTRIBUTION=`$LSB_RELEASE -d | sed 's/Description:\t//'`
AC_MSG_RESULT([$WSL_DISTRIBUTION])
- WINDOWS_ENV_VENDOR='wsl'
- WINDOWS_ENV_VERSION="$WSL_KERNEL_RELEASE, $WSL_KERNEL_VERSION ($WSL_DISTRIBUTION)"
+ WINENV_VERSION="$WINENV_VERSION ($WSL_DISTRIBUTION)"
+
+ # Tell WSL to automatically translate the PATH variable
+ export WSLENV=PATH/l
+ fi
+
+ # Chicken and egg: FIXPATH is needed for UTIL_FIXUP_PATH to work. So for the
+ # first run we use the auto-detect abilities of fixpath.sh.
+ FIXPATH_DIR="$TOPDIR/make/scripts"
+ FIXPATH="$BASH $FIXPATH_DIR/fixpath.sh exec"
+ FIXPATH_BASE="$BASH $FIXPATH_DIR/fixpath.sh"
+ FIXPATH_SAVED_PATH="$PATH"
+ UTIL_FIXUP_PATH(FIXPATH_DIR)
+
+ # Now we can use FIXPATH_DIR to rewrite path to fixpath.sh properly.
+ if test "x$WINENV_PREFIX" = x; then
+ # On msys the prefix is empty, but we need to pass something to have the
+ # fixpath.sh options parser happy.
+ WINENV_PREFIX_ARG="NONE"
else
- AC_MSG_ERROR([Unknown Windows environment. Neither cygwin, msys, nor wsl was detected.])
+ WINENV_PREFIX_ARG="$WINENV_PREFIX"
fi
+ FIXPATH_ARGS="-e $PATHTOOL -p $WINENV_PREFIX_ARG -r ${WINENV_ROOT//\\/\\\\} -t $WINENV_TEMP_DIR -c $CMD -q"
+ FIXPATH_BASE="$BASH $FIXPATH_DIR/fixpath.sh $FIXPATH_ARGS"
+ FIXPATH="$FIXPATH_BASE exec"
- # Test if windows or unix (cygwin/msys) find is first in path.
+ AC_SUBST(FIXPATH_BASE)
+ AC_SUBST(FIXPATH)
+
+ SRC_ROOT_LENGTH=`$ECHO "$TOPDIR" | $WC -m`
+ if test $SRC_ROOT_LENGTH -gt 100; then
+ AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported])
+ fi
+
+ # Test if windows or unix "find" is first in path.
AC_MSG_CHECKING([what kind of 'find' is first on the PATH])
FIND_BINARY_OUTPUT=`find --version 2>&1`
if test "x`echo $FIND_BINARY_OUTPUT | $GREP GNU`" != x; then
AC_MSG_RESULT([unix style])
elif test "x`echo $FIND_BINARY_OUTPUT | $GREP FIND`" != x; then
AC_MSG_RESULT([Windows])
- AC_MSG_NOTICE([Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools.])
+ AC_MSG_NOTICE([Your path contains Windows tools (C:\Windows\system32) before your unix tools.])
AC_MSG_NOTICE([This will not work. Please correct and make sure /usr/bin (or similar) is first in path.])
AC_MSG_ERROR([Cannot continue])
else
@@ -123,73 +186,39 @@ AC_DEFUN([BASIC_CHECK_PATHS_WINDOWS],
fi
])
-AC_DEFUN_ONCE([BASIC_COMPILE_FIXPATH],
+# Verify that the directory is usable on Windows
+AC_DEFUN([BASIC_WINDOWS_VERIFY_DIR],
[
- # When using cygwin or msys, we need a wrapper binary that renames
- # /cygdrive/c/ arguments into c:/ arguments and peeks into
- # @files and rewrites these too! This wrapper binary is
- # called fixpath.
- FIXPATH=
- if test "x$OPENJDK_BUILD_OS" = xwindows; then
- AC_MSG_CHECKING([if fixpath can be created])
- FIXPATH_SRC="$TOPDIR/make/src/native/fixpath.c"
- FIXPATH_BIN="$CONFIGURESUPPORT_OUTPUTDIR/bin/fixpath.exe"
- FIXPATH_DIR="$CONFIGURESUPPORT_OUTPUTDIR/fixpath"
- if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then
- # Important to keep the .exe suffix on Cygwin for Hotspot makefiles
- FIXPATH="$FIXPATH_BIN -c"
- elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.msys; then
- # Take all collected prefixes and turn them into a -m/c/foo@/c/bar@... command line
- # @ was chosen as separator to minimize risk of other tools messing around with it
- all_unique_prefixes=`echo "${all_fixpath_prefixes@<:@@@:>@}" \
- | tr ' ' '\n' | $GREP '^/./' | $SORT | $UNIQ`
- fixpath_argument_list=`echo $all_unique_prefixes | tr ' ' '@'`
- FIXPATH="$FIXPATH_BIN -m$fixpath_argument_list"
- elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.wsl; then
- FIXPATH="$FIXPATH_BIN -w"
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl1"; then
+ OUTPUTDIR_WIN=`$FIXPATH_BASE print $1`
+ if test "x$OUTPUTDIR_WIN" = x; then
+ AC_MSG_NOTICE([For wsl1, the $2 dir must be located on a Windows drive. Please see doc/building.md for details.])
+ AC_MSG_ERROR([Cannot continue])
fi
- FIXPATH_SRC_W="$FIXPATH_SRC"
- FIXPATH_BIN_W="$FIXPATH_BIN"
- $RM -rf $FIXPATH_BIN $FIXPATH_DIR
- $MKDIR -p $FIXPATH_DIR $CONFIGURESUPPORT_OUTPUTDIR/bin
- UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([FIXPATH_SRC_W])
- UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([FIXPATH_BIN_W])
- cd $FIXPATH_DIR
- $CC $FIXPATH_SRC_W -Fe$FIXPATH_BIN_W > $FIXPATH_DIR/fixpath1.log 2>&1
- cd $CONFIGURE_START_DIR
+ fi
+])
- if test ! -x $FIXPATH_BIN; then
- AC_MSG_RESULT([no])
- cat $FIXPATH_DIR/fixpath1.log
- AC_MSG_ERROR([Could not create $FIXPATH_BIN])
- fi
- AC_MSG_RESULT([yes])
-
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- OLD_WSLENV="$WSLENV"
- WSLENV=`$ECHO $WSLENV | $SED 's/PATH\/l://'`
- UTIL_APPEND_TO_PATH(WSLENV, "FIXPATH_PATH")
- export WSLENV
- export FIXPATH_PATH=$VS_PATH_WINDOWS
- AC_MSG_NOTICE([FIXPATH_PATH is $FIXPATH_PATH])
- AC_MSG_NOTICE([Rewriting WSLENV from $OLD_WSLENV to $WSLENV])
- fi
+# Create fixpath wrapper
+AC_DEFUN([BASIC_WINDOWS_FINALIZE_FIXPATH],
+[
+ if test "x$OPENJDK_BUILD_OS" = xwindows; then
+ FIXPATH_CMDLINE=". $TOPDIR/make/scripts/fixpath.sh -e $PATHTOOL \
+ -p $WINENV_PREFIX_ARG -r ${WINENV_ROOT//\\/\\\\} -t $WINENV_TEMP_DIR \
+ -c $CMD -q"
+ $ECHO > $OUTPUTDIR/fixpath '#!/bin/bash'
+ $ECHO >> $OUTPUTDIR/fixpath export PATH='"[$]PATH:'$PATH'"'
+ $ECHO >> $OUTPUTDIR/fixpath $FIXPATH_CMDLINE '"[$]@"'
+ $CHMOD +x $OUTPUTDIR/fixpath
+ FIXPATH_BASE="$OUTPUTDIR/fixpath"
+ FIXPATH="$FIXPATH_BASE exec"
+ fi
+])
- AC_MSG_CHECKING([if fixpath.exe works])
- cd $FIXPATH_DIR
- $FIXPATH $CC $FIXPATH_SRC -Fe$FIXPATH_DIR/fixpath2.exe \
- > $FIXPATH_DIR/fixpath2.log 2>&1
+# Platform-specific finalization
+AC_DEFUN([BASIC_WINDOWS_FINALIZE],
+[
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl2"; then
+ # Change back from temp dir
cd $CONFIGURE_START_DIR
- if test ! -x $FIXPATH_DIR/fixpath2.exe; then
- AC_MSG_RESULT([no])
- cat $FIXPATH_DIR/fixpath2.log
- AC_MSG_ERROR([fixpath did not work!])
- fi
- AC_MSG_RESULT([yes])
-
- FIXPATH_DETACH_FLAG="--detach"
fi
-
- AC_SUBST(FIXPATH)
- AC_SUBST(FIXPATH_DETACH_FLAG)
])
diff --git a/make/autoconf/boot-jdk.m4 b/make/autoconf/boot-jdk.m4
index c78b4432f2a..1d82f7c79b9 100644
--- a/make/autoconf/boot-jdk.m4
+++ b/make/autoconf/boot-jdk.m4
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -63,19 +63,23 @@ AC_DEFUN([BOOTJDK_DO_CHECK],
# If previous step claimed to have found a JDK, check it to see if it seems to be valid.
if test "x$BOOT_JDK_FOUND" = xmaybe; then
# Do we have a bin/java?
- if test ! -x "$BOOT_JDK/bin/java$EXE_SUFFIX"; then
+ if test ! -x "$BOOT_JDK/bin/java" && test ! -x "$BOOT_JDK/bin/java.exe"; then
AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring])
BOOT_JDK_FOUND=no
else
# Do we have a bin/javac?
- if test ! -x "$BOOT_JDK/bin/javac$EXE_SUFFIX"; then
+ if test ! -x "$BOOT_JDK/bin/javac" && test ! -x "$BOOT_JDK/bin/javac.exe"; then
AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring])
AC_MSG_NOTICE([(This might be an JRE instead of an JDK)])
BOOT_JDK_FOUND=no
else
# Oh, this is looking good! We probably have found a proper JDK. Is it the correct version?
+ java_to_test="$BOOT_JDK/bin/java"
+ UTIL_FIXUP_EXECUTABLE(java_to_test)
+ BOOT_JDK_VERSION_OUTPUT=`$java_to_test $USER_BOOT_JDK_OPTIONS -version 2>&1`
# Additional [] needed to keep m4 from mangling shell constructs.
- [ BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java$EXE_SUFFIX" $USER_BOOT_JDK_OPTIONS -version 2>&1 | $AWK '/version "[0-9a-zA-Z\._\-]+"/ {print $ 0; exit;}'` ]
+ [ BOOT_JDK_VERSION=`echo $BOOT_JDK_VERSION_OUTPUT | $AWK '/version "[0-9a-zA-Z\._\-]+"/ {print $ 0; exit;}'` ]
+
if [ [[ "$BOOT_JDK_VERSION" =~ "Picked up" ]] ]; then
AC_MSG_NOTICE([You have _JAVA_OPTIONS or JAVA_TOOL_OPTIONS set. This can mess up the build. Please use --with-boot-jdk-jvmargs instead.])
AC_MSG_NOTICE([Java reports: "$BOOT_JDK_VERSION".])
@@ -91,7 +95,12 @@ AC_DEFUN([BOOTJDK_DO_CHECK],
# Extra M4 quote needed to protect [] in grep expression.
[FOUND_CORRECT_VERSION=`$ECHO $BOOT_JDK_VERSION \
| $EGREP "\"(${DEFAULT_ACCEPTABLE_BOOT_VERSIONS// /|})([\.+-].*)?\""`]
- if test "x$FOUND_CORRECT_VERSION" = x; then
+
+ if test "x$BOOT_JDK_VERSION" = x; then
+ AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK is not a working JDK; ignoring])
+ AC_MSG_NOTICE([Output from java -version was: $BOOT_JDK_VERSION_OUTPUT])
+ BOOT_JDK_FOUND=no
+ elif test "x$FOUND_CORRECT_VERSION" = x; then
AC_MSG_NOTICE([Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring])
AC_MSG_NOTICE([(Your Boot JDK version must be one of: $DEFAULT_ACCEPTABLE_BOOT_VERSIONS)])
BOOT_JDK_FOUND=no
@@ -102,7 +111,9 @@ AC_DEFUN([BOOTJDK_DO_CHECK],
AC_MSG_CHECKING([for Boot JDK])
AC_MSG_RESULT([$BOOT_JDK])
AC_MSG_CHECKING([Boot JDK version])
- BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java$EXE_SUFFIX" $USER_BOOT_JDK_OPTIONS -version 2>&1 | $TR '\n\r' ' '`
+ BOOT_JDK_VERSION=`$java_to_test $USER_BOOT_JDK_OPTIONS -version 2>&1 | $TR -d '\r'`
+ # This is not a no-op; it will portably convert newline to space
+ BOOT_JDK_VERSION=`$ECHO $BOOT_JDK_VERSION`
AC_MSG_RESULT([$BOOT_JDK_VERSION])
fi # end check jdk version
fi # end check javac
@@ -151,8 +162,8 @@ AC_DEFUN([BOOTJDK_CHECK_JAVA_HOME],
[
if test "x$JAVA_HOME" != x; then
JAVA_HOME_PROCESSED="$JAVA_HOME"
- UTIL_FIXUP_PATH(JAVA_HOME_PROCESSED)
- if test ! -d "$JAVA_HOME_PROCESSED"; then
+ UTIL_FIXUP_PATH(JAVA_HOME_PROCESSED, NOFAIL)
+ if test "x$JAVA_HOME_PROCESSED" = x || test ! -d "$JAVA_HOME_PROCESSED"; then
AC_MSG_NOTICE([Your JAVA_HOME points to a non-existing directory!])
else
# Aha, the user has set a JAVA_HOME
@@ -167,8 +178,8 @@ AC_DEFUN([BOOTJDK_CHECK_JAVA_HOME],
# Test: Is there a java or javac in the PATH, which is a symlink to the JDK?
AC_DEFUN([BOOTJDK_CHECK_JAVA_IN_PATH_IS_SYMLINK],
[
- AC_PATH_PROG(JAVAC_CHECK, javac)
- AC_PATH_PROG(JAVA_CHECK, java)
+ UTIL_LOOKUP_PROGS(JAVAC_CHECK, javac, , NOFIXPATH)
+ UTIL_LOOKUP_PROGS(JAVA_CHECK, java, , NOFIXPATH)
BINARY="$JAVAC_CHECK"
if test "x$JAVAC_CHECK" = x; then
BINARY="$JAVA_CHECK"
@@ -207,9 +218,9 @@ AC_DEFUN([BOOTJDK_CHECK_MACOSX_JAVA_LOCATOR],
# First check at user selected default
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME()])
# If that did not work out (e.g. too old), try explicit versions instead
- BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME([-v 1.9])])
- BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME([-v 1.8])])
- BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME([-v 1.7])])
+ for ver in $DEFAULT_ACCEPTABLE_BOOT_VERSIONS ; do
+ BOOTJDK_DO_CHECK([BOOTJDK_CHECK_LIBEXEC_JAVA_HOME([-v $ver])])
+ done
fi
])
@@ -242,8 +253,10 @@ AC_DEFUN([BOOTJDK_FIND_BEST_JDK_IN_WINDOWS_VIRTUAL_DIRECTORY],
[
if test "x[$]$1" != x; then
VIRTUAL_DIR="[$]$1/Java"
- UTIL_REWRITE_AS_UNIX_PATH(VIRTUAL_DIR)
- BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY($VIRTUAL_DIR)
+ UTIL_FIXUP_PATH(VIRTUAL_DIR, NOFAIL)
+ if test "x$VIRTUAL_DIR" != x; then
+ BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY($VIRTUAL_DIR)
+ fi
fi
])
@@ -270,16 +283,17 @@ AC_DEFUN([BOOTJDK_CHECK_WELL_KNOWN_LOCATIONS],
AC_DEFUN([BOOTJDK_CHECK_TOOL_IN_BOOTJDK],
[
# Use user overridden value if available, otherwise locate tool in the Boot JDK.
- UTIL_SETUP_TOOL($1,
+ UTIL_REQUIRE_SPECIAL($1,
[
- AC_MSG_CHECKING([for $2 in Boot JDK])
+ AC_MSG_CHECKING([for $2 [[Boot JDK]]])
$1=$BOOT_JDK/bin/$2
- if test ! -x [$]$1; then
+ if test ! -x [$]$1 && test ! -x [$]$1.exe; then
AC_MSG_RESULT(not found)
AC_MSG_NOTICE([Your Boot JDK seems broken. This might be fixed by explicitly setting --with-boot-jdk])
AC_MSG_ERROR([Could not find $2 in the Boot JDK])
fi
- AC_MSG_RESULT(ok)
+ AC_MSG_RESULT(\[$]BOOT_JDK/bin/$2)
+ UTIL_FIXUP_EXECUTABLE($1)
AC_SUBST($1)
])
])
@@ -313,12 +327,12 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
AC_MSG_ERROR([The path given by --with-boot-jdk does not contain a valid Boot JDK])
fi
- # Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home?
- BOOTJDK_DO_CHECK([BOOTJDK_CHECK_MACOSX_JAVA_LOCATOR])
-
# Test: Is $JAVA_HOME set?
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_JAVA_HOME])
+ # Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home?
+ BOOTJDK_DO_CHECK([BOOTJDK_CHECK_MACOSX_JAVA_LOCATOR])
+
# Test: Is there a java or javac in the PATH, which is a symlink to the JDK?
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_JAVA_IN_PATH_IS_SYMLINK])
@@ -336,11 +350,10 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
AC_SUBST(BOOT_JDK)
# Setup tools from the Boot JDK.
- BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVA, java$EXE_SUFFIX)
- BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAC, javac$EXE_SUFFIX)
- BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVADOC, javadoc$EXE_SUFFIX)
- BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAR, jar$EXE_SUFFIX)
- BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JARSIGNER, jarsigner$EXE_SUFFIX)
+ BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVA, java)
+ BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVAC, javac)
+ BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAVADOC, javadoc)
+ BOOTJDK_CHECK_TOOL_IN_BOOTJDK(JAR, jar)
# Finally, set some other options...
@@ -353,7 +366,7 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
AC_SUBST(BOOT_JDK_SOURCETARGET)
# Check if the boot jdk is 32 or 64 bit
- if "$JAVA" -version 2>&1 | $GREP -q "64-Bit"; then
+ if $JAVA -version 2>&1 | $GREP -q "64-Bit"; then
BOOT_JDK_BITS="64"
else
BOOT_JDK_BITS="32"
@@ -368,7 +381,7 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
if test "x$boot_jdk_cds_args" != x; then
# Try creating a CDS archive
- "$JAVA" $boot_jdk_cds_args -Xshare:dump > /dev/null 2>&1
+ $JAVA $boot_jdk_cds_args -Xshare:dump > /dev/null 2>&1
if test $? -eq 0; then
BOOTJDK_USE_LOCAL_CDS=true
AC_MSG_RESULT([yes, created])
@@ -574,8 +587,12 @@ AC_DEFUN([BOOTJDK_SETUP_BUILD_JDK],
fi
fi
+ # Since these tools do not yet exist, we cannot use UTIL_FIXUP_EXECUTABLE to
+ # detect the need of fixpath
JMOD="$BUILD_JDK/bin/jmod"
+ UTIL_ADD_FIXPATH(JMOD)
JLINK="$BUILD_JDK/bin/jlink"
+ UTIL_ADD_FIXPATH(JLINK)
AC_SUBST(JMOD)
AC_SUBST(JLINK)
@@ -589,3 +606,28 @@ AC_DEFUN([BOOTJDK_SETUP_BUILD_JDK],
AC_SUBST(BUILD_JDK)
AC_SUBST(EXTERNAL_BUILDJDK)
])
+
+# The docs-reference JDK is used to run javadoc for the docs-reference targets.
+# If not set, the reference docs will be built using the interim javadoc.
+AC_DEFUN([BOOTJDK_SETUP_DOCS_REFERENCE_JDK],
+[
+ AC_ARG_WITH(docs-reference-jdk, [AS_HELP_STRING([--with-docs-reference-jdk],
+ [path to JDK to use for building the reference documentation])])
+
+ AC_MSG_CHECKING([for docs-reference JDK])
+ if test "x$with_docs_reference_jdk" != "x"; then
+ DOCS_REFERENCE_JDK="$with_docs_reference_jdk"
+ AC_MSG_RESULT([$DOCS_REFERENCE_JDK])
+ DOCS_REFERENCE_JAVADOC="$DOCS_REFERENCE_JDK/bin/javadoc"
+ if test ! -x "$DOCS_REFERENCE_JAVADOC"; then
+ AC_MSG_ERROR([docs-reference JDK found at $DOCS_REFERENCE_JDK did not contain bin/javadoc])
+ fi
+ UTIL_FIXUP_EXECUTABLE(DOCS_REFERENCE_JAVADOC)
+ else
+ AC_MSG_RESULT([no, using interim javadoc for the docs-reference targets])
+ # By leaving this empty, Docs.gmk will revert to the default interim javadoc
+ DOCS_REFERENCE_JAVADOC=
+ fi
+
+ AC_SUBST(DOCS_REFERENCE_JAVADOC)
+])
diff --git a/make/autoconf/bootcycle-spec.gmk.in b/make/autoconf/bootcycle-spec.gmk.in
index 590a9170c6c..d46621fd891 100644
--- a/make/autoconf/bootcycle-spec.gmk.in
+++ b/make/autoconf/bootcycle-spec.gmk.in
@@ -28,14 +28,6 @@
# First include the real base spec.gmk file
include @SPEC@
-# Check that the user did not try to specify a different java to use for compiling.
-# On windows we need to account for fixpath being first word.
-ifeq ($(firstword $(JAVA)),$(FIXPATH))
- JAVA_EXEC_POS=2
-else
- JAVA_EXEC_POS=1
-endif
-
# Override specific values to do a boot cycle build
# Use a different Boot JDK
@@ -47,10 +39,9 @@ OUTPUTDIR:=$(OLD_OUTPUTDIR)/bootcycle-build
# No spaces in patsubst to avoid leading space in variable
JAVAC_SERVER_DIR:=$(patsubst $(OLD_OUTPUTDIR)%,$(OUTPUTDIR)%,$(JAVAC_SERVER_DIR))
-JAVA_CMD:=$(BOOT_JDK)/bin/java
-JAVAC_CMD:=$(BOOT_JDK)/bin/javac
-JAR_CMD:=$(BOOT_JDK)/bin/jar
-JARSIGNER_CMD:=$(BOOT_JDK)/bin/jarsigner
+JAVA_CMD := $(FIXPATH) $(BOOT_JDK)/bin/java
+JAVAC_CMD := $(FIXPATH) $(BOOT_JDK)/bin/javac
+JAR_CMD := $(FIXPATH) $(BOOT_JDK)/bin/jar
# The bootcycle JVM arguments may differ from the original boot jdk.
JAVA_FLAGS_BIG := @BOOTCYCLE_JVM_ARGS_BIG@
# Any CDS settings generated for the bootjdk are invalid in the bootcycle build.
@@ -58,5 +49,3 @@ JAVA_FLAGS_BIG := @BOOTCYCLE_JVM_ARGS_BIG@
# settings for CDS.
JAVA_FLAGS := $(filter-out -XX:SharedArchiveFile% -Xshare%, $(JAVA_FLAGS))
-# Pandoc cannot be used without the jjs plugin, which was removed with Nashorn.
-ENABLE_PANDOC := false
diff --git a/make/autoconf/build-aux/config.guess b/make/autoconf/build-aux/config.guess
index 14f21a25e8f..916a464142b 100644
--- a/make/autoconf/build-aux/config.guess
+++ b/make/autoconf/build-aux/config.guess
@@ -56,11 +56,11 @@ if test $? = 0; then
fi
# Test and fix wsl
-echo $OUT | grep x86_64-unknown-linux-gnu > /dev/null 2> /dev/null
+echo $OUT | grep unknown-linux-gnu > /dev/null 2> /dev/null
if test $? = 0; then
uname -r | grep -i microsoft > /dev/null 2> /dev/null
if test $? = 0; then
- OUT="x86_64-pc-wsl"
+ OUT=`echo $OUT | sed -e 's/unknown-linux-gnu/pc-wsl/'`
fi
fi
diff --git a/make/autoconf/build-aux/config.sub b/make/autoconf/build-aux/config.sub
index d0dd001abdf..8f5a5cf5244 100644
--- a/make/autoconf/build-aux/config.sub
+++ b/make/autoconf/build-aux/config.sub
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,13 @@ if echo $* | grep linux-musl >/dev/null ; then
fi
# Allow wsl
-if echo $* | grep x86_64-pc-wsl >/dev/null ; then
+if echo $* | grep pc-wsl >/dev/null ; then
+ echo $*
+ exit
+fi
+
+# Allow msys2
+if echo $* | grep pc-msys >/dev/null ; then
echo $*
exit
fi
@@ -49,7 +55,7 @@ if ! echo $* | grep '^aarch64-' >/dev/null ; then
fi
while test $# -gt 0 ; do
- case $1 in
+ case $1 in
-- ) # Stop option processing
shift; break ;;
aarch64-* )
diff --git a/make/autoconf/build-performance.m4 b/make/autoconf/build-performance.m4
index 065b3027d6f..52d143e5ab9 100644
--- a/make/autoconf/build-performance.m4
+++ b/make/autoconf/build-performance.m4
@@ -175,7 +175,7 @@ AC_DEFUN([BPERF_SETUP_CCACHE],
if test "x$TOOLCHAIN_PATH" != x; then
PATH=$TOOLCHAIN_PATH:$PATH
fi
- UTIL_PATH_PROGS(CCACHE, ccache)
+ UTIL_LOOKUP_PROGS(CCACHE, ccache)
PATH="$OLD_PATH"
AC_MSG_CHECKING([if ccache is available])
diff --git a/make/autoconf/compare.sh.in b/make/autoconf/compare.sh.in
index a57262689d3..1c48f800c8a 100644
--- a/make/autoconf/compare.sh.in
+++ b/make/autoconf/compare.sh.in
@@ -1,6 +1,6 @@
#!/bin/bash
#
-# Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -43,7 +43,7 @@ export CMP="@CMP@"
export CP="@CP@"
export CUT="@CUT@"
export DIFF="@DIFF@"
-export DUMPBIN="@FIXPATH@ @DUMPBIN@"
+export DUMPBIN="@DUMPBIN@"
export EXPR="@EXPR@"
export FILE="@FILE@"
export FIND="@FIND@"
@@ -53,7 +53,6 @@ export LDD="@LDD@"
export LN="@LN@"
export MKDIR="@MKDIR@"
export MV="@MV@"
-export NAWK="@NAWK@"
export NM="@GNM@"
export OBJDUMP="@OBJDUMP@"
export OTOOL="@OTOOL@"
@@ -87,12 +86,10 @@ else
fi
if [ "$OPENJDK_TARGET_OS" = "windows" ]; then
- if [ "$OPENJDK_BUILD_OS_ENV" = "windows.wsl" ]; then
- export FIXPATH_PATH="@VS_PATH_WINDOWS@"
- export WSLENV="$WSLENV:FIXPATH_PATH:DEBUG_FIXPATH"
- else
- export PATH="@VS_PATH@"
+ if [[ $OPENJDK_BUILD_OS_ENV =~ ^windows.wsl ]]; then
+ export WSLENV=PATH/l
fi
+ export PATH="$PATH:@TOOLCHAIN_PATH@"
fi
export HOTSPOT_BUILD_TIME="@HOTSPOT_BUILD_TIME@"
diff --git a/make/autoconf/configure.ac b/make/autoconf/configure.ac
index 695dd57f208..ab0122f7908 100644
--- a/make/autoconf/configure.ac
+++ b/make/autoconf/configure.ac
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -106,6 +106,8 @@ BASIC_SETUP_DEVKIT
# To properly create a configuration name, we need to have the OpenJDK target
# and options (variants and debug level) parsed.
BASIC_SETUP_OUTPUT_DIR
+# After we have the output dir we can finalize the fixpath wrapper
+BASIC_WINDOWS_FINALIZE_FIXPATH
# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY.
HELP_SETUP_DEPENDENCY_HELP
@@ -142,6 +144,7 @@ JDKVER_SETUP_JDK_VERSION_NUMBERS
BOOTJDK_SETUP_BOOT_JDK
BOOTJDK_SETUP_BUILD_JDK
+BOOTJDK_SETUP_DOCS_REFERENCE_JDK
###############################################################################
#
@@ -220,9 +223,6 @@ JDKOPT_SETUP_ADDRESS_SANITIZER
#
###############################################################################
-# After we have toolchain, we can compile fixpath. It's needed by the lib checks.
-BASIC_COMPILE_FIXPATH
-
LIB_DETERMINE_DEPENDENCIES
LIB_SETUP_LIBRARIES
@@ -294,6 +294,7 @@ BASIC_CHECK_LEFTOVER_OVERRIDDEN
CONFIG_STATUS="$CONFIGURESUPPORT_OUTPUTDIR/config.status"
# Create the actual output files. Now the main work of configure is done.
+BASIC_WINDOWS_FINALIZE
AC_OUTPUT
# After AC_OUTPUT, we need to do final work
diff --git a/make/autoconf/flags-cflags.m4 b/make/autoconf/flags-cflags.m4
index 385828e3bb2..7a6dfb74168 100644
--- a/make/autoconf/flags-cflags.m4
+++ b/make/autoconf/flags-cflags.m4
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -130,6 +130,7 @@ AC_DEFUN([FLAGS_SETUP_WARNINGS],
case "${TOOLCHAIN_TYPE}" in
microsoft)
DISABLE_WARNING_PREFIX="-wd"
+ BUILD_CC_DISABLE_WARNING_PREFIX="-wd"
CFLAGS_WARNINGS_ARE_ERRORS="-WX"
WARNINGS_ENABLE_ALL="-W3"
@@ -142,6 +143,7 @@ AC_DEFUN([FLAGS_SETUP_WARNINGS],
gcc)
DISABLE_WARNING_PREFIX="-Wno-"
+ BUILD_CC_DISABLE_WARNING_PREFIX="-Wno-"
CFLAGS_WARNINGS_ARE_ERRORS="-Werror"
# Additional warnings that are not activated by -Wall and -Wextra
@@ -153,7 +155,6 @@ AC_DEFUN([FLAGS_SETUP_WARNINGS],
WARNINGS_ENABLE_ALL_CXXFLAGS="$WARNINGS_ENABLE_ALL_CFLAGS $WARNINGS_ENABLE_ADDITIONAL_CXX"
DISABLED_WARNINGS="unused-parameter unused"
- BUILD_CC_DISABLE_WARNING_PREFIX="-Wno-"
;;
clang)
@@ -604,25 +605,6 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_HELPER],
fi
fi
- # Optional POSIX functionality needed by the JVM
- #
- # Check if clock_gettime is available and in which library. This indicates
- # availability of CLOCK_MONOTONIC for hotspot. But we don't need to link, so
- # don't let it update LIBS.
- save_LIBS="$LIBS"
- AC_SEARCH_LIBS(clock_gettime, rt, [HAS_CLOCK_GETTIME=true], [])
- if test "x$LIBS" = "x-lrt "; then
- CLOCK_GETTIME_IN_LIBRT=true
- fi
- LIBS="$save_LIBS"
-
- if test "x$HAS_CLOCK_GETTIME" = "xtrue"; then
- OS_CFLAGS_JVM="$OS_CFLAGS_JVM -DSUPPORTS_CLOCK_MONOTONIC"
- if test "x$CLOCK_GETTIME_IN_LIBRT" = "xtrue"; then
- OS_CFLAGS_JVM="$OS_CFLAGS_JVM -DNEEDS_LIBRT"
- fi
- fi
-
# Extra flags needed when building optional static versions of certain
# JDK libraries.
STATIC_LIBS_CFLAGS="-DSTATIC_BUILD=1"
@@ -683,9 +665,21 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
# CFLAGS PER CPU
if test "x$TOOLCHAIN_TYPE" = xgcc || test "x$TOOLCHAIN_TYPE" = xclang; then
# COMMON to gcc and clang
+ AC_MSG_CHECKING([if $1 is x86])
if test "x$FLAGS_CPU" = xx86; then
- # Force compatibility with i586 on 32 bit intel platforms.
- $1_CFLAGS_CPU="-march=i586"
+ AC_MSG_RESULT([yes])
+ AC_MSG_CHECKING([if control flow protection is enabled by additional compiler flags])
+ if echo "${EXTRA_CFLAGS}${EXTRA_CXXFLAGS}${EXTRA_ASFLAGS}" | ${GREP} -q 'fcf-protection' ; then
+ # cf-protection requires CMOV and thus i686
+ $1_CFLAGS_CPU="-march=i686"
+ AC_MSG_RESULT([yes, forcing ${$1_CFLAGS_CPU}])
+ else
+ # Force compatibility with i586 on 32 bit intel platforms.
+ $1_CFLAGS_CPU="-march=i586"
+ AC_MSG_RESULT([no, forcing ${$1_CFLAGS_CPU}])
+ fi
+ else
+ AC_MSG_RESULT([no])
fi
fi
@@ -784,8 +778,7 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
test "x$ENABLE_REPRODUCIBLE_BUILD" = xtrue; then
# There is a known issue with the pathmap if the mapping is made to the
# empty string. Add a minimal string "s" as prefix to work around this.
- workspace_root_win="${WORKSPACE_ROOT%/}"
- UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([workspace_root_win])
+ workspace_root_win=`$FIXPATH_BASE print "${WORKSPACE_ROOT%/}"`
# PATHMAP_FLAGS is also added to LDFLAGS in flags-ldflags.m4.
PATHMAP_FLAGS="-pathmap:${workspace_root_win//\//\\\\}=s \
-pathmap:${workspace_root_win}=s"
diff --git a/make/autoconf/flags-ldflags.m4 b/make/autoconf/flags-ldflags.m4
index ec2a4c49e7f..b5465e85115 100644
--- a/make/autoconf/flags-ldflags.m4
+++ b/make/autoconf/flags-ldflags.m4
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -70,7 +70,7 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER],
# Linux : remove unused code+data in link step
if test "x$ENABLE_LINKTIME_GC" = xtrue; then
if test "x$OPENJDK_TARGET_CPU" = xs390x; then
- BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,--gc-sections -Wl,--print-gc-sections"
+ BASIC_LDFLAGS="$BASIC_LDFLAGS -Wl,--gc-sections"
else
BASIC_LDFLAGS_JDK_ONLY="$BASIC_LDFLAGS_JDK_ONLY -Wl,--gc-sections"
fi
@@ -106,7 +106,14 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_HELPER],
# Assume clang or gcc.
# FIXME: We should really generalize SET_SHARED_LIBRARY_ORIGIN instead.
OS_LDFLAGS_JVM_ONLY="-Wl,-rpath,@loader_path/. -Wl,-rpath,@loader_path/.."
- OS_LDFLAGS_JDK_ONLY="-mmacosx-version-min=$MACOSX_VERSION_MIN"
+ OS_LDFLAGS="-mmacosx-version-min=$MACOSX_VERSION_MIN"
+ fi
+ if test "x$OPENJDK_TARGET_OS" = xlinux; then
+ # Hotspot needs to link librt to get the clock_* functions.
+ # But once our supported minimum build and runtime platform
+ # has glibc 2.17, this can be removed as the functions are
+ # in libc.
+ OS_LDFLAGS_JVM_ONLY="-lrt"
fi
fi
@@ -195,7 +202,7 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_CPU_DEP],
# JVM_VARIANT_PATH depends on if this is build or target...
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
- $1_LDFLAGS_JDK_LIBPATH="-libpath:${OUTPUTDIR}/support/modules_libs/java.base"
+ $1_LDFLAGS_JDK_LIBPATH="-libpath:\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base"
else
$1_LDFLAGS_JDK_LIBPATH="-L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base \
-L\$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/${$1_JVM_VARIANT_PATH}"
@@ -203,14 +210,14 @@ AC_DEFUN([FLAGS_SETUP_LDFLAGS_CPU_DEP],
# Export variables according to old definitions, prefix with $2 if present.
LDFLAGS_JDK_COMMON="$BASIC_LDFLAGS $BASIC_LDFLAGS_JDK_ONLY \
- $OS_LDFLAGS_JDK_ONLY $DEBUGLEVEL_LDFLAGS_JDK_ONLY ${$2EXTRA_LDFLAGS}"
+ $OS_LDFLAGS $DEBUGLEVEL_LDFLAGS_JDK_ONLY ${$2EXTRA_LDFLAGS}"
$2LDFLAGS_JDKLIB="$LDFLAGS_JDK_COMMON $BASIC_LDFLAGS_JDK_LIB_ONLY \
${$1_LDFLAGS_JDK_LIBPATH} $SHARED_LIBRARY_FLAGS \
$REPRODUCIBLE_LDFLAGS $FILE_MACRO_LDFLAGS"
$2LDFLAGS_JDKEXE="$LDFLAGS_JDK_COMMON $EXECUTABLE_LDFLAGS \
${$1_CPU_EXECUTABLE_LDFLAGS} $REPRODUCIBLE_LDFLAGS $FILE_MACRO_LDFLAGS"
- $2JVM_LDFLAGS="$BASIC_LDFLAGS $BASIC_LDFLAGS_JVM_ONLY $OS_LDFLAGS_JVM_ONLY \
+ $2JVM_LDFLAGS="$BASIC_LDFLAGS $BASIC_LDFLAGS_JVM_ONLY $OS_LDFLAGS $OS_LDFLAGS_JVM_ONLY \
$DEBUGLEVEL_LDFLAGS $DEBUGLEVEL_LDFLAGS_JVM_ONLY $BASIC_LDFLAGS_ONLYCXX \
${$1_CPU_LDFLAGS} ${$1_CPU_LDFLAGS_JVM_ONLY} ${$2EXTRA_LDFLAGS} \
$REPRODUCIBLE_LDFLAGS $FILE_MACRO_LDFLAGS"
diff --git a/make/autoconf/flags.m4 b/make/autoconf/flags.m4
index 0301e64dc17..875572c96b3 100644
--- a/make/autoconf/flags.m4
+++ b/make/autoconf/flags.m4
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -130,7 +130,7 @@ AC_DEFUN([FLAGS_SETUP_MACOSX_VERSION],
# of the OS. It currently has a hard coded value. Setting this also limits
# exposure to API changes in header files. Bumping this is likely to
# require code changes to build.
- MACOSX_VERSION_MIN=10.9.0
+ MACOSX_VERSION_MIN=10.12.0
MACOSX_VERSION_MIN_NODOTS=${MACOSX_VERSION_MIN//\./}
AC_SUBST(MACOSX_VERSION_MIN)
@@ -226,6 +226,14 @@ AC_DEFUN([FLAGS_SETUP_SYSROOT_FLAGS],
fi
fi
+ # For the microsoft toolchain, we need to get the SYSROOT flags from the
+ # Visual Studio environment. Currently we cannot handle this as a separate
+ # build toolchain.
+ if test "x$1" = x && test "x$OPENJDK_BUILD_OS" = "xwindows" \
+ && test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
+ TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV
+ fi
+
AC_SUBST($1SYSROOT_CFLAGS)
AC_SUBST($1SYSROOT_LDFLAGS)
])
@@ -234,6 +242,7 @@ AC_DEFUN_ONCE([FLAGS_PRE_TOOLCHAIN],
[
# We should always include user supplied flags
FLAGS_SETUP_USER_SUPPLIED_FLAGS
+
# The sysroot flags are needed for configure to be able to run the compilers
FLAGS_SETUP_SYSROOT_FLAGS
@@ -258,10 +267,6 @@ AC_DEFUN_ONCE([FLAGS_PRE_TOOLCHAIN],
GLOBAL_LDFLAGS="$MACHINE_FLAG $SYSROOT_LDFLAGS $USER_LDFLAGS"
# FIXME: Don't really know how to do with this, but this was the old behavior
GLOBAL_CPPFLAGS="$SYSROOT_CFLAGS"
- AC_SUBST(GLOBAL_CFLAGS)
- AC_SUBST(GLOBAL_CXXFLAGS)
- AC_SUBST(GLOBAL_LDFLAGS)
- AC_SUBST(GLOBAL_CPPFLAGS)
# FIXME: For compatilibity, export this as EXTRA_CFLAGS for now.
EXTRA_CFLAGS="$MACHINE_FLAG $USER_CFLAGS"
@@ -280,6 +285,14 @@ AC_DEFUN_ONCE([FLAGS_PRE_TOOLCHAIN],
CXXFLAGS="$GLOBAL_CXXFLAGS"
LDFLAGS="$GLOBAL_LDFLAGS"
CPPFLAGS="$GLOBAL_CPPFLAGS"
+
+ if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
+ # When autoconf sends both compiler and linker flags to cl.exe at the same
+ # time, linker flags must be last at the command line. Achieve this by
+ # moving them to LIBS.
+ LIBS="$LIBS -link $LDFLAGS"
+ LDFLAGS=""
+ fi
])
AC_DEFUN([FLAGS_SETUP_TOOLCHAIN_CONTROL],
@@ -370,9 +383,6 @@ AC_DEFUN_ONCE([FLAGS_POST_TOOLCHAIN],
BUILD_SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS"
fi
fi
- AC_SUBST(BUILD_SYSROOT_CFLAGS)
- AC_SUBST(BUILD_SYSROOT_LDFLAGS)
-
])
AC_DEFUN([FLAGS_SETUP_FLAGS],
diff --git a/make/autoconf/help.m4 b/make/autoconf/help.m4
index 1f09ab26b44..7de6398bbd6 100644
--- a/make/autoconf/help.m4
+++ b/make/autoconf/help.m4
@@ -25,7 +25,7 @@
AC_DEFUN_ONCE([HELP_SETUP_DEPENDENCY_HELP],
[
- AC_CHECK_PROGS(PKGHANDLER, zypper apt-get yum brew port pkgutil pkgadd)
+ UTIL_LOOKUP_PROGS(PKGHANDLER, zypper apt-get yum brew port pkgutil pkgadd pacman)
])
AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY],
@@ -38,8 +38,6 @@ AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY],
HELP_MSG="OpenJDK distributions are available at http://jdk.java.net/."
elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
cygwin_help $MISSING_DEPENDENCY
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- msys_help $MISSING_DEPENDENCY
else
PKGHANDLER_COMMAND=
@@ -58,6 +56,8 @@ AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY],
pkgadd_help $MISSING_DEPENDENCY ;;
zypper)
zypper_help $MISSING_DEPENDENCY ;;
+ pacman)
+ pacman_help $MISSING_DEPENDENCY ;;
esac
if test "x$PKGHANDLER_COMMAND" != x; then
@@ -83,10 +83,6 @@ cygwin_help() {
esac
}
-msys_help() {
- PKGHANDLER_COMMAND=""
-}
-
apt_help() {
case $1 in
reduced)
@@ -165,6 +161,17 @@ brew_help() {
esac
}
+pacman_help() {
+ case $1 in
+ unzip)
+ PKGHANDLER_COMMAND="sudo pacman -S unzip" ;;
+ zip)
+ PKGHANDLER_COMMAND="sudo pacman -S zip" ;;
+ make)
+ PKGHANDLER_COMMAND="sudo pacman -S make" ;;
+ esac
+}
+
port_help() {
PKGHANDLER_COMMAND=""
}
@@ -238,6 +245,7 @@ AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS],
printf "\n"
printf "Configuration summary:\n"
+ printf "* Name: $CONF_NAME\n"
printf "* Debug level: $DEBUG_LEVEL\n"
printf "* HS debug level: $HOTSPOT_DEBUG_LEVEL\n"
printf "* JVM variants: $JVM_VARIANTS\n"
@@ -256,16 +264,13 @@ AC_DEFUN_ONCE([HELP_PRINT_SUMMARY_AND_WARNINGS],
printf "\n"
printf "Tools summary:\n"
if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
- printf "* Environment: $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION. Windows version $WINDOWS_VERSION"
- if test "x$WINDOWS_ENV_ROOT_PATH" != "x"; then
- printf ". Root at $WINDOWS_ENV_ROOT_PATH"
- fi
- printf "\n"
+ printf "* Environment: %s version %s; windows version %s; prefix \"%s\"; root \"%s\"\n" \
+ "$WINENV_VENDOR" "$WINENV_VERSION" "$WINDOWS_VERSION" "$WINENV_PREFIX" "$WINENV_ROOT"
fi
printf "* Boot JDK: $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
printf "* Toolchain: $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
- printf "* C Compiler: Version $CC_VERSION_NUMBER (at $CC)\n"
- printf "* C++ Compiler: Version $CXX_VERSION_NUMBER (at $CXX)\n"
+ printf "* C Compiler: Version $CC_VERSION_NUMBER (at ${CC#"$FIXPATH "})\n"
+ printf "* C++ Compiler: Version $CXX_VERSION_NUMBER (at ${CXX#"$FIXPATH "})\n"
printf "\n"
printf "Build performance summary:\n"
diff --git a/make/autoconf/jdk-options.m4 b/make/autoconf/jdk-options.m4
index a112a78d624..6f29078bbaf 100644
--- a/make/autoconf/jdk-options.m4
+++ b/make/autoconf/jdk-options.m4
@@ -388,9 +388,9 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_CODE_COVERAGE],
UTIL_FIXUP_PATH(JCOV_HOME)
if test "x$with_jcov_input_jdk" != "x" ; then
JCOV_INPUT_JDK="$with_jcov_input_jdk"
- if test ! -f "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX"; then
+ if test ! -f "$JCOV_INPUT_JDK/bin/java" && test ! -f "$JCOV_INPUT_JDK/bin/java.exe"; then
AC_MSG_RESULT([fail])
- AC_MSG_ERROR([Invalid JDK bundle: "$JCOV_INPUT_JDK/bin/java$EXE_SUFFIX" does not exist])
+ AC_MSG_ERROR([Invalid JDK bundle: "$JCOV_INPUT_JDK/bin/java" does not exist])
fi
UTIL_FIXUP_PATH(JCOV_INPUT_JDK)
fi
@@ -640,7 +640,7 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_REPRODUCIBLE_BUILD],
SOURCE_DATE=$($DATE +"%s")
AC_MSG_RESULT([$SOURCE_DATE, from 'current'])
elif test "x$with_source_date" = xversion; then
- # Use the date from version-numbers
+ # Use the date from version-numbers.conf
UTIL_GET_EPOCH_TIMESTAMP(SOURCE_DATE, $DEFAULT_VERSION_DATE)
if test "x$SOURCE_DATE" = x; then
AC_MSG_RESULT([unavailable])
@@ -664,10 +664,27 @@ AC_DEFUN_ONCE([JDKOPT_SETUP_REPRODUCIBLE_BUILD],
fi
fi
- UTIL_ARG_ENABLE(NAME: reproducible-build, DEFAULT: $with_source_date_present,
+ REPRODUCIBLE_BUILD_DEFAULT=$with_source_date_present
+
+ if test "x$OPENJDK_BUILD_OS" = xwindows && \
+ test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = xfalse; then
+ # To support banning absolute paths on Windows, we must use the -pathmap
+ # method, which requires reproducible builds.
+ REPRODUCIBLE_BUILD_DEFAULT=true
+ fi
+
+ UTIL_ARG_ENABLE(NAME: reproducible-build, DEFAULT: $REPRODUCIBLE_BUILD_DEFAULT,
RESULT: ENABLE_REPRODUCIBLE_BUILD,
DESC: [enable reproducible builds (not yet fully functional)],
- DEFAULT_DESC: [enabled if --with-source-date is given])
+ DEFAULT_DESC: [enabled if --with-source-date is given or on Windows without absolute paths])
+
+ if test "x$OPENJDK_BUILD_OS" = xwindows && \
+ test "x$ALLOW_ABSOLUTE_PATHS_IN_OUTPUT" = xfalse && \
+ test "x$ENABLE_REPRODUCIBLE_BUILD" = xfalse; then
+ AC_MSG_NOTICE([On Windows it is not possible to combine --disable-reproducible-builds])
+ AC_MSG_NOTICE([with --disable-absolute-paths-in-output.])
+ AC_MSG_ERROR([Cannot continue])
+ fi
AC_SUBST(SOURCE_DATE)
AC_SUBST(ENABLE_REPRODUCIBLE_BUILD)
diff --git a/make/autoconf/jdk-version.m4 b/make/autoconf/jdk-version.m4
index c5e23937ac6..f61478b85fa 100644
--- a/make/autoconf/jdk-version.m4
+++ b/make/autoconf/jdk-version.m4
@@ -58,7 +58,9 @@ AC_DEFUN([JDKVER_CHECK_AND_SET_NUMBER],
AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
[
# Source the version numbers file
- . $AUTOCONF_DIR/version-numbers
+ . $TOPDIR/make/conf/version-numbers.conf
+ # Source the branding file
+ . $TOPDIR/make/conf/branding.conf
# Some non-version number information is set in that file
AC_SUBST(LAUNCHER_NAME)
@@ -79,7 +81,7 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
# Set JDK_RC_NAME to a custom value if '--with-jdk-rc-name' was used and is not empty.
JDK_RC_NAME="$with_jdk_rc_name"
else
- # Otherwise calculate from "version-numbers" included above.
+ # Otherwise calculate from "branding.conf" included above.
JDK_RC_NAME="$PRODUCT_NAME $JDK_RC_PLATFORM_NAME"
fi
AC_SUBST(JDK_RC_NAME)
@@ -94,7 +96,7 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
AC_MSG_ERROR([--with-vendor-name contains non-printing characters: $with_vendor_name])
elif test "x$with_vendor_name" != x; then
# Only set COMPANY_NAME if '--with-vendor-name' was used and is not empty.
- # Otherwise we will use the value from "version-numbers" included above.
+ # Otherwise we will use the value from "branding.conf" included above.
COMPANY_NAME="$with_vendor_name"
fi
AC_SUBST(COMPANY_NAME)
@@ -108,7 +110,7 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
AC_MSG_ERROR([--with-vendor-url contains non-printing characters: $with_vendor_url])
elif test "x$with_vendor_url" != x; then
# Only set VENDOR_URL if '--with-vendor-url' was used and is not empty.
- # Otherwise we will use the value from "version-numbers" included above.
+ # Otherwise we will use the value from "branding.conf" included above.
VENDOR_URL="$with_vendor_url"
fi
AC_SUBST(VENDOR_URL)
@@ -122,7 +124,7 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
AC_MSG_ERROR([--with-vendor-bug-url contains non-printing characters: $with_vendor_bug_url])
elif test "x$with_vendor_bug_url" != x; then
# Only set VENDOR_URL_BUG if '--with-vendor-bug-url' was used and is not empty.
- # Otherwise we will use the value from "version-numbers" included above.
+ # Otherwise we will use the value from "branding.conf" included above.
VENDOR_URL_BUG="$with_vendor_bug_url"
fi
AC_SUBST(VENDOR_URL_BUG)
@@ -136,7 +138,7 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
AC_MSG_ERROR([--with-vendor-vm-bug-url contains non-printing characters: $with_vendor_vm_bug_url])
elif test "x$with_vendor_vm_bug_url" != x; then
# Only set VENDOR_URL_VM_BUG if '--with-vendor-vm-bug-url' was used and is not empty.
- # Otherwise we will use the value from "version-numbers" included above.
+ # Otherwise we will use the value from "branding.conf" included above.
VENDOR_URL_VM_BUG="$with_vendor_vm_bug_url"
fi
AC_SUBST(VENDOR_URL_VM_BUG)
@@ -280,7 +282,7 @@ AC_DEFUN_ONCE([JDKVER_SETUP_JDK_VERSION_NUMBERS],
fi
else
if test "x$NO_DEFAULT_VERSION_PARTS" != xtrue; then
- # Default is to get value from version-numbers
+ # Default is to get value from version-numbers.conf
VERSION_FEATURE="$DEFAULT_VERSION_FEATURE"
fi
fi
diff --git a/make/autoconf/libraries.m4 b/make/autoconf/libraries.m4
index e6aafe01550..6ad9715a9fb 100644
--- a/make/autoconf/libraries.m4
+++ b/make/autoconf/libraries.m4
@@ -124,6 +124,20 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBRARIES],
BASIC_JVM_LIBS="$BASIC_JVM_LIBS -lpthread"
fi
+ # Atomic library
+ # 32-bit platforms needs fallback library for 8-byte atomic ops on Zero
+ if HOTSPOT_CHECK_JVM_VARIANT(zero); then
+ if test "x$OPENJDK_TARGET_OS" = xlinux &&
+ (test "x$OPENJDK_TARGET_CPU" = xarm ||
+ test "x$OPENJDK_TARGET_CPU" = xm68k ||
+ test "x$OPENJDK_TARGET_CPU" = xmips ||
+ test "x$OPENJDK_TARGET_CPU" = xmipsel ||
+ test "x$OPENJDK_TARGET_CPU" = xppc ||
+ test "x$OPENJDK_TARGET_CPU" = xsh); then
+ BASIC_JVM_LIBS="$BASIC_JVM_LIBS -latomic"
+ fi
+ fi
+
# perfstat lib
if test "x$OPENJDK_TARGET_OS" = xaix; then
BASIC_JVM_LIBS="$BASIC_JVM_LIBS -lperfstat"
diff --git a/make/autoconf/platform.m4 b/make/autoconf/platform.m4
index 2f39d2b0ca7..1890491773b 100644
--- a/make/autoconf/platform.m4
+++ b/make/autoconf/platform.m4
@@ -206,9 +206,9 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_OS],
VAR_OS=windows
VAR_OS_ENV=windows.wsl
;;
- *mingw*)
+ *msys*)
VAR_OS=windows
- VAR_OS_ENV=windows.msys
+ VAR_OS_ENV=windows.msys2
;;
*aix*)
VAR_OS=aix
diff --git a/make/autoconf/source-dirs.m4 b/make/autoconf/source-dirs.m4
index 8ac7c542cab..ea7d583fba2 100644
--- a/make/autoconf/source-dirs.m4
+++ b/make/autoconf/source-dirs.m4
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -28,9 +28,6 @@ AC_DEFUN_ONCE([SRCDIRS_SETUP_DIRS],
OUTPUTDIR="$OUTPUTDIR"
AC_SUBST(OUTPUTDIR)
JDK_OUTPUTDIR="$OUTPUTDIR/jdk"
-
- # Where are the sources.
- AC_SUBST(TOPDIR)
])
################################################################################
diff --git a/make/autoconf/spec.gmk.in b/make/autoconf/spec.gmk.in
index 63dc9a5767d..bf888e23295 100644
--- a/make/autoconf/spec.gmk.in
+++ b/make/autoconf/spec.gmk.in
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -131,20 +131,24 @@ ENABLE_REPRODUCIBLE_BUILD := @ENABLE_REPRODUCIBLE_BUILD@
LIBM:=@LIBM@
LIBDL:=@LIBDL@
-# colon or semicolon
-PATH_SEP:=@PATH_SEP@
+WINENV_ROOT := @WINENV_ROOT@
+WINENV_PREFIX := @WINENV_PREFIX@
+
+ifneq ($(findstring windows.wsl, @OPENJDK_BUILD_OS_ENV@), )
+ # Tell WSL to convert PATH between linux and windows
+ export WSLENV := PATH/l
+else ifeq (@OPENJDK_BUILD_OS_ENV@, windows.msys2)
+ # Prohibit msys2 from attemping any path wrangling
+ export MSYS2_ARG_CONV_EXCL := "*"
+endif
# Save the original path before replacing it with the Visual Studio tools
-ORIGINAL_PATH:=@ORIGINAL_PATH@
-ifeq ($(OPENJDK_TARGET_OS), windows)
- # On Windows, the Visual Studio toolchain needs the PATH to be adjusted
- # to include Visual Studio tools (this needs to be in cygwin/msys style).
- ifeq ($(OPENJDK_TARGET_OS_ENV), windows.wsl)
- export FIXPATH_PATH:=@VS_PATH_WINDOWS@
- export WSLENV:=$(WSLENV):FIXPATH_PATH:DEBUG_FIXPATH
- else
- export PATH:=@VS_PATH@
- endif
+ORIGINAL_PATH := @ORIGINAL_PATH@
+
+ifeq (@TOOLCHAIN_TYPE@, microsoft)
+ # The Visual Studio toolchain needs the PATH to be adjusted to include
+ # Visual Studio tools.
+ export PATH := @TOOLCHAIN_PATH@:$(PATH)
endif
SYSROOT_CFLAGS := @SYSROOT_CFLAGS@
@@ -251,7 +255,7 @@ VERSION_CFLAGS := \
#
ifneq ($(COMPANY_NAME),)
- # COMPANY_NAME is set to "N/A" in $AUTOCONF_DIR/version-numbers by default,
+ # COMPANY_NAME is set to "N/A" in make/conf/branding.conf by default,
# but can be customized with the '--with-vendor-name' configure option.
# Only export "VENDOR" to the build if COMPANY_NAME contains a real value.
# Otherwise the default value for VENDOR, which is used to set the "java.vendor"
@@ -488,7 +492,7 @@ ADLC_LANGSTD_CXXFLAGS=@ADLC_LANGSTD_CXXFLAGS@
ADLC_LDFLAGS=@ADLC_LDFLAGS@
# Tools that potentially need to be cross compilation aware.
-CC:=@FIXPATH@ @CCACHE@ @ICECC@ @CC@
+CC := @CCACHE@ @ICECC@ @CC@
# CFLAGS used to compile the jdk native libraries (C-code)
CFLAGS_JDKLIB:=@CFLAGS_JDKLIB@
@@ -510,12 +514,12 @@ EXTRA_CXXFLAGS = @EXTRA_CXXFLAGS@
EXTRA_LDFLAGS = @EXTRA_LDFLAGS@
EXTRA_ASFLAGS = @EXTRA_ASFLAGS@
-CXX:=@FIXPATH@ @CCACHE@ @ICECC@ @CXX@
+CXX := @CCACHE@ @ICECC@ @CXX@
-CPP:=@FIXPATH@ @CPP@
+CPP := @CPP@
# The linker can be gcc or ld on unix systems, or link.exe on windows systems.
-LD:=@FIXPATH@ @LD@
+LD := @LD@
# Linker used by the jaotc tool for AOT compilation.
LD_JAOTC:=@LD_JAOTC@
@@ -535,7 +539,7 @@ JDKEXE_LIBS:=@JDKEXE_LIBS@
LDFLAGS_CXX_JDK:=@LDFLAGS_CXX_JDK@
# Sometimes a different linker is needed for c++ libs
-LDCXX:=@FIXPATH@ @LDCXX@
+LDCXX := @LDCXX@
# The flags for linking libstdc++ linker.
LIBCXX:=@LIBCXX@
@@ -544,22 +548,22 @@ LDFLAGS_TESTEXE:=@LDFLAGS_TESTEXE@
# BUILD_CC/BUILD_LD is a compiler/linker that generates code that is runnable on the
# build platform.
-BUILD_CC:=@FIXPATH@ @BUILD_ICECC@ @BUILD_CC@
-BUILD_CXX:=@FIXPATH@ @BUILD_ICECC@ @BUILD_CXX@
-BUILD_LD:=@FIXPATH@ @BUILD_LD@
-BUILD_LDCXX:=@FIXPATH@ @BUILD_LDCXX@
-BUILD_AS:=@FIXPATH@ @BUILD_AS@
-BUILD_AR:=@FIXPATH@ @BUILD_AR@
-BUILD_NM:=@FIXPATH@ @BUILD_NM@
+BUILD_CC := @BUILD_ICECC@ @BUILD_CC@
+BUILD_CXX := @BUILD_ICECC@ @BUILD_CXX@
+BUILD_LD := @BUILD_LD@
+BUILD_LDCXX := @BUILD_LDCXX@
+BUILD_AS := @BUILD_AS@
+BUILD_AR := @BUILD_AR@
+BUILD_NM := @BUILD_NM@
BUILD_OBJCOPY:=@BUILD_OBJCOPY@
BUILD_STRIP:=@BUILD_STRIP@
BUILD_SYSROOT_CFLAGS:=@BUILD_SYSROOT_CFLAGS@
BUILD_SYSROOT_LDFLAGS:=@BUILD_SYSROOT_LDFLAGS@
-AS:=@FIXPATH@ @AS@
+AS := @AS@
# AR is used to create a static library (is ar in unix, lib.exe in windows)
-AR:=@FIXPATH@ @AR@
+AR := @AR@
ARFLAGS:=@ARFLAGS@
NM:=@NM@
@@ -608,7 +612,7 @@ STATIC_LIBRARY=@STATIC_LIBRARY@
LIBRARY_PREFIX:=@LIBRARY_PREFIX@
SHARED_LIBRARY_SUFFIX:=@SHARED_LIBRARY_SUFFIX@
STATIC_LIBRARY_SUFFIX:=@STATIC_LIBRARY_SUFFIX@
-EXE_SUFFIX:=@EXE_SUFFIX@
+EXECUTABLE_SUFFIX:=@EXECUTABLE_SUFFIX@
OBJ_SUFFIX:=@OBJ_SUFFIX@
STATIC_BUILD:=@STATIC_BUILD@
@@ -629,24 +633,23 @@ JAVADOC_CMD:=@JAVADOC@
JAR_CMD:=@JAR@
JLINK_CMD := @JLINK@
JMOD_CMD := @JMOD@
-JARSIGNER_CMD:=@JARSIGNER@
# These variables are meant to be used. They are defined with = instead of := to make
# it possible to override only the *_CMD variables.
-JAVA=@FIXPATH@ $(JAVA_CMD) $(JAVA_FLAGS_BIG) $(JAVA_FLAGS)
-JAVA_SMALL=@FIXPATH@ $(JAVA_CMD) $(JAVA_FLAGS_SMALL) $(JAVA_FLAGS)
-JAVA_DETACH =@FIXPATH@ @FIXPATH_DETACH_FLAG@ $(JAVA_CMD) $(JAVA_FLAGS_BIG) $(JAVA_FLAGS)
-JAVAC=@FIXPATH@ $(JAVAC_CMD)
-JAVADOC=@FIXPATH@ $(JAVADOC_CMD)
-JAR=@FIXPATH@ $(JAR_CMD)
-JLINK = @FIXPATH@ $(JLINK_CMD)
-JMOD = @FIXPATH@ $(JMOD_CMD) $(JAVA_TOOL_FLAGS_SMALL)
-JARSIGNER=@FIXPATH@ $(JARSIGNER_CMD)
+JAVA = $(JAVA_CMD) $(JAVA_FLAGS_BIG) $(JAVA_FLAGS)
+JAVA_SMALL = $(JAVA_CMD) $(JAVA_FLAGS_SMALL) $(JAVA_FLAGS)
+JAVAC = $(JAVAC_CMD)
+JAVADOC = $(JAVADOC_CMD)
+JAR = $(JAR_CMD)
+JLINK = $(JLINK_CMD)
+JMOD = $(JMOD_CMD) $(JAVA_TOOL_FLAGS_SMALL)
BUILD_JAVA_FLAGS := @BOOTCYCLE_JVM_ARGS_BIG@
BUILD_JAVA=@FIXPATH@ $(BUILD_JDK)/bin/java $(BUILD_JAVA_FLAGS)
BUILD_JAVAC=@FIXPATH@ $(BUILD_JDK)/bin/javac
BUILD_JAR=@FIXPATH@ $(BUILD_JDK)/bin/jar
+DOCS_REFERENCE_JAVADOC := @DOCS_REFERENCE_JAVADOC@
+
# Interim langtools modules and arguments
INTERIM_LANGTOOLS_BASE_MODULES := java.compiler jdk.compiler jdk.javadoc
INTERIM_LANGTOOLS_MODULES := $(addsuffix .interim, $(INTERIM_LANGTOOLS_BASE_MODULES))
@@ -655,6 +658,8 @@ INTERIM_LANGTOOLS_ADD_EXPORTS := \
--add-exports java.base/jdk.internal.jmod=jdk.compiler.interim \
--add-exports java.base/jdk.internal.misc=jdk.compiler.interim \
--add-exports java.base/sun.invoke.util=jdk.compiler.interim \
+ --add-exports java.base/jdk.internal.javac=java.compiler.interim \
+ --add-exports java.base/jdk.internal.javac=jdk.compiler.interim \
#
INTERIM_LANGTOOLS_MODULES_COMMA := $(strip $(subst $(SPACE),$(COMMA),$(strip \
$(INTERIM_LANGTOOLS_MODULES))))
@@ -662,6 +667,7 @@ INTERIM_LANGTOOLS_ARGS := \
--limit-modules java.base,jdk.zipfs,$(INTERIM_LANGTOOLS_MODULES_COMMA) \
--add-modules $(INTERIM_LANGTOOLS_MODULES_COMMA) \
--module-path $(BUILDTOOLS_OUTPUTDIR)/interim_langtools_modules \
+ --patch-module java.base=$(BUILDTOOLS_OUTPUTDIR)/gensrc/java.base.interim \
$(INTERIM_LANGTOOLS_ADD_EXPORTS) \
#
JAVAC_MAIN_CLASS = -m jdk.compiler.interim/com.sun.tools.javac.Main
@@ -685,9 +691,7 @@ CCACHE:=@CCACHE@
CD:=cd
CHMOD:=@CHMOD@
CODESIGN:=@CODESIGN@
-COMM:=@COMM@
CP:=@CP@
-CPIO:=@CPIO@
CUT:=@CUT@
DATE:=@DATE@
DIFF:=@DIFF@
@@ -707,9 +711,8 @@ LN:=@LN@
MIG:=@MIG@
MKDIR:=@MKDIR@
MV:=@MV@
-NAWK:=@NAWK@
NICE:=@NICE@
-PANDOC:=@FIXPATH@ @PANDOC@
+PANDOC:=@PANDOC@
PATCH:=@PATCH@
PRINTF:=@PRINTF@
READLINK:=@READLINK@
@@ -725,15 +728,14 @@ TIME:=@TIME@
IS_GNU_TIME:=@IS_GNU_TIME@
TR:=@TR@
TOUCH:=@TOUCH@
-UNIQ:=@UNIQ@
WC:=@WC@
XARGS:=@XARGS@
ZIPEXE:=@ZIPEXE@
UNZIP:=@UNZIP@
-MT:=@FIXPATH@ @MT@
-RC:=@FIXPATH@ @RC@
-DUMPBIN:=@FIXPATH@ @DUMPBIN@
-CYGPATH:=@CYGPATH@
+MT:=@MT@
+RC:=@RC@
+DUMPBIN:=@DUMPBIN@
+PATHTOOL:=@PATHTOOL@
WSLPATH:=@WSLPATH@
LDD:=@LDD@
OTOOL:=@OTOOL@
@@ -750,7 +752,8 @@ JT_HOME:=@JT_HOME@
JIB_HOME:=@JIB_HOME@
XCODEBUILD=@XCODEBUILD@
DTRACE := @DTRACE@
-FIXPATH:=@FIXPATH@
+FIXPATH := @FIXPATH@
+FIXPATH_BASE := @FIXPATH_BASE@
ULIMIT:=@ULIMIT@
TAR_TYPE:=@TAR_TYPE@
diff --git a/make/autoconf/toolchain.m4 b/make/autoconf/toolchain.m4
index 6687cb6cd37..09a79636593 100644
--- a/make/autoconf/toolchain.m4
+++ b/make/autoconf/toolchain.m4
@@ -32,7 +32,7 @@
# compilers and related tools that are used.
########################################################################
-m4_include([toolchain_windows.m4])
+m4_include([toolchain_microsoft.m4])
# All valid toolchains, regardless of platform (used by help.m4)
VALID_TOOLCHAINS_all="gcc clang xlc microsoft"
@@ -179,6 +179,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_FILENAME_PATTERNS],
SHARED_LIBRARY='[$]1.dll'
STATIC_LIBRARY='[$]1.lib'
OBJ_SUFFIX='.obj'
+ EXECUTABLE_SUFFIX='.exe'
else
LIBRARY_PREFIX=lib
SHARED_LIBRARY_SUFFIX='.so'
@@ -186,6 +187,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_FILENAME_PATTERNS],
SHARED_LIBRARY='lib[$]1.so'
STATIC_LIBRARY='lib[$]1.a'
OBJ_SUFFIX='.o'
+ EXECUTABLE_SUFFIX=''
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
# For full static builds, we're overloading the SHARED_LIBRARY
# variables in order to limit the amount of changes required.
@@ -209,6 +211,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_FILENAME_PATTERNS],
AC_SUBST(SHARED_LIBRARY)
AC_SUBST(STATIC_LIBRARY)
AC_SUBST(OBJ_SUFFIX)
+ AC_SUBST(EXECUTABLE_SUFFIX)
])
# Determine which toolchain type to use, and make sure it is valid for this
@@ -292,12 +295,12 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETERMINE_TOOLCHAIN_TYPE],
TOOLCHAIN_CC_BINARY_clang="clang"
TOOLCHAIN_CC_BINARY_gcc="gcc"
- TOOLCHAIN_CC_BINARY_microsoft="cl$EXE_SUFFIX"
+ TOOLCHAIN_CC_BINARY_microsoft="cl"
TOOLCHAIN_CC_BINARY_xlc="xlclang"
TOOLCHAIN_CXX_BINARY_clang="clang++"
TOOLCHAIN_CXX_BINARY_gcc="g++"
- TOOLCHAIN_CXX_BINARY_microsoft="cl$EXE_SUFFIX"
+ TOOLCHAIN_CXX_BINARY_microsoft="cl"
TOOLCHAIN_CXX_BINARY_xlc="xlclang++"
# Use indirect variable referencing
@@ -325,9 +328,6 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETERMINE_TOOLCHAIN_TYPE],
# special setup, e.g. additional paths etc.
AC_DEFUN_ONCE([TOOLCHAIN_PRE_DETECTION],
[
- # FIXME: Is this needed?
- AC_LANG(C++)
-
# Store the CFLAGS etc passed to the configure script.
ORG_CFLAGS="$CFLAGS"
ORG_CXXFLAGS="$CXXFLAGS"
@@ -335,52 +335,26 @@ AC_DEFUN_ONCE([TOOLCHAIN_PRE_DETECTION],
# autoconf magic only relies on PATH, so update it if tools dir is specified
OLD_PATH="$PATH"
- # On Windows, we need to detect the visual studio installation first.
- # This will change the PATH, but we need to keep that new PATH even
- # after toolchain detection is done, since the compiler (on x86) uses
- # it for DLL resolution in runtime.
- if test "x$OPENJDK_BUILD_OS" = "xwindows" \
- && test "x$TOOLCHAIN_TYPE" = "xmicrosoft"; then
- TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- # Append VS_PATH. In WSL, VS_PATH will not contain the WSL env path needed
- # for using basic Unix tools, so need to keep the original PATH.
- UTIL_APPEND_TO_PATH(PATH, $VS_PATH)
- UTIL_APPEND_TO_PATH(WSLENV, "PATH/l:LIB:INCLUDE")
- export WSLENV
- else
- # Reset path to VS_PATH. It will include everything that was on PATH at the time we
- # ran TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV.
- PATH="$VS_PATH"
- fi
- # The microsoft toolchain also requires INCLUDE and LIB to be set.
- export INCLUDE="$VS_INCLUDE"
- export LIB="$VS_LIB"
- else
- if test "x$XCODE_VERSION_OUTPUT" != x; then
- # For Xcode, we set the Xcode version as TOOLCHAIN_VERSION
- TOOLCHAIN_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | $CUT -f 2 -d ' '`
- TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode $TOOLCHAIN_VERSION"
- else
- # Currently we do not define this for other toolchains. This might change as the need arise.
- TOOLCHAIN_VERSION=
- fi
+ if test "x$XCODE_VERSION_OUTPUT" != x; then
+ # For Xcode, we set the Xcode version as TOOLCHAIN_VERSION
+ TOOLCHAIN_VERSION=`$ECHO $XCODE_VERSION_OUTPUT | $CUT -f 2 -d ' '`
+ TOOLCHAIN_DESCRIPTION="$TOOLCHAIN_DESCRIPTION from Xcode $TOOLCHAIN_VERSION"
fi
AC_SUBST(TOOLCHAIN_VERSION)
- # Finally add TOOLCHAIN_PATH at the beginning, to allow --with-tools-dir to
+ # Finally prepend TOOLCHAIN_PATH to the PATH, to allow --with-tools-dir to
# override all other locations.
if test "x$TOOLCHAIN_PATH" != x; then
- PATH=$TOOLCHAIN_PATH:$PATH
+ export PATH=$TOOLCHAIN_PATH:$PATH
fi
])
# Restore path, etc
AC_DEFUN_ONCE([TOOLCHAIN_POST_DETECTION],
[
- # Restore old path, except for the microsoft toolchain, which requires VS_PATH
- # to remain in place. Otherwise the compiler will not work in some siutations
- # in later configure checks.
+ # Restore old path, except for the microsoft toolchain, which requires the
+ # toolchain path to remain in place. Otherwise the compiler will not work in
+ # some siutations in later configure checks.
if test "x$TOOLCHAIN_TYPE" != "xmicrosoft"; then
PATH="$OLD_PATH"
fi
@@ -427,7 +401,7 @@ AC_DEFUN([TOOLCHAIN_EXTRACT_COMPILER_VERSION],
# First line typically looks something like:
# Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
# but the compiler name may vary depending on locale.
- COMPILER_VERSION_OUTPUT=`"$COMPILER" 2>&1 | $GREP -v 'ERROR.*UtilTranslatePathList' | $HEAD -n 1 | $TR -d '\r'`
+ COMPILER_VERSION_OUTPUT=`$COMPILER 2>&1 1>/dev/null | $HEAD -n 1 | $TR -d '\r'`
# Check that this is likely to be Microsoft CL.EXE.
$ECHO "$COMPILER_VERSION_OUTPUT" | $GREP "Microsoft" > /dev/null
if test $? -ne 0; then
@@ -506,7 +480,7 @@ AC_DEFUN([TOOLCHAIN_FIND_COMPILER],
if test "x`basename [$]$1`" = "x[$]$1"; then
# A command without a complete path is provided, search $PATH.
- AC_PATH_PROGS(POTENTIAL_$1, [$]$1)
+ UTIL_LOOKUP_PROGS(POTENTIAL_$1, [$]$1)
if test "x$POTENTIAL_$1" != x; then
$1=$POTENTIAL_$1
else
@@ -528,34 +502,16 @@ AC_DEFUN([TOOLCHAIN_FIND_COMPILER],
# If we are not cross compiling, then the default compiler name will be
# used.
- $1=
- # If TOOLCHAIN_PATH is set, check for all compiler names in there first
- # before checking the rest of the PATH.
- # FIXME: Now that we prefix the TOOLS_DIR to the PATH in the PRE_DETECTION
- # step, this should not be necessary.
- if test -n "$TOOLCHAIN_PATH"; then
- PATH_save="$PATH"
- PATH="$TOOLCHAIN_PATH"
- AC_PATH_TOOL(TOOLCHAIN_PATH_$1, $SEARCH_LIST)
- $1=$TOOLCHAIN_PATH_$1
- PATH="$PATH_save"
- fi
-
- # AC_PATH_TOOL can't be run multiple times with the same variable,
- # so create a new name for this run.
- if test "x[$]$1" = x; then
- AC_PATH_TOOL(POTENTIAL_$1, $SEARCH_LIST)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(POTENTIAL_$1, $SEARCH_LIST)
+ if test "x$POTENTIAL_$1" != x; then
$1=$POTENTIAL_$1
- fi
-
- if test "x[$]$1" = x; then
+ else
HELP_MSG_MISSING_DEPENDENCY([devkit])
AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG])
fi
fi
# Now we have a compiler binary in $1. Make sure it's okay.
- UTIL_FIXUP_EXECUTABLE($1)
TEST_COMPILER="[$]$1"
AC_MSG_CHECKING([resolved symbolic links for $1])
@@ -596,12 +552,7 @@ AC_DEFUN([TOOLCHAIN_EXTRACT_LD_VERSION],
# There is no specific version flag, but all output starts with a version string.
# First line typically looks something like:
# Microsoft (R) Incremental Linker Version 12.00.31101.0
- # Reset PATH since it can contain a mix of WSL/linux paths and Windows paths from VS,
- # which, in combination with WSLENV, will make the WSL layer complain
- old_path="$PATH"
- PATH=
- LINKER_VERSION_STRING=`$LD 2>&1 | $HEAD -n 1 | $TR -d '\r'`
- PATH="$old_path"
+ LINKER_VERSION_STRING=`$LINKER 2>&1 | $HEAD -n 1 | $TR -d '\r'`
# Extract version number
[ LINKER_VERSION_NUMBER=`$ECHO $LINKER_VERSION_STRING | \
$SED -e 's/.* \([0-9][0-9]*\(\.[0-9][0-9]*\)*\).*/\1/'` ]
@@ -612,7 +563,7 @@ AC_DEFUN([TOOLCHAIN_EXTRACT_LD_VERSION],
# This program is free software; [...]
# If using gold it will look like:
# GNU gold (GNU Binutils 2.30) 1.15
- LINKER_VERSION_STRING=`$LD -Wl,--version 2> /dev/null | $HEAD -n 1`
+ LINKER_VERSION_STRING=`$LINKER -Wl,--version 2> /dev/null | $HEAD -n 1`
# Extract version number
if [ [[ "$LINKER_VERSION_STRING" == *gold* ]] ]; then
[ LINKER_VERSION_NUMBER=`$ECHO $LINKER_VERSION_STRING | \
@@ -629,7 +580,7 @@ AC_DEFUN([TOOLCHAIN_EXTRACT_LD_VERSION],
# or
# GNU ld (GNU Binutils for Ubuntu) 2.26.1
- LINKER_VERSION_STRING=`$LD -Wl,-v 2>&1 | $HEAD -n 1`
+ LINKER_VERSION_STRING=`$LINKER -Wl,-v 2>&1 | $HEAD -n 1`
# Check if we're using the GNU ld
$ECHO "$LINKER_VERSION_STRING" | $GREP "GNU" > /dev/null
if test $? -eq 0; then
@@ -649,6 +600,23 @@ AC_DEFUN([TOOLCHAIN_EXTRACT_LD_VERSION],
AC_MSG_NOTICE([Using $TOOLCHAIN_TYPE $LINKER_NAME version $LINKER_VERSION_NUMBER @<:@$LINKER_VERSION_STRING@:>@])
])
+# Make sure we did not pick up /usr/bin/link, which is the unix-style link
+# executable.
+#
+# $1 = linker to test (LD or BUILD_LD)
+AC_DEFUN(TOOLCHAIN_VERIFY_LINK_BINARY,
+[
+ LINKER=[$]$1
+
+ AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker])
+ $LINKER --version > /dev/null
+ if test $? -eq 0 ; then
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([$LINKER is the winenv link tool. Please check your PATH and rerun configure.])
+ else
+ AC_MSG_RESULT([yes])
+ fi
+])
# Detect the core components of the toolchain, i.e. the compilers (CC and CXX),
# preprocessor (CPP and CXXCPP), the linker (LD), the assembler (AS) and the
# archiver (AR). Verify that the compilers are correct according to the
@@ -693,39 +661,18 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
#
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
# In the Microsoft toolchain we have a separate LD command "link".
- # Make sure we reject /usr/bin/link (as determined in CYGWIN_LINK), which is
- # a cygwin program for something completely different.
- AC_CHECK_PROG([LD], [link$EXE_SUFFIX],[link$EXE_SUFFIX],,, [$CYGWIN_LINK])
- UTIL_FIXUP_EXECUTABLE(LD)
- # Verify that we indeed succeeded with this trick.
- AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker])
-
- # Reset PATH since it can contain a mix of WSL/linux paths and Windows paths from VS,
- # which, in combination with WSLENV, will make the WSL layer complain
- old_path="$PATH"
- PATH=
-
- "$LD" --version > /dev/null
-
- if test $? -eq 0 ; then
- AC_MSG_RESULT([no])
- AC_MSG_ERROR([This is the Cygwin link tool. Please check your PATH and rerun configure.])
- else
- AC_MSG_RESULT([yes])
- fi
-
- PATH="$old_path"
-
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(LD, link)
+ TOOLCHAIN_VERIFY_LINK_BINARY(LD)
LDCXX="$LD"
- # jaotc being a windows program expects the linker to be supplied with exe suffix.
- LD_JAOTC="$LD$EXE_SUFFIX"
+ # jaotc being a windows program expects the linker to be supplied with exe suffix.but without
+ # fixpath
+ LD_JAOTC="${LD##$FIXPATH }"
else
# All other toolchains use the compiler to link.
LD="$CC"
LDCXX="$CXX"
# jaotc expects 'ld' as the linker rather than the compiler.
- UTIL_CHECK_TOOLS([LD_JAOTC], ld)
- UTIL_FIXUP_EXECUTABLE(LD_JAOTC)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(LD_JAOTC, ld)
fi
AC_SUBST(LD)
AC_SUBST(LD_JAOTC)
@@ -746,8 +693,12 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
#
# Setup the assembler (AS)
#
- # FIXME: is this correct for microsoft?
- AS="$CC -c"
+ if test "x$TOOLCHAIN_TYPE" != xmicrosoft; then
+ AS="$CC -c"
+ else
+ # On windows, the assember is "ml.exe"
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(AS, ml)
+ fi
AC_SUBST(AS)
#
@@ -755,13 +706,12 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
#
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
# The corresponding ar tool is lib.exe (used to create static libraries)
- AC_CHECK_PROG([AR], [lib$EXE_SUFFIX],[lib$EXE_SUFFIX],,,)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(AR, lib)
elif test "x$TOOLCHAIN_TYPE" = xgcc; then
- UTIL_CHECK_TOOLS(AR, ar gcc-ar)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(AR, ar gcc-ar)
else
- UTIL_CHECK_TOOLS(AR, ar)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(AR, ar)
fi
- UTIL_FIXUP_EXECUTABLE(AR)
])
# Setup additional tools that is considered a part of the toolchain, but not the
@@ -770,41 +720,26 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_CORE],
AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_EXTRA],
[
if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then
- UTIL_PATH_PROGS(LIPO, lipo)
- UTIL_FIXUP_EXECUTABLE(LIPO)
+ UTIL_LOOKUP_PROGS(LIPO, lipo)
UTIL_REQUIRE_PROGS(OTOOL, otool)
- UTIL_FIXUP_EXECUTABLE(OTOOL)
UTIL_REQUIRE_PROGS(INSTALL_NAME_TOOL, install_name_tool)
- UTIL_FIXUP_EXECUTABLE(INSTALL_NAME_TOOL)
fi
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
- AC_CHECK_PROG([MT], [mt$EXE_SUFFIX], [mt$EXE_SUFFIX],,, [/usr/bin/mt])
- UTIL_FIXUP_EXECUTABLE(MT)
+ # Setup the manifest tool (MT)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(MT, mt)
# Setup the resource compiler (RC)
- AC_CHECK_PROG([RC], [rc$EXE_SUFFIX], [rc$EXE_SUFFIX],,, [/usr/bin/rc])
- UTIL_FIXUP_EXECUTABLE(RC)
- AC_CHECK_PROG([DUMPBIN], [dumpbin$EXE_SUFFIX], [dumpbin$EXE_SUFFIX],,,)
- UTIL_FIXUP_EXECUTABLE(DUMPBIN)
- # We need to check for 'msbuild.exe' because at the place where we expect to
- # find 'msbuild.exe' there's also a directory called 'msbuild' and configure
- # won't find the 'msbuild.exe' executable in that case (and the
- # 'ac_executable_extensions' is unusable due to performance reasons).
- # Notice that we intentionally don't fix up the path to MSBUILD because we
- # will call it in a DOS shell during freetype detection on Windows (see
- # 'LIB_SETUP_FREETYPE' in "libraries.m4"
- AC_CHECK_PROG([MSBUILD], [msbuild$EXE_SUFFIX], [msbuild$EXE_SUFFIX],,,)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(RC, rc)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(DUMPBIN, dumpbin)
fi
if test "x$OPENJDK_TARGET_OS" != xwindows; then
- UTIL_CHECK_TOOLS(STRIP, strip)
- UTIL_FIXUP_EXECUTABLE(STRIP)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(STRIP, strip)
if test "x$TOOLCHAIN_TYPE" = xgcc; then
- UTIL_CHECK_TOOLS(NM, nm gcc-nm)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(NM, nm gcc-nm)
else
- UTIL_CHECK_TOOLS(NM, nm)
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(NM, nm)
fi
- UTIL_FIXUP_EXECUTABLE(NM)
GNM="$NM"
AC_SUBST(GNM)
fi
@@ -812,25 +747,14 @@ AC_DEFUN_ONCE([TOOLCHAIN_DETECT_TOOLCHAIN_EXTRA],
# objcopy is used for moving debug symbols to separate files when
# full debug symbols are enabled.
if test "x$OPENJDK_TARGET_OS" = xlinux; then
- UTIL_CHECK_TOOLS(OBJCOPY, [gobjcopy objcopy])
- # Only call fixup if objcopy was found.
- if test -n "$OBJCOPY"; then
- UTIL_FIXUP_EXECUTABLE(OBJCOPY)
- fi
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(OBJCOPY, gobjcopy objcopy)
fi
- UTIL_CHECK_TOOLS(OBJDUMP, [gobjdump objdump])
- if test "x$OBJDUMP" != x; then
- # Only used for compare.sh; we can live without it. UTIL_FIXUP_EXECUTABLE
- # bails if argument is missing.
- UTIL_FIXUP_EXECUTABLE(OBJDUMP)
- fi
+ UTIL_LOOKUP_TOOLCHAIN_PROGS(OBJDUMP, gobjdump objdump)
case $TOOLCHAIN_TYPE in
gcc|clang)
- UTIL_CHECK_TOOLS(CXXFILT, [c++filt])
- UTIL_CHECK_NONEMPTY(CXXFILT)
- UTIL_FIXUP_EXECUTABLE(CXXFILT)
+ UTIL_REQUIRE_TOOLCHAIN_PROGS(CXXFILT, c++filt)
;;
esac
])
@@ -902,63 +826,57 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_BUILD_COMPILERS],
BUILD_SYSROOT="$BUILD_DEVKIT_SYSROOT"
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
- BUILD_VS_INCLUDE="$BUILD_DEVKIT_VS_INCLUDE"
- BUILD_VS_LIB="$BUILD_DEVKIT_VS_LIB"
+ # For historical reasons, paths are separated by ; in devkit.info
+ BUILD_VS_INCLUDE="${BUILD_DEVKIT_VS_INCLUDE//;/:}"
+ BUILD_VS_LIB="${BUILD_DEVKIT_VS_LIB//;/:}"
- TOOLCHAIN_SETUP_VISUAL_STUDIO_SYSROOT_FLAGS([BUILD_])
+ TOOLCHAIN_SETUP_VISUAL_STUDIO_SYSROOT_FLAGS(BUILD_, BUILD_)
fi
fi
- fi
-
- # FIXME: we should list the discovered compilers as an exclude pattern!
- # If we do that, we can do this detection before POST_DETECTION, and still
- # find the build compilers in the tools dir, if needed.
- if test "x$OPENJDK_BUILD_OS" = xmacosx; then
- UTIL_REQUIRE_PROGS(BUILD_CC, [clang cl cc gcc])
- UTIL_REQUIRE_PROGS(BUILD_CXX, [clang++ cl CC g++])
else
- UTIL_REQUIRE_PROGS(BUILD_CC, [cl cc gcc])
- UTIL_REQUIRE_PROGS(BUILD_CXX, [cl CC g++])
+ if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
+ # If we got no devkit, we need to go hunting for the proper env
+ TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE($OPENJDK_BUILD_CPU, [$TOOLCHAIN_VERSION])
+ TOOLCHAIN_EXTRACT_VISUAL_STUDIO_ENV($OPENJDK_BUILD_CPU, BUILD_)
+
+ # We cannot currently export the VS_PATH to spec.gmk. This is probably
+ # strictly not correct, but seems to work anyway.
+
+ # Convert VS_INCLUDE and VS_LIB into sysroot flags
+ TOOLCHAIN_SETUP_VISUAL_STUDIO_SYSROOT_FLAGS(BUILD_)
+ fi
fi
- UTIL_FIXUP_EXECUTABLE(BUILD_CC)
- UTIL_FIXUP_EXECUTABLE(BUILD_CXX)
- UTIL_PATH_PROGS(BUILD_NM, nm gcc-nm)
- UTIL_FIXUP_EXECUTABLE(BUILD_NM)
- UTIL_PATH_PROGS(BUILD_AR, ar gcc-ar)
- UTIL_FIXUP_EXECUTABLE(BUILD_AR)
- UTIL_PATH_PROGS(BUILD_OBJCOPY, objcopy)
- UTIL_FIXUP_EXECUTABLE(BUILD_OBJCOPY)
- UTIL_PATH_PROGS(BUILD_STRIP, strip)
- UTIL_FIXUP_EXECUTABLE(BUILD_STRIP)
- # Assume the C compiler is the assembler
- BUILD_AS="$BUILD_CC -c"
+
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
- # In the Microsoft toolchain we have a separate LD command "link".
- # Make sure we reject /usr/bin/link (as determined in CYGWIN_LINK), which is
- # a cygwin program for something completely different.
- AC_CHECK_PROG([BUILD_LD], [link$EXE_SUFFIX],[link$EXE_SUFFIX],,, [$CYGWIN_LINK])
- UTIL_FIXUP_EXECUTABLE(BUILD_LD)
- # Verify that we indeed succeeded with this trick.
- AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker])
-
- # Reset PATH since it can contain a mix of WSL/linux paths and Windows paths from VS,
- # which, in combination with WSLENV, will make the WSL layer complain
- old_path="$PATH"
- PATH=
-
- "$BUILD_LD" --version > /dev/null
-
- if test $? -eq 0 ; then
- AC_MSG_RESULT([no])
- AC_MSG_ERROR([This is the Cygwin link tool. Please check your PATH and rerun configure.])
- else
- AC_MSG_RESULT([yes])
- fi
+ UTIL_REQUIRE_PROGS(BUILD_CC, cl, [$VS_PATH])
+ UTIL_REQUIRE_PROGS(BUILD_CXX, cl, [$VS_PATH])
+
+ # On windows, the assember is "ml.exe". We currently don't need this so
+ # do not require.
+ UTIL_LOOKUP_PROGS(BUILD_AS, ml, [$VS_PATH])
- PATH="$old_path"
+ # On windows, the ar tool is lib.exe (used to create static libraries).
+ # We currently don't need this so do not require.
+ UTIL_LOOKUP_PROGS(BUILD_AR, lib, [$VS_PATH])
+ # In the Microsoft toolchain we have a separate LD command "link".
+ UTIL_REQUIRE_PROGS(BUILD_LD, link, [$VS_PATH])
+ TOOLCHAIN_VERIFY_LINK_BINARY(BUILD_LD)
BUILD_LDCXX="$BUILD_LD"
else
+ if test "x$OPENJDK_BUILD_OS" = xmacosx; then
+ UTIL_REQUIRE_PROGS(BUILD_CC, clang cc gcc)
+ UTIL_REQUIRE_PROGS(BUILD_CXX, clang++ CC g++)
+ else
+ UTIL_REQUIRE_PROGS(BUILD_CC, cc gcc)
+ UTIL_REQUIRE_PROGS(BUILD_CXX, CC g++)
+ fi
+ UTIL_LOOKUP_PROGS(BUILD_NM, nm gcc-nm)
+ UTIL_LOOKUP_PROGS(BUILD_AR, ar gcc-ar lib)
+ UTIL_LOOKUP_PROGS(BUILD_OBJCOPY, objcopy)
+ UTIL_LOOKUP_PROGS(BUILD_STRIP, strip)
+ # Assume the C compiler is the assembler
+ BUILD_AS="$BUILD_CC -c"
# Just like for the target compiler, use the compiler as linker
BUILD_LD="$BUILD_CC"
BUILD_LDCXX="$BUILD_CXX"
@@ -1003,7 +921,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_MISC_CHECKS],
# Check for extra potential brokenness.
if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then
# On Windows, double-check that we got the right compiler.
- CC_VERSION_OUTPUT=`$CC 2>&1 | $GREP -v 'ERROR.*UtilTranslatePathList' | $HEAD -n 1 | $TR -d '\r'`
+ CC_VERSION_OUTPUT=`$CC 2>&1 1>/dev/null | $HEAD -n 1 | $TR -d '\r'`
COMPILER_CPU_TEST=`$ECHO $CC_VERSION_OUTPUT | $SED -n "s/^.* \(.*\)$/\1/p"`
if test "x$OPENJDK_TARGET_CPU" = "xx86"; then
if test "x$COMPILER_CPU_TEST" != "x80x86" -a "x$COMPILER_CPU_TEST" != "xx86"; then
@@ -1099,7 +1017,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG],
if test "x$JT_HOME" = x; then
# JT_HOME is not set in environment, or was deemed invalid.
# Try to find jtreg on path
- UTIL_PATH_PROGS(JTREGEXE, jtreg)
+ UTIL_LOOKUP_PROGS(JTREGEXE, jtreg)
if test "x$JTREGEXE" != x; then
# That's good, now try to derive JT_HOME
JT_HOME=`(cd $($DIRNAME $JTREGEXE)/.. && pwd)`
diff --git a/make/autoconf/toolchain_windows.m4 b/make/autoconf/toolchain_microsoft.m4
similarity index 55%
rename from make/autoconf/toolchain_windows.m4
rename to make/autoconf/toolchain_microsoft.m4
index 4644c0a9d7c..940f73a9d22 100644
--- a/make/autoconf/toolchain_windows.m4
+++ b/make/autoconf/toolchain_microsoft.m4
@@ -61,30 +61,32 @@ VS_TOOLSET_SUPPORTED_2019=true
AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT],
[
if test "x$VS_ENV_CMD" = x; then
- VS_VERSION="$1"
- VS_BASE="$2"
- METHOD="$3"
-
- UTIL_REWRITE_AS_UNIX_PATH(VS_BASE)
- # In VS 2017 and VS 2019, the default installation is in a subdir named after the edition.
- # Find the first one present and use that.
- if test "x$VS_EDITIONS" != x; then
- for edition in $VS_EDITIONS; do
- if test -d "$VS_BASE/$edition"; then
- VS_BASE="$VS_BASE/$edition"
- break
- fi
- done
- fi
+ TARGET_CPU="$1"
+ VS_VERSION="$2"
+ VS_BASE="$3"
+ METHOD="$4"
+
+ UTIL_FIXUP_PATH(VS_BASE, NOFAIL)
+
+ if test "x$VS_BASE" != x && test -d "$VS_BASE"; then
+ # In VS 2017 and VS 2019, the default installation is in a subdir named after the edition.
+ # Find the first one present and use that.
+ if test "x$VS_EDITIONS" != x; then
+ for edition in $VS_EDITIONS; do
+ if test -d "$VS_BASE/$edition"; then
+ VS_BASE="$VS_BASE/$edition"
+ break
+ fi
+ done
+ fi
- if test -d "$VS_BASE"; then
AC_MSG_NOTICE([Found Visual Studio installation at $VS_BASE using $METHOD])
- if test "x$OPENJDK_TARGET_CPU" = xx86; then
+ if test "x$TARGET_CPU" = xx86; then
VCVARSFILES="vc/bin/vcvars32.bat vc/auxiliary/build/vcvars32.bat"
- elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
+ elif test "x$TARGET_CPU" = xx86_64; then
VCVARSFILES="vc/bin/amd64/vcvars64.bat vc/bin/x86_amd64/vcvarsx86_amd64.bat \
- VC/Auxiliary/Build/vcvarsx86_amd64.bat VC/Auxiliary/Build/vcvars64.bat"
- elif test "x$OPENJDK_TARGET_CPU" = xaarch64; then
+ vc/auxiliary/build/vcvarsx86_amd64.bat vc/auxiliary/build/vcvars64.bat"
+ elif test "x$TARGET_CPU" = xaarch64; then
# for host x86-64, target aarch64
VCVARSFILES="vc/auxiliary/build/vcvarsamd64_arm64.bat \
vc/auxiliary/build/vcvarsx86_arm64.bat"
@@ -114,24 +116,27 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT],
AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT],
[
if test "x$VS_ENV_CMD" = x; then
- VS_VERSION="$1"
- WIN_SDK_BASE="$2"
- METHOD="$3"
- UTIL_REWRITE_AS_UNIX_PATH(WIN_SDK_BASE)
- if test -d "$WIN_SDK_BASE"; then
+ TARGET_CPU="$1"
+ VS_VERSION="$2"
+ WIN_SDK_BASE="$3"
+ METHOD="$4"
+
+ UTIL_FIXUP_PATH(WIN_SDK_BASE, NOFAIL)
+
+ if test "x$WIN_SDK_BASE" != x && test -d "$WIN_SDK_BASE"; then
# There have been cases of partial or broken SDK installations. A missing
# lib dir is not going to work.
if test ! -d "$WIN_SDK_BASE/lib"; then
AC_MSG_NOTICE([Found Windows SDK installation at $WIN_SDK_BASE using $METHOD])
AC_MSG_NOTICE([Warning: Installation is broken, lib dir is missing. Ignoring])
- elif test -f "$WIN_SDK_BASE/Bin/SetEnv.Cmd"; then
+ elif test -f "$WIN_SDK_BASE/bin/setenv.cmd"; then
AC_MSG_NOTICE([Found Windows SDK installation at $WIN_SDK_BASE using $METHOD])
- VS_ENV_CMD="$WIN_SDK_BASE/Bin/SetEnv.Cmd"
- if test "x$OPENJDK_TARGET_CPU" = xx86; then
+ VS_ENV_CMD="$WIN_SDK_BASE/bin/setenv.cmd"
+ if test "x$TARGET_CPU" = xx86; then
VS_ENV_ARGS="/x86"
- elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
+ elif test "x$TARGET_CPU" = xx86_64; then
VS_ENV_ARGS="/x64"
- elif test "x$OPENJDK_TARGET_CPU" = xaarch64; then
+ elif test "x$TARGET_CPU" = xaarch64; then
VS_ENV_ARGS="/arm64"
fi
# PLATFORM_TOOLSET is used during the compilation of the freetype sources (see
@@ -160,7 +165,8 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE],
[specific MSVC toolset version to use, passed as -vcvars_ver argument to
pass to vcvarsall.bat (Windows only)])])
- VS_VERSION="$1"
+ TARGET_CPU="$1"
+ VS_VERSION="$2"
eval VS_COMNTOOLS_VAR="\${VS_ENVVAR_${VS_VERSION}}"
eval VS_COMNTOOLS="\$${VS_COMNTOOLS_VAR}"
eval VS_INSTALL_DIR="\${VS_VS_INSTALLDIR_${VS_VERSION}}"
@@ -174,9 +180,9 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE],
# When using --with-tools-dir, assume it points to the correct and default
# version of Visual Studio or that --with-toolchain-version was also set.
if test "x$with_tools_dir" != x; then
- TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
+ TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$TARGET_CPU], [$VS_VERSION],
[$with_tools_dir/../..], [--with-tools-dir])
- TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
+ TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$TARGET_CPU], [$VS_VERSION],
[$with_tools_dir/../../..], [--with-tools-dir])
if test "x$VS_ENV_CMD" = x; then
# Having specified an argument which is incorrect will produce an instant failure;
@@ -189,45 +195,46 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE],
fi
if test "x$VS_COMNTOOLS" != x; then
- TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
+ TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$TARGET_CPU], [$VS_VERSION],
[$VS_COMNTOOLS/../..], [$VS_COMNTOOLS_VAR variable])
fi
if test "x$PROGRAMFILES" != x; then
- TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
+ TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$TARGET_CPU], [$VS_VERSION],
[$PROGRAMFILES/$VS_INSTALL_DIR], [well-known name])
fi
# Work around the insanely named ProgramFiles(x86) env variable
PROGRAMFILES_X86="`env | $SED -n 's/^ProgramFiles(x86)=//p'`"
if test "x$PROGRAMFILES_X86" != x; then
- TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
+ TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$TARGET_CPU], [$VS_VERSION],
[$PROGRAMFILES_X86/$VS_INSTALL_DIR], [well-known name])
fi
- TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
- [C:/Program Files/$VS_INSTALL_DIR], [well-known name])
- TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([${VS_VERSION}],
- [C:/Program Files (x86)/$VS_INSTALL_DIR], [well-known name])
+ TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$TARGET_CPU], [$VS_VERSION],
+ [c:/program files/$VS_INSTALL_DIR], [well-known name])
+ TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$TARGET_CPU], [$VS_VERSION],
+ [c:/program files (x86)/$VS_INSTALL_DIR], [well-known name])
if test "x$SDK_INSTALL_DIR" != x; then
if test "x$ProgramW6432" != x; then
- TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([${VS_VERSION}],
+ TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$TARGET_CPU], [$VS_VERSION],
[$ProgramW6432/$SDK_INSTALL_DIR], [well-known name])
fi
if test "x$PROGRAMW6432" != x; then
- TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([${VS_VERSION}],
+ TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$TARGET_CPU], [$VS_VERSION],
[$PROGRAMW6432/$SDK_INSTALL_DIR], [well-known name])
fi
if test "x$PROGRAMFILES" != x; then
- TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([${VS_VERSION}],
+ TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$TARGET_CPU], [$VS_VERSION],
[$PROGRAMFILES/$SDK_INSTALL_DIR], [well-known name])
fi
- TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([${VS_VERSION}],
- [C:/Program Files/$SDK_INSTALL_DIR], [well-known name])
- TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([${VS_VERSION}],
- [C:/Program Files (x86)/$SDK_INSTALL_DIR], [well-known name])
+ TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$TARGET_CPU], [$VS_VERSION],
+ [c:/program files/$SDK_INSTALL_DIR], [well-known name])
+ TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$TARGET_CPU], [$VS_VERSION],
+ [c:/program files (x86)/$SDK_INSTALL_DIR], [well-known name])
fi
+ VCVARS_VER=auto
if test "x$VS_TOOLSET_SUPPORTED" != x; then
if test "x$with_msvc_toolset_version" != x; then
- VS_ENV_ARGS="$VS_ENV_ARGS -vcvars_ver=$with_msvc_toolset_version"
+ VCVARS_VER="$with_msvc_toolset_version"
fi
fi
])
@@ -264,44 +271,9 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
eval VS_SUPPORTED="\${VS_SUPPORTED_${VS_VERSION}}"
eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}"
- # The TOOLCHAIN_PATH from a devkit is in Unix format. In WSL we need a
- # windows version of the complete VS_PATH as VS_PATH_WINDOWS
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- # Convert the toolchain path
- OLDIFS="$IFS"
- IFS=":"
- VS_PATH_WINDOWS=""
- for i in $TOOLCHAIN_PATH; do
- path=$i
- UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([path])
- VS_PATH_WINDOWS="$VS_PATH_WINDOWS;$path"
- done
- IFS="$OLDIFS"
- # Append the current path from Windows env
- WINDOWS_PATH="`$CMD /c echo %PATH%`"
- VS_PATH_WINDOWS="$VS_PATH_WINDOWS;$WINDOWS_PATH"
- else
- VS_PATH="$TOOLCHAIN_PATH:$PATH"
- fi
-
- # Convert DEVKIT_VS_INCLUDE into windows style VS_INCLUDE so that it
- # can still be exported as INCLUDE for compiler invocations without
- # SYSROOT_CFLAGS
- OLDIFS="$IFS"
- IFS=";"
- for i in $DEVKIT_VS_INCLUDE; do
- ipath=$i
- UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([ipath])
- VS_INCLUDE="$VS_INCLUDE;$ipath"
- done
- # Convert DEVKIT_VS_LIB into VS_LIB so that it can still be exported
- # as LIB for compiler invocations without SYSROOT_LDFLAGS
- for i in $DEVKIT_VS_LIB; do
- libpath=$i
- UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([libpath])
- VS_LIB="$VS_LIB;$libpath"
- done
- IFS="$OLDIFS"
+ # For historical reasons, paths are separated by ; in devkit.info
+ VS_INCLUDE=${DEVKIT_VS_INCLUDE//;/:}
+ VS_LIB=${DEVKIT_VS_LIB//;/:}
AC_MSG_NOTICE([Found devkit $VS_DESCRIPTION])
@@ -319,7 +291,7 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
fi
for VS_VERSION in $VS_VERSIONS_PROBE_LIST; do
- TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE([$VS_VERSION])
+ TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE($OPENJDK_TARGET_CPU, [$VS_VERSION])
if test "x$VS_ENV_CMD" != x; then
TOOLCHAIN_VERSION=$VS_VERSION
eval VS_DESCRIPTION="\${VS_DESCRIPTION_${VS_VERSION}}"
@@ -341,206 +313,118 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO],
fi
])
+AC_DEFUN([TOOLCHAIN_EXTRACT_VISUAL_STUDIO_ENV],
+[
+ TARGET_CPU=$1
+
+ AC_MSG_NOTICE([Trying to extract Visual Studio environment variables for $TARGET_CPU])
+ AC_MSG_NOTICE([using $VS_ENV_CMD $VS_ENV_ARGS])
+
+ VS_ENV_TMP_DIR="$CONFIGURESUPPORT_OUTPUTDIR/vs-env-$TARGET_CPU"
+ $MKDIR -p $VS_ENV_TMP_DIR
+
+ # Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment).
+ # Instead create a shell script which will set the relevant variables when run.
+
+ OLDPATH="$PATH"
+ # Make sure we only capture additions to PATH needed by VS.
+ # Clear out path, but need system dir present for vsvars cmd file to be able to run
+ export PATH=$WINENV_PREFIX/c/windows/system32
+ # The "| cat" is to stop SetEnv.Cmd to mess with system colors on some systems
+ # We can't pass -vcvars_ver=$VCVARS_VER here because cmd.exe eats all '='
+ # in bat file arguments. :-(
+ $FIXPATH $CMD /c "$TOPDIR/make/scripts/extract-vs-env.cmd" "$VS_ENV_CMD" \
+ "$VS_ENV_TMP_DIR/set-vs-env.sh" $VCVARS_VER $VS_ENV_ARGS \
+ > $VS_ENV_TMP_DIR/extract-vs-env.log | $CAT 2>&1
+ PATH="$OLDPATH"
+
+ if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then
+ AC_MSG_NOTICE([Could not succesfully extract the environment variables needed for the VS setup.])
+ AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation.])
+ AC_MSG_NOTICE([To analyze the problem, see extract-vs-env.log and extract-vs-env.bat in])
+ AC_MSG_NOTICE([$VS_ENV_TMP_DIR.])
+ AC_MSG_ERROR([Cannot continue])
+ fi
+
+ # Remove windows line endings
+ $SED -i -e 's|\r||g' $VS_ENV_TMP_DIR/set-vs-env.sh
+
+ # Now set all paths and other env variables by executing the generated
+ # shell script. This will allow the rest of the configure script to find
+ # and run the compiler in the proper way.
+ AC_MSG_NOTICE([Setting extracted environment variables for $TARGET_CPU])
+ . $VS_ENV_TMP_DIR/set-vs-env.sh
+
+ # Extract only what VS_ENV_CMD added to the PATH
+ VS_PATH=${PATH_AFTER/"$PATH_BEFORE"}
+ VS_PATH=${VS_PATH//::/:}
+
+ # Remove any paths containing # (typically F#) as that messes up make. This
+ # is needed if visual studio was installed with F# support.
+ [ VS_PATH=`$ECHO "$VS_PATH" | $SED 's/[^:#]*#[^:]*://g'` ]
+
+ # Sometimes case is off
+ if test -z "$WINDOWSSDKDIR"; then
+ WINDOWSSDKDIR="$WindowsSdkDir"
+ fi
+ # Now we have VS_PATH, VS_INCLUDE, VS_LIB. For further checking, we
+ # also define VCINSTALLDIR and WINDOWSSDKDIR. All are in
+ # unix style.
+])
+
################################################################################
# Check if the VS env variables were setup prior to running configure.
# If not, then find vcvarsall.bat and run it automatically, and integrate
# the set env variables into the spec file.
AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV],
[
- # Store path to cygwin link.exe to help excluding it when searching for
- # VS linker. This must be done before changing the PATH when looking for VS.
- AC_PATH_PROG(CYGWIN_LINK, link.exe)
- if test "x$CYGWIN_LINK" != x; then
- AC_MSG_CHECKING([if the first found link.exe is actually the Cygwin link tool])
- "$CYGWIN_LINK" --version > /dev/null
- if test $? -eq 0 ; then
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- # This might be the VS linker. Don't exclude it later on.
- CYGWIN_LINK=""
- fi
- fi
-
- # First-hand choice is to locate and run the vsvars bat file.
+ # Locate the vsvars bat file and save it as VS_ENV_CMD
TOOLCHAIN_FIND_VISUAL_STUDIO
- # If we have a devkit, skip all of the below.
+ # If we have a devkit, we don't need to run VS_ENV_CMD
if test "x$DEVKIT_VS_VERSION" = x; then
if test "x$VS_ENV_CMD" != x; then
- # We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file.
- UTIL_FIXUP_EXECUTABLE(VS_ENV_CMD)
-
- # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat
- AC_MSG_NOTICE([Trying to extract Visual Studio environment variables])
-
- # We need to create a couple of temporary files.
- VS_ENV_TMP_DIR="$CONFIGURESUPPORT_OUTPUTDIR/vs-env"
- $MKDIR -p $VS_ENV_TMP_DIR
-
- # Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment).
- # Instead create a shell script which will set the relevant variables when run.
- WINPATH_VS_ENV_CMD="$VS_ENV_CMD"
- UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_VS_ENV_CMD])
+ # We have found a Visual Studio environment on disk, let's extract variables
+ # from the vsvars bat file into shell variables in the configure script.
+ TOOLCHAIN_EXTRACT_VISUAL_STUDIO_ENV($OPENJDK_TARGET_CPU)
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- WINPATH_BASH="bash"
- else
- WINPATH_BASH="$BASH"
- UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([WINPATH_BASH])
- fi
-
- # Generate a DOS batch file which runs $VS_ENV_CMD, and then creates a shell
- # script (executable by bash) that will setup the important variables.
- EXTRACT_VC_ENV_BAT_FILE="$VS_ENV_TMP_DIR/extract-vs-env.bat"
- $ECHO "@echo off" > $EXTRACT_VC_ENV_BAT_FILE
- # This will end up something like:
- # call C:/progra~2/micros~2.0/vc/bin/amd64/vcvars64.bat
- $ECHO "call \"$WINPATH_VS_ENV_CMD\" $VS_ENV_ARGS" >> $EXTRACT_VC_ENV_BAT_FILE
- # In some cases, the VS_ENV_CMD will change directory, change back so
- # the set-vs-env.sh ends up in the right place.
- $ECHO 'cd %~dp0' >> $EXTRACT_VC_ENV_BAT_FILE
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- # These will end up something like:
- # echo VS_PATH=\"$PATH\" > set-vs-env.sh
- # The trailing space for everyone except PATH is no typo, but is needed due
- # to trailing \ in the Windows paths. These will be stripped later.
- # Trying pure CMD extract. This results in windows paths that need to
- # be converted post extraction, but a simpler script.
- $ECHO 'echo VS_PATH="%PATH%" > set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO 'echo VS_INCLUDE="%INCLUDE% " >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO 'echo VS_LIB="%LIB% " >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO 'echo VCINSTALLDIR="%VCINSTALLDIR% " >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO 'echo VCToolsRedistDir="%VCToolsRedistDir% " >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO 'echo WindowsSdkDir="%WindowsSdkDir% " >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO 'echo WINDOWSSDKDIR="%WINDOWSSDKDIR% " >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- else
- # These will end up something like:
- # C:/CygWin/bin/bash -c 'echo VS_PATH=\"$PATH\" > localdevenv.sh
- # The trailing space for everyone except PATH is no typo, but is needed due
- # to trailing \ in the Windows paths. These will be stripped later.
- $ECHO "$WINPATH_BASH -c 'echo VS_PATH="'\"$PATH\" > set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO "$WINPATH_BASH -c 'echo VS_INCLUDE="'\"$INCLUDE\;$include \" >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO "$WINPATH_BASH -c 'echo VS_LIB="'\"$LIB\;$lib \" >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO "$WINPATH_BASH -c 'echo VCINSTALLDIR="'\"$VCINSTALLDIR \" >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO "$WINPATH_BASH -c 'echo VCToolsRedistDir="'\"$VCToolsRedistDir \" >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO "$WINPATH_BASH -c 'echo WindowsSdkDir="'\"$WindowsSdkDir \" >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- $ECHO "$WINPATH_BASH -c 'echo WINDOWSSDKDIR="'\"$WINDOWSSDKDIR \" >> set-vs-env.sh' \
- >> $EXTRACT_VC_ENV_BAT_FILE
- fi
-
- # Now execute the newly created bat file.
- # Change directory so we don't need to mess with Windows paths in redirects.
- cd $VS_ENV_TMP_DIR
- $CMD /c extract-vs-env.bat > extract-vs-env.log 2>&1
- cd $CONFIGURE_START_DIR
-
- if test ! -s $VS_ENV_TMP_DIR/set-vs-env.sh; then
- AC_MSG_NOTICE([Could not succesfully extract the environment variables needed for the VS setup.])
- AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation])
- AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.])
- AC_MSG_ERROR([Cannot continue])
- fi
-
- # Remove windows line endings
- $SED -i -e 's|\r||g' $VS_ENV_TMP_DIR/set-vs-env.sh
-
- # Now set all paths and other env variables. This will allow the rest of
- # the configure script to find and run the compiler in the proper way.
- AC_MSG_NOTICE([Setting extracted environment variables])
- . $VS_ENV_TMP_DIR/set-vs-env.sh
# Now we have VS_PATH, VS_INCLUDE, VS_LIB. For further checking, we
- # also define VCINSTALLDIR, WindowsSdkDir and WINDOWSSDKDIR.
-
- # In WSL, the extracted VS_PATH is Windows style. This needs to be
- # rewritten as Unix style and the Windows style version is saved
- # in VS_PATH_WINDOWS.
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- OLDIFS="$IFS"
- IFS=";"
- # Convert VS_PATH to unix style
- VS_PATH_WINDOWS="$VS_PATH"
- VS_PATH=""
- for i in $VS_PATH_WINDOWS; do
- path=$i
- # Only process non-empty elements
- if test "x$path" != x; then
- IFS="$OLDIFS"
- # Check that directory exists before calling fixup_path
- testpath=$path
- UTIL_REWRITE_AS_UNIX_PATH([testpath])
- if test -d "$testpath"; then
- UTIL_FIXUP_PATH([path])
- UTIL_APPEND_TO_PATH(VS_PATH, $path)
- fi
- IFS=";"
- fi
- done
- IFS="$OLDIFS"
- fi
-
+ # also define VCINSTALLDIR and WINDOWSSDKDIR. All are in
+ # unix style.
else
- # We did not find a vsvars bat file, let's hope we are run from a VS command prompt.
- AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment])
+ # We did not find a vsvars bat file.
+ AC_MSG_ERROR([Cannot locate a valid Visual Studio installation])
fi
fi
- # At this point, we should have correct variables in the environment, or we can't continue.
- AC_MSG_CHECKING([for Visual Studio variables])
+ # At this point, we should have correct variables in the environment
+ AC_MSG_CHECKING([that Visual Studio variables have been correctly extracted])
- if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x \
- || test "x$WINDOWSSDKDIR" != x || test "x$DEVKIT_NAME" != x; then
+ if test "x$VCINSTALLDIR" != x || test "x$WINDOWSSDKDIR" != x \
+ || test "x$DEVKIT_NAME" != x; then
if test "x$VS_INCLUDE" = x || test "x$VS_LIB" = x; then
- AC_MSG_RESULT([present but broken])
+ AC_MSG_RESULT([no; Visual Studio present but broken])
AC_MSG_ERROR([Your VC command prompt seems broken, INCLUDE and/or LIB is missing.])
else
AC_MSG_RESULT([ok])
- # Remove any trailing "\" ";" and " " from the variables.
- VS_INCLUDE=`$ECHO "$VS_INCLUDE" | $SED -e 's/\\\\*;* *$//'`
- VS_LIB=`$ECHO "$VS_LIB" | $SED 's/\\\\*;* *$//'`
- VCINSTALLDIR=`$ECHO "$VCINSTALLDIR" | $SED 's/\\\\* *$//'`
- VCToolsRedistDir=`$ECHO "$VCToolsRedistDir" | $SED 's/\\\\* *$//'`
- WindowsSdkDir=`$ECHO "$WindowsSdkDir" | $SED 's/\\\\* *$//'`
- WINDOWSSDKDIR=`$ECHO "$WINDOWSSDKDIR" | $SED 's/\\\\* *$//'`
- if test -z "$WINDOWSSDKDIR"; then
- WINDOWSSDKDIR="$WindowsSdkDir"
- fi
- # Remove any paths containing # (typically F#) as that messes up make. This
- # is needed if visual studio was installed with F# support.
- VS_PATH=`$ECHO "$VS_PATH" | $SED 's/[[^:#]]*#[^:]*://g'`
- AC_SUBST(VS_PATH)
- AC_SUBST(VS_INCLUDE)
- AC_SUBST(VS_LIB)
+ # Turn VS_PATH into TOOLCHAIN_PATH
+ TOOLCHAIN_PATH="$TOOLCHAIN_PATH:$VS_PATH"
+ # Convert VS_INCLUDE and VS_LIB into sysroot flags
TOOLCHAIN_SETUP_VISUAL_STUDIO_SYSROOT_FLAGS
-
- AC_SUBST(VS_PATH_WINDOWS)
fi
else
AC_MSG_RESULT([not found])
if test "x$VS_ENV_CMD" = x; then
- AC_MSG_NOTICE([Cannot locate a valid Visual Studio or Windows SDK installation on disk,])
- AC_MSG_NOTICE([nor is this script run from a Visual Studio command prompt.])
+ AC_MSG_NOTICE([Cannot locate a valid Visual Studio or Windows SDK installation on disk])
else
- AC_MSG_NOTICE([Running the extraction script failed.])
+ AC_MSG_NOTICE([Running the extraction script failed])
fi
- AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation])
- AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.])
+ AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation.])
+ AC_MSG_NOTICE([To analyze the problem, see extract-vs-env.log and extract-vs-env.bat in])
+ AC_MSG_NOTICE([$VS_ENV_TMP_DIR.])
AC_MSG_ERROR([Cannot continue])
fi
])
@@ -556,25 +440,15 @@ AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL],
# Need to check if the found msvcr is correct architecture
AC_MSG_CHECKING([found $DLL_NAME architecture])
MSVC_DLL_FILETYPE=`$FILE -b "$POSSIBLE_MSVC_DLL"`
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- # The MSYS 'file' command returns "PE32 executable for MS Windows (DLL) (GUI) Intel 80386 32-bit"
- # on x32 and "PE32+ executable for MS Windows (DLL) (GUI) Mono/.Net assembly" on x64 systems.
- if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
- CORRECT_MSVCR_ARCH="PE32 executable"
- else
- CORRECT_MSVCR_ARCH="PE32+ executable"
- fi
- else
- if test "x$OPENJDK_TARGET_CPU" = xx86; then
- CORRECT_MSVCR_ARCH=386
- elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
- CORRECT_MSVCR_ARCH=x86-64
- elif test "x$OPENJDK_TARGET_CPU" = xaarch64; then
- # The cygwin 'file' command only returns "PE32+ executable (DLL) (console), for MS Windows",
- # without specifying which architecture it is for specifically. This has been fixed upstream.
- # https://github.com/file/file/commit/b849b1af098ddd530094bf779b58431395db2e10#diff-ff2eced09e6860de75057dd731d092aeR142
- CORRECT_MSVCR_ARCH="PE32+ executable"
- fi
+ if test "x$OPENJDK_TARGET_CPU" = xx86; then
+ CORRECT_MSVCR_ARCH=386
+ elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then
+ CORRECT_MSVCR_ARCH=x86-64
+ elif test "x$OPENJDK_TARGET_CPU" = xaarch64; then
+ # The cygwin 'file' command only returns "PE32+ executable (DLL) (console), for MS Windows",
+ # without specifying which architecture it is for specifically. This has been fixed upstream.
+ # https://github.com/file/file/commit/b849b1af098ddd530094bf779b58431395db2e10#diff-ff2eced09e6860de75057dd731d092aeR142
+ CORRECT_MSVCR_ARCH="PE32+ executable"
fi
if $ECHO "$MSVC_DLL_FILETYPE" | $GREP "$CORRECT_MSVCR_ARCH" 2>&1 > /dev/null; then
AC_MSG_RESULT([ok])
@@ -603,20 +477,15 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
if test "x$MSVC_DLL" = x; then
if test "x$VCINSTALLDIR" != x; then
- CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR"
- UTIL_FIXUP_PATH(CYGWIN_VC_INSTALL_DIR)
if test "$VS_VERSION" -lt 2017; then
# Probe: Using well-known location from Visual Studio 12.0 and older
- POSSIBLE_MSVC_DLL="$CYGWIN_VC_INSTALL_DIR/redist/$vs_target_cpu/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME"
+ POSSIBLE_MSVC_DLL="$VCINSTALLDIR/redist/$vs_target_cpu/microsoft.vc${VS_VERSION_INTERNAL}.crt/$DLL_NAME"
else
- CYGWIN_VC_TOOLS_REDIST_DIR="$VCToolsRedistDir"
- UTIL_FIXUP_PATH(CYGWIN_VC_TOOLS_REDIST_DIR)
# Probe: Using well-known location from VS 2017 and VS 2019
- POSSIBLE_MSVC_DLL="`ls $CYGWIN_VC_TOOLS_REDIST_DIR/$vs_target_cpu/Microsoft.VC${VS_VERSION_INTERNAL}.CRT/$DLL_NAME`"
+ POSSIBLE_MSVC_DLL="`ls $VCToolsRedistDir/$vs_target_cpu/microsoft.vc${VS_VERSION_INTERNAL}.crt/$DLL_NAME 2> /dev/null`"
fi
# In case any of the above finds more than one file, loop over them.
for possible_msvc_dll in $POSSIBLE_MSVC_DLL; do
- $ECHO "POSSIBLE_MSVC_DLL $possible_msvc_dll"
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$possible_msvc_dll],
[well-known location in VCINSTALLDIR])
done
@@ -632,40 +501,44 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL],
if test "x$MSVC_DLL" = x; then
# Probe: Look in the Windows system32 directory
- CYGWIN_SYSTEMROOT="$SYSTEMROOT"
- UTIL_REWRITE_AS_UNIX_PATH(CYGWIN_SYSTEMROOT)
- POSSIBLE_MSVC_DLL="$CYGWIN_SYSTEMROOT/system32/$DLL_NAME"
- TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
- [well-known location in SYSTEMROOT])
+ WIN_SYSTEMROOT="$SYSTEMROOT"
+ UTIL_FIXUP_PATH(WIN_SYSTEMROOT, NOFAIL)
+ if test "x$WIN_SYSTEMROOT" != x; then
+ POSSIBLE_MSVC_DLL="$WIN_SYSTEMROOT/system32/$DLL_NAME"
+ TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
+ [well-known location in SYSTEMROOT])
+ fi
fi
if test "x$MSVC_DLL" = x; then
# Probe: If Visual Studio Express is installed, there is usually one with the debugger
if test "x$VS100COMNTOOLS" != x; then
- CYGWIN_VS_TOOLS_DIR="$VS100COMNTOOLS/.."
- UTIL_REWRITE_AS_UNIX_PATH(CYGWIN_VS_TOOLS_DIR)
- POSSIBLE_MSVC_DLL=`$FIND "$CYGWIN_VS_TOOLS_DIR" -name $DLL_NAME \
+ WIN_VS_TOOLS_DIR="$VS100COMNTOOLS/.."
+ UTIL_FIXUP_PATH(WIN_VS_TOOLS_DIR, NOFAIL)
+ if test "x$WIN_VS_TOOLS_DIR" != x; then
+ POSSIBLE_MSVC_DLL=`$FIND "$WIN_VS_TOOLS_DIR" -name $DLL_NAME \
| $GREP -i /$vs_target_cpu/ | $HEAD --lines 1`
- TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
- [search of VS100COMNTOOLS])
+ TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
+ [search of VS100COMNTOOLS])
+ fi
fi
fi
if test "x$MSVC_DLL" = x; then
# Probe: Search wildly in the VCINSTALLDIR. We've probably lost by now.
# (This was the original behaviour; kept since it might turn something up)
- if test "x$CYGWIN_VC_INSTALL_DIR" != x; then
+ if test "x$VCINSTALLDIR" != x; then
if test "x$OPENJDK_TARGET_CPU" = xx86; then
- POSSIBLE_MSVC_DLL=`$FIND "$CYGWIN_VC_INSTALL_DIR" -name $DLL_NAME \
+ POSSIBLE_MSVC_DLL=`$FIND "$VCINSTALLDIR" -name $DLL_NAME \
| $GREP x86 | $GREP -v ia64 | $GREP -v x64 | $GREP -v arm64 | $HEAD --lines 1`
if test "x$POSSIBLE_MSVC_DLL" = x; then
# We're grasping at straws now...
- POSSIBLE_MSVC_DLL=`$FIND "$CYGWIN_VC_INSTALL_DIR" -name $DLL_NAME \
+ POSSIBLE_MSVC_DLL=`$FIND "$VCINSTALLDIR" -name $DLL_NAME \
| $HEAD --lines 1`
fi
else
- POSSIBLE_MSVC_DLL=`$FIND "$CYGWIN_VC_INSTALL_DIR" -name $DLL_NAME \
- | $GREP $vs_target_cpu | $HEAD --lines 1`
+ POSSIBLE_MSVC_DLL=`$FIND "$VCINSTALLDIR" -name $DLL_NAME \
+ | $GREP x64 | $HEAD --lines 1`
fi
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL([$DLL_NAME], [$POSSIBLE_MSVC_DLL],
@@ -729,9 +602,9 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
fi
AC_ARG_WITH(vcruntime-1-dll, [AS_HELP_STRING([--with-vcruntime-1-dll],
- [path to microsoft C++ runtime dll (vcruntime*_1.dll) (Windows 64-bits only) @<:@probed@:>@])])
+ [path to microsoft C++ runtime dll (vcruntime*_1.dll) (Windows x64 only) @<:@probed@:>@])])
- if test "x$VCRUNTIME_1_NAME" != "x" -a "x$OPENJDK_TARGET_CPU_BITS" = x64; then
+ if test "x$VCRUNTIME_1_NAME" != "x" && test "x$OPENJDK_TARGET_CPU" = xx86_64; then
if test "x$with_vcruntime_1_dll" != x; then
# If given explicitly by user, do not probe. If not present, fail directly.
TOOLCHAIN_CHECK_POSSIBLE_MSVC_DLL($VCRUNTIME_1_NAME, [$with_vcruntime_1_dll],
@@ -750,13 +623,13 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
TOOLCHAIN_SETUP_MSVC_DLL([${VCRUNTIME_1_NAME}])
VCRUNTIME_1_DLL="$MSVC_DLL"
fi
- AC_SUBST(VCRUNTIME_1_DLL)
fi
+ AC_SUBST(VCRUNTIME_1_DLL)
AC_ARG_WITH(ucrt-dll-dir, [AS_HELP_STRING([--with-ucrt-dll-dir],
[path to Microsoft Windows Kit UCRT DLL dir (Windows only) @<:@probed@:>@])])
- if test "x$USE_UCRT" = "xtrue"; then
+ if test "x$USE_UCRT" = "xtrue" && test "x$OPENJDK_TARGET_CPU" != xaarch64; then
AC_MSG_CHECKING([for UCRT DLL dir])
if test "x$with_ucrt_dll_dir" != x; then
if test -z "$(ls -d "$with_ucrt_dll_dir/"*.dll 2> /dev/null)"; then
@@ -771,19 +644,16 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
UCRT_DLL_DIR="$DEVKIT_UCRT_DLL_DIR"
AC_MSG_RESULT($UCRT_DLL_DIR)
else
- CYGWIN_WINDOWSSDKDIR="${WINDOWSSDKDIR}"
- UTIL_FIXUP_PATH([CYGWIN_WINDOWSSDKDIR])
- if test "x$OPENJDK_TARGET_CPU" = "xaarch64"; then
+ dll_subdir=$OPENJDK_TARGET_CPU
+ if test "x$dll_subdir" = "xaarch64"; then
dll_subdir="arm64"
- elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then
+ elif test "x$dll_subdir" = "xx86_64"; then
dll_subdir="x64"
- elif test "x$OPENJDK_TARGET_CPU" = "xx86"; then
- dll_subdir="x86"
fi
- UCRT_DLL_DIR="$CYGWIN_WINDOWSSDKDIR/Redist/ucrt/DLLs/$dll_subdir"
+ UCRT_DLL_DIR="$WINDOWSSDKDIR/redist/ucrt/dlls/$dll_subdir"
if test -z "$(ls -d "$UCRT_DLL_DIR/"*.dll 2> /dev/null)"; then
# Try with version subdir
- UCRT_DLL_DIR="`ls -d $CYGWIN_WINDOWSSDKDIR/Redist/*/ucrt/DLLs/$dll_subdir \
+ UCRT_DLL_DIR="`ls -d $WINDOWSSDKDIR/redist/*/ucrt/dlls/$dll_subdir \
2> /dev/null | $SORT -d | $HEAD -n1`"
if test -z "$UCRT_DLL_DIR" \
|| test -z "$(ls -d "$UCRT_DLL_DIR/"*.dll 2> /dev/null)"; then
@@ -805,43 +675,23 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS],
# Setup the sysroot flags and add them to global CFLAGS and LDFLAGS so
# that configure can use them while detecting compilers.
# TOOLCHAIN_TYPE is available here.
-# Param 1 - Optional prefix to all variables. (e.g BUILD_)
+# Param 1 - Optional prefix to SYSROOT variables. (e.g BUILD_)
+# Param 2 - Optional prefix to VS variables. (e.g BUILD_)
AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_SYSROOT_FLAGS],
[
OLDIFS="$IFS"
- IFS=";"
- # Convert $1VS_INCLUDE into $1SYSROOT_CFLAGS
- for i in [$]$1VS_INCLUDE; do
- ipath=$i
- # Only process non-empty elements
- if test "x$ipath" != x; then
- IFS="$OLDIFS"
- # Check that directory exists before calling fixup_path
- testpath=$ipath
- UTIL_REWRITE_AS_UNIX_PATH([testpath])
- if test -d "$testpath"; then
- UTIL_FIXUP_PATH([ipath])
- $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -I$ipath"
- fi
- IFS=";"
- fi
+ IFS=":"
+
+ # Convert VS_INCLUDE into SYSROOT_CFLAGS
+ for ipath in [$]$2VS_INCLUDE; do
+ $1SYSROOT_CFLAGS="[$]$1SYSROOT_CFLAGS -I$ipath"
done
- # Convert $1VS_LIB into $1SYSROOT_LDFLAGS
- for i in [$]$1VS_LIB; do
- libpath=$i
- # Only process non-empty elements
- if test "x$libpath" != x; then
- IFS="$OLDIFS"
- # Check that directory exists before calling fixup_path
- testpath=$libpath
- UTIL_REWRITE_AS_UNIX_PATH([testpath])
- if test -d "$testpath"; then
- UTIL_FIXUP_PATH([libpath])
- $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -libpath:$libpath"
- fi
- IFS=";"
- fi
+
+ # Convert VS_LIB into SYSROOT_LDFLAGS
+ for libpath in [$]$2VS_LIB; do
+ $1SYSROOT_LDFLAGS="[$]$1SYSROOT_LDFLAGS -libpath:$libpath"
done
+
IFS="$OLDIFS"
AC_SUBST($1SYSROOT_CFLAGS)
diff --git a/make/autoconf/util.m4 b/make/autoconf/util.m4
index 0addb9c3a16..9ececc55e5e 100644
--- a/make/autoconf/util.m4
+++ b/make/autoconf/util.m4
@@ -24,7 +24,6 @@
#
m4_include([util_paths.m4])
-m4_include([util_windows.m4])
###############################################################################
# Create a function/macro that takes a series of named arguments. The call is
@@ -462,151 +461,3 @@ UTIL_DEFUN_NAMED([UTIL_ARG_ENABLE],
fi
])
-###############################################################################
-# Test that variable $1 denoting a program is not empty. If empty, exit with an error.
-# $1: variable to check
-AC_DEFUN([UTIL_CHECK_NONEMPTY],
-[
- if test "x[$]$1" = x; then
- AC_MSG_ERROR([Could not find required tool for $1])
- fi
-])
-
-###############################################################################
-# Setup a tool for the given variable. If correctly specified by the user,
-# use that value, otherwise search for the tool using the supplied code snippet.
-# $1: variable to set
-# $2: code snippet to call to look for the tool
-# $3: code snippet to call if variable was used to find tool
-AC_DEFUN([UTIL_SETUP_TOOL],
-[
- # Publish this variable in the help.
- AC_ARG_VAR($1, [Override default value for $1])
-
- if [[ -z "${$1+x}" ]]; then
- # The variable is not set by user, try to locate tool using the code snippet
- $2
- else
- # The variable is set, but is it from the command line or the environment?
-
- # Try to remove the string !$1! from our list.
- try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!$1!/}
- if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then
- # If it failed, the variable was not from the command line. Ignore it,
- # but warn the user (except for BASH, which is always set by the calling BASH).
- if test "x$1" != xBASH; then
- AC_MSG_WARN([Ignoring value of $1 from the environment. Use command line variables instead.])
- fi
- # Try to locate tool using the code snippet
- $2
- else
- # If it succeeded, then it was overridden by the user. We will use it
- # for the tool.
-
- # First remove it from the list of overridden variables, so we can test
- # for unknown variables in the end.
- CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var"
-
- tool_override=[$]$1
- AC_MSG_NOTICE([User supplied override $1="$tool_override"])
-
- # Check if we try to supply an empty value
- if test "x$tool_override" = x; then
- AC_MSG_CHECKING([for $1])
- AC_MSG_RESULT([disabled])
- else
- # Split up override in command part and argument part
- tool_and_args=($tool_override)
- [ tool_command=${tool_and_args[0]} ]
- [ unset 'tool_and_args[0]' ]
- [ tool_args=${tool_and_args[@]} ]
-
- # Check if the provided tool contains a complete path.
- tool_basename="${tool_command##*/}"
- if test "x$tool_basename" = "x$tool_command"; then
- # A command without a complete path is provided, search $PATH.
- AC_MSG_NOTICE([Will search for user supplied tool "$tool_basename"])
- AC_PATH_PROG($1, $tool_basename)
- if test "x[$]$1" = x; then
- AC_MSG_ERROR([User supplied tool $1="$tool_basename" could not be found])
- fi
- else
- # Otherwise we believe it is a complete path. Use it as it is.
- AC_MSG_NOTICE([Will use user supplied tool "$tool_command"])
- AC_MSG_CHECKING([for $tool_command])
- if test ! -x "$tool_command" && test ! -x "$tool_command.exe"; then
- AC_MSG_RESULT([not found])
- AC_MSG_ERROR([User supplied tool $1="$tool_command" does not exist or is not executable])
- fi
- $1="$tool_command"
- AC_MSG_RESULT([found])
- fi
- if test "x$tool_args" != x; then
- # If we got arguments, re-append them to the command after the fixup.
- $1="[$]$1 $tool_args"
- fi
- fi
- fi
- $3
- fi
-])
-
-###############################################################################
-# Call UTIL_SETUP_TOOL with AC_PATH_PROGS to locate the tool
-# $1: variable to set
-# $2: executable name (or list of names) to look for
-# $3: [path]
-AC_DEFUN([UTIL_PATH_PROGS],
-[
- UTIL_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
-])
-
-###############################################################################
-# Call UTIL_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool
-# $1: variable to set
-# $2: executable name (or list of names) to look for
-AC_DEFUN([UTIL_CHECK_TOOLS],
-[
- UTIL_SETUP_TOOL($1, [AC_CHECK_TOOLS($1, $2)])
-])
-
-###############################################################################
-# Like UTIL_PATH_PROGS but fails if no tool was found.
-# $1: variable to set
-# $2: executable name (or list of names) to look for
-# $3: [path]
-AC_DEFUN([UTIL_REQUIRE_PROGS],
-[
- UTIL_PATH_PROGS($1, $2, , $3)
- UTIL_CHECK_NONEMPTY($1)
-])
-
-###############################################################################
-# Like UTIL_SETUP_TOOL but fails if no tool was found.
-# $1: variable to set
-# $2: autoconf macro to call to look for the special tool
-AC_DEFUN([UTIL_REQUIRE_SPECIAL],
-[
- UTIL_SETUP_TOOL($1, [$2])
- UTIL_CHECK_NONEMPTY($1)
-])
-
-###############################################################################
-# Like UTIL_REQUIRE_PROGS but also allows for bash built-ins
-# $1: variable to set
-# $2: executable name (or list of names) to look for
-# $3: [path]
-AC_DEFUN([UTIL_REQUIRE_BUILTIN_PROGS],
-[
- UTIL_SETUP_TOOL($1, [AC_PATH_PROGS($1, $2, , $3)])
- if test "x[$]$1" = x; then
- AC_MSG_NOTICE([Required tool $2 not found in PATH, checking built-in])
- if type -p $2 > /dev/null 2>&1; then
- AC_MSG_NOTICE([Found $2 as shell built-in. Using it])
- $1="$2"
- else
- AC_MSG_ERROR([Required tool $2 also not found as built-in.])
- fi
- fi
- UTIL_CHECK_NONEMPTY($1)
-])
diff --git a/make/autoconf/util_paths.m4 b/make/autoconf/util_paths.m4
index 9a3d3e2bb04..8909babf7e8 100644
--- a/make/autoconf/util_paths.m4
+++ b/make/autoconf/util_paths.m4
@@ -23,6 +23,7 @@
# questions.
#
+###############################################################################
# Appends a string to a path variable, only adding the : when needed.
AC_DEFUN([UTIL_APPEND_TO_PATH],
[
@@ -35,6 +36,7 @@ AC_DEFUN([UTIL_APPEND_TO_PATH],
fi
])
+###############################################################################
# Prepends a string to a path variable, only adding the : when needed.
AC_DEFUN([UTIL_PREPEND_TO_PATH],
[
@@ -47,34 +49,6 @@ AC_DEFUN([UTIL_PREPEND_TO_PATH],
fi
])
-################################################################################
-# This will make a path absolute. Assumes it's already a unix path. Also
-# resolves ~ to homedir.
-AC_DEFUN([UTIL_ABSOLUTE_PATH],
-[
- if test "x[$]$1" != x; then
- new_path="[$]$1"
-
- # Use eval to expand a potential ~. This technique does not work if there
- # are spaces in the path (which is valid at this point on Windows), so only
- # try to apply it if there is an actual ~ first in the path.
- if [ [[ "$new_path" = "~"* ]] ]; then
- eval new_path="$new_path"
- if test ! -f "$new_path" && test ! -d "$new_path"; then
- AC_MSG_ERROR([The new_path of $1, which resolves as "$new_path", is not found.])
- fi
- fi
-
- if test -d "$new_path"; then
- $1="`cd "$new_path"; $THEPWDCMD -L`"
- else
- dir="`$DIRNAME "$new_path"`"
- base="`$BASENAME "$new_path"`"
- $1="`cd "$dir"; $THEPWDCMD -L`/$base"
- fi
- fi
-])
-
###############################################################################
# This will make sure the given variable points to a full and proper
# path. This means:
@@ -84,31 +58,100 @@ AC_DEFUN([UTIL_ABSOLUTE_PATH],
# 2) The path will be absolute, and it will be in unix-style (on
# cygwin).
# $1: The name of the variable to fix
+# $2: if NOFAIL, errors will be silently ignored
AC_DEFUN([UTIL_FIXUP_PATH],
[
# Only process if variable expands to non-empty
- if test "x[$]$1" != x; then
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- UTIL_FIXUP_PATH_CYGWIN($1)
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- UTIL_FIXUP_PATH_MSYS($1)
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- UTIL_FIXUP_PATH_WSL($1)
+ path="[$]$1"
+ if test "x$path" != x; then
+ if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
+ if test "x$2" = "xNOFAIL"; then
+ quiet_option="-q"
+ fi
+ imported_path=`$FIXPATH_BASE $quiet_option import "$path"`
+ $FIXPATH_BASE verify "$imported_path"
+ if test $? -ne 0; then
+ if test "x$2" != "xNOFAIL"; then
+ AC_MSG_ERROR([The path of $1, which resolves as "$path", could not be imported.])
+ else
+ imported_path=""
+ fi
+ fi
+ if test "x$imported_path" != "x$path"; then
+ $1="$imported_path"
+ fi
else
- # We're on a unix platform. Hooray! :)
- path="[$]$1"
- has_space=`$ECHO "$path" | $GREP " "`
- if test "x$has_space" != x; then
- AC_MSG_NOTICE([The path of $1, which resolves as "$path", is invalid.])
- AC_MSG_ERROR([Spaces are not allowed in this path.])
+ [ if [[ "$path" =~ " " ]]; then ]
+ if test "x$2" != "xNOFAIL"; then
+ AC_MSG_NOTICE([The path of $1, which resolves as "$path", is invalid.])
+ AC_MSG_ERROR([Spaces are not allowed in this path.])
+ else
+ path=""
+ fi
+ fi
+
+ # Use eval to expand a potential ~.
+ eval new_path="$path"
+ if test ! -e "$new_path"; then
+ if test "x$2" != "xNOFAIL"; then
+ AC_MSG_ERROR([The path of $1, which resolves as "$new_path", is not found.])
+ else
+ new_path=""
+ fi
+ fi
+
+ # Make the path absolute
+ if test "x$new_path" != x; then
+ if test -d "$new_path"; then
+ path="`cd "$new_path"; pwd -L`"
+ else
+ dir="`$DIRNAME "$new_path"`"
+ base="`$BASENAME "$new_path"`"
+ path="`cd "$dir"; pwd -L`/$base"
+ fi
+ else
+ path=""
fi
- UTIL_ABSOLUTE_PATH(path)
$1="$path"
fi
fi
])
+###############################################################################
+# Check if the given file is a unix-style or windows-style executable, that is,
+# if it expects paths in unix-style or windows-style.
+# Returns "windows" or "unix" in $RESULT.
+AC_DEFUN([UTIL_CHECK_WINENV_EXEC_TYPE],
+[
+ # For cygwin and msys2, if it's linked with the correct helper lib, it
+ # accept unix paths
+ if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin" || \
+ test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys2"; then
+ linked_libs=`$LDD $1 2>&1`
+ if test $? -ne 0; then
+ # Non-binary files (e.g. shell scripts) are unix files
+ RESULT=unix
+ else
+ [ if [[ "$linked_libs" =~ $WINENV_MARKER_DLL ]]; then ]
+ RESULT=unix
+ else
+ RESULT=windows
+ fi
+ fi
+ elif test "x$OPENJDK_BUILD_OS" = "xwindows"; then
+ # On WSL, we can check if it is a PE file
+ file_type=`$FILE -b $1 2>&1`
+ [ if [[ $file_type =~ PE.*Windows ]]; then ]
+ RESULT=windows
+ else
+ RESULT=unix
+ fi
+ else
+ RESULT=unix
+ fi
+])
+
###############################################################################
# This will make sure the given variable points to a executable
# with a full and proper path. This means:
@@ -121,65 +164,331 @@ AC_DEFUN([UTIL_FIXUP_PATH],
# If the input variable does not have a directory specification, then
# it need to be in the PATH.
# $1: The name of the variable to fix
+# $2: Where to look for the command (replaces $PATH)
+# $3: set to NOFIXPATH to skip prefixing FIXPATH, even if needed on platform
AC_DEFUN([UTIL_FIXUP_EXECUTABLE],
[
- # Only process if variable expands to non-empty
+ input="[$]$1"
- if test "x[$]$1" != x; then
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- UTIL_FIXUP_EXECUTABLE_CYGWIN($1)
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- UTIL_FIXUP_EXECUTABLE_MSYS($1)
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- UTIL_FIXUP_EXECUTABLE_WSL($1)
+ # Only process if variable expands to non-empty
+ if test "x$input" != x; then
+ # First separate the path from the arguments. This will split at the first
+ # space.
+ [ if [[ "$OPENJDK_BUILD_OS" = "windows" && input =~ ^$FIXPATH ]]; then
+ line="${input#$FIXPATH }"
+ fixpath_prefix="$FIXPATH "
else
- # We're on a unix platform. Hooray! :)
- # First separate the path from the arguments. This will split at the first
- # space.
- complete="[$]$1"
- path="${complete%% *}"
- tmp="$complete EOL"
- arguments="${tmp#* }"
-
- # Cannot rely on the command "which" here since it doesn't always work.
- is_absolute_path=`$ECHO "$path" | $GREP ^/`
- if test -z "$is_absolute_path"; then
- # Path to executable is not absolute. Find it.
- IFS_save="$IFS"
- IFS=:
- for p in $PATH; do
- if test -f "$p/$path" && test -x "$p/$path"; then
- new_path="$p/$path"
- break
- fi
- done
- IFS="$IFS_save"
- else
- # This is an absolute path, we can use it without further modifications.
+ line="$input"
+ fixpath_prefix=""
+ fi ]
+ path="${line%% *}"
+ arguments="${line#"$path"}"
+
+ [ if ! [[ "$path" =~ /|\\ ]]; then ]
+ # This is a command without path (e.g. "gcc" or "echo")
+ command_type=`type -t "$path"`
+ if test "x$command_type" = xbuiltin || test "x$command_type" = xkeyword; then
+ # Shell builtin or keyword; we're done here
new_path="$path"
+ else
+ # Search in $PATH using bash built-in 'type -p'.
+ saved_path="$PATH"
+ if test "x$2" != x; then
+ PATH="$2"
+ fi
+ new_path=`type -p "$path"`
+ if test "x$new_path" = x && test "x$OPENJDK_BUILD_OS" = "xwindows"; then
+ # Try again with .exe
+ new_path="`type -p "$path.exe"`"
+ fi
+ PATH="$saved_path"
+
+ if test "x$new_path" = x; then
+ AC_MSG_NOTICE([The command for $1, which resolves as "$input", is not found in the PATH.])
+ AC_MSG_ERROR([Cannot locate $path])
+ fi
fi
+ else
+ # This is a path with slashes, don't look at $PATH
+ if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
+ # fixpath.sh import will do all heavy lifting for us
+ new_path=`$FIXPATH_BASE import "$path"`
+
+ if test ! -e $new_path; then
+ # It failed, but maybe spaces were part of the path and not separating
+ # the command and argument. Retry using that assumption.
+ new_path=`$FIXPATH_BASE import "$input"`
+ if test ! -e $new_path; then
+ AC_MSG_NOTICE([The command for $1, which resolves as "$input", can not be found.])
+ AC_MSG_ERROR([Cannot locate $input])
+ fi
+ # It worked, clear all "arguments"
+ arguments=""
+ fi
+ else # on unix
+ # Make absolute
+ $1="$path"
+ UTIL_FIXUP_PATH($1, NOFAIL)
+ new_path="[$]$1"
+
+ if test ! -e $new_path; then
+ AC_MSG_NOTICE([The command for $1, which resolves as "$input", is not found])
+ [ if [[ "$path" =~ " " ]]; then ]
+ AC_MSG_NOTICE([This might be caused by spaces in the path, which is not allowed.])
+ fi
+ AC_MSG_ERROR([Cannot locate $path])
+ fi
+ if test ! -x $new_path; then
+ AC_MSG_NOTICE([The command for $1, which resolves as "$input", is not executable.])
+ AC_MSG_ERROR([Cannot execute command at $path])
+ fi
+ fi # end on unix
+ fi # end with or without slashes
- if test "x$new_path" = x; then
- AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.])
- has_space=`$ECHO "$complete" | $GREP " "`
- if test "x$has_space" != x; then
- AC_MSG_NOTICE([This might be caused by spaces in the path, which is not allowed.])
+ # Now we have a usable command as new_path, with arguments in arguments
+ if test "x$OPENJDK_BUILD_OS" = "xwindows"; then
+ if test "x$fixpath_prefix" = x; then
+ # Only mess around if fixpath_prefix was not given
+ UTIL_CHECK_WINENV_EXEC_TYPE("$new_path")
+ if test "x$RESULT" = xwindows; then
+ fixpath_prefix="$FIXPATH "
+ # make sure we have an .exe suffix (but not two)
+ new_path="${new_path%.exe}.exe"
+ else
+ # If we have gotten a .exe suffix, remove it
+ new_path="${new_path%.exe}"
fi
- AC_MSG_ERROR([Cannot locate the the path of $1])
fi
fi
+ if test "x$3" = xNOFIXPATH; then
+ fixpath_prefix=""
+ fi
+
# Now join together the path and the arguments once again
- if test "x$arguments" != xEOL; then
- new_complete="$new_path ${arguments% *}"
+ new_complete="$fixpath_prefix$new_path$arguments"
+ $1="$new_complete"
+ fi
+])
+
+###############################################################################
+# Setup a tool for the given variable. If correctly specified by the user,
+# use that value, otherwise search for the tool using the supplied code snippet.
+# $1: variable to set
+# $2: code snippet to call to look for the tool
+# $3: code snippet to call if variable was used to find tool
+AC_DEFUN([UTIL_SETUP_TOOL],
+[
+ # Publish this variable in the help.
+ AC_ARG_VAR($1, [Override default value for $1])
+
+ if [[ -z "${$1+x}" ]]; then
+ # The variable is not set by user, try to locate tool using the code snippet
+ $2
+ else
+ # The variable is set, but is it from the command line or the environment?
+
+ # Try to remove the string !$1! from our list.
+ try_remove_var=${CONFIGURE_OVERRIDDEN_VARIABLES//!$1!/}
+ if test "x$try_remove_var" = "x$CONFIGURE_OVERRIDDEN_VARIABLES"; then
+ # If it failed, the variable was not from the command line. Ignore it,
+ # but warn the user (except for BASH, which is always set by the calling BASH).
+ if test "x$1" != xBASH; then
+ AC_MSG_WARN([Ignoring value of $1 from the environment. Use command line variables instead.])
+ fi
+ # Try to locate tool using the code snippet
+ $2
else
- new_complete="$new_path"
+ # If it succeeded, then it was overridden by the user. We will use it
+ # for the tool.
+
+ # First remove it from the list of overridden variables, so we can test
+ # for unknown variables in the end.
+ CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var"
+
+ tool_override=[$]$1
+
+ # Check if we try to supply an empty value
+ if test "x$tool_override" = x; then
+ AC_MSG_CHECKING([for $1])
+ AC_MSG_RESULT([[[disabled by user]]])
+ else
+ # Split up override in command part and argument part
+ tool_and_args=($tool_override)
+ [ tool_command=${tool_and_args[0]} ]
+ [ unset 'tool_and_args[0]' ]
+ [ tool_args=${tool_and_args[@]} ]
+
+ # Check if the provided tool contains a complete path.
+ tool_basename="${tool_command##*/}"
+ if test "x$tool_basename" = "x$tool_command"; then
+ # A command without a complete path is provided, search $PATH.
+ AC_MSG_NOTICE([Will search for user supplied tool "$tool_basename"])
+ AC_PATH_PROGS($1, $tool_basename ${tool_basename}.exe)
+ tool_command="[$]$1"
+ if test "x$tool_command" = x; then
+ AC_MSG_ERROR([User supplied tool $1="$tool_basename" could not be found in PATH])
+ fi
+ else
+ # Otherwise we believe it is a complete path. Use it as it is.
+ if test ! -x "$tool_command" && test ! -x "${tool_command}.exe"; then
+ AC_MSG_ERROR([User supplied tool $1="$tool_command" does not exist or is not executable])
+ fi
+ if test ! -x "$tool_command"; then
+ tool_command="${tool_command}.exe"
+ fi
+ $1="$tool_command"
+ fi
+ if test "x$tool_args" != x; then
+ # If we got arguments, re-append them to the command after the fixup.
+ $1="[$]$1 $tool_args"
+ fi
+ AC_MSG_CHECKING([for $1])
+ AC_MSG_RESULT([[$]$1 [[user supplied]]])
+ fi
+ fi
+ $3
+ fi
+])
+
+###############################################################################
+# Locate a tool using proper methods.
+# $1: variable to set
+# $2: executable name (or list of names) to look for
+# $3: [path]
+# $4: set to NOFIXPATH to skip prefixing FIXPATH, even if needed on platform
+AC_DEFUN([UTIL_LOOKUP_PROGS],
+[
+ UTIL_SETUP_TOOL($1, [
+ $1=""
+
+ if test "x$3" != x; then
+ old_path="$PATH"
+ PATH="$3"
fi
- if test "x$complete" != "x$new_complete"; then
- $1="$new_complete"
- AC_MSG_NOTICE([Rewriting $1 to "$new_complete"])
+ for name in $2; do
+ AC_MSG_CHECKING(for $name)
+
+ command_type=`type -t "$name"`
+ if test "x$command_type" = xbuiltin || test "x$command_type" = xkeyword; then
+ # Shell builtin or keyword; we're done here
+ full_path="$name"
+ $1="$full_path"
+ AC_MSG_RESULT([[$full_path [builtin]]])
+ break
+ else
+ # Search in $PATH
+ old_ifs="$IFS"
+ IFS=":"
+ for elem in $PATH; do
+ IFS="$old_ifs"
+ if test "x$elem" = x; then
+ continue
+ fi
+ full_path="$elem/$name"
+ if test ! -e "$full_path" && test "x$OPENJDK_BUILD_OS" = "xwindows"; then
+ # Try again with .exe
+ full_path="$elem/$name.exe"
+ fi
+ if test -x "$full_path" && test ! -d "$full_path" ; then
+ $1="$full_path"
+ UTIL_FIXUP_EXECUTABLE($1, $3, $4)
+ result="[$]$1"
+
+ # If we have FIXPATH enabled, strip all instances of it and prepend
+ # a single one, to avoid double fixpath prefixing.
+ if test "x$4" != xNOFIXPATH; then
+ [ if [[ $FIXPATH != "" && $result =~ ^"$FIXPATH " ]]; then ]
+ result="\$FIXPATH ${result#"$FIXPATH "}"
+ fi
+ fi
+ AC_MSG_RESULT([$result])
+ break 2;
+ fi
+ done
+ IFS="$old_ifs"
+ fi
+ AC_MSG_RESULT([[[not found]]])
+ done
+
+ if test "x$3" != x; then
+ PATH="$old_path"
fi
+ ])
+])
+
+###############################################################################
+# Call UTIL_SETUP_TOOL with AC_CHECK_TOOLS to locate the tool. This will look
+# first for cross-compilation tools.
+# $1: variable to set
+# $2: executable name (or list of names) to look for
+# $3: [path]
+AC_DEFUN([UTIL_LOOKUP_TOOLCHAIN_PROGS],
+[
+ if test "x$ac_tool_prefix" = x; then
+ UTIL_LOOKUP_PROGS($1, $2, $3)
+ else
+ prefixed_names=$(for name in $2; do echo ${ac_tool_prefix}${name} $name; done)
+ UTIL_LOOKUP_PROGS($1, $prefixed_names, $3)
+ fi
+])
+
+###############################################################################
+# Test that variable $1 denoting a program is not empty. If empty, exit with an error.
+# $1: variable to check
+AC_DEFUN([UTIL_CHECK_NONEMPTY],
+[
+ if test "x[$]$1" = x; then
+ AC_MSG_ERROR([Could not find required tool for $1])
+ fi
+])
+
+###############################################################################
+# Like UTIL_LOOKUP_PROGS but fails if no tool was found.
+# $1: variable to set
+# $2: executable name (or list of names) to look for
+# $3: [path]
+AC_DEFUN([UTIL_REQUIRE_PROGS],
+[
+ UTIL_LOOKUP_PROGS($1, $2, $3)
+ UTIL_CHECK_NONEMPTY($1)
+])
+
+###############################################################################
+# Like UTIL_LOOKUP_PROGS but fails if no tool was found.
+# $1: variable to set
+# $2: executable name (or list of names) to look for
+# $3: [path]
+AC_DEFUN([UTIL_REQUIRE_TOOLCHAIN_PROGS],
+[
+ UTIL_LOOKUP_TOOLCHAIN_PROGS($1, $2, $3)
+ UTIL_CHECK_NONEMPTY($1)
+])
+
+
+###############################################################################
+# Like UTIL_SETUP_TOOL but fails if no tool was found.
+# $1: variable to set
+# $2: autoconf macro to call to look for the special tool
+AC_DEFUN([UTIL_REQUIRE_SPECIAL],
+[
+ UTIL_SETUP_TOOL($1, [$2])
+ UTIL_CHECK_NONEMPTY($1)
+ # The special macro will return an absolute path, and is only used for
+ # unix tools. No further processing needed.
+])
+
+###############################################################################
+# Add FIXPATH prefix to variable. Normally this is done by UTIL_LOOKUP_PROGS
+# or UTIL_FIXUP_EXECUTABLE, but in some circumstances this has to be done
+# explicitly, such as when the command in question does not exist yet.
+#
+# $1: variable to add fixpath to
+AC_DEFUN([UTIL_ADD_FIXPATH],
+[
+ if test "x$FIXPATH" != x; then
+ $1="$FIXPATH [$]$1"
fi
])
@@ -208,8 +517,8 @@ AC_DEFUN([UTIL_REMOVE_SYMBOLIC_LINKS],
sym_link_file=`$BASENAME [$]$1`
cd $sym_link_dir
# Use -P flag to resolve symlinks in directories.
- cd `$THEPWDCMD -P`
- sym_link_dir=`$THEPWDCMD -P`
+ cd `pwd -P`
+ sym_link_dir=`pwd -P`
# Resolve file symlinks
while test $COUNTER -lt 20; do
ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'`
@@ -220,7 +529,7 @@ AC_DEFUN([UTIL_REMOVE_SYMBOLIC_LINKS],
# Again resolve directory symlinks since the target of the just found
# link could be in a different directory
cd `$DIRNAME $ISLINK`
- sym_link_dir=`$THEPWDCMD -P`
+ sym_link_dir=`pwd -P`
sym_link_file=`$BASENAME $ISLINK`
let COUNTER=COUNTER+1
done
@@ -229,4 +538,3 @@ AC_DEFUN([UTIL_REMOVE_SYMBOLIC_LINKS],
fi
fi
])
-
diff --git a/make/autoconf/util_windows.m4 b/make/autoconf/util_windows.m4
deleted file mode 100644
index 868c436bcb3..00000000000
--- a/make/autoconf/util_windows.m4
+++ /dev/null
@@ -1,451 +0,0 @@
-#
-# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-AC_DEFUN([UTIL_REWRITE_AS_UNIX_PATH],
-[
- windows_path="[$]$1"
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- unix_path=`$CYGPATH -u "$windows_path"`
- $1="$unix_path"
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'`
- $1="$unix_path"
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- # wslpath does not check the input, only call if an actual windows path was
- # given.
- if $ECHO "$windows_path" | $GREP -q ["^[a-zA-Z]:[\\\\/]"]; then
- unix_path=`$WSLPATH -u "$windows_path"`
- $1="$unix_path"
- fi
- fi
-])
-
-AC_DEFUN([UTIL_REWRITE_AS_WINDOWS_MIXED_PATH],
-[
- unix_path="[$]$1"
- if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
- windows_path=`$CYGPATH -m "$unix_path"`
- $1="$windows_path"
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then
- windows_path=`cmd //c echo $unix_path`
- $1="$windows_path"
- elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.wsl"; then
- windows_path=`$WSLPATH -m "$unix_path" 2>/dev/null`
- if test $? -ne 0; then
- dir=`dirname "$unix_path"`
- base=`basename "$unix_path"`
- windows_path=`$WSLPATH -m "$dir"`/"$base"
- if test $? -ne 0; then
- AC_MSG_ERROR([Cannot convert "$unix_path" to Windows path])
- fi
- fi
- $1="$windows_path"
- fi
-])
-
-# Helper function which possibly converts a path using DOS-style short mode.
-# If so, the updated path is stored in $new_path.
-# $1: The path to check
-AC_DEFUN([UTIL_MAKE_WINDOWS_SPACE_SAFE_CYGWIN],
-[
- input_path="$1"
- # Check if we need to convert this using DOS-style short mode. If the path
- # contains just simple characters, use it. Otherwise (spaces, weird characters),
- # take no chances and rewrite it.
- # Note: m4 eats our [], so we need to use @<:@ and @:>@ instead.
- has_forbidden_chars=`$ECHO "$input_path" | $GREP @<:@^-._/a-zA-Z0-9@:>@`
- if test "x$has_forbidden_chars" != x; then
- # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
- shortmode_path=`$CYGPATH -s -m -a "$input_path"`
- path_after_shortmode=`$CYGPATH -u "$shortmode_path"`
- if test "x$path_after_shortmode" != "x$input_to_shortpath"; then
- # Going to short mode and back again did indeed matter. Since short mode is
- # case insensitive, let's make it lowercase to improve readability.
- shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- # Now convert it back to Unix-style (cygpath)
- input_path=`$CYGPATH -u "$shortmode_path"`
- new_path="$input_path"
- fi
- fi
-
- test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/`
- if test "x$test_cygdrive_prefix" = x; then
- # As a simple fix, exclude /usr/bin since it's not a real path.
- if test "x`$ECHO $1 | $GREP ^/usr/bin/`" = x; then
- # The path is in a Cygwin special directory (e.g. /home). We need this converted to
- # a path prefixed by /cygdrive for fixpath to work.
- new_path="$CYGWIN_ROOT_PATH$input_path"
- fi
- fi
-])
-
-# Helper function which possibly converts a path using DOS-style short mode.
-# If so, the updated path is stored in $new_path.
-# $1: The path to check
-AC_DEFUN([UTIL_MAKE_WINDOWS_SPACE_SAFE_MSYS],
-[
- input_path="$1"
- # Check if we need to convert this using DOS-style short mode. If the path
- # contains just simple characters, use it. Otherwise (spaces, weird characters),
- # take no chances and rewrite it.
- # Note: m4 eats our [], so we need to use @<:@ and @:>@ instead.
- has_forbidden_chars=`$ECHO "$input_path" | $GREP @<:@^-_/:a-zA-Z0-9@:>@`
- if test "x$has_forbidden_chars" != x; then
- # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
- new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- fi
-])
-
-# Helper function which possibly converts a path using DOS-style short mode.
-# If so, the updated path is stored in $new_path.
-# $1: The path to check
-AC_DEFUN([UTIL_MAKE_WINDOWS_SPACE_SAFE_WSL],
-[
- input_path="$1"
- # Check if we need to convert this using DOS-style short mode. If the path
- # contains just simple characters, use it. Otherwise (spaces, weird characters),
- # take no chances and rewrite it.
- # Note: m4 eats our [], so we need to use @<:@ and @:>@ instead.
- has_forbidden_chars=`$ECHO "$input_path" | $GREP [[^-_/:a-zA-Z0-9\\.]]`
- if test "x$has_forbidden_chars" != x; then
- # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \)
- TOPDIR_windows="$TOPDIR"
- UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([TOPDIR_windows])
- # First convert to Windows path to make input valid for cmd
- UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([input_path])
- # Reset PATH since it can contain a mix of WSL/linux paths and Windows paths from VS,
- # which, in combination with WSLENV, will make the WSL layer complain
- old_path="$PATH"
- PATH=
- new_path=`$CMD /c $TOPDIR_windows/make/scripts/windowsShortName.bat "$input_path" \
- | $SED -e 's|\r||g' \
- | $TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- # Rewrite back to unix style
- PATH="$old_path"
- UTIL_REWRITE_AS_UNIX_PATH([new_path])
- fi
-])
-
-# FIXME: The UTIL_FIXUP_*_CYGWIN/MSYS is most likely too convoluted
-# and could probably be heavily simplified. However, all changes in this
-# area tend to need lot of testing in different scenarios, and in lack of
-# proper unit testing, cleaning this up has not been deemed worth the effort
-# at the moment.
-
-AC_DEFUN([UTIL_FIXUP_PATH_CYGWIN],
-[
- # Input might be given as Windows format, start by converting to
- # unix format.
- path="[$]$1"
- new_path=`$CYGPATH -u "$path"`
-
- UTIL_ABSOLUTE_PATH(new_path)
-
- # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
- # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
- # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
- # "foo.exe" is OK but "foo" is an error.
- #
- # This test is therefore slightly more accurate than "test -f" to check for file precense.
- # It is also a way to make sure we got the proper file name for the real test later on.
- test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
- if test "x$test_shortpath" = x; then
- AC_MSG_NOTICE([The path of $1, which resolves as "$path", is invalid.])
- AC_MSG_ERROR([Cannot locate the the path of $1])
- fi
-
- # Call helper function which possibly converts this using DOS-style short mode.
- # If so, the updated path is stored in $new_path.
- UTIL_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$new_path])
-
- if test "x$path" != "x$new_path"; then
- $1="$new_path"
- AC_MSG_NOTICE([Rewriting $1 to "$new_path"])
- fi
-])
-
-AC_DEFUN([UTIL_FIXUP_PATH_MSYS],
-[
- path="[$]$1"
- has_colon=`$ECHO $path | $GREP ^.:`
- new_path="$path"
- if test "x$has_colon" = x; then
- # Not in mixed or Windows style, start by that.
- new_path=`cmd //c echo $path`
- fi
-
- UTIL_ABSOLUTE_PATH(new_path)
-
- UTIL_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path])
- UTIL_REWRITE_AS_UNIX_PATH(new_path)
- if test "x$path" != "x$new_path"; then
- $1="$new_path"
- AC_MSG_NOTICE([Rewriting $1 to "$new_path"])
- fi
-
- # Save the first 10 bytes of this path to the storage, so fixpath can work.
- all_fixpath_prefixes=("${all_fixpath_prefixes@<:@@@:>@}" "${new_path:0:10}")
-])
-
-AC_DEFUN([UTIL_FIXUP_PATH_WSL],
-[
- # Input might be given as Windows format, start by converting to
- # unix format.
- new_path="[$]$1"
- UTIL_REWRITE_AS_UNIX_PATH([new_path])
-
- UTIL_ABSOLUTE_PATH(new_path)
-
- # Call helper function which possibly converts this using DOS-style short mode.
- # If so, the updated path is stored in $new_path.
- UTIL_MAKE_WINDOWS_SPACE_SAFE_WSL([$new_path])
-
- if test "x$path" != "x$new_path"; then
- $1="$new_path"
- AC_MSG_NOTICE([Rewriting $1 to "$new_path"])
- fi
-])
-
-AC_DEFUN([UTIL_FIXUP_EXECUTABLE_CYGWIN],
-[
- # First separate the path from the arguments. This will split at the first
- # space.
- complete="[$]$1"
- path="${complete%% *}"
- tmp="$complete EOL"
- arguments="${tmp#* }"
-
- # Input might be given as Windows format, start by converting to
- # unix format.
- new_path=`$CYGPATH -u "$path"`
-
- # Now try to locate executable using which
- new_path=`type -p "$new_path" 2> /dev/null`
- # bat and cmd files are not always considered executable in cygwin causing which
- # to not find them
- if test "x$new_path" = x \
- && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
- && test "x`$LS \"$path\" 2>/dev/null`" != x; then
- new_path=`$CYGPATH -u "$path"`
- fi
- if test "x$new_path" = x; then
- # Oops. Which didn't find the executable.
- # The splitting of arguments from the executable at a space might have been incorrect,
- # since paths with space are more likely in Windows. Give it another try with the whole
- # argument.
- path="$complete"
- arguments="EOL"
- new_path=`$CYGPATH -u "$path"`
- new_path=`type -p "$new_path" 2> /dev/null`
- # bat and cmd files are not always considered executable in cygwin causing which
- # to not find them
- if test "x$new_path" = x \
- && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
- && test "x`$LS \"$path\" 2>/dev/null`" != x; then
- new_path=`$CYGPATH -u "$path"`
- fi
- if test "x$new_path" = x; then
- # It's still not found. Now this is an unrecoverable error.
- AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.])
- has_space=`$ECHO "$complete" | $GREP " "`
- if test "x$has_space" != x; then
- AC_MSG_NOTICE([You might be mixing spaces in the path and extra arguments, which is not allowed.])
- fi
- AC_MSG_ERROR([Cannot locate the the path of $1])
- fi
- fi
-
- # Cygwin tries to hide some aspects of the Windows file system, such that binaries are
- # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered
- # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then
- # "foo.exe" is OK but "foo" is an error.
- #
- # This test is therefore slightly more accurate than "test -f" to check for file presence.
- # It is also a way to make sure we got the proper file name for the real test later on.
- test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null`
- if test "x$test_shortpath" = x; then
- # Short path failed, file does not exist as specified.
- # Try adding .exe or .cmd
- if test -f "${new_path}.exe"; then
- input_to_shortpath="${new_path}.exe"
- elif test -f "${new_path}.cmd"; then
- input_to_shortpath="${new_path}.cmd"
- else
- AC_MSG_NOTICE([The path of $1, which resolves as "$new_path", is invalid.])
- AC_MSG_NOTICE([Neither "$new_path" nor "$new_path.exe/cmd" can be found])
- AC_MSG_ERROR([Cannot locate the the path of $1])
- fi
- else
- input_to_shortpath="$new_path"
- fi
-
- # Call helper function which possibly converts this using DOS-style short mode.
- # If so, the updated path is stored in $new_path.
- new_path="$input_to_shortpath"
- UTIL_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$input_to_shortpath])
- # remove trailing .exe if any
- new_path="${new_path/%.exe/}"
-])
-
-AC_DEFUN([UTIL_FIXUP_EXECUTABLE_MSYS],
-[
- # First separate the path from the arguments. This will split at the first
- # space.
- complete="[$]$1"
- path="${complete%% *}"
- tmp="$complete EOL"
- arguments="${tmp#* }"
-
- # Input might be given as Windows format, start by converting to
- # unix format.
- new_path="$path"
- UTIL_REWRITE_AS_UNIX_PATH(new_path)
-
- # Now try to locate executable using which
- new_path=`type -p "$new_path" 2> /dev/null`
-
- if test "x$new_path" = x; then
- # Oops. Which didn't find the executable.
- # The splitting of arguments from the executable at a space might have been incorrect,
- # since paths with space are more likely in Windows. Give it another try with the whole
- # argument.
- path="$complete"
- arguments="EOL"
- new_path="$path"
- UTIL_REWRITE_AS_UNIX_PATH(new_path)
-
- new_path=`type -p "$new_path" 2> /dev/null`
- # bat and cmd files are not always considered executable in MSYS causing which
- # to not find them
- if test "x$new_path" = x \
- && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
- && test "x`$LS \"$path\" 2>/dev/null`" != x; then
- new_path="$path"
- UTIL_REWRITE_AS_UNIX_PATH(new_path)
- fi
-
- if test "x$new_path" = x; then
- # It's still not found. Now this is an unrecoverable error.
- AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.])
- has_space=`$ECHO "$complete" | $GREP " "`
- if test "x$has_space" != x; then
- AC_MSG_NOTICE([You might be mixing spaces in the path and extra arguments, which is not allowed.])
- fi
- AC_MSG_ERROR([Cannot locate the the path of $1])
- fi
- fi
-
- # Now new_path has a complete unix path to the binary
- if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then
- # Keep paths in /bin as-is, but remove trailing .exe if any
- new_path="${new_path/%.exe/}"
- # Do not save /bin paths to all_fixpath_prefixes!
- else
- # Not in mixed or Windows style, start by that.
- new_path=`cmd //c echo $new_path`
- UTIL_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path])
- # Output is in $new_path
- UTIL_REWRITE_AS_UNIX_PATH(new_path)
- # remove trailing .exe if any
- new_path="${new_path/%.exe/}"
-
- # Save the first 10 bytes of this path to the storage, so fixpath can work.
- all_fixpath_prefixes=("${all_fixpath_prefixes@<:@@@:>@}" "${new_path:0:10}")
- fi
-])
-
-AC_DEFUN([UTIL_FIXUP_EXECUTABLE_WSL],
-[
- # First separate the path from the arguments. This will split at the first
- # space.
- complete="[$]$1"
- path="${complete%% *}"
- tmp="$complete EOL"
- arguments="${tmp#* }"
-
- # Input might be given as Windows format, start by converting to
- # unix format.
- new_path="$path"
- UTIL_REWRITE_AS_UNIX_PATH([new_path])
-
- # Now try to locate executable using which
- new_path_bak="$new_path"
- new_path=`type -p "$new_path" 2> /dev/null`
- # bat and cmd files are not considered executable in WSL
- if test "x$new_path" = x \
- && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
- && test "x`$LS \"$path\" 2>/dev/null`" != x; then
- new_path="$new_path_back"
- fi
- if test "x$new_path" = x; then
- # Oops. Which didn't find the executable.
- # The splitting of arguments from the executable at a space might have been incorrect,
- # since paths with space are more likely in Windows. Give it another try with the whole
- # argument.
- path="$complete"
- arguments="EOL"
- new_path="$path"
- UTIL_REWRITE_AS_UNIX_PATH([new_path])
- new_path_bak="$new_path"
- new_path=`type -p "$new_path" 2> /dev/null`
- # bat and cmd files are not considered executable in WSL
- if test "x$new_path" = x \
- && test "x`$ECHO \"$path\" | $GREP -i -e \"\\.bat$\" -e \"\\.cmd$\"`" != x \
- && test "x`$LS \"$path\" 2>/dev/null`" != x; then
- new_path="$new_path_bak"
- fi
- if test "x$new_path" = x; then
- # It's still not found. Now this is an unrecoverable error.
- AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.])
- has_space=`$ECHO "$complete" | $GREP " "`
- if test "x$has_space" != x; then
- AC_MSG_NOTICE([You might be mixing spaces in the path and extra arguments, which is not allowed.])
- fi
- AC_MSG_ERROR([Cannot locate the the path of $1])
- fi
- fi
-
- # In WSL, suffixes must be present for Windows executables
- if test ! -f "$new_path"; then
- # Try adding .exe or .cmd
- if test -f "${new_path}.exe"; then
- input_to_shortpath="${new_path}.exe"
- elif test -f "${new_path}.cmd"; then
- input_to_shortpath="${new_path}.cmd"
- else
- AC_MSG_NOTICE([The path of $1, which resolves as "$new_path", is invalid.])
- AC_MSG_NOTICE([Neither "$new_path" nor "$new_path.exe/cmd" can be found])
- AC_MSG_ERROR([Cannot locate the the path of $1])
- fi
- else
- input_to_shortpath="$new_path"
- fi
-
- # Call helper function which possibly converts this using DOS-style short mode.
- # If so, the updated path is stored in $new_path.
- new_path="$input_to_shortpath"
- UTIL_MAKE_WINDOWS_SPACE_SAFE_WSL([$input_to_shortpath])
-])
-
diff --git a/make/common/JavaCompilation.gmk b/make/common/JavaCompilation.gmk
index 00affb4ea02..cb93131a124 100644
--- a/make/common/JavaCompilation.gmk
+++ b/make/common/JavaCompilation.gmk
@@ -227,25 +227,19 @@ define SetupJavaCompilationBody
# The portfile contains the tcp/ip on which the server listens
# and the cookie necessary to talk to the server.
- $1_JAVAC_PORT_FILE := $$(JAVAC_SERVER_DIR)/server.port
+ $1_JAVAC_PORT_FILE := $$(call FixPath, $$(JAVAC_SERVER_DIR)/server.port)
- # The servercmd specified how to launch the server. This must use
- # JAVA_DETACH, which is the "big" java with an ability to detach from
- # fixpath (on Windows) This will be executed by the client, if needed.
- $1_JAVAC_SERVER_CMD := $$(JAVA_DETACH) $$($1_JAVA_FLAGS) $$($1_JAVAC)
+ # The servercmd specifies how to launch the server. This will be executed
+ # by the client, if needed.
+ $1_JAVAC_SERVER_CMD := $$(call FixPath, $$(JAVA) $$($1_JAVA_FLAGS) $$($1_JAVAC))
$1_CONFIG_VARDEPS := $$($1_JAVAC_PORT_FILE) $$($1_JAVAC_SERVER_CMD)
$1_CONFIG_VARDEPS_FILE := $$(call DependOnVariable, $1_CONFIG_VARDEPS, \
$$($1_BIN)$$($1_MODULE_SUBDIR)/_the.$1.config_vardeps)
- ifeq ($(call isBuildOs, windows), true)
- $1_ECHO_COMMAND := $(FIXPATH) cmd /c echo
- else
- $1_ECHO_COMMAND := $(ECHO)
- endif
$$($1_JAVAC_SERVER_CONFIG): $$($1_CONFIG_VARDEPS_FILE)
- $$($1_ECHO_COMMAND) portfile=$$($1_JAVAC_PORT_FILE) > $$@
- $$($1_ECHO_COMMAND) servercmd=$$($1_JAVAC_SERVER_CMD) >> $$@
+ $(ECHO) portfile=$$($1_JAVAC_PORT_FILE) > $$@
+ $(ECHO) servercmd=$$($1_JAVAC_SERVER_CMD) >> $$@
# Always use small java to launch client
$1_JAVAC_CMD := $$(JAVA_SMALL) $$($1_JAVA_FLAGS) $$($1_JAVAC) \
@@ -275,7 +269,7 @@ define SetupJavaCompilationBody
# Tell javac to do exactly as told and no more
PARANOIA_FLAGS := -implicit:none -Xprefer:source -XDignore.symbol.file=true -encoding ascii
- $1_FLAGS += -g -Xlint:all --doclint-format html5 $$($1_TARGET_RELEASE) $$(PARANOIA_FLAGS) $$(JAVA_WARNINGS_ARE_ERRORS)
+ $1_FLAGS += -g -Xlint:all $$($1_TARGET_RELEASE) $$(PARANOIA_FLAGS) $$(JAVA_WARNINGS_ARE_ERRORS)
$1_FLAGS += $$($1_JAVAC_FLAGS)
ifneq ($$($1_DISABLED_WARNINGS), )
diff --git a/make/common/MakeBase.gmk b/make/common/MakeBase.gmk
index ea6f9f41bc7..a9d806da0c0 100644
--- a/make/common/MakeBase.gmk
+++ b/make/common/MakeBase.gmk
@@ -64,6 +64,9 @@ define NEWLINE
endef
+# Make sure we have a value (could be overridden on command line by caller)
+CREATING_BUILDJDK ?= false
+
# Certain features only work in newer version of GNU Make. The build will still
# function in 3.81, but will be less performant.
ifeq (4.0, $(firstword $(sort 4.0 $(MAKE_VERSION))))
@@ -89,7 +92,7 @@ BUILDTIMESDIR=$(OUTPUTDIR)/make-support/build-times
# Record starting time for build of a sub repository.
define RecordStartTime
- $(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_start_$(strip $1) && \
+ $(DATE) '+%Y %m %d %H %M %S' | $(AWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_start_$(strip $1) && \
$(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_start_$(strip $1)_human_readable
endef
@@ -97,10 +100,10 @@ endef
# easy to read format. Handles builds that cross midnight. Expects
# that a build will never take 24 hours or more.
define RecordEndTime
- $(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_end_$(strip $1)
+ $(DATE) '+%Y %m %d %H %M %S' | $(AWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_end_$(strip $1)
$(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_end_$(strip $1)_human_readable
$(ECHO) `$(CAT) $(BUILDTIMESDIR)/build_time_start_$(strip $1)` `$(CAT) $(BUILDTIMESDIR)/build_time_end_$(strip $1)` $1 | \
- $(NAWK) '{ F=$$7; T=$$14; if (F > T) { T+=3600*24 }; D=T-F; H=int(D/3600); \
+ $(AWK) '{ F=$$7; T=$$14; if (F > T) { T+=3600*24 }; D=T-F; H=int(D/3600); \
M=int((D-H*3600)/60); S=D-H*3600-M*60; printf("%02d:%02d:%02d %s\n",H,M,S,$$15); }' \
> $(BUILDTIMESDIR)/build_time_diff_$(strip $1)
endef
@@ -436,34 +439,15 @@ endif
# On Windows, converts a path from cygwin/unix style (e.g. /bin/foo) into
# "mixed mode" (e.g. c:/cygwin/bin/foo). On other platforms, return the path
# unchanged.
+# This also converts a colon-separated list of paths to a semicolon-separated
+# list.
# This is normally not needed since we use the FIXPATH prefix for command lines,
# but might be needed in certain circumstances.
ifeq ($(call isTargetOs, windows), true)
- ifeq ($(call isBuildOsEnv, windows.wsl), true)
- FixPath = \
- $(shell $(WSLPATH) -m $1)
- else
- FixPath = \
- $(shell $(CYGPATH) -m $1)
- endif
-else
FixPath = \
- $1
-endif
-
-################################################################################
-# FixPathList
-#
-# On Windows, converts a cygwin/unix style path list (colon-separated) into
-# the native format (mixed mode, semicolon-separated). On other platforms,
-# return the path list unchanged.
-################################################################################
-ifeq ($(call isTargetOs, windows), true)
- FixPathList = \
- $(subst @,$(SPACE),$(subst $(SPACE),;,$(foreach entry,$(subst :,$(SPACE),\
- $(subst $(SPACE),@,$(strip $1))),$(call FixPath, $(entry)))))
+ $(strip $(subst \,\\, $(shell $(FIXPATH_BASE) print $(patsubst $(FIXPATH), , $1))))
else
- FixPathList = \
+ FixPath = \
$1
endif
diff --git a/make/common/Modules.gmk b/make/common/Modules.gmk
index 10aacff4726..1bc71c316ef 100644
--- a/make/common/Modules.gmk
+++ b/make/common/Modules.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -27,206 +27,55 @@ ifndef _MODULES_GMK
_MODULES_GMK := 1
################################################################################
-#
-# BOOT_MODULES are modules defined by the boot loader
-# PLATFORM_MODULES are modules defined by the platform loader
-# JRE_TOOL_MODULES are tools included in JRE and defined by the application loader
-#
-# All other modules not declared below are defined by the application loader
-# and are not included in JRE.
-
-BOOT_MODULES :=
-PLATFORM_MODULES :=
-JRE_TOOL_MODULES :=
-UPGRADEABLE_MODULES :=
-AGGREGATOR_MODULES :=
-DOCS_MODULES :=
-
-# Hook to include the corresponding custom file, if present.
-$(eval $(call IncludeCustomExtension, common/Modules.gmk))
-
-BOOT_MODULES += \
- java.base \
- java.datatransfer \
- java.desktop \
- java.instrument \
- java.logging \
- java.management \
- java.management.rmi \
- java.naming \
- java.prefs \
- java.rmi \
- java.security.sasl \
- java.xml \
- jdk.incubator.foreign \
- jdk.incubator.vector \
- jdk.internal.vm.ci \
- jdk.jfr \
- jdk.management \
- jdk.management.jfr \
- jdk.management.agent \
- jdk.net \
- jdk.nio.mapmode \
- jdk.sctp \
- jdk.unsupported \
- #
-
-# to be deprivileged
-BOOT_MODULES += \
- jdk.naming.rmi \
- #
+# Setup module sets for classloaders
-# Modules that directly or indirectly requiring upgradeable modules
-# should carefully be considered if it should be upgradeable or not.
-UPGRADEABLE_MODULES += \
- java.compiler \
- jdk.aot \
- jdk.internal.vm.compiler \
- jdk.internal.vm.compiler.management \
- #
-
-
-AGGREGATOR_MODULES += \
- java.se \
- #
-
-PLATFORM_MODULES += \
- $(UPGRADEABLE_MODULES) \
- $(AGGREGATOR_MODULES)
- #
+include $(TOPDIR)/make/conf/module-loader-map.conf
-PLATFORM_MODULES += \
- java.net.http \
- java.scripting \
- java.security.jgss \
- java.smartcardio \
- java.sql \
- java.sql.rowset \
- java.transaction.xa \
- java.xml.crypto \
- jdk.accessibility \
- jdk.charsets \
- jdk.crypto.cryptoki \
- jdk.crypto.ec \
- jdk.dynalink \
- jdk.httpserver \
- jdk.jsobject \
- jdk.localedata \
- jdk.naming.dns \
- jdk.security.auth \
- jdk.security.jgss \
- jdk.xml.dom \
- jdk.zipfs \
- #
-
-ifeq ($(call isTargetOs, windows), true)
- PLATFORM_MODULES += jdk.crypto.mscapi
-endif
-
-JRE_TOOL_MODULES += \
- jdk.jdwp.agent \
- jdk.jpackage \
- #
+# Append platform-specific and upgradeable modules
+PLATFORM_MODULES += $(PLATFORM_MODULES_$(OPENJDK_TARGET_OS)) \
+ $(UPGRADEABLE_PLATFORM_MODULES)
################################################################################
+# Setup module sets for docs
-# DOCS_MODULES defines the root modules for javadoc generation.
-# All of their `require transitive` modules directly and indirectly will be included.
-DOCS_MODULES += \
- java.se \
- java.smartcardio \
- jdk.accessibility \
- jdk.attach \
- jdk.charsets \
- jdk.compiler \
- jdk.crypto.cryptoki \
- jdk.crypto.ec \
- jdk.dynalink \
- jdk.editpad \
- jdk.hotspot.agent \
- jdk.httpserver \
- jdk.jpackage \
- jdk.incubator.vector \
- jdk.jartool \
- jdk.javadoc \
- jdk.jcmd \
- jdk.jconsole \
- jdk.jdeps \
- jdk.jdi \
- jdk.jdwp.agent \
- jdk.jfr \
- jdk.jlink \
- jdk.jsobject \
- jdk.jshell \
- jdk.jstatd \
- jdk.incubator.foreign \
- jdk.localedata \
- jdk.management \
- jdk.management.agent \
- jdk.management.jfr \
- jdk.naming.dns \
- jdk.naming.rmi \
- jdk.net \
- jdk.nio.mapmode \
- jdk.sctp \
- jdk.security.auth \
- jdk.security.jgss \
- jdk.xml.dom \
- jdk.zipfs \
- #
+include $(TOPDIR)/make/conf/docs-modules.conf
-# These modules are included in the interim image which is used to run profiling
-# before building the real images.
-INTERIM_IMAGE_MODULES := java.base java.logging
+################################################################################
+# Setup module sets needed by the build system
-LANGTOOLS_MODULES := \
- java.compiler \
- jdk.compiler \
- jdk.javadoc \
- jdk.jdeps \
- jdk.jshell \
- #
+include $(TOPDIR)/make/conf/build-module-sets.conf
-HOTSPOT_MODULES := \
- jdk.aot \
- jdk.hotspot.agent \
- jdk.internal.vm.ci \
- jdk.internal.vm.compiler \
- jdk.internal.vm.compiler.management \
- #
+################################################################################
+# Hook to include the corresponding custom file, if present.
+# Allowing MODULE list extensions setup above.
+$(eval $(call IncludeCustomExtension, common/Modules.gmk))
################################################################################
-# Some platforms don't have the serviceability agent
+# Depending on the configuration, we might need to filter out some modules that
+# normally should have been included
+# Some platforms don't have the serviceability agent
ifeq ($(INCLUDE_SA), false)
MODULES_FILTER += jdk.hotspot.agent
endif
-################################################################################
# Filter out jvmci specific modules if jvmci is disabled
-
ifeq ($(INCLUDE_JVMCI), false)
MODULES_FILTER += jdk.internal.vm.ci
endif
-################################################################################
# Filter out Graal specific modules if Graal is disabled
-
ifeq ($(INCLUDE_GRAAL), false)
MODULES_FILTER += jdk.internal.vm.compiler
MODULES_FILTER += jdk.internal.vm.compiler.management
endif
-################################################################################
# Filter out aot specific modules if aot is disabled
-
ifeq ($(ENABLE_AOT), false)
MODULES_FILTER += jdk.aot
endif
-################################################################################
# jpackage is only on windows, macosx, and linux
-
ifeq ($(call isTargetOs, windows macosx linux), false)
MODULES_FILTER += jdk.jpackage
endif
@@ -338,7 +187,7 @@ $(MODULE_DEPS_MAKEFILE): $(MODULE_INFOS) \
$(RM) $@
$(foreach m, $(MODULE_INFOS), \
( $(PRINTF) "DEPS_$(call GetModuleNameFromModuleInfo, $m) :=" && \
- $(NAWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\
+ $(AWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\
BEGIN { if (MODULE != "java.base") printf(" java.base"); } \
/^ *requires/ { sub(/;/, ""); \
sub(/requires /, " "); \
@@ -352,7 +201,7 @@ $(MODULE_DEPS_MAKEFILE): $(MODULE_INFOS) \
printf(" %s", $$0) } \
END { printf("\n") }' $m && \
$(PRINTF) "TRANSITIVE_MODULES_$(call GetModuleNameFromModuleInfo, $m) :=" && \
- $(NAWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\
+ $(AWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\
BEGIN { if (MODULE != "java.base") printf(" java.base"); } \
/^ *requires *transitive/ { \
sub(/;/, ""); \
@@ -410,8 +259,7 @@ FindTransitiveIndirectDepsForModules = \
# Upgradeable modules are those that are either defined as upgradeable or that
# require an upradeable module.
FindAllUpgradeableModules = \
- $(sort $(filter-out $(MODULES_FILTER), $(UPGRADEABLE_MODULES)))
-
+ $(sort $(filter-out $(MODULES_FILTER), $(UPGRADEABLE_PLATFORM_MODULES)))
################################################################################
@@ -467,7 +315,6 @@ endef
# * JDK_MODULES
# * BOOT_MODULES
# * PLATFORM_MODULES
-# * JRE_TOOL_MODULES
define ReadImportMetaData
IMPORTED_MODULES := $$(call FindImportedModules)
$$(foreach m, $$(IMPORTED_MODULES), \
diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk
index d4c202146e0..db2a0ba1156 100644
--- a/make/common/NativeCompilation.gmk
+++ b/make/common/NativeCompilation.gmk
@@ -72,10 +72,10 @@ define WriteCompileCommandsFragment
$(call LogInfo, Creating compile commands fragment for $(notdir $3))
$(call MakeDir, $(dir $1))
$(call WriteFile,{ \
- "directory": "$(strip $2)"$(COMMA) \
- "file": "$(strip $3)"$(COMMA) \
+ "directory": "$(strip $(call FixPath, $2))"$(COMMA) \
+ "file": "$(strip $(call FixPath, $3))"$(COMMA) \
"command": "$(strip $(subst $(DQUOTE),\$(DQUOTE),$(subst \,\\,\
- $(subst $(FIXPATH),,$4))))" \
+ $(subst $(FIXPATH),,$(call FixPath, $4)))))" \
}$(COMMA), \
$1)
endef
@@ -175,12 +175,6 @@ $(strip \
)
endef
-ifeq ($(call isBuildOsEnv, windows.cygwin), true)
- UNIX_PATH_PREFIX := /cygdrive
-else ifeq ($(call isBuildOsEnv, windows.msys), true)
- UNIX_PATH_PREFIX :=
-endif
-
# This pattern is used to transform the output of the microsoft CL compiler
# into a make syntax dependency file (.d)
WINDOWS_SHOWINCLUDE_SED_PATTERN := \
@@ -188,7 +182,7 @@ WINDOWS_SHOWINCLUDE_SED_PATTERN := \
-e 's|Note: including file: *||' \
-e 's|\r||g' \
-e 's|\\|/|g' \
- -e 's|^\([a-zA-Z]\):|$(UNIX_PATH_PREFIX)/\1|g' \
+ -e 's|^\([a-zA-Z]\):|$(WINENV_PREFIX)/\1|g' \
-e '\|$(TOPDIR)|I !d' \
-e 's|$$$$| \\|g' \
#
@@ -237,10 +231,25 @@ ifeq ($(ALLOW_ABSOLUTE_PATHS_IN_OUTPUT)-$(FILE_MACRO_CFLAGS), false-)
) \
)
- # When compiling with relative paths, the deps file comes out with relative
- # paths.
+ # When compiling with relative paths, the deps file may come out with relative
+ # paths, and that path may start with './'. First remove any leading ./, then
+ # add WORKSPACE_ROOT to any line not starting with /, while allowing for
+ # leading spaces. There may also be multiple entries on the same line, so start
+ # with splitting such lines.
+ # Non GNU sed (BSD on macosx) cannot substitue in literal \n using regex.
+ # Instead use a bash escaped literal newline. To avoid having unmatched quotes
+ # ruin the ability for an editor to properly syntax highlight this file, define
+ # that newline sequence as a separate variable and add the closing quote behind
+ # a comment.
+ sed_newline := \'$$'\n''#'
define fix-deps-file
- $(SED) -e 's|^\([ ]*\)|\1$(WORKSPACE_ROOT)|' $1.tmp > $1
+ $(SED) \
+ -e 's|\([^ ]\) \{1,\}\([^\\:]\)|\1 \\$(sed_newline) \2|g' \
+ $1.tmp \
+ | $(SED) \
+ -e 's|^\([ ]*\)\./|\1|' \
+ -e '/^[ ]*[^/ ]/s|^\([ ]*\)|\1$(WORKSPACE_ROOT)/|' \
+ > $1
endef
else
# By default the MakeCommandRelative macro does nothing.
@@ -527,7 +536,7 @@ define SetupNativeCompilationBody
ifeq ($$($1_TYPE), EXECUTABLE)
$1_PREFIX :=
ifeq ($$($1_SUFFIX), )
- $1_SUFFIX := $(EXE_SUFFIX)
+ $1_SUFFIX := $(EXECUTABLE_SUFFIX)
endif
else
$1_PREFIX := $(LIBRARY_PREFIX)
@@ -1148,6 +1157,9 @@ define SetupNativeCompilationBody
test "$$$$?" = "1" ; \
$$($1_CREATE_DEBUGINFO_CMDS)
$$($1_STRIP_CMD)
+ ifeq ($(call isBuildOsEnv, windows.wsl2), true)
+ $$(CHMOD) +x $$($1_TARGET)
+ endif
else
$$(call ExecuteWithLog, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link, \
$$(if $$($1_LINK_OBJS_RELATIVE), $$(CD) $$(OUTPUTDIR) ; ) \
diff --git a/make/common/TestFilesCompilation.gmk b/make/common/TestFilesCompilation.gmk
index ce06a76c27c..01dc181d2c2 100644
--- a/make/common/TestFilesCompilation.gmk
+++ b/make/common/TestFilesCompilation.gmk
@@ -81,7 +81,7 @@ define SetupTestFilesCompilationBody
# Locate all files with the matching prefix
$1_FILE_LIST := \
- $$(call FindFiles, $$($1_SOURCE_DIRS), $$($1_PREFIX)*.c $$($1_PREFIX)*.cpp)
+ $$(call FindFiles, $$($1_SOURCE_DIRS), $$($1_PREFIX)*.c $$($1_PREFIX)*.cpp $$($1_PREFIX)*.m)
$1_EXCLUDE_PATTERN := $$(addprefix %/, $$($1_EXCLUDE))
$1_FILTERED_FILE_LIST := $$(filter-out $$($1_EXCLUDE_PATTERN), $$($1_FILE_LIST))
diff --git a/make/common/TextFileProcessing.gmk b/make/common/TextFileProcessing.gmk
index 7308d7e8c19..79df3eec40e 100644
--- a/make/common/TextFileProcessing.gmk
+++ b/make/common/TextFileProcessing.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -177,7 +177,7 @@ define SetupTextFileProcessingBody
$1_INCLUDES_PARTIAL_AWK := $$(subst $$(SPACE);,,$$(subst $$(SPACE)=>$$(SPACE),"$$(RIGHT_PAREN)$$(RIGHT_PAREN) \
{ include$$(LEFT_PAREN)",$$(subst $$(SPACE);$$(SPACE),"$$(RIGHT_PAREN) } \
else if $$(LEFT_PAREN)matches$$(LEFT_PAREN)",$$(strip $$($1_INCLUDES)))))
- $1_INCLUDES_COMMAND_LINE := $(NAWK) '$$($1_INCLUDES_HEADER_AWK) \
+ $1_INCLUDES_COMMAND_LINE := $(AWK) '$$($1_INCLUDES_HEADER_AWK) \
{ if (matches("$$($1_INCLUDES_PARTIAL_AWK)") } else print }'
else
# We don't have any includes, just pipe the file through cat.
diff --git a/make/common/Utils.gmk b/make/common/Utils.gmk
index 8f6f40c2657..a7df32065ae 100644
--- a/make/common/Utils.gmk
+++ b/make/common/Utils.gmk
@@ -278,7 +278,7 @@ FindExecutableDirForModule = \
# param 1 : A space separated list of classpath entries
# The surrounding strip is needed to keep additional whitespace out
PathList = \
- "$(subst $(SPACE),$(PATH_SEP),$(strip $(subst $(DQUOTE),,$1)))"
+ "$(subst $(SPACE),:,$(strip $(subst $(DQUOTE),,$1)))"
################################################################################
# Check if a specified hotspot variant is being built, or at least one of a
diff --git a/make/common/modules/GensrcCommonLangtools.gmk b/make/common/modules/GensrcCommonLangtools.gmk
index 44e46aa5253..fc4be633351 100644
--- a/make/common/modules/GensrcCommonLangtools.gmk
+++ b/make/common/modules/GensrcCommonLangtools.gmk
@@ -85,14 +85,16 @@ define SetupCompileProperties
$$(addprefix _SPACE_, $$(PROPJAVAS)))))
# Now setup the rule for the generation of the resource bundles.
- $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/_the_props: $$(PROPSOURCES)
+ PROPS_BASE := $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/_the_props
+ $$(PROPS_BASE): $$(PROPSOURCES)
$$(call MakeDir, $$(@D) $$(PROPDIRS))
$(FIND) $$(@D) -name "*.java" -a ! -name "*Properties.java" $(FIND_DELETE)
$(ECHO) Compiling $$(words $$(PROPSOURCES)) properties into resource bundles for $(MODULE)
- $(TOOL_COMPILEPROPS_CMD) $$(PROPCMDLINE)
+ $$(call ExecuteWithLog, $$(PROPS_BASE)_exec, \
+ $(TOOL_COMPILEPROPS_CMD) $$(PROPCMDLINE))
$(TOUCH) $$@
- $$(strip $1) += $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/_the_props
+ $$(strip $1) += $$(PROPS_BASE)
endef
################################################################################
diff --git a/make/autoconf/version-numbers b/make/conf/branding.conf
similarity index 75%
rename from make/autoconf/version-numbers
rename to make/conf/branding.conf
index ccdb48adf15..0a8571e1299 100644
--- a/make/autoconf/version-numbers
+++ b/make/conf/branding.conf
@@ -23,23 +23,6 @@
# questions.
#
-# Default version, product, and vendor information to use,
-# unless overridden by configure
-
-DEFAULT_VERSION_FEATURE=16
-DEFAULT_VERSION_INTERIM=0
-DEFAULT_VERSION_UPDATE=0
-DEFAULT_VERSION_PATCH=0
-DEFAULT_VERSION_EXTRA1=0
-DEFAULT_VERSION_EXTRA2=0
-DEFAULT_VERSION_EXTRA3=0
-DEFAULT_VERSION_DATE=2021-03-16
-DEFAULT_VERSION_CLASSFILE_MAJOR=60 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
-DEFAULT_VERSION_CLASSFILE_MINOR=0
-DEFAULT_ACCEPTABLE_BOOT_VERSIONS="15 16"
-DEFAULT_JDK_SOURCE_TARGET_VERSION=16
-DEFAULT_PROMOTED_VERSION_PRE=lworld3ea
-
LAUNCHER_NAME=openjdk
PRODUCT_NAME=OpenJDK
PRODUCT_SUFFIX="Runtime Environment"
diff --git a/make/conf/build-module-sets.conf b/make/conf/build-module-sets.conf
new file mode 100644
index 00000000000..cb96c3ede7a
--- /dev/null
+++ b/make/conf/build-module-sets.conf
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+################################################################################
+# Module sets needed by the build system
+
+# These modules are included in the interim image which is used to run profiling
+# before building the real images.
+INTERIM_IMAGE_MODULES= \
+ java.base \
+ java.logging \
+ #
+
+# These targets require buildtools-langtools to process for gensrc
+LANGTOOLS_MODULES= \
+ java.compiler \
+ jdk.compiler \
+ jdk.javadoc \
+ jdk.jdeps \
+ jdk.jshell \
+ #
+
+# These models require buildtools-hotspot to process for gensrc
+HOTSPOT_MODULES= \
+ jdk.aot \
+ jdk.hotspot.agent \
+ jdk.internal.vm.ci \
+ jdk.internal.vm.compiler \
+ jdk.internal.vm.compiler.management \
+ #
diff --git a/make/conf/docs-modules.conf b/make/conf/docs-modules.conf
new file mode 100644
index 00000000000..5d0c696c75b
--- /dev/null
+++ b/make/conf/docs-modules.conf
@@ -0,0 +1,72 @@
+#
+# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+################################################################################
+# Module sets needed to build docs.
+#
+# DOCS_MODULES defines the root modules for javadoc generation.
+# All of their `require transitive` modules directly and indirectly will be included.
+DOCS_MODULES= \
+ java.se \
+ java.smartcardio \
+ jdk.accessibility \
+ jdk.attach \
+ jdk.charsets \
+ jdk.compiler \
+ jdk.crypto.cryptoki \
+ jdk.crypto.ec \
+ jdk.dynalink \
+ jdk.editpad \
+ jdk.hotspot.agent \
+ jdk.httpserver \
+ jdk.jpackage \
+ jdk.incubator.vector \
+ jdk.jartool \
+ jdk.javadoc \
+ jdk.jcmd \
+ jdk.jconsole \
+ jdk.jdeps \
+ jdk.jdi \
+ jdk.jdwp.agent \
+ jdk.jfr \
+ jdk.jlink \
+ jdk.jsobject \
+ jdk.jshell \
+ jdk.jstatd \
+ jdk.incubator.foreign \
+ jdk.localedata \
+ jdk.management \
+ jdk.management.agent \
+ jdk.management.jfr \
+ jdk.naming.dns \
+ jdk.naming.rmi \
+ jdk.net \
+ jdk.nio.mapmode \
+ jdk.sctp \
+ jdk.security.auth \
+ jdk.security.jgss \
+ jdk.xml.dom \
+ jdk.zipfs \
+ #
diff --git a/make/conf/javadoc.conf b/make/conf/javadoc.conf
new file mode 100644
index 00000000000..df25452533a
--- /dev/null
+++ b/make/conf/javadoc.conf
@@ -0,0 +1,30 @@
+# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# URLs
+JAVADOC_BASE_URL=https://docs.oracle.com/pls/topic/lookup?ctx=javase$(VERSION_NUMBER)&id=homepage
+BUG_SUBMIT_URL=https://bugreport.java.com/bugreport/
+COPYRIGHT_URL=legal/copyright.html
+LICENSE_URL=https://www.oracle.com/java/javase/terms/license/java$(VERSION_NUMBER)speclicense.html
+REDISTRIBUTION_URL=https://www.oracle.com/technetwork/java/redist-137594.html
diff --git a/make/conf/jib-profiles.js b/make/conf/jib-profiles.js
index e5df98e165c..524562fa4cd 100644
--- a/make/conf/jib-profiles.js
+++ b/make/conf/jib-profiles.js
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -211,7 +211,7 @@ var getJibProfiles = function (input) {
// Include list to use when creating a minimal jib source bundle which
// contains just the jib configuration files.
data.conf_bundle_includes = [
- "make/autoconf/version-numbers",
+ "make/conf/version-numbers.conf",
];
// Define some common values
@@ -240,7 +240,7 @@ var getJibProfilesCommon = function (input, data) {
// List of the main profile names used for iteration
common.main_profile_names = [
"linux-x64", "linux-x86", "macosx-x64",
- "windows-x64", "windows-x86",
+ "windows-x64", "windows-x86", "windows-aarch64",
"linux-aarch64", "linux-arm32", "linux-ppc64le", "linux-s390x"
];
@@ -440,7 +440,7 @@ var getJibProfilesProfiles = function (input, common, data) {
target_cpu: "x64",
dependencies: ["devkit", "gtest", "pandoc"],
configure_args: concat(common.configure_args_64bit, "--with-zlib=system",
- "--with-macosx-version-max=10.9.0",
+ "--with-macosx-version-max=10.12.00",
// Use system SetFile instead of the one in the devkit as the
// devkit one may not work on Catalina.
"SETFILE=/usr/bin/SetFile"),
@@ -461,6 +461,15 @@ var getJibProfilesProfiles = function (input, common, data) {
configure_args: concat(common.configure_args_32bit),
},
+ "windows-aarch64": {
+ target_os: "windows",
+ target_cpu: "aarch64",
+ dependencies: ["devkit", "gtest", "build_devkit"],
+ configure_args: [
+ "--openjdk-target=aarch64-unknown-cygwin",
+ ],
+ },
+
"linux-aarch64": {
target_os: "linux",
target_cpu: "aarch64",
@@ -673,6 +682,10 @@ var getJibProfilesProfiles = function (input, common, data) {
platform: "windows-x86",
jdk_suffix: "zip",
},
+ "windows-aarch64": {
+ platform: "windows-aarch64",
+ jdk_suffix: "zip",
+ },
"linux-aarch64": {
platform: "linux-aarch64",
},
@@ -710,8 +723,11 @@ var getJibProfilesProfiles = function (input, common, data) {
configure_args: concat(
"--enable-full-docs",
versionArgs(input, common),
- "--with-build-jdk=" + input.get(buildJdkDep, "home_path")
- + (input.build_os == "macosx" ? "/Contents/Home" : "")
+ "--with-build-jdk=" + input.get(buildJdkDep, "home_path"),
+ // Provide an explicit JDK for the docs-reference target to
+ // mimic the running conditions of when it's run for real as
+ // closely as possible.
+ "--with-docs-reference-jdk=" + input.get(buildJdkDep, "home_path")
),
default_make_targets: ["all-docs-bundles"],
artifacts: {
@@ -985,9 +1001,9 @@ var getJibProfilesProfiles = function (input, common, data) {
// test tasks. Care must however be taken not to polute that work dir by
// setting the appropriate make variables to control output directories.
//
- // Use the existance of the top level README as indication of if this is
+ // Use the existance of the top level README.md as indication of if this is
// the full source or just src.conf.
- if (!new java.io.File(__DIR__, "../../README").exists()) {
+ if (!new java.io.File(__DIR__, "../../README.md").exists()) {
var runTestPrebuiltSrcFullExtra = {
dependencies: "src.full",
work_dir: input.get("src.full", "install_path"),
@@ -1014,7 +1030,7 @@ var getJibProfilesDependencies = function (input, common) {
var devkit_platform_revisions = {
linux_x64: "gcc10.2.0-OL6.4+1.0",
macosx_x64: "Xcode11.3.1-MacOSX10.15+1.1",
- windows_x64: "VS2019-16.7.2+1.0",
+ windows_x64: "VS2019-16.7.2+1.1",
linux_aarch64: "gcc10.2.0-OL7.6+1.0",
linux_arm: "gcc8.2.0-Fedora27+1.0",
linux_ppc64le: "gcc8.2.0-Fedora27+1.0",
@@ -1024,9 +1040,11 @@ var getJibProfilesDependencies = function (input, common) {
var devkit_platform = (input.target_cpu == "x86"
? input.target_os + "_x64"
: input.target_platform);
-
+ if (input.target_platform == "windows_aarch64") {
+ devkit_platform = "windows_x64";
+ }
var devkit_cross_prefix = "";
- if (!(input.target_os == "windows" && isWsl(input))) {
+ if (!(input.target_os == "windows")) {
if (input.build_platform != input.target_platform
&& input.build_platform != devkit_platform) {
devkit_cross_prefix = input.build_platform + "-to-";
@@ -1336,7 +1354,7 @@ var concatObjects = function (o1, o2) {
/**
* Constructs the numeric version string from reading the
- * make/autoconf/version-numbers file and removing all trailing ".0".
+ * make/conf/version-numbers.conf file and removing all trailing ".0".
*
* @param feature Override feature version
* @param interim Override interim version
@@ -1388,20 +1406,20 @@ var versionArgs = function(input, common) {
return args;
}
-// Properties representation of the make/autoconf/version-numbers file. Lazily
+// Properties representation of the make/conf/version-numbers.conf file. Lazily
// initiated by the function below.
var version_numbers;
/**
- * Read the make/autoconf/version-numbers file into a Properties object.
+ * Read the make/conf/version-numbers.conf file into a Properties object.
*
* @returns {java.utilProperties}
*/
var getVersionNumbers = function () {
- // Read version information from make/autoconf/version-numbers
+ // Read version information from make/conf/version-numbers.conf
if (version_numbers == null) {
version_numbers = new java.util.Properties();
- var stream = new java.io.FileInputStream(__DIR__ + "/../autoconf/version-numbers");
+ var stream = new java.io.FileInputStream(__DIR__ + "/version-numbers.conf");
version_numbers.load(stream);
stream.close();
}
diff --git a/make/conf/module-loader-map.conf b/make/conf/module-loader-map.conf
new file mode 100644
index 00000000000..1904c340d58
--- /dev/null
+++ b/make/conf/module-loader-map.conf
@@ -0,0 +1,96 @@
+#
+# Copyright (c) 2014, 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+################################################################################
+# BOOT_MODULES are modules defined by the boot loader
+# PLATFORM_MODULES are modules defined by the platform loader
+#
+# All other modules not declared below are defined by the application loader
+# and are not included in JRE.
+
+BOOT_MODULES= \
+ java.base \
+ java.datatransfer \
+ java.desktop \
+ java.instrument \
+ java.logging \
+ java.management \
+ java.management.rmi \
+ java.naming \
+ java.prefs \
+ java.rmi \
+ java.security.sasl \
+ java.xml \
+ jdk.incubator.foreign \
+ jdk.incubator.vector \
+ jdk.internal.vm.ci \
+ jdk.jfr \
+ jdk.management \
+ jdk.management.jfr \
+ jdk.management.agent \
+ jdk.net \
+ jdk.nio.mapmode \
+ jdk.sctp \
+ jdk.unsupported \
+ jdk.naming.rmi \
+ #
+
+# Modules that directly or indirectly requiring upgradeable modules
+# should carefully be considered if it should be upgradeable or not.
+UPGRADEABLE_PLATFORM_MODULES= \
+ java.compiler \
+ jdk.aot \
+ jdk.internal.vm.compiler \
+ jdk.internal.vm.compiler.management \
+ #
+
+PLATFORM_MODULES= \
+ java.se \
+ java.net.http \
+ java.scripting \
+ java.security.jgss \
+ java.smartcardio \
+ java.sql \
+ java.sql.rowset \
+ java.transaction.xa \
+ java.xml.crypto \
+ jdk.accessibility \
+ jdk.charsets \
+ jdk.crypto.cryptoki \
+ jdk.crypto.ec \
+ jdk.dynalink \
+ jdk.httpserver \
+ jdk.jsobject \
+ jdk.localedata \
+ jdk.naming.dns \
+ jdk.security.auth \
+ jdk.security.jgss \
+ jdk.xml.dom \
+ jdk.zipfs \
+ #
+
+PLATFORM_MODULES_windows= \
+ jdk.crypto.mscapi \
+ #
diff --git a/make/conf/version-numbers.conf b/make/conf/version-numbers.conf
new file mode 100644
index 00000000000..8aa3f08bb26
--- /dev/null
+++ b/make/conf/version-numbers.conf
@@ -0,0 +1,41 @@
+#
+# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Default version, product, and vendor information to use,
+# unless overridden by configure
+
+DEFAULT_VERSION_FEATURE=17
+DEFAULT_VERSION_INTERIM=0
+DEFAULT_VERSION_UPDATE=0
+DEFAULT_VERSION_PATCH=0
+DEFAULT_VERSION_EXTRA1=0
+DEFAULT_VERSION_EXTRA2=0
+DEFAULT_VERSION_EXTRA3=0
+DEFAULT_VERSION_DATE=2021-09-14
+DEFAULT_VERSION_CLASSFILE_MAJOR=61 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`"
+DEFAULT_VERSION_CLASSFILE_MINOR=0
+DEFAULT_ACCEPTABLE_BOOT_VERSIONS="15 16 17"
+DEFAULT_JDK_SOURCE_TARGET_VERSION=17
+DEFAULT_PROMOTED_VERSION_PRE=lworld3ea
diff --git a/make/data/blacklistedcertsconverter/blacklisted.certs.pem b/make/data/blockedcertsconverter/blocked.certs.pem
similarity index 99%
rename from make/data/blacklistedcertsconverter/blacklisted.certs.pem
rename to make/data/blockedcertsconverter/blocked.certs.pem
index 688becbc493..4a3b33b0307 100644
--- a/make/data/blacklistedcertsconverter/blacklisted.certs.pem
+++ b/make/data/blockedcertsconverter/blocked.certs.pem
@@ -1,4 +1,4 @@
-#! java BlacklistedCertsConverter SHA-256
+#! java BlockedCertsConverter SHA-256
# The line above must be the first line of this file. Do not
# remove it.
diff --git a/make/data/cacerts/haricaeccrootca2015 b/make/data/cacerts/haricaeccrootca2015
new file mode 100644
index 00000000000..4337f68c643
--- /dev/null
+++ b/make/data/cacerts/haricaeccrootca2015
@@ -0,0 +1,24 @@
+Owner: CN=Hellenic Academic and Research Institutions ECC RootCA 2015, O=Hellenic Academic and Research Institutions Cert. Authority, L=Athens, C=GR
+Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015, O=Hellenic Academic and Research Institutions Cert. Authority, L=Athens, C=GR
+Serial number: 0
+Valid from: Tue Jul 07 10:37:12 GMT 2015 until: Sat Jun 30 10:37:12 GMT 2040
+Signature algorithm name: SHA256withECDSA
+Subject Public Key Algorithm: 384-bit EC key
+Version: 3
+-----BEGIN CERTIFICATE-----
+MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN
+BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl
+c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl
+bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv
+b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ
+BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj
+YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5
+MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0
+dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg
+QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa
+jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi
+C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep
+lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof
+TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
+-----END CERTIFICATE-----
diff --git a/make/data/cacerts/haricarootca2015 b/make/data/cacerts/haricarootca2015
new file mode 100644
index 00000000000..239ecf7d0a3
--- /dev/null
+++ b/make/data/cacerts/haricarootca2015
@@ -0,0 +1,42 @@
+Owner: CN=Hellenic Academic and Research Institutions RootCA 2015, O=Hellenic Academic and Research Institutions Cert. Authority, L=Athens, C=GR
+Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015, O=Hellenic Academic and Research Institutions Cert. Authority, L=Athens, C=GR
+Serial number: 0
+Valid from: Tue Jul 07 10:11:21 GMT 2015 until: Sat Jun 30 10:11:21 GMT 2040
+Signature algorithm name: SHA256withRSA
+Subject Public Key Algorithm: 4096-bit RSA key
+Version: 3
+-----BEGIN CERTIFICATE-----
+MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix
+DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k
+IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT
+N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v
+dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG
+A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh
+ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx
+QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1
+dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA
+4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0
+AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10
+4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C
+ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV
+9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD
+gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6
+Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq
+NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko
+LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
+Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV
+HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd
+ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I
+XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI
+M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot
+9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V
+Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea
+j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh
+X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ
+l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf
+bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4
+pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK
+e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0
+vm9qp/UsQu0yrbYhnr68
+-----END CERTIFICATE-----
diff --git a/make/data/charsetmapping/stdcs-windows b/make/data/charsetmapping/stdcs-windows
index 482b699bcd1..3185e9a966d 100644
--- a/make/data/charsetmapping/stdcs-windows
+++ b/make/data/charsetmapping/stdcs-windows
@@ -2,6 +2,7 @@
# generate these charsets into sun.nio.cs
#
GBK
+GB18030
Johab
MS1255
MS1256
diff --git a/make/hotspot/symbols/symbols-aix b/make/data/hotspot-symbols/symbols-aix
similarity index 100%
rename from make/hotspot/symbols/symbols-aix
rename to make/data/hotspot-symbols/symbols-aix
diff --git a/make/hotspot/symbols/symbols-aix-debug b/make/data/hotspot-symbols/symbols-aix-debug
similarity index 100%
rename from make/hotspot/symbols/symbols-aix-debug
rename to make/data/hotspot-symbols/symbols-aix-debug
diff --git a/make/hotspot/symbols/symbols-linux b/make/data/hotspot-symbols/symbols-linux
similarity index 100%
rename from make/hotspot/symbols/symbols-linux
rename to make/data/hotspot-symbols/symbols-linux
diff --git a/make/hotspot/symbols/symbols-macosx b/make/data/hotspot-symbols/symbols-macosx
similarity index 100%
rename from make/hotspot/symbols/symbols-macosx
rename to make/data/hotspot-symbols/symbols-macosx
diff --git a/make/hotspot/symbols/symbols-shared b/make/data/hotspot-symbols/symbols-shared
similarity index 100%
rename from make/hotspot/symbols/symbols-shared
rename to make/data/hotspot-symbols/symbols-shared
diff --git a/make/hotspot/symbols/symbols-unix b/make/data/hotspot-symbols/symbols-unix
similarity index 98%
rename from make/hotspot/symbols/symbols-unix
rename to make/data/hotspot-symbols/symbols-unix
index 055e4062c70..c82551815ae 100644
--- a/make/hotspot/symbols/symbols-unix
+++ b/make/data/hotspot-symbols/symbols-unix
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -100,7 +100,6 @@ JVM_GetExtendedNPEMessage
JVM_GetFieldIxModifiers
JVM_GetFieldTypeAnnotations
JVM_GetInheritedAccessControlContext
-JVM_GetInterfaceVersion
JVM_GetManagement
JVM_GetMethodIxArgsSize
JVM_GetMethodIxByteCode
diff --git a/make/templates/bsd-header b/make/data/license-templates/bsd-header
similarity index 100%
rename from make/templates/bsd-header
rename to make/data/license-templates/bsd-header
diff --git a/make/templates/gpl-cp-header b/make/data/license-templates/gpl-cp-header
similarity index 100%
rename from make/templates/gpl-cp-header
rename to make/data/license-templates/gpl-cp-header
diff --git a/make/templates/gpl-header b/make/data/license-templates/gpl-header
similarity index 100%
rename from make/templates/gpl-header
rename to make/data/license-templates/gpl-header
diff --git a/make/data/symbols/java.base-G.sym.txt b/make/data/symbols/java.base-G.sym.txt
new file mode 100644
index 00000000000..774c74459b4
--- /dev/null
+++ b/make/data/symbols/java.base-G.sym.txt
@@ -0,0 +1,1171 @@
+#
+# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name java/io/PrintStream
+header extends java/io/FilterOutputStream implements java/lang/Appendable,java/io/Closeable flags 21
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+
+class name java/lang/AbstractStringBuilder
+header extends java/lang/Object implements java/lang/Appendable,java/lang/CharSequence flags 420
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/Boolean
+header extends java/lang/Object implements java/io/Serializable,java/lang/Comparable,java/lang/constant/Constable flags 31 signature Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable;Ljava/lang/constant/Constable; runtimeAnnotations @Ljdk/internal/ValueBased;
+-method name descriptor (Z)V
+-method name descriptor (Ljava/lang/String;)V
+-method name booleanValue descriptor ()Z
+-method name valueOf descriptor (Z)Ljava/lang/Boolean;
+method name booleanValue descriptor ()Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name valueOf descriptor (Z)Ljava/lang/Boolean; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (Z)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+method name descriptor (Ljava/lang/String;)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/lang/Byte
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable;Ljava/lang/constant/Constable; runtimeAnnotations @Ljdk/internal/ValueBased;
+-method name valueOf descriptor (B)Ljava/lang/Byte;
+-method name descriptor (B)V
+-method name descriptor (Ljava/lang/String;)V
+-method name byteValue descriptor ()B
+method name valueOf descriptor (B)Ljava/lang/Byte; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name byteValue descriptor ()B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (B)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+method name descriptor (Ljava/lang/String;)V thrownTypes java/lang/NumberFormatException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/lang/Character
+header extends java/lang/Object implements java/io/Serializable,java/lang/Comparable,java/lang/constant/Constable nestMembers java/lang/Character$UnicodeScript,java/lang/Character$UnicodeBlock,java/lang/Character$Subset flags 31 signature Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable;Ljava/lang/constant/Constable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/Character$UnicodeBlock outerClass java/lang/Character innerClassName UnicodeBlock flags 19
+innerclass innerClass java/lang/Character$UnicodeScript outerClass java/lang/Character innerClassName UnicodeScript flags 4019
+innerclass innerClass java/lang/Character$Subset outerClass java/lang/Character innerClassName Subset flags 9
+-method name descriptor (C)V
+-method name valueOf descriptor (C)Ljava/lang/Character;
+-method name charValue descriptor ()C
+-method name reverseBytes descriptor (C)C
+method name valueOf descriptor (C)Ljava/lang/Character; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name charValue descriptor ()C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name reverseBytes descriptor (C)C flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (C)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/lang/Class
+-method name isInstance descriptor (Ljava/lang/Object;)Z
+-method name isAssignableFrom descriptor (Ljava/lang/Class;)Z
+-method name isInterface descriptor ()Z
+-method name isArray descriptor ()Z
+-method name isPrimitive descriptor ()Z
+-method name getSuperclass descriptor ()Ljava/lang/Class;
+-method name getModifiers descriptor ()I
+-method name cast descriptor (Ljava/lang/Object;)Ljava/lang/Object;
+-method name getRecordComponents descriptor ()[Ljava/lang/reflect/RecordComponent;
+-method name isRecord descriptor ()Z
+-method name isHidden descriptor ()Z
+-method name permittedSubclasses descriptor ()[Ljava/lang/constant/ClassDesc;
+method name isInstance descriptor (Ljava/lang/Object;)Z flags 101 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name isAssignableFrom descriptor (Ljava/lang/Class;)Z flags 101 signature (Ljava/lang/Class<*>;)Z runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name isInterface descriptor ()Z flags 101 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name isArray descriptor ()Z flags 101 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name isPrimitive descriptor ()Z flags 101 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getSuperclass descriptor ()Ljava/lang/Class; flags 101 signature ()Ljava/lang/Class<-TT;>; runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getModifiers descriptor ()I flags 101 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getRecordComponents descriptor ()[Ljava/lang/reflect/RecordComponent; flags 1 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+method name isRecord descriptor ()Z flags 1
+method name cast descriptor (Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Ljava/lang/Object;)TT; runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name isHidden descriptor ()Z flags 101 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getPermittedSubclasses descriptor ()[Ljava/lang/Class; flags 1 signature ()[Ljava/lang/Class<*>; classAnnotations @Ljdk/internal/PreviewFeature;(feature=eLjdk/internal/PreviewFeature$Feature;SEALED_CLASSES;,essentialAPI=Zfalse) runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+
+class name java/lang/Compiler
+header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/lang/Deprecated
+header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;MODULE;eLjava/lang/annotation/ElementType;PARAMETER;eLjava/lang/annotation/ElementType;TYPE;})
+
+class name java/lang/Double
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name valueOf descriptor (D)Ljava/lang/Double;
+-method name descriptor (D)V
+-method name descriptor (Ljava/lang/String;)V
+-method name doubleValue descriptor ()D
+-method name doubleToLongBits descriptor (D)J
+-method name doubleToRawLongBits descriptor (D)J
+-method name longBitsToDouble descriptor (J)D
+method name valueOf descriptor (D)Ljava/lang/Double; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name doubleValue descriptor ()D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name doubleToLongBits descriptor (D)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name doubleToRawLongBits descriptor (D)J flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name longBitsToDouble descriptor (J)D flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (D)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+method name descriptor (Ljava/lang/String;)V thrownTypes java/lang/NumberFormatException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/lang/Float
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name valueOf descriptor (F)Ljava/lang/Float;
+-method name descriptor (F)V
+-method name descriptor (D)V
+-method name descriptor (Ljava/lang/String;)V
+-method name floatValue descriptor ()F
+-method name floatToIntBits descriptor (F)I
+-method name floatToRawIntBits descriptor (F)I
+-method name intBitsToFloat descriptor (I)F
+method name valueOf descriptor (F)Ljava/lang/Float; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name floatValue descriptor ()F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name floatToIntBits descriptor (F)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name floatToRawIntBits descriptor (F)I flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name intBitsToFloat descriptor (I)F flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (F)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+method name descriptor (D)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+method name descriptor (Ljava/lang/String;)V thrownTypes java/lang/NumberFormatException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/lang/IllegalCallerException
+header extends java/lang/RuntimeException flags 21
+
+class name java/lang/IndexOutOfBoundsException
+method name descriptor (J)V flags 1
+
+class name java/lang/Integer
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name toString descriptor (I)Ljava/lang/String;
+-method name valueOf descriptor (I)Ljava/lang/Integer;
+-method name descriptor (I)V
+-method name descriptor (Ljava/lang/String;)V
+-method name intValue descriptor ()I
+-method name numberOfLeadingZeros descriptor (I)I
+-method name numberOfTrailingZeros descriptor (I)I
+-method name bitCount descriptor (I)I
+-method name reverseBytes descriptor (I)I
+method name toString descriptor (I)Ljava/lang/String; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name valueOf descriptor (I)Ljava/lang/Integer; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name intValue descriptor ()I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name numberOfLeadingZeros descriptor (I)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name numberOfTrailingZeros descriptor (I)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name bitCount descriptor (I)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name reverseBytes descriptor (I)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (I)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+method name descriptor (Ljava/lang/String;)V thrownTypes java/lang/NumberFormatException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/lang/LayerInstantiationException
+header extends java/lang/RuntimeException flags 21
+
+class name java/lang/Long
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable,java/lang/constant/ConstantDesc flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable;Ljava/lang/constant/Constable;Ljava/lang/constant/ConstantDesc; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name valueOf descriptor (J)Ljava/lang/Long;
+-method name descriptor (J)V
+-method name descriptor (Ljava/lang/String;)V
+-method name longValue descriptor ()J
+-method name numberOfLeadingZeros descriptor (J)I
+-method name numberOfTrailingZeros descriptor (J)I
+-method name bitCount descriptor (J)I
+-method name reverseBytes descriptor (J)J
+method name valueOf descriptor (J)Ljava/lang/Long; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name longValue descriptor ()J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name numberOfLeadingZeros descriptor (J)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name numberOfTrailingZeros descriptor (J)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name bitCount descriptor (J)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name reverseBytes descriptor (J)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (J)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+method name descriptor (Ljava/lang/String;)V thrownTypes java/lang/NumberFormatException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/lang/Math
+-method name signum descriptor (D)D
+-method name signum descriptor (F)F
+-method name copySign descriptor (DD)D
+-method name copySign descriptor (FF)F
+-method name sin descriptor (D)D
+-method name cos descriptor (D)D
+-method name tan descriptor (D)D
+-method name exp descriptor (D)D
+-method name log descriptor (D)D
+-method name log10 descriptor (D)D
+-method name sqrt descriptor (D)D
+-method name atan2 descriptor (DD)D
+-method name pow descriptor (DD)D
+-method name addExact descriptor (II)I
+-method name addExact descriptor (JJ)J
+-method name subtractExact descriptor (II)I
+-method name subtractExact descriptor (JJ)J
+-method name multiplyExact descriptor (II)I
+-method name multiplyExact descriptor (JJ)J
+-method name incrementExact descriptor (I)I
+-method name incrementExact descriptor (J)J
+-method name decrementExact descriptor (I)I
+-method name decrementExact descriptor (J)J
+-method name negateExact descriptor (I)I
+-method name negateExact descriptor (J)J
+-method name abs descriptor (D)D
+-method name max descriptor (II)I
+-method name min descriptor (II)I
+-method name fma descriptor (DDD)D
+-method name fma descriptor (FFF)F
+-method name multiplyHigh descriptor (JJ)J
+-method name abs descriptor (I)I
+-method name abs descriptor (J)J
+-method name abs descriptor (F)F
+-method name max descriptor (FF)F
+-method name max descriptor (DD)D
+-method name min descriptor (FF)F
+-method name min descriptor (DD)D
+-method name ceil descriptor (D)D
+-method name floor descriptor (D)D
+-method name rint descriptor (D)D
+method name sin descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name cos descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name tan descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name exp descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name log descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name log10 descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name sqrt descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name ceil descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name floor descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name rint descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name atan2 descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name pow descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name addExact descriptor (II)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name addExact descriptor (JJ)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name subtractExact descriptor (II)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name subtractExact descriptor (JJ)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name multiplyExact descriptor (II)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name multiplyExact descriptor (JJ)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name incrementExact descriptor (I)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name incrementExact descriptor (J)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name decrementExact descriptor (I)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name decrementExact descriptor (J)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name negateExact descriptor (I)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name negateExact descriptor (J)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name multiplyHigh descriptor (JJ)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name abs descriptor (I)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name abs descriptor (J)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name abs descriptor (F)F flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name abs descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name max descriptor (II)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name max descriptor (FF)F flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name max descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name min descriptor (II)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name min descriptor (FF)F flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name min descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name fma descriptor (DDD)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name fma descriptor (FFF)F flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name signum descriptor (D)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name signum descriptor (F)F flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name copySign descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name copySign descriptor (FF)F flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/NamedPackage
+header extends java/lang/Object flags 20
+
+class name java/lang/Object
+-method name descriptor ()V
+-method name getClass descriptor ()Ljava/lang/Class;
+-method name hashCode descriptor ()I
+-method name clone descriptor ()Ljava/lang/Object;
+-method name notify descriptor ()V
+-method name notifyAll descriptor ()V
+method name descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getClass descriptor ()Ljava/lang/Class; flags 111 signature ()Ljava/lang/Class<*>; runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name hashCode descriptor ()I flags 101 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name clone descriptor ()Ljava/lang/Object; thrownTypes java/lang/CloneNotSupportedException flags 104 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name notify descriptor ()V flags 111 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name notifyAll descriptor ()V flags 111 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/ProcessHandle
+header extends java/lang/Object implements java/lang/Comparable nestMembers java/lang/ProcessHandle$Info flags 601 signature Ljava/lang/Object;Ljava/lang/Comparable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/ProcessHandle$Info outerClass java/lang/ProcessHandle innerClassName Info flags 609
+
+class name java/lang/Record
+header extends java/lang/Object flags 421
+
+class name java/lang/Runtime$Version
+header extends java/lang/Object implements java/lang/Comparable nestHost java/lang/Runtime flags 31 signature Ljava/lang/Object;Ljava/lang/Comparable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/Runtime$Version outerClass java/lang/Runtime innerClassName Version flags 19
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/Short
+header extends java/lang/Number implements java/lang/Comparable,java/lang/constant/Constable flags 31 signature Ljava/lang/Number;Ljava/lang/Comparable;Ljava/lang/constant/Constable; runtimeAnnotations @Ljdk/internal/ValueBased;
+-method name valueOf descriptor (S)Ljava/lang/Short;
+-method name descriptor (S)V
+-method name descriptor (Ljava/lang/String;)V
+-method name shortValue descriptor ()S
+-method name reverseBytes descriptor (S)S
+method name valueOf descriptor (S)Ljava/lang/Short; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name shortValue descriptor ()S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name reverseBytes descriptor (S)S flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (S)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+method name descriptor (Ljava/lang/String;)V thrownTypes java/lang/NumberFormatException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/lang/StrictMath
+-method name sqrt descriptor (D)D
+-method name max descriptor (II)I
+-method name min descriptor (II)I
+-method name max descriptor (FF)F
+-method name max descriptor (DD)D
+-method name min descriptor (FF)F
+-method name min descriptor (DD)D
+method name sqrt descriptor (D)D flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name max descriptor (II)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name max descriptor (FF)F flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name max descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name min descriptor (II)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name min descriptor (FF)F flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name min descriptor (DD)D flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/String
+-method name descriptor (Ljava/lang/String;)V
+method name descriptor (Ljava/lang/String;)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/StringBuffer
+-method name descriptor ()V
+-method name descriptor (I)V
+-method name descriptor (Ljava/lang/String;)V
+-method name append descriptor (Ljava/lang/String;)Ljava/lang/StringBuffer;
+-method name append descriptor (C)Ljava/lang/StringBuffer;
+-method name append descriptor (I)Ljava/lang/StringBuffer;
+-method name toString descriptor ()Ljava/lang/String;
+-method name append descriptor (I)Ljava/lang/AbstractStringBuilder;
+-method name append descriptor (C)Ljava/lang/AbstractStringBuilder;
+-method name append descriptor (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;
+-method name append descriptor (C)Ljava/lang/Appendable;
+method name descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (I)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (Ljava/lang/String;)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (Ljava/lang/String;)Ljava/lang/StringBuffer; flags 21 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (C)Ljava/lang/StringBuffer; flags 21 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (I)Ljava/lang/StringBuffer; flags 21 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name toString descriptor ()Ljava/lang/String; flags 21 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (I)Ljava/lang/AbstractStringBuilder; flags 1041 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (C)Ljava/lang/AbstractStringBuilder; flags 1041 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; flags 1041 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (C)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/StringBuilder
+-method name descriptor ()V
+-method name descriptor (I)V
+-method name descriptor (Ljava/lang/String;)V
+-method name append descriptor (Ljava/lang/String;)Ljava/lang/StringBuilder;
+-method name append descriptor (C)Ljava/lang/StringBuilder;
+-method name append descriptor (I)Ljava/lang/StringBuilder;
+-method name toString descriptor ()Ljava/lang/String;
+-method name append descriptor (I)Ljava/lang/AbstractStringBuilder;
+-method name append descriptor (C)Ljava/lang/AbstractStringBuilder;
+-method name append descriptor (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder;
+-method name append descriptor (C)Ljava/lang/Appendable;
+method name descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (I)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name descriptor (Ljava/lang/String;)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (Ljava/lang/String;)Ljava/lang/StringBuilder; flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (C)Ljava/lang/StringBuilder; flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (I)Ljava/lang/StringBuilder; flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name toString descriptor ()Ljava/lang/String; flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (I)Ljava/lang/AbstractStringBuilder; flags 1041 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (C)Ljava/lang/AbstractStringBuilder; flags 1041 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; flags 1041 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name append descriptor (C)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/SuppressWarnings
+header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;PARAMETER;eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;MODULE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;SOURCE;)
+
+class name java/lang/System
+-method name currentTimeMillis descriptor ()J
+-method name nanoTime descriptor ()J
+-method name arraycopy descriptor (Ljava/lang/Object;ILjava/lang/Object;II)V
+-method name identityHashCode descriptor (Ljava/lang/Object;)I
+method name currentTimeMillis descriptor ()J flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name nanoTime descriptor ()J flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name arraycopy descriptor (Ljava/lang/Object;ILjava/lang/Object;II)V flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name identityHashCode descriptor (Ljava/lang/Object;)I flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/Thread
+-method name currentThread descriptor ()Ljava/lang/Thread;
+-method name onSpinWait descriptor ()V
+method name currentThread descriptor ()Ljava/lang/Thread; flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name onSpinWait descriptor ()V flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/ThreadGroup
+-method name isDaemon descriptor ()Z
+-method name isDestroyed descriptor ()Z
+-method name setDaemon descriptor (Z)V
+-method name destroy descriptor ()V
+-method name stop descriptor ()V
+method name isDaemon descriptor ()Z flags 11 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="16")
+method name isDestroyed descriptor ()Z flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="16")
+method name setDaemon descriptor (Z)V flags 11 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="16")
+method name stop descriptor ()V flags 11 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2")
+method name destroy descriptor ()V flags 11 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="16")
+
+class name java/lang/annotation/ElementType
+-field name RECORD_COMPONENT descriptor Ljava/lang/annotation/ElementType;
+field name RECORD_COMPONENT descriptor Ljava/lang/annotation/ElementType; flags 4019
+
+class name java/lang/invoke/CallSite
+header extends java/lang/Object flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/invoke/LambdaMetafactory
+header extends java/lang/Object flags 31
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/invoke/MethodHandle
+-method name invokeExact descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name invoke descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+method name invokeExact descriptor ([Ljava/lang/Object;)Ljava/lang/Object; thrownTypes java/lang/Throwable flags 191 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;@Ljava/lang/invoke/MethodHandle$PolymorphicSignature;
+method name invoke descriptor ([Ljava/lang/Object;)Ljava/lang/Object; thrownTypes java/lang/Throwable flags 191 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;@Ljava/lang/invoke/MethodHandle$PolymorphicSignature;
+
+class name java/lang/invoke/MethodHandles
+method name dropReturn descriptor (Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; flags 9
+method name classData descriptor (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; thrownTypes java/lang/IllegalAccessException flags 9 signature (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;)TT;
+method name classDataAt descriptor (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;I)Ljava/lang/Object; thrownTypes java/lang/IllegalAccessException flags 9 signature (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Class;I)TT;
+
+class name java/lang/invoke/MethodHandles$Lookup
+field name ORIGINAL descriptor I constantValue 64 flags 19
+method name defineHiddenClassWithClassData descriptor ([BLjava/lang/Object;Z[Ljava/lang/invoke/MethodHandles$Lookup$ClassOption;)Ljava/lang/invoke/MethodHandles$Lookup; thrownTypes java/lang/IllegalAccessException flags 81
+
+class name java/lang/invoke/StringConcatException
+header extends java/lang/Exception flags 21
+
+class name java/lang/invoke/VarHandle
+-method name get descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name set descriptor ([Ljava/lang/Object;)V
+-method name getVolatile descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name setVolatile descriptor ([Ljava/lang/Object;)V
+-method name getOpaque descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name setOpaque descriptor ([Ljava/lang/Object;)V
+-method name getAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name setRelease descriptor ([Ljava/lang/Object;)V
+-method name compareAndSet descriptor ([Ljava/lang/Object;)Z
+-method name compareAndExchange descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name compareAndExchangeAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name compareAndExchangeRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name weakCompareAndSetPlain descriptor ([Ljava/lang/Object;)Z
+-method name weakCompareAndSet descriptor ([Ljava/lang/Object;)Z
+-method name weakCompareAndSetAcquire descriptor ([Ljava/lang/Object;)Z
+-method name weakCompareAndSetRelease descriptor ([Ljava/lang/Object;)Z
+-method name getAndSet descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndSetAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndSetRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndAdd descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndAddAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndAddRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndBitwiseOr descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndBitwiseOrAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndBitwiseOrRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndBitwiseAnd descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndBitwiseAndAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndBitwiseAndRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndBitwiseXor descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndBitwiseXorAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+-method name getAndBitwiseXorRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object;
+method name hasInvokeExactBehavior descriptor ()Z flags 1
+method name get descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name set descriptor ([Ljava/lang/Object;)V flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getVolatile descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name setVolatile descriptor ([Ljava/lang/Object;)V flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getOpaque descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name setOpaque descriptor ([Ljava/lang/Object;)V flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name setRelease descriptor ([Ljava/lang/Object;)V flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name compareAndSet descriptor ([Ljava/lang/Object;)Z flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name compareAndExchange descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name compareAndExchangeAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name compareAndExchangeRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name weakCompareAndSetPlain descriptor ([Ljava/lang/Object;)Z flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name weakCompareAndSet descriptor ([Ljava/lang/Object;)Z flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name weakCompareAndSetAcquire descriptor ([Ljava/lang/Object;)Z flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name weakCompareAndSetRelease descriptor ([Ljava/lang/Object;)Z flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndSet descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndSetAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndSetRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndAdd descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndAddAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndAddRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndBitwiseOr descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndBitwiseOrAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndBitwiseOrRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndBitwiseAnd descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndBitwiseAndAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndBitwiseAndRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndBitwiseXor descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndBitwiseXorAcquire descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name getAndBitwiseXorRelease descriptor ([Ljava/lang/Object;)Ljava/lang/Object; flags 191 runtimeAnnotations @Ljava/lang/invoke/MethodHandle$PolymorphicSignature;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 401
+method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 401
+
+class name java/lang/module/Configuration
+header extends java/lang/Object flags 31
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/module/FindException
+header extends java/lang/RuntimeException flags 21
+
+class name java/lang/module/InvalidModuleDescriptorException
+header extends java/lang/RuntimeException flags 21
+
+class name java/lang/module/ModuleReader
+header extends java/lang/Object implements java/io/Closeable flags 601
+
+class name java/lang/module/ModuleReference
+header extends java/lang/Object flags 421
+
+class name java/lang/module/ResolutionException
+header extends java/lang/RuntimeException flags 21
+
+class name java/lang/module/ResolvedModule
+header extends java/lang/Object flags 31
+
+class name java/lang/ref/Reference
+-method name isEnqueued descriptor ()Z
+-method name get descriptor ()Ljava/lang/Object;
+method name get descriptor ()Ljava/lang/Object; flags 1 signature ()TT; runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name refersTo descriptor (Ljava/lang/Object;)Z flags 11 signature (TT;)Z
+method name isEnqueued descriptor ()Z flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="16")
+
+class name java/lang/reflect/AccessibleObject
+header extends java/lang/Object implements java/lang/reflect/AnnotatedElement flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/reflect/AnnotatedElement
+header extends java/lang/Object flags 601
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/lang/reflect/Array
+-method name getLength descriptor (Ljava/lang/Object;)I
+method name getLength descriptor (Ljava/lang/Object;)I thrownTypes java/lang/IllegalArgumentException flags 109 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/reflect/InaccessibleObjectException
+header extends java/lang/RuntimeException flags 21
+
+class name java/lang/reflect/InvocationHandler
+method name invokeDefault descriptor (Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object; thrownTypes java/lang/Throwable flags 89 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;
+
+class name java/lang/reflect/Method
+-method name invoke descriptor (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
+method name invoke descriptor (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; thrownTypes java/lang/IllegalAccessException,java/lang/IllegalArgumentException,java/lang/reflect/InvocationTargetException flags 81 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;@Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/lang/reflect/RecordComponent
+header extends java/lang/Object implements java/lang/reflect/AnnotatedElement flags 31
+
+class name java/lang/runtime/ObjectMethods
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/net/StandardProtocolFamily
+field name UNIX descriptor Ljava/net/StandardProtocolFamily; flags 4019
+
+class name java/net/URLDecoder
+-method name descriptor ()V
+method name descriptor ()V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="16")
+
+class name java/net/UnixDomainSocketAddress
+header extends java/net/SocketAddress flags 31
+method name of descriptor (Ljava/lang/String;)Ljava/net/UnixDomainSocketAddress; flags 9
+method name of descriptor (Ljava/nio/file/Path;)Ljava/net/UnixDomainSocketAddress; flags 9
+method name getPath descriptor ()Ljava/nio/file/Path; flags 1
+method name hashCode descriptor ()I flags 1
+method name equals descriptor (Ljava/lang/Object;)Z flags 1
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/net/spi/URLStreamHandlerProvider
+header extends java/lang/Object implements java/net/URLStreamHandlerFactory flags 421
+
+class name java/nio/ByteBuffer
+method name put descriptor (ILjava/nio/ByteBuffer;II)Ljava/nio/ByteBuffer; flags 1
+
+class name java/nio/CharBuffer
+header extends java/nio/Buffer implements java/lang/Comparable,java/lang/Appendable,java/lang/CharSequence,java/lang/Readable flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/Readable;
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name put descriptor (ILjava/nio/CharBuffer;II)Ljava/nio/CharBuffer; flags 1
+
+class name java/nio/DoubleBuffer
+method name put descriptor (ILjava/nio/DoubleBuffer;II)Ljava/nio/DoubleBuffer; flags 1
+
+class name java/nio/FloatBuffer
+method name put descriptor (ILjava/nio/FloatBuffer;II)Ljava/nio/FloatBuffer; flags 1
+
+class name java/nio/IntBuffer
+method name put descriptor (ILjava/nio/IntBuffer;II)Ljava/nio/IntBuffer; flags 1
+
+class name java/nio/LongBuffer
+method name put descriptor (ILjava/nio/LongBuffer;II)Ljava/nio/LongBuffer; flags 1
+
+class name java/nio/ShortBuffer
+method name put descriptor (ILjava/nio/ShortBuffer;II)Ljava/nio/ShortBuffer; flags 1
+
+class name java/security/Certificate
+header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2")
+
+class name java/security/Identity
+header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2")
+
+class name java/security/SecureRandomParameters
+header extends java/lang/Object flags 601
+
+class name java/security/SignedObject
+header extends java/lang/Object implements java/io/Serializable flags 31
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+
+class name java/security/cert/CertificateRevokedException
+header extends java/security/cert/CertificateException flags 21
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+
+class name java/security/cert/URICertStoreParameters
+header extends java/lang/Object implements java/security/cert/CertStoreParameters flags 31
+
+class name java/security/cert/X509CRL
+-method name getIssuerDN descriptor ()Ljava/security/Principal;
+method name getIssuerDN descriptor ()Ljava/security/Principal; flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="16")
+
+class name java/security/cert/X509CRLSelector
+-method name addIssuerName descriptor (Ljava/lang/String;)V
+method name addIssuerName descriptor (Ljava/lang/String;)V thrownTypes java/io/IOException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="16")
+
+class name java/security/cert/X509CertSelector
+-method name setIssuer descriptor (Ljava/lang/String;)V
+-method name setSubject descriptor (Ljava/lang/String;)V
+-method name getIssuerAsString descriptor ()Ljava/lang/String;
+-method name getSubjectAsString descriptor ()Ljava/lang/String;
+method name setIssuer descriptor (Ljava/lang/String;)V thrownTypes java/io/IOException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="16")
+method name setSubject descriptor (Ljava/lang/String;)V thrownTypes java/io/IOException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="16")
+method name getIssuerAsString descriptor ()Ljava/lang/String; flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="16")
+method name getSubjectAsString descriptor ()Ljava/lang/String; flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="16")
+
+class name java/security/cert/X509Certificate
+-method name getIssuerDN descriptor ()Ljava/security/Principal;
+-method name getSubjectDN descriptor ()Ljava/security/Principal;
+method name getIssuerDN descriptor ()Ljava/security/Principal; flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="16")
+method name getSubjectDN descriptor ()Ljava/security/Principal; flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="16")
+
+class name java/security/interfaces/RSAKey
+-method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
+method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; flags 1
+
+class name java/security/spec/MGF1ParameterSpec
+-field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec;
+-field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec;
+field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
+field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
+field name SHA3_224 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
+field name SHA3_256 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
+field name SHA3_384 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
+field name SHA3_512 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/security/spec/PSSParameterSpec
+-field name TRAILER_FIELD_BC descriptor I
+field name TRAILER_FIELD_BC descriptor I constantValue 1 flags 19
+-method name toString descriptor ()Ljava/lang/String;
+method name toString descriptor ()Ljava/lang/String; flags 1
+
+class name java/security/spec/RSAKeyGenParameterSpec
+-method name descriptor (ILjava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
+-method name getKeyParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
+method name descriptor (ILjava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V flags 1
+method name getKeyParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; flags 1
+
+class name java/security/spec/RSAMultiPrimePrivateCrtKeySpec
+-method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;[Ljava/security/spec/RSAOtherPrimeInfo;Ljava/security/spec/AlgorithmParameterSpec;)V
+method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;[Ljava/security/spec/RSAOtherPrimeInfo;Ljava/security/spec/AlgorithmParameterSpec;)V flags 1
+
+class name java/security/spec/RSAPrivateCrtKeySpec
+-method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
+method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V flags 1
+
+class name java/security/spec/RSAPrivateKeySpec
+-method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
+-method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
+method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V flags 1
+method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; flags 1
+
+class name java/security/spec/RSAPublicKeySpec
+-method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V
+-method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec;
+method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V flags 1
+method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; flags 1
+
+class name java/text/DateFormatSymbols
+header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+
+class name java/text/RuleBasedCollator
+header extends java/text/Collator flags 21
+innerclass innerClass java/text/Normalizer$Form outerClass java/text/Normalizer innerClassName Form flags 4019
+
+class name java/time/Duration
+header extends java/lang/Object implements java/time/temporal/TemporalAmount,java/lang/Comparable,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/time/temporal/TemporalAmount;Ljava/lang/Comparable;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/time/Instant
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/LocalDate
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/time/chrono/ChronoLocalDate,java/io/Serializable flags 31 runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/LocalDateTime
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/time/chrono/ChronoLocalDateTime,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/time/chrono/ChronoLocalDateTime;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/LocalTime
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/MonthDay
+header extends java/lang/Object implements java/time/temporal/TemporalAccessor,java/time/temporal/TemporalAdjuster,java/lang/Comparable,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/time/temporal/TemporalAccessor;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/OffsetDateTime
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/OffsetTime
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/Period
+header extends java/lang/Object implements java/time/chrono/ChronoPeriod,java/io/Serializable flags 31 runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/time/Year
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/YearMonth
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/ZoneId
+header extends java/lang/Object implements java/io/Serializable flags 421 runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+
+class name java/time/ZoneOffset
+header extends java/time/ZoneId implements java/time/temporal/TemporalAccessor,java/time/temporal/TemporalAdjuster,java/lang/Comparable,java/io/Serializable flags 31 signature Ljava/time/ZoneId;Ljava/time/temporal/TemporalAccessor;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/time/ZonedDateTime
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/chrono/ChronoZonedDateTime,java/io/Serializable flags 31 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/chrono/ChronoZonedDateTime;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/chrono/ChronoLocalDate
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/chrono/ChronoLocalDateTime
+header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;>;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/time/chrono/HijrahDate
+header extends java/time/chrono/ChronoLocalDateImpl implements java/time/chrono/ChronoLocalDate,java/io/Serializable flags 31 signature Ljava/time/chrono/ChronoLocalDateImpl;Ljava/time/chrono/ChronoLocalDate;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/time/chrono/JapaneseDate
+header extends java/time/chrono/ChronoLocalDateImpl implements java/time/chrono/ChronoLocalDate,java/io/Serializable flags 31 signature Ljava/time/chrono/ChronoLocalDateImpl;Ljava/time/chrono/ChronoLocalDate;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/time/chrono/MinguoDate
+header extends java/time/chrono/ChronoLocalDateImpl implements java/time/chrono/ChronoLocalDate,java/io/Serializable flags 31 signature Ljava/time/chrono/ChronoLocalDateImpl;Ljava/time/chrono/ChronoLocalDate;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/time/chrono/ThaiBuddhistDate
+header extends java/time/chrono/ChronoLocalDateImpl implements java/time/chrono/ChronoLocalDate,java/io/Serializable flags 31 signature Ljava/time/chrono/ChronoLocalDateImpl;Ljava/time/chrono/ChronoLocalDate;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/time/format/DateTimeFormatterBuilder
+method name appendDayPeriodText descriptor (Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder; flags 1
+
+class name java/time/format/DecimalStyle
+header extends java/lang/Object flags 31
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+
+class name java/time/temporal/TemporalAdjusters
+header extends java/lang/Object flags 31
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/Arrays
+-method name equals descriptor ([C[C)Z
+-method name equals descriptor ([B[B)Z
+-method name copyOf descriptor ([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object;
+-method name copyOfRange descriptor ([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object;
+method name equals descriptor ([C[C)Z flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name equals descriptor ([B[B)Z flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name copyOf descriptor ([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object; flags 9 signature ([TU;ILjava/lang/Class<+[TT;>;)[TT; runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+method name copyOfRange descriptor ([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object; flags 9 signature ([TU;IILjava/lang/Class<+[TT;>;)[TT; runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate;
+
+class name java/util/Comparator
+header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/DoubleSummaryStatistics
+header extends java/lang/Object implements java/util/function/DoubleConsumer flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/GregorianCalendar
+header extends java/util/Calendar flags 21
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+
+class name java/util/HashSet
+header extends java/util/AbstractSet implements java/util/Set,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/Set;Ljava/lang/Cloneable;Ljava/io/Serializable;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+
+class name java/util/Objects
+method name checkIndex descriptor (JJ)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;
+method name checkFromToIndex descriptor (JJJ)J flags 9
+method name checkFromIndexSize descriptor (JJJ)J flags 9
+
+class name java/util/Observable
+header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9")
+
+class name java/util/Observer
+header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9")
+
+class name java/util/Optional
+header extends java/lang/Object flags 31 signature Ljava/lang/Object; runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/util/OptionalDouble
+header extends java/lang/Object flags 31 runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/util/OptionalInt
+header extends java/lang/Object flags 31 runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/util/OptionalLong
+header extends java/lang/Object flags 31 runtimeAnnotations @Ljdk/internal/ValueBased;
+
+class name java/util/TimeZone
+header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421
+innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019
+
+class name java/util/TreeSet
+header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+
+class name java/util/concurrent/ConcurrentMap
+header extends java/lang/Object implements java/util/Map flags 601 signature Ljava/lang/Object;Ljava/util/Map;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/concurrent/ConcurrentSkipListSet
+header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable;
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/concurrent/CountedCompleter
+header extends java/util/concurrent/ForkJoinTask flags 421 signature Ljava/util/concurrent/ForkJoinTask;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/concurrent/atomic/AtomicBoolean
+header extends java/lang/Object implements java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/concurrent/atomic/AtomicReference
+header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/concurrent/atomic/AtomicReferenceArray
+header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable;
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/concurrent/locks/StampedLock
+header extends java/lang/Object implements java/io/Serializable flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1)
+-method name tryWriteLock descriptor ()J
+-method name writeLockInterruptibly descriptor ()J
+-method name tryReadLock descriptor ()J
+-method name tryReadLock descriptor (JLjava/util/concurrent/TimeUnit;)J
+-method name readLockInterruptibly descriptor ()J
+-method name unlock descriptor (J)V
+method name tryWriteLock descriptor ()J flags 1
+method name writeLockInterruptibly descriptor ()J thrownTypes java/lang/InterruptedException flags 1
+method name tryReadLock descriptor ()J flags 1
+method name tryReadLock descriptor (JLjava/util/concurrent/TimeUnit;)J thrownTypes java/lang/InterruptedException flags 1
+method name readLockInterruptibly descriptor ()J thrownTypes java/lang/InterruptedException flags 1
+method name unlock descriptor (J)V flags 1
+
+class name java/util/function/BiConsumer
+header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/BiFunction
+header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/BiPredicate
+header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/BinaryOperator
+header extends java/lang/Object implements java/util/function/BiFunction flags 601 signature Ljava/lang/Object;Ljava/util/function/BiFunction; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/Consumer
+header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/DoubleConsumer
+header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/DoublePredicate
+header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/DoubleUnaryOperator
+header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/Function
+header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/IntConsumer
+header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/IntPredicate
+header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/IntUnaryOperator
+header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/LongConsumer
+header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/LongPredicate
+header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/LongUnaryOperator
+header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/Predicate
+header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/function/UnaryOperator
+header extends java/lang/Object implements java/util/function/Function flags 601 signature Ljava/lang/Object;Ljava/util/function/Function; runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/spi/AbstractResourceBundleProvider
+header extends java/lang/Object implements java/util/spi/ResourceBundleProvider flags 421
+innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/spi/CurrencyNameProvider
+header extends java/util/spi/LocaleServiceProvider flags 421
+innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9
+
+class name java/util/spi/ResourceBundleProvider
+header extends java/lang/Object flags 601
+
+class name java/util/spi/ToolProvider
+header extends java/lang/Object flags 601
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/util/stream/DoubleStream
+header extends java/lang/Object implements java/util/stream/BaseStream nestMembers java/util/stream/DoubleStream$DoubleMapMultiConsumer,java/util/stream/DoubleStream$Builder flags 601 signature Ljava/lang/Object;Ljava/util/stream/BaseStream;
+innerclass innerClass java/util/stream/DoubleStream$DoubleMapMultiConsumer outerClass java/util/stream/DoubleStream innerClassName DoubleMapMultiConsumer flags 609
+innerclass innerClass java/util/Spliterator$OfDouble outerClass java/util/Spliterator innerClassName OfDouble flags 609
+innerclass innerClass java/util/PrimitiveIterator$OfDouble outerClass java/util/PrimitiveIterator innerClassName OfDouble flags 609
+innerclass innerClass java/util/stream/DoubleStream$Builder outerClass java/util/stream/DoubleStream innerClassName Builder flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name mapMulti descriptor (Ljava/util/stream/DoubleStream$DoubleMapMultiConsumer;)Ljava/util/stream/DoubleStream; flags 1
+
+class name java/util/stream/DoubleStream$DoubleMapMultiConsumer
+header extends java/lang/Object nestHost java/util/stream/DoubleStream flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/util/stream/DoubleStream$DoubleMapMultiConsumer outerClass java/util/stream/DoubleStream innerClassName DoubleMapMultiConsumer flags 609
+method name accept descriptor (DLjava/util/function/DoubleConsumer;)V flags 401
+
+class name java/util/stream/IntStream
+header extends java/lang/Object implements java/util/stream/BaseStream nestMembers java/util/stream/IntStream$IntMapMultiConsumer,java/util/stream/IntStream$Builder flags 601 signature Ljava/lang/Object;Ljava/util/stream/BaseStream;
+innerclass innerClass java/util/stream/IntStream$IntMapMultiConsumer outerClass java/util/stream/IntStream innerClassName IntMapMultiConsumer flags 609
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/util/PrimitiveIterator$OfInt outerClass java/util/PrimitiveIterator innerClassName OfInt flags 609
+innerclass innerClass java/util/stream/IntStream$Builder outerClass java/util/stream/IntStream innerClassName Builder flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name mapMulti descriptor (Ljava/util/stream/IntStream$IntMapMultiConsumer;)Ljava/util/stream/IntStream; flags 1
+
+class name java/util/stream/IntStream$IntMapMultiConsumer
+header extends java/lang/Object nestHost java/util/stream/IntStream flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/util/stream/IntStream$IntMapMultiConsumer outerClass java/util/stream/IntStream innerClassName IntMapMultiConsumer flags 609
+method name accept descriptor (ILjava/util/function/IntConsumer;)V flags 401
+
+class name java/util/stream/LongStream
+header extends java/lang/Object implements java/util/stream/BaseStream nestMembers java/util/stream/LongStream$LongMapMultiConsumer,java/util/stream/LongStream$Builder flags 601 signature Ljava/lang/Object;Ljava/util/stream/BaseStream;
+innerclass innerClass java/util/stream/LongStream$LongMapMultiConsumer outerClass java/util/stream/LongStream innerClassName LongMapMultiConsumer flags 609
+innerclass innerClass java/util/Spliterator$OfLong outerClass java/util/Spliterator innerClassName OfLong flags 609
+innerclass innerClass java/util/PrimitiveIterator$OfLong outerClass java/util/PrimitiveIterator innerClassName OfLong flags 609
+innerclass innerClass java/util/stream/LongStream$Builder outerClass java/util/stream/LongStream innerClassName Builder flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name mapMulti descriptor (Ljava/util/stream/LongStream$LongMapMultiConsumer;)Ljava/util/stream/LongStream; flags 1
+
+class name java/util/stream/LongStream$LongMapMultiConsumer
+header extends java/lang/Object nestHost java/util/stream/LongStream flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface;
+innerclass innerClass java/util/stream/LongStream$LongMapMultiConsumer outerClass java/util/stream/LongStream innerClassName LongMapMultiConsumer flags 609
+method name accept descriptor (JLjava/util/function/LongConsumer;)V flags 401
+
+class name java/util/stream/Stream
+header extends java/lang/Object implements java/util/stream/BaseStream nestMembers java/util/stream/Stream$Builder flags 601 signature Ljava/lang/Object;Ljava/util/stream/BaseStream;>;
+innerclass innerClass java/util/Spliterator$OfDouble outerClass java/util/Spliterator innerClassName OfDouble flags 609
+innerclass innerClass java/util/Spliterator$OfLong outerClass java/util/Spliterator innerClassName OfLong flags 609
+innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609
+innerclass innerClass java/util/stream/Stream$Builder outerClass java/util/stream/Stream innerClassName Builder flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+method name mapMulti descriptor (Ljava/util/function/BiConsumer;)Ljava/util/stream/Stream; flags 1 signature (Ljava/util/function/BiConsumer<-TT;-Ljava/util/function/Consumer;>;)Ljava/util/stream/Stream
;
+method name mapMultiToInt descriptor (Ljava/util/function/BiConsumer;)Ljava/util/stream/IntStream; flags 1 signature (Ljava/util/function/BiConsumer<-TT;-Ljava/util/function/IntConsumer;>;)Ljava/util/stream/IntStream;
+method name mapMultiToLong descriptor (Ljava/util/function/BiConsumer;)Ljava/util/stream/LongStream; flags 1 signature (Ljava/util/function/BiConsumer<-TT;-Ljava/util/function/LongConsumer;>;)Ljava/util/stream/LongStream;
+method name mapMultiToDouble descriptor (Ljava/util/function/BiConsumer;)Ljava/util/stream/DoubleStream; flags 1 signature (Ljava/util/function/BiConsumer<-TT;-Ljava/util/function/DoubleConsumer;>;)Ljava/util/stream/DoubleStream;
+method name toList descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List;
+
+class name java/util/zip/CRC32C
+header extends java/lang/Object implements java/util/zip/Checksum flags 31
+
+class name javax/crypto/AEADBadTagException
+header extends javax/crypto/BadPaddingException flags 21
+
+class name javax/crypto/BadPaddingException
+header extends java/security/GeneralSecurityException flags 21
+
+class name javax/crypto/CipherInputStream
+header extends java/io/FilterInputStream flags 21
+
+class name javax/crypto/CipherOutputStream
+header extends java/io/FilterOutputStream flags 21
+
+class name javax/crypto/CipherSpi
+header extends java/lang/Object flags 421
+
+class name javax/crypto/EncryptedPrivateKeyInfo
+header extends java/lang/Object flags 21
+
+class name javax/crypto/ExemptionMechanism
+header extends java/lang/Object flags 21
+
+class name javax/crypto/ExemptionMechanismException
+header extends java/security/GeneralSecurityException flags 21
+
+class name javax/crypto/ExemptionMechanismSpi
+header extends java/lang/Object flags 421
+
+class name javax/crypto/IllegalBlockSizeException
+header extends java/security/GeneralSecurityException flags 21
+
+class name javax/crypto/KeyAgreement
+header extends java/lang/Object flags 21
+innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9
+
+class name javax/crypto/KeyAgreementSpi
+header extends java/lang/Object flags 421
+
+class name javax/crypto/KeyGenerator
+header extends java/lang/Object flags 21
+innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9
+
+class name javax/crypto/KeyGeneratorSpi
+header extends java/lang/Object flags 421
+
+class name javax/crypto/Mac
+header extends java/lang/Object implements java/lang/Cloneable flags 21
+innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9
+
+class name javax/crypto/MacSpi
+header extends java/lang/Object flags 421
+
+class name javax/crypto/NoSuchPaddingException
+header extends java/security/GeneralSecurityException flags 21
+
+class name javax/crypto/NullCipher
+header extends javax/crypto/Cipher flags 21
+
+class name javax/crypto/SealedObject
+header extends java/lang/Object implements java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/crypto/SecretKey
+header extends java/lang/Object implements java/security/Key,javax/security/auth/Destroyable flags 601
+
+class name javax/crypto/SecretKeyFactory
+header extends java/lang/Object flags 21
+innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9
+
+class name javax/crypto/SecretKeyFactorySpi
+header extends java/lang/Object flags 421
+
+class name javax/crypto/ShortBufferException
+header extends java/security/GeneralSecurityException flags 21
+
+class name javax/crypto/interfaces/DHKey
+header extends java/lang/Object flags 601
+
+class name javax/crypto/interfaces/DHPrivateKey
+header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PrivateKey flags 601
+
+class name javax/crypto/interfaces/DHPublicKey
+header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PublicKey flags 601
+
+class name javax/crypto/interfaces/PBEKey
+header extends java/lang/Object implements javax/crypto/SecretKey flags 601
+
+class name javax/crypto/spec/DESKeySpec
+header extends java/lang/Object implements java/security/spec/KeySpec flags 21
+
+class name javax/crypto/spec/DESedeKeySpec
+header extends java/lang/Object implements java/security/spec/KeySpec flags 21
+
+class name javax/crypto/spec/DHGenParameterSpec
+header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21
+
+class name javax/crypto/spec/DHParameterSpec
+header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21
+
+class name javax/crypto/spec/DHPrivateKeySpec
+header extends java/lang/Object implements java/security/spec/KeySpec flags 21
+
+class name javax/crypto/spec/DHPublicKeySpec
+header extends java/lang/Object implements java/security/spec/KeySpec flags 21
+
+class name javax/crypto/spec/GCMParameterSpec
+header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21
+
+class name javax/crypto/spec/IvParameterSpec
+header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21
+
+class name javax/crypto/spec/OAEPParameterSpec
+header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21
+innerclass innerClass javax/crypto/spec/PSource$PSpecified outerClass javax/crypto/spec/PSource innerClassName PSpecified flags 19
+
+class name javax/crypto/spec/PBEKeySpec
+header extends java/lang/Object implements java/security/spec/KeySpec flags 21
+
+class name javax/crypto/spec/PBEParameterSpec
+header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21
+
+class name javax/crypto/spec/RC2ParameterSpec
+header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21
+
+class name javax/crypto/spec/RC5ParameterSpec
+header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21
+
+class name javax/crypto/spec/SecretKeySpec
+header extends java/lang/Object implements java/security/spec/KeySpec,javax/crypto/SecretKey flags 21
+
diff --git a/make/data/symbols/java.compiler-G.sym.txt b/make/data/symbols/java.compiler-G.sym.txt
new file mode 100644
index 00000000000..1fdb4f4409a
--- /dev/null
+++ b/make/data/symbols/java.compiler-G.sym.txt
@@ -0,0 +1,143 @@
+#
+# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name javax/annotation/processing/AbstractProcessor
+header extends java/lang/Object implements javax/annotation/processing/Processor flags 421
+innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/annotation/processing/Generated
+header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;SOURCE;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;TYPE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;PARAMETER;})
+
+class name javax/lang/model/SourceVersion
+field name RELEASE_16 descriptor Ljavax/lang/model/SourceVersion; flags 4019
+
+class name javax/lang/model/element/ElementKind
+-field name RECORD descriptor Ljavax/lang/model/element/ElementKind;
+-field name RECORD_COMPONENT descriptor Ljavax/lang/model/element/ElementKind;
+-field name BINDING_VARIABLE descriptor Ljavax/lang/model/element/ElementKind;
+field name RECORD descriptor Ljavax/lang/model/element/ElementKind; flags 4019
+field name RECORD_COMPONENT descriptor Ljavax/lang/model/element/ElementKind; flags 4019
+field name BINDING_VARIABLE descriptor Ljavax/lang/model/element/ElementKind; flags 4019
+
+class name javax/lang/model/element/ElementVisitor
+-method name visitRecordComponent descriptor (Ljavax/lang/model/element/RecordComponentElement;Ljava/lang/Object;)Ljava/lang/Object;
+method name visitRecordComponent descriptor (Ljavax/lang/model/element/RecordComponentElement;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Ljavax/lang/model/element/RecordComponentElement;TP;)TR;
+
+class name javax/lang/model/element/RecordComponentElement
+header extends java/lang/Object implements javax/lang/model/element/Element flags 601
+
+class name javax/lang/model/element/TypeElement
+-method name getRecordComponents descriptor ()Ljava/util/List;
+method name getRecordComponents descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<+Ljavax/lang/model/element/RecordComponentElement;>;
+
+class name javax/lang/model/element/UnknownAnnotationValueException
+header extends javax/lang/model/UnknownEntityException flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/lang/model/element/UnknownDirectiveException
+header extends javax/lang/model/UnknownEntityException flags 21
+innerclass innerClass javax/lang/model/element/ModuleElement$Directive outerClass javax/lang/model/element/ModuleElement innerClassName Directive flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/lang/model/element/UnknownElementException
+header extends javax/lang/model/UnknownEntityException flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/lang/model/type/MirroredTypeException
+header extends javax/lang/model/type/MirroredTypesException flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/lang/model/type/MirroredTypesException
+header extends java/lang/RuntimeException flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/lang/model/type/UnknownTypeException
+header extends javax/lang/model/UnknownEntityException flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/lang/model/util/AbstractAnnotationValueVisitor14
+header extends javax/lang/model/util/AbstractAnnotationValueVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractAnnotationValueVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_16;)
+
+class name javax/lang/model/util/AbstractElementVisitor14
+header extends javax/lang/model/util/AbstractElementVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractElementVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_16;)
+
+class name javax/lang/model/util/AbstractTypeVisitor14
+header extends javax/lang/model/util/AbstractTypeVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_16;)
+
+class name javax/lang/model/util/AbstractTypeVisitor6
+header extends java/lang/Object implements javax/lang/model/type/TypeVisitor flags 421 signature Ljava/lang/Object;Ljavax/lang/model/type/TypeVisitor; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_6;)
+
+class name javax/lang/model/util/AbstractTypeVisitor7
+header extends javax/lang/model/util/AbstractTypeVisitor6 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor6; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_7;)
+
+class name javax/lang/model/util/AbstractTypeVisitor8
+header extends javax/lang/model/util/AbstractTypeVisitor7 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor7; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_8;)
+
+class name javax/lang/model/util/ElementFilter
+-method name recordComponentsIn descriptor (Ljava/lang/Iterable;)Ljava/util/List;
+-method name recordComponentsIn descriptor (Ljava/util/Set;)Ljava/util/Set;
+method name recordComponentsIn descriptor (Ljava/lang/Iterable;)Ljava/util/List; flags 9 signature (Ljava/lang/Iterable<+Ljavax/lang/model/element/Element;>;)Ljava/util/List;
+method name recordComponentsIn descriptor (Ljava/util/Set;)Ljava/util/Set; flags 9 signature (Ljava/util/Set<+Ljavax/lang/model/element/Element;>;)Ljava/util/Set;
+
+class name javax/lang/model/util/ElementKindVisitor14
+header extends javax/lang/model/util/ElementKindVisitor9 flags 21 signature Ljavax/lang/model/util/ElementKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_16;)
+
+class name javax/lang/model/util/ElementKindVisitor6
+-method name visitTypeAsRecord descriptor (Ljavax/lang/model/element/TypeElement;Ljava/lang/Object;)Ljava/lang/Object;
+method name visitTypeAsRecord descriptor (Ljavax/lang/model/element/TypeElement;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Ljavax/lang/model/element/TypeElement;TP;)TR;
+
+class name javax/lang/model/util/ElementScanner14
+header extends javax/lang/model/util/ElementScanner9 flags 21 signature Ljavax/lang/model/util/ElementScanner9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_16;)
+
+class name javax/lang/model/util/Elements
+-method name recordComponentFor descriptor (Ljavax/lang/model/element/ExecutableElement;)Ljavax/lang/model/element/RecordComponentElement;
+method name recordComponentFor descriptor (Ljavax/lang/model/element/ExecutableElement;)Ljavax/lang/model/element/RecordComponentElement; flags 1
+
+class name javax/lang/model/util/SimpleAnnotationValueVisitor14
+header extends javax/lang/model/util/SimpleAnnotationValueVisitor9 flags 21 signature Ljavax/lang/model/util/SimpleAnnotationValueVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_16;)
+
+class name javax/lang/model/util/SimpleElementVisitor14
+header extends javax/lang/model/util/SimpleElementVisitor9 flags 21 signature Ljavax/lang/model/util/SimpleElementVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_16;)
+
+class name javax/lang/model/util/SimpleTypeVisitor14
+header extends javax/lang/model/util/SimpleTypeVisitor9 flags 21 signature Ljavax/lang/model/util/SimpleTypeVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_16;)
+
+class name javax/lang/model/util/TypeKindVisitor14
+header extends javax/lang/model/util/TypeKindVisitor9 flags 21 signature Ljavax/lang/model/util/TypeKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_16;)
+
+class name javax/tools/SimpleJavaFileObject
+header extends java/lang/Object implements javax/tools/JavaFileObject flags 21
+innerclass innerClass javax/tools/JavaFileObject$Kind outerClass javax/tools/JavaFileObject innerClassName Kind flags 4019
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/tools/ToolProvider
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name descriptor ()V
+
diff --git a/make/data/symbols/java.datatransfer-G.sym.txt b/make/data/symbols/java.datatransfer-G.sym.txt
new file mode 100644
index 00000000000..51008b6e51c
--- /dev/null
+++ b/make/data/symbols/java.datatransfer-G.sym.txt
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name java/awt/datatransfer/Clipboard
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/datatransfer/DataFlavor
+header extends java/lang/Object implements java/io/Externalizable,java/lang/Cloneable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
diff --git a/make/data/symbols/java.desktop-G.sym.txt b/make/data/symbols/java.desktop-G.sym.txt
new file mode 100644
index 00000000000..186b90ac482
--- /dev/null
+++ b/make/data/symbols/java.desktop-G.sym.txt
@@ -0,0 +1,1256 @@
+#
+# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+# ##########################################################
+# ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ###
+# ##########################################################
+#
+class name java/applet/AppletContext
+header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9")
+
+class name java/applet/AppletStub
+header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9")
+
+class name java/applet/AudioClip
+header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9")
+
+class name java/awt/AWTKeyStroke
+header extends java/lang/Object implements java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/AttributeValue
+header extends java/lang/Object flags 420
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/BorderLayout
+header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/CheckboxGroup
+header extends java/lang/Object implements java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/Color
+header extends java/lang/Object implements java/awt/Paint,java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/ContainerOrderFocusTraversalPolicy
+header extends java/awt/FocusTraversalPolicy implements java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/Dimension
+header extends java/awt/geom/Dimension2D implements java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/DisplayMode
+header extends java/lang/Object flags 31
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/Event
+header extends java/lang/Object implements java/io/Serializable flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9")
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/FlowLayout
+header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/FocusTraversalPolicy
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/FontMetrics
+header extends java/lang/Object implements java/io/Serializable flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/Graphics
+header extends java/lang/Object flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/GridBagLayoutInfo
+header extends java/lang/Object implements java/io/Serializable flags 21
+innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019
+
+class name java/awt/GridLayout
+header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/HeadlessException
+header extends java/lang/UnsupportedOperationException flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/Image
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/Insets
+header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/MenuShortcut
+header extends java/lang/Object implements java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/Point
+header extends java/awt/geom/Point2D implements java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/PrintJob
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/Rectangle
+header extends java/awt/geom/Rectangle2D implements java/awt/Shape,java/io/Serializable flags 21
+innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/SystemColor
+header extends java/awt/Color implements java/io/Serializable flags 31
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/TexturePaint
+header extends java/lang/Object implements java/awt/Paint flags 21
+innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9
+
+class name java/awt/Toolkit
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/color/ColorSpace
+header extends java/lang/Object implements java/io/Serializable flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/color/ICC_ColorSpace
+header extends java/awt/color/ColorSpace flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4)
+
+class name java/awt/color/ICC_Profile
+-method name finalize descriptor ()V
+method name finalize descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/awt/desktop/AboutEvent
+header extends java/awt/desktop/AppEvent flags 31
+
+class name java/awt/desktop/AboutHandler
+header extends java/lang/Object flags 601
+
+class name java/awt/desktop/AppEvent
+header extends java/util/EventObject flags 21
+
+class name java/awt/desktop/AppForegroundEvent
+header extends java/awt/desktop/AppEvent flags 31
+
+class name java/awt/desktop/AppForegroundListener
+header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601
+
+class name java/awt/desktop/AppHiddenEvent
+header extends java/awt/desktop/AppEvent flags 31
+
+class name java/awt/desktop/AppHiddenListener
+header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601
+
+class name java/awt/desktop/AppReopenedEvent
+header extends java/awt/desktop/AppEvent flags 31
+
+class name java/awt/desktop/AppReopenedListener
+header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601
+
+class name java/awt/desktop/FilesEvent
+header extends java/awt/desktop/AppEvent flags 21
+
+class name java/awt/desktop/OpenFilesEvent
+header extends java/awt/desktop/FilesEvent flags 31
+
+class name java/awt/desktop/OpenFilesHandler
+header extends java/lang/Object flags 601
+
+class name java/awt/desktop/OpenURIEvent
+header extends java/awt/desktop/AppEvent flags 31
+
+class name java/awt/desktop/OpenURIHandler
+header extends java/lang/Object flags 601
+
+class name java/awt/desktop/PreferencesEvent
+header extends java/awt/desktop/AppEvent flags 31
+
+class name java/awt/desktop/PreferencesHandler
+header extends java/lang/Object flags 601
+
+class name java/awt/desktop/PrintFilesEvent
+header extends java/awt/desktop/FilesEvent flags 31
+
+class name java/awt/desktop/PrintFilesHandler
+header extends java/lang/Object flags 601
+
+class name java/awt/desktop/QuitEvent
+header extends java/awt/desktop/AppEvent flags 31
+
+class name java/awt/desktop/QuitHandler
+header extends java/lang/Object flags 601
+
+class name java/awt/desktop/QuitResponse
+header extends java/lang/Object flags 601
+
+class name java/awt/desktop/QuitStrategy
+header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum;
+
+class name java/awt/desktop/ScreenSleepEvent
+header extends java/awt/desktop/AppEvent flags 31
+
+class name java/awt/desktop/ScreenSleepListener
+header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601
+
+class name java/awt/desktop/SystemEventListener
+header extends java/lang/Object implements java/util/EventListener flags 601
+
+class name java/awt/desktop/SystemSleepEvent
+header extends java/awt/desktop/AppEvent flags 31
+
+class name java/awt/desktop/SystemSleepListener
+header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601
+
+class name java/awt/desktop/UserSessionListener
+header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601
+
+class name java/awt/dnd/DragGestureEvent
+header extends java/util/EventObject flags 21
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+
+class name java/awt/dnd/DragGestureRecognizer
+header extends java/lang/Object implements java/io/Serializable flags 421
+innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409
+
+class name java/awt/dnd/DragSource
+header extends java/lang/Object implements java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/dnd/DragSourceAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/dnd/DropTargetAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/dnd/DropTargetDragEvent
+header extends java/awt/dnd/DropTargetEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/dnd/DropTargetDropEvent
+header extends java/awt/dnd/DropTargetEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/event/ActionEvent
+header extends java/awt/AWTEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/event/AdjustmentEvent
+header extends java/awt/AWTEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/event/ComponentAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/event/ComponentEvent
+header extends java/awt/AWTEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/event/ContainerAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/event/ContainerEvent
+header extends java/awt/event/ComponentEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/event/FocusAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/event/HierarchyBoundsAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/event/HierarchyEvent
+header extends java/awt/AWTEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/event/InputMethodEvent
+header extends java/awt/AWTEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/event/ItemEvent
+header extends java/awt/AWTEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/event/KeyAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/event/MouseAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/event/MouseMotionAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/event/MouseWheelEvent
+header extends java/awt/event/MouseEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/event/PaintEvent
+header extends java/awt/event/ComponentEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/event/WindowAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/event/WindowEvent
+header extends java/awt/event/ComponentEvent flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/font/FontRenderContext
+header extends java/lang/Object flags 21
+innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/font/GlyphVector
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/font/GraphicAttribute
+header extends java/lang/Object flags 421
+innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9
+
+class name java/awt/font/ImageGraphicAttribute
+header extends java/awt/font/GraphicAttribute flags 31
+innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9
+
+class name java/awt/font/LayoutPath
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/font/LineMetrics
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/font/ShapeGraphicAttribute
+header extends java/awt/font/GraphicAttribute flags 31
+innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9
+
+class name java/awt/font/TextHitInfo
+header extends java/lang/Object flags 31
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/font/TextMeasurer
+header extends java/lang/Object implements java/lang/Cloneable flags 31
+innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/geom/AffineTransform
+header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21
+innerclass innerClass java/awt/geom/Point2D$Double outerClass java/awt/geom/Point2D innerClassName Double flags 9
+innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9
+innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/geom/Area
+header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 21
+innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9
+
+class name java/awt/geom/RectangularShape
+header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 421
+innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9
+
+class name java/awt/image/AbstractMultiResolutionImage
+header extends java/awt/Image implements java/awt/image/MultiResolutionImage flags 421
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/image/BandCombineOp
+header extends java/lang/Object implements java/awt/image/RasterOp flags 21
+innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/BandedSampleModel
+header extends java/awt/image/ComponentSampleModel flags 31
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/BaseMultiResolutionImage
+header extends java/awt/image/AbstractMultiResolutionImage flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/BufferStrategy
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/image/BufferedImageFilter
+header extends java/awt/image/ImageFilter implements java/lang/Cloneable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/ByteLookupTable
+header extends java/awt/image/LookupTable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/ColorConvertOp
+header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21
+innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9
+
+class name java/awt/image/ColorModel
+-method name finalize descriptor ()V
+method name finalize descriptor ()V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/awt/image/ComponentColorModel
+header extends java/awt/image/ColorModel flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/ComponentSampleModel
+header extends java/awt/image/SampleModel flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/ConvolveOp
+header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21
+innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9
+
+class name java/awt/image/DataBufferUShort
+header extends java/awt/image/DataBuffer flags 31
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/DirectColorModel
+header extends java/awt/image/PackedColorModel flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/ImageFilter
+header extends java/lang/Object implements java/awt/image/ImageConsumer,java/lang/Cloneable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/IndexColorModel
+header extends java/awt/image/ColorModel flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name finalize descriptor ()V
+method name finalize descriptor ()V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")
+
+class name java/awt/image/Kernel
+header extends java/lang/Object implements java/lang/Cloneable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/LookupOp
+header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21
+innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/MultiPixelPackedSampleModel
+header extends java/awt/image/SampleModel flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/MultiResolutionImage
+header extends java/lang/Object flags 601
+
+class name java/awt/image/PackedColorModel
+header extends java/awt/image/ColorModel flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/RGBImageFilter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/image/Raster
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/ReplicateScaleFilter
+header extends java/awt/image/ImageFilter flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/RescaleOp
+header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21
+innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/SampleModel
+header extends java/lang/Object flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/ShortLookupTable
+header extends java/awt/image/LookupTable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/SinglePixelPackedSampleModel
+header extends java/awt/image/SampleModel flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/awt/image/VolatileImage
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/awt/print/Paper
+header extends java/lang/Object implements java/lang/Cloneable flags 21
+innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9
+
+class name java/beans/AppletInitializer
+header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9")
+
+class name java/beans/BeanProperty
+header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;METHOD;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)
+
+class name java/beans/Beans
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/beans/DefaultPersistenceDelegate
+header extends java/beans/PersistenceDelegate flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/beans/Encoder
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/beans/EventSetDescriptor
+header extends java/beans/FeatureDescriptor flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/beans/Expression
+header extends java/beans/Statement flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/beans/FeatureDescriptor
+header extends java/lang/Object flags 21
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+
+class name java/beans/IndexedPropertyDescriptor
+header extends java/beans/PropertyDescriptor flags 21
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/beans/JavaBean
+header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)
+
+class name java/beans/PersistenceDelegate
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name java/beans/PropertyDescriptor
+header extends java/beans/FeatureDescriptor flags 21
+innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name java/beans/SimpleBeanInfo
+header extends java/lang/Object implements java/beans/BeanInfo flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/accessibility/AccessibilityProvider
+header extends java/lang/Object flags 421
+
+class name javax/accessibility/AccessibleBundle
+header extends java/lang/Object flags 421 classAnnotations @Ljdk/Profile+Annotation;(value=I4)
+
+class name javax/accessibility/AccessibleContext
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/accessibility/AccessibleHyperlink
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/accessibility/AccessibleRelationSet
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/accessibility/AccessibleStateSet
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/imageio/metadata/IIOMetadata
+header extends java/lang/Object flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/imageio/plugins/jpeg/JPEGHuffmanTable
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/imageio/plugins/jpeg/JPEGQTable
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/imageio/plugins/tiff/TIFFDirectory
+header extends java/lang/Object implements java/lang/Cloneable flags 21
+
+class name javax/imageio/plugins/tiff/TIFFField
+header extends java/lang/Object implements java/lang/Cloneable flags 31
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/imageio/plugins/tiff/TIFFImageReadParam
+header extends javax/imageio/ImageReadParam flags 31
+
+class name javax/imageio/plugins/tiff/TIFFTag
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/imageio/plugins/tiff/TIFFTagSet
+header extends java/lang/Object flags 21
+
+class name javax/imageio/spi/ImageReaderWriterSpi
+header extends javax/imageio/spi/IIOServiceProvider flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/print/PrintServiceLookup
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/print/ServiceUIFactory
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/print/StreamPrintServiceFactory
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/print/attribute/DateTimeSyntax
+header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/print/attribute/EnumSyntax
+header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/print/attribute/IntegerSyntax
+header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/print/attribute/standard/MediaPrintableArea
+header extends java/lang/Object implements javax/print/attribute/DocAttribute,javax/print/attribute/PrintRequestAttribute,javax/print/attribute/PrintJobAttribute flags 31
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/print/event/PrintEvent
+header extends java/util/EventObject flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/print/event/PrintJobAdapter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/sound/midi/MetaMessage
+header extends javax/sound/midi/MidiMessage flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/midi/MidiMessage
+header extends java/lang/Object implements java/lang/Cloneable flags 421
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/midi/Sequence
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/midi/ShortMessage
+header extends javax/sound/midi/MidiMessage flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/midi/SysexMessage
+header extends javax/sound/midi/MidiMessage flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/sound/midi/spi/MidiDeviceProvider
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/sound/midi/spi/MidiFileReader
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/sound/midi/spi/MidiFileWriter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/sound/midi/spi/SoundbankReader
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/sound/sampled/ReverbType
+header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4)
+
+class name javax/sound/sampled/spi/AudioFileReader
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/sound/sampled/spi/AudioFileWriter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/sound/sampled/spi/FormatConversionProvider
+header extends java/lang/Object flags 421
+innerclass innerClass javax/sound/sampled/AudioFormat$Encoding outerClass javax/sound/sampled/AudioFormat innerClassName Encoding flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/sound/sampled/spi/MixerProvider
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/AbstractButton
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/AbstractCellEditor
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/AbstractListModel
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/AbstractSpinnerModel
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/BoxLayout
+header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/DebugGraphics
+header extends java/awt/Graphics flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/DefaultBoundedRangeModel
+header extends java/lang/Object implements javax/swing/BoundedRangeModel,java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/DefaultListSelectionModel
+header extends java/lang/Object implements javax/swing/ListSelectionModel,java/lang/Cloneable,java/io/Serializable flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/FocusManager
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/GrayFilter
+header extends java/awt/image/RGBImageFilter flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/InputVerifier
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/InternalFrameFocusTraversalPolicy
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/JFormattedTextField$AbstractFormatter
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/JFormattedTextField$AbstractFormatterFactory
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/JList$AccessibleJList$AccessibleJListChild
+-method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction;
+method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; flags 1
+
+class name javax/swing/JPasswordField
+method name setText descriptor (Ljava/lang/String;)V flags 1 runtimeAnnotations @Ljava/beans/BeanProperty;(bound=Zfalse,description="the\u005C;u0020;text\u005C;u0020;of\u005C;u0020;this\u005C;u0020;component")
+
+class name javax/swing/JSlider$AccessibleJSlider
+header extends javax/swing/JComponent$AccessibleJComponent implements javax/accessibility/AccessibleValue,javax/swing/event/ChangeListener nestHost javax/swing/JSlider flags 21
+innerclass innerClass javax/swing/JSlider$AccessibleJSlider outerClass javax/swing/JSlider innerClassName AccessibleJSlider flags 4
+innerclass innerClass javax/swing/JComponent$AccessibleJComponent outerClass javax/swing/JComponent innerClassName AccessibleJComponent flags 401
+method name stateChanged descriptor (Ljavax/swing/event/ChangeEvent;)V flags 1
+
+class name javax/swing/JTextPane
+header extends javax/swing/JEditorPane flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(description="A\u005C;u0020;text\u005C;u0020;component\u005C;u0020;that\u005C;u0020;can\u005C;u0020;be\u005C;u0020;marked\u005C;u0020;up\u005C;u0020;with\u005C;u0020;attributes\u005C;u0020;that\u005C;u0020;are\u005C;u0020;graphically\u005C;u0020;represented.")@Ljavax/swing/SwingContainer;
+
+class name javax/swing/LookAndFeel
+header extends java/lang/Object flags 421
+innerclass innerClass javax/swing/text/JTextComponent$KeyBinding outerClass javax/swing/text/JTextComponent innerClassName KeyBinding flags 9
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+-method name descriptor ()V
+method name descriptor ()V flags 4
+
+class name javax/swing/MenuSelectionManager
+header extends java/lang/Object flags 21
+innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19
+
+class name javax/swing/RowFilter
+-method name