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