#
-# CC65 Makefile for the Watcom compiler
+# CC65 Makefile for the Watcom compiler (using GNU make)
#
# ------------------------------------------------------------------------------
# Generic stuff
-.AUTODEPEND
-.SUFFIXES .ASM .C .CC .CPP
-.SWAP
-
-AR = WLIB
-LD = WLINK
-
-!if !$d(TARGET)
-!if $d(__OS2__)
-TARGET = OS2
-!else
+# Environment variables for the watcom compiler
+export WATCOM = c:\\watcom
+export INCLUDE = $(WATCOM)\\h
+
+# We will use the windows compiler under linux (define as empty for windows)
+export WINEDEBUG=fixme-all
+WINE = wine
+
+# Programs
+AR = $(WINE) wlib
+CC = $(WINE) wcc386
+LD = $(WINE) wlink
+WSTRIP = $(WINE) wstrip -q
+
+LNKCFG = ld.tmp
+
+# Program arguments
+CFLAGS = -d1 -obeilr -zp4 -5 -zq -w2 -i=..\\common
+
+# Target files
+EXE = cc65.exe
+
+# Determine the svn version number if possible
+ifneq "$(shell which svnversion 2>/dev/null)" ""
+ifneq "$(wildcard .svn)" ""
+SVNVERSION=$(shell svnversion)
+else
+SVNVERSION=unknown
+endif
+else
+SVNVERSION=unknown
+endif
+
+# Create NT programs by default
+ifndef TARGET
TARGET = NT
-!endif
-!endif
-
-# target specific macros.
-!if $(TARGET)==OS2
+endif
# --------------------- OS2 ---------------------
-SYSTEM = os2v2
-CC = WCC386
-CCCFG = -bt=$(TARGET) -d1 -onatx -zp4 -5 -zq -w2
-
-!elif $(TARGET)==DOS32
+ifeq ($(TARGET),OS2)
+SYSTEM = os2v2
+CFLAGS += -bt=$(TARGET)
+endif
# -------------------- DOS4G --------------------
-SYSTEM = dos4g
-CC = WCC386
-CCCFG = -bt=$(TARGET) -d1 -onatx -zp4 -5 -zq -w2
-
-!elif $(TARGET)==DOS
-
-# --------------------- DOS ---------------------
-SYSTEM = dos
-CC = WCC
-CCCFG = -bt=$(TARGET) -d1 -onatx -zp2 -2 -ml -zq -w2
-
-!elif $(TARGET)==NT
+ifeq ($(TARGET),DOS32)
+SYSTEM = dos4g
+CFLAGS += -bt=$(TARGET)
+endif
# --------------------- NT ----------------------
-SYSTEM = nt
-CC = WCC386
-CCCFG = -bt=$(TARGET) -d1 -onatx -zp4 -5 -zq -w2
-
-!else
-!error
-!endif
-
-# Add the include dir
-CCCFG = $(CCCFG) -i=..\common
-
+ifeq ($(TARGET),NT)
+SYSTEM = nt
+CFLAGS += -bt=$(TARGET)
+endif
# ------------------------------------------------------------------------------
# Implicit rules
-.c.obj:
- $(CC) $(CCCFG) $<
+%.obj: %.c
+ $(CC) $(CFLAGS) -fo=$@ $^
# ------------------------------------------------------------------------------
-# All library OBJ files
+# All OBJ files
OBJS = anonname.obj \
- asmcode.obj \
+ asmcode.obj \
asmlabel.obj \
- asmline.obj \
+ asmstmt.obj \
+ assignment.obj \
+ casenode.obj \
+ codeent.obj \
codegen.obj \
+ codelab.obj \
+ codeinfo.obj \
+ codeopt.obj \
+ codeseg.obj \
compile.obj \
- cpu.obj \
+ coptadd.obj \
+ coptc02.obj \
+ coptcmp.obj \
+ coptind.obj \
+ coptneg.obj \
+ coptptrload.obj \
+ coptpush.obj \
+ coptsize.obj \
+ coptstop.obj \
+ coptstore.obj \
+ coptsub.obj \
+ copttest.obj \
+ dataseg.obj \
datatype.obj \
declare.obj \
declattr.obj \
error.obj \
expr.obj \
- exprheap.obj \
- exprnode.obj \
+ exprdesc.obj \
funcdesc.obj \
function.obj \
global.obj \
goto.obj \
+ hexval.obj \
ident.obj \
- incpath.obj \
+ incpath.obj \
input.obj \
+ lineinfo.obj \
litpool.obj \
+ loadexpr.obj \
locals.obj \
- loop.obj \
+ loop.obj \
macrotab.obj \
main.obj \
- optimize.obj \
- pragma.obj \
+ opcodes.obj \
+ output.obj \
preproc.obj \
- stmt.obj \
- scanner.obj \
- segname.obj \
- stdfunc.obj \
- symentry.obj \
- symtab.obj \
- typecmp.obj \
+ pragma.obj \
+ reginfo.obj \
+ scanner.obj \
+ scanstrbuf.obj \
+ segments.obj \
+ shiftexpr.obj \
+ stackptr.obj \
+ standard.obj \
+ stdfunc.obj \
+ stdnames.obj \
+ stmt.obj \
+ svnversion.obj \
+ swstmt.obj \
+ symentry.obj \
+ symtab.obj \
+ testexpr.obj \
+ textseg.obj \
+ typecmp.obj \
+ typeconv.obj \
util.obj
-LIBS = ..\common\common.lib
+LIBS = ../common/common.lib
-.PRECIOUS $(OBJS:.obj=.c)
# ------------------------------------------------------------------------------
# Main targets
-all: cc65
-
-cc65: cc65.exe
+all: svnversion $(EXE)
# ------------------------------------------------------------------------------
# Other targets
-cc65.exe: $(OBJS) $(LIBS)
- $(LD) system $(SYSTEM) @&&|
-DEBUG ALL
-OPTION QUIET
-NAME $<
-FILE anonname.obj
-FILE asmcode.obj
-FILE asmlabel.obj
-FILE asmline.obj
-FILE codegen.obj
-FILE compile.obj
-FILE cpu.obj
-FILE datatype.obj
-FILE declare.obj
-FILE declattr.obj
-FILE error.obj
-FILE expr.obj
-FILE exprheap.obj
-FILE exprnode.obj
-FILE funcdesc.obj
-FILE function.obj
-FILE global.obj
-FILE goto.obj
-FILE ident.obj
-FILE incpath.obj
-FILE input.obj
-FILE litpool.obj
-FILE locals.obj
-FILE loop.obj
-FILE macrotab.obj
-FILE main.obj
-FILE optimize.obj
-FILE pragma.obj
-FILE preproc.obj
-FILE stmt.obj
-FILE scanner.obj
-FILE segname.obj
-FILE stdfunc.obj
-FILE symentry.obj
-FILE symtab.obj
-FILE typecmp.obj
-FILE util.obj
-LIBRARY ..\common\common.lib
-|
+$(EXE): $(OBJS) $(LIBS)
+ @echo "DEBUG ALL" > $(LNKCFG)
+ @echo "OPTION QUIET" >> $(LNKCFG)
+ @echo "OPTION MAP" >> $(LNKCFG)
+ @echo "OPTION STACK=65536" >> $(LNKCFG)
+ @echo "NAME $@" >> $(LNKCFG)
+ @for i in $(OBJS); do echo "FILE $${i}"; done >> $(LNKCFG)
+ @for i in $(LIBS); do echo "LIBRARY $${i}"; done >> $(LNKCFG)
+ @$(LD) system $(SYSTEM) @$(LNKCFG)
+ @rm $(LNKCFG)
+
+.PHONY: svnversion
+svnversion:
+ @$(RM) svnversion.c
+ @echo "/* This file is auto-generated - do not modify! */" >> svnversion.c
+ @echo "" >> svnversion.c
+ @echo "const char SVNVersion[] = \"$(SVNVERSION)\";" >> svnversion.c
+
+svnversion.c: svnversion
clean:
- @if exist *.obj del *.obj
- @if exist cc65.exe del cc65.exe
+ @rm -f *~ core
-strip:
- @-wstrip cc65.exe
+zap: clean
+ @rm -f $(OBJS) $(EXE) $(EXE:.exe=.map) svnversion.c
+strip:
+ @-$(WSTRIP) $(EXE)