Files
Elyz/kernel/GNUmakefile
Faynot aa357b6198 init
2026-03-27 14:06:30 +03:00

45 lines
1.2 KiB
Makefile

# Nuke built-in rules and variables.
MAKEFLAGS += -rR
.SUFFIXES:
# This is the name that our final executable will have.
# Change as needed.
override OUTPUT := kernel
# Convenience macro to reliably declare user overridable variables.
override USER_VARIABLE = $(if $(filter $(origin $(1)),default undefined),$(eval override $(1) := $(2)))
# Target architecture to build for. Default to x86_64.
$(call USER_VARIABLE,KARCH,x86_64)
ifeq ($(RUST_TARGET),)
override RUST_TARGET := $(KARCH)-unknown-none
ifeq ($(KARCH),riscv64)
override RUST_TARGET := riscv64gc-unknown-none-elf
endif
endif
ifeq ($(RUST_PROFILE),)
override RUST_PROFILE := dev
endif
override RUST_PROFILE_SUBDIR := $(RUST_PROFILE)
ifeq ($(RUST_PROFILE),dev)
override RUST_PROFILE_SUBDIR := debug
endif
# Default target.
.PHONY: all
all:
RUSTFLAGS="-C relocation-model=static" cargo build --target $(RUST_TARGET) --profile $(RUST_PROFILE)
cp target/$(RUST_TARGET)/$(RUST_PROFILE_SUBDIR)/$$(cd target/$(RUST_TARGET)/$(RUST_PROFILE_SUBDIR) && find -maxdepth 1 -perm -111 -type f) kernel
# Remove object files and the final executable.
.PHONY: clean
clean:
cargo clean
rm -rf kernel
.PHONY: distclean
distclean: clean