162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ciTEST_GEN_PROGS := btitest nobtitest
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci# These tests are built as freestanding binaries since otherwise BTI
662306a36Sopenharmony_ci# support in ld.so is required which is not currently widespread; when
762306a36Sopenharmony_ci# it is available it will still be useful to test this separately as the
862306a36Sopenharmony_ci# cases for statically linked and dynamically lined binaries are
962306a36Sopenharmony_ci# slightly different.
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciCFLAGS_NOBTI = -mbranch-protection=none -DBTI=0
1262306a36Sopenharmony_ciCFLAGS_BTI = -mbranch-protection=standard -DBTI=1
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ciCFLAGS_COMMON = -ffreestanding -Wall -Wextra $(CFLAGS)
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciBTI_CC_COMMAND = $(CC) $(CFLAGS_BTI) $(CFLAGS_COMMON) -c -o $@ $<
1762306a36Sopenharmony_ciNOBTI_CC_COMMAND = $(CC) $(CFLAGS_NOBTI) $(CFLAGS_COMMON) -c -o $@ $<
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci$(OUTPUT)/%-bti.o: %.c
2062306a36Sopenharmony_ci	$(BTI_CC_COMMAND)
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci$(OUTPUT)/%-bti.o: %.S
2362306a36Sopenharmony_ci	$(BTI_CC_COMMAND)
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci$(OUTPUT)/%-nobti.o: %.c
2662306a36Sopenharmony_ci	$(NOBTI_CC_COMMAND)
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci$(OUTPUT)/%-nobti.o: %.S
2962306a36Sopenharmony_ci	$(NOBTI_CC_COMMAND)
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciBTI_OBJS =                                      \
3262306a36Sopenharmony_ci	$(OUTPUT)/test-bti.o                    \
3362306a36Sopenharmony_ci	$(OUTPUT)/signal-bti.o                  \
3462306a36Sopenharmony_ci	$(OUTPUT)/start-bti.o                   \
3562306a36Sopenharmony_ci	$(OUTPUT)/syscall-bti.o                 \
3662306a36Sopenharmony_ci	$(OUTPUT)/system-bti.o                  \
3762306a36Sopenharmony_ci	$(OUTPUT)/teststubs-bti.o               \
3862306a36Sopenharmony_ci	$(OUTPUT)/trampoline-bti.o
3962306a36Sopenharmony_ci$(OUTPUT)/btitest: $(BTI_OBJS)
4062306a36Sopenharmony_ci	$(CC) $(CFLAGS_BTI) $(CFLAGS_COMMON) -nostdlib -static -o $@ $^
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciNOBTI_OBJS =                                    \
4362306a36Sopenharmony_ci	$(OUTPUT)/test-nobti.o                  \
4462306a36Sopenharmony_ci	$(OUTPUT)/signal-nobti.o                \
4562306a36Sopenharmony_ci	$(OUTPUT)/start-nobti.o                 \
4662306a36Sopenharmony_ci	$(OUTPUT)/syscall-nobti.o               \
4762306a36Sopenharmony_ci	$(OUTPUT)/system-nobti.o                \
4862306a36Sopenharmony_ci	$(OUTPUT)/teststubs-nobti.o             \
4962306a36Sopenharmony_ci	$(OUTPUT)/trampoline-nobti.o
5062306a36Sopenharmony_ci$(OUTPUT)/nobtitest: $(NOBTI_OBJS)
5162306a36Sopenharmony_ci	$(CC) $(CFLAGS_BTI) $(CFLAGS_COMMON) -nostdlib -static -o $@ $^
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci# Including KSFT lib.mk here will also mangle the TEST_GEN_PROGS list
5462306a36Sopenharmony_ci# to account for any OUTPUT target-dirs optionally provided by
5562306a36Sopenharmony_ci# the toplevel makefile
5662306a36Sopenharmony_ciinclude ../../lib.mk
57