X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2FMakefile;h=0ebec46b159a9d41d2990b33be6bed56552ee880;hb=db8bd84a82992d7d29fdd46443c194c1d8ea37fd;hp=99da96f1e809eca6cee7827d60e22178be56b007;hpb=3f7cd3387f0d70716f8dcbc48f19b7b8dcd0d607;p=cc65 diff --git a/libsrc/Makefile b/libsrc/Makefile index 99da96f1e..0ebec46b1 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -1,3 +1,7 @@ +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + CBMS = c128 \ c16 \ c64 \ @@ -10,18 +14,26 @@ CBMS = c128 \ GEOS = geos-apple \ geos-cbm -TARGETS = apple2 \ - apple2enh \ - atari \ - atarixl \ - atmos \ - $(CBMS) \ - $(GEOS) \ - lynx \ - nes \ - sim6502 \ - sim65c02 \ - supervision +TARGETS = apple2 \ + apple2enh \ + atari \ + atarixl \ + atari2600 \ + atari5200 \ + atmos \ + creativision \ + $(CBMS) \ + $(GEOS) \ + gamate \ + lynx \ + nes \ + none \ + osic1p \ + pce \ + sim6502 \ + sim65c02 \ + supervision \ + telestrat DRVTYPES = emd \ joy \ @@ -29,6 +41,27 @@ DRVTYPES = emd \ ser \ tgi +OUTPUTDIRS := lib \ + asminc \ + cfg \ + include \ + $(subst ../,,$(filter-out $(wildcard ../include/*.*),$(wildcard ../include/*))) \ + $(subst ../,,$(wildcard ../target/*/drv/*)) \ + $(subst ../,,$(wildcard ../target/*/util)) + +.PHONY: all mostlyclean clean install zip lib $(TARGETS) + +.SUFFIXES: + +ifdef CMD_EXE + DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir)))) + MKDIR = mkdir $(subst /,\,$1) + RMDIR = $(if $(DIRLIST),rmdir /s /q $(subst /,\,$(DIRLIST))) +else + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + # Every target requires its individual vpath setting but the vpath directive # acts globally. Therefore each target is built in a separate make instance. @@ -38,55 +71,50 @@ ifeq ($(words $(MAKECMDGOALS)),1) endif endif -DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir)))) +ifndef TARGET -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 +datadir = $(PREFIX)/share/cc65 -.SUFFIXES: +all lib: $(TARGETS) -.PHONY: all lib $(TARGETS) mostlyclean clean install +mostlyclean: + $(call RMDIR,../libwrk) -ifndef TARGET +clean: + $(call RMDIR,../libwrk ../lib ../target) -datadir = $(prefix)/share/cc65 +ifdef CMD_EXE -INSTALLDIRS = ../asminc ../cfg ../include \ - $(filter-out $(wildcard ../include/*.*),$(wildcard ../include/*)) \ - ../lib ../targetutil $(addprefix ../,$(DRVTYPES)) +install: -INSTALL = install +else # CMD_EXE -all lib: $(TARGETS) +INSTALL = install -$(TARGETS): - @$(MAKE) --no-print-directory $@ +define INSTALL_recipe -mostlyclean: - $(call RMDIR,../wrk) +$(if $(PREFIX),,$(error variable "PREFIX" must be set)) +$(INSTALL) -d $(DESTDIR)$(datadir)/$(dir) +$(INSTALL) -m0644 ../$(dir)/*.* $(DESTDIR)$(datadir)/$(dir) -clean: - $(call RMDIR,../wrk ../lib ../targetutil $(addprefix ../,$(DRVTYPES))) +endef # INSTALL_recipe install: - $(foreach dir,$(INSTALLDIRS),$(INSTALL_recipe)) + $(foreach dir,$(OUTPUTDIRS),$(INSTALL_recipe)) -########## +endif # CMD_EXE -define INSTALL_recipe +define ZIP_recipe + +@cd .. && zip cc65 $(dir)/*.* -$(if $(prefix),,$(error variable `prefix' must be set)) -$(INSTALL) -d $(subst ..,$(DESTDIR)$(datadir),$(dir)) -$(INSTALL) -m644 $(dir)/*.* $(subst ..,$(DESTDIR)$(datadir),$(dir)) +endef # ZIP_recipe -endef +zip: + $(foreach dir,$(OUTPUTDIRS),$(ZIP_recipe)) -########## +$(TARGETS): + @$(MAKE) --no-print-directory $@ else # TARGET @@ -99,10 +127,12 @@ EXTZP = cbm510 \ MKINC = $(GEOS) \ atari \ + atarixl \ nes -TARGETUTIL = apple2 \ - atari \ +TARGETUTIL = apple2 \ + apple2enh \ + atari \ geos-apple GEOSDIRS = common \ @@ -160,114 +190,105 @@ 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)))) +OBJS := $(addprefix ../libwrk/$(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)) +DEPS += $(EXTRA_OBJS:../lib/%.o=../libwrk/$(TARGET)/%.d) -ZPOBJ = ../wrk/$(TARGET)/zeropage.o +ZPOBJ = ../libwrk/$(TARGET)/zeropage.o ifeq ($(TARGET),$(filter $(TARGET),$(EXTZP))) - ZPOBJ += ../wrk/$(TARGET)/extzp.o + ZPOBJ += ../libwrk/$(TARGET)/extzp.o endif -ifeq ($(SRCDIR),$(filter $(SRCDIR),$(MKINC))) +ifeq ($(TARGET),$(filter $(TARGET),$(MKINC))) include $(SRCDIR)/Makefile.inc endif -ifeq ($(SRCDIR),$(filter $(SRCDIR),$(TARGETUTIL))) +ifeq ($(TARGET),$(filter $(TARGET),$(TARGETUTIL))) include $(SRCDIR)/targetutil/Makefile.inc endif -########## - define DRVTYPE_template $1_SRCDIR = $$(SRCDIR)/$1 -$1_OBJDIR = ../wrk/$$(TARGET)/$1 -$1_DRVDIR = ../$1 +$1_STCDIR = ../libwrk/$$(TARGET) +$1_DYNDIR = ../libwrk/$$(TARGET)/$1 +$1_DRVDIR = ../target/$$(TARGET)/drv/$1 -$1_OBJPAT = $$($1_OBJDIR)/$$(OBJPFX)%.o +$1_SRCPAT = $$($1_SRCDIR)/$$(OBJPFX)%.s +$1_STCPAT = $$($1_STCDIR)/$$(OBJPFX)%-$1.o +$1_DYNPAT = $$($1_DYNDIR)/$$(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_SRCS := $$(wildcard $$($1_SRCDIR)/*.s) +$1_STCS = $$(patsubst $$($1_SRCPAT),$$($1_STCPAT),$$($1_SRCS)) +$1_DYNS = $$(patsubst $$($1_SRCPAT),$$($1_DYNPAT),$$($1_SRCS)) +$1_DRVS = $$(patsubst $$($1_DYNPAT),$$($1_DRVPAT),$$($1_DYNS)) -$1_DRVS = $$(patsubst $$($1_OBJPAT),$$($1_DRVPAT),$$($1_OBJS)) +$$($1_STCPAT): $$($1_SRCPAT) + @echo $$(TARGET) - $$< - static + @$$(CA65) -t $$(TARGET) -D DYN_DRV=0 $$(CA65FLAGS) --create-dep $$(@:.o=.d) -o $$@ $$< -$1_STCS = $$(patsubst $$($1_DRVPAT),$$($1_STCPAT),$$($1_DRVS)) +OBJS += $$($1_STCS) +DEPS += $$($1_STCS:.o=.d) -$$($1_OBJS): | $$($1_OBJDIR) +$$($1_DYNS): | $$($1_DYNDIR) -$$($1_DRVPAT): $$($1_OBJPAT) $$(ZPOBJ) | $$($1_DRVDIR) +$$($1_DRVPAT): $$($1_DYNPAT) $$(ZPOBJ) | $$($1_DRVDIR) @echo $$(TARGET) - $$(