diff --git a/harbour/ChangeLog b/harbour/ChangeLog index d584c63faf..0280255b46 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,26 @@ 2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2009-02-24 13:27 UTC+0100 Viktor Szakats (harbour.01 syenar hu) + * bin/hb-mkdyn.bat + * make_gnu.bat + * make_gnu.sh + * utils/hbmk2/hbmk2.prg + * config/win/msvc.cf + + config/win/msvc64.cf + + Added separate HB_COMPILER for msvc x64 mode. + This allows to keep both the 32 and 64-bit builds + built in parallel. + NOTE: This is only supported with GNU Make. + + * utils/hbmk2/hbmk2.prg + + Added autodetection of msvc64. + + Added pocc64 and msvc64 support in self-detection + code. + + * bin/hbmk.bat + + Added -n to stay compatible with former hbmk.bat. + 2009-02-24 10:20 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * ChangeLog * Updates. diff --git a/harbour/bin/hb-mkdyn.bat b/harbour/bin/hb-mkdyn.bat index 8ed1a8741f..a95663841e 100644 --- a/harbour/bin/hb-mkdyn.bat +++ b/harbour/bin/hb-mkdyn.bat @@ -22,7 +22,15 @@ set HB_DLL_LIBS=hbcommon hbpp hbrtl hbmacro hblang hbcpage hbpcre hbzlib hbexter set HB_DLL_LIBS_ST=hbvm set HB_DLL_LIBS_MT=hbvmmt -if not "%HB_COMPILER%" == "msvc" goto NOT_MSVC +if "%HB_COMPILER%" == "msvc" goto DO_MSVC +if "%HB_COMPILER%" == "msvc64" goto DO_MSVC +if "%HB_COMPILER%" == "bcc32" goto DO_BCC32 +if "%HB_COMPILER%" == "owatcom" goto DO_OWATCOM + +echo HB_COMPILER %HB_COMPILER% isn't supported. +goto END + +:DO_MSVC echo Making .dlls for %HB_COMPILER%... @@ -107,7 +115,7 @@ rmdir _dll goto END -:NOT_MSVC +:DO_OWATCOM if not "%HB_COMPILER%" == "bcc32" goto NOT_BCC32 @@ -266,6 +274,4 @@ rmdir _dll goto END -:NOT_OWATCOM - :END diff --git a/harbour/bin/hbmk.bat b/harbour/bin/hbmk.bat index 3e3d7c55fe..eb218187fa 100644 --- a/harbour/bin/hbmk.bat +++ b/harbour/bin/hbmk.bat @@ -2,4 +2,4 @@ @rem $Id$ @rem -@"%~dp0hbmk2.exe" %* +@"%~dp0hbmk2.exe" -n %* diff --git a/harbour/config/win/msvc.cf b/harbour/config/win/msvc.cf index 50c146b6ba..2151b86dfc 100644 --- a/harbour/config/win/msvc.cf +++ b/harbour/config/win/msvc.cf @@ -4,50 +4,6 @@ include $(TOP)$(ROOT)config/$(HB_ARCHITECTURE)/global.cf -OBJ_EXT = .obj -EXE_EXT = .exe -LIB_PREF = -LIB_EXT = .lib - -CC = cl.exe -CC_IN = -c -CC_OUT = -Fo -CPPFLAGS = -I. -I$(HB_INC_COMPILE) -CFLAGS = -nologo -W4 -wd4127 -Gs -# -Zi - -ifeq ($(HB_VISUALC_VER_PRE80),) -CFLAGS += -Ot2b1 -EHs-c- -else -CFLAGS += -Ogt2yb1p -GX- -G6 -YX -endif - -LD = cl.exe -LD_OUT = -Fe - -# Add all libraries specified in CONTRIBS and LIBS. -ifeq ($(HB_LIB_COMPILE),) -LINKPATHS += /link /libpath:$(LIB_DIR) -else -LINKPATHS += /link /libpath:$(HB_LIB_COMPILE) -endif -LINKLIBS += $(foreach lib, $(CONTRIBS), $(subst lib,,$(lib))$(LIB_EXT)) -LINKLIBS += $(foreach lib, $(LIBS), $(lib)$(LIB_EXT)) - -# If LIBS specifies the rdd library, add all DB drivers. -ifeq ($(findstring rdd,$(LIBS)),rdd) -LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), $(drv)$(LIB_EXT)) -endif - -# Add the specified GT driver library -ifeq ($(findstring rtl,$(LIBS)),rtl) -LINKLIBS += $(foreach gt, $(HB_GT_LIBS), $(gt)$(LIB_EXT)) -endif - -LDFLAGS = $(LINKPATHS) user32.lib wsock32.lib advapi32.lib gdi32.lib - -AR = lib.exe -ARFLAGS = $(HB_USER_AFLAGS) -AR_RULE = $(AR) $(ARFLAGS) /out:$(LIB_DIR)/$@ $(^F) || $(RM) $(LIB_DIR)/$@ +include $(TOP)$(ROOT)config/$(HB_ARCHITECTURE)/msvc.cf include $(TOP)$(ROOT)config/rules.cf diff --git a/harbour/config/win/msvc64.cf b/harbour/config/win/msvc64.cf new file mode 100644 index 0000000000..50c146b6ba --- /dev/null +++ b/harbour/config/win/msvc64.cf @@ -0,0 +1,53 @@ +# +# $Id$ +# + +include $(TOP)$(ROOT)config/$(HB_ARCHITECTURE)/global.cf + +OBJ_EXT = .obj +EXE_EXT = .exe +LIB_PREF = +LIB_EXT = .lib + +CC = cl.exe +CC_IN = -c +CC_OUT = -Fo +CPPFLAGS = -I. -I$(HB_INC_COMPILE) +CFLAGS = -nologo -W4 -wd4127 -Gs +# -Zi + +ifeq ($(HB_VISUALC_VER_PRE80),) +CFLAGS += -Ot2b1 -EHs-c- +else +CFLAGS += -Ogt2yb1p -GX- -G6 -YX +endif + +LD = cl.exe +LD_OUT = -Fe + +# Add all libraries specified in CONTRIBS and LIBS. +ifeq ($(HB_LIB_COMPILE),) +LINKPATHS += /link /libpath:$(LIB_DIR) +else +LINKPATHS += /link /libpath:$(HB_LIB_COMPILE) +endif +LINKLIBS += $(foreach lib, $(CONTRIBS), $(subst lib,,$(lib))$(LIB_EXT)) +LINKLIBS += $(foreach lib, $(LIBS), $(lib)$(LIB_EXT)) + +# If LIBS specifies the rdd library, add all DB drivers. +ifeq ($(findstring rdd,$(LIBS)),rdd) +LINKLIBS += $(foreach drv, $(HB_DB_DRIVERS), $(drv)$(LIB_EXT)) +endif + +# Add the specified GT driver library +ifeq ($(findstring rtl,$(LIBS)),rtl) +LINKLIBS += $(foreach gt, $(HB_GT_LIBS), $(gt)$(LIB_EXT)) +endif + +LDFLAGS = $(LINKPATHS) user32.lib wsock32.lib advapi32.lib gdi32.lib + +AR = lib.exe +ARFLAGS = $(HB_USER_AFLAGS) +AR_RULE = $(AR) $(ARFLAGS) /out:$(LIB_DIR)/$@ $(^F) || $(RM) $(LIB_DIR)/$@ + +include $(TOP)$(ROOT)config/rules.cf diff --git a/harbour/make_gnu.bat b/harbour/make_gnu.bat index ad0e4828cc..392b933437 100644 --- a/harbour/make_gnu.bat +++ b/harbour/make_gnu.bat @@ -78,6 +78,7 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=%HB_INSTALL_PREFIX%/include echo - rxsnt (EMX/RSXNT/Windows GNU C, Windows 32-bit) echo - icc (IBM Visual Age C++, Windows 32-bit) echo - msvc (Microsoft Visual C++, Windows 32-bit) + echo - msvc64 (Microsoft Visual C++, Windows 64-bit) echo - When HB_ARCHITECTURE=linux echo - gcc (GNU C, 32-bit) echo - When HB_ARCHITECTURE=os2 diff --git a/harbour/make_gnu.sh b/harbour/make_gnu.sh index 5a901cf8b0..8ce4630ced 100755 --- a/harbour/make_gnu.sh +++ b/harbour/make_gnu.sh @@ -178,6 +178,7 @@ if [ -z "$HB_ARCHITECTURE" ] || [ -z "$HB_COMPILER" ]; then echo " - rsxnt (EMX/RSXNT/Windows GNU C, Windows 32-bit)" echo " - icc (IBM Visual Age C++, Windows 32-bit)" echo " - msvc (Microsoft Visual C++, Windows 32-bit)" + echo " - msvc64 (Microsoft Visual C++, Windows 64-bit)" echo " - When HB_ARCHITECTURE=linux" echo " - gcc (GNU C, 32-bit)" echo " - When HB_ARCHITECTURE=os2" diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index c2eff69c30..2fc2e3a0c9 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -333,6 +333,7 @@ FUNCTION Main( ... ) should be automatically extracted from a comp/arch matrix. */ SWITCH t_cCOMP CASE "msvc" + CASE "msvc64" CASE "bcc32" CASE "xcc" CASE "pocc" @@ -410,6 +411,7 @@ FUNCTION Main( ... ) owatcom also keeps a cl.exe in it's binary dir. */ aCOMPDET := { { {|| FindInPath( "gcc" ) != NIL }, "mingw" },; /* TODO: Add full support for g++ */ { {|| FindInPath( "wpp386" ) != NIL }, "owatcom" },; /* TODO: Add full support for wcc386 */ + { {|| FindInPath( "ml64" ) != NIL }, "msvc64" },; { {|| FindInPath( "cl" ) != NIL }, "msvc" },; { {|| FindInPath( "bcc32" ) != NIL }, "bcc32" },; { {|| FindInPath( "pocc" ) != NIL }, "pocc" },; @@ -417,7 +419,7 @@ FUNCTION Main( ... ) { {|| FindInPath( "icc" ) != NIL }, "icc" },; { {|| FindInPath( "xcc" ) != NIL }, "xcc" } } /* TODO: "mingwce", "msvcce", "poccce" */ - aCOMPSUP := { "gcc", "mingw", "msvc", "bcc32", "owatcom", "pocc", "pocc64", "rsxnt", "xcc", "dmc", "icc" } + aCOMPSUP := { "gcc", "mingw", "msvc", "msvc64", "bcc32", "owatcom", "pocc", "pocc64", "rsxnt", "xcc", "dmc", "icc" } cBin_CompPRG := "harbour.exe" s_aLIBHBGT := { "gtwin", "gtwvt", "gtgui" } t_cGTDEFAULT := "gtwin" @@ -448,7 +450,7 @@ FUNCTION Main( ... ) /* Which compiler was used to compile ourselves? */ cSelfCOMP := SelfCOMP() /* Skip it for msvc, as it creates problems for other compilers. */ - IF !( cSelfCOMP $ "msvc" ) + IF !( cSelfCOMP $ "msvc|msvc64" ) /* Look for this compiler first */ FOR tmp := 1 TO Len( aCOMPDET ) IF aCOMPDET[ tmp ][ 2 ] == cSelfCOMP .AND. Eval( aCOMPDET[ tmp ][ 1 ] ) @@ -1322,7 +1324,7 @@ FUNCTION Main( ... ) "hbmainwin",; "hbcommon" } - CASE t_cARCH == "win" .AND. t_cCOMP == "msvc" + CASE t_cARCH == "win" .AND. t_cCOMP $ "msvc|msvc64" IF s_lDEBUG AAdd( s_aOPTC, "-MTd -Zi" ) ENDIF @@ -1433,7 +1435,7 @@ FUNCTION Main( ... ) /* NOTE: This has to be kept synced with Harbour HB_IMPORT values. */ DO CASE - CASE !( t_cARCH == "win" ) .OR. t_cCOMP $ "msvc|rsxnt" + CASE !( t_cARCH == "win" ) .OR. t_cCOMP $ "msvc|msvc64|rsxnt" /* NOTE: MSVC gives the warning: "LNK4217: locally defined symbol ... imported in function ..." if using 'dllimport'. [vszakats] */ @@ -1760,7 +1762,7 @@ STATIC FUNCTION SelfCOMP() LOCAL cCompiler := hb_Compiler() /* Order is significant */ - IF "Microsoft Visual C" $ cCompiler ; RETURN "msvc" + IF "Microsoft Visual C" $ cCompiler ; RETURN iif( "(64-bit)" $ cCompiler, "msvc64", "msvc" ) ELSEIF "Borland" $ cCompiler ; RETURN "bcc32" ELSEIF "CodeGear" $ cCompiler ; RETURN "bcc32" ELSEIF "DJGPP" $ cCompiler ; RETURN "djgpp" @@ -1769,7 +1771,7 @@ STATIC FUNCTION SelfCOMP() ELSEIF "GNU C" $ cCompiler ; RETURN "gcc" ELSEIF "Watcom C++" $ cCompiler ; RETURN "owatcom" ELSEIF "Watcom C" $ cCompiler ; RETURN "owatcom" - ELSEIF "Pelles ISO C" $ cCompiler ; RETURN "pocc" + ELSEIF "Pelles ISO C" $ cCompiler ; RETURN iif( "(64-bit)" $ cCompiler, "pocc64", "pocc" ) ELSEIF "Digital Mars" $ cCompiler ; RETURN "dmc" ELSEIF "(XCC)" $ cCompiler ; RETURN "xcc" ENDIF @@ -2581,7 +2583,7 @@ STATIC PROCEDURE ShowHelp( lLong ) " - Supported values for each supported value:" ,; " linux : gcc, gpp, owatcom, mingw, mingwce" ,; " darwin : gcc" ,; - " win : gcc, mingw, msvc, bcc32, owatcom, pocc, pocc64," ,; + " win : gcc, mingw, msvc, msvc64, bcc32, owatcom, pocc, pocc64," ,; " dmc, rsxnt, xcc, icc" ,; /* poccce, mingwce, msvcce */ " os2 : gcc, owatcom, icc" ,; " dos : gcc, djgpp, owatcom, rsx32" ,;