test: Partition std suite into bounded native images

da9699b94db71e3ec2cf5c496d815c288d349b7c757225d0791e14192ad550d9
Alexis Sellier committed ago 1 parent 9637272a
Makefile +19 -9
4 4
STD := -pkg std $(patsubst %,-mod %,$(shell cat std.lib))
5 5
# Session allocation support for standalone lowering fixtures.
6 6
TEST_FIXTURE_STD_LIB := $(shell cat test/support/std.lib)
7 7
TEST_FIXTURE_STD := -pkg std $(patsubst %,-mod %,$(TEST_FIXTURE_STD_LIB))
8 8
9 -
# Full standard library with test modules.
10 -
STD_TEST := $(STD) $(patsubst %,-mod %,$(shell cat std.lib.test))
9 +
# Test modules are partitioned so each native image fits the emulator.
10 +
STD_TEST_MODULES := $(shell cat std.lib.test)
11 +
STD_TEST_SUPPORT := lib/std/testing.rad
12 +
# Resolver tests use parser test helpers.
13 +
STD_TEST_FRONTEND := $(filter lib/std/lang/parser/% lib/std/lang/resolver/%,$(STD_TEST_MODULES))
14 +
STD_TEST_CORE := $(filter-out $(STD_TEST_SUPPORT) $(STD_TEST_FRONTEND),$(STD_TEST_MODULES))
15 +
STD_TEST = $(STD) $(patsubst %,-mod %,$(STD_TEST_SUPPORT) $(STD_TEST_SOURCES))
11 16
12 17
# Source files.
13 18
STD_LIB := $(shell find lib -name '*.rad')
14 19
BIN_DIR := bin
15 20
RAD_BIN := $(BIN_DIR)/radiance.rv64.dev
51 56
$(BIN_DIR):
52 57
	@mkdir -p $@
53 58
54 59
# Standard Library Tests
55 60
56 -
STD_LIB_TEST := lib/std.test.rv64
61 +
STD_LIB_TEST := lib/std.core.test.rv64 lib/std.frontend.test.rv64
62 +
63 +
lib/std.core.test.rv64: STD_TEST_SOURCES := $(STD_TEST_CORE)
64 +
lib/std.frontend.test.rv64: STD_TEST_SOURCES := $(STD_TEST_FRONTEND)
57 65
58 66
std-test: $(STD_LIB_TEST)
59 67
	@echo
60 -
	@$(EMU) $(EMU_FLAGS) -run $(STD_LIB_TEST)
68 +
	@set -e; for image in $(STD_LIB_TEST); do \
69 +
		$(EMU) $(EMU_FLAGS) -run $$image; \
70 +
	done
61 71
62 -
$(STD_LIB_TEST): $(STD_LIB) $(RAD_BIN) std.lib std.lib.test
72 +
$(STD_LIB_TEST): $(STD_LIB) $(RAD_BIN) std.lib std.lib.test Makefile
63 73
	@echo "radiance -test $(STD_TEST) -entry std -o $@"
64 74
	@$(RADIANCE) -test $(STD_TEST) -entry std -o $@
65 75
66 76
clean-std-test:
67 -
	@rm -f lib/std.test.rv64 \
68 -
		lib/std.test.rv64.debug \
69 -
		lib/std.test.rv64.s \
70 -
		lib/std.test.rv64.o
77 +
	@rm -f $(STD_LIB_TEST) \
78 +
		$(addsuffix .debug,$(STD_LIB_TEST)) \
79 +
		$(addsuffix .s,$(STD_LIB_TEST)) \
80 +
		$(addsuffix .o,$(STD_LIB_TEST))
71 81
72 82
# Binary Tests
73 83
74 84
BIN_TEST_DIR := test/tests
75 85
# Only tests with `//! returns:` are compiled to binaries and executed.