CC = clang LD = ld.lld OBJCOPY = llvm-objcopy COMPILER = $(shell $(CC) --version | head -n 1) LINKER = $(shell $(LD) --version | head -n 1) ARCH_NAME = 32-bit RISC-V, IM_Zicsr ISA, little endian, unknown ELF, System V ABI CFLAGS = \ --target=riscv32-unknown-elf \ -march=rv32im_zicsr \ -mabi=ilp32 \ -ffreestanding \ -fno-builtin \ -nostdlib \ -nostdinc \ -nodefaultlibs \ -DVERSION='"$(VERSION)"' \ -DCOMPILER_NAME='"$(COMPILER)"' \ -DLINKER_NAME='"$(LINKER)"' \ -DARCH_NAME='"$(ARCH_NAME)"' \ -static \ -ffunction-sections -fdata-sections -fno-common \ -Iinclude -O2 -g3 \ -Wall -Wextra -Werror -Wundef LD_FLAGS = \ -T $(LINKER_SCRIPT) -nostdlib -m elf32lriscv --gc-sections OBJCOPY_FLAGS = \ -O binary \ --strip-all \ --remove-section=.comment \ --remove-section=.debug* \ --remove-section=.note* \ --remove-section=.eh_frame \ --remove-section=.eh_frame_ptr \ --remove-section=.eh_frame_hdr C_SRCS = $(shell find . -name '*.c') S_SRCS = $(shell find . -name '*.S') C_OBJECTS = $(C_SRCS:.c=.o) S_OBJECTS = $(S_SRCS:.S=.o) ALL_OBJECTS = $(C_OBJECTS) $(S_OBJECTS) LINKER_SCRIPT = arch/linker.ld KERNEL_BINARY = Image.bin KERNEL_ELF = arch/webos-kernel.elf $(V).SILENT: %.o: %.c @echo " CC $<" $(CC) $(CFLAGS) -c $< -o $@ %.o: %.S @echo " AS $<" $(CC) $(CFLAGS) -c $< -o $@ $(KERNEL_ELF): $(ALL_OBJECTS) $(LINKER_SCRIPT) @echo " LD $@" $(LD) $(LD_FLAGS) -o $@ $(ALL_OBJECTS) $(KERNEL_BINARY): $(KERNEL_ELF) @echo " OBJCOPY $@" $(OBJCOPY) $(OBJCOPY_FLAGS) $(KERNEL_ELF) $(KERNEL_BIN) clean: @echo " CLEAN $(ALL_OBJECTS)" $(RM) $(ALL_OBJECTS) @echo " CLEAN $(KERNEL_ELF)" $(RM) $(KERNEL_ELF) @echo " CLEAN $(KERNEL_BINARY)" $(RM) $(KERNEL_BINARY) .PHONY: all clean all: $(KERNEL_BINARY)