diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0f8d924f..f3efafbe 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,34 +3,20 @@ image: "redoxos/redoxer:latest" variables: GIT_SUBMODULE_STRATEGY: recursive -before_script: - - apt-get install nasm - - rustup component add rust-src - stages: - host - # TODO: redoxer test + - build + - test # TODO: benchmarks and profiling (maybe manually enabled for relevant MRs)? -build:x86_64: - stage: host +build: + stage: build script: - - mkdir -p target/x86_64 - - make ARCH=x86_64 BUILD=target/x86_64 - -build:i686: - stage: host - script: - - mkdir -p target/i686 - - make ARCH=i686 BUILD=target/i686 - -build:aarch64: - stage: host - script: - - mkdir -p target/aarch64 - # TODO: cross compiler binutils? - - make target/aarch64/kernel.all ARCH=aarch64 BUILD=target/aarch64 - allow_failure: true + - mkdir -p target/${ARCH} + - TARGET=${ARCH}-unknown-redox redoxer env make BUILD=target/${ARCH} + parallel: + matrix: + - ARCH: [x86_64, i686, aarch64, riscv64gc] fmt: stage: host @@ -39,6 +25,6 @@ fmt: - cargo fmt -- --check unit_test: - stage: host + stage: test script: - - cargo test + - TARGET=x86_64-unknown-redox redoxer test diff --git a/Makefile b/Makefile index 3341592a..5ed296b2 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,28 @@ -export RUST_TARGET_PATH=targets +SOURCE:=$(dir $(realpath $(lastword $(MAKEFILE_LIST)))) +BUILD?=$(CURDIR) +export RUST_TARGET_PATH=$(SOURCE)/targets ifeq ($(TARGET),) - ARCH?=$(shell uname -a) + ARCH?=$(shell uname -m) else ARCH?=$(shell echo "$(TARGET)" | cut -d - -f1) endif -BUILD?=target/$(ARCH)-unknown-kernel +ifeq ($(ARCH),riscv64gc) + ARCH:=riscv64 +endif +GNU_TARGET=$(ARCH)-unknown-redox + all: $(BUILD)/kernel $(BUILD)/kernel.sym -LD_SCRIPT=linkers/$(ARCH).ld -TARGET_SPEC=targets/$(ARCH)-unknown-kernel.json +LD_SCRIPT=$(SOURCE)/linkers/$(ARCH).ld +TARGET_SPEC=$(RUST_TARGET_PATH)/$(ARCH)-unknown-kernel.json -$(BUILD)/kernel.all: $(LD_SCRIPT) $(TARGET_SPEC) $(shell find . -name "*.rs" -type f) +$(BUILD)/kernel.all: $(LD_SCRIPT) $(TARGET_SPEC) $(shell find $(SOURCE) -name "*.rs" -type f) cargo rustc \ --bin kernel \ + --manifest-path "$(SOURCE)/Cargo.toml" \ --target "$(TARGET_SPEC)" \ --release \ -Z build-std=core,alloc \ @@ -25,13 +32,13 @@ $(BUILD)/kernel.all: $(LD_SCRIPT) $(TARGET_SPEC) $(shell find . -name "*.rs" -ty --emit link="$(BUILD)/kernel.all" $(BUILD)/kernel.sym: $(BUILD)/kernel.all - $(TARGET)-objcopy \ + $(GNU_TARGET)-objcopy \ --only-keep-debug \ "$(BUILD)/kernel.all" \ "$(BUILD)/kernel.sym" $(BUILD)/kernel: $(BUILD)/kernel.all - $(TARGET)-objcopy \ + $(GNU_TARGET)-objcopy \ --strip-debug \ "$(BUILD)/kernel.all" \ "$(BUILD)/kernel" diff --git a/src/main.rs b/src/main.rs index 1b8edc3a..f256eff2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -117,6 +117,7 @@ mod elf; mod event; /// External functions +#[cfg(not(test))] mod externs; /// Logging