X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2FMakefile;h=52465142864e47c02ae08866ab061bf60a49232f;hb=8b3e12d632f22bfd3c3722d88195dc3ce4acc90a;hp=051c7eb1fe952cfd93bcc8294f088e620909dbba;hpb=3bd5d3f88bf8dd084a6b6ac6247bce6db4749dc8;p=cc65 diff --git a/src/Makefile b/src/Makefile index 051c7eb1f..524651428 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,75 +1,126 @@ -ifeq ($(shell echo),) - -PROGS = ar65 \ - ca65 \ - cc65 \ - cl65 \ - co65 \ - da65 \ - grc65 \ - ld65 \ - od65 \ - sim65 \ +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +PROGS = ar65 \ + ca65 \ + cc65 \ + chrcvt65 \ + cl65 \ + co65 \ + da65 \ + grc65 \ + ld65 \ + od65 \ + sim65 \ sp65 -bindir := $(prefix)/bin -datadir := $(if $(prefix),$(prefix)/share/cc65,$(abspath ..)) +.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 +CL65_TGT = $(datadir)/target LD65_LIB = $(datadir)/lib LD65_OBJ = $(datadir)/lib LD65_CFG = $(datadir)/cfg -CFLAGS += -MMD -MP -O -std=c89 -I common \ - -Wall -Wextra -Wno-char-subscripts -Werror $(USER_CFLAGS) \ - -DCA65_INC=$(CA65_INC) -DCC65_INC=$(CC65_INC) \ - -DLD65_LIB=$(LD65_LIB) -DLD65_OBJ=$(LD65_OBJ) -DLD65_CFG=$(LD65_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) || svnversion 2>$(NULLDEV)) + ifneq ($(words $(GIT_SHA)),1) + GIT_SHA := N/A + $(info GIT_SHA: N/A) + endif +endif + +CFLAGS += -MMD -MP -O3 -I common \ + -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) \ + -DCA65_INC=$(CA65_INC) -DCC65_INC=$(CC65_INC) -DCL65_TGT=$(CL65_TGT) \ + -DLD65_LIB=$(LD65_LIB) -DLD65_OBJ=$(LD65_OBJ) -DLD65_CFG=$(LD65_CFG) \ + -DGIT_SHA=$(GIT_SHA) LDLIBS += -lm -INSTALL = install - -.SUFFIXES: +ifdef CMD_EXE + EXE_SUFFIX=.exe +endif -.PHONY: all bin $(PROGS) mostlyclean clean install avail unavail +ifdef CROSS_COMPILE + EXE_SUFFIX=.exe +endif all bin: $(PROGS) mostlyclean: - $(RM) -r ../wrk + $(call RMDIR,../wrk) clean: - $(RM) -r ../wrk ../bin + $(call RMDIR,../wrk ../bin) -install: - $(if $(prefix),,$(error variable `prefix' must be set)) - $(INSTALL) -d $(DESTDIR)$(bindir) - $(INSTALL) ../bin/* $(DESTDIR)$(bindir) +ifdef CMD_EXE -avail: - $(foreach prog,$(PROGS),$(AVAIL_recipe)) +install avail unavail: -unavail: - $(foreach prog,$(PROGS),$(UNAVAIL_recipe)) +else # CMD_EXE -########## +INSTALL = install define AVAIL_recipe ln -s $(abspath ../bin/$(prog)) /usr/local/bin/$(prog) -endef - -########## +endef # AVAIL_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) + +avail: + $(foreach prog,$(PROGS),$(AVAIL_recipe)) + +unavail: + $(foreach prog,$(PROGS),$(UNAVAIL_recipe)) + +endif # CMD_EXE + +zip: + @cd .. && zip cc65 bin/* define OBJS_template @@ -78,55 +129,35 @@ $1_OBJS := $$(patsubst %.c,../wrk/%.o,$$(wildcard $1/*.c)) $$($1_OBJS): | ../wrk/$1 ../wrk/$1: - @mkdir -p $$@ + @$$(call MKDIR,$$@) DEPS += $$($1_OBJS:.o=.d) -endef - -########## +endef # OBJS_template define PROG_template $$(eval $$(call OBJS_template,$1)) -../bin/$1$(PROGEXT): $$($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$(PROGEXT) - -endef +$1: ../bin/$1$(EXE_SUFFIX) -########## +endef # PROG_template ../wrk/%.o: %.c @echo $< @$(CC) -c $(CFLAGS) -o $@ $< ../bin: - @mkdir $@ + @$(call MKDIR,$@) $(eval $(call OBJS_template,common)) + ../wrk/common/common.a: $(common_OBJS) $(AR) r $@ $? $(foreach prog,$(PROGS),$(eval $(call PROG_template,$(prog)))) -include $(DEPS) - -else # cmd.exe - -.SUFFIXES: - -.PHONY: all bin mostlyclean clean - -all bin: - msbuild cc65.sln /p:configuration=release /consoleloggerparameters:disableconsolecolor - -mostlyclean: - $(if $(wildcard ../wrk),rmdir /s /q ..\wrk) - -clean: - msbuild cc65.sln /p:configuration=release /consoleloggerparameters:disableconsolecolor /target:$@ - -endif # cmd.exe