Implement make install and test targets

This commit is contained in:
Wildan M
2026-07-16 01:27:47 +07:00
parent a5ae1ff3b0
commit ee4a5602a6
5 changed files with 53 additions and 42 deletions
+2
View File
@@ -1,3 +1,5 @@
target
/build
/config.toml
/sysroot
.gitlab-ci-local/
+13 -34
View File
@@ -1,8 +1,3 @@
image: "redoxos/redoxer:latest"
variables:
GIT_SUBMODULE_STRATEGY: recursive
workflow:
rules:
- if: '$CI_PROJECT_NAMESPACE == "redox-os"'
@@ -12,14 +7,12 @@ stages:
- build
- cross-build
- test
- other-features
# TODO: benchmarks and profiling (maybe manually enabled for relevant MRs)?
x86_64:
stage: build
script:
- mkdir -p target/${ARCH}
- redoxer env make BUILD=target/${ARCH}
- redoxer env make
variables:
ARCH: "x86_64"
@@ -27,64 +20,50 @@ aarch64:
stage: cross-build
image: "redoxos/redoxer:aarch64"
script:
- mkdir -p target/${ARCH}
- redoxer env make BUILD=target/${ARCH}
- redoxer env make
variables:
ARCH: "aarch64"
i586:
stage: cross-build
script:
- mkdir -p target/${ARCH}
- TARGET=${ARCH}-unknown-redox redoxer env make BUILD=target/${ARCH}
- TARGET=${ARCH}-unknown-redox redoxer env make
variables:
ARCH: "i586"
riscv64gc:
stage: cross-build
script:
- mkdir -p target/${ARCH}
- TARGET=${ARCH}-unknown-redox redoxer env make BUILD=target/${ARCH}
- TARGET=${ARCH}-unknown-redox redoxer env make
variables:
ARCH: "riscv64gc"
fmt:
stage: build
script:
- rustup component add rustfmt
- rustfmt --check
- redoxer env cargo fmt --check
x86_64:boot:
stage: test
needs: [x86_64]
script:
- mkdir -p target/${ARCH}
- export COOKBOOK_SOURCE_IDENT=$CI_COMMIT_SHA
- redoxer env make BUILD=target/${ARCH}
- timeout -s KILL 9m redoxer exec --folder target/${ARCH}/:/usr/lib/boot uname -a
variables:
ARCH: "x86_64"
- redoxer env make test
x86_64:relibc:
stage: test
needs: [x86_64]
# TODO: remove
allow_failure: true
script:
- redoxer pkg relibc-tests-bins
- export COOKBOOK_SOURCE_IDENT=$CI_COMMIT_SHA
- mkdir -p target/${TARGET}/sysroot/{usr/lib/boot,root} target/${TARGET}/root
- redoxer env make BUILD=target/${TARGET}/sysroot/usr/lib/boot
- (cd target/${TARGET}/sysroot && mv home/user/relibc-tests/* root/)
- timeout -s KILL 9m redoxer exec --folder target/${TARGET}/sysroot/:/ make run
# It is fine if failing sometimes
allow_failure: true
variables:
TARGET: "x86_64-unknown-redox"
- timeout -s KILL 9m redoxer env make test-relibc
profiling-compile:
stage: other-features
allow_failure: true
x86_64:profiling:
stage: build
needs: [x86_64]
script:
make check
- make check
variables:
ARCH: "x86_64"
KERNEL_CHECK_FEATURES: profiling
+36 -4
View File
@@ -1,7 +1,6 @@
.PHONY: all check
SOURCE:=$(dir $(realpath $(lastword $(MAKEFILE_LIST))))
BUILD?=$(CURDIR)
export RUST_TARGET_PATH=$(SOURCE)/targets
ifeq ($(TARGET),)
@@ -10,6 +9,9 @@ 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
@@ -20,6 +22,7 @@ else
GNU_TARGET=$(ARCH)-unknown-redox
endif
OBJCOPY?=$(GNU_TARGET)-objcopy
all: $(BUILD)/kernel $(BUILD)/kernel.sym
@@ -30,7 +33,10 @@ TARGET_SPEC=$(RUST_TARGET_PATH)/$(ARCH)-unknown-kernel.json
KERNEL_CARGO_FEATURES?=
$(BUILD)/kernel.all: $(LD_SCRIPT) $(LOCKFILE) $(MANIFEST) $(TARGET_SPEC) $(shell find $(SOURCE) -name "*.rs" -type f)
$(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)" \
@@ -45,13 +51,13 @@ $(BUILD)/kernel.all: $(LD_SCRIPT) $(LOCKFILE) $(MANIFEST) $(TARGET_SPEC) $(shell
--emit link="$(BUILD)/kernel.all"
$(BUILD)/kernel.sym: $(BUILD)/kernel.all
$(GNU_TARGET)-objcopy \
$(OBJCOPY) \
--only-keep-debug \
"$(BUILD)/kernel.all" \
"$(BUILD)/kernel.sym"
$(BUILD)/kernel: $(BUILD)/kernel.all
$(GNU_TARGET)-objcopy \
$(OBJCOPY) \
--strip-debug \
"$(BUILD)/kernel.all" \
"$(BUILD)/kernel"
@@ -66,3 +72,29 @@ check:
-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
+1 -1
View File
@@ -83,7 +83,7 @@ static IDLE_CONTEXTS: Mutex<L2, VecDeque<WeakContextRef>> = Mutex::new(VecDeque:
pub struct RunContextData {
// queue: VecDeque<WeakContextRef>,
queue: BTreeMap<(u64, Reverse<u64>, u32), (u64, u64, WeakContextRef)>, // ((vd, rem_slice, ctxt_id), (vtime, weight, context))
timers: BTreeSet<(u128, WeakContextRef)>, // (wake, context)
timers: BTreeSet<(u128, WeakContextRef)>, // (wake, context)
count: usize,
v: u64,
total_weight: u64,
+1 -3
View File
@@ -389,9 +389,7 @@ pub fn switch(token: &mut CleanLockToken) -> SwitchResult {
}
}
fn wakeup_contexts(
token: &mut CleanLockToken,
) -> SmallVec<[WeakContextRef; 16]> {
fn wakeup_contexts(token: &mut CleanLockToken) -> SmallVec<[WeakContextRef; 16]> {
// TODO: Optimise this somehow
let mut wakeups = SmallVec::new();
let current_context = context::current();