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/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-unit-tests.html b/doc/hotspot-unit-tests.html index fcd4a93f8e485..b3700abb3ac27 100644 --- a/doc/hotspot-unit-tests.html +++ b/doc/hotspot-unit-tests.html @@ -189,7 +189,7 @@

    Nearness

    Prefer having checks inside test code.

    Not only does having test logic outside, e.g. verification method, depending on asserts in product code contradict with several items above -but also decreases test’s readability and stability. It is much easier +but also decreases test's readability and stability. It is much easier to understand that a test is testing when all testing logic is located inside a test or nearby in shared test libraries. As a rule of thumb, the closer a check to a test, the better.

    @@ -198,7 +198,7 @@

    Several checks

    Prefer EXPECT over ASSERT if possible.

    This is related to the informativeness property of tests, information for other checks can help to better -localize a defect’s root-cause. One should use ASSERT if it +localize a defect's root-cause. One should use ASSERT if it is impossible to continue test execution or if it does not make much sense. Later in the text, EXPECT forms will be used to refer to both ASSERT/EXPECT.

    @@ -235,7 +235,7 @@

    Floating-point comparison

    eps.

    C string comparison

    Use string special macros for C strings comparisons.

    -

    EXPECT_EQ just compares pointers’ values, which is +

    EXPECT_EQ just compares pointers' values, which is hardly what one wants comparing C strings. GoogleTest provides EXPECT_STREQ and EXPECT_STRNE macros to compare C string contents. There are also case-insensitive versions @@ -293,7 +293,7 @@

    Test group names

    This naming scheme helps to find tests, filter them and simplifies test failure analysis. For example, class Foo - test group Foo, compiler logging subsystem - test group -CompilerLogging, G1 GC — test group G1GC, and +CompilerLogging, G1 GC - test group G1GC, and so forth.

    Filename

    A test file must have test_ prefix and .cpp @@ -345,7 +345,7 @@

    Fixture classes

    Friend classes

    All test purpose friends should have either Test or Testable suffix.

    -

    It greatly simplifies understanding of friendship’s purpose and +

    It greatly simplifies understanding of friendship's purpose and allows statically check that private members are not exposed unexpectedly. Having FooTest as a friend of Foo without any comments will be understood as a necessary @@ -435,7 +435,7 @@

    Test-specific flags

    Flag restoring

    Restore changed flags.

    It is quite common for tests to configure JVM in a certain way -changing flags’ values. GoogleTest provides two ways to set up +changing flags' values. GoogleTest provides two ways to set up environment before a test and restore it afterward: using either constructor and destructor or SetUp and TearDown functions. Both ways require to use a test fixture @@ -444,7 +444,7 @@

    Flag restoring

    be used in such cases to restore/set values.

    Caveats: