1c870c06ec
cargo 1.98.0-dev (4d1f98451 2026-05-15) requires -Zunstable-options to be passed to cargo itself (not just rustc) to accept a custom target spec. Without it, the kernel Makefile fails with: error: error loading target specification: custom targets are unstable and require `-Zunstable-options` The Makefile already had -Z build-std, -Zbuild-std-features, and -Z json-target-spec (which are passed to rustc), but the top-level cargo invocation needed -Zunstable-options to accept the target. This is required by both nightly-2025-10-03 (the kernel fork rust-toolchain) and nightly-2026-04-01 (the host default). On the cookbook (redoxer-1.0 toolchain), the error is the same because -Zunstable-options is a separate cargo-level flag from the rustc-level -Z flags. Discovered when attempting to build redbear-mini after the 0.2.5 fork was created from 0.2.4. The Makefile worked on 0.2.4 because the prior kernel cook used a cached build; the 0.2.5 build started fresh and hit the error.
67 lines
1.7 KiB
Makefile
67 lines
1.7 KiB
Makefile
.PHONY: all check
|
|
|
|
SOURCE:=$(dir $(realpath $(lastword $(MAKEFILE_LIST))))
|
|
BUILD?=$(CURDIR)
|
|
export RUST_TARGET_PATH=$(SOURCE)/targets
|
|
|
|
ifeq ($(TARGET),)
|
|
ARCH?=$(shell uname -m)
|
|
else
|
|
ARCH?=$(shell echo "$(TARGET)" | cut -d - -f1)
|
|
endif
|
|
|
|
ifeq ($(ARCH),riscv64gc)
|
|
override ARCH:=riscv64
|
|
GNU_TARGET=riscv64-unknown-redox
|
|
else ifeq ($(ARCH),i686)
|
|
override ARCH:=i586
|
|
GNU_TARGET=i686-unknown-redox
|
|
else
|
|
GNU_TARGET=$(ARCH)-unknown-redox
|
|
endif
|
|
|
|
|
|
all: $(BUILD)/kernel $(BUILD)/kernel.sym
|
|
|
|
LD_SCRIPT=$(SOURCE)/linkers/$(ARCH).ld
|
|
LOCKFILE=$(SOURCE)/Cargo.lock
|
|
MANIFEST=$(SOURCE)/Cargo.toml
|
|
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)
|
|
cargo -Zunstable-options rustc \
|
|
--bin kernel \
|
|
--manifest-path "$(MANIFEST)" \
|
|
--target "$(TARGET_SPEC)" \
|
|
--release \
|
|
-Z build-std=core,alloc -Zbuild-std-features=compiler-builtins-mem -Z json-target-spec \
|
|
--features=$(KERNEL_CARGO_FEATURES) \
|
|
-- \
|
|
-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
|
|
$(GNU_TARGET)-objcopy \
|
|
--only-keep-debug \
|
|
"$(BUILD)/kernel.all" \
|
|
"$(BUILD)/kernel.sym"
|
|
|
|
$(BUILD)/kernel: $(BUILD)/kernel.all
|
|
$(GNU_TARGET)-objcopy \
|
|
--strip-debug \
|
|
"$(BUILD)/kernel.all" \
|
|
"$(BUILD)/kernel"
|
|
|
|
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 -Z json-target-spec \
|
|
--features=$(KERNEL_CHECK_FEATURES)
|