@@ -17,27 +17,50 @@ DEFINES := -DF_CPU=$(F_CLK) \
17
17
-DF_TIMER=$(F_TICK ) \
18
18
-include config.h
19
19
20
- ASFLAGS = -march=rv32imzicsr -mabi=ilp32
21
- CFLAGS += -Wall -Wextra -Wshadow -Wno-unused-parameter -Werror
20
+ CROSS_COMPILE ?= riscv32-unknown-elf-
21
+ C = $(CROSS_COMPILE ) gcc
22
+ CC_IS_CLANG := $(shell $(CC ) --version 2>/dev/null | grep -qi clang && echo 1)
23
+
24
+ # Architecture flags
25
+ ARCH_FLAGS = -march=rv32imzicsr -mabi=ilp32
26
+
27
+ # Common compiler flags
28
+ CFLAGS += -Wall -Wextra -Werror -Wshadow -Wno-unused-parameter
22
29
CFLAGS += -O2 -std=gnu99
23
- CFLAGS += -march=rv32imzicsr -mabi=ilp32
30
+ CFLAGS += $( ARCH_FLAGS )
24
31
CFLAGS += -mstrict-align -ffreestanding -nostdlib -fomit-frame-pointer
25
32
CFLAGS += $(INC_DIRS ) $(DEFINES ) -fdata-sections -ffunction-sections
26
- ARFLAGS = r
27
33
28
- # Linker flags
29
- LDFLAGS = -melf32lriscv --gc-sections
30
- LDSCRIPT = $(ARCH_DIR ) /riscv32-qemu.ld
34
+ ifeq ($(CC_IS_CLANG ) ,1)
35
+ CC = $(CROSS_COMPILE ) clang
36
+ AS = $(CROSS_COMPILE ) clang
37
+ LD = $(CROSS_COMPILE ) ld.lld
38
+ DUMP = $(CROSS_COMPILE ) llvm-objdump -M no-aliases
39
+ READ = $(CROSS_COMPILE ) llvm-readelf
40
+ OBJ = $(CROSS_COMPILE ) llvm-objcopy
41
+ SIZE = $(CROSS_COMPILE ) llvm-size
42
+ AR = $(CROSS_COMPILE ) ar
31
43
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 $(ARCH_FLAGS )
47
+ LDFLAGS = -m elf32lriscv --gc-sections
48
+ else
49
+ CC = $(CC_DEFAULT )
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
+ AR = $(CROSS_COMPILE ) ar
57
+
58
+ ASFLAGS = $(ARCH_FLAGS )
59
+ LDFLAGS = -melf32lriscv --gc-sections
60
+ endif
61
+
62
+ ARFLAGS = r
63
+ LDSCRIPT = $(ARCH_DIR ) /riscv32-qemu.ld
41
64
42
65
HAL_OBJS := boot.o hal.o muldiv.o
43
66
HAL_OBJS := $(addprefix $(BUILD_KERNEL_DIR ) /,$(HAL_OBJS ) )
0 commit comments