170 lines
5.9 KiB
Makefile
170 lines
5.9 KiB
Makefile
include config/make-locations
|
|
include config/make-os
|
|
include config/make-cc
|
|
include config/make-debug-tool
|
|
|
|
BUILD_MODE := release
|
|
CARGO_FLAGS := --release
|
|
ifeq ($(BUILD_MODE),debug)
|
|
CARGO_FLAGS :=
|
|
endif
|
|
|
|
RUST_TARGET := x86_64-unknown-none
|
|
BUILDER_PKG := cure-builder
|
|
DISK_IMAGE := cure-os.img
|
|
|
|
COLOR_RESET := \033[0m
|
|
COLOR_GREEN := \033[32m
|
|
COLOR_YELLOW := \033[33m
|
|
COLOR_BLUE := \033[34m
|
|
COLOR_RED := \033[31m
|
|
|
|
.PHONY: all rust-build run clean debug-bochs debug-qemu help all-debug
|
|
|
|
$(BUILD_DIR):
|
|
@rm -rf $(BUILD_DIR)
|
|
@mkdir -p $(BUILD_DIR)
|
|
|
|
$(BIN_DIR):
|
|
@mkdir -p $(BIN_DIR)
|
|
|
|
all: clean-build rust-build copy-artifacts
|
|
|
|
clean-build:
|
|
@echo "$(COLOR_YELLOW)Cleaning build directory...$(COLOR_RESET)"
|
|
@rm -rf $(BUILD_DIR)
|
|
|
|
rust-build:
|
|
@echo "$(COLOR_BLUE)Building CureOS...$(COLOR_RESET)"
|
|
@cargo build -p $(BUILDER_PKG) $(CARGO_FLAGS)
|
|
@echo "$(COLOR_GREEN)Build complete$(COLOR_RESET)"
|
|
|
|
copy-artifacts: $(BUILD_DIR) $(BIN_DIR)
|
|
@echo "$(COLOR_BLUE)Copying build artifacts...$(COLOR_RESET)"
|
|
@BIOS_IMG=$$(find target -name "cure-bios.img" -type f | head -1); \
|
|
UEFI_IMG=$$(find target -name "cure-uefi.img" -type f | head -1); \
|
|
KERNEL_BIN=$$(find target/$(RUST_TARGET)/$(BUILD_MODE) -name "cure-kernel" -type f | head -1); \
|
|
if [ -n "$$BIOS_IMG" ]; then \
|
|
echo "$(COLOR_YELLOW) → $(BUILD_DIR)/cure-bios.img$(COLOR_RESET)"; \
|
|
cp "$$BIOS_IMG" $(BUILD_DIR)/cure-bios.img; \
|
|
fi; \
|
|
if [ -n "$$UEFI_IMG" ]; then \
|
|
echo "$(COLOR_YELLOW) → $(BUILD_DIR)/cure-uefi.img$(COLOR_RESET)"; \
|
|
cp "$$UEFI_IMG" $(BUILD_DIR)/cure-uefi.img; \
|
|
fi; \
|
|
if [ -n "$$KERNEL_BIN" ]; then \
|
|
echo "$(COLOR_YELLOW) → $(BIN_DIR)/$(OS_BIN)$(COLOR_RESET)"; \
|
|
cp "$$KERNEL_BIN" $(BIN_DIR)/$(OS_BIN); \
|
|
fi
|
|
|
|
@echo "$(COLOR_GREEN)Artifacts copied$(COLOR_RESET)"
|
|
|
|
all-debug: BUILD_MODE := debug
|
|
all-debug: CARGO_FLAGS :=
|
|
all-debug: clean-build rust-build copy-artifacts
|
|
|
|
dump:
|
|
@echo "$(COLOR_BLUE)Generating disassembly dump...$(COLOR_RESET)"
|
|
@if [ -f "$(BIN_DIR)/$(OS_BIN)" ]; then \
|
|
echo "$(COLOR_YELLOW)Dumping to $(BUILD_DIR)/dump.txt$(COLOR_RESET)"; \
|
|
objdump -D $(BIN_DIR)/$(OS_BIN) > $(BUILD_DIR)/dump.txt; \
|
|
echo "$(COLOR_GREEN)Dump complete$(COLOR_RESET)"; \
|
|
else \
|
|
echo "$(COLOR_RED)Error: Kernel binary not found$(COLOR_RESET)"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
clean:
|
|
@echo "$(COLOR_YELLOW)Cleaning all build artifacts...$(COLOR_RESET)"
|
|
@cargo clean
|
|
@rm -rf $(BUILD_DIR)
|
|
@rm -f $(DISK_IMAGE) bochs.log serial.log serial-debug.log bochs-debug.log
|
|
@echo "$(COLOR_GREEN)Clean complete$(COLOR_RESET)"
|
|
|
|
run: all
|
|
@echo "$(COLOR_BLUE)Running with QEMU...$(COLOR_RESET)"
|
|
@qemu-system-x86_64 -drive format=raw,file=$(BUILD_DIR)/cure-bios.img \
|
|
-m 128M \
|
|
-serial stdio
|
|
|
|
run-bochs: all
|
|
@echo "$(COLOR_BLUE)Running with Bochs...$(COLOR_RESET)"
|
|
@bochs -q -f bochs.cfg
|
|
|
|
debug-qemu: all-debug
|
|
@echo "$(COLOR_BLUE)Starting QEMU in debug mode...$(COLOR_RESET)"
|
|
@qemu-system-x86_64 -drive format=raw,file=$(BUILD_DIR)/cure-bios.img \
|
|
-m 128M \
|
|
-serial stdio \
|
|
-s -S &
|
|
@sleep 1
|
|
@echo ""
|
|
@echo "$(COLOR_YELLOW)QEMU waiting for debugger...$(COLOR_RESET)"
|
|
@echo "$(COLOR_YELLOW)Run in another terminal:$(COLOR_RESET)"
|
|
@echo " gdb $(BIN_DIR)/$(OS_BIN)"
|
|
@echo " (gdb) target remote :1234"
|
|
@echo " (gdb) continue"
|
|
@echo ""
|
|
|
|
debug-bochs: all-debug
|
|
@echo "$(COLOR_BLUE)Running Bochs in debug mode...$(COLOR_RESET)"
|
|
@echo "$(COLOR_YELLOW)Dump file available at: $(BUILD_DIR)/dump.txt$(COLOR_RESET)"
|
|
@bochs -q -f bochs.cfg
|
|
|
|
show-artifacts:
|
|
@echo "$(COLOR_BLUE)Build artifacts:$(COLOR_RESET)"
|
|
@echo " Build directory: $(BUILD_DIR)/"
|
|
@echo " Binary directory: $(BIN_DIR)/"
|
|
@echo ""
|
|
@if [ -d $(BUILD_DIR) ]; then \
|
|
echo "$(COLOR_GREEN)Files in $(BUILD_DIR):$(COLOR_RESET)"; \
|
|
ls -lh $(BUILD_DIR)/ 2>/dev/null || echo " (empty)"; \
|
|
else \
|
|
echo "$(COLOR_YELLOW) (directory doesn't exist)$(COLOR_RESET)"; \
|
|
fi
|
|
@echo ""
|
|
@if [ -d $(BIN_DIR) ]; then \
|
|
echo "$(COLOR_GREEN)Files in $(BIN_DIR):$(COLOR_RESET)"; \
|
|
ls -lh $(BIN_DIR)/ 2>/dev/null || echo " (empty)"; \
|
|
else \
|
|
echo "$(COLOR_YELLOW) (directory doesn't exist)$(COLOR_RESET)"; \
|
|
fi
|
|
|
|
check:
|
|
@echo "$(COLOR_BLUE)Checking code...$(COLOR_RESET)"
|
|
@cargo check -p cure-kernel
|
|
@cargo check -p $(BUILDER_PKG)
|
|
@echo "$(COLOR_GREEN)Check complete$(COLOR_RESET)"
|
|
|
|
fmt:
|
|
@echo "$(COLOR_BLUE)Formatting code...$(COLOR_RESET)"
|
|
@cargo fmt
|
|
@echo "$(COLOR_GREEN)Format complete$(COLOR_RESET)"
|
|
|
|
clippy:
|
|
@echo "$(COLOR_BLUE)Running clippy...$(COLOR_RESET)"
|
|
@cargo clippy
|
|
@echo "$(COLOR_GREEN)Clippy complete$(COLOR_RESET)"
|
|
|
|
help:
|
|
@echo "$(COLOR_BLUE)CureOS Makefile Commands:$(COLOR_RESET)"
|
|
@echo ""
|
|
@echo " $(COLOR_GREEN)make all$(COLOR_RESET) - Clean build/ then build (release)"
|
|
@echo " $(COLOR_GREEN)make all-debug$(COLOR_RESET) - Clean build/ then build (debug + dump)"
|
|
@echo " $(COLOR_GREEN)make dump$(COLOR_RESET) - Generate disassembly dump"
|
|
@echo " $(COLOR_GREEN)make run$(COLOR_RESET) - Build and run with QEMU"
|
|
@echo " $(COLOR_GREEN)make run-bochs$(COLOR_RESET) - Build and run with Bochs"
|
|
@echo " $(COLOR_GREEN)make debug-qemu$(COLOR_RESET) - Debug build and run with QEMU+GDB"
|
|
@echo " $(COLOR_GREEN)make debug-bochs$(COLOR_RESET) - Debug build and run with Bochs"
|
|
@echo " $(COLOR_GREEN)make clean$(COLOR_RESET) - Clean all build artifacts"
|
|
@echo " $(COLOR_GREEN)make clean-build$(COLOR_RESET) - Clean build/ directory only"
|
|
@echo " $(COLOR_GREEN)make show-artifacts$(COLOR_RESET) - Show build output locations"
|
|
@echo " $(COLOR_GREEN)make check$(COLOR_RESET) - Check code"
|
|
@echo " $(COLOR_GREEN)make fmt$(COLOR_RESET) - Format code"
|
|
@echo " $(COLOR_GREEN)make clippy$(COLOR_RESET) - Run clippy"
|
|
@echo " $(COLOR_GREEN)make help$(COLOR_RESET) - Show this help"
|
|
@echo ""
|
|
@echo "$(COLOR_YELLOW)Debug artifacts:$(COLOR_RESET)"
|
|
@echo " - $(BUILD_DIR)/dump.txt - Kernel disassembly (debug mode only)"
|
|
@echo " - $(BIN_DIR)/$(OS_BIN) - Kernel binary (for GDB)"
|
|
@echo ""
|