xref: /xnu-11417.101.15/tests/sched/sched_test_harness/Makefile (revision e3723e1f17661b24996789d8afc084c0c3303b26)
1ifneq ($(PLATFORM),MacOSX)
2# Exclude building for any platform except MacOSX, due to arch/target incompatibility
3EXCLUDED_SOURCES += sched/clutch_runqueue.c sched/edge_runqueue.c sched/edge_migration.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 -Wno-c2x-extensions -Wno-format-nonliteral -Wno-unused-function
9SCHED_TEST_DISABLED_WARNINGS := -Wno-gnu-binary-literal -Wno-format-nonliteral -Wno-language-extension-token -Wno-sign-conversion
10SCHED_HARNESS_DEFINES := -DSCHED_TEST_HARNESS=1 -DCONFIG_SCHED_CLUTCH=1 -DCONFIG_SCHED_TIMESHARE_CORE=1 -DCONFIG_THREAD_GROUPS=1
11# Configure osmfk/kern/queue.h to define symbol __queue_element_linkage_invalid()
12SCHED_HARNESS_DEFINES += -DDRIVERKIT_FRAMEWORK_INCLUDE=1
13SCHED_EDGE_DEFINES := -DCONFIG_SCHED_EDGE=1 -D__AMP__=1
14
15# Enable some ASan/UBSan in the test binary for MacOS target
16SCHED_HARNESS_DEBUG_FLAGS := -fsanitize=bounds -fsanitize=null -fsanitize=address -gfull
17
18XNU_SRC := ..
19# List the shadow_headers directory first before ../osfmk/ so that headers present in the
20# harness directory override the versions in xnu source proper
21SCHED_HARNESS_COMPILER_SEARCH_ORDER := -I $(SCHED_HARNESS_SHADOW)/ -I $(XNU_SRC)/osfmk/
22
23# Track file modifications correctly in the recipe
24SCHED_HARNESS_DEPS := $(shell find $(SCHED_HARNESS) -name "*.c" -o -name "*.h")
25SCHED_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
26
27# Guard-out some unwanted includes without needing to modify the original header files
28SCHED_CLUTCH_UNWANTED_HDRS := mach/policy.h kern/smp.h kern/timer_call.h kern/macro_help.h kern/spl.h kern/misc_protos.h kern/thread.h
29clutch_setup_placehold_hdrs:
30	mkdir -p $(SCHED_HARNESS_SHADOW)/kern
31	mkdir -p $(SCHED_HARNESS_SHADOW)/mach
32	for hdr in $(SCHED_CLUTCH_UNWANTED_HDRS); do \
33		echo "/* Empty file used as a placeholder for " $$hdr " that we don't want to import */" > $(SCHED_HARNESS_SHADOW)/$$hdr; \
34	done
35	# Replace osfmk/mach/mach_types.h with smaller set of dependencies combined in misc_needed_defines.h,
36	# ultimately satisfying dependencies needed by osfmk/kern/sched.h
37	echo '#include "misc_needed_defines.h"' > $(SCHED_HARNESS_SHADOW)/mach/mach_types.h
38
39# Make it convenient to build all of the tests in one go
40SCHED_USERSPACE_UNIT_TESTS = sched/clutch_runqueue sched/edge_runqueue sched/edge_migration
41.PHONY: sched/userspace_unit_tests
42sched/userspace_unit_tests: $(SCHED_USERSPACE_UNIT_TESTS)
43SCHED_TARGETS += $(SCHED_USERSPACE_UNIT_TESTS)
44
45# Link together all the object files (built below) with the unit tests into a final binary
46sched/clutch_runqueue: INVALID_ARCHS = $(filter-out arm64e%,$(ARCH_CONFIGS))
47sched/clutch_runqueue: OTHER_CFLAGS += $(SCHED_HARNESS_DEFINES) $(SCHED_HARNESS_DEBUG_FLAGS) $(SCHED_HARNESS_COMPILER_SEARCH_ORDER) $(SCHED_TEST_DISABLED_WARNINGS) -DTEST_RUNQ_POLICY="clutch"
48sched/clutch_runqueue: OTHER_LDFLAGS += -ldarwintest_utils $(SCHED_HARNESS_DEBUG_FLAGS) $(OBJROOT)/sched_clutch_harness.o $(OBJROOT)/priority_queue.o $(OBJROOT)/sched_runqueue_harness.o
49sched/clutch_runqueue: $(OBJROOT)/sched_clutch_harness.o $(OBJROOT)/priority_queue.o $(OBJROOT)/sched_runqueue_harness.o
50sched/clutch_runqueue: CONFIG_FLAGS := $(filter-out -O%,$(CONFIG_FLAGS)) -O0 -gfull
51
52sched/edge_runqueue: INVALID_ARCHS = $(filter-out arm64e%,$(ARCH_CONFIGS))
53sched/edge_runqueue: OTHER_CFLAGS += $(SCHED_HARNESS_DEFINES) $(SCHED_EDGE_DEFINES) $(SCHED_HARNESS_DEBUG_FLAGS) $(SCHED_HARNESS_COMPILER_SEARCH_ORDER) $(SCHED_TEST_DISABLED_WARNINGS) -DTEST_RUNQ_POLICY="edge"
54sched/edge_runqueue: OTHER_LDFLAGS += -ldarwintest_utils $(SCHED_HARNESS_DEBUG_FLAGS) $(OBJROOT)/sched_edge_harness.o $(OBJROOT)/priority_queue.o $(OBJROOT)/sched_runqueue_harness.o $(OBJROOT)/sched_migration_harness.o
55sched/edge_runqueue: $(OBJROOT)/sched_edge_harness.o $(OBJROOT)/priority_queue.o $(OBJROOT)/sched_runqueue_harness.o $(OBJROOT)/sched_migration_harness.o
56sched/edge_runqueue: CONFIG_FLAGS := $(filter-out -O%,$(CONFIG_FLAGS)) -O0 -gfull
57
58sched/edge_migration: INVALID_ARCHS = $(filter-out arm64e%,$(ARCH_CONFIGS))
59sched/edge_migration: OTHER_CFLAGS += $(SCHED_HARNESS_DEFINES) $(SCHED_EDGE_DEFINES) $(SCHED_HARNESS_DEBUG_FLAGS) $(SCHED_HARNESS_COMPILER_SEARCH_ORDER) $(SCHED_TEST_DISABLED_WARNINGS) -DTEST_RUNQ_POLICY="edge"
60sched/edge_migration: OTHER_LDFLAGS += -ldarwintest_utils $(SCHED_HARNESS_DEBUG_FLAGS) $(OBJROOT)/sched_edge_harness.o $(OBJROOT)/priority_queue.o $(OBJROOT)/sched_runqueue_harness.o $(OBJROOT)/sched_migration_harness.o
61sched/edge_migration: $(OBJROOT)/sched_edge_harness.o $(OBJROOT)/priority_queue.o $(OBJROOT)/sched_runqueue_harness.o $(OBJROOT)/sched_migration_harness.o
62sched/edge_migration: CONFIG_FLAGS := $(filter-out -O%,$(CONFIG_FLAGS)) -O0 -gfull
63
64# Runqueue harness
65$(OBJROOT)/sched_runqueue_harness.o: OTHER_CFLAGS += $(SCHED_HARNESS_DEBUG_FLAGS)
66$(OBJROOT)/sched_runqueue_harness.o: $(SCHED_HARNESS)/sched_runqueue_harness.c
67	$(MAKE) clutch_setup_placehold_hdrs
68	$(CC) $(OTHER_CFLAGS) $(CFLAGS) -c $< -o $@
69
70# Migration harness
71$(OBJROOT)/sched_migration_harness.o: OTHER_CFLAGS += $(SCHED_HARNESS_DEBUG_FLAGS)
72$(OBJROOT)/sched_migration_harness.o: $(SCHED_HARNESS)/sched_migration_harness.c
73	$(MAKE) clutch_setup_placehold_hdrs
74	$(CC) $(OTHER_CFLAGS) $(CFLAGS) -c $< -o $@
75
76# Clutch harness
77$(OBJROOT)/sched_clutch_harness.o: OTHER_CFLAGS += -DRUNQUEUE_HARNESS_IMPLEMENTATION=1 $(SCHED_HARNESS_DEFINES) $(SCHED_HARNESS_DEBUG_FLAGS) $(SCHED_CLUTCH_DISABLED_WARNINGS) $(SCHED_HARNESS_COMPILER_SEARCH_ORDER)
78$(OBJROOT)/sched_clutch_harness.o: $(SCHED_HARNESS)/sched_clutch_harness.c $(SCHED_HARNESS_DEPS) $(SCHED_CLUTCH_DEPS)
79	$(MAKE) clutch_setup_placehold_hdrs
80	$(CC) $(OTHER_CFLAGS) $(CFLAGS) -c $< -o $@
81
82# Edge harness
83$(OBJROOT)/sched_edge_harness.o: OTHER_CFLAGS += $(SCHED_HARNESS_DEFINES) $(SCHED_EDGE_DEFINES) $(SCHED_HARNESS_DEBUG_FLAGS) $(SCHED_CLUTCH_DISABLED_WARNINGS) $(SCHED_HARNESS_COMPILER_SEARCH_ORDER)
84$(OBJROOT)/sched_edge_harness.o: $(SCHED_HARNESS)/sched_edge_harness.c $(SCHED_HARNESS)/sched_clutch_harness_impl.c $(SCHED_HARNESS_DEPS) $(SCHED_CLUTCH_DEPS)
85	$(MAKE) clutch_setup_placehold_hdrs
86	$(CC) $(OTHER_CFLAGS) $(CFLAGS) -c $< -o $@
87
88# Priority queue C++ dependency
89$(OBJROOT)/priority_queue.o: OTHER_CXXFLAGS += -std=c++11 $(SCHED_HARNESS_DEFINES) $(SCHED_HARNESS_DEBUG_FLAGS) $(SCHED_HARNESS_COMPILER_SEARCH_ORDER)
90$(OBJROOT)/priority_queue.o: $(SCHED_HARNESS_SHADOW)/priority_queue.cpp
91	$(CXX) $(OTHER_CXXFLAGS) $(CXXFLAGS) -c $< -o $@
92
93endif
94