From ee4a5602a638ebe4f5b26d820b6d55c820d26147 Mon Sep 17 00:00:00 2001 From: Wildan M Date: Thu, 16 Jul 2026 01:27:47 +0700 Subject: [PATCH] Implement make install and test targets --- .gitignore | 2 ++ .gitlab-ci.yml | 47 ++++++++++++------------------------------- Makefile | 40 ++++++++++++++++++++++++++++++++---- src/context/mod.rs | 2 +- src/context/switch.rs | 4 +--- 5 files changed, 53 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index 7774614018..c72df02094 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ target +/build /config.toml +/sysroot .gitlab-ci-local/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7d82652f70..a8d38d1381 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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 diff --git a/Makefile b/Makefile index a089f8c350..698bc2340a 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/src/context/mod.rs b/src/context/mod.rs index 1518dc3367..f5a8a3a266 100644 --- a/src/context/mod.rs +++ b/src/context/mod.rs @@ -83,7 +83,7 @@ static IDLE_CONTEXTS: Mutex> = Mutex::new(VecDeque: pub struct RunContextData { // queue: VecDeque, queue: BTreeMap<(u64, Reverse, 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, diff --git a/src/context/switch.rs b/src/context/switch.rs index 5de01b01ef..2996a86871 100644 --- a/src/context/switch.rs +++ b/src/context/switch.rs @@ -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();