Multiple architectures, more solutions.
[xchg-rax-rax] / Makefile
index ca069ff..5488b34 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -8,23 +8,36 @@ V_AT                   = $(call vcond,@)
 vtag                    = \
        $(call vcond,@printf "  %-8s %s\n" "$1" "$(or $2,$@)";)
 
-CC                      = gcc -m64
-CFLAGS                  = -O2 -g -Wall -Werror
-
-AS                      = gcc -m64
-ASFLAGS                         = -O2 -g
+ARCH                    =
 
-LD                      = gcc -m64
+CFLAGS                  = -O2 -g -Wall -Werror
+ASFLAGS                         = $(CFLAGS)
 LDFLAGS                         =
 
-%.o: %.c
-       $(call vtag,CC)$(CC) -c -o $@ $(CFLAGS) $<
-
-%.o: %.S
-       $(call vtag,AS)$(AS) -c -o $@ $(ASFLAGS) $<
-
-all:: xchg
-xchg: xchg.o main.o
-       $(call vtag,LD)$(LD) -o $@ $^
-
-clean::; rm -f xchg *.o
+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