| 1 | ### -*-makefile-*- |
| 2 | |
| 3 | V = 0 |
| 4 | vcond = $(call vcond_$V,$1,$2) |
| 5 | vcond_0 = $1 |
| 6 | vcond_1 = $2 |
| 7 | V_AT = $(call vcond,@) |
| 8 | vtag = \ |
| 9 | $(call vcond,@printf " %-8s %s\n" "$1" "$(or $2,$@)";) |
| 10 | |
| 11 | ARCH = |
| 12 | |
| 13 | CFLAGS = -O2 -g -Wall -Werror |
| 14 | ASFLAGS = $(CFLAGS) |
| 15 | LDFLAGS = |
| 16 | |
| 17 | ARCH += i386 |
| 18 | CC/i386 = gcc -m32 |
| 19 | |
| 20 | ARCH += amd64 |
| 21 | CC/amd64 = gcc -m64 |
| 22 | |
| 23 | ARCH += armhf |
| 24 | CC/armhf = arm-linux-gnueabihf-gcc |
| 25 | |
| 26 | ARCH += arm64 |
| 27 | CC/arm64 = aarch64-linux-gnu-gcc |
| 28 | |
| 29 | define defarch.body |
| 30 | AS/$1 = $$(CC/$1) |
| 31 | LD/$1 = $$(CC/$1) |
| 32 | %-$1.o: %.c |
| 33 | $$(call vtag,CC/$1)$$(CC/$1) -c -o $$@ $$(CFLAGS) $$(CFLAGS/$1) $$< |
| 34 | %-$1.o: %.S |
| 35 | $$(call vtag,AS/$1)$$(AS/$1) -c -o $$@ $$(ASFLAGS) $$(ASFLAGS/$1) $$< |
| 36 | all:: xchg-$1 |
| 37 | xchg-$1: xchg-$1.o main-$1.o |
| 38 | $$(call vtag,LD/$1)$$(LD/$1) -o $$@ $$^ |
| 39 | endef |
| 40 | defarch = $(eval $(call defarch.body,$1)) |
| 41 | $(foreach a,$(ARCH), $(call defarch,$a)) |
| 42 | |
| 43 | clean::; rm -f $(foreach a,$(ARCH), xchg-$a) *.o |