#
-# CA65 Makefile for the Watcom compiler
+# CA65 Makefile for the Watcom compiler (using GNU make)
#
# ------------------------------------------------------------------------------
# Generic stuff
-.AUTODEPEND
-.SUFFIXES .ASM .C .CC .CPP
-.SWAP
+# Environment variables for the watcom compiler
+export WATCOM = c:\\watcom
+export INCLUDE = $(WATCOM)\\h
-AR = WLIB
-LD = WLINK
+# We will use the windows compiler under linux (define as empty for windows)
+export WINEDEBUG=fixme-all
+WINE = wine
-!if !$d(TARGET)
-!if $d(__OS2__)
-TARGET = OS2
-!else
-TARGET = NT
-!endif
-!endif
+# Programs
+AR = $(WINE) wlib
+CC = $(WINE) wcc386
+LD = $(WINE) wlink
+WSTRIP = $(WINE) wstrip -q
-# target specific macros.
-!if $(TARGET)==OS2
+LNKCFG = ld.tmp
-# --------------------- OS2 ---------------------
-SYSTEM = os2v2
-CC = WCC386
-CCCFG = -bt=$(TARGET) -d1 -onatx -zp4 -5 -zq -w2
+# Program arguments
+CFLAGS = -d1 -obeilr -zp4 -5 -zq -w2 -i=..\\common
-!elif $(TARGET)==DOS32
+# Target files
+EXE = ca65.exe
-# -------------------- DOS4G --------------------
-SYSTEM = dos4g
-CC = WCC386
-CCCFG = -bt=$(TARGET) -d1 -onatx -zp4 -5 -zq -w2
-
-!elif $(TARGET)==DOS
+# Create NT programs by default
+ifndef TARGET
+TARGET = NT
+endif
-# --------------------- DOS ---------------------
-SYSTEM = dos
-CC = WCC
-CCCFG = -bt=$(TARGET) -d1 -onatx -zp2 -2 -ml -zq -w2
+# --------------------- OS2 ---------------------
+ifeq ($(TARGET),OS2)
+SYSTEM = os2v2
+CFLAGS += -bt=$(TARGET)
+endif
-!elif $(TARGET)==NT
+# -------------------- DOS4G --------------------
+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
+ifeq ($(TARGET),NT)
+SYSTEM = nt
+CFLAGS += -bt=$(TARGET)
+endif
# ------------------------------------------------------------------------------
# Implicit rules
-.c.obj:
- $(CC) $(CCCFG) $<
+%.obj: %.c
+ $(CC) $(CFLAGS) -fo=$@ $^
# ------------------------------------------------------------------------------
# All library OBJ files
-OBJS = condasm.obj \
- ea.obj \
+OBJS = anonname.obj \
+ asserts.obj \
+ condasm.obj \
+ dbginfo.obj \
+ ea65.obj \
+ easw16.obj \
+ enum.obj \
error.obj \
expr.obj \
+ feature.obj \
+ filetab.obj \
fragment.obj \
global.obj \
incpath.obj \
instr.obj \
istack.obj \
+ lineinfo.obj \
listing.obj \
macpack.obj \
macro.obj \
objfile.obj \
options.obj \
pseudo.obj \
+ repeat.obj \
scanner.obj \
+ segment.obj \
+ segrange.obj \
+ sizeof.obj \
+ spool.obj \
+ struct.obj \
+ studyexpr.obj \
+ symbol.obj \
+ symentry.obj \
symtab.obj \
+ token.obj \
toklist.obj \
ulabel.obj
-LIBS = ..\common\common.lib
+LIBS = ../common/common.lib
# ------------------------------------------------------------------------------
# Main targets
-all: ca65
-
-ca65: ca65.exe
+all: $(EXE)
# ------------------------------------------------------------------------------
# Other targets
-ca65.exe: $(OBJS) $(LIBS)
- $(LD) system $(SYSTEM) @&&|
-DEBUG ALL
-OPTION QUIET
-NAME $<
-FILE condasm.obj
-FILE ea.obj
-FILE error.obj
-FILE expr.obj
-FILE fragment.obj
-FILE global.obj
-FILE incpath.obj
-FILE instr.obj
-FILE istack.obj
-FILE listing.obj
-FILE macpack.obj
-FILE macro.obj
-FILE main.obj
-FILE nexttok.obj
-FILE objcode.obj
-FILE objfile.obj
-FILE options.obj
-FILE pseudo.obj
-FILE scanner.obj
-FILE symtab.obj
-FILE toklist.obj
-FILE ulabel.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)
clean:
- @if exist *.obj del *.obj
- @if exist ca65.exe del ca65.exe
+ @rm -f *~ core
+
+zap: clean
+ @rm -f $(OBJS) $(EXE) $(EXE:.exe=.map)
strip:
- @-wstrip ca65.exe
+ @-$(WSTRIP) $(EXE)