On Fri, 7 Apr 2023 06:22:05 GMT, John Neffenger <jgn...@openjdk.org> wrote:
>> This pull request allows for reproducible builds of JavaFX on Linux, macOS, >> and Windows by defining the `SOURCE_DATE_EPOCH` environment variable. For >> example, the following commands create a reproducible build: >> >> >> $ export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) >> $ bash gradlew sdk jmods javadoc >> $ strip-nondeterminism -v -T $SOURCE_DATE_EPOCH build/jmods/*.jmod >> >> >> The three commands: >> >> 1. set the build timestamp to the date of the latest source code change, >> 2. build the JavaFX SDK libraries, JMOD archives, and API documentation, and >> 3. recreate the JMOD files with stable file modification times and ordering. >> >> The third command won't be necessary once Gradle can build the JMOD archives >> or the `jmod` tool itself has the required support. For more information on >> the environment variable, see the [`SOURCE_DATE_EPOCH`][1] page. For more >> information on the command to recreate the JMOD files, see the >> [`strip-nondeterminism`][2] repository. I'd like to propose that we allow >> for reproducible builds in JavaFX 17 and consider making them the default in >> JavaFX 18. >> >> #### Fixes >> >> There are at least four sources of non-determinism in the JavaFX builds: >> >> 1. Build timestamp >> >> The class `com.sun.javafx.runtime.VersionInfo` in the JavaFX Base module >> stores the time of the build. Furthermore, for builds that don't run on the >> Hudson continuous integration tool, the class adds the build time to the >> system property `javafx.runtime.version`. >> >> 2. Modification times >> >> The JAR, JMOD, and ZIP archives store the modification time of each file. >> >> 3. File ordering >> >> The JAR, JMOD, and ZIP archives store their files in the order returned >> by the file system. The native shared libraries also store their object >> files in the order returned by the file system. Most file systems, though, >> do not guarantee the order of a directory's file listing. >> >> 4. Build path >> >> The class `com.sun.javafx.css.parser.Css2Bin` in the JavaFX Graphics >> module stores the absolute path of its `.css` input file in the >> corresponding `.bss` output file, which is then included in the JavaFX >> Controls module. >> >> This pull request modifies the Gradle and Groovy build files to fix the >> first three sources of non-determinism. A later pull request can modify the >> Java files to fix the fourth. >> >> [1]: https://reproducible-builds.org/docs/source-date-epoch/ >> [2]: https://salsa.debian.org/reproducible-builds/strip-nondeterminism > > John Neffenger has updated the pull request incrementally with one additional > commit since the last revision: > > Revert format of timestamp in version OPT field I solved the build failure occurring on Windows by downgrading to Visual Studio 2022 [Build Tools version 17.1.0][1], dated February 15, 2022, from the prior version 17.5.4 that I was using. I opened a bug report, linked below, as a *heads-up* for when we upgrade Visual Studio. I'm now using the following versions of the tools: #### Toolchains * **Linux:** gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 * **macOS:** Command Line Tools for Xcode 14.2 version 14.2.0.0.1.1668646533 * **Windows:** Visual Studio Build Tools 2022 version 17.1.0, build number 17.1.32210.238 #### Build Tools * **JDK:** OpenJDK Runtime Environment (build 19.0.2+7-44) * **Ant:** Apache Ant(TM) version 1.10.13 compiled on January 4 2023 * **CMake:** cmake version 3.26.3 My latest test results are: | System | Develop | Actions | Release | Notes | |:-------:|:-------:|:-------:|:-------:| ------------------------- | | Linux | ✔ | ✔ | ❌ | `libjfxwebkit.so` differs | | macOS | ✔ | ✔ | ✔ | Just luck, I suspect. | | Windows | ✔ | ✔ | ❌ | `jfxwebkit.dll` differs | where: * ✔ means that all of the files in the `build` directory were identical between the two consecutive builds, and the unit tests ran successfully, while * ❌ means that there were differences in the native libraries between the two builds. I created bug reports to track each of the remaining potential problems: * [JDK-8306884][2]: Building WebKit on Linux is not deterministic * [JDK-8306885][3]: Building WebKit on Windows is not deterministic * [JDK-8306886][4]: Building macOS libraries can be non-deterministic * [JDK-8306887][5]: Error C2327 while compiling WebKit on Windows [1]: https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-history#fixed-version-bootstrappers [2]: https://bugs.openjdk.org/browse/JDK-8306884 [3]: https://bugs.openjdk.org/browse/JDK-8306885 [4]: https://bugs.openjdk.org/browse/JDK-8306886 [5]: https://bugs.openjdk.org/browse/JDK-8306887 ------------- PR Comment: https://git.openjdk.org/jfx/pull/446#issuecomment-1522741112