diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 61fed41449..6c63c18bbf 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,28 @@ The license applies to all entries newer than 2009-04-28. */ +2010-07-15 20:24 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + + Added experimental -cpu option. (not at the level + of comp/plat internally, as there won't be separate + subdir open for different cpu builds created in parallel) + + Added some untested support for vxworks/gcc/arm. + + * utils/hbmk2/hbmk2.hbp + + Synced with Makefile. + + * config/global.mk + ! Fixed to default HB_CPU value to x86 for vxworks. + + Exports HB_CPU. + + * config/vxworks/libs.mk + * config/vxworks/gcc.mk + + Added experimental support to select arm target by + using HB_CPU=arm. + + * config/wce/msvcarm.mk + ! Missed re-xmastree changed done now. (for pre GNU Make 3.81 compatibility) + 2010-07-15 19:20 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * include/hbthread.h ! Hacked around collision between vxWorks headers. @@ -51,6 +73,7 @@ - Unrecoverable error 9998: Harbour terminal (GT) initialization failure when running hbtest. - GPF when running hbmk2 and hbrun. (hbformat, hbi18 startup fine) + It's related to MT mode. 2010-07-15 17:34 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * external/zlib/zlib.dif diff --git a/harbour/config/global.mk b/harbour/config/global.mk index 398739acdb..158a46f200 100644 --- a/harbour/config/global.mk +++ b/harbour/config/global.mk @@ -547,6 +547,9 @@ ifeq ($(HB_PLATFORM),) endif ifneq ($(findstring vxworks,$(WIND_PLATFORM)),) HB_PLATFORM := vxworks + ifeq ($(HB_CPU),) + HB_CPU := x86 + endif endif ifneq ($(HB_PLATFORM),) HB_PLAT_AUTO := (autodetected) @@ -1211,6 +1214,8 @@ ifeq ($(HB_INIT_DONE),) $(info ! HB_COMPILER: $(HB_COMPILER)$(HB_COMP_VER) $(HB_COMP_AUTO)) endif +export HB_CPU + ifeq ($(HB_HOST_PKGM),) ifeq ($(HB_PLATFORM),darwin) ifneq ($(wildcard /sw/bin/fink),) diff --git a/harbour/config/vxworks/gcc.mk b/harbour/config/vxworks/gcc.mk index b611434d49..1b9ac686e6 100644 --- a/harbour/config/vxworks/gcc.mk +++ b/harbour/config/vxworks/gcc.mk @@ -16,6 +16,20 @@ LIB_EXT := .a HB_DYN_COPT := -DHB_DYNLIB -fpic +ifeq ($(HB_CPU),x86) + CFLAGS += -D_VX_CPU=_VX_SIMPENTIUM + ifeq ($(HB_CCPOSTFIX),) + export HB_CCPOSTFIX := pentium + endif +else +ifeq ($(HB_CPU),arm) + CFLAGS += -DARMEL -D_VX_ARMARCH7 + ifeq ($(HB_CCPOSTFIX),) + export HB_CCPOSTFIX := arm + endif +endif +endif + CC := $(HB_CCACHE) $(HB_CCPREFIX)$(HB_CMP)$(HB_CCPOSTFIX) CC_IN := -c CC_OUT := -o @@ -28,9 +42,7 @@ CFLAGS += -I. -I$(HB_INC_COMPILE) CFLAGS += -I$(WIND_USR)/h -I$(WIND_USR)/h/wrn/coreip CFLAGS += -fno-strict-aliasing CFLAGS += -D_C99 -D_HAS_C9X -# ? CFLAGS += -D_VX_TOOL_FAMILY=gnu -D_VX_TOOL=gnu -CFLAGS += -D_VX_CPU=_VX_SIMPENTIUM ifneq ($(HB_BUILD_WARN),no) CFLAGS += -W -Wall diff --git a/harbour/config/vxworks/libs.mk b/harbour/config/vxworks/libs.mk index db9451d2c1..fef57c21f3 100644 --- a/harbour/config/vxworks/libs.mk +++ b/harbour/config/vxworks/libs.mk @@ -4,5 +4,12 @@ SYSLIBPATHS := -SYSLIBPATHS_BIN := $(WIND_BASE)/target/lib/usr/lib/simpentium/SIMPENTIUM/common -SYSLIBPATHS_DYN := $(WIND_BASE)/target/lib/usr/lib/simpentium/SIMPENTIUM/common/PIC +ifeq ($(HB_CPU),x86) + SYSLIBPATHS_BIN := $(WIND_BASE)/target/lib/usr/lib/simpentium/SIMPENTIUM/common + SYSLIBPATHS_DYN := $(WIND_BASE)/target/lib/usr/lib/simpentium/SIMPENTIUM/common/PIC +else +ifeq ($(HB_CPU),arm) + SYSLIBPATHS_BIN := $(WIND_BASE)/target/lib/usr/lib/arm/ARMARCH7/common + SYSLIBPATHS_DYN := $(WIND_BASE)/target/lib/usr/lib/arm/ARMARCH7/common/PIC +endif +endif diff --git a/harbour/config/wce/msvcarm.mk b/harbour/config/wce/msvcarm.mk index fd82deba88..92f96badf0 100644 --- a/harbour/config/wce/msvcarm.mk +++ b/harbour/config/wce/msvcarm.mk @@ -23,13 +23,19 @@ CFLAGS += -nologo ifeq ($(HB_COMPILER),msvcarm) CFLAGS += -D_M_ARM -DARM -D_ARM_ -else ifeq ($(HB_COMPILER),msvcsh) +else +ifeq ($(HB_COMPILER),msvcsh) CFLAGS += -D_M_SH -DSHx -else ifeq ($(HB_COMPILER),msvcmips) +else +ifeq ($(HB_COMPILER),msvcmips) CFLAGS += -D_M_MRX000=4000 -DMIPS -D_MIPS_ -else ifeq ($(HB_COMPILER),msvc) +else +ifeq ($(HB_COMPILER),msvc) CFLAGS += -D_M_IX86 -D_X86_ endif +endif +endif +endif # MSVS 2005 SP1 also supports it, but we only enable it for 2008 and upper. ifeq ($(filter $(HB_COMPILER_VER),1200 1300 1310 1400),) diff --git a/harbour/utils/hbmk2/hbmk2.hbp b/harbour/utils/hbmk2/hbmk2.hbp index 738518ac47..2012dff573 100644 --- a/harbour/utils/hbmk2/hbmk2.hbp +++ b/harbour/utils/hbmk2/hbmk2.hbp @@ -8,6 +8,9 @@ -ldflag={allmsvc}-dynamicbase -ldflag={allmsvc}-fixed:no +{HB_HAS_GPM}-prgflag=-DHB_HAS_GPM +{HB_HAS_WATT}-prgflag=-DHB_HAS_WATT + -nulrdd -mt hbmk2.prg diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index bcb866500e..0547e5505a 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -145,6 +145,7 @@ REQUEST hbmk_KEYW #define _TARG_PLAT 1 #define _TARG_COMP 2 +#define _TARG_CPU 3 #define _PAR_cParam 1 #define _PAR_cFileName 2 @@ -904,6 +905,9 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) IF ! Empty( GetEnv( "HB_COMPILER" ) ) cEnv += " -compiler=" + GetEnv( "HB_COMPILER" ) ENDIF + IF ! Empty( GetEnv( "HB_CPU" ) ) + cEnv += " -cpu=" + GetEnv( "HB_CPU" ) + ENDIF cEnv := AllTrim( cEnv ) IF ! Empty( cEnv ) @@ -921,11 +925,12 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) DO CASE CASE cParamL == "-quiet" ; hbmk[ _HBMK_lQuiet ] := .T. ; hbmk[ _HBMK_lInfo ] := .F. CASE cParamL == "-quiet-" ; hbmk[ _HBMK_lQuiet ] := .F. - CASE Left( cParamL, 6 ) == "-comp=" ; ParseCOMPPLAT( hbmk, SubStr( cParam, 7 ), _TARG_COMP ) - CASE Left( cParamL, 10 ) == "-compiler=" ; ParseCOMPPLAT( hbmk, SubStr( cParam, 11 ), _TARG_COMP ) - CASE Left( cParamL, 6 ) == "-plat=" ; ParseCOMPPLAT( hbmk, SubStr( cParam, 7 ), _TARG_PLAT ) - CASE Left( cParamL, 10 ) == "-platform=" ; ParseCOMPPLAT( hbmk, SubStr( cParam, 11 ), _TARG_PLAT ) - CASE Left( cParamL, 6 ) == "-arch=" ; ParseCOMPPLAT( hbmk, SubStr( cParam, 7 ), _TARG_PLAT ) /* Compatibility */ + CASE Left( cParamL, 6 ) == "-comp=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 7 ), _TARG_COMP ) + CASE Left( cParamL, 10 ) == "-compiler=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 11 ), _TARG_COMP ) + CASE Left( cParamL, 6 ) == "-plat=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 7 ), _TARG_PLAT ) + CASE Left( cParamL, 10 ) == "-platform=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 11 ), _TARG_PLAT ) + CASE Left( cParamL, 6 ) == "-arch=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 7 ), _TARG_PLAT ) /* Compatibility */ + CASE Left( cParamL, 5 ) == "-cpu=" ; ParseCOMPPLATCPU( hbmk, SubStr( cParam, 6 ), _TARG_CPU ) CASE Left( cParamL, 7 ) == "-build=" ; hbmk[ _HBMK_cBUILD ] := SubStr( cParam, 8 ) CASE Left( cParamL, 6 ) == "-build" ; hbmk[ _HBMK_lStopAfterHarbour ] := .T. CASE Left( cParamL, 6 ) == "-lang=" ; hbmk[ _HBMK_cUILNG ] := SubStr( cParam, 7 ) ; SetUILang( hbmk ) @@ -1494,6 +1499,10 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) hbmk[ _HBMK_aINCPATH ] := {} hbmk[ _HBMK_aLIBPATH ] := {} + IF Empty( hbmk[ _HBMK_cCPU ] ) + hbmk[ _HBMK_cCPU ] := hbmk_CPU( hbmk ) + ENDIF + /* Tweaks to compiler environments */ DO CASE @@ -1693,6 +1702,7 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) Left( cParamL, 6 ) == "-plat=" .OR. ; Left( cParamL, 10 ) == "-platform=" .OR. ; Left( cParamL, 6 ) == "-arch=" .OR. ; /* Compatibility */ + Left( cParamL, 5 ) == "-cpu=" .OR. ; Left( cParamL, 7 ) == "-build=" .OR. ; Left( cParamL, 6 ) == "-lang=" .OR. ; Left( cParamL, 7 ) == "-width=" .OR. ; @@ -2745,10 +2755,21 @@ FUNCTION hbmk2( aArgs, /* @ */ lPause ) AAdd( hbmk[ _HBMK_aOPTC ], "-D_HAS_C9X" ) AAdd( hbmk[ _HBMK_aINCPATH ], PathSepToSelf( GetEnv( "WIND_USR" ) + "/h" ) ) AAdd( hbmk[ _HBMK_aINCPATH ], PathSepToSelf( GetEnv( "WIND_USR" ) + "/h/wrn/coreip" ) ) - IF hbmk[ _HBMK_lCreateDyn ] - AAdd( hbmk[ _HBMK_aLIBPATH ], PathSepToSelf( GetEnv( "WIND_BASE" ) + "/target/lib/usr/lib/simpentium/SIMPENTIUM/common/PIC" ) ) - ELSE - AAdd( hbmk[ _HBMK_aLIBPATH ], PathSepToSelf( GetEnv( "WIND_BASE" ) + "/target/lib/usr/lib/simpentium/SIMPENTIUM/common" ) ) + IF hbmk[ _HBMK_cCPU ] == "arm" + AAdd( hbmk[ _HBMK_aOPTC ], "-DARMEL" ) + ENDIF + SWITCH hbmk[ _HBMK_cCPU ] + CASE "x86" ; tmp := "simpentium/SIMPENTIUM" ; EXIT + CASE "arm" ; tmp := "arm/ARMARCH7" ; EXIT + OTHERWISE + tmp := NIL + ENDSWITCH + IF tmp != NIL + IF hbmk[ _HBMK_lCreateDyn ] + AAdd( hbmk[ _HBMK_aLIBPATH ], PathSepToSelf( GetEnv( "WIND_BASE" ) + "/target/lib/usr/lib/" + tmp + "/common/PIC" ) ) + ELSE + AAdd( hbmk[ _HBMK_aLIBPATH ], PathSepToSelf( GetEnv( "WIND_BASE" ) + "/target/lib/usr/lib/" + tmp + "/common" ) ) + ENDIF ENDIF ENDIF cOpt_CompC += " {FC}" @@ -8521,7 +8542,7 @@ STATIC FUNCTION MacroProc( hbmk, cString, cFileName, cMacroPrefix ) CASE "HB_BUILD" cMacro := hbmk[ _HBMK_cBUILD ] ; EXIT CASE "HB_CPU" - cMacro := hbmk_CPU( hbmk ) ; EXIT + cMacro := hbmk[ _HBMK_cCPU ] ; EXIT CASE "HB_WORK" cMacro := _WORKDIR_BASE_ ; EXIT CASE "HB_WORKDYNSUB" @@ -9725,7 +9746,7 @@ STATIC FUNCTION hbmk_CPU( hbmk ) hbmk[ _HBMK_cCOMP ] $ "mingw|cygwin|msvc|pocc|watcom|bcc|xcc" .OR. ; ( hbmk[ _HBMK_cPLAT ] == "win" .AND. hbmk[ _HBMK_cCOMP ] == "icc" ) RETURN "x86" - CASE hbmk[ _HBMK_cCOMP ] $ "gcc|icc|clang|sunpro" + CASE hbmk[ _HBMK_cCOMP ] $ "gcc|icc|clang|sunpro|diab" /* TOFIX: This isn't necessarily correct, since these inherit the default CPU architecture from OS default, by and large, and targets can be overridden using user options. */ @@ -9795,7 +9816,7 @@ FUNCTION hbmk_KEYW( hbmk, cKeyword, cValue ) "|mingw|mingw64|mingwarm|cygwin|bcc|watcom" + ; "|gcc|gccomf|djgpp" + ; "|hblib|hbdyn|hbdynvm|hbimplib|hbexe" + ; - "|icc|iccia64|clang|open64|sunpro" + ; + "|icc|iccia64|clang|open64|sunpro|diab" + ; "|x86|x86_64|ia64|arm|mips|sh" ) tmp := GetEnv( cKeyword ) IF cValue != NIL @@ -9811,7 +9832,7 @@ FUNCTION hbmk_KEYW( hbmk, cKeyword, cValue ) RETURN .F. -STATIC PROCEDURE ParseCOMPPLAT( hbmk, cString, nMainTarget ) +STATIC PROCEDURE ParseCOMPPLATCPU( hbmk, cString, nMainTarget ) LOCAL aToken := hb_ATokens( Lower( cString ), "/", .T., .T. ) LOCAL cToken @@ -9820,6 +9841,7 @@ STATIC PROCEDURE ParseCOMPPLAT( hbmk, cString, nMainTarget ) SWITCH nMainTarget CASE _TARG_PLAT ; hbmk[ _HBMK_cPLAT ] := AllTrim( cString ) ; EXIT CASE _TARG_COMP ; hbmk[ _HBMK_cCOMP ] := AllTrim( cString ) ; EXIT + CASE _TARG_CPU ; hbmk[ _HBMK_cCPU ] := AllTrim( cString ) ; EXIT ENDSWITCH ENDIF ELSE @@ -9828,8 +9850,9 @@ STATIC PROCEDURE ParseCOMPPLAT( hbmk, cString, nMainTarget ) SWITCH cToken:__enumIndex() CASE 1 ; hbmk[ _HBMK_cPLAT ] := AllTrim( cToken ) ; EXIT CASE 2 ; hbmk[ _HBMK_cCOMP ] := AllTrim( cToken ) ; EXIT + CASE 3 ; hbmk[ _HBMK_cCPU ] := AllTrim( cToken ) ; EXIT ENDSWITCH - IF cToken:__enumIndex() > 2 + IF cToken:__enumIndex() > 3 EXIT ENDIF ENDIF @@ -10479,6 +10502,7 @@ STATIC PROCEDURE ShowHelp( hbmk, lLong ) NIL,; { "-plat[form]=" , I_( "select target platform." ) },; { "-comp[iler]=" , I_( "select C compiler.\nSpecial value:\n - bld: use original build settings (default on *nix)" ) },; + { "-cpu=" , I_( "select target CPU. (experimental)" ) },; { "-build=" , I_( "use a specific build name" ) },; { "-lang=" , I_( "override default language. Similar to HB_LANG envvar." ) },; { "-width=" , I_( "set output width to characters (0=unlimited)." ) },;