open-watcom / open-watcom-v2

Open Watcom V2.0 - Source code repository, Wiki, Latest Binary build, Archived builds including all installers for download.
Other
983 stars 160 forks source link

wcl with wmake compilation command arguments on a temperary file #272

Closed sparky4 closed 7 years ago

sparky4 commented 8 years ago

//NTS we have to construct the command line into tmp.cmd because for MS-DOS //systems all arguments would exceed the pitiful 128 char command line limit .C.OBJ: %write temp.cmd $(CFLAGS_THIS) $(CFLAGS_CON) $[@ @wcl @temp.cmd

yeah i want to pass arguments to wcl that are in a file... but it dose not know how todo this....

also wasm help i think print out it's bianary screenshot from 2016-08-05 09 49 02 screenshot from 2016-08-05 09 49 36

jmalak commented 8 years ago

If you are using wmake then if you put star character before wcl command like this *wcl ..... all options and arguments .... then command line is passed by temporary environment variable (DOS version of tools) to wcl tools

Thanks for wasm bug report. It is fixed by 73469ee8d5c83dce77306427dfd2a0a96d82dcdb

jmalak commented 8 years ago

Anyway wcl .... @file .... argument is used as linker directive file for linker

jmalak commented 8 years ago

The star before command is general rule for any wmake command, it is supported by OW tools for DOS host (Compilers, librarian, resource compiler, assemblers).

sparky4 commented 8 years ago

ok thanks!

sparky4 commented 8 years ago

Well I am having a different issue now.... @jmalak I am running into an issue with compiling Open Watcom again.... http://4ch.mooo.com/4/watcom/compwat2.sh This is my script files to compile it. i think builder is failing ========== 12:10:08 /home/sparky4/p/watcom2/bld/causeway/cwc/dosi86 =========== cp ../../cw32/dosi86/cwstub.exe cwstub.exe wcl386 -zq -bt=linux -l=linux -I"/home/sparky4/p/watcom2/bld/watcom/h" ../../c/mkcode.c -ox-w8-j-fo=.obj -fe=./mkcode.exe bwasm -zq -fo=copystub.obj ../../asm/copystub.asm bwlink format dos com op quiet, nodefault file copystub.obj name copystub.tmp disable 1023,1080 ./mkcode.exe copystub.tmp copystub.gh bwasm -zq -fo=decstub.obj ../../asm/decstub.asm bwlink format dos com op quiet, nodefault file decstub.obj name decstub.tmp disable 1023,1080 ./mkcode.exe decstub.tmp decstub.gh cc cwc.obj ./copystub.gh(65610): Error! E1145: Internal compiler limit exceeded, break module into smaller pieces Error(E42): Last command making (cwc.obj) returned a bad status Error(E02): Make execution terminated <pmake -d build -h> => non-zero return: 512 Build failed

jmalak commented 8 years ago

It looks like problem with content of copystub.gh for some reason (normaly it has 73 lines only, but yours has much more 65610). In similar situation you should first run "sh clean.sh" from OWROOT directory which realy remove all temporary object from build tree. After that try it ones more because command "sh build.sh" doesn't remove any of temporary objects.

sparky4 commented 8 years ago

ok thank!

sparky4 commented 8 years ago

failed again... did not work... same error

jmalak commented 8 years ago

Please, could you give me content of home/sparky4/p/watcom2/bld/causeway/cwc/dosi86 for analysis.

sparky4 commented 8 years ago

yes!

http://4ch.mooo.com/4/watcom/dosi86.tar

it is a very big file it is currently being uploaded it is going to take a while...

jmalak commented 8 years ago

It looks like OW configuration problem, therefore binary files copystub.tmp and decstub.tmp are wrong. They should have following sizes copystub.tmp 1167 bytes decstub.tmp 461 bytes

sparky4 commented 8 years ago

!!!!

the *.gh files are 1.4 GB

jmalak commented 8 years ago

