### -*-makefile-*- V = 0 vcond = $(call vcond_$V,$1,$2) vcond_0 = $1 vcond_1 = $2 V_AT = $(call vcond,@) vtag = \ $(call vcond,@printf " %-8s %s\n" "$1" "$(or $2,$@)";) ARCH = CFLAGS = -O2 -g -Wall -Werror ASFLAGS = $(CFLAGS) LDFLAGS = ARCH += i386 CC/i386 = gcc -m32 ARCH += amd64 CC/amd64 = gcc -m64 ARCH += armhf CC/armhf = arm-linux-gnueabihf-gcc ARCH += arm64 CC/arm64 = aarch64-linux-gnu-gcc define defarch.body AS/$1 = $$(CC/$1) LD/$1 = $$(CC/$1) %-$1.o: %.c $$(call vtag,CC/$1)$$(CC/$1) -c -o $$@ $$(CFLAGS) $$(CFLAGS/$1) $$< %-$1.o: %.S $$(call vtag,AS/$1)$$(AS/$1) -c -o $$@ $$(ASFLAGS) $$(ASFLAGS/$1) $$< all:: xchg-$1 xchg-$1: xchg-$1.o main-$1.o $$(call vtag,LD/$1)$$(LD/$1) -o $$@ $$^ endef defarch = $(eval $(call defarch.body,$1)) $(foreach a,$(ARCH), $(call defarch,$a)) clean::; rm -f $(foreach a,$(ARCH), xchg-$a) *.o