diff --git a/make/CreateJmods.gmk b/make/CreateJmods.gmk index b1392711484..8fa0fd00ff6 100644 --- a/make/CreateJmods.gmk +++ b/make/CreateJmods.gmk @@ -121,11 +121,21 @@ else # not java.base ifeq ($(OPENJDK_TARGET_OS), windows) # Only java.base needs to include the MSVC*_DLLs. Make sure no other module # tries to include them (typically imported ones). - ifneq ($(wildcard $(LIBS_DIR)/$(notdir $(MSVCR_DLL))), ) - JMOD_FLAGS += --exclude '$(notdir $(MSVCR_DLL))' + ifneq ($(MSVCR_DLL), ) + ifneq ($(wildcard $(LIBS_DIR)/$(notdir $(MSVCR_DLL))), ) + JMOD_FLAGS += --exclude '$(notdir $(MSVCR_DLL))' + endif endif - ifneq ($(wildcard $(LIBS_DIR)/$(notdir $(MSVCP_DLL))), ) - JMOD_FLAGS += --exclude '$(notdir $(MSVCP_DLL))' + ifneq ($(MSVCP_DLL), ) + ifneq ($(wildcard $(LIBS_DIR)/$(notdir $(MSVCP_DLL))), ) + JMOD_FLAGS += --exclude '$(notdir $(MSVCP_DLL))' + endif + endif + ifneq ($(UCRT_DLL_DIR), ) + UCRT_DLL_FILES := $(notdir $(wildcard $(UCRT_DLL_DIR)/*.dll)) + ifneq ($(wildcard $(LIBS_DIR)/$(firstword $(UCRT_DLL_FILES))), ) + JMOD_FLAGS += $(patsubst %, --exclude '%', $(UCRT_DLL_FILES)) + endif endif endif endif diff --git a/make/autoconf/basics.m4 b/make/autoconf/basics.m4 index 0033447ab3b..c26e9cee977 100644 --- a/make/autoconf/basics.m4 +++ b/make/autoconf/basics.m4 @@ -671,6 +671,8 @@ AC_DEFUN_ONCE([BASIC_SETUP_DEVKIT], BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCR_DLL]) # Corresponds to --with-msvcp-dll BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_MSVCP_DLL]) + # Corresponds to --with-ucrt-dll-dir + BASIC_EVAL_DEVKIT_VARIABLE([DEVKIT_UCRT_DLL_DIR]) fi AC_MSG_CHECKING([for devkit]) diff --git a/make/autoconf/spec.gmk.in b/make/autoconf/spec.gmk.in index 9acb2da0def..4e437265604 100644 --- a/make/autoconf/spec.gmk.in +++ b/make/autoconf/spec.gmk.in @@ -736,6 +736,7 @@ LIBZ_LIBS:=@LIBZ_LIBS@ LIBZIP_CAN_USE_MMAP:=@LIBZIP_CAN_USE_MMAP@ MSVCR_DLL:=@MSVCR_DLL@ MSVCP_DLL:=@MSVCP_DLL@ +UCRT_DLL_DIR:=@UCRT_DLL_DIR@ STLPORT_LIB:=@STLPORT_LIB@ #################################################### diff --git a/make/autoconf/toolchain_windows.m4 b/make/autoconf/toolchain_windows.m4 index ea193b0b5eb..77905240f78 100644 --- a/make/autoconf/toolchain_windows.m4 +++ b/make/autoconf/toolchain_windows.m4 @@ -76,6 +76,7 @@ VS_VERSION_INTERNAL_2017=141 VS_MSVCR_2017=vcruntime140.dll VS_MSVCP_2017=msvcp140.dll VS_ENVVAR_2017="VS150COMNTOOLS" +VS_USE_UCRT_2017="true" VS_VS_INSTALLDIR_2017="Microsoft Visual Studio/2017" VS_EDITIONS_2017="BuildTools Community Professional Enterprise" VS_SDK_INSTALLDIR_2017= @@ -264,6 +265,7 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO], eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}" eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}" eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}" + eval USE_UCRT="\${VS_USE_UCRT_${VS_VERSION}}" eval PLATFORM_TOOLSET="\${VS_VS_PLATFORM_NAME_${VS_VERSION}}" VS_PATH="$TOOLCHAIN_PATH:$PATH" @@ -309,6 +311,7 @@ AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO], eval VS_VERSION_INTERNAL="\${VS_VERSION_INTERNAL_${VS_VERSION}}" eval MSVCR_NAME="\${VS_MSVCR_${VS_VERSION}}" eval MSVCP_NAME="\${VS_MSVCP_${VS_VERSION}}" + eval USE_UCRT="\${VS_USE_UCRT_${VS_VERSION}}" # The rest of the variables are already evaled while probing AC_MSG_NOTICE([Found $VS_DESCRIPTION]) break @@ -432,8 +435,11 @@ AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV], VS_INCLUDE=`$ECHO "$VS_INCLUDE" | $SED -e 's/\\\\*;* *$//'` VS_LIB=`$ECHO "$VS_LIB" | $SED 's/\\\\*;* *$//'` VCINSTALLDIR=`$ECHO "$VCINSTALLDIR" | $SED 's/\\\\* *$//'` - WindowsSDKDir=`$ECHO "$WindowsSDKDir" | $SED 's/\\\\* *$//'` + WindowsSdkDir=`$ECHO "$WindowsSdkDir" | $SED 's/\\\\* *$//'` WINDOWSSDKDIR=`$ECHO "$WINDOWSSDKDIR" | $SED 's/\\\\* *$//'` + if test -z "$WINDOWSSDKDIR"; then + WINDOWSSDKDIR="$WindowsSdkDir" + fi # Remove any paths containing # (typically F#) as that messes up make. This # is needed if visual studio was installed with F# support. VS_PATH=`$ECHO "$VS_PATH" | $SED 's/[[^:#]]*#[^:]*://g'` @@ -539,7 +545,7 @@ AC_DEFUN([TOOLCHAIN_SETUP_MSVC_DLL], if test "x$MSVC_DLL" = x; then if test "x$VCINSTALLDIR" != x; then CYGWIN_VC_INSTALL_DIR="$VCINSTALLDIR" - BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(CYGWIN_VC_INSTALL_DIR) + BASIC_FIXUP_PATH(CYGWIN_VC_INSTALL_DIR) if test "$VS_VERSION" -lt 2017; then # Probe: Using well-known location from Visual Studio 12.0 and older if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then @@ -673,4 +679,41 @@ AC_DEFUN([TOOLCHAIN_SETUP_VS_RUNTIME_DLLS], fi AC_SUBST(MSVCP_DLL) fi + + AC_ARG_WITH(ucrt-dll-dir, [AS_HELP_STRING([--with-ucrt-dll-dir], + [path to Microsoft Windows Kit UCRT DLL dir (Windows only) @<:@probed@:>@])]) + + if test "x$USE_UCRT" = "xtrue"; then + AC_MSG_CHECKING([for UCRT DLL dir]) + if test "x$with_ucrt_dll_dir" != x; then + if test -z "$(ls -d "$with_ucrt_dll_dir/*.dll" 2> /dev/null)"; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find any dlls in $with_ucrt_dll_dir]) + else + AC_MSG_RESULT([$with_ucrt_dll_dir]) + UCRT_DLL_DIR="$with_ucrt_dll_dir" + BASIC_FIXUP_PATH([UCRT_DLL_DIR]) + fi + elif test "x$DEVKIT_UCRT_DLL_DIR" != "x"; then + UCRT_DLL_DIR="$DEVKIT_UCRT_DLL_DIR" + AC_MSG_RESULT($UCRT_DLL_DIR) + else + CYGWIN_WINDOWSSDKDIR="${WINDOWSSDKDIR}" + BASIC_FIXUP_PATH([CYGWIN_WINDOWSSDKDIR]) + dll_subdir=$OPENJDK_TARGET_CPU + if test "x$dll_subdir" = "xx86_64"; then + dll_subdir="x64" + fi + UCRT_DLL_DIR="$CYGWIN_WINDOWSSDKDIR/Redist/ucrt/DLLs/$dll_subdir" + if test -z "$(ls -d "$UCRT_DLL_DIR/"*.dll 2> /dev/null)"; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find any dlls in $UCRT_DLL_DIR]) + else + AC_MSG_RESULT($UCRT_DLL_DIR) + fi + fi + else + UCRT_DLL_DIR= + fi + AC_SUBST(UCRT_DLL_DIR) ]) diff --git a/make/copy/Copy-java.base.gmk b/make/copy/Copy-java.base.gmk index 6d94bfc16d2..1bdb50f546a 100644 --- a/make/copy/Copy-java.base.gmk +++ b/make/copy/Copy-java.base.gmk @@ -65,6 +65,17 @@ ifeq ($(OPENJDK_TARGET_OS), windows) MACRO := copy-and-chmod)) TARGETS += $(COPY_MSVCR) $(COPY_MSVCP) + + ifneq ($(UCRT_DLL_DIR), ) + $(eval $(call SetupCopyFiles, COPY_UCRT_DLLS, \ + DEST := $(LIB_DST_DIR), \ + SRC := $(UCRT_DLL_DIR), \ + FILES := $(wildcard $(UCRT_DLL_DIR)/*.dll), \ + MACRO := copy-and-chmod, \ + )) + + TARGETS += $(COPY_UCRT_DLLS) + endif endif ################################################################################ diff --git a/make/devkit/createWindowsDevkit2017.sh b/make/devkit/createWindowsDevkit2017.sh index b4cd65d438b..bd9993965cc 100644 --- a/make/devkit/createWindowsDevkit2017.sh +++ b/make/devkit/createWindowsDevkit2017.sh @@ -130,6 +130,8 @@ if [ ! -d $DEVKIT_ROOT/$SDK_VERSION ]; then cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/um/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/ cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x64" $DEVKIT_ROOT/$SDK_VERSION/lib/ cp -r "$SDK_INSTALL_DIR/lib/$SDK_FULL_VERSION/ucrt/x86" $DEVKIT_ROOT/$SDK_VERSION/lib/ + mkdir -p $DEVKIT_ROOT/$SDK_VERSION/Redist + cp -r "$SDK_INSTALL_DIR/Redist/ucrt" $DEVKIT_ROOT/$SDK_VERSION/Redist/ mkdir -p $DEVKIT_ROOT/$SDK_VERSION/include cp -r "$SDK_INSTALL_DIR/include/$SDK_FULL_VERSION/"* $DEVKIT_ROOT/$SDK_VERSION/include/ fi @@ -152,12 +154,14 @@ echo-info "DEVKIT_VS_INCLUDE_x86=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atl echo-info "DEVKIT_VS_LIB_x86=\"\$DEVKIT_ROOT/VC/lib/x86;\$DEVKIT_ROOT/VC/atlmfc/lib/x86;\$DEVKIT_ROOT/$SDK_VERSION/lib/x86\"" echo-info "DEVKIT_MSVCR_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCR_DLL\"" echo-info "DEVKIT_MSVCP_DLL_x86=\"\$DEVKIT_ROOT/VC/redist/x86/$MSVCP_DLL\"" +echo-info "DEVKIT_UCRT_DLL_DIR_x86=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x86\"" echo-info "" echo-info "DEVKIT_TOOLCHAIN_PATH_x86_64=\"\$DEVKIT_ROOT/VC/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x64:\$DEVKIT_ROOT/$SDK_VERSION/bin/x86\"" echo-info "DEVKIT_VS_INCLUDE_x86_64=\"\$DEVKIT_ROOT/VC/include;\$DEVKIT_ROOT/VC/atlmfc/include;\$DEVKIT_ROOT/$SDK_VERSION/include/shared;\$DEVKIT_ROOT/$SDK_VERSION/include/ucrt;\$DEVKIT_ROOT/$SDK_VERSION/include/um;\$DEVKIT_ROOT/$SDK_VERSION/include/winrt\"" echo-info "DEVKIT_VS_LIB_x86_64=\"\$DEVKIT_ROOT/VC/lib/x64;\$DEVKIT_ROOT/VC/atlmfc/lib/x64;\$DEVKIT_ROOT/$SDK_VERSION/lib/x64\"" echo-info "DEVKIT_MSVCR_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCR_DLL\"" echo-info "DEVKIT_MSVCP_DLL_x86_64=\"\$DEVKIT_ROOT/VC/redist/x64/$MSVCP_DLL\"" +echo-info "DEVKIT_UCRT_DLL_DIR_x86_64=\"\$DEVKIT_ROOT/10/Redist/ucrt/DLLs/x64\"" ################################################################################ # Copy this script