What version of OW you use for OW build on your system?

sparky4 commented 8 years ago

! 2.0 ^^; ^^;

sparky4 commented 8 years ago

so the compiler is trying to compile the compiler that happens to be itself

jmalak commented 8 years ago

It looks like your OW 2.0 is broken or environment is not setup correctly. Try rebuild OW 2.0 from latest source by native compiler or by OW 1.9.

sparky4 commented 8 years ago

ok!

sparky4 commented 8 years ago

odd the 64 bit machine compiles open watcom successfully and .... the 32 bit machines fail at it... how odd

their configs are the same ^^

jmalak commented 8 years ago

In this case I recommed to modify local.mif file to not suppress banner. Remove following lines from begining of build/mif/local.mif file

global definition which tool is quiet

cc += -zq cl += -zq cxx += -zq as += -q linker += op q librarian += -q rc += -q rcaui += -q

bcc += -zq bcl += -zq bas += -q blink += op q blib += -q

Next set OWVERBOSE=1 environment variable. Then you will get full log with banner of each tool and full command line to be able analyse what is wrong.

sparky4 commented 8 years ago

ah OK

========== 17:16:11 /home/sparky4/p/watcom2/bld/causeway/cwc/dosi86 =========== cp ../../cw32/dosi86/cwstub.exe cwstub.exe wcl386 -bt=linux -l=linux -I"/home/sparky4/p/watcom2/bld/watcom/h" ../../c/mkcode.c -ox-w8-j-fo=.obj -fe=./mkcode.exe Open Watcom C/C++ x86 32-bit Compile and Link Utility Version 2.0 beta Aug 24 2016 04:41:42 (32-bit) Copyright (c) 2002-2016 The Open Watcom Contributors. All Rights Reserved. Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved. Source code is available under the Sybase Open Watcom Public License. See http://www.openwatcom.org/ for details. wcc386 ../../c/mkcode.c -bt=linux -I/home/sparky4/p/watcom2/bld/watcom/h -ox -w8 -j -.obj Open Watcom C x86 32-bit Optimizing Compiler Version 2.0 beta Aug 15 2016 15:27:09 (32-bit) Copyright (c) 2002-2016 The Open Watcom Contributors. All Rights Reserved. Portions Copyright (c) 1984-2002 Sybase, Inc. All Rights Reserved. Source code is available under the Sybase Open Watcom Public License. See http://www.openwatcom.org/ for details. Error! E1073: Invalid option '-.obj' ../../c/mkcode.c: 87 lines, included 2772, 0 warnings, 1 errors Error: Compiler returned a bad status compiling '../../c/mkcode.c' Error(E42): Last command making (./mkcode.exe) returned a bad status Error(E02): Make execution terminated <pmake -d build -h> => non-zero return: 512 Build failed

HOW odd same issue on compy4

sparky4 commented 8 years ago

ok i copied the bld directory from lappy4 (the working one) and deleted binbuild/*.obj and it compiled that part

but causeway win386 dwarf wasm ... they all have same error Error! E1073: Invalid option '-.obj'

sparky4 commented 8 years ago

i am thinking fo= in -fo=.obj is missing at the end of the compile arguments

jmalak commented 8 years ago

Thanks for your checking. I am sorry I introduced bug for -fo option by ac26553c9354ff606657d53d99eeb10bd4a95ef9 commit which fixed problem with -mt option. Now it should be fixed. Please try it ones more with latest source code.

sparky4 commented 8 years ago

OK I will do! and it is ok!

sparky4 commented 8 years ago

compiling on odd pc 1st attempted failed... same -.obj issue so i copied the newer wcl from lappy4 to compy4 and retrying

wcl386 -bt=linux -l=linux -I"/home/sparky4/p/watcom2/bld/watcom/h" ../../c/mkcode.c -ox-w8-j-fo=.obj -fe=./mkcode.exe Open Watcom C/C++ x86 32-bit Compile and Link Utility Version 2.0 beta Aug 26 2016 00:04:26 (64-bit) Copyright (c) 2002-2016 The Open Watcom Contributors. All Rights Reserved. Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved. Source code is available under the Sybase Open Watcom Public License. See http://www.openwatcom.org/ for details. wcc386 ../../c/mkcode.c -bt=linux -I/home/sparky4/p/watcom2/bld/watcom/h -ox -w8 -j -fo=.obj Open Watcom C x86 32-bit Optimizing Compiler Version 2.0 beta Aug 24 2016 09:36:56 (64-bit) Copyright (c) 2002-2016 The Open Watcom Contributors. All Rights Reserved. Portions Copyright (c) 1984-2002 Sybase, Inc. All Rights Reserved. Source code is available under the Sybase Open Watcom Public License. See http://www.openwatcom.org/ for details. ../../c/mkcode.c: 87 lines, included 2774, 0 warnings, 0 errors Code size: 237 wlink @wcl.lnk Open Watcom Linker Version 2.0 beta Aug 24 2016 09:33:23 (64-bit) Copyright (c) 2002-2016 The Open Watcom Contributors. All Rights Reserved. Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved. Source code is available under the Sybase Open Watcom Public License. See http://www.openwatcom.org/ for details. loading object files searching libraries creating a Linux x86 executable bwasm -zq -fo=copystub.obj ../../asm/copystub.asm bwlink format dos com op quiet, nodefault file copystub.obj name copystub.tmp disable 1023,1080 ./mkcode.exe copystub.tmp copystub.gh bwasm -zq -fo=decstub.obj ../../asm/decstub.asm bwlink format dos com op quiet, nodefault file decstub.obj name decstub.tmp disable 1023,1080 ./mkcode.exe decstub.tmp decstub.gh

bwcc -w8 -we -oaxt -d1 -x -xx -zam -fo=cwc.obj -j -fpi -mc -bt=dos -DNDEBUG -D_ENABLE_AUTODEPEND -D__WATCOM_LFN__ -I. -I"/home/sparky4/p/watcom2/bld/hdr/dos" -I"/home/sparky4/p/watcom2/bld/watcom/h" ../../c/cwc.c Open Watcom C x86 16-bit Optimizing Compiler Version 2.0 beta Aug 25 2016 23:57:58 (32-bit) Copyright (c) 2002-2016 The Open Watcom Contributors. All Rights Reserved. Portions Copyright (c) 1984-2002 Sybase, Inc. All Rights Reserved. Source code is available under the Sybase Open Watcom Public License. See http://www.openwatcom.org/ for details. ./copystub.gh(65610): Error! E1145: Internal compiler limit exceeded, break module into smaller pieces Error(E42): Last command making (cwc.obj) returned a bad status Error(E02): Make execution terminated <pmake -d build -h> => non-zero return: 512 Build failed

anyway https://github.com/sparky4/16/blob/master/makefile#L143

i do not know how todo this... it is not well documented. ^^;

trying to reduce the massive makefile and wcl to not have such a long compile parameters ^^;

jmalak commented 8 years ago

Don't forgot use latest source for OW2. For bootstrap version run "builder bootclean" in bld/wcl and next run "builder boot" it replace bwcl.. by new versions. Next you don't need recompile full OW2 simply recompile only wcl utility and replace it in appropriate directory of your existing OW2. After that try again.

jmalak commented 8 years ago

To your make file problem, use of star should fix problem with long command line on the DOS tesuto.exe: tesuto.$(OBJ) $(DOSLIBLIBS) 16_head.$(OBJ) gfx.lib @*wlink option quiet option max=tesuto.mah $(DOSLIB_LDFLAGS_DOS16H) file tesuto.obj name tesuto.exe library $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)cpu$(DIRSEP)dos86h$(DIRSEP)cpu.lib library $(DOSLIBDIR)$(DIRSEP)hw$(DIRSEP)dos$(DIRSEP)dos86h$(DIRSEP)dos.lib

anyway you can optimize wlink command to @*wlink option quiet option max=tesuto.mah $(DOSLIB_LDFLAGS_DOS16H) file tesuto.obj name tesuto.exe libpath $(DOSLIBDIR)/hw/cpu/dos86h library cpu.lib library dos.lib

jmalak commented 8 years ago

For current valid command use star before wcl command

*wcl $(FLAGS) $(WCLQ) tesuto.$(OBJ) $(DOSLIBLIBS) 16_head.$(OBJ) gfx.lib
jmalak commented 8 years ago

Global optimization could be done by

{$(SRC)}.c.$(OBJ) : *wcl $(FLAGS) -c $[*

only dependencies are necessary

16.$(OBJ): $(SRC)16.c $(SRC)16.h bakapi.$(OBJ): $(SRC)bakapi.c $(SRC)bakapi.h test.$(OBJ): $(SRC)test.c $(SRCLIB)modex16.h test0.$(OBJ): $(SRC)test0.c # if it is one-to-one then can be ommited pcxtest.$(OBJ): $(SRC)pcxtest.c $(SRCLIB)modex16.h vrstest.$(OBJ): $(SRC)vrstest.c $(SRCLIB)modex16.h

etc.

sparky4 commented 8 years ago

thanks!

sparky4 commented 8 years ago

hmmm the {$(SRC)}.c.$(OBJ) : wcl $(FLAGS) -c $[

only works on DOS the host compiling OS can also be GNU/Linux

the target is always 16 bit dos

jmalak commented 8 years ago

what problem is on Linux?

sparky4 commented 8 years ago

[14:24:15][/dos/z/16] [sparky4@lappy4]$ ./wbuild.sh makefile(210): Error(E21): Extension(s) (.c.o) not defined makefile(211): Warning(W20): Command list does not belong to any target Error(E02): Make execution terminated makefile(210): Error(E21): Extension(s) (.c.o) not defined makefile(211): Warning(W20): Command list does not belong to any target Error(E02): Make execution terminated makefile(210): Error(E21): Extension(s) (.c.o) not defined makefile(211): Warning(W20): Command list does not belong to any target Error(E02): Make execution terminated

jmalak commented 8 years ago

What is on line 210 and 211? Could you give me your makefile? You can run wmake -sn to get each command

sparky4 commented 8 years ago

the

{$(SRC)}.c.$(OBJ) : wcl $(FLAGS) -c $[

^^;

jmalak commented 8 years ago

What contain $(SRC) macro?

sparky4 commented 8 years ago

SRC=src\ or SRC=src/

sparky4 commented 8 years ago

source *.C file directory

jmalak commented 8 years ago

it could be a problem with trailing directory separator in extensions rule try

{src}.c.$(OBJ) : wcl $(FLAGS) -c $[

sparky4 commented 8 years ago

ok!

sparky4 commented 8 years ago

hmm failed too hmmm

jmalak commented 8 years ago

what source file cause it? what is its dependency line?

sparky4 commented 8 years ago

let me commit please wait

jmalak commented 8 years ago

take into account that each source directory require extra rule definition by example

{src}.c.o :

{doslib/src}.c.o :

first one is for sources src/.c second one is for sources doslib/src/.c

but wmake translate / to \ in dependency on host

sparky4 commented 8 years ago

oh ok!

sparky4 commented 8 years ago

the line is 211 and it is makefile it is committing

sparky4 commented 8 years ago

ok so {src}.c.o : ? or {src}.c.$(OBJ) : ?

jmalak commented 8 years ago

if you change object file extension to $(OBJ) then you must use second form to switch rule accordingly

sparky4 commented 8 years ago

https://github.com/sparky4/16/blob/master/makefile#L211

yes

gnu/linux cannot do that line

sparky4 commented 8 years ago

i have to disable it for gnu/linux host compiling because it dose not understand...