compiler/
lib/
scripts/
seed/
sublime/
test/
vim/
.gitignore
336 B
.gitsigners
112 B
CELL_PERMISSIONS
6.8 KiB
CONTRIBUTING
2.1 KiB
LICENSE
1.1 KiB
Makefile
5.4 KiB
README
2.5 KiB
STYLE
2.5 KiB
std.lib
1.5 KiB
std.lib.test
808 B
Makefile
raw
| 1 | # Radiance build file. |
| 2 | |
| 3 | # Core standard library modules. |
| 4 | STD := -pkg std $(patsubst %,-mod %,$(shell cat std.lib)) |
| 5 | # Session allocation support for standalone lowering fixtures. |
| 6 | TEST_FIXTURE_STD_LIB := $(shell cat test/support/std.lib) |
| 7 | TEST_FIXTURE_STD := -pkg std $(patsubst %,-mod %,$(TEST_FIXTURE_STD_LIB)) |
| 8 | |
| 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)) |
| 16 | |
| 17 | # Source files. |
| 18 | STD_LIB := $(shell find lib -name '*.rad') |
| 19 | BIN_DIR := bin |
| 20 | RAD_BIN := $(BIN_DIR)/radiance.rv64.dev |
| 21 | |
| 22 | # Emulator command used to invoke the self-hosted compiler. |
| 23 | EMU := $(or $(RAD_EMULATOR),emulator) |
| 24 | EMU_FLAGS := -memory-size=385024 \ |
| 25 | -data-size=348160 \ |
| 26 | -stack-size=512 \ |
| 27 | -count-instructions |
| 28 | RADIANCE := $(EMU) $(EMU_FLAGS) -run $(RAD_BIN) |
| 29 | |
| 30 | # Verify the emulator binary exists. |
| 31 | EMU_PATH := $(shell command -v $(EMU) 2>/dev/null) |
| 32 | |
| 33 | default: emulator $(RAD_BIN) |
| 34 | test: emulator seed-test std-test bin-test driver-test |
| 35 | |
| 36 | seed-test: |
| 37 | @seed/test |
| 38 | |
| 39 | # Emulator command check |
| 40 | |
| 41 | emulator: |
| 42 | ifeq ($(EMU_PATH),) |
| 43 | $(error Emulator not found. Install it or set RAD_EMULATOR to its path) |
| 44 | endif |
| 45 | |
| 46 | # Compiler build |
| 47 | |
| 48 | SEED := seed/radiance.rv64 |
| 49 | COMPILER_SRC := compiler/radiance.rad compiler/radiance/codegen.rad |
| 50 | SEED_OPTS := $(STD) -pkg radiance $(patsubst %,-mod %,$(COMPILER_SRC)) -entry radiance |
| 51 | |
| 52 | $(RAD_BIN): $(STD_LIB) $(COMPILER_SRC) std.lib | $(BIN_DIR) |
| 53 | @echo "radiance $(SEED) => $@" |
| 54 | @$(EMU) $(EMU_FLAGS) -run $(SEED) $(SEED_OPTS) -o $@ |
| 55 | |
| 56 | $(BIN_DIR): |
| 57 | @mkdir -p $@ |
| 58 | |
| 59 | # Standard Library Tests |
| 60 | |
| 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) |
| 65 | |
| 66 | std-test: $(STD_LIB_TEST) |
| 67 | @echo |
| 68 | @set -e; for image in $(STD_LIB_TEST); do \ |
| 69 | $(EMU) $(EMU_FLAGS) -run $$image; \ |
| 70 | done |
| 71 | |
| 72 | $(STD_LIB_TEST): $(STD_LIB) $(RAD_BIN) std.lib std.lib.test Makefile |
| 73 | @echo "radiance -test $(STD_TEST) -entry std -o $@" |
| 74 | @$(RADIANCE) -test $(STD_TEST) -entry std -o $@ |
| 75 | |
| 76 | clean-std-test: |
| 77 | @rm -f $(STD_LIB_TEST) \ |
| 78 | $(addsuffix .debug,$(STD_LIB_TEST)) \ |
| 79 | $(addsuffix .s,$(STD_LIB_TEST)) \ |
| 80 | $(addsuffix .o,$(STD_LIB_TEST)) |
| 81 | |
| 82 | # Binary Tests |
| 83 | |
| 84 | # Driver fixtures exercise argument parsing and test discovery. |
| 85 | driver-test: $(RAD_BIN) |
| 86 | @RAD_EMULATOR="$(EMU)" RAD_BIN="$(RAD_BIN)" test/command |
| 87 | @RAD_EMULATOR="$(EMU)" RAD_BIN="$(RAD_BIN)" test/driver |
| 88 | |
| 89 | driver-command: $(RAD_BIN) |
| 90 | @$(RADIANCE) $(DRIVER_ARGUMENTS) |
| 91 | |
| 92 | driver-test-image: $(RAD_BIN) |
| 93 | @$(RADIANCE) -test $(STD) -mod lib/std/testing.rad $(DRIVER_TEST_INPUTS) $(DRIVER_TEST_FLAGS) \ |
| 94 | -entry selected -o $(DRIVER_TEST_OUTPUT) |
| 95 | |
| 96 | BIN_TEST_DIR := test/tests |
| 97 | # Only tests with `//! returns:` are compiled to binaries and executed. |
| 98 | BIN_TEST_EXE_SRC := $(shell grep -rl '^//! returns:' $(BIN_TEST_DIR)) |
| 99 | BIN_TEST_RAD_EXE_SRC := $(filter %.rad,$(BIN_TEST_EXE_SRC)) |
| 100 | BIN_TEST_RAS_EXE_SRC := $(filter %.ras,$(BIN_TEST_EXE_SRC)) |
| 101 | BIN_TEST_RAD_ASM_SRC := $(wildcard $(BIN_TEST_RAD_EXE_SRC:.rad=.ras)) |
| 102 | BIN_TEST_RAD_START_SRC := $(wildcard $(BIN_TEST_RAD_EXE_SRC:.rad=.start.ras)) |
| 103 | BIN_TEST_EXE_BIN := $(patsubst %.rad,%.rv64,$(BIN_TEST_RAD_EXE_SRC)) \ |
| 104 | $(patsubst %.ras,%.rv64,$(BIN_TEST_RAS_EXE_SRC)) |
| 105 | BIN_RUNNER := test/runner.rv64 |
| 106 | BIN_TEST_RUN := test/run |
| 107 | |
| 108 | bin-test: $(BIN_RUNNER) $(BIN_TEST_EXE_BIN) |
| 109 | @echo |
| 110 | @RAD_BIN="$(RAD_BIN)" $(BIN_TEST_RUN) |
| 111 | |
| 112 | # Runner binary: the lowering IL checker. |
| 113 | $(BIN_RUNNER): test/runner.rad $(STD_LIB) $(RAD_BIN) |
| 114 | @echo "radiance test/runner.rad => $@" |
| 115 | @$(RADIANCE) $(STD) -pkg runner -mod test/runner.rad -entry runner -o $@ |
| 116 | |
| 117 | # A `.rad` executable test can have a same-basename `.ras` module. |
| 118 | $(patsubst %.ras,%.rv64,$(BIN_TEST_RAD_ASM_SRC)): %.rv64: %.ras |
| 119 | $(patsubst %.start.ras,%.rv64,$(BIN_TEST_RAD_START_SRC)): %.rv64: %.start.ras |
| 120 | |
| 121 | # Package fixtures can request session support. |
| 122 | BIN_TEST_SESSION_SRC := $(shell grep -l '^//! session-support$$' $(BIN_TEST_RAD_EXE_SRC)) |
| 123 | $(BIN_TEST_SESSION_SRC:.rad=.rv64): TEST_STD_FLAGS := $(TEST_FIXTURE_STD) |
| 124 | $(BIN_TEST_SESSION_SRC:.rad=.rv64): TEST_ENTRY_FLAGS := -entry test |
| 125 | $(BIN_TEST_SESSION_SRC:.rad=.rv64): $(TEST_FIXTURE_STD_LIB) test/support/std.lib |
| 126 | |
| 127 | # Compile each executable test to a binary. |
| 128 | $(BIN_TEST_DIR)/%.rv64: $(BIN_TEST_DIR)/%.rad $(RAD_BIN) |
| 129 | @echo "radiance $< => $@" |
| 130 | @$(RADIANCE) $(TEST_STD_FLAGS) -pkg test -mod $< $(TEST_ENTRY_FLAGS) $(patsubst %,-mod %,$(wildcard $(@:.rv64=)/*.rad)) $(patsubst %,-start %,$(wildcard $(@:.rv64=.start.ras))) $(patsubst %,-mod %,$(wildcard $(@:.rv64=.ras))) -o $@ |
| 131 | |
| 132 | $(BIN_TEST_DIR)/%.rv64: $(BIN_TEST_DIR)/%.ras $(BIN_RUNNER) |
| 133 | @echo "asm $< => $@" |
| 134 | @$(EMU) $(EMU_FLAGS) -run $(BIN_RUNNER) -- assemble $< $@ |
| 135 | |
| 136 | clean-bin-test: |
| 137 | @rm -f $(BIN_RUNNER) \ |
| 138 | $(BIN_RUNNER:.rv64=.rv64.debug) \ |
| 139 | $(BIN_RUNNER:.rv64=.rv64.s) \ |
| 140 | $(BIN_RUNNER:.rv64=.rv64.o) \ |
| 141 | $(BIN_TEST_EXE_BIN) \ |
| 142 | $(wildcard $(BIN_TEST_DIR)/*.rv64.debug) \ |
| 143 | $(wildcard $(BIN_TEST_DIR)/*.rv64.s) |
| 144 | |
| 145 | seed: |
| 146 | seed/update |
| 147 | |
| 148 | clean-rad: |
| 149 | rm -rf bin/* |
| 150 | rm -f seed/radiance.rv64.s[0-9]* |
| 151 | |
| 152 | clean: clean-std-test clean-bin-test clean-rad |
| 153 | |
| 154 | t: test |
| 155 | c: clean |
| 156 | |
| 157 | .PHONY: test clean default seed-test std-test bin-test seed \ |
| 158 | clean-std-test clean-bin-test clean-rad emulator driver-test driver-test-image driver-command |
| 159 | .SUFFIXES: |
| 160 | .DELETE_ON_ERROR: |
| 161 | .SILENT: |