1# SPDX-License-Identifier: GPL-2.0
2
3TEST_GEN_PROGS := btitest nobtitest
4
5# These tests are built as freestanding binaries since otherwise BTI
6# support in ld.so is required which is not currently widespread; when
7# it is available it will still be useful to test this separately as the
8# cases for statically linked and dynamically lined binaries are
9# slightly different.
10
11CFLAGS_NOBTI = -mbranch-protection=none -DBTI=0
12CFLAGS_BTI = -mbranch-protection=standard -DBTI=1
13
14CFLAGS_COMMON = -ffreestanding -Wall -Wextra $(CFLAGS)
15
16BTI_CC_COMMAND = $(CC) $(CFLAGS_BTI) $(CFLAGS_COMMON) -c -o $@ $<
17NOBTI_CC_COMMAND = $(CC) $(CFLAGS_NOBTI) $(CFLAGS_COMMON) -c -o $@ $<
18
19$(OUTPUT)/%-bti.o: %.c
20	$(BTI_CC_COMMAND)
21
22$(OUTPUT)/%-bti.o: %.S
23	$(BTI_CC_COMMAND)
24
25$(OUTPUT)/%-nobti.o: %.c
26	$(NOBTI_CC_COMMAND)
27
28$(OUTPUT)/%-nobti.o: %.S
29	$(NOBTI_CC_COMMAND)
30
31BTI_OBJS =                                      \
32	$(OUTPUT)/test-bti.o                    \
33	$(OUTPUT)/signal-bti.o                  \
34	$(OUTPUT)/start-bti.o                   \
35	$(OUTPUT)/syscall-bti.o                 \
36	$(OUTPUT)/system-bti.o                  \
37	$(OUTPUT)/teststubs-bti.o               \
38	$(OUTPUT)/trampoline-bti.o
39$(OUTPUT)/btitest: $(BTI_OBJS)
40	$(CC) $(CFLAGS_BTI) $(CFLAGS_COMMON) -nostdlib -static -o $@ $^
41
42NOBTI_OBJS =                                    \
43	$(OUTPUT)/test-nobti.o                  \
44	$(OUTPUT)/signal-nobti.o                \
45	$(OUTPUT)/start-nobti.o                 \
46	$(OUTPUT)/syscall-nobti.o               \
47	$(OUTPUT)/system-nobti.o                \
48	$(OUTPUT)/teststubs-nobti.o             \
49	$(OUTPUT)/trampoline-nobti.o
50$(OUTPUT)/nobtitest: $(NOBTI_OBJS)
51	$(CC) $(CFLAGS_BTI) $(CFLAGS_COMMON) -nostdlib -static -o $@ $^
52
53# Including KSFT lib.mk here will also mangle the TEST_GEN_PROGS list
54# to account for any OUTPUT target-dirs optionally provided by
55# the toplevel makefile
56include ../../lib.mk
57