diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000000..8cf0bd8d62a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*] +charset = utf-8 + +[*.{cpp,hpp,c,h,java,cc,hh,m,mm,S,md,properties,gmk,m4,ac}] +trim_trailing_whitespace = true + +[Makefile] +trim_trailing_whitespace = true + +[src/hotspot/**.{cpp,hpp,h}] +indent_style = space +indent_size = 2 diff --git a/.gitattributes b/.gitattributes index ebb586628c3..5a18aa21d98 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,5 @@ * -text +* encoding=utf-8 *.java diff=java *.c diff=cpp *.h diff=cpp diff --git a/.github/actions/do-build/action.yml b/.github/actions/do-build/action.yml index 252105f29fd..6f2c2ce0218 100644 --- a/.github/actions/do-build/action.yml +++ b/.github/actions/do-build/action.yml @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2025, 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 @@ -42,7 +42,7 @@ runs: - name: 'Build' id: build run: > - make LOG=info ${{ inputs.make-target }} + make -k LOG=info ${{ inputs.make-target }} || bash ./.github/scripts/gen-build-failure-report.sh "$GITHUB_STEP_SUMMARY" shell: bash diff --git a/.github/actions/get-bundles/action.yml b/.github/actions/get-bundles/action.yml index aaec9a6d19f..270d15159a0 100644 --- a/.github/actions/get-bundles/action.yml +++ b/.github/actions/get-bundles/action.yml @@ -32,10 +32,16 @@ inputs: debug-suffix: description: 'File name suffix denoting debug level, possibly empty' required: false + static-suffix: + description: 'Static bundle file name suffix' + required: false outputs: jdk-path: description: 'Path to the installed JDK bundle' value: ${{ steps.path-name.outputs.jdk }} + static-jdk-path: + description: 'Path to the installed static JDK bundle' + value: ${{ steps.path-name.outputs.static_jdk }} symbols-path: description: 'Path to the installed symbols bundle' value: ${{ steps.path-name.outputs.symbols }} @@ -61,6 +67,15 @@ runs: path: bundles if: steps.download-bundles.outcome == 'failure' + - name: 'Download static bundles artifact' + id: download-static-bundles + uses: actions/download-artifact@v4 + with: + name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }} + path: bundles + continue-on-error: true + if: ${{ inputs.static-suffix == '-static' }} + - name: 'Unpack bundles' run: | if [[ -e bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.zip ]]; then @@ -75,6 +90,20 @@ runs: tar -xf bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz -C bundles/jdk fi + if [[ '${{ inputs.static-suffix }}' == '-static' ]]; then + if [[ -e bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.zip ]]; then + echo 'Unpacking static jdk bundle...' + mkdir -p bundles/static-jdk + unzip -q bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.zip -d bundles/static-jdk + fi + + if [[ -e bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.tar.gz ]]; then + echo 'Unpacking static jdk bundle...' + mkdir -p bundles/static-jdk + tar -xf bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.tar.gz -C bundles/static-jdk + fi + fi + if [[ -e bundles/symbols-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz ]]; then echo 'Unpacking symbols bundle...' mkdir -p bundles/symbols @@ -106,4 +135,12 @@ runs: echo "jdk=$jdk_dir" >> $GITHUB_OUTPUT echo "symbols=$symbols_dir" >> $GITHUB_OUTPUT echo "tests=$tests_dir" >> $GITHUB_OUTPUT + + if [[ '${{ inputs.static-suffix }}' == '-static' ]]; then + static_jdk_dir="$GITHUB_WORKSPACE/$(dirname $(find bundles/static-jdk -name bin -type d))" + if [[ '${{ runner.os }}' == 'Windows' ]]; then + static_jdk_dir="$(cygpath $static_jdk_dir)" + fi + echo "static_jdk=$static_jdk_dir" >> $GITHUB_OUTPUT + fi shell: bash diff --git a/.github/actions/upload-bundles/action.yml b/.github/actions/upload-bundles/action.yml index 30f4ac03c1e..dfa994baac0 100644 --- a/.github/actions/upload-bundles/action.yml +++ b/.github/actions/upload-bundles/action.yml @@ -35,6 +35,9 @@ inputs: bundle-suffix: description: 'Bundle name suffix, possibly empty' required: false + static-suffix: + description: 'Static JDK bundle name suffix, possibly empty' + required: false runs: using: composite @@ -46,6 +49,8 @@ runs: # Rename bundles to consistent names jdk_bundle_zip="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}.zip 2> /dev/null || true)" jdk_bundle_tar_gz="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)" + static_jdk_bundle_zip="$(ls build/*/bundles/static-jdk-*_bin${{ inputs.debug-suffix }}.zip 2> /dev/null || true)" + static_jdk_bundle_tar_gz="$(ls build/*/bundles/static-jdk-*_bin${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)" symbols_bundle="$(ls build/*/bundles/jdk-*_bin${{ inputs.debug-suffix }}-symbols.tar.gz 2> /dev/null || true)" tests_bundle="$(ls build/*/bundles/jdk-*_bin-tests${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)" static_libs_bundle="$(ls build/*/bundles/jdk-*_bin-static-libs${{ inputs.debug-suffix }}.tar.gz 2> /dev/null || true)" @@ -58,6 +63,12 @@ runs: if [[ "$jdk_bundle_tar_gz" != "" ]]; then mv "$jdk_bundle_tar_gz" "bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz" fi + if [[ "$static_jdk_bundle_zip" != "" ]]; then + mv "$static_jdk_bundle_zip" "bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.zip" + fi + if [[ "$static_jdk_bundle_tar_gz" != "" ]]; then + mv "$static_jdk_bundle_tar_gz" "bundles/jdk-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}.tar.gz" + fi if [[ "$symbols_bundle" != "" ]]; then mv "$symbols_bundle" "bundles/symbols-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz" fi @@ -68,7 +79,7 @@ runs: mv "$static_libs_bundle" "bundles/static-libs-${{ inputs.platform }}${{ inputs.debug-suffix }}.tar.gz" fi - if [[ "$jdk_bundle_zip$jdk_bundle_tar_gz$symbols_bundle$tests_bundle$static_libs_bundle" != "" ]]; then + if [[ "$jdk_bundle_zip$jdk_bundle_tar_gz$static_jdk_bundle_zip$static_jdk_bundle_tar_gz$symbols_bundle$tests_bundle$static_libs_bundle" != "" ]]; then echo 'bundles-found=true' >> $GITHUB_OUTPUT else echo 'bundles-found=false' >> $GITHUB_OUTPUT @@ -78,7 +89,7 @@ runs: - name: 'Upload bundles artifact' uses: actions/upload-artifact@v4 with: - name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.bundle-suffix }} + name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }}${{ inputs.static-suffix }}${{ inputs.bundle-suffix }} path: bundles retention-days: 1 if: steps.bundles.outputs.bundles-found == 'true' diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index 101668b2bd5..9c991eed419 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -64,6 +64,9 @@ on: bundle-suffix: required: false type: string + static-suffix: + required: false + type: string jobs: build-linux: @@ -143,3 +146,4 @@ jobs: platform: ${{ inputs.platform }} debug-suffix: "${{ matrix.debug-level == 'debug' && '-debug' || '' }}" bundle-suffix: ${{ inputs.bundle-suffix }} + static-suffix: ${{ inputs.static-suffix }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8dce1d214dc..6ca64bb82d0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -231,16 +231,14 @@ jobs: uses: ./.github/workflows/build-linux.yml with: platform: linux-x64 - make-target: 'static-jdk-image' + make-target: 'static-jdk-bundles' # There are issues with fastdebug static build in GHA due to space limit. # Only do release build for now. debug-levels: '[ "release" ]' gcc-major-version: '10' configure-arguments: ${{ github.event.inputs.configure-arguments }} make-arguments: ${{ github.event.inputs.make-arguments }} - # It currently doesn't produce any bundles, but probably will do in - # the future. - bundle-suffix: "-static" + static-suffix: "-static" if: needs.prepare.outputs.linux-x64 == 'true' build-linux-x64-static-libs: @@ -361,6 +359,19 @@ jobs: platform: linux-x64 bootjdk-platform: linux-x64 runs-on: ubuntu-22.04 + debug-suffix: -debug + + test-linux-x64-static: + name: linux-x64-static + needs: + - build-linux-x64 + - build-linux-x64-static + uses: ./.github/workflows/test.yml + with: + platform: linux-x64 + bootjdk-platform: linux-x64 + runs-on: ubuntu-22.04 + static-suffix: "-static" test-macos-aarch64: name: macos-aarch64 @@ -372,6 +383,7 @@ jobs: bootjdk-platform: macos-aarch64 runs-on: macos-14 xcode-toolset-version: '15.4' + debug-suffix: -debug test-windows-x64: name: windows-x64 @@ -382,3 +394,4 @@ jobs: platform: windows-x64 bootjdk-platform: windows-x64 runs-on: windows-2019 + debug-suffix: -debug diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 99aaf9650a0..665ae224372 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -40,6 +40,12 @@ on: xcode-toolset-version: required: false type: string + debug-suffix: + required: false + type: string + static-suffix: + required: false + type: string env: # These are needed to make the MSYS2 bash work properly @@ -86,35 +92,35 @@ jobs: - test-name: 'hs/tier1 common' test-suite: 'test/hotspot/jtreg/:tier1_common' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 compiler part 1' test-suite: 'test/hotspot/jtreg/:tier1_compiler_1' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 compiler part 2' test-suite: 'test/hotspot/jtreg/:tier1_compiler_2' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 compiler part 3' test-suite: 'test/hotspot/jtreg/:tier1_compiler_3' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 gc' test-suite: 'test/hotspot/jtreg/:tier1_gc' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 runtime' test-suite: 'test/hotspot/jtreg/:tier1_runtime' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'hs/tier1 serviceability' test-suite: 'test/hotspot/jtreg/:tier1_serviceability' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} - test-name: 'lib-test/tier1' test-suite: 'test/lib-test/:tier1' - debug-suffix: -debug + debug-suffix: ${{ inputs.debug-suffix }} steps: - name: 'Checkout the JDK source' @@ -140,6 +146,7 @@ jobs: with: platform: ${{ inputs.platform }} debug-suffix: ${{ matrix.debug-suffix }} + static-suffix: ${{ inputs.static-suffix }} - name: 'Install dependencies' run: | @@ -160,6 +167,21 @@ jobs: else echo "value=$PATH" >> $GITHUB_OUTPUT fi + if [[ '${{ inputs.static-suffix }}' == '-static' ]]; then + echo "static-hotspot-problemlist-path=`pwd`/test/hotspot/jtreg/ProblemList-StaticJdk.txt" >> $GITHUB_OUTPUT + echo "static-jdk-problemlist-path=`pwd`/test/jdk/ProblemList-StaticJdk.txt" >> $GITHUB_OUTPUT + echo "static-langtools-problemlist-path=`pwd`/test/langtools/ProblemList-StaticJdk.txt" >> $GITHUB_OUTPUT + echo "static-lib-test-problemlist-path=`pwd`/test/lib-test/ProblemList-StaticJdk.txt" >> $GITHUB_OUTPUT + fi + + - name: 'Set Extra Options' + id: extra-options + run: | + if [[ '${{ inputs.static-suffix }}' == '-static' ]]; then + echo "test-jdk=JDK_UNDER_TEST=${{ steps.bundles.outputs.static-jdk-path }}" >> $GITHUB_OUTPUT + echo "compile-jdk=JDK_FOR_COMPILE=${{ steps.bundles.outputs.jdk-path }}" >> $GITHUB_OUTPUT + echo "extra-problem-lists=EXTRA_PROBLEM_LISTS=${{ steps.path.outputs.static-hotspot-problemlist-path }}%20${{ steps.path.outputs.static-jdk-problemlist-path }}%20${{ steps.path.outputs.static-langtools-problemlist-path }}%20${{ steps.path.outputs.static-lib-test-problemlist-path }}" >> $GITHUB_OUTPUT + fi - name: 'Run tests' id: run-tests @@ -171,7 +193,9 @@ jobs: JDK_IMAGE_DIR=${{ steps.bundles.outputs.jdk-path }} SYMBOLS_IMAGE_DIR=${{ steps.bundles.outputs.symbols-path }} TEST_IMAGE_DIR=${{ steps.bundles.outputs.tests-path }} - JTREG='JAVA_OPTIONS=-XX:-CreateCoredumpOnCrash;VERBOSE=fail,error,time;KEYWORDS=!headful' + ${{ steps.extra-options.outputs.test-jdk }} + ${{ steps.extra-options.outputs.compile-jdk }} + JTREG='JAVA_OPTIONS=-XX:-CreateCoredumpOnCrash;VERBOSE=fail,error,time;KEYWORDS=!headful;${{ steps.extra-options.outputs.extra-problem-lists }}' && bash ./.github/scripts/gen-test-summary.sh "$GITHUB_STEP_SUMMARY" "$GITHUB_OUTPUT" env: PATH: ${{ steps.path.outputs.value }} @@ -204,7 +228,7 @@ jobs: echo '::warning ::Missing test-support directory' fi - artifact_name="results-${{ inputs.platform }}-$(echo ${{ matrix.test-name }} | tr '/ ' '__')" + artifact_name="results-${{ inputs.platform }}-$(echo ${{ matrix.test-name }}${{ inputs.static-suffix }} | tr '/ ' '__')" echo "artifact-name=$artifact_name" >> $GITHUB_OUTPUT if: always() diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4a338235c1d..98ede25b88d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,3 @@ # Contributing to the JDK -Please see the [OpenJDK Developers’ Guide](https://openjdk.org/guide/). +Please see the [OpenJDK Developers' Guide](https://openjdk.org/guide/). diff --git a/doc/building.html b/doc/building.html index 7157848f561..da8465bc532 100644 --- a/doc/building.html +++ b/doc/building.html @@ -282,9 +282,34 @@ possible, use an SSD. The build process is very disk intensive, and having slow disk access will significantly increase build times. If you need to use a network share for the source code, see below for suggestions on how to keep the build artifacts on a local disk.

