Files

101 lines
2.4 KiB
Makefile
Raw Permalink Normal View History

2026-04-12 14:51:26 +02:00
.PHONY: all check
2024-11-01 06:45:55 +03:00
SOURCE:=$(dir $(realpath $(lastword $(MAKEFILE_LIST))))
export RUST_TARGET_PATH=$(SOURCE)/targets
2024-06-25 12:46:02 +02:00
ifeq ($(TARGET),)
2024-11-01 06:45:55 +03:00
ARCH?=$(shell uname -m)
2024-06-25 12:46:02 +02:00
else
ARCH?=$(shell echo "$(TARGET)" | cut -d - -f1)
endif
2026-07-16 01:27:47 +07:00
BUILD?=$(CURDIR)/build/$(ARCH)
DESTDIR?=./sysroot
2024-11-01 06:45:55 +03:00
ifeq ($(ARCH),riscv64gc)
2025-04-17 15:34:24 -06:00
override ARCH:=riscv64
2025-11-01 19:30:40 +01:00
GNU_TARGET=riscv64-unknown-redox
2025-11-01 14:02:34 -06:00
else ifeq ($(ARCH),i686)
2025-11-01 19:30:40 +01:00
override ARCH:=i586
GNU_TARGET=i686-unknown-redox
else
GNU_TARGET=$(ARCH)-unknown-redox
2024-11-01 06:45:55 +03:00
endif
2026-07-16 01:27:47 +07:00
OBJCOPY?=$(GNU_TARGET)-objcopy
2024-06-25 12:46:02 +02:00
all: $(BUILD)/kernel $(BUILD)/kernel.sym
2024-11-01 06:45:55 +03:00
LD_SCRIPT=$(SOURCE)/linkers/$(ARCH).ld
2025-08-03 16:04:49 -06:00
LOCKFILE=$(SOURCE)/Cargo.lock
MANIFEST=$(SOURCE)/Cargo.toml
2024-11-01 06:45:55 +03:00
TARGET_SPEC=$(RUST_TARGET_PATH)/$(ARCH)-unknown-kernel.json
2024-06-25 12:46:02 +02:00
2026-04-13 14:44:27 +02:00
KERNEL_CARGO_FEATURES?=
2026-07-16 01:27:47 +07:00
$(BUILD):
mkdir -p "$@"
$(BUILD)/kernel.all: $(LD_SCRIPT) $(LOCKFILE) $(MANIFEST) $(TARGET_SPEC) $(shell find $(SOURCE) -name "*.rs" -type f) | $(BUILD)
2024-06-25 12:46:02 +02:00
cargo rustc \
--bin kernel \
2025-08-03 16:04:49 -06:00
--manifest-path "$(MANIFEST)" \
2024-06-25 12:46:02 +02:00
--target "$(TARGET_SPEC)" \
--release \
-Z build-std=core,alloc -Zbuild-std-features=compiler-builtins-mem \
2026-05-25 17:41:48 -06:00
-Z json-target-spec \
2026-04-13 14:44:27 +02:00
--features=$(KERNEL_CARGO_FEATURES) \
2024-06-25 12:46:02 +02:00
-- \
-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
2026-07-16 01:27:47 +07:00
$(OBJCOPY) \
2024-06-25 12:46:02 +02:00
--only-keep-debug \
"$(BUILD)/kernel.all" \
"$(BUILD)/kernel.sym"
$(BUILD)/kernel: $(BUILD)/kernel.all
2026-07-16 01:27:47 +07:00
$(OBJCOPY) \
2024-06-25 12:46:02 +02:00
--strip-debug \
"$(BUILD)/kernel.all" \
"$(BUILD)/kernel"
2026-04-12 14:51:26 +02:00
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 \
2026-05-25 17:41:48 -06:00
-Z json-target-spec \
2026-04-12 14:51:26 +02:00
--features=$(KERNEL_CHECK_FEATURES)
2026-07-16 01:27:47 +07:00
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