Add mingw64 support
[p5sagit/p5-mst-13.2.git] / win32 / makefile.mk
index d46db1b..a392472 100644 (file)
@@ -112,7 +112,7 @@ USE_LARGE_FILES     *= define
 #CCTYPE                *= MSVC90
 # Borland 5.02 or later
 #CCTYPE                *= BORLAND
-# MinGW with gcc-2.95.2 or later
+# MinGW or mingw-w64 with gcc-2.95.2 or later
 CCTYPE         *= GCC
 
 #
@@ -220,6 +220,29 @@ CCINCDIR   *= $(CCHOME)\include
 CCLIBDIR       *= $(CCHOME)\lib
 
 #
+# If building with gcc-4.x.x (or x86_64-w64-mingw32-gcc-4.x.x), then
+# uncomment  the following assignment to GCC_4XX, make sure that CCHOME
+# has been set correctly above, and uncomment the appropriate
+# GCCHELPERDLL line.
+# The name of the dll can change, depending upon which vendor has supplied
+# your 4.x.x compiler, and upon the values of "x".
+# (The dll will be in your mingw/bin folder, so check there if you're
+# unsure about the correct name.)
+# Without these corrections, the op/taint.t test script will fail.
+#
+#GCC_4XX               *= define
+#GCCHELPERDLL  *= $(CCHOME)\bin\libgcc_s_sjlj-1.dll
+#GCCHELPERDLL  *= $(CCHOME)\bin\libgcc_s_dw2-1.dll
+#GCCHELPERDLL  *= $(CCHOME)\bin\libgcc_s_1.dll
+
+#
+# uncomment this if you are using x86_64-w64-mingw32 cross-compiler
+# ie if your gcc executable is called 'x86_64-w64-mingw32-gcc'
+# instead of the usual 'gcc'.
+#
+#GCCCROSS      *= define
+
+#
 # Additional compiler flags can be specified here.
 #
 BUILDOPT       *= $(BUILDOPTEXTRA)
@@ -475,11 +498,15 @@ LINK_FLAGS        += -L"$(CCLIBDIR)\Release"
 
 .ELIF "$(CCTYPE)" == "GCC"
 
-CC             = gcc
-LINK32         = g++
-LIB32          = ar rc
-IMPLIB         = dlltool
-RSC            = windres
+.IF "$(GCCCROSS)" == "define"
+ARCHPREFIX      = x86_64-w64-mingw32-
+.ENDIF
+
+CC             = $(ARCHPREFIX)gcc
+LINK32         = $(ARCHPREFIX)g++
+LIB32          = $(ARCHPREFIX)ar rc
+IMPLIB         = $(ARCHPREFIX)dlltool
+RSC            = $(ARCHPREFIX)windres
 
 i = .i
 o = .o
@@ -491,6 +518,9 @@ a = .a
 
 INCLUDES       = -I.\include -I. -I.. -I$(COREDIR)
 DEFINES                = -DWIN32 $(CRYPT_FLAG)
+.IF "$(WIN64)" == "define"
+DEFINES                += -DWIN64 -DCONSERVATIVE
+.ENDIF
 LOCDEFS                = -DPERLDLL -DPERL_CORE
 SUBSYS         = console
 CXX_FLAG       = -xc++
@@ -783,8 +813,18 @@ CFGH_TMPL  = config_H.bc
 
 .ELIF "$(CCTYPE)" == "GCC"
 
+.IF "$(WIN64)" == "define"
+.IF "$(GCCCROSS)" == "define"
+CFGSH_TMPL     = config.gc64
+CFGH_TMPL      = config_H.gc64
+.ELSE
+CFGSH_TMPL     = config.gc64nox
+CFGH_TMPL      = config_H.gc64nox
+.ENDIF
+.ELSE
 CFGSH_TMPL     = config.gc
 CFGH_TMPL      = config_H.gc
+.ENDIF
 PERLIMPLIB     = ..\libperl511$(a)
 PERLSTATICLIB  = ..\libperl511s$(a)
 
@@ -1220,7 +1260,7 @@ $(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
            $(mktmp $(LKPRE) $(PERLDLL_OBJ) \
                $(shell @type Extensions_static) \
                $(LIBFILES) $(LKPOST))
-       dlltool --output-lib $(PERLIMPLIB) \
+       $(IMPLIB) --output-lib $(PERLIMPLIB) \
                --dllname $(PERLDLL:b).dll \
                --def perldll.def \
                --base-file perl.base \
@@ -1582,6 +1622,11 @@ test-prep : all utils
 .ELSE
        $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
 .ENDIF
+.IF "$(CCTYPE)" == "GCC"
+.IF "$(GCC_4XX)" == "define"
+       $(XCOPY) $(GCCHELPERDLL) ..\t\$(NULL)
+.ENDIF
+.ENDIF
 
 test : $(RIGHTMAKE) test-prep
        cd ..\t && $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)