-
  • On Windows, if using Cygwin, extra care -must be taken to make sure the environment is consistent. It is -recommended that you follow this procedure:

    +
  • UTF-8 support is needed to compile the JDK. On Unix systems, this +typically means that the C.UTF-8 or +en_US.UTF-8 locale needs to be available. For Windows +users, please see the section on Locale +Requirements below.

  • +
  • On Windows, extra care must be taken to have a smooth building +experience:

    +
  • - -

    Failure to follow this procedure might result in hard-to-debug build -problems.

    +

    Build Hardware Requirements

    The JDK is a massive project, and require machines ranging from @@ -376,7 +402,7 @@ to date at the time of writing.

    macOS -macOS 13.x (Ventura) +macOS 14.x Windows @@ -513,8 +539,8 @@ this makes it difficult for a project such as the JDK to keep pace with a continuously updated machine running macOS. See the section on Apple Xcode on some strategies to deal with this.

    -

    It is recommended that you use at least macOS 13 (Ventura) and Xcode -14, but earlier versions may also work.

    +

    It is recommended that you use at least macOS 14 and Xcode 15.4, but +earlier versions may also work.

    The standard macOS environment contains the basic tooling needed to build, but for external libraries a package manager is recommended. The JDK uses homebrew in the examples, but @@ -586,15 +612,15 @@ to compile successfully without issues.

    Linux -gcc 13.2.0 +gcc 14.2.0 macOS -Apple Xcode 14.3.1 (using clang 14.0.3) +Apple Xcode 15.4 (using clang 15.0.0) Windows -Microsoft Visual Studio 2022 version 17.6.5 +Microsoft Visual Studio 2022 version 17.13.2 @@ -604,7 +630,7 @@ standard for C, and C++14 for C++.

    The minimum accepted version of gcc is 10.0. Older versions will not be accepted by configure.

    The JDK is currently known to compile successfully with gcc version -13.2 or newer.

    +14.2 or newer.

    In general, any version between these two should be usable.

    clang

    The minimum accepted version of clang is 13. Older versions will not @@ -1722,6 +1748,20 @@ packages in the sysroot, configure the build with --with-devkit=$DEVKIT \ --with-sysroot=$SYSROOT

    and run make normally.

    +

    Building for Windows AArch64

    +

    The Visual Studio Build Tools can be used for building the JDK +without a full Visual Studio installation. To set up the Visual Studio +2022 Build Tools on a Windows AArch64 machine for a native build, launch +the installer as follows in a Windows command prompt:

    +
    vs_buildtools.exe --quiet --wait --norestart --nocache ^
    +--installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" ^
    +--add Microsoft.VisualStudio.Component.VC.CoreBuildTools ^
    +--add Microsoft.VisualStudio.Component.VC.Tools.ARM64 ^
    +--add Microsoft.VisualStudio.Component.Windows11SDK.22621
    +

    To generate Windows AArch64 builds using Cygwin on a Windows x64 +machine, you must set the proper target platform by adding +--openjdk-target=aarch64-unknown-cygwin to your configure +command line.

    Build Performance

    Building the JDK requires a lot of horsepower. Some of the build tools can be adjusted to utilize more or less of resources such as diff --git a/doc/building.md b/doc/building.md index 04db6e94d1c..1a9fe6b2e78 100644 --- a/doc/building.md +++ b/doc/building.md @@ -83,19 +83,44 @@ on where and how to check out the source code. for the source code, see below for suggestions on how to keep the build artifacts on a local disk. -* On Windows, if using [Cygwin](#cygwin), extra care must be taken to make sure - the environment is consistent. It is recommended that you follow this - procedure: +* UTF-8 support is needed to compile the JDK. On Unix systems, this typically + means that the `C.UTF-8` or `en_US.UTF-8` locale needs to be available. For + Windows users, please see the section on [Locale + Requirements](#locale-requirements) below. - * Create the directory that is going to contain the top directory of the JDK - clone by using the `mkdir` command in the Cygwin bash shell. That is, do - *not* create it using Windows Explorer. This will ensure that it will have - proper Cygwin attributes, and that it's children will inherit those - attributes. +* On Windows, extra care must be taken to have a smooth building experience: - * Do not put the JDK clone in a path under your Cygwin home directory. This - is especially important if your user name contains spaces and/or mixed - upper and lower case letters. + * Make sure that all relevant paths have short names. Short names are used by + the build system to create space-free alternative paths. Short name + creation is enabled per volume. The default setting can be checked with the + command: `fsutil 8dot3name query`. If short name creation was turned off + when a directory was created, it will not have a short name. Whether a + short name exists can be checked by running `dir /X` in the containing + directory (in cmd.exe). If a short path is present you should see something + like 'ASDF~1' being displayed in one of the columns of the ouput. If a + directory is missing a short name, the safest way to get one is to enable + short names for that particular volume with `fsutil 8dot3name set : 0` (note that you need to run as administrator for this), and then + re-create the particular directory. A short name should be generated + automatically then. Another option is to manually assign a short name to + the directory using `fsutil file setShortName `. + + * If using [Cygwin](#cygwin), you must make sure the file permissions and + attributes between Windows and Cygwin are consistent. It is recommended + that you follow this procedure: + + * Create the directory that is going to contain the top directory of the + JDK clone by using the `mkdir` command in the Cygwin bash shell. That is, + do *not* create it using Windows Explorer. This will ensure that it will + have proper Cygwin attributes, and that it's children will inherit those + attributes. + + * Do not put the JDK clone in a path under your Cygwin home directory. This + is especially important if your user name contains spaces and/or mixed + upper and lower case letters. + + Failure to follow these procedures might result in hard-to-debug build + problems. * You need to install a git client. You have two choices, Cygwin git or Git for Windows. Unfortunately there are pros and cons with each choice. @@ -113,9 +138,6 @@ on where and how to check out the source code. make sure you set `core.autocrlf` to `false` (this is asked during installation). - Failure to follow this procedure might result in hard-to-debug build - problems. - ## Build Hardware Requirements The JDK is a massive project, and require machines ranging from decent to @@ -175,7 +197,7 @@ time of writing. | ----------------- | ---------------------------------- | | Linux/x64 | Oracle Enterprise Linux 6.4 / 8.x | | Linux/aarch64 | Oracle Enterprise Linux 7.6 / 8.x | -| macOS | macOS 13.x (Ventura) | +| macOS | macOS 14.x | | Windows | Windows Server 2016 | The double version numbers for Linux are due to the hybrid model used at @@ -327,7 +349,7 @@ difficult for a project such as the JDK to keep pace with a continuously updated machine running macOS. See the section on [Apple Xcode](#apple-xcode) on some strategies to deal with this. -It is recommended that you use at least macOS 13 (Ventura) and Xcode 14, but +It is recommended that you use at least macOS 14 and Xcode 15.4, but earlier versions may also work. The standard macOS environment contains the basic tooling needed to build, but @@ -390,11 +412,11 @@ possible to compile the JDK with both older and newer versions, but the closer you stay to this list, the more likely you are to compile successfully without issues. -| Operating system | Toolchain version | -| ------------------ | ------------------------------------------- | -| Linux | gcc 13.2.0 | -| macOS | Apple Xcode 14.3.1 (using clang 14.0.3) | -| Windows | Microsoft Visual Studio 2022 version 17.6.5 | +| Operating system | Toolchain version | +| ------------------ | -------------------------------------------- | +| Linux | gcc 14.2.0 | +| macOS | Apple Xcode 15.4 (using clang 15.0.0) | +| Windows | Microsoft Visual Studio 2022 version 17.13.2 | All compilers are expected to be able to handle the C11 language standard for C, and C++14 for C++. @@ -404,7 +426,7 @@ C, and C++14 for C++. The minimum accepted version of gcc is 10.0. Older versions will not be accepted by `configure`. -The JDK is currently known to compile successfully with gcc version 13.2 or +The JDK is currently known to compile successfully with gcc version 14.2 or newer. In general, any version between these two should be usable. @@ -1457,6 +1479,24 @@ sh ./configure --with-jvm-variants=server \ and run `make` normally. +#### Building for Windows AArch64 +The Visual Studio Build Tools can be used for building the JDK without a full +Visual Studio installation. To set up the Visual Studio 2022 Build Tools on a +Windows AArch64 machine for a native build, launch the installer as follows +in a Windows command prompt: + +``` +vs_buildtools.exe --quiet --wait --norestart --nocache ^ +--installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" ^ +--add Microsoft.VisualStudio.Component.VC.CoreBuildTools ^ +--add Microsoft.VisualStudio.Component.VC.Tools.ARM64 ^ +--add Microsoft.VisualStudio.Component.Windows11SDK.22621 +``` + +To generate Windows AArch64 builds using Cygwin on a Windows x64 machine, +you must set the proper target platform by adding +`--openjdk-target=aarch64-unknown-cygwin` to your configure command line. + ## Build Performance Building the JDK requires a lot of horsepower. Some of the build tools can be diff --git a/doc/hotspot-style.html b/doc/hotspot-style.html index 7e7f4de3629..d4c06fbd6bd 100644 --- a/doc/hotspot-style.html +++ b/doc/hotspot-style.html @@ -32,11 +32,12 @@