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