diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2025-12-28 01:48:50 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2025-12-28 01:48:50 +0800 |
| commit | f3c8918b13a5226f53e7870d60436f812e5d9015 (patch) | |
| tree | 5a934b82f23916e67e8cac9d230af93645611f3a /Makefile | |
| parent | a82ab8ad6d277ededc128678aebabf5fbdb01c45 (diff) | |
| download | lume-f3c8918b13a5226f53e7870d60436f812e5d9015.tar.gz lume-f3c8918b13a5226f53e7870d60436f812e5d9015.tar.xz | |
feat(user): add user-space build system and init process to test fork/wait
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 44 |
1 files changed, 38 insertions, 6 deletions
@@ -3,29 +3,56 @@ CC := $(TOOLCHAIN_PREFIX)gcc CXX := $(TOOLCHAIN_PREFIX)g++ LD := $(TOOLCHAIN_PREFIX)ld OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy +OBJDUMP := $(TOOLCHAIN_PREFIX)objdump BUILD_DIR := build SRC_DIR := src -CFLAGS := -Wall -Wextra -O2 -ffreestanding -nostdlib -mcmodel=medany -Iinclude +CFLAGS := -Wall -Wextra -O2 -g -ffreestanding -nostdlib -mcmodel=medany -Iinclude CXXFLAGS := $(CFLAGS) -fno-exceptions -fno-rtti -fno-use-cxa-atexit - LINKER_SCRIPT := link.ld -SRCS_S := $(shell find $(SRC_DIR) -name "*.S") -SRCS_CXX := $(shell find $(SRC_DIR) -name "*.cc") +UPROGS_SRC := $(SRC_DIR)/user/init.cc +UPROGS_OBJ := $(BUILD_DIR)/user/init.o +ULIB_OBJ := $(BUILD_DIR)/user/usys.o +USER_LD := $(SRC_DIR)/user/user.ld +INITCODE_BIN := $(BUILD_DIR)/user/initcode + +SRCS_S := $(shell find $(SRC_DIR) -name "*.S" -not -path "$(SRC_DIR)/user/*") +SRCS_CXX := $(shell find $(SRC_DIR) -name "*.cc" -not -path "$(SRC_DIR)/user/*") OBJS := $(SRCS_S:%.S=$(BUILD_DIR)/%.o) $(SRCS_CXX:%.cc=$(BUILD_DIR)/%.o) TARGET := $(BUILD_DIR)/kernel.elf -.PHONY: all clean run +.PHONY: all clean run debug all: $(TARGET) +$(BUILD_DIR)/user/%.o: $(SRC_DIR)/user/%.cc + @mkdir -p $(dir $@) + @echo " U_CXX $<" + @$(CXX) $(CXXFLAGS) -c $< -o $@ + +$(BUILD_DIR)/user/%.o: $(SRC_DIR)/user/%.S + @mkdir -p $(dir $@) + @echo " U_AS $<" + @$(CC) $(CFLAGS) -c $< -o $@ + +$(INITCODE_BIN): $(UPROGS_OBJ) $(ULIB_OBJ) $(USER_LD) + @echo " U_LD $@" + @$(LD) -T $(USER_LD) -o $@.out $(UPROGS_OBJ) $(ULIB_OBJ) + @$(OBJCOPY) -S -O binary $@.out $@ + @$(OBJDUMP) -S $@.out > $@.asm + $(TARGET): $(OBJS) $(LINKER_SCRIPT) @echo " LD $@" @$(LD) -T $(LINKER_SCRIPT) -o $@ $(OBJS) +$(BUILD_DIR)/src/kernel/initcode.o: $(SRC_DIR)/kernel/initcode.S $(INITCODE_BIN) + @mkdir -p $(dir $@) + @echo " AS_INC $<" + @$(CC) $(CFLAGS) -c $< -o $@ + $(BUILD_DIR)/%.o: %.S @mkdir -p $(dir $@) @echo " AS $<" @@ -41,5 +68,10 @@ run: $(TARGET) @qemu-system-riscv64 -machine virt -nographic \ -kernel $(TARGET) -m 128M +debug: $(TARGET) + @echo " QEMU (DEBUG) Waiting for GDB..." + @qemu-system-riscv64 -machine virt -nographic \ + -kernel $(TARGET) -m 128M -s -S + clean: - rm -rf $(BUILD_DIR)
\ No newline at end of file + rm -rf $(BUILD_DIR) |
