Skip to content

Commit 43dbe5b

Browse files
authored
Merge pull request #31 from G36maid/feature/build-llvm
Add LLVM/Clang toolchain support with auto-detection
2 parents 7dbdfc6 + 4d88a11 commit 43dbe5b

File tree

1 file changed

+40
-16
lines changed

1 file changed

+40
-16
lines changed

arch/riscv/build.mk

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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
2230
CFLAGS += -O2 -std=gnu99
23-
CFLAGS += -march=rv32imzicsr -mabi=ilp32
31+
CFLAGS += $(ARCH_FLAGS)
2432
CFLAGS += -mstrict-align -ffreestanding -nostdlib -fomit-frame-pointer
2533
CFLAGS += $(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

4266
HAL_OBJS := boot.o hal.o muldiv.o
4367
HAL_OBJS := $(addprefix $(BUILD_KERNEL_DIR)/,$(HAL_OBJS))

0 commit comments

Comments
 (0)