@@ -750,6 +750,18 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
750750 $1 _WARNING_CFLAGS_JVM="-Wno-format-zero-length -Wtype-limits -Wuninitialized"
751751 fi
752752
753+ if test "x$TOOLCHAIN_TYPE" = xmicrosoft && test "x$ENABLE_REPRODUCIBLE_BUILD" = xtrue; then
754+ # Enabling deterministic creates warnings if __DATE__ or __TIME__ are
755+ # used, and since we are, silence that warning.
756+ REPRODUCIBLE_CFLAGS="-experimental:deterministic -wd5048"
757+ FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ ${REPRODUCIBLE_CFLAGS}] ,
758+ PREFIX: $3 ,
759+ IF_FALSE: [
760+ REPRODUCIBLE_CFLAGS=
761+ ]
762+ )
763+ fi
764+
753765 # Prevent the __FILE__ macro from generating absolute paths into the built
754766 # binaries. Depending on toolchain, different mitigations are possible.
755767 # * GCC and Clang of new enough versions have -fmacro-prefix-map.
@@ -768,6 +780,30 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
768780 FILE_MACRO_CFLAGS=
769781 ]
770782 )
783+ elif test "x$TOOLCHAIN_TYPE" = xmicrosoft &&
784+ test "x$ENABLE_REPRODUCIBLE_BUILD" = xtrue; then
785+ # There is a known issue with the pathmap if the mapping is made to the
786+ # empty string. Add a minimal string "s" as prefix to work around this.
787+ workspace_root_win="${WORKSPACE_ROOT%/}"
788+ UTIL_REWRITE_AS_WINDOWS_MIXED_PATH([ workspace_root_win] )
789+ # PATHMAP_FLAGS is also added to LDFLAGS in flags-ldflags.m4.
790+ PATHMAP_FLAGS="-pathmap:${workspace_root_win//\//\\\\}=s \
791+ -pathmap:${workspace_root_win}=s"
792+ FILE_MACRO_CFLAGS="$PATHMAP_FLAGS"
793+ FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [ ${FILE_MACRO_CFLAGS}] ,
794+ PREFIX: $3 ,
795+ IF_FALSE: [
796+ PATHMAP_FLAGS=
797+ FILE_MACRO_CFLAGS=
798+ ]
799+ )
800+ fi
801+
802+ AC_MSG_CHECKING ( [ how to prevent absolute paths in output] )
803+ if test "x$FILE_MACRO_CFLAGS" != x; then
804+ AC_MSG_RESULT ( [ using compiler options] )
805+ else
806+ AC_MSG_RESULT ( [ using relative paths] )
771807 fi
772808 fi
773809 AC_SUBST ( FILE_MACRO_CFLAGS )
@@ -776,12 +812,13 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP],
776812 CFLAGS_JVM_COMMON="$ALWAYS_CFLAGS_JVM $ALWAYS_DEFINES_JVM \
777813 $TOOLCHAIN_CFLAGS_JVM ${$1 _TOOLCHAIN_CFLAGS_JVM} \
778814 $OS_CFLAGS $OS_CFLAGS_JVM $CFLAGS_OS_DEF_JVM $DEBUG_CFLAGS_JVM \
779- $WARNING_CFLAGS $WARNING_CFLAGS_JVM $JVM_PICFLAG $FILE_MACRO_CFLAGS"
815+ $WARNING_CFLAGS $WARNING_CFLAGS_JVM $JVM_PICFLAG $FILE_MACRO_CFLAGS \
816+ $REPRODUCIBLE_CFLAGS"
780817
781818 CFLAGS_JDK_COMMON="$ALWAYS_CFLAGS_JDK $ALWAYS_DEFINES_JDK $TOOLCHAIN_CFLAGS_JDK \
782819 $OS_CFLAGS $CFLAGS_OS_DEF_JDK $DEBUG_CFLAGS_JDK $DEBUG_OPTIONS_FLAGS_JDK \
783820 $WARNING_CFLAGS $WARNING_CFLAGS_JDK $DEBUG_SYMBOLS_CFLAGS_JDK \
784- $FILE_MACRO_CFLAGS"
821+ $FILE_MACRO_CFLAGS $REPRODUCIBLE_CFLAGS "
785822
786823 # Use ${$2 EXTRA_CFLAGS} to block EXTRA_CFLAGS to be added to build flags.
787824 # (Currently we don't have any OPENJDK_BUILD_EXTRA_CFLAGS, but that might
0 commit comments