jwasm/Makefile
2014-06-18 19:16:56 +04:00

181 lines
4.1 KiB
Makefile

# this makefile in OW WMake style creates JWasm.EXE (Win32) and optionally
# JWasmD.EXE (DOS).
# tools used:
# - Open Watcom v1.9
# - jwlink ( optionally OW Wlink may be used, see below )
# - HXDev ( needed only if a DOS version is to be created )
#
# "WMake" - creates the Win32 version.
# "WMake debug=1" - creates the Win32 debug version.
# "WMake dos=1" - creates both Win32 and DOS version (JWasmD.exe)
# "WMake djgpp=1" - creates a Win32 version with DJGPP support.
# "WMake wlink=1" - create a Win32 version that is linked with OW Wlink.
name = JWasm
WIN=1
# Open Watcom root directory
!ifndef WATCOM
WATCOM = \Watcom
!endif
# if a DOS version is to be created, HXDIR must contain the HX root directory
!ifndef HXDIR
HXDIR = \HX
!endif
!ifndef DEBUG
DEBUG=0
!endif
!ifndef DOS
DOS=0
!endif
!ifndef DJGPP
DJGPP=0
!endif
# to track memory leaks, the Open Watcom TRMEM module can be included.
# it's useful only if FASTMEM=0 is set, though, otherwise most allocs
# won't use the C heap.
!ifndef TRMEM
TRMEM=0
!endif
!ifndef OUTD
!if $(DEBUG)
OUTD=Debug
!else
OUTD=Release
!endif
!endif
inc_dirs = -IH -I$(WATCOM)\H
c_flags = -q -bc -bt=nt -3r -fpi87
# -zc flag makes wcc386 place constant data in code segment.
# used with wlink because it won't accept readonly attribute for segments
!ifdef WLINK
LINK = $(WATCOM)\binnt\wlink.exe
c_flags += -zc
!else
LINK = jwlink.exe
!endif
#cflags stuff
#########
extra_c_flags =
!if $(DEBUG)
extra_c_flags += -od -d2 -w3 -hc -DDEBUG_OUT
!else
#extra_c_flags += -obmilrt -s -DNDEBUG
extra_c_flags += -oxa -s -DNDEBUG
!endif
!if $(TRMEM)
extra_c_flags += -of -DTRMEM -DFASTMEM=0
!endif
!if $(DJGPP)
extra_c_flags += -DDJGPP_SUPPORT=1
!endif
#########
!if $(DEBUG)
# for OW v1.8, the debug version needs user32.lib to resolve CharUpperA()
# without it, WD(W) will crash immediately.
LOPTD = debug c op cvp, symfile lib user32.lib
!else
LOPTD =
!endif
CC=$(WATCOM)\binnt\wcc386 $(c_flags) $(inc_dirs) $(extra_c_flags) -fo$@
LIB=$(WATCOM)\binnt\wlib
.c{$(OUTD)}.obj:
$(CC) $<
proj_obj = &
!include owmod.inc
!if $(TRMEM)
proj_obj += $(OUTD)/trmem.obj
!endif
!if $(WIN)
TARGET1=$(OUTD)/$(name).exe
!endif
!if $(DOS)
TARGET2=$(OUTD)/$(name)d.exe
!endif
ALL: $(OUTD) $(TARGET1) $(TARGET2)
$(OUTD):
@if not exist $(OUTD) mkdir $(OUTD)
$(OUTD)/$(name).exe: $(OUTD)/main.obj $(proj_obj)
$(LINK) @<<
$(LOPTD)
format windows pe runtime console
file { $(OUTD)/main.obj $(proj_obj) } name $@
Libpath $(WATCOM)\lib386\nt;$(WATCOM)\lib386
Library kernel32.lib
op quiet, stack=0x40000, heapsize=0x100000, map=$^*, norelocs
com stack=0x1000
disable 171
!ifndef NOGBL
sort global
!endif
op statics
!ifndef WLINK
segment CONST readonly
segment CONST2 readonly
!endif
<<
!if $(DEBUG)
@if not exist TEST mkdir TEST
copy $(OUTD)\$(name).exe TEST\*.* >NUL
copy $(OUTD)\$(name).sym TEST\*.* >NUL
!endif
$(OUTD)/$(name)d.exe: $(OUTD)/main.obj $(proj_obj)
$(LINK) @<<
$(LOPTD)
!ifndef WLINK
format windows pe hx runtime console
!else
format windows pe runtime console
!endif
file { $(OUTD)/main.obj $(proj_obj) } name $@
Libpath $(WATCOM)\lib386\nt;$(WATCOM)\lib386
Libfile cstrtwhx.obj
libpath $(HXDIR)\lib
Library imphlp.lib, dkrnl32s.lib, HXEmu387.lib
reference EMUInit
op quiet, stack=0x40000, heapsize=0x40000, map=$^*, stub=$(HXDIR)\Bin\loadpex.bin
sort global op statics
!ifndef WLINK
segment CONST readonly
segment CONST2 readonly
!endif
<<
!ifdef WLINK
# $(HXDIR)\Bin\pestub.exe -x -z -n $@
pestub.exe -x -z -n $@
!endif
$(OUTD)/msgtext.obj: msgtext.c H/msgdef.h H/globals.h
$(CC) msgtext.c
$(OUTD)/reswords.obj: reswords.c H/instruct.h H/special.h H/directve.h H/opndcls.h H/instravx.h
$(CC) reswords.c
######
clean: .SYMBOLIC
@if exist $(OUTD)\$(name).exe erase $(OUTD)\$(name).exe
@if exist $(OUTD)\$(name)d.exe erase $(OUTD)\$(name)d.exe
@if exist $(OUTD)\$(name).map erase $(OUTD)\$(name).map
@if exist $(OUTD)\$(name)d.map erase $(OUTD)\$(name)d.map
@if exist $(OUTD)\*.obj erase $(OUTD)\*.obj