X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2FMakefile;h=5aafc4bb8f4b9a44b5d65c531f116bda15679e09;hb=877fd532c28e0a23f3d0d7253c6936d056d3b3ce;hp=bb09a80e3dcfb76020047c85480aff30eb5704b4;hpb=81f461a15c4286eb1260d92835765a5c93393076;p=cc65 diff --git a/src/Makefile b/src/Makefile index bb09a80e3..5aafc4bb8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,3 +1,7 @@ +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + PROGS = ar65 \ ca65 \ cc65 \ @@ -7,91 +11,147 @@ PROGS = ar65 \ grc65 \ ld65 \ od65 \ + sim65 \ sp65 -CA65_INC := $(abspath ../asminc) -CC65_INC := $(abspath ../include) -LD65_LIB := $(abspath ../lib) -LD65_OBJ := $(abspath ../lib) -LD65_CFG := $(abspath ../cfg) - -CFLAGS += -MMD -MP -O -std=c89 -I common \ - -Wall -Wextra -Wno-char-subscripts -Werror \ - -DCA65_INC=$(CA65_INC) -DCC65_INC=$(CC65_INC) \ +.PHONY: all mostlyclean clean install zip avail unavail bin $(PROGS) + +.SUFFIXES: + +bindir := $(prefix)/bin +datadir := $(if $(prefix),$(prefix)/share/cc65,$(abspath ..)) + +CA65_INC = $(datadir)/asminc +CC65_INC = $(datadir)/include +LD65_LIB = $(datadir)/lib +LD65_OBJ = $(datadir)/lib +LD65_CFG = $(datadir)/cfg + +ifdef CMD_EXE + NULLDEV = nul: + DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir)))) + MKDIR = mkdir $(subst /,\,$1) + RMDIR = $(if $(DIRLIST),rmdir /s /q $(subst /,\,$(DIRLIST))) +else + NULLDEV = /dev/null + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +CC = $(CROSS_COMPILE)gcc +AR = $(CROSS_COMPILE)ar + +ifdef CROSS_COMPILE + $(info CC: $(CC)) + $(info AR: $(AR)) +endif + +ifdef USER_CFLAGS + $(info USER_CFLAGS: $(USER_CFLAGS)) +endif + +ifdef GIT_SHA + $(info GIT_SHA: $(GIT_SHA)) +else + GIT_SHA := $(shell git rev-parse --short HEAD 2>$(NULLDEV)) + ifneq ($(words $(GIT_SHA)),1) + GIT_SHA := N/A + $(info GIT_SHA: N/A) + endif +endif + +CFLAGS += -MMD -MP -O -I common \ + -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) \ + -DGIT_SHA=$(GIT_SHA) -DCA65_INC=$(CA65_INC) -DCC65_INC=$(CC65_INC) \ -DLD65_LIB=$(LD65_LIB) -DLD65_OBJ=$(LD65_OBJ) -DLD65_CFG=$(LD65_CFG) LDLIBS += -lm -all: $(PROGS) +ifdef CMD_EXE + EXE_SUFFIX=.exe +endif + +ifdef CROSS_COMPILE + EXE_SUFFIX=.exe +endif + +all bin: $(PROGS) mostlyclean: - $(RM) -r ../wrk + $(call RMDIR,../wrk) -clean: mostlyclean - $(RM) -r ../bin +clean: + $(call RMDIR,../wrk ../bin) -install: all - $(foreach prog,$(PROGS),$(INSTALL_recipe)) +ifdef CMD_EXE -uninstall: - $(foreach prog,$(PROGS),$(UNINSTALL_recipe)) +install avail unavail: -.PHONY: all $(PROGS) mostlyclean clean install uninstall +else # CMD_EXE -########## +INSTALL = install -define INSTALL_recipe +define AVAIL_recipe ln -s $(abspath ../bin/$(prog)) /usr/local/bin/$(prog) -endef - -########## +endef # AVAIL_recipe -define UNINSTALL_recipe +define UNAVAIL_recipe $(RM) /usr/local/bin/$(prog) -endef +endef # UNAVAIL_recipe -########## +install: + $(if $(prefix),,$(error variable `prefix' must be set)) + $(INSTALL) -d $(DESTDIR)$(bindir) + $(INSTALL) ../bin/* $(DESTDIR)$(bindir) -define OBJS_template +avail: + $(foreach prog,$(PROGS),$(AVAIL_recipe)) -$(1)_OBJS := $$(addprefix ../wrk/,$$(addsuffix .o,$$(basename $$(wildcard $(1)/*.c)))) +unavail: + $(foreach prog,$(PROGS),$(UNAVAIL_recipe)) -$$($(1)_OBJS): | ../wrk/$(1) +endif # CMD_EXE -../wrk/$(1): - mkdir -p $$@ +zip: + @cd .. && zip cc65 bin/* -DEPS += $$($(1)_OBJS:.o=.d) +define OBJS_template + +$1_OBJS := $$(patsubst %.c,../wrk/%.o,$$(wildcard $1/*.c)) + +$$($1_OBJS): | ../wrk/$1 -endef +../wrk/$1: + @$$(call MKDIR,$$@) -########## +DEPS += $$($1_OBJS:.o=.d) + +endef # OBJS_template define PROG_template -$$(eval $$(call OBJS_template,$(1))) +$$(eval $$(call OBJS_template,$1)) -../bin/$(1): $$($(1)_OBJS) ../wrk/common/common.a | ../bin +../bin/$1$(EXE_SUFFIX): $$($1_OBJS) ../wrk/common/common.a | ../bin $$(CC) $$(LDFLAGS) -o $$@ $$^ $$(LDLIBS) -$(1): ../bin/$(1) - -endef +$1: ../bin/$1$(EXE_SUFFIX) -########## +endef # PROG_template ../wrk/%.o: %.c - @echo $(CC) $< + @echo $< @$(CC) -c $(CFLAGS) -o $@ $< ../bin: - mkdir $@ + @$(call MKDIR,$@) $(eval $(call OBJS_template,common)) + ../wrk/common/common.a: $(common_OBJS) $(AR) r $@ $?