From e4057ad1dd8f9cd6edf26c1c00fd58f579028f6e Mon Sep 17 00:00:00 2001 From: kevinw Date: Tue, 1 May 2018 02:41:38 -0700 Subject: [PATCH] 8042707: Source changes needed to build JDK 9 with Visual Studio 2013 (VS2013) Reviewed-by: erikj, ihse, ddehaven, billyh --- make/CopyFiles.gmk | 24 +++++++++++++++++------ make/lib/CoreLibraries.gmk | 5 +++++ src/windows/bin/java_md.c | 39 ++++++++++++++++++++++---------------- 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/make/CopyFiles.gmk b/make/CopyFiles.gmk index bc070f0de..c447ae13a 100644 --- a/make/CopyFiles.gmk +++ b/make/CopyFiles.gmk @@ -247,16 +247,28 @@ endif ########################################################################################## -# Copy msvcrXX.dll on windows - +# Copy the microsoft runtime libraries on windows ifeq ($(OPENJDK_TARGET_OS), windows) - MSVCR_TARGET := $(JDK_OUTPUTDIR)/bin/$(notdir $(MSVCR_DLL)) + # Chmod to avoid permission issues if bundles are unpacked on unix platforms. - $(MSVCR_TARGET): $(MSVCR_DLL) - $(call install-file) + define copy-and-chmod + $(install-file) $(CHMOD) a+rx $@ + endef + + # Use separate macro calls in case the source files are not in the same + # directory. + $(eval $(call SetupCopyFiles,COPY_MSVCR, \ + DEST := $(JDK_OUTPUTDIR)/bin, \ + FILES := $(MSVCR_DLL), \ + MACRO := copy-and-chmod)) + + $(eval $(call SetupCopyFiles,COPY_MSVCP, \ + DEST := $(JDK_OUTPUTDIR)/bin, \ + FILES := $(MSVCP_DLL), \ + MACRO := copy-and-chmod)) - COPY_FILES += $(MSVCR_TARGET) + COPY_FILES += $(COPY_MSVCR) $(COPY_MSVCP) endif ########################################################################################## diff --git a/make/lib/CoreLibraries.gmk b/make/lib/CoreLibraries.gmk index 9274c3819..42d7b6988 100644 --- a/make/lib/CoreLibraries.gmk +++ b/make/lib/CoreLibraries.gmk @@ -383,6 +383,11 @@ ifeq ($(OPENJDK_TARGET_OS), windows) cmdtoargs.c # Staticically link with c runtime on windows. LIBJLI_CFLAGS := $(filter-out -MD, $(LIBJLI_CFLAGS)) + # Supply the name of the C runtime lib. + LIBJLI_CFLAGS += -DMSVCR_DLL_NAME='"$(notdir $(MSVCR_DLL))"' + ifneq ($(MSVCP_DLL), ) + LIBJLI_CFLAGS += -DMSVCP_DLL_NAME='"$(notdir $(MSVCP_DLL))"' + endif else ifneq ($(OPENJDK_TARGET_OS), macosx) BUILD_LIBJLI_FILES += java_md_common.c diff --git a/src/windows/bin/java_md.c b/src/windows/bin/java_md.c index 0474cc957..165fd5edb 100644 --- a/src/windows/bin/java_md.c +++ b/src/windows/bin/java_md.c @@ -266,26 +266,17 @@ LoadMSVCRT() * assumed to be present in the "JRE path" directory. If it is not found * there (or "JRE path" fails to resolve), skip the explicit load and let * nature take its course, which is likely to be a failure to execute. - * This is clearly completely specific to the exact compiler version - * which isn't very nice, but its hardly the only place. - * No attempt to look for compiler versions in between 2003 and 2010 - * as we aren't supporting building with those. + * The makefiles will provide the correct lib contained in quotes in the + * macro MSVCR_DLL_NAME. */ -#ifdef _MSC_VER -#if _MSC_VER < 1400 -#define CRT_DLL "msvcr71.dll" -#endif -#if _MSC_VER >= 1600 -#define CRT_DLL "msvcr100.dll" -#endif -#ifdef CRT_DLL +#ifdef MSVCR_DLL_NAME if (GetJREPath(crtpath, MAXPATHLEN)) { if (JLI_StrLen(crtpath) + JLI_StrLen("\\bin\\") + - JLI_StrLen(CRT_DLL) >= MAXPATHLEN) { + JLI_StrLen(MSVCR_DLL_NAME) >= MAXPATHLEN) { JLI_ReportErrorMessage(JRE_ERROR11); return JNI_FALSE; } - (void)JLI_StrCat(crtpath, "\\bin\\" CRT_DLL); /* Add crt dll */ + (void)JLI_StrCat(crtpath, "\\bin\\" MSVCR_DLL_NAME); /* Add crt dll */ JLI_TraceLauncher("CRT path is %s\n", crtpath); if (_access(crtpath, 0) == 0) { if (LoadLibrary(crtpath) == 0) { @@ -294,8 +285,24 @@ LoadMSVCRT() } } } -#endif /* CRT_DLL */ -#endif /* _MSC_VER */ +#endif /* MSVCR_DLL_NAME */ +#ifdef MSVCP_DLL_NAME + if (GetJREPath(crtpath, MAXPATHLEN)) { + if (JLI_StrLen(crtpath) + JLI_StrLen("\\bin\\") + + JLI_StrLen(MSVCP_DLL_NAME) >= MAXPATHLEN) { + JLI_ReportErrorMessage(JRE_ERROR11); + return JNI_FALSE; + } + (void)JLI_StrCat(crtpath, "\\bin\\" MSVCP_DLL_NAME); /* Add prt dll */ + JLI_TraceLauncher("PRT path is %s\n", crtpath); + if (_access(crtpath, 0) == 0) { + if (LoadLibrary(crtpath) == 0) { + JLI_ReportErrorMessage(DLL_ERROR4, crtpath); + return JNI_FALSE; + } + } + } +#endif /* MSVCP_DLL_NAME */ loaded = 1; } return JNI_TRUE; -- GitLab