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