include scripts/make/cargo.mk
ifeq ($(APP_TYPE), c)
include scripts/make/build_c.mk
else
rust_package := $(shell cat $(APP)/Cargo.toml | sed -n 's/^name = "\([a-z0-9A-Z_\-]*\)"/\1/p' | head -1)
rust_elf := $(TARGET_DIR)/$(TARGET)/$(MODE)/$(rust_package)
endif
ifneq ($(filter $(or $(MAKECMDGOALS), $(.DEFAULT_GOAL)), all build run justrun debug),)
ifneq ($(V),)
$(info APP: "$(APP)")
$(info APP_TYPE: "$(APP_TYPE)")
$(info FEATURES: "$(FEATURES)")
$(info PLAT_CONFIG: "$(PLAT_CONFIG)")
$(info arceos features: "$(AX_FEAT)")
$(info lib features: "$(LIB_FEAT)")
$(info app features: "$(APP_FEAT)")
endif
ifeq ($(APP_TYPE), rust)
RUSTFLAGS += $(RUSTFLAGS_LINK_ARGS)
endif
ifeq ($(DWARF), y)
RUSTFLAGS += -C force-frame-pointers -C debuginfo=2 -C strip=none
endif
$(if $(V), $(info RUSTFLAGS: "$(RUSTFLAGS)"))
export RUSTFLAGS
ifeq ($(LTO), y)
export CARGO_PROFILE_RELEASE_LTO=true
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1
endif
endif
_cargo_build: oldconfig
@printf " $(GREEN_C)Building$(END_C) App: $(APP_NAME), Arch: $(ARCH), Platform: $(PLAT_NAME), App type: $(APP_TYPE)\n"
ifeq ($(APP_TYPE), rust)
$(call cargo_build,$(APP),$(AX_FEAT) $(LIB_FEAT) $(APP_FEAT))
@cp $(rust_elf) $(OUT_ELF)
endif
$(OUT_DIR):
$(call run_cmd,mkdir,-p $@)
_dwarf: $(OUT_ELF)
ifeq ($(DWARF), y)
$(call run_cmd,./scripts/make/dwarf.sh,$(OUT_ELF) $(OBJCOPY))
endif
$(OUT_BIN): _cargo_build $(OUT_ELF) _dwarf
$(call run_cmd,$(OBJCOPY),$(OUT_ELF) --strip-all -O binary $@)
@if [ ! -s $(OUT_BIN) ]; then \
echo 'Empty kernel image "$(notdir $(FINAL_IMG))" is built, please check your build configuration'; \
exit 1; \
fi
ifeq ($(ARCH), aarch64)
uimg_arch := arm64
else ifeq ($(ARCH), riscv64)
uimg_arch := riscv
else
uimg_arch := $(ARCH)
endif
$(OUT_UIMG): $(OUT_BIN)
$(call run_cmd,mkimage,\
-A $(uimg_arch) -O linux -T kernel -C none \
-a $(subst _,,$(shell axconfig-gen "$(OUT_CONFIG)" -r plat.kernel-base-paddr)) \
-d $(OUT_BIN) $@)
.PHONY: _cargo_build _dwarf