diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 10fa5c7189..1595543d24 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,14 @@ 2002-12-01 23:12 UTC+0100 Foo Bar */ +2003-12-02 15:23 UTC+0100 Lorenzo Fiorini + * source/vm/hvm.c + * source/vm/mainwin.c + * bin/bld.bat + * config/dos/watcom.cf + + config/w32/watcom.cf + ! added support to OpenWatcom DOS/Win32 borrowed from xHarbour + 2003-11-24 18:32 UTC+0100 Lorenzo Fiorini * source/compiler/gencobj.c ! fixed to allow = for the C compiler options diff --git a/harbour/bin/bld.bat b/harbour/bin/bld.bat index 0573d8ddc2..b266c65ff2 100644 --- a/harbour/bin/bld.bat +++ b/harbour/bin/bld.bat @@ -55,14 +55,14 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\ echo - w32 (HB_GT_LIB=gtwin by default) echo - linux (HB_GT_LIB=gtstd by default) echo - os2 (HB_GT_LIB=gtos2 by default) - echo. - pause + echo. + pause echo HB_COMPILER: echo - When HB_ARCHITECTURE=dos echo - bcc16 (Borland C++ 3.x, 4.x, 5.0x, DOS 16-bit) echo - djgpp (Delorie GNU C, DOS 32-bit) echo - rxs32 (EMX/RSXNT/DOS GNU C, DOS 32-bit) - echo - watcom (Watcom C++ 9.x, 10.x, 11.x, DOS 32-bit) + echo - watcom (OpenWatcom, DOS 32-bit) echo - When HB_ARCHITECTURE=w32 echo - bcc32 (Borland C++ 4.x, 5.x, Windows 32-bit) echo - gcc (Cygnus/Cygwin GNU C, Windows 32-bit) @@ -70,13 +70,14 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\ echo - rxsnt (EMX/RSXNT/Win32 GNU C, Windows 32-bit) echo - icc (IBM Visual Age C++, Windows 32-bit) echo - msvc (Microsoft Visual C++, Windows 32-bit) + echo - watcom (OpenWatcom, Windows 32-bit) echo - When HB_ARCHITECTURE=linux echo - gcc (GNU C, 32-bit) echo - When HB_ARCHITECTURE=os2 echo - gcc (EMX GNU C, OS/2 32-bit) echo - icc (IBM Visual Age C++ 3.0, OS/2 32-bit) - echo. - pause + echo. + pause echo HB_GT_LIB: echo - gtstd (Standard streaming) (for all architectures) echo - gtdos (DOS console) (for dos architecture) @@ -109,7 +110,7 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\ :COMPILE - %HB_BIN_INSTALL%\harbour %1.prg -n -i%HB_INC_INSTALL% %2 %3 %HARBOURFLAGS% + %HB_BIN_INSTALL%\harbour %1.prg -n -q0 -gc0 -i%HB_INC_INSTALL% %2 %3 %HARBOURFLAGS% :A_DOS @@ -132,6 +133,8 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\ echo rdd.lib >> build.tmp echo macro.lib >> build.tmp echo pp.lib >> build.tmp + echo dbfdbt.lib >> build.tmp + echo dbffpt.lib >> build.tmp echo dbfntx.lib >> build.tmp echo dbfcdx.lib >> build.tmp echo common.lib >> build.tmp @@ -140,7 +143,7 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\ goto END :A_DOS_BCC16_NOT - + if not "%HB_COMPILER%" == "djgpp" goto A_DOS_DJGPP_NOT echo %1.c > build.tmp @@ -155,9 +158,11 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\ echo -lvm >> build.tmp echo -lmacro >> build.tmp echo -lpp >> build.tmp - echo -ldbfnt >> build.tmp - echo -ldbfcd >> build.tmp - echo -lcommo >> build.tmp + echo -ldbfdbt >> build.tmp + echo -ldbffpt >> build.tmp + echo -ldbfntx >> build.tmp + echo -ldbfcdx >> build.tmp + echo -lcommon >> build.tmp echo -lm >> build.tmp gcc @build.tmp del build.tmp @@ -165,22 +170,77 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\ :A_DOS_DJGPP_NOT - if "%HB_COMPILER%" == "rsx32" gcc %1.c -Zrsx32 %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -ldebug -lvm -lrtl -l%_HB_GT_LIB% -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfntx -ldbfcdx -lcommon + if not "%HB_COMPILER%" == "rsx32" GOTO A_DOS_RSX32_NOT + + gcc %1.c -Zrsx32 %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -ldebug -lvm -lrtl -l%_HB_GT_LIB% -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfntx -ldbfcdx -lcommon goto END +:A_DOS_RSX32_NOT + + if not "%HB_COMPILER%" == "watcom" goto END + + wpp386 -j -w3 -d2 -5s -5r -fp5 -oxehtz -zq -zt0 -bt=DOS %1.c -fo=%1.obj + echo debug all OP osn=DOS OP stack=65536 OP CASEEXACT OP stub=cwstub.exe NAME %1.exe > build.tmp + echo FILE %1.obj >> build.tmp + echo LIB debug.lib >> build.tmp + echo LIB vm.lib >> build.tmp + echo LIB rtl.lib >> build.tmp + echo LIB %_HB_GT_LIB%.lib >> build.tmp + echo LIB lang.lib >> build.tmp + echo LIB rdd.lib >> build.tmp + echo LIB macro.lib >> build.tmp + echo LIB pp.lib >> build.tmp + echo LIB dbfntx.lib >> build.tmp + echo LIB dbfcdx.lib >> build.tmp + echo LIB dbfdbt.lib >> build.tmp + echo LIB dbffpt.lib >> build.tmp + echo LIB common.lib >> build.tmp + wlink @build.tmp + del build.tmp + goto END + :A_W32 - if not "%HB_ARCHITECTURE%" == "w32" goto A_OS2 - +if not "%HB_ARCHITECTURE%" == "w32" goto A_OS2 if "%HB_GT_LIB%" == "" set _HB_GT_LIB=gtwin if "%HB_COMPILER%" == "bcc32" bcc32 -O2 -d %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% %1.c debug.lib vm.lib rtl.lib %_HB_GT_LIB%.lib lang.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib common.lib - if "%HB_COMPILER%" == "gcc" gcc %1.c -o%1.exe %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -ldebug -lvm -lrtl -l%_HB_GT_LIB% -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfntx -ldbfcdx -lcommon - if "%HB_COMPILER%" == "mingw32" gcc %1.c -o%1.exe %CFLAGS% -mno-cygwin -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -ldebug -lvm -lrtl -l%_HB_GT_LIB% -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfntx -ldbfcdx -lcommon + + if "%HB_COMPILER%" == "gcc" gcc %1.c -o%1.exe %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -ldebug -lvm -lrtl -l%_HB_GT_LIB% -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfdbt -ldbffpt -ldbfntx -ldbfcdx -lcommon + if "%HB_COMPILER%" == "mingw32" gcc %1.c -o%1.exe %CFLAGS% -mno-cygwin -I%HB_INC_INSTALL% %HB_INC_TEMP% -L%HB_LIB_INSTALL% -ldebug -lvm -lrtl -l%_HB_GT_LIB% -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfdbt -ldbffpt -ldbfntx -ldbfcdx -lcommon if "%HB_COMPILER%" == "rsxnt" gcc %1.c -Zwin32 %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -ldebug -lvm -lrtl -l%_HB_GT_LIB% -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfntx -ldbfcdx -lcommon + if "%HB_COMPILER%" == "msvc" cl -TP -W3 %CFLAGS% -I%HB_INC_INSTALL% %1.c /link /subsystem:CONSOLE %HB_LIB_INSTALL%\debug.lib %HB_LIB_INSTALL%\vm.lib %HB_LIB_INSTALL%\rtl.lib %HB_LIB_INSTALL%\%_HB_GT_LIB%.lib %HB_LIB_INSTALL%\lang.lib %HB_LIB_INSTALL%\rdd.lib %HB_LIB_INSTALL%\macro.lib %HB_LIB_INSTALL%\pp.lib %HB_LIB_INSTALL%\dbfntx.lib %HB_LIB_INSTALL%\dbfcdx.lib %HB_LIB_INSTALL%\common.lib user32.lib winspool.lib if "%HB_COMPILER%" == "msvc" echo Ignore LNK4033 warning +:C_WATCOM + if not "%HB_COMPILER%" == "watcom" goto end + + wpp386 -j -w3 -d2 -5s -5r -fp5 -oxehtz -zq -zt0 -mf -bt=NT %1.c -fo=%1.obj + echo debug all OP osn=NT OP stack=65536 OP CASEEXACT NAME %1.exe > build.tmp + echo FILE %1.obj >> build.tmp + echo LIB debug.lib >> build.tmp + echo LIB vm.lib >> build.tmp + echo LIB rtl.lib >> build.tmp + echo LIB %_HB_GT_LIB%.lib >> build.tmp + echo LIB lang.lib >> build.tmp + echo LIB macro.lib >> build.tmp + echo LIB pp.lib >> build.tmp + echo LIB dbfntx.lib >> build.tmp + echo LIB dbfcdx.lib >> build.tmp + echo LIB dbfdbt.lib >> build.tmp + echo LIB dbffpt.lib >> build.tmp + echo LIB rdd.lib >> build.tmp + echo LIB common.lib >> build.tmp + echo LIB kernel32.lib >> build.tmp + echo LIB user32.lib >> build.tmp + echo LIB winspool.lib >> build.tmp + echo LIB oleaut32.lib >> build.tmp + echo LIB uuid.lib >> build.tmp + wlink @build.tmp + del build.tmp + goto END + goto END :A_OS2 @@ -189,8 +249,8 @@ if "%HB_INC_INSTALL%" == "" set HB_INC_INSTALL=..\include\ if "%HB_GT_LIB%" == "" set _HB_GT_LIB=gtos2 - if "%HB_COMPILER%" == "gcc" gcc %1.c %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -ldebug -lvm -lrtl -l%_HB_GT_LIB% -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfntx -ldbfcdx -lcommon - if "%HB_COMPILER%" == "icc" icc /Gs+ /W2 /Se /Sd+ /Ti+ /C- /Tp %CFLAGS% -I%HB_INC_INSTALL% %1.c %HB_LIB_INSTALL%\debug.lib %HB_LIB_INSTALL%\vm.lib %HB_LIB_INSTALL%\rtl.lib %HB_LIB_INSTALL%\%_HB_GT_LIB%.lib %HB_LIB_INSTALL%\lang.lib %HB_LIB_INSTALL%\rdd.lib %HB_LIB_INSTALL%\rtl.lib %HB_LIB_INSTALL%\vm.lib %HB_LIB_INSTALL%\macro.lib %HB_LIB_INSTALL%\pp.lib %HB_LIB_INSTALL%\dbfntx.lib %HB_LIB_INSTALL%\dbfcdx.lib %HB_LIB_INSTALL%\common.lib + if "%HB_COMPILER%" == "gcc" gcc %1.c %CFLAGS% -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% -ldebug -lvm -lrtl -l%_HB_GT_LIB% -llang -lrdd -lrtl -lvm -lmacro -lpp -ldbfdbt -ldbffpt -ldbfntx -ldbfcdx -lcommon + if "%HB_COMPILER%" == "icc" icc /Gs+ /W2 /Se /Sd+ /Ti+ /C- /Tp %CFLAGS% -I%HB_INC_INSTALL% %1.c %HB_LIB_INSTALL%\debug.lib %HB_LIB_INSTALL%\vm.lib %HB_LIB_INSTALL%\rtl.lib %HB_LIB_INSTALL%\%_HB_GT_LIB%.lib %HB_LIB_INSTALL%\lang.lib %HB_LIB_INSTALL%\rdd.lib %HB_LIB_INSTALL%\rtl.lib %HB_LIB_INSTALL%\vm.lib %HB_LIB_INSTALL%\macro.lib %HB_LIB_INSTALL%\pp.lib %HB_LIB_INSTALL%\dbfdbt.lib %HB_LIB_INSTALL%\dbffpt.lib %HB_LIB_INSTALL%\dbfntx.lib %HB_LIB_INSTALL%\dbfcdx.lib %HB_LIB_INSTALL%\common.lib goto END :A_LINUX diff --git a/harbour/config/dos/watcom.cf b/harbour/config/dos/watcom.cf index 325feb4539..c97a0d0375 100644 --- a/harbour/config/dos/watcom.cf +++ b/harbour/config/dos/watcom.cf @@ -11,29 +11,39 @@ EXE_EXT = .exe LIB_PREF = LIB_EXT = .lib -$(HB_ARCHITECTURE)_$(HB_COMPILER)_GRANDP = $(subst /,\\,$(GRANDP)) +$(HB_ARCHITECTURE)_$(HB_COMPILER)_GRANDP = $(subst /,\,$(GRANDP)) CC = wpp386 CC_IN = CC_OUT = -fo= -CPPFLAGS = -d2 -w2 -5r -zq -zt0 -bt=DOS4G -CFLAGS := -i$(subst \,\\,$(WATCOM))\\h -i$(subst /,\\,$(HB_INC_COMPILE)) -i. + +# important: -j is necessary for proper build +CPPFLAGS = -j -w3 -d2 -5s -5r -fp5 -oxehtz -zq -zt0 -bt=DOS +CFLAGS := -i$(subst /,\,$(HB_INC_COMPILE)) -i. + +# work arround to DOS command line size limit +export WPP386 := $(CPPFLAGS) +CPPFLAGS = + +ifeq ($(HB_LEX),SIMPLEX) +CFLAGS += -DSIMPLEX +endif # Note: The empty line directly before 'endef' HAVE TO exist! # It causes that the 'echo' command is separated by LF define link_file -$(COMSPEC) /E:2048 /Cecho FILE $(file) >> __link__.tmp +echo FILE $(file) >> __link__.tmp endef #Note: The empty line directly before 'endef' HAVE TO exist! define link_lib -$(COMSPEC) /E:2048 /Cecho LIB $(lib) >> __link__.tmp +echo LIB $(lib) >> __link__.tmp endef define link_exe_file -$(COMSPEC) /E:2048 /Cecho $(LDFLAGS) NAME $@ > __link__.tmp +echo $(LDFLAGS) NAME $@ > __link__.tmp $(foreach file, $^, $(link_file)) $(foreach lib, $(LINKLIBS), $(link_lib)) $(foreach lib, $(RDDLIBS), $(link_lib)) @@ -42,7 +52,7 @@ $(foreach lib, $(GTLIBS), $(link_lib)) endef LD = wlink -LDFLAGS = debug all OP osn=DOS4G OP stack=65536 OP CASEEXACT +LDFLAGS = debug all OP osn=DOS OP stack=65536 OP CASEEXACT OP stub=cwstub.exe ifeq ($(HB_LIB_COMPILE),) LINKLIBS := $(foreach lib, $(CONTRIBS), $(subst /,\,$(TOP)$(ROOT)contrib/$(lib)/$(ARCH)/$(subst lib,,$(lib)))) LINKLIBS := $(foreach lib, $(LIBS), $(subst /,\,$(TOP)$(ROOT)source/$(lib)/$(ARCH)/$(lib))) @@ -56,28 +66,38 @@ ifeq ($(findstring rdd,$(LIBS)),rdd) RDDLIBS := $(foreach drv, $(HB_DB_DRIVERS), $(subst /,\,$(TOP)$(ROOT)source/rdd/$(drv)/$(ARCH)/$(drv))) endif +ifeq ($(findstring rtl,$(LIBS)),rtl) GTLIBS := $(TOP)$(ROOT)source/rtl/$(HB_GT_LIB)/$(ARCH)/$(HB_GT_LIB) +ifeq ($(HB_MULTI_GT),yes) +GTLIBS := $(TOP)$(ROOT)source/rtl/gtnul/$(ARCH)/gtnul +endif GTLIBS := $(subst /,\,$(GTLIBS)) +endif + LD_RULE = $(link_exe_file) #Note: The empty line below HAVE TO exist! define lib_object -$(COMSPEC) /E:2048 /Cecho -+$(file) >> __lib__.tmp +echo -+$(file) >> __lib__.tmp endef define create_library -$(COMSPEC) /E:2048 /Cecho $@ > __lib__.tmp +echo $@ > __lib__.tmp $(foreach file, $^, $(lib_object)) $(AR) $(ARFLAGS) @__lib__.tmp endef AR = wlib ARFLAGS = -p=32 -c $(A_USR) - AR_RULE = $(create_library) include $(TOP)$(ROOT)config/rules.cf -HB := $(subst /,\\,$(HB)) +HB := $(subst /,\,$(HB)) +HB_FLAGS := $(subst /,\,$(HB_FLAGS)) + +# work arround to DOS command line size limit +export HARBOURCMD := $(HB_FLAGS) +HB_FLAGS = diff --git a/harbour/config/w32/watcom.cf b/harbour/config/w32/watcom.cf new file mode 100644 index 0000000000..3a1081b5ec --- /dev/null +++ b/harbour/config/w32/watcom.cf @@ -0,0 +1,101 @@ +# +# $Id$ +# +# The Harbour project +# GNU MAKE file for Watcom C/C++ 10.x + +include $(TOP)$(ROOT)config/$(HB_ARCHITECTURE)/global.cf + +OBJ_EXT = .obj +EXE_EXT = .exe +LIB_PREF = +LIB_EXT = .lib + +$(HB_ARCHITECTURE)_$(HB_COMPILER)_GRANDP = $(subst /,\,$(GRANDP)) + +CC = wpp386 +CC_IN = +CC_OUT = -fo= + +# important: -j is necessary for proper build +CPPFLAGS = -j -w3 -d2 -5s -5r -fp5 -oxehtz -zq -zt0 -mf -bt=NT +CFLAGS := -i$(subst /,\,$(HB_INC_COMPILE)) -i. + +# work arround to DOS command line size limit +export WPP386 := $(CPPFLAGS) +CPPFLAGS = + +# Note: The empty line directly before 'endef' HAVE TO exist! +# It causes that the 'echo' command is separated by LF +define link_file +echo FILE $(file) >> __link__.tmp + +endef + +#Note: The empty line directly before 'endef' HAVE TO exist! +define link_lib +echo LIB $(lib) >> __link__.tmp + +endef + +define link_exe_file +echo $(LDFLAGS) NAME $@ > __link__.tmp +echo LIB kernel32.lib, user32.lib, winspool.lib, oleaut32.lib, uuid.lib >> __link__.tmp +$(foreach file, $^, $(link_file)) +$(foreach lib, $(LINKLIBS), $(link_lib)) +$(foreach lib, $(RDDLIBS), $(link_lib)) +$(foreach lib, $(GTLIBS), $(link_lib)) +-$(LD) @__link__.tmp +endef + +LD = wlink +LDFLAGS = debug all OP osn=NT OP stack=65536 OP CASEEXACT + +ifeq ($(HB_LIB_COMPILE),) +LINKLIBS := $(foreach lib, $(CONTRIBS), $(subst /,\,$(TOP)$(ROOT)contrib/$(lib)/$(ARCH)/$(subst lib,,$(lib)))) +LINKLIBS := $(foreach lib, $(LIBS), $(subst /,\,$(TOP)$(ROOT)source/$(lib)/$(ARCH)/$(lib))) +else +LINKLIBS := $(foreach lib, $(CONTRIBS), $(subst /,\,$(HB_LIB_COMPILE)/$(lib))) +LINKLIBS := $(foreach lib, $(LIBS), $(subst /,\,$(HB_LIB_COMPILE)/$(lib))) +endif + +# If LIBS specifies the rdd library, add all DB drivers. +ifeq ($(findstring rdd,$(LIBS)),rdd) +RDDLIBS := $(foreach drv, $(HB_DB_DRIVERS), $(subst /,\,$(TOP)$(ROOT)source/rdd/$(drv)/$(ARCH)/$(drv))) +endif + +ifeq ($(findstring rtl,$(LIBS)),rtl) +GTLIBS := $(TOP)$(ROOT)source/rtl/$(HB_GT_LIB)/$(ARCH)/$(HB_GT_LIB) +ifeq ($(HB_MULTI_GT),yes) +GTLIBS := $(TOP)$(ROOT)source/rtl/gtnul/$(ARCH)/gtnul +endif +GTLIBS := $(subst /,\,$(GTLIBS)) +endif + + +LD_RULE = $(link_exe_file) + +#Note: The empty line below HAVE TO exist! +define lib_object +echo -+$(file) >> __lib__.tmp + +endef + +define create_library +echo $@ > __lib__.tmp +$(foreach file, $^, $(lib_object)) +$(AR) $(ARFLAGS) @__lib__.tmp +endef + +AR = wlib +ARFLAGS = -p=64 -c $(A_USR) +AR_RULE = $(create_library) + +include $(TOP)$(ROOT)config/rules.cf + +HB := $(subst /,\,$(HB)) +HB_FLAGS := $(subst /,\,$(HB_FLAGS)) + +# work arround to DOS command line size limit +export HARBOURCMD := $(HB_FLAGS) +HB_FLAGS = diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index 8ce5d18c44..3cc3ba1ec6 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -5181,3 +5181,11 @@ HB_FUNC( __OPGETPRF ) /* profiler: It returns an array with an opcode called and hb_stornl( hb_ulOpcodesTime[ ulOpcode ], -1, 2 ); } } + +#if defined(HB_OS_WIN_32) && defined(__WATCOMC__) +extern void HB_EXPORT hb_froceLinkMain(); +void _hb_froceLinkMain() +{ + hb_froceLinkMain(); +} +#endif diff --git a/harbour/source/vm/mainwin.c b/harbour/source/vm/mainwin.c index e99f43165e..efa8c1acbd 100644 --- a/harbour/source/vm/mainwin.c +++ b/harbour/source/vm/mainwin.c @@ -116,6 +116,10 @@ int WINAPI WinMain( HINSTANCE hInstance, /* handle to current instance */ /* NOTE: This point is never reached */ return 0; -} +} + +#if defined(__WATCOMC__) +void HB_EXPORT hb_froceLinkMain() {} +#endif #endif