diff --git a/harbour/ChangeLog.txt b/harbour/ChangeLog.txt index df67675a7b..69d6bc978f 100644 --- a/harbour/ChangeLog.txt +++ b/harbour/ChangeLog.txt @@ -10,6 +10,26 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2012-12-16 03:07 UTC+0100 Viktor Szakats (harbour syenar.net) + + config/win/bcc64.mk + * config/global.mk + * config/postinst.hb + * config/win/bcc.mk + * package/winuni/mpkg_win_uni.bat + * package/winuni/mpkg_win_uni.nsi + * README.txt + * utils/hbmk2/hbmk2.prg + + added rough cut support for bcc64 to the two make systems. + Untested. Autodetection and some 32-bit specific tricks + not implemented. + bcc64 is based on clang and it's only a bcc "emulation" + layer on top of it. At least it will be a good compiler + now, but it's important to see that it's internally + a clang compiler, so its behavior and raw options are + gcc-like. + Changes are based on xhb patches and bcc64 online docs: + http://docwiki.embarcadero.com/RADStudio/XE3/en/Command_Line_Utilities_Index + 2012-12-16 00:35 UTC+0100 Viktor Szakats (harbour syenar.net) * include/hbcomp.h * include/hbcompdf.h diff --git a/harbour/README.txt b/harbour/README.txt index e6a45fc859..4fc531bff0 100644 --- a/harbour/README.txt +++ b/harbour/README.txt @@ -656,6 +656,7 @@ TABLE OF CONTENT watcom - Open Watcom C/C++ bcc - Borland/CodeGear/Embarcadero C++ 4.x and above + bcc64 - Embarcadero C++ 6.5 and above icc - Intel(R) C/C++ iccia64 - Intel(R) C/C++ IA-64 (Itanium) pocc - Pelles C 4.5 and above @@ -1490,6 +1491,7 @@ TABLE OF CONTENT  | host
plat | target
plat/comp | target
cpu :---- | :------------- | :-------------------- | :--------------------------------------- | win | win/bcc | x86 + | win | win/bcc64 | x86-64 | win | win/gcc | x86 | win | win/global | x86 | win | win/icc | x86 @@ -1542,6 +1544,7 @@ TABLE OF CONTENT x | linux | win/mingw64 | x86-64 x | linux | win/watcom | x86 x | linux | win/bcc | x86 (requires WINE) + x | linux | win/bcc64 | x86-64 (requires WINE) x | linux | os2/watcom | x86 x | linux | dos/watcom | x86 x | linux | dos/djgpp | x86 diff --git a/harbour/config/global.mk b/harbour/config/global.mk index 8cc8e1a323..abb4c334e2 100644 --- a/harbour/config/global.mk +++ b/harbour/config/global.mk @@ -499,7 +499,7 @@ ifeq ($(HB_PLATFORM),) ifneq ($(filter $(HB_COMPILER),msvcarm msvcmips msvcsh mingwarm poccarm),) HB_PLATFORM := wce else - ifneq ($(filter $(HB_COMPILER),mingw mingw64 msvc msvc64 msvcia64 bcc xcc pocc pocc64),) + ifneq ($(filter $(HB_COMPILER),mingw mingw64 msvc msvc64 msvcia64 bcc bcc64 xcc pocc pocc64),) HB_PLATFORM := win endif endif @@ -749,6 +749,7 @@ ifeq ($(HB_COMPILER),) endif endif else + # TODO: Add bcc64 autodetection HB_COMP_PATH := $(call find_in_path_raw,bcc32.exe) ifneq ($(HB_COMP_PATH),) HB_COMPILER := bcc diff --git a/harbour/config/postinst.hb b/harbour/config/postinst.hb index b34e6402e7..7dfc587bd0 100644 --- a/harbour/config/postinst.hb +++ b/harbour/config/postinst.hb @@ -601,6 +601,8 @@ STATIC FUNCTION __hb_extern_get_list( cInputName ) cCommand := "wlib {I}" CASE GetEnv( "HB_COMPILER" ) == "bcc" cCommand := "tlib {I}, {T}" + CASE GetEnv( "HB_COMPILER" ) == "bcc64" + cCommand := "tlib64 {I}, {T}" ENDCASE IF ! Empty( cCommand ) .AND. ; diff --git a/harbour/config/win/bcc.mk b/harbour/config/win/bcc.mk index cec6816113..382bf35bf0 100644 --- a/harbour/config/win/bcc.mk +++ b/harbour/config/win/bcc.mk @@ -4,13 +4,23 @@ # GNU Make file for Borland/CodeGear/Embarcadero C/C++ 32-bit (4.x-) -OBJ_EXT := .obj -LIB_PREF := -LIB_EXT := .lib +ifeq ($(HB_COMPILER),bcc64) + OBJ_EXT := .o + LIB_PREF := + LIB_EXT := .a +else + OBJ_EXT := .obj + LIB_PREF := + LIB_EXT := .lib +endif HB_DYN_COPT := -DHB_DYNLIB -CC := bcc32.exe +ifeq ($(HB_COMPILER),bcc64) + CC := bcc64.exe +else + CC := bcc32.exe +endif CC_IN := -c CC_OUT := -o @@ -25,9 +35,13 @@ else endif ifneq ($(HB_BUILD_OPTIM),no) - # for some reason -6 generates the exact same code as -4 with both 5.5 and 5.8. - # -5 seems to be significantly slower than both. [vszakats] - CFLAGS += -d -6 -O2 -OS -Ov -Oi -Oc + ifeq ($(HB_COMPILER),bcc64) + CFLAGS += -d -O2 -OS -Ov -Oc + else + # for some reason -6 generates the exact same code as -4 with both 5.5 and 5.8. + # -5 seems to be significantly slower than both. [vszakats] + CFLAGS += -d -O2 -OS -Ov -Oc -Oi -6 + endif endif ifeq ($(HB_BUILD_MODE),cpp) @@ -35,7 +49,11 @@ ifeq ($(HB_BUILD_MODE),cpp) endif ifeq ($(HB_BUILD_DEBUG),yes) - CFLAGS += -y -v + ifeq ($(HB_COMPILER),bcc64) + CFLAGS += -g + else + CFLAGS += -v -y + endif endif ifneq ($(HB_HOST_PLAT_UNIX),) @@ -71,14 +89,26 @@ RC := brcc32.exe RC_OUT := -fo RCFLAGS += -I. -I$(HB_HOST_INC) -LD := ilink32.exe +ifeq ($(HB_COMPILER),bcc64) + LD := ilink64.exe +else + LD := ilink32.exe +endif LIBPATHS := $(foreach dir,$(LIB_DIR) $(3RDLIB_DIR),$(subst /,$(BACKSLASH),-L"$(dir)")) LDFLAGS += $(LIBPATHS) -Gn -Tpe -LD_RULE = $(LD) $(LDFLAGS) $(HB_LDFLAGS) $(HB_USER_LDFLAGS) c0x32.obj $(filter-out %$(RES_EXT),$(^F)), "$(subst /,$(BACKSLASH),$(BIN_DIR)/$@)", nul, $(LDLIBS) cw32mt import32,, $(filter %$(RES_EXT),$(^F)) $(LDSTRIP) +ifeq ($(HB_COMPILER),bcc64) + LD_RULE = $(LD) $(LDFLAGS) $(HB_LDFLAGS) $(HB_USER_LDFLAGS) c0x64.obj $(filter-out %$(RES_EXT),$(^F)), "$(subst /,$(BACKSLASH),$(BIN_DIR)/$@)", nul, $(LDLIBS) cw64mt import64,, $(filter %$(RES_EXT),$(^F)) $(LDSTRIP) +else + LD_RULE = $(LD) $(LDFLAGS) $(HB_LDFLAGS) $(HB_USER_LDFLAGS) c0x32.obj $(filter-out %$(RES_EXT),$(^F)), "$(subst /,$(BACKSLASH),$(BIN_DIR)/$@)", nul, $(LDLIBS) cw32mt import32,, $(filter %$(RES_EXT),$(^F)) $(LDSTRIP) +endif LDLIBS := $(strip $(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS)) -AR := tlib.exe +ifeq ($(HB_COMPILER),bcc64) + AR := tlib64.exe +else + AR := tlib.exe +endif ARFLAGS += /P128 AR_RULE = $(AR) $(ARFLAGS) $(HB_AFLAGS) $(HB_USER_AFLAGS) "$(subst /,$(BACKSLASH),$(LIB_DIR)/$@)" $(foreach file,$(?F),-+$(file)) @@ -113,11 +143,19 @@ ifneq ($(HB_SHELL),sh) endif endif -DY := ilink32.exe +ifeq ($(HB_COMPILER),bcc64) + DY := ilink64.exe +else + DY := ilink32.exe +endif DFLAGS += -q -Gn -C -aa -Tpd -Gi -x $(LIBPATHS) DY_OUT := # NOTE: .lib extension not added to keep line short enough to work on Win9x/ME -DLIBS := $(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS) cw32mt import32 +ifeq ($(HB_COMPILER),bcc64) + DLIBS := $(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS) cw64mt import64 +else + DLIBS := $(HB_USER_LIBS) $(LIBS) $(3RDLIBS) $(SYSLIBS) cw32mt import32 +endif # NOTE: The empty line directly before 'endef' HAVE TO exist! define dynlib_object diff --git a/harbour/config/win/bcc64.mk b/harbour/config/win/bcc64.mk new file mode 100644 index 0000000000..c460870aea --- /dev/null +++ b/harbour/config/win/bcc64.mk @@ -0,0 +1,5 @@ +# +# $Id$ +# + +include $(TOP)$(ROOT)config/$(HB_PLATFORM)/bcc.mk diff --git a/harbour/package/winuni/mpkg_win_uni.bat b/harbour/package/winuni/mpkg_win_uni.bat index 0e04691ace..4e884e9f1f 100644 --- a/harbour/package/winuni/mpkg_win_uni.bat +++ b/harbour/package/winuni/mpkg_win_uni.bat @@ -48,6 +48,7 @@ xcopy /y /s %~dp0..\..\pkg\dos\watcom\hb%HB_VL%wa\lib xcopy /y /s %~dp0..\..\pkg\os2\watcom\harbour-%HB_VF%-os2-watcom\lib %HB_ABSROOT%lib\ xcopy /y /s %~dp0..\..\pkg\wce\mingwarm\harbour-%HB_VF%-wce-mingwarm\lib %HB_ABSROOT%lib\ xcopy /y /s %~dp0..\..\pkg\win\bcc\harbour-%HB_VF%-win-bcc\lib %HB_ABSROOT%lib\ +xcopy /y /s %~dp0..\..\pkg\win\bcc64\harbour-%HB_VF%-win-bcc64\lib %HB_ABSROOT%lib\ xcopy /y /s %~dp0..\..\pkg\win\mingw\harbour-%HB_VF%-win-mingw\lib %HB_ABSROOT%lib\ xcopy /y /s %~dp0..\..\pkg\win\mingw64\harbour-%HB_VF%-win-mingw64\lib %HB_ABSROOT%lib\ xcopy /y /s %~dp0..\..\pkg\win\msvc\harbour-%HB_VF%-win-msvc\lib %HB_ABSROOT%lib\ @@ -142,6 +143,7 @@ echo "%HB_DR%lib\win\msvc\*.*" >> _hbfiles echo "%HB_DR%lib\win\msvc64\*.*" >> _hbfiles rem echo "%HB_DR%bin\harbour-%HB_VS%-bcc.dll" >> _hbfiles echo "%HB_DR%lib\win\bcc\*.*" >> _hbfiles +echo "%HB_DR%lib\win\bcc64\*.*" >> _hbfiles echo "%HB_DR%lib\win\watcom\*.*" >> _hbfiles rem echo "%HB_DR%lib\win\pocc\*.*" >> _hbfiles rem echo "%HB_DR%lib\win\pocc64\*.*" >> _hbfiles diff --git a/harbour/package/winuni/mpkg_win_uni.nsi b/harbour/package/winuni/mpkg_win_uni.nsi index 6cac8da2a7..5569ab821c 100644 --- a/harbour/package/winuni/mpkg_win_uni.nsi +++ b/harbour/package/winuni/mpkg_win_uni.nsi @@ -207,6 +207,14 @@ Section "Libs for Borland C" hb_lib_bcc SectionEnd !endif +!ifndef PKG_NO_COMP_BCC64 +Section "Libs for Borland C x64" hb_lib_bcc64 + SetOutPath $INSTDIR\bin + SetOutPath $INSTDIR\lib\win\bcc64 + File "$%HB_ABSROOT%lib\win\bcc64\*.*" +SectionEnd +!endif + !ifndef PKG_NO_COMP_WATCOM Section /o "Libs for Open Watcom" hb_lib_watcom SetOutPath $INSTDIR\lib\win\watcom @@ -385,6 +393,9 @@ SectionEnd !ifndef PKG_NO_COMP_BCC LangString DESC_hb_lib_bcc ${LANG_ENGLISH} "Harbour libs for Borland C" !endif +!ifndef PKG_NO_COMP_BCC64 + LangString DESC_hb_lib_bcc64 ${LANG_ENGLISH} "Harbour libs for Borland C x64" +!endif !ifndef PKG_NO_COMP_WATCOM LangString DESC_hb_lib_watcom ${LANG_ENGLISH} "Harbour libs for Open Watcom" !endif @@ -447,6 +458,9 @@ SectionEnd !ifndef PKG_NO_COMP_BCC !insertmacro MUI_DESCRIPTION_TEXT ${hb_lib_bcc} $(DESC_hb_lib_bcc) !endif +!ifndef PKG_NO_COMP_BCC64 + !insertmacro MUI_DESCRIPTION_TEXT ${hb_lib_bcc64} $(DESC_hb_lib_bcc64) +!endif !ifndef PKG_NO_COMP_WATCOM !insertmacro MUI_DESCRIPTION_TEXT ${hb_lib_watcom} $(DESC_hb_lib_watcom) !endif diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index d70a222db9..7a3b4f5857 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -1620,6 +1620,7 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) CASE "msvc64" CASE "msvcia64" CASE "bcc" + CASE "bcc64" CASE "xcc" CASE "pocc" CASE "pocc64" @@ -1762,7 +1763,7 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) { {|| iif( FindInPath( "wcc386" ) == NIL, ; FindInPath( "cl.exe" ), ; NIL ) }, "msvc" }, ; - { {|| _BCC_BIN_DETECT() }, "bcc" }, ; + { {|| _BCC_BIN_DETECT() }, "bcc" }, ; /* TODO: Add bcc64 autodetection */ { {|| iif( FindInPath( "dbgeng.lib", GetEnv( "LIB" ) ) != NIL .AND. ( tmp1 := FindInPath( "pocc.exe" ) ) != NIL, tmp1, NIL ) }, "pocc64" }, ; { {|| FindInPath( "pocc.exe" ) }, "pocc" }, ; { {|| iif( ( tmp1 := FindInPath( "icl.exe" ) ) != NIL .AND. "itanium" $ Lower( tmp1 ), tmp1, NIL ) }, "iccia64" }, ; @@ -1772,7 +1773,7 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) #endif aCOMPSUP := { ; "mingw", "msvc", "bcc", "watcom", "icc", "pocc", "xcc", ; - "mingw64", "msvc64", "msvcia64", "iccia64", "pocc64" } + "mingw64", "msvc64", "msvcia64", "bcc64", "iccia64", "pocc64" } l_aLIBHBGT := { "gtwin", "gtwvt", "gtgui" } hbmk[ _HBMK_cGTDEFAULT ] := "gtwin" hbmk[ _HBMK_cDynLibPrefix ] := "" @@ -2047,7 +2048,7 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) /* Tweaks to compiler/platform environments */ - IF hbmk[ _HBMK_cCOMP ] == "bcc" + IF hbmk[ _HBMK_cCOMP ] == "bcc" /* TODO: Add support for bcc64 */ /* NOTE: Hack to tweak bcc setup to include one additional compiler lib dir to lib search path. */ IF Empty( cPath_CompC ) @@ -4562,7 +4563,7 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) cResPrefix := "OP res=" ENDIF - CASE hbmk[ _HBMK_cPLAT ] == "win" .AND. hbmk[ _HBMK_cCOMP ] == "bcc" + CASE hbmk[ _HBMK_cPLAT ] == "win" .AND. HBMK_ISCOMP( "bcc|bcc64" ) hbmk[ _HBMK_nCmd_FNF ] := _FNF_BCKSLASH #if defined( __PLATFORM__UNIX ) hbmk[ _HBMK_nCmd_Esc ] := _ESC_NIX @@ -4570,7 +4571,11 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) hbmk[ _HBMK_nCmd_Esc ] := _ESC_DBLQUOTE #endif IF hbmk[ _HBMK_lDEBUG ] - AAdd( hbmk[ _HBMK_aOPTC ], "-y -v" ) + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + AAdd( hbmk[ _HBMK_aOPTC ], "-g" ) + ELSE + AAdd( hbmk[ _HBMK_aOPTC ], "-v -y" ) + ENDIF AAdd( hbmk[ _HBMK_aOPTL ], "-v" ) ELSE AAdd( l_aCLEAN, PathSepToSelf( hb_FNameExtSet( hbmk[ _HBMK_cPROGNAME ], ".tds" ) ) ) @@ -4582,9 +4587,15 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) AAdd( hbmk[ _HBMK_aOPTC ], "-P" ) ENDIF cLibPrefix := NIL - cLibExt := ".lib" - cObjExt := ".obj" - cBin_Lib := "tlib.exe" + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + cLibExt := ".a" + cObjExt := ".o" + cBin_Lib := "tlib64.exe" + ELSE + cLibExt := ".lib" + cObjExt := ".obj" + cBin_Lib := "tlib.exe" + ENDIF /* Only forward slash is accepted here as option prefix. */ cOpt_Lib := "/P128 {FA} {OL} {LO}{SCRIPT}" cBin_LibHBX := cBin_Lib @@ -4593,13 +4604,25 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) cImpLibExt := cLibLibExt cLibObjPrefix := "-+ " cOptIncMask := "-I{DI}" - cBin_CompC := "bcc32.exe" + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + cBin_CompC := "bcc64.exe" + ELSE + cBin_CompC := "bcc32.exe" + ENDIF cBin_CompCPP := cBin_CompC cOpt_CompC := "-c -q -CP437" IF hbmk[ _HBMK_lOPTIM ] - cOpt_CompC += " -d -6 -O2 -OS -Ov -Oi -Oc" + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + cOpt_CompC += " -d -O2 -OS -Ov -Oc" + ELSE + cOpt_CompC += " -d -O2 -OS -Ov -Oc -Oi -6" + ENDIF + ENDIF + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + cLibBCC_CRTL := "cw64mt.lib" + ELSE + cLibBCC_CRTL := "cw32mt.lib" ENDIF - cLibBCC_CRTL := "cw32mt.lib" IF hbmk[ _HBMK_lWINUNI ] AAdd( hbmk[ _HBMK_aOPTC ], "-DUNICODE" ) ENDIF @@ -4608,7 +4631,11 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) IF AScan( hbmk[ _HBMK_aOPTC ], {| tmp | tmp == "-tW" } ) == 0 AAdd( hbmk[ _HBMK_aOPTC ], "-tWM" ) ELSE - cLibBCC_CRTL := "cw32.lib" + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + cLibBCC_CRTL := "cw64.lib" + ELSE + cLibBCC_CRTL := "cw32.lib" + ENDIF ENDIF ELSE AAdd( hbmk[ _HBMK_aOPTC ], "-tWM" ) @@ -4623,11 +4650,23 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) cBin_Res := "brcc32.exe" cOpt_Res := "{FR} {IR} -fo{OS}" cResExt := ".res" - cBin_Link := "ilink32.exe" + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + cBin_Link := "ilink64.exe" + ELSE + cBin_Link := "ilink32.exe" + ENDIF cBin_Dyn := cBin_Link - cOpt_Link := "-Gn -Tpe -L{DL} {FL} " + iif( hbmk[ _HBMK_lGUI ], "c0w32.obj", "c0x32.obj" ) + " {LO}, {OE}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import32.lib, {IM}, {LS}{SCRIPT}" - cOpt_Dyn := "-Gn -Tpd -L{DL} {FD} " + "c0d32.obj" + " {LO}, {OD}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import32.lib, {IM}, {LS}{SCRIPT}" - bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command_bcc( hbmk, "implib.exe -c {FI} {OL} {ID}", cSourceDLL, cTargetLib, cFlags ) } + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + cOpt_Link := "-Gn -Tpe -L{DL} {FL} " + iif( hbmk[ _HBMK_lGUI ], "c0w64.obj", "c0x64.obj" ) + " {LO}, {OE}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import64.lib, {IM}, {LS}{SCRIPT}" + cOpt_Dyn := "-Gn -Tpd -L{DL} {FD} " + "c0d64.obj" + " {LO}, {OD}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import64.lib, {IM}, {LS}{SCRIPT}" + ELSE + cOpt_Link := "-Gn -Tpe -L{DL} {FL} " + iif( hbmk[ _HBMK_lGUI ], "c0w32.obj", "c0x32.obj" ) + " {LO}, {OE}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import32.lib, {IM}, {LS}{SCRIPT}" + cOpt_Dyn := "-Gn -Tpd -L{DL} {FD} " + "c0d32.obj" + " {LO}, {OD}, " + iif( hbmk[ _HBMK_lMAP ], "{OM}", "nul" ) + ", {LL} {LB} {LF} " + cLibBCC_CRTL + " import32.lib, {IM}, {LS}{SCRIPT}" + ENDIF + IF hbmk[ _HBMK_cCOMP ] == "bcc" + /* TODO: Add support for bcc64/mkexp */ + bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command_bcc( hbmk, "implib.exe -c {FI} {OL} {ID}", cSourceDLL, cTargetLib, cFlags ) } + ENDIF cLibPathPrefix := "" cLibPathSep := ";" IF hbmk[ _HBMK_lMAP ] @@ -4649,8 +4688,13 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) [vszakats] */ /* AAdd( hbmk[ _HBMK_aOPTL ], "-Gi" ) */ /* AAdd( hbmk[ _HBMK_aOPTD ], "-Gi" ) */ - cBin_Post := "implib.exe" - cOpt_Post := "-c {OI} {OB}" + IF hbmk[ _HBMK_cCOMP ] == "bcc64" + cBin_Post := "mkexp.exe" + cOpt_Post := "{OI} {OB}" + ELSE + cBin_Post := "implib.exe" + cOpt_Post := "-c {OI} {OB}" + ENDIF ENDIF IF ! Empty( hbmk[ _HBMK_cWorkDir ] ) AAdd( hbmk[ _HBMK_aOPTC ], "-n" + FNameEscape( hbmk[ _HBMK_cWorkDir ], hbmk[ _HBMK_nCmd_Esc ], hbmk[ _HBMK_nCmd_FNF ] ) ) @@ -4663,7 +4707,9 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) ENDIF ENDIF ENDIF - l_aLIBSHARED := { cHarbourDyn + cDL_Version_Alter + "-bcc" + cLibExt } + IF hbmk[ _HBMK_cCOMP ] == "bcc" + l_aLIBSHARED := { cHarbourDyn + cDL_Version_Alter + "-bcc" + cLibExt } + ENDIF l_aLIBSHAREDPOST := { "hbmainstd", "hbmainwin" } l_aLIBSYS := ArrayAJoin( { l_aLIBSYS, l_aLIBSYSCORE, l_aLIBSYSMISC } ) @@ -5698,7 +5744,7 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) tmp := "" CASE HBMK_ISCOMP( "gcc|mingw|mingw64|mingwarm" ) tmp := "__attribute__ (( dllimport ))" - CASE HBMK_ISCOMP( "bcc|watcom" ) + CASE HBMK_ISCOMP( "bcc|bcc64|watcom" ) tmp := "__declspec( dllimport )" OTHERWISE tmp := "_declspec( dllimport )" @@ -6144,7 +6190,7 @@ FUNCTION hbmk( aArgs, nArgTarget, /* @ */ lPause, nLevel ) cFile += "#endif" + Chr( 10 ) cFile += 'CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "' + PathSepToForward( hbmk[ _HBMK_cMANIFEST ] ) + '"' + Chr( 10 ) ENDIF - IF ! Empty( hbmk[ _HBMK_aICON ] ) .AND. !( hbmk[ _HBMK_cCOMP ] == "bcc" ) /* BCC cannot handle certain new .ico files */ + IF ! Empty( hbmk[ _HBMK_aICON ] ) .AND. ! HBMK_ISCOMP( "bcc|bcc64" ) /* BCC cannot handle certain new .ico files */ IF hbmk[ _HBMK_cPLAT ] == "os2" AEval( hbmk[ _HBMK_aICON ], {| tmp, tmp1 | cFile += "ICON " + hb_ntos( tmp1 ) + ' DISCARDABLE "' + PathSepToForward( tmp ) + '"' + Chr( 10 ) } ) ELSE @@ -8716,7 +8762,7 @@ STATIC FUNCTION FindLib( hbmk, cLib, aLIBPATH, cLibPrefix, cLibExt ) LOCAL tmp /* Check libs in their full paths */ - IF HBMK_ISCOMP( "msvc|msvc64|msvcarm|bcc|pocc|pocc64|poccarm|watcom" ) + IF HBMK_ISCOMP( "msvc|msvc64|msvcarm|bcc|bcc64|pocc|pocc64|poccarm|watcom" ) IF ! Empty( hb_FNameDir( cLib ) ) IF hb_FileExists( cLib := hb_FNameExtSet( cLib, cLibExt ) ) RETURN cLib @@ -8731,7 +8777,7 @@ STATIC FUNCTION FindLib( hbmk, cLib, aLIBPATH, cLibPrefix, cLibExt ) ENDIF /* Check in current dir */ - IF HBMK_ISCOMP( "msvc|msvc64|msvcarm|bcc|pocc|pocc64|poccarm|watcom" ) + IF HBMK_ISCOMP( "msvc|msvc64|msvcarm|bcc|bcc64|pocc|pocc64|poccarm|watcom" ) IF ! Empty( tmp := LibExists( hbmk, "", cLib, cLibPrefix, cLibExt ) ) RETURN tmp ENDIF @@ -12121,6 +12167,7 @@ STATIC FUNCTION hbmk_CPU( hbmk ) RETURN "x86" CASE hbmk[ _HBMK_cCOMP ] == "mingw64" .OR. ; hbmk[ _HBMK_cCOMP ] == "msvc64" .OR. ; + hbmk[ _HBMK_cCOMP ] == "bcc64" .OR. ; hbmk[ _HBMK_cCOMP ] == "pocc64" RETURN "x86_64" CASE hbmk[ _HBMK_cCOMP ] == "msvcia64" .OR. ; @@ -12186,6 +12233,7 @@ FUNCTION hbmk_KEYW( hbmk, cFileName, cKeyword, cValue, cOperator ) CASE "allgcc" ; RETURN HBMK_ISCOMP( "gcc|mingw|mingw64|mingwarm|djgpp|gccomf|clang|open64|pcc" ) CASE "allmingw" ; RETURN HBMK_ISCOMP( "mingw|mingw64|mingwarm" ) CASE "allmsvc" ; RETURN HBMK_ISCOMP( "msvc|msvc64|msvcia64|msvcarm" ) + CASE "allbcc" ; RETURN HBMK_ISCOMP( "bcc|bcc64" ) CASE "allpocc" ; RETURN HBMK_ISCOMP( "pocc|pocc64|poccarm" ) CASE "allicc" ; RETURN HBMK_ISCOMP( "icc|iccia64" ) CASE "xhb" ; RETURN _HBMODE_IS_XHB( hbmk[ _HBMK_nHBMODE ] ) @@ -12205,7 +12253,7 @@ FUNCTION hbmk_KEYW( hbmk, cFileName, cKeyword, cValue, cOperator ) "|bsd|hpux|sunos|beos|qnx|android|vxworks|symbian|linux|darwin|cygwin|minix|aix" +; "|msvc|msvc64|msvcia64|msvcarm" +; "|pocc|pocc64|poccarm|xcc" +; - "|mingw|mingw64|mingwarm|bcc|watcom" +; + "|mingw|mingw64|mingwarm|bcc|bcc64|watcom" +; "|gcc|gccomf|djgpp" +; "|hblib|hbdyn|hbdynvm|hbimplib|hbexe" +; "|icc|iccia64|clang|open64|sunpro|diab|pcc" +; @@ -14505,7 +14553,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong ) I_( "Supported values for each supported value:" ), ; " - linux : gcc, clang, icc, watcom, sunpro, open64, pcc", ; " - darwin : gcc, clang, icc, pcc", ; - " - win : mingw, msvc, bcc, watcom, icc, pocc, xcc,", ; + " - win : mingw, msvc, bcc, bcc64, watcom, icc, pocc, xcc,", ; " mingw64, msvc64, msvcia64, iccia64, pocc64", ; " - wce : mingwarm, mingw, msvcarm, poccarm", ; " - os2 : gcc, gccomf, watcom", ;