blob: d5defea0e79bd34c15fa69bcbf0f6e89a18c2fb3 [file] [log] [blame]
Patrick Georgid1e50f92020-03-04 15:00:05 +01001## SPDX-License-Identifier: GPL-2.0-only
Ronald G. Minniche0e784a2014-11-26 19:25:47 +00002
Jonathan Neuschäfer27649192018-02-13 14:01:22 +01003################################################################################
4## RISC-V specific options
5################################################################################
Martin Roth202e7d42018-07-18 12:03:48 -06006ifeq ($(CONFIG_ARCH_RISCV),y)
Ronald G. Minniche0e784a2014-11-26 19:25:47 +00007
Julius Wernerfffee872016-03-07 17:55:43 -08008ifeq ($(CONFIG_ARCH_RAMSTAGE_RISCV),y)
9check-ramstage-overlap-regions += stack
10endif
11
Jonathan Neuschäfer6dff3fd2018-09-30 20:09:58 +020012riscv_flags = -I$(src)/arch/riscv/
Ronald G. Minnich05358042018-12-19 17:52:43 -080013
14ifeq ($(CONFIG_ARCH_RISCV_RV64),y)
15_rv_flags += -D__riscv -D__riscv_xlen=64 -D__riscv_flen=64
16else
17ifeq ($(CONFIG_ARCH_RISCV_RV32),y)
18_rv_flags += -D__riscv -D__riscv_xlen=32 -D__riscv_flen=32
19else
20$(error "You need to select ARCH_RISCV_RV64 or ARCH_RISCV_RV32")
21endif
22endif
23
Patrick Georgif0d5f672022-09-08 20:25:46 +020024# Needed for -print-libgcc-file-name which gets confused about all those arch
25# suffixes in ARCH_SUFFIX_riscv.
26simple_riscv_flags = $(riscv_flags)
27
Arthur Heymans0d504c82023-04-19 21:24:04 +020028ifeq ($(CONFIG_COMPILER_GCC),y)
29MARCH_SUFFIX=$(ARCH_SUFFIX_riscv)
30else
31MARCH_SUFFIX=
32endif
33
Jonathan Neuschäfer6dff3fd2018-09-30 20:09:58 +020034ifeq ($(CCC_ANALYZER_OUTPUT_FORMAT),)
Arthur Heymans0d504c82023-04-19 21:24:04 +020035riscv_flags += -march=$(CONFIG_RISCV_ARCH)$(MARCH_SUFFIX) -mabi=$(CONFIG_RISCV_ABI) -mcmodel=$(CONFIG_RISCV_CODEMODEL)
Patrick Georgif0d5f672022-09-08 20:25:46 +020036simple_riscv_flags += -march=$(CONFIG_RISCV_ARCH) -mabi=$(CONFIG_RISCV_ABI) -mcmodel=$(CONFIG_RISCV_CODEMODEL)
Jonathan Neuschäfer6dff3fd2018-09-30 20:09:58 +020037else
Ronald G. Minnich05358042018-12-19 17:52:43 -080038riscv_flags += $(_rv_flags)
Patrick Georgif0d5f672022-09-08 20:25:46 +020039simple_riscv_flags += $(_rv_flags)
Jonathan Neuschäfer6dff3fd2018-09-30 20:09:58 +020040endif
Jonathan Neuschäfer27649192018-02-13 14:01:22 +010041
Arthur Heymans0d504c82023-04-19 21:24:04 +020042riscv_asm_flags = -march=$(CONFIG_RISCV_ARCH)$(MARCH_SUFFIX) -mabi=$(CONFIG_RISCV_ABI)
Jonathan Neuschäfer27649192018-02-13 14:01:22 +010043
Patrick Georgif0d5f672022-09-08 20:25:46 +020044COMPILER_RT_bootblock = $(shell $(GCC_bootblock) $(simple_riscv_flags) -print-libgcc-file-name)
Jonathan Neuschäfer27649192018-02-13 14:01:22 +010045
Patrick Georgif0d5f672022-09-08 20:25:46 +020046COMPILER_RT_romstage = $(shell $(GCC_romstage) $(simple_riscv_flags) -print-libgcc-file-name)
Xiang Wang5fed6932018-07-12 14:56:05 +080047
Patrick Georgif0d5f672022-09-08 20:25:46 +020048COMPILER_RT_ramstage = $(shell $(GCC_ramstage) $(simple_riscv_flags) -print-libgcc-file-name)
Jonathan Neuschäfer27649192018-02-13 14:01:22 +010049
Arthur Heymansbf0b06d2022-05-13 14:49:44 +020050## All stages
51
52all-y += trap_util.S
53all-y += trap_handler.c
54all-y += fp_asm.S
Arthur Heymansbf0b06d2022-05-13 14:49:44 +020055all-y += sbi.c
56all-y += mcall.c
57all-y += virtual_memory.c
58all-y += boot.c
59all-y += smp.c
60all-y += misc.c
Ronald G Minnichcb6a35e2024-03-06 13:14:17 -080061all-$(CONFIG_ARCH_RISCV_PMP) += pmp.c
Arthur Heymansbf0b06d2022-05-13 14:49:44 +020062all-y += \
63 $(top)/src/lib/memchr.c \
64 $(top)/src/lib/memcmp.c \
65 $(top)/src/lib/memcpy.c \
66 $(top)/src/lib/memmove.c \
67 $(top)/src/lib/memset.c
68all-$(CONFIG_RISCV_USE_ARCH_TIMER) += arch_timer.c
69
70
Ronald G. Minniche0e784a2014-11-26 19:25:47 +000071################################################################################
72## bootblock
73################################################################################
74ifeq ($(CONFIG_ARCH_BOOTBLOCK_RISCV),y)
75
Xiang Wang07bc3252018-07-20 16:16:46 +080076bootblock-y = bootblock.S
Philipp Hug199b75f2018-09-13 18:11:56 +020077
Julius Wernerec5e5e02014-08-20 15:29:56 -070078$(objcbfs)/bootblock.debug: $$(bootblock-objs)
Ronald G. Minniche0e784a2014-11-26 19:25:47 +000079 @printf " LINK $(subst $(obj)/,,$(@))\n"
Aaron Durbind4dd44c2015-09-06 10:15:17 -050080 $(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) \
Furquan Shaikh46514c22020-06-11 11:59:07 -070081 -T $(call src-to-obj,bootblock,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(bootblock-objs)) \
Patrick Georgi3332f332015-07-18 00:25:12 +020082 $(LIBGCC_FILE_NAME_bootblock) --end-group $(COMPILER_RT_bootblock)
Ronald G. Minniche0e784a2014-11-26 19:25:47 +000083
Jonathan Neuschäfer1282b8d2016-06-10 19:35:15 +020084bootblock-c-ccopts += $(riscv_flags)
85bootblock-S-ccopts += $(riscv_asm_flags)
86
Philipp Hugb09e5002019-02-06 06:48:51 +010087ifeq ($(CONFIG_ARCH_RISCV_RV32),y)
88LDFLAGS_bootblock += -m elf32lriscv
89endif #CONFIG_ARCH_RISCV_RV32
90
Martin Roth202e7d42018-07-18 12:03:48 -060091endif #CONFIG_ARCH_BOOTBLOCK_RISCV
Ronald G. Minniche0e784a2014-11-26 19:25:47 +000092
93################################################################################
94## romstage
95################################################################################
96ifeq ($(CONFIG_ARCH_ROMSTAGE_RISCV),y)
97
Maximilian Brune6270e742024-01-14 20:45:00 +060098romstage-$(CONFIG_SEPARATE_ROMSTAGE) += romstage.S
Philipp Hug8e365392024-03-01 10:59:56 +000099romstage-y += ramdetect.c
Philipp Hug199b75f2018-09-13 18:11:56 +0200100
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000101# Build the romstage
102
Julius Wernerec5e5e02014-08-20 15:29:56 -0700103$(objcbfs)/romstage.debug: $$(romstage-objs)
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000104 @printf " LINK $(subst $(obj)/,,$(@))\n"
Furquan Shaikh46514c22020-06-11 11:59:07 -0700105 $(LD_romstage) $(LDFLAGS_romstage) -o $@ -L$(obj) -T $(call src-to-obj,romstage,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(romstage-objs)) --end-group $(COMPILER_RT_romstage)
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000106
107romstage-c-ccopts += $(riscv_flags)
108romstage-S-ccopts += $(riscv_asm_flags)
109
Philipp Hugb09e5002019-02-06 06:48:51 +0100110ifeq ($(CONFIG_ARCH_RISCV_RV32),y)
111LDFLAGS_romstage += -m elf32lriscv
112endif #CONFIG_ARCH_RISCV_RV32
113
Martin Roth202e7d42018-07-18 12:03:48 -0600114endif #CONFIG_ARCH_ROMSTAGE_RISCV
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000115
116################################################################################
117## ramstage
118################################################################################
119ifeq ($(CONFIG_ARCH_RAMSTAGE_RISCV),y)
120
121ramstage-y =
Xiang Wang21ed1072018-08-29 17:21:19 +0800122ramstage-y += ramstage.S
Philipp Hug8e365392024-03-01 10:59:56 +0000123ramstage-y += ramdetect.c
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000124ramstage-y += tables.c
Xiang Wang820dcfc2018-07-19 17:35:39 +0800125ramstage-y += payload.c
Jonathan Neuschäfer3a4511e2018-12-12 01:08:24 +0100126ramstage-y += fit_payload.c
Philipp Hug199b75f2018-09-13 18:11:56 +0200127
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000128$(eval $(call create_class_compiler,rmodules,riscv))
129
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000130ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/mainboard.c
131
132# Build the ramstage
133
Julius Wernerec5e5e02014-08-20 15:29:56 -0700134$(objcbfs)/ramstage.debug: $$(ramstage-objs)
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000135 @printf " CC $(subst $(obj)/,,$(@))\n"
Furquan Shaikh46514c22020-06-11 11:59:07 -0700136 $(LD_ramstage) $(LDFLAGS_ramstage) -o $@ -L$(obj) -T $(call src-to-obj,ramstage,$(CONFIG_MEMLAYOUT_LD_FILE)) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) --end-group $(COMPILER_RT_ramstage)
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000137
138ramstage-c-ccopts += $(riscv_flags)
139ramstage-S-ccopts += $(riscv_asm_flags)
140
Philipp Hugb09e5002019-02-06 06:48:51 +0100141ifeq ($(CONFIG_ARCH_RISCV_RV32),y)
142LDFLAGS_ramstage += -m elf32lriscv
143endif #CONFIG_ARCH_RISCV_RV32
144
Martin Roth202e7d42018-07-18 12:03:48 -0600145endif #CONFIG_ARCH_RAMSTAGE_RISCV
Xiang Wanga6f9eab2019-03-28 12:19:30 +0800146
147ifeq ($(CONFIG_RISCV_OPENSBI),y)
148
149OPENSBI_SOURCE := $(top)/3rdparty/opensbi
150OPENSBI_BUILD := $(abspath $(obj)/3rdparty/opensbi)
151OPENSBI_TARGET := $(OPENSBI_BUILD)/platform/$(CONFIG_OPENSBI_PLATFORM)/firmware/fw_dynamic.elf
152OPENSBI := $(obj)/opensbi.elf
153
Arthur Heymanscf827af2023-05-23 12:38:19 +0200154# TODO: Building with clang has troubles finding the proper linker.
155# Always use GCC for now.
Xiang Wanga6f9eab2019-03-28 12:19:30 +0800156$(OPENSBI_TARGET): $(obj)/config.h | $(OPENSBI_SOURCE)
157 printf " MAKE $(subst $(obj)/,,$(@))\n"
158 mkdir -p $(OPENSBI_BUILD)
159 $(MAKE) \
160 -C "$(OPENSBI_SOURCE)" \
Arthur Heymanscf827af2023-05-23 12:38:19 +0200161 CC="$(GCC_ramstage) -fno-builtin" \
Xiang Wanga6f9eab2019-03-28 12:19:30 +0800162 LD="$(LD_ramstage)" \
163 OBJCOPY="$(OBJCOPY_ramstage)" \
164 AR="$(AR_ramstage)" \
165 PLATFORM=$(CONFIG_OPENSBI_PLATFORM) \
166 O="$(OPENSBI_BUILD)" \
Maximilian Brune6270e742024-01-14 20:45:00 +0600167 FW_JUMP=n \
Xiang Wanga6f9eab2019-03-28 12:19:30 +0800168 FW_DYNAMIC=y \
169 FW_PAYLOAD=n \
Xiang Wanga6f9eab2019-03-28 12:19:30 +0800170 FW_TEXT_START=$(CONFIG_OPENSBI_TEXT_START)
171
172$(OPENSBI): $(OPENSBI_TARGET)
173 cp $< $@
174
175OPENSBI_CBFS := $(CONFIG_CBFS_PREFIX)/opensbi
176$(OPENSBI_CBFS)-file := $(OPENSBI)
177$(OPENSBI_CBFS)-type := payload
178$(OPENSBI_CBFS)-compression := $(CBFS_COMPRESS_FLAG)
179cbfs-files-y += $(OPENSBI_CBFS)
180
181check-ramstage-overlap-files += $(OPENSBI_CBFS)
182
183CPPFLAGS_common += -I$(OPENSBI_SOURCE)/include
184ramstage-y += opensbi.c
185
186endif #CONFIG_RISCV_OPENSBI
187
Martin Roth202e7d42018-07-18 12:03:48 -0600188endif #CONFIG_ARCH_RISCV