On Sat, 3 Apr 2021 01:49:47 GMT, John Neffenger <jgn...@openjdk.org> wrote:
>>> Silly question, is the difference with Windows just the nature of the >>> native support on each platform (Unix based vs Windows) and libraries used >>> as part of that? >> >> That's a good question. I'm hoping the answer is no. So far, the difference >> with Windows is the linker. The other systems use the GNU linker where it's >> enough to sort the input object files. The Microsoft linker, though, creates >> reproducible builds with the flag `/experimental:deterministic` (or >> `-experimental:deterministic`). So on Windows, we just need to figure out >> where to put the flag. I'm finding that to be a challenge for the WebKit >> library. > >> /contributor add ... > > @bmwiedemann I added you as co-author of pull request #422, which is my > continuation of your pull request #99 from last year. This pull request #446 > temporarily includes our co-authored commit, but those changes will disappear > when #422 is integrated and I merge the master branch into this one. Sorry > for the confusion. > It would be better to add the flag in `libxml/CMakeLists.txt` or in > `build.gradle` via `cmakeArgs`. Thank you, Arun, for that helpful suggestion. I updated this pull request for the WebKit library on Windows and ran my tests again, as described below. I saved the output of the first build in the `build1.log` file and the `build1` directory: $ export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) $ bash gradlew -PCONF=Release -PPROMOTED_BUILD_NUMBER=5 \ -PHUDSON_BUILD_NUMBER=101 -PHUDSON_JOB_NAME=jfx -PCOMPILE_WEBKIT=true \ -PCOMPILE_MEDIA=true -PBUILD_LIBAV_STUBS=true sdk jmods javadoc \ | tee build1.log $ mv build build1 Then I ran another clean build, this time saving the output in the `build2.log` file and the `build2` directory: $ bash gradlew cleanAll $ bash gradlew -PCONF=Release -PPROMOTED_BUILD_NUMBER=5 \ -PHUDSON_BUILD_NUMBER=101 -PHUDSON_JOB_NAME=jfx -PCOMPILE_WEBKIT=true \ -PCOMPILE_MEDIA=true -PBUILD_LIBAV_STUBS=true sdk jmods javadoc \ | tee build2.log $ mv build build2 I copied the builds to my Linux workstation and ran the following command on the JMOD files for each pair of builds: $ strip-nondeterminism -v -T $SOURCE_DATE_EPOCH build?/jmods/*.jmod Normalizing build1/jmods/javafx.base.jmod Normalizing build1/jmods/javafx.controls.jmod Normalizing build1/jmods/javafx.fxml.jmod Normalizing build1/jmods/javafx.graphics.jmod Normalizing build1/jmods/javafx.media.jmod Normalizing build1/jmods/javafx.swing.jmod Normalizing build1/jmods/javafx.web.jmod Normalizing build2/jmods/javafx.base.jmod Normalizing build2/jmods/javafx.controls.jmod Normalizing build2/jmods/javafx.fxml.jmod Normalizing build2/jmods/javafx.graphics.jmod Normalizing build2/jmods/javafx.media.jmod Normalizing build2/jmods/javafx.swing.jmod Normalizing build2/jmods/javafx.web.jmod After normalizing the JMOD files, the output of the two builds on each of the three operating systems is identical: $ diff -qr linux/build1 linux/build2 $ diff -qr macos/build1 macos/build2 $ diff -qr win10/build1 win10/build2 $ The following commands show the count of identical output files for each system: $ diff -sr linux/build1 linux/build2 | wc -l 10676 $ diff -sr macos/build1 macos/build2 | wc -l 10680 $ diff -sr win10/build1 win10/build2 | wc -l 10633 Considering the time it takes to run all these builds, I'd like to take a week to get feedback and mull over the code changes before anyone spends a lot of time testing. I wish the changes for Windows were not so scattered about, for example. ------------- PR: https://git.openjdk.java.net/jfx/pull/446