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