1ifneq ($(shell echo),) 2 CMD_EXE = 1 3endif 4 5PROGS = ar65 \ 6 ca65 \ 7 cc65 \ 8 chrcvt65 \ 9 cl65 \ 10 co65 \ 11 da65 \ 12 grc65 \ 13 ld65 \ 14 od65 \ 15 sim65 \ 16 sp65 17 18.PHONY: all mostlyclean clean install zip avail unavail bin $(PROGS) 19 20.SUFFIXES: 21 22bindir := $(PREFIX)/bin 23datadir := $(if $(PREFIX),$(PREFIX)/share/cc65,$(abspath ..)) 24 25CA65_INC = $(datadir)/asminc 26CC65_INC = $(datadir)/include 27CL65_TGT = $(datadir)/target 28LD65_LIB = $(datadir)/lib 29LD65_OBJ = $(datadir)/lib 30LD65_CFG = $(datadir)/cfg 31 32ifdef CMD_EXE 33 NULLDEV = nul: 34 DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir)))) 35 MKDIR = mkdir $(subst /,\,$1) 36 RMDIR = $(if $(DIRLIST),rmdir /s /q $(subst /,\,$(DIRLIST))) 37else 38 NULLDEV = /dev/null 39 MKDIR = mkdir -p $1 40 RMDIR = $(RM) -r $1 41endif 42 43#CC = $(CROSS_COMPILE)gcc 44AR = $(CROSS_COMPILE)ar 45 46ifdef CROSS_COMPILE 47 $(info CC: $(CC)) 48 $(info AR: $(AR)) 49endif 50 51ifdef USER_CFLAGS 52 $(info USER_CFLAGS: $(USER_CFLAGS)) 53endif 54 55ifndef BUILD_ID 56 BUILD_ID := Git $(shell git rev-parse --short HEAD 2>$(NULLDEV) || svnversion 2>$(NULLDEV)) 57 ifneq ($(words $(BUILD_ID)),2) 58 BUILD_ID := N/A 59 endif 60endif 61$(info BUILD_ID: $(BUILD_ID)) 62 63CFLAGS += -MMD -MP -O3 -I common \ 64 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) \ 65 -DCA65_INC="$(CA65_INC)" -DCC65_INC="$(CC65_INC)" -DCL65_TGT="$(CL65_TGT)" \ 66 -DLD65_LIB="$(LD65_LIB)" -DLD65_OBJ="$(LD65_OBJ)" -DLD65_CFG="$(LD65_CFG)" \ 67 -DBUILD_ID="$(BUILD_ID)" 68 69LDLIBS += -lm 70 71ifdef CMD_EXE 72 EXE_SUFFIX=.exe 73endif 74 75ifdef CROSS_COMPILE 76 EXE_SUFFIX=.exe 77endif 78 79all bin: $(PROGS) 80 81mostlyclean: 82 $(call RMDIR,../wrk) 83 84clean: 85 $(call RMDIR,../wrk ../bin) 86 87ifdef CMD_EXE 88 89install avail unavail: 90 91else # CMD_EXE 92 93INSTALL = install 94 95define AVAIL_recipe 96 97ln -s $(abspath ../bin/$(prog)) /usr/local/bin/$(prog) 98 99endef # AVAIL_recipe 100 101define UNAVAIL_recipe 102 103$(RM) /usr/local/bin/$(prog) 104 105endef # UNAVAIL_recipe 106 107install: 108 $(if $(PREFIX),,$(error variable "PREFIX" must be set)) 109 $(INSTALL) -d $(DESTDIR)$(bindir) 110 $(INSTALL) ../bin/* $(DESTDIR)$(bindir) 111 112avail: 113 $(foreach prog,$(PROGS),$(AVAIL_recipe)) 114 115unavail: 116 $(foreach prog,$(PROGS),$(UNAVAIL_recipe)) 117 118endif # CMD_EXE 119 120zip: 121 @cd .. && zip cc65 bin/* 122 123define OBJS_template 124 125$1_OBJS := $$(patsubst %.c,../wrk/%.o,$$(wildcard $1/*.c)) 126 127$$($1_OBJS): | ../wrk/$1 128 129../wrk/$1: 130 @$$(call MKDIR,$$@) 131 132DEPS += $$($1_OBJS:.o=.d) 133 134endef # OBJS_template 135 136define PROG_template 137 138$$(eval $$(call OBJS_template,$1)) 139 140../bin/$1$(EXE_SUFFIX): $$($1_OBJS) ../wrk/common/common.a | ../bin 141 $$(CC) $$(LDFLAGS) -o $$@ $$^ $$(LDLIBS) 142 143$1: ../bin/$1$(EXE_SUFFIX) 144 145endef # PROG_template 146 147../wrk/%.o: %.c 148 @echo $< 149 @$(CC) -c $(CFLAGS) -o $@ $< 150 151../bin: 152 @$(call MKDIR,$@) 153 154$(eval $(call OBJS_template,common)) 155 156../wrk/common/common.a: $(common_OBJS) 157 $(AR) r $@ $? 158 159$(foreach prog,$(PROGS),$(eval $(call PROG_template,$(prog)))) 160 161-include $(DEPS) 162