Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
124 lines (102 loc) · 3.3 KB
/
Copy pathMakefile
File metadata and controls
124 lines (102 loc) · 3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
.PHONY: all check
SOURCE:=$(dir $(realpath $(lastword $(MAKEFILE_LIST))))
export RUST_TARGET_PATH=$(SOURCE)/targets
ifeq ($(TARGET),)
ARCH?=$(shell uname -m)
else
ARCH?=$(shell echo "$(TARGET)" | cut -d - -f1)
endif
BUILD?=$(CURDIR)/build/$(ARCH)
DESTDIR?=./sysroot
ifeq ($(ARCH),riscv64gc)
override ARCH:=riscv64
GNU_TARGET=riscv64-unknown-redox
else ifeq ($(ARCH),i686)
override ARCH:=i586
GNU_TARGET=i686-unknown-redox
else
GNU_TARGET=$(ARCH)-unknown-redox
endif
OBJCOPY?=$(GNU_TARGET)-objcopy
all: $(BUILD)/kernel $(BUILD)/kernel.sym
LD_SCRIPT=$(SOURCE)/linkers/$(ARCH).ld
LOCKFILE=$(SOURCE)/Cargo.lock
MANIFEST=$(SOURCE)/Cargo.toml
TARGET_SPEC=$(RUST_TARGET_PATH)/$(ARCH)-unknown-kernel.json
KERNEL_CARGO_FEATURES?=
$(BUILD):
mkdir -p "$@"
$(BUILD)/kernel.all: $(LD_SCRIPT) $(LOCKFILE) $(MANIFEST) $(TARGET_SPEC) $(shell find $(SOURCE) -name "*.rs" -type f) | $(BUILD)
cargo rustc \
--bin kernel \
--manifest-path "$(MANIFEST)" \
--target "$(TARGET_SPEC)" \
--release \
-Z build-std=core,alloc -Zbuild-std-features=compiler-builtins-mem \
-Z json-target-spec \
--features=$(KERNEL_CARGO_FEATURES) \
-- \
-C link-arg=-T -Clink-arg="$(LD_SCRIPT)" \
-C link-arg=-z -Clink-arg=max-page-size=0x1000 \
--emit link="$(BUILD)/kernel.all"
$(BUILD)/kernel.sym: $(BUILD)/kernel.all
$(OBJCOPY) \
--only-keep-debug \
"$(BUILD)/kernel.all" \
"$(BUILD)/kernel.sym"
$(BUILD)/kernel: $(BUILD)/kernel.all
$(OBJCOPY) \
--strip-debug \
"$(BUILD)/kernel.all" \
"$(BUILD)/kernel"
KERNEL_CHECK_FEATURES?=
check:
cargo check \
--bin kernel \
--manifest-path "$(MANIFEST)" \
--target "$(TARGET_SPEC)" \
-Z build-std=core,alloc -Zbuild-std-features=compiler-builtins-mem \
-Z json-target-spec \
--features=$(KERNEL_CHECK_FEATURES)
clean:
rm -rf build sysroot target config.toml
install: all
@mkdir -pv "$(DESTDIR)/usr/lib/boot/"
cp -v $(BUILD)/kernel.all "$(DESTDIR)/usr/lib/boot/"
cp -v $(BUILD)/kernel.sym "$(DESTDIR)/usr/lib/boot/"
cp -v $(BUILD)/kernel "$(DESTDIR)/usr/lib/boot/"
# test if booting
# to ensure it's using this kernel, set COOKBOOK_SOURCE_IDENT env before build
test: all
$(MAKE) install
REDOXER_SYSROOT=$(DESTDIR) redoxer exec uname -a
# test with interactive gui
test-gui: all
$(MAKE) install
REDOXER_SYSROOT=$(DESTDIR) redoxer exec --gui ion
# test with relibc tests
test-relibc: all
$(MAKE) install
REDOXER_SYSROOT=$(DESTDIR) redoxer pkg relibc-tests-bins
REDOXER_SYSROOT=$(DESTDIR) redoxer exec relibc-tests-runner
ifeq ($(ACID_BENCHMARKS),)
# This tests:
ACID_BENCHMARKS:=
# - base syscall latency
ACID_BENCHMARKS+=invalid_syscall
# - roundtrip CPU cycles for the most basic practical IPC
ACID_BENCHMARKS+=getppid_bench
# - the time it takes to populate page tables, including the allocator
ACID_BENCHMARKS+=pgtbl_populate_bench
# - the lowest achievable latency for switching from context A to context B using IPC
ACID_BENCHMARKS+=ipc_latency_simultaneous
# - performance of fork(3), TLB misses (if perf ctr impld. by CPU), CoW time
ACID_BENCHMARKS+=heavy_forking
endif
ACID_BENCH_REPETITIONS?=10
test-acid: all
$(MAKE) install
REDOXER_SYSROOT=$(DESTDIR) redoxer pkg acid-bins
REDOXER_SYSROOT=$(DESTDIR) redoxer exec --artifact root:/home/root \
env ACID_BENCH_REPETITIONS=$(ACID_BENCH_REPETITIONS) ACID_BENCH_OUTPUT=/home/root/bench-output.txt \
acid $(ACID_BENCHMARKS)