X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2FMakefile;h=d855d15807fb59febe0a91600223405a9c93d647;hb=a03b3574b65a6167ac1207e66b83888eb0ca8465;hp=17f0383dc9c01734c4f9b354fb92d65f02b74cfb;hpb=578443610d569539d82cc2d7b300e5190a67700e;p=cc65 diff --git a/libsrc/Makefile b/libsrc/Makefile index 17f0383dc..d855d1580 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -1,252 +1,253 @@ -# -# makefile for CC65 runtime library -# - -.SUFFIXES: .o .obj .s .c - -# Defines for executables. AR is used within this makefile, the others are -# passed to the submakes and contain paths relative to the subdirectories -# handled by the make subprocesses. -AR = ../src/ar65/ar65 -AS = ../../src/ca65/ca65 -CC = ../../src/cc65/cc65 -LD = ../../src/ld65/ld65 - -# List of all targets -ALLTARGETS = apple2 \ - atari \ - atmos \ - vic20 \ - c16 \ - c64 \ - c128 \ - cbm510 \ - cbm610 \ - geos \ - pet \ - plus4 - -#----------------------------------------------------------------------------- - -all: - for tgt in $(ALLTARGETS); do \ - $(MAKE) clean "$$tgt"lib || exit 1; \ - done - -#----------------------------------------------------------------------------- -# Apple ][ - -apple2lib: - for i in apple2 common runtime conio dbg em tgi; do \ - AS=$(AS) \ - CC=$(CC) \ - LD=$(LD) \ - AFLAGS="-t apple2 -I../../asminc" \ - CFLAGS="-Osir -g -T -t apple2 -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a apple2.lib $$i/*.o;\ - done - mv apple2/crt0.o apple2.o - -#----------------------------------------------------------------------------- -# Atari - -atarilib: - for i in atari common runtime conio dbg em joystick tgi; do \ - AS=$(AS) \ - CC=$(CC) \ - LD=$(LD) \ - AFLAGS="-t atari -I../../asminc" \ - CFLAGS="-Osir -g -T -t atari -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a atari.lib $$i/*.o;\ - done - mv atari/crt0.o atari.o - -#----------------------------------------------------------------------------- -# Oric Atmos - -atmoslib: - for i in atmos common runtime em joystick tgi; do \ - AS=$(AS) \ - CC=$(CC) \ - LD=$(LD) \ - AFLAGS="-t atmos -I../../asminc" \ - CFLAGS="-Osir -g -T -t atmos -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a atmos.lib $$i/*.o;\ - done - mv atmos/crt0.o atmos.o - -#----------------------------------------------------------------------------- -# Vic20 - -vic20lib: - for i in vic20 cbm common runtime conio dbg em joystick tgi; do \ - AS=$(AS) \ - CC=$(CC) \ - LD=$(LD) \ - AFLAGS="-t vic20 -I../../asminc" \ - CFLAGS="-Osir -g -T -t vic20 -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a vic20.lib $$i/*.o;\ - done - mv vic20/crt0.o vic20.o - cp vic20/*.joy . - -#----------------------------------------------------------------------------- -# C16, C116 - -c16lib: - for i in c16 cbm common runtime conio dbg em joystick tgi; do \ - AS=$(AS) \ - CC=$(CC) \ - LD=$(LD) \ - AFLAGS="-t c16 -I../../asminc" \ - CFLAGS="-Osir -g -T -t c16 -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a c16.lib $$i/*.o;\ - done - mv c16/crt0.o c16.o - cp c16/*.joy . - -#----------------------------------------------------------------------------- -# C64 - -c64lib: - for i in c64 cbm common runtime conio dbg em joystick tgi; do \ - AS=$(AS) \ - CC=$(CC) \ - LD=$(LD) \ - CFLAGS="-Osir -g -T -t c64 -I../../include" \ - AFLAGS="-t c64 -I../../asminc" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a c64.lib $$i/*.o;\ - done - mv c64/crt0.o c64.o - cp c64/*.emd . - cp c64/*.joy . - cp c64/c64-320-200-2.tgi c64-hi.tgi - -#----------------------------------------------------------------------------- -# C128 - -c128lib: - for i in c128 cbm common runtime conio dbg em joystick tgi; do \ - AS=$(AS) \ - CC=$(CC) \ - LD=$(LD) \ - AFLAGS="-t c128 -I../../asminc" \ - CFLAGS="-Osir -g -T -t c128 -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a c128.lib $$i/*.o;\ - done - mv c128/crt0.o c128.o - cp c128/*.emd . - cp c128/*.joy . - cp c128/c128-640-200-2.tgi c128-vdc.tgi - cp c128/c128-640-480-2.tgi c128-vdc2.tgi - -#----------------------------------------------------------------------------- -# Commdore P500 / CBM 5x0 - -cbm510lib: - for i in cbm510 cbm common runtime conio dbg em joystick tgi; do \ - CC=$(CC) \ - AS=$(AS) \ - LD=$(LD) \ - AFLAGS="-t cbm510 -I../../asminc" \ - CFLAGS="-Osir -g -T -t cbm510 -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a cbm510.lib $$i/*.o;\ - done - mv cbm510/crt0.o cbm510.o - cp cbm510/*.emd . - -#----------------------------------------------------------------------------- -# PET-II series - -cbm610lib: - for i in cbm610 cbm common runtime conio dbg em; do \ - CC=$(CC) \ - AS=$(AS) \ - LD=$(LD) \ - AFLAGS="-t cbm610 -I../../asminc" \ - CFLAGS="-Osir -g -T -t cbm610 -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a cbm610.lib $$i/*.o;\ - done - mv cbm610/crt0.o cbm610.o - cp cbm610/*.emd . - -#----------------------------------------------------------------------------- -# GEOS on the C64/128 - -geoslib: - CC=../$(CC) \ - AS=../$(AS) \ - AR=../$(AR) \ - LD=../$(LD) \ - AFLAGS="-t geos -I../../../asminc" \ - CFLAGS="-Osir -g -T -t geos -I../../../include" \ - $(MAKE) -C geos || exit 1 - for i in common runtime; do \ - CC=$(CC) \ - AS=$(AS) \ - LD=$(LD) \ - AR=$(AR) \ - AFLAGS="-t geos -I../../asminc" \ - CFLAGS="-Osir -g -T -t geos -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - for objfile in $$i/*.o; do \ - if [ -f geos/$$objfile ]; then \ - $(AR) a geos.lib geos/$$objfile; \ - else \ - $(AR) a geos.lib $$objfile; \ - fi; \ - done \ - done - -#----------------------------------------------------------------------------- -# CBM PET machines - -petlib: - for i in pet cbm common runtime conio dbg em tgi; do \ - CC=$(CC) \ - AS=$(AS) \ - LD=$(LD) \ - AFLAGS="-t pet -I../../asminc" \ - CFLAGS="-Osir -g -T -t pet -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a pet.lib $$i/*.o;\ - done - mv pet/crt0.o pet.o - -#----------------------------------------------------------------------------- -# Commodore Plus/4 - -plus4lib: - for i in plus4 cbm common runtime conio dbg em joystick tgi; do \ - CC=$(CC) \ - AS=$(AS) \ - LD=$(LD) \ - AFLAGS="-t plus4 -I../../asminc" \ - CFLAGS="-Osir -g -T -t plus4 -I../../include" \ - $(MAKE) -C $$i || exit 1; \ - $(AR) a plus4.lib $$i/*.o;\ - done - mv plus4/crt0.o plus4.o - cp plus4/*.joy . - -#----------------------------------------------------------------------------- -# Dummy targets - -.PHONY: clean +CBMS = c128 \ + c16 \ + c64 \ + cbm510 \ + cbm610 \ + pet \ + plus4 \ + vic20 + +GEOS = geos-apple \ + geos-cbm + +TARGETS = apple2 \ + apple2enh \ + atari \ + atarixl \ + atmos \ + $(CBMS) \ + $(GEOS) \ + lynx \ + nes \ + sim6502 \ + sim65c02 \ + supervision + +DRVTYPES = emd \ + joy \ + mou \ + ser \ + tgi + +# Every target requires its individual vpath setting but the vpath directive +# acts globally. Therefore each target is built in a separate make instance. + +ifeq ($(words $(MAKECMDGOALS)),1) + ifeq ($(MAKECMDGOALS),$(filter $(MAKECMDGOALS),$(TARGETS))) + TARGET = $(MAKECMDGOALS) + endif +endif + +DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir)))) + +ifeq ($(shell echo),) + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +else + MKDIR = mkdir $(subst /,\,$1) + RMDIR = $(if $(DIRLIST),rmdir /s /q $(subst /,\,$(DIRLIST))) +endif + +.SUFFIXES: + +.PHONY: all lib $(TARGETS) mostlyclean clean + +ifndef TARGET + +all lib: $(TARGETS) + +$(TARGETS): + @$(MAKE) --no-print-directory $@ + +mostlyclean: + $(call RMDIR,../wrk) + clean: - @for i in common conio dbg em runtime tgi $(ALLTARGETS); do \ - $(MAKE) -C $$i clean; \ - done + $(call RMDIR,../wrk ../lib ../targetutil $(addprefix ../,$(DRVTYPES))) + +else # TARGET + +CA65FLAGS = +CC65FLAGS = -Osir -W error + +EXTZP = cbm510 \ + cbm610 \ + lynx + +MKINC = $(GEOS) \ + atari \ + nes + +TARGETUTIL = apple2 \ + geos-apple + +GEOSDIRS = common \ + conio \ + disk \ + dlgbox \ + file \ + graph \ + memory \ + menuicon \ + mousesprite \ + process \ + runtime \ + system + +ifeq ($(TARGET),apple2enh) + SRCDIR = apple2 + OBJPFX = a2 + DRVPFX = a2e +else ifeq ($(TARGET),atarixl) + SRCDIR = atari + OBJPFX = atr + DRVPFX = atrx +else ifeq ($(TARGET),sim65c02) + SRCDIR = sim6502 +else + SRCDIR = $(TARGET) +endif + +SRCDIRS = $(SRCDIR) + +ifeq ($(TARGET),$(filter $(TARGET),$(CBMS))) + SRCDIRS += cbm +endif + +ifeq ($(TARGET),$(filter $(TARGET),$(GEOS))) + SRCDIRS += $(addprefix $(TARGET)/, $(GEOSDIRS)) + SRCDIRS += $(addprefix geos-common/,$(GEOSDIRS)) +endif + +SRCDIRS += common \ + conio \ + dbg \ + em \ + joystick \ + mouse \ + runtime \ + serial \ + tgi \ + zlib + +vpath %.s $(SRCDIRS) +vpath %.c $(SRCDIRS) + +OBJS := $(patsubst %.s,%.o,$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.s))) +OBJS += $(patsubst %.c,%.o,$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))) + +OBJS := $(addprefix ../wrk/$(TARGET)/,$(sort $(notdir $(OBJS)))) + +DEPS = $(OBJS:.o=.d) + +EXTRA_SRCPAT = $(SRCDIR)/extra/%.s +EXTRA_OBJPAT = ../lib/$(TARGET)-%.o +EXTRA_OBJS := $(patsubst $(EXTRA_SRCPAT),$(EXTRA_OBJPAT),$(wildcard $(SRCDIR)/extra/*.s)) + +ZPOBJ = ../wrk/$(TARGET)/zeropage.o +ifeq ($(TARGET),$(filter $(TARGET),$(EXTZP))) + ZPOBJ += ../wrk/$(TARGET)/extzp.o +endif + +ifeq ($(SRCDIR),$(filter $(SRCDIR),$(MKINC))) + include $(SRCDIR)/Makefile.inc +endif + +ifeq ($(SRCDIR),$(filter $(SRCDIR),$(TARGETUTIL))) + include $(SRCDIR)/targetutil/Makefile.inc +endif + +########## + +define DRVTYPE_template + +$1_SRCDIR = $$(SRCDIR)/$1 +$1_OBJDIR = ../wrk/$$(TARGET)/$1 +$1_DRVDIR = ../$1 + +$1_OBJPAT = $$($1_OBJDIR)/$$(OBJPFX)%.o +$1_DRVPAT = $$($1_DRVDIR)/$$(DRVPFX)%.$1 +$1_STCPAT = ../wrk/$$(TARGET)/$$(DRVPFX)%-$1.o + +$1_OBJS := $$(patsubst $$($1_SRCDIR)/%.s,$$($1_OBJDIR)/%.o,$$(wildcard $$($1_SRCDIR)/*.s)) + +$1_DRVS = $$(patsubst $$($1_OBJPAT),$$($1_DRVPAT),$$($1_OBJS)) + +$1_STCS = $$(patsubst $$($1_DRVPAT),$$($1_STCPAT),$$($1_DRVS)) + +$$($1_OBJS): | $$($1_OBJDIR) + +$$($1_DRVPAT): $$($1_OBJPAT) $$(ZPOBJ) | $$($1_DRVDIR) + @echo $$(TARGET) - $$(@F) + @$$(LD65) -o $$@ -t module $$^ + +$$($1_OBJDIR) $$($1_DRVDIR): + @$$(call MKDIR,$$@) + +$(TARGET): $$($1_DRVS) + +$$($1_STCPAT): $$($1_DRVPAT) + @echo $$(TARGET) - $$(