diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000..8cf0bd8d62af0 --- /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 ebb586628c38b..5a18aa21d98e7 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 252105f29fddf..6f2c2ce02180c 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/upload-bundles/action.yml b/.github/actions/upload-bundles/action.yml index 4e974ae58ba6b..30f4ac03c1e0c 100644 --- a/.github/actions/upload-bundles/action.yml +++ b/.github/actions/upload-bundles/action.yml @@ -32,6 +32,9 @@ inputs: debug-suffix: description: 'File name suffix denoting debug level, possibly empty' required: false + bundle-suffix: + description: 'Bundle name suffix, possibly empty' + required: false runs: using: composite @@ -75,7 +78,7 @@ runs: - name: 'Upload bundles artifact' uses: actions/upload-artifact@v4 with: - name: bundles-${{ inputs.platform }}${{ inputs.debug-suffix }} + name: bundles-${{ inputs.platform }}${{ inputs.debug-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 b1d4278f8b469..101668b2bd520 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -61,6 +61,9 @@ on: make-arguments: required: false type: string + bundle-suffix: + required: false + type: string jobs: build-linux: @@ -71,10 +74,6 @@ jobs: fail-fast: false matrix: debug-level: ${{ fromJSON(inputs.debug-levels) }} - include: - - debug-level: debug - flags: --with-debug-level=fastdebug - suffix: -debug steps: - name: 'Checkout the JDK source' @@ -118,7 +117,7 @@ jobs: run: > bash configure --with-conf-name=${{ inputs.platform }} - ${{ matrix.flags }} + ${{ matrix.debug-level == 'debug' && '--with-debug-level=fastdebug' || '' }} --with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA} --with-boot-jdk=${{ steps.bootjdk.outputs.path }} --with-jtreg=${{ steps.jtreg.outputs.path }} @@ -133,17 +132,14 @@ jobs: - name: 'Build' id: build uses: ./.github/actions/do-build - env: - # Only build static-libs-bundles for release builds. - # For debug builds, building static-libs often exceeds disk space. - STATIC_LIBS: ${{ matrix.debug-level == 'release' && 'static-libs-bundles' }} with: - make-target: '${{ inputs.make-target }} ${STATIC_LIBS} ${{ inputs.make-arguments }}' + make-target: '${{ inputs.make-target }} ${{ inputs.make-arguments }}' platform: ${{ inputs.platform }} - debug-suffix: '${{ matrix.suffix }}' + debug-suffix: "${{ matrix.debug-level == 'debug' && '-debug' || '' }}" - name: 'Upload bundles' uses: ./.github/actions/upload-bundles with: platform: ${{ inputs.platform }} - debug-suffix: '${{ matrix.suffix }}' + debug-suffix: "${{ matrix.debug-level == 'debug' && '-debug' || '' }}" + bundle-suffix: ${{ inputs.bundle-suffix }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3ea07501477f8..8dce1d214dc1c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -225,6 +225,43 @@ jobs: make-arguments: ${{ github.event.inputs.make-arguments }} if: needs.prepare.outputs.linux-x64-variants == 'true' + build-linux-x64-static: + name: linux-x64-static + needs: prepare + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x64 + make-target: 'static-jdk-image' + # 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" + if: needs.prepare.outputs.linux-x64 == 'true' + + build-linux-x64-static-libs: + name: linux-x64-static-libs + needs: prepare + uses: ./.github/workflows/build-linux.yml + with: + platform: linux-x64 + make-target: 'static-libs-bundles' + # Only build static-libs-bundles for release builds. + # For debug builds, building static-libs often exceeds disk space. + debug-levels: '[ "release" ]' + gcc-major-version: '10' + configure-arguments: ${{ github.event.inputs.configure-arguments }} + make-arguments: ${{ github.event.inputs.make-arguments }} + # Upload static libs bundles separately to avoid interference with normal linux-x64 bundle. + # This bundle is not used by testing jobs, but downstreams use it to check that + # dependent projects, e.g. libgraal, builds fine. + bundle-suffix: "-static-libs" + if: needs.prepare.outputs.linux-x64-variants == 'true' + build-linux-cross-compile: name: linux-cross-compile needs: prepare diff --git a/.gitignore b/.gitignore index b57addfccc9ab..2d82e0d943c11 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ NashornProfile.txt /.cache /.gdbinit /.lldbinit +**/core.[0-9]* diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4a338235c1d22..98ede25b88df5 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 7157848f561ae..fde6cde4c3277 100644 --- a/doc/building.html +++ b/doc/building.html @@ -282,6 +282,34 @@

Special Considerations

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, extra care must be taken to have a smooth building +experience:

    + +

    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.

    @@ -311,9 +342,7 @@

    Special Considerations

    line ending problems, 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 @@ -376,7 +405,7 @@

    Operating System macOS -macOS 13.x (Ventura) +macOS 14.x Windows @@ -513,8 +542,8 @@

    macOS

    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 +615,15 @@

    Native Compiler 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 +633,7 @@

    gcc

    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 +1751,20 @@

    Building for musl

    --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 04db6e94d1c12..1a9fe6b2e7872 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: - - * 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. +* 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. + +* On Windows, extra care must be taken to have a smooth building experience: + + * 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 9f26fc6636205..7e7f4de362982 100644 --- a/doc/hotspot-style.html +++ b/doc/hotspot-style.html @@ -207,23 +207,38 @@

    Source Files

    JTReg Tests