# HG changeset patch # User dcubed # Date 1344044068 25200 # Node ID 0d8e265ba72765da725573f258c87c85dfd99bc7 # Parent 282abd0fd8785f94a85e69a0f608f5fe69f5a288 7181175: Enable builds on Windows with MinGW/MSYS Summary: This fix is the minimum number of Makefile changes to enable building HotSpot with MinGW/MSYS Reviewed-by: jcoomes, dcubed, tbell, ohair Contributed-by: volker.simonis@gmail.com diff -r 282abd0fd878 -r 0d8e265ba727 make/windows/makefiles/defs.make --- a/make/windows/makefiles/defs.make Thu Aug 02 14:54:14 2012 -0700 +++ b/make/windows/makefiles/defs.make Fri Aug 03 18:34:28 2012 -0700 @@ -188,14 +188,22 @@ MAKE_ARGS += JDK_BUILD_NUMBER=$(COOKED_BUILD_NUMBER) endif -NMAKE= MAKEFLAGS= MFLAGS= nmake /NOLOGO +NMAKE= MAKEFLAGS= MFLAGS= nmake -NOLOGO +ifndef SYSTEM_UNAME + SYSTEM_UNAME := $(shell uname) + export SYSTEM_UNAME +endif # Check for CYGWIN -ifneq (,$(findstring CYGWIN,$(shell uname))) +ifneq (,$(findstring CYGWIN,$(SYSTEM_UNAME))) USING_CYGWIN=true else USING_CYGWIN=false endif +# Check for MinGW +ifneq (,$(findstring MINGW,$(SYSTEM_UNAME))) + USING_MINGW=true +endif # FIXUP: The subdirectory for a debug build is NOT the same on all platforms VM_DEBUG=debug @@ -208,11 +216,16 @@ ABS_BOOTDIR := $(subst /,\\,$(shell /bin/cygpath -m -a "$(BOOTDIR)")) ABS_GAMMADIR := $(subst /,\\,$(shell /bin/cygpath -m -a "$(GAMMADIR)")) ABS_OS_MAKEFILE := $(shell /bin/cygpath -m -a "$(HS_MAKE_DIR)/$(OSNAME)")/build.make -else - ABS_OUTPUTDIR := $(subst /,\\,$(shell $(CD) $(OUTPUTDIR);$(PWD))) - ABS_BOOTDIR := $(subst /,\\,$(shell $(CD) $(BOOTDIR);$(PWD))) - ABS_GAMMADIR := $(subst /,\\,$(shell $(CD) $(GAMMADIR);$(PWD))) - ABS_OS_MAKEFILE := $(subst /,\\,$(shell $(CD) $(HS_MAKE_DIR)/$(OSNAME);$(PWD))/build.make) +else ifeq ($(USING_MINGW), true) + ABS_OUTPUTDIR := $(shell $(CD) $(OUTPUTDIR);$(PWD)) + ABS_BOOTDIR := $(shell $(CD) $(BOOTDIR);$(PWD)) + ABS_GAMMADIR := $(shell $(CD) $(GAMMADIR);$(PWD)) + ABS_OS_MAKEFILE := $(shell $(CD) $(HS_MAKE_DIR)/$(OSNAME);$(PWD))/build.make + else + ABS_OUTPUTDIR := $(subst /,\\,$(shell $(CD) $(OUTPUTDIR);$(PWD))) + ABS_BOOTDIR := $(subst /,\\,$(shell $(CD) $(BOOTDIR);$(PWD))) + ABS_GAMMADIR := $(subst /,\\,$(shell $(CD) $(GAMMADIR);$(PWD))) + ABS_OS_MAKEFILE := $(subst /,\\,$(shell $(CD) $(HS_MAKE_DIR)/$(OSNAME);$(PWD))/build.make) endif # Disable building SA on windows until we are sure diff -r 282abd0fd878 -r 0d8e265ba727 make/windows/makefiles/rules.make --- a/make/windows/makefiles/rules.make Thu Aug 02 14:54:14 2012 -0700 +++ b/make/windows/makefiles/rules.make Fri Aug 03 18:34:28 2012 -0700 @@ -23,14 +23,15 @@ # # These are the commands used externally to compile and run. - +# The \ are used here for traditional Windows apps and " quoted to get +# past the Unix-like shell: !ifdef BootStrapDir -RUN_JAVA=$(BootStrapDir)\bin\java -RUN_JAVAP=$(BootStrapDir)\bin\javap -RUN_JAVAH=$(BootStrapDir)\bin\javah -RUN_JAR=$(BootStrapDir)\bin\jar -COMPILE_JAVAC=$(BootStrapDir)\bin\javac $(BOOTSTRAP_JAVAC_FLAGS) -COMPILE_RMIC=$(BootStrapDir)\bin\rmic +RUN_JAVA="$(BootStrapDir)\bin\java" +RUN_JAVAP="$(BootStrapDir)\bin\javap" +RUN_JAVAH="$(BootStrapDir)\bin\javah" +RUN_JAR="$(BootStrapDir)\bin\jar" +COMPILE_JAVAC="$(BootStrapDir)\bin\javac" $(BOOTSTRAP_JAVAC_FLAGS) +COMPILE_RMIC="$(BootStrapDir)\bin\rmic" BOOT_JAVA_HOME=$(BootStrapDir) !else RUN_JAVA=java diff -r 282abd0fd878 -r 0d8e265ba727 make/windows/makefiles/sa.make --- a/make/windows/makefiles/sa.make Thu Aug 02 14:54:14 2012 -0700 +++ b/make/windows/makefiles/sa.make Fri Aug 03 18:34:28 2012 -0700 @@ -36,37 +36,37 @@ !include $(WorkSpace)/make/windows/makefiles/rules.make !include $(WorkSpace)/make/sa.files -GENERATED = ..\generated +GENERATED = ../generated # tools.jar is needed by the JDI - SA binding -SA_CLASSPATH = $(BOOT_JAVA_HOME)\lib\tools.jar +SA_CLASSPATH = $(BOOT_JAVA_HOME)/lib/tools.jar -SA_CLASSDIR = $(GENERATED)\saclasses +SA_CLASSDIR = $(GENERATED)/saclasses SA_BUILD_VERSION_PROP = sun.jvm.hotspot.runtime.VM.saBuildVersion=$(SA_BUILD_VERSION) -SA_PROPERTIES = $(SA_CLASSDIR)\sa.properties +SA_PROPERTIES = $(SA_CLASSDIR)/sa.properties -default:: $(GENERATED)\sa-jdi.jar +default:: $(GENERATED)/sa-jdi.jar # Remove the space between $(SA_BUILD_VERSION_PROP) and > below as it adds a white space # at the end of SA version string and causes a version mismatch with the target VM version. -$(GENERATED)\sa-jdi.jar: $(AGENT_FILES:/=\) - @if not exist $(SA_CLASSDIR) mkdir $(SA_CLASSDIR) - @echo ...Building sa-jdi.jar +$(GENERATED)/sa-jdi.jar: $(AGENT_FILES) + $(QUIETLY) mkdir -p $(SA_CLASSDIR) + @echo ...Building sa-jdi.jar into $(SA_CLASSDIR) @echo ...$(COMPILE_JAVAC) -classpath $(SA_CLASSPATH) -d $(SA_CLASSDIR) .... - @$(COMPILE_JAVAC) -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) $(AGENT_FILES:/=\) + @$(COMPILE_JAVAC) -classpath $(SA_CLASSPATH) -sourcepath $(AGENT_SRC_DIR) -d $(SA_CLASSDIR) $(AGENT_FILES) $(COMPILE_RMIC) -classpath $(SA_CLASSDIR) -d $(SA_CLASSDIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer $(QUIETLY) echo $(SA_BUILD_VERSION_PROP)> $(SA_PROPERTIES) $(QUIETLY) rm -f $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql/sa.js $(QUIETLY) cp $(AGENT_SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(SA_CLASSDIR)/sun/jvm/hotspot/utilities/soql $(QUIETLY) rm -rf $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources - $(QUIETLY) mkdir $(SA_CLASSDIR)\sun\jvm\hotspot\ui\resources + $(QUIETLY) mkdir $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources $(QUIETLY) cp $(AGENT_SRC_DIR)/sun/jvm/hotspot/ui/resources/*.png $(SA_CLASSDIR)/sun/jvm/hotspot/ui/resources $(QUIETLY) cp -r $(AGENT_SRC_DIR)/images/* $(SA_CLASSDIR) $(RUN_JAR) cf $@ -C $(SA_CLASSDIR) . - $(RUN_JAR) uf $@ -C $(AGENT_SRC_DIR:/=\) META-INF\services\com.sun.jdi.connect.Connector + $(RUN_JAR) uf $@ -C $(AGENT_SRC_DIR) META-INF/services/com.sun.jdi.connect.Connector $(RUN_JAVAH) -classpath $(SA_CLASSDIR) -jni sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal $(RUN_JAVAH) -classpath $(SA_CLASSDIR) -jni sun.jvm.hotspot.debugger.x86.X86ThreadContext $(RUN_JAVAH) -classpath $(SA_CLASSDIR) -jni sun.jvm.hotspot.debugger.ia64.IA64ThreadContext @@ -85,27 +85,27 @@ # will be useful to have the assertion checks in place !if "$(BUILDARCH)" == "ia64" -SA_CFLAGS = /nologo $(MS_RUNTIME_OPTION) /W3 $(GX_OPTION) /Od /D "WIN32" /D "WIN64" /D "_WINDOWS" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +SA_CFLAGS = -nologo $(MS_RUNTIME_OPTION) -W3 $(GX_OPTION) -Od -D "WIN32" -D "WIN64" -D "_WINDOWS" -D "_DEBUG" -D "_CONSOLE" -D "_MBCS" -YX -FD -c !elseif "$(BUILDARCH)" == "amd64" -SA_CFLAGS = /nologo $(MS_RUNTIME_OPTION) /W3 $(GX_OPTION) /Od /D "WIN32" /D "WIN64" /D "_WINDOWS" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +SA_CFLAGS = -nologo $(MS_RUNTIME_OPTION) -W3 $(GX_OPTION) -Od -D "WIN32" -D "WIN64" -D "_WINDOWS" -D "_DEBUG" -D "_CONSOLE" -D "_MBCS" -YX -FD -c !if "$(COMPILER_NAME)" == "VS2005" # On amd64, VS2005 compiler requires bufferoverflowU.lib on the link command line, # otherwise we get missing __security_check_cookie externals at link time. SA_LD_FLAGS = bufferoverflowU.lib !endif !else -SA_CFLAGS = /nologo $(MS_RUNTIME_OPTION) /W3 /Gm $(GX_OPTION) /Od /D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +SA_CFLAGS = -nologo $(MS_RUNTIME_OPTION) -W3 -Gm $(GX_OPTION) -Od -D "WIN32" -D "_WINDOWS" -D "_DEBUG" -D "_CONSOLE" -D "_MBCS" -YX -FD -GZ -c !if "$(ENABLE_FULL_DEBUG_SYMBOLS)" == "1" -SA_CFLAGS = $(SA_CFLAGS) /ZI +SA_CFLAGS = $(SA_CFLAGS) -ZI !endif !endif !if "$(MT)" != "" -SA_LD_FLAGS = /manifest $(SA_LD_FLAGS) +SA_LD_FLAGS = -manifest $(SA_LD_FLAGS) !endif SASRCFILE = $(AGENT_DIR)/src/os/win32/windbg/sawindbg.cpp -SA_LFLAGS = $(SA_LD_FLAGS) /nologo /subsystem:console /machine:$(MACHINE) +SA_LFLAGS = $(SA_LD_FLAGS) -nologo -subsystem:console -machine:$(MACHINE) !if "$(ENABLE_FULL_DEBUG_SYMBOLS)" == "1" -SA_LFLAGS = $(SA_LFLAGS) /map /debug +SA_LFLAGS = $(SA_LFLAGS) -map -debug !endif # Note that we do not keep sawindbj.obj around as it would then @@ -117,15 +117,15 @@ $(SAWINDBG): $(SASRCFILE) set INCLUDE=$(SA_INCLUDE)$(INCLUDE) $(CXX) @<< - /I"$(BootStrapDir)/include" /I"$(BootStrapDir)/include/win32" - /I"$(GENERATED)" $(SA_CFLAGS) + -I"$(BootStrapDir)/include" -I"$(BootStrapDir)/include/win32" + -I"$(GENERATED)" $(SA_CFLAGS) $(SASRCFILE) - /out:$*.obj + -out:$*.obj << set LIB=$(SA_LIB)$(LIB) - $(LD) /out:$@ /DLL $*.obj dbgeng.lib $(SA_LFLAGS) + $(LD) -out:$@ -DLL $*.obj dbgeng.lib $(SA_LFLAGS) !if "$(MT)" != "" - $(MT) /manifest $(@F).manifest /outputresource:$(@F);#2 + $(MT) -manifest $(@F).manifest -outputresource:$(@F);#2 !endif !if "$(ENABLE_FULL_DEBUG_SYMBOLS)" == "1" !if "$(ZIP_DEBUGINFO_FILES)" == "1" @@ -136,6 +136,6 @@ -@rm -f $*.obj cleanall : - rm -rf $(GENERATED:\=/)/saclasses - rm -rf $(GENERATED:\=/)/sa-jdi.jar + rm -rf $(GENERATED)/saclasses + rm -rf $(GENERATED)/sa-jdi.jar !endif diff -r 282abd0fd878 -r 0d8e265ba727 make/windows/makefiles/shared.make --- a/make/windows/makefiles/shared.make Thu Aug 02 14:54:14 2012 -0700 +++ b/make/windows/makefiles/shared.make Fri Aug 03 18:34:28 2012 -0700 @@ -36,11 +36,12 @@ !ifdef SUBDIRS +# \ is used below because $(MAKE) is nmake here, which expects Windows paths $(SUBDIRS): FORCE @if not exist $@ mkdir $@ - @if not exist $@\local.make echo # Empty > $@\local.make - @echo nmake $(ACTION) in $(DIR)\$@ - cd $@ && $(MAKE) /NOLOGO /f $(WorkSpace)\make\windows\makefiles\$@.make $(ACTION) DIR=$(DIR)\$@ BUILD_FLAVOR=$(BUILD_FLAVOR) + @if not exist $@/local.make echo # Empty > $@/local.make + @echo nmake $(ACTION) in $(DIR)/$@ + cd $@ && $(MAKE) -NOLOGO -f $(WorkSpace)\make\windows\makefiles\$@.make $(ACTION) DIR=$(DIR)\$@ BUILD_FLAVOR=$(BUILD_FLAVOR) !endif # Creates the needed directory