diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..3341592a4a --- /dev/null +++ b/Makefile @@ -0,0 +1,37 @@ +export RUST_TARGET_PATH=targets + +ifeq ($(TARGET),) + ARCH?=$(shell uname -a) +else + ARCH?=$(shell echo "$(TARGET)" | cut -d - -f1) +endif + +BUILD?=target/$(ARCH)-unknown-kernel + +all: $(BUILD)/kernel $(BUILD)/kernel.sym + +LD_SCRIPT=linkers/$(ARCH).ld +TARGET_SPEC=targets/$(ARCH)-unknown-kernel.json + +$(BUILD)/kernel.all: $(LD_SCRIPT) $(TARGET_SPEC) $(shell find . -name "*.rs" -type f) + cargo rustc \ + --bin kernel \ + --target "$(TARGET_SPEC)" \ + --release \ + -Z build-std=core,alloc \ + -- \ + -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 + $(TARGET)-objcopy \ + --only-keep-debug \ + "$(BUILD)/kernel.all" \ + "$(BUILD)/kernel.sym" + +$(BUILD)/kernel: $(BUILD)/kernel.all + $(TARGET)-objcopy \ + --strip-debug \ + "$(BUILD)/kernel.all" \ + "$(BUILD)/kernel"