chiark / gitweb /
xchg.S: More exercises.
[xchg-rax-rax] / Makefile
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