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", ;