xref: /xnu-11215.81.4/tests/sched/sched_test_harness/Makefile (revision d4514f0bc1d3f944c22d92e68b646ac3fb40d452)
1ifneq ($(PLATFORM),MacOSX)
2# Exclude building for any platform except MacOSX, due to arch/target incompatibility
3EXCLUDED_SOURCES += sched/clutch_runqueue.c
4else
5
6SCHED_HARNESS := sched/sched_test_harness
7SCHED_HARNESS_SHADOW := $(SCHED_HARNESS)/shadow_headers
8SCHED_CLUTCH_DISABLED_WARNINGS := -Wno-declaration-after-statement -Wno-nullability-completeness -Wno-missing-prototypes -Wno-gnu-statement-expression-from-macro-expansion -Wno-implicit-int-conversion -Wno-sign-conversion -Wno-c++98-compat -Wno-language-extension-token
9SCHED_HARNESS_DEFINES := -DSCHED_TEST_HARNESS=1 -DCONFIG_SCHED_CLUTCH=1 -DCONFIG_SCHED_TIMESHARE_CORE=1
10# Configure osmfk/kern/queue.h to define symbol __queue_element_linkage_invalid()
11SCHED_HARNESS_DEFINES += -DDRIVERKIT_FRAMEWORK_INCLUDE=1
12
13# Enable some ASan/UBSan in the test binary for MacOS target
14SCHED_HARNESS_DEBUG_FLAGS := -fsanitize=bounds -fsanitize=null -fsanitize=address -O0 -g
15
16XNU_SRC := ..
17# List the shadow_headers directory first before ../osfmk/ so that headers present in the
18# harness directory override the versions in xnu source proper
19SCHED_HARNESS_COMPILER_SEARCH_ORDER := -I $(SCHED_HARNESS_SHADOW)/ -I $(XNU_SRC)/osfmk/
20
21# Track file modifications correctly in the recipe
22SCHED_HARNESS_DEPS := $(shell find $(SCHED_HARNESS) -name "*.c" -o -name "*.h")
23SCHED_CLUTCH_DEPS := $(XNU_SRC)/osfmk/kern/sched_clutch.c $(XNU_SRC)/osfmk/kern/sched_clutch.h $(XNU_SRC)/osfmk/kern/queue.h $(XNU_SRC)/osfmk/kern/circle_queue.h $(XNU_SRC)/osfmk/kern/bits.h $(XNU_SRC)/osfmk/kern/sched.h
24
25# Guard-out some unwanted includes without needing to modify the original header files
26SCHED_CLUTCH_UNWANTED_HDRS := mach/policy.h kern/smp.h kern/ast.h kern/timer_call.h
27clutch_setup_placehold_hdrs:
28	mkdir -p $(SCHED_HARNESS_SHADOW)/mach
29	for hdr in $(SCHED_CLUTCH_UNWANTED_HDRS); do \
30		echo "/* Empty file used as a placeholder for " $$hdr " that we don't want to import */" > $(SCHED_HARNESS_SHADOW)/$$hdr; \
31	done
32	# Replace osfmk/mach/mach_types.h with smaller set of dependencies combined in misc_needed_defines.h,
33	# ultimately satisfying dependencies needed by osfmk/kern/sched.h
34	echo '#include "misc_needed_defines.h"' > $(SCHED_HARNESS_SHADOW)/mach/mach_types.h
35
36# Link together all the object files (built below) with the unit tests into a final binary
37sched/clutch_runqueue: INVALID_ARCHS = $(filter-out arm64e%,$(ARCH_CONFIGS))
38sched/clutch_runqueue: OTHER_CFLAGS += $(SCHED_HARNESS_DEFINES) $(SCHED_HARNESS_DEBUG_FLAGS) $(SCHED_HARNESS_COMPILER_SEARCH_ORDER) -Wno-gnu-binary-literal
39sched/clutch_runqueue: OTHER_LDFLAGS += -ldarwintest_utils $(SCHED_HARNESS_DEBUG_FLAGS) $(OBJROOT)/sched_clutch_harness.o $(OBJROOT)/priority_queue.o $(OBJROOT)/sched_runqueue_harness.o
40sched/clutch_runqueue: $(OBJROOT)/sched_clutch_harness.o $(OBJROOT)/priority_queue.o $(OBJROOT)/sched_runqueue_harness.o
41
42# Runqueue harness
43$(OBJROOT)/sched_runqueue_harness.o: OTHER_CFLAGS += $(SCHED_HARNESS_DEBUG_FLAGS)
44$(OBJROOT)/sched_runqueue_harness.o: $(SCHED_HARNESS)/sched_runqueue_harness.c
45	$(MAKE) clutch_setup_placehold_hdrs
46	$(CC) $(OTHER_CFLAGS) $(CFLAGS) -c $< -o $@
47
48# Clutch harness
49$(OBJROOT)/sched_clutch_harness.o: OTHER_CFLAGS += $(SCHED_HARNESS_DEFINES) $(SCHED_HARNESS_DEBUG_FLAGS) $(SCHED_CLUTCH_DISABLED_WARNINGS) $(SCHED_HARNESS_COMPILER_SEARCH_ORDER)
50$(OBJROOT)/sched_clutch_harness.o: $(SCHED_HARNESS)/sched_clutch_harness.c $(SCHED_HARNESS_DEPS) $(SCHED_CLUTCH_DEPS)
51	$(MAKE) clutch_setup_placehold_hdrs
52	$(CC) $(OTHER_CFLAGS) $(CFLAGS) -c $< -o $@
53
54# Priority queue C++ dependency
55$(OBJROOT)/priority_queue.o: OTHER_CXXFLAGS += -std=c++11 $(SCHED_HARNESS_DEFINES) $(SCHED_HARNESS_DEBUG_FLAGS) $(SCHED_HARNESS_COMPILER_SEARCH_ORDER)
56$(OBJROOT)/priority_queue.o: $(SCHED_HARNESS_SHADOW)/priority_queue.cpp
57	$(CXX) $(OTHER_CXXFLAGS) $(CXXFLAGS) -c $< -o $@
58
59endif
60