-ifeq ($(shell echo),)
+ifneq ($(shell echo),)
+ CMD_EXE = 1
+endif
PROGS = ar65 \
ca65 \
sim65 \
sp65
+.PHONY: all mostlyclean clean install zip avail unavail bin $(PROGS)
+
+.SUFFIXES:
+
bindir := $(prefix)/bin
datadir := $(if $(prefix),$(prefix)/share/cc65,$(abspath ..))
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) \
+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
+
+ifndef GIT_SHA
+ GIT_SHA := $(if $(wildcard ../.git),$(shell git rev-parse --short HEAD))
+ ifneq ($(words $(GIT_SHA)),1)
+ GIT_SHA := N/A
+ endif
+endif
+$(info GIT_SHA: $(GIT_SHA))
+
+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
-INSTALL = install
+ifdef CMD_EXE
+ EXE_SUFFIX=.exe
+endif
-.SUFFIXES:
+ifdef CROSS_COMPILE
+ EXE_SUFFIX=.exe
+endif
-.PHONY: all bin $(PROGS) mostlyclean clean install avail unavail
+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
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
$$($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)
+$1: ../bin/$1$(EXE_SUFFIX)
-endef
-
-##########
+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