@@ -17,27 +17,51 @@ DEFINES := -DF_CPU=$(F_CLK) \
1717 -DF_TIMER=$(F_TICK ) \
1818 -include config.h
1919
20- ASFLAGS = -march=rv32imzicsr -mabi=ilp32
21- CFLAGS += -Wall -Wextra -Wshadow -Wno-unused-parameter -Werror
20+ CROSS_COMPILE ?= riscv-none-elf-
21+
22+ # Detect LLVM/Clang toolchain (allow user override)
23+ CC_IS_CLANG ?= $(shell $(CROSS_COMPILE ) clang --version 2>/dev/null | grep -qi clang && echo 1)
24+
25+ # Architecture flags
26+ ARCH_FLAGS = -march=rv32imzicsr -mabi=ilp32
27+
28+ # Common compiler flags
29+ CFLAGS += -Wall -Wextra -Werror -Wshadow -Wno-unused-parameter
2230CFLAGS += -O2 -std=gnu99
23- CFLAGS += -march=rv32imzicsr -mabi=ilp32
31+ CFLAGS += $( ARCH_FLAGS )
2432CFLAGS += -mstrict-align -ffreestanding -nostdlib -fomit-frame-pointer
2533CFLAGS += $(INC_DIRS ) $(DEFINES ) -fdata-sections -ffunction-sections
26- ARFLAGS = r
2734
28- # Linker flags
29- LDFLAGS = -melf32lriscv --gc-sections
30- LDSCRIPT = $(ARCH_DIR ) /riscv32-qemu.ld
35+ ifeq ($(CC_IS_CLANG ) ,1)
36+ CC = $(CROSS_COMPILE ) clang
37+ AS = $(CROSS_COMPILE ) clang
38+ LD = $(CROSS_COMPILE ) ld.lld
39+ DUMP = $(CROSS_COMPILE ) llvm-objdump -M no-aliases
40+ READ = $(CROSS_COMPILE ) llvm-readelf
41+ OBJ = $(CROSS_COMPILE ) llvm-objcopy
42+ SIZE = $(CROSS_COMPILE ) llvm-size
3143
32- CROSS_COMPILE ?= riscv-none-elf-
33- CC = $(CROSS_COMPILE ) gcc
34- AS = $(CROSS_COMPILE ) as
35- LD = $(CROSS_COMPILE ) ld
36- DUMP = $(CROSS_COMPILE ) objdump -Mno-aliases
37- READ = $(CROSS_COMPILE ) readelf
38- OBJ = $(CROSS_COMPILE ) objcopy
39- SIZE = $(CROSS_COMPILE ) size
40- AR = $(CROSS_COMPILE ) ar
44+ CFLAGS += --target=riscv32-unknown-elf
45+ CFLAGS += -Wno-unused-command-line-argument
46+ ASFLAGS = --target=riscv32-unknown-elf
47+ LDFLAGS = -m elf32lriscv
48+ else
49+ CC = $(CROSS_COMPILE ) gcc
50+ AS = $(CROSS_COMPILE ) as
51+ LD = $(CROSS_COMPILE ) ld
52+ DUMP = $(CROSS_COMPILE ) objdump -Mno-aliases
53+ READ = $(CROSS_COMPILE ) readelf
54+ OBJ = $(CROSS_COMPILE ) objcopy
55+ SIZE = $(CROSS_COMPILE ) size
56+ LDFLAGS = -melf32lriscv
57+ endif
58+
59+ AR = $(CROSS_COMPILE ) ar
60+ ASFLAGS += $(ARCH_FLAGS )
61+ LDFLAGS += --gc-sections
62+
63+ ARFLAGS = r
64+ LDSCRIPT = $(ARCH_DIR ) /riscv32-qemu.ld
4165
4266HAL_OBJS := boot.o hal.o muldiv.o
4367HAL_OBJS := $(addprefix $(BUILD_KERNEL_DIR ) /,$(HAL_OBJS ) )
0 commit comments