blob: e912120d857b982d5a0d1f5b692adf190266ce62 [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
55all-y += misaligned.c
56all-y += sbi.c
57all-y += mcall.c
58all-y += virtual_memory.c
59all-y += boot.c
60all-y += smp.c
61all-y += misc.c
62all-$(ARCH_RISCV_PMP) += pmp.c
63all-y += \
64 $(top)/src/lib/memchr.c \
65 $(top)/src/lib/memcmp.c \
66 $(top)/src/lib/memcpy.c \
67 $(top)/src/lib/memmove.c \
68 $(top)/src/lib/memset.c
69all-$(CONFIG_RISCV_USE_ARCH_TIMER) += arch_timer.c
70
71
Ronald G. Minniche0e784a2014-11-26 19:25:47 +000072################################################################################
73## bootblock
74################################################################################
75ifeq ($(CONFIG_ARCH_BOOTBLOCK_RISCV),y)
76
Xiang Wang07bc3252018-07-20 16:16:46 +080077bootblock-y = bootblock.S
Philipp Hug199b75f2018-09-13 18:11:56 +020078
Julius Wernerec5e5e02014-08-20 15:29:56 -070079$(objcbfs)/bootblock.debug: $$(bootblock-objs)
Ronald G. Minniche0e784a2014-11-26 19:25:47 +000080 @printf " LINK $(subst $(obj)/,,$(@))\n"
Aaron Durbind4dd44c2015-09-06 10:15:17 -050081 $(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) \
Furquan Shaikh46514c22020-06-11 11:59:07 -070082 -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 +020083 $(LIBGCC_FILE_NAME_bootblock) --end-group $(COMPILER_RT_bootblock)
Ronald G. Minniche0e784a2014-11-26 19:25:47 +000084
Jonathan Neuschäfer1282b8d2016-06-10 19:35:15 +020085bootblock-c-ccopts += $(riscv_flags)
86bootblock-S-ccopts += $(riscv_asm_flags)
87
Philipp Hugb09e5002019-02-06 06:48:51 +010088ifeq ($(CONFIG_ARCH_RISCV_RV32),y)
89LDFLAGS_bootblock += -m elf32lriscv
90endif #CONFIG_ARCH_RISCV_RV32
91
Martin Roth202e7d42018-07-18 12:03:48 -060092endif #CONFIG_ARCH_BOOTBLOCK_RISCV
Ronald G. Minniche0e784a2014-11-26 19:25:47 +000093
94################################################################################
95## romstage
96################################################################################
97ifeq ($(CONFIG_ARCH_ROMSTAGE_RISCV),y)
98
Nico Huberc01d0922019-11-04 16:32:01 +010099romstage-y += romstage.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
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000123ramstage-y += tables.c
Xiang Wang820dcfc2018-07-19 17:35:39 +0800124ramstage-y += payload.c
Jonathan Neuschäfer3a4511e2018-12-12 01:08:24 +0100125ramstage-y += fit_payload.c
Philipp Hug199b75f2018-09-13 18:11:56 +0200126
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000127$(eval $(call create_class_compiler,rmodules,riscv))
128
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000129ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/mainboard.c
130
131# Build the ramstage
132
Julius Wernerec5e5e02014-08-20 15:29:56 -0700133$(objcbfs)/ramstage.debug: $$(ramstage-objs)
Ronald G. Minniche0e784a2014-11-26 19:25:47 +0000134 @printf " CC $(subst $(obj)/,,$(@))\n"
Furquan Shaikh46514c22020-06-11 11:59:07 -0700135 $(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 +0000136
137ramstage-c-ccopts += $(riscv_flags)
138ramstage-S-ccopts += $(riscv_asm_flags)
139
Philipp Hugb09e5002019-02-06 06:48:51 +0100140ifeq ($(CONFIG_ARCH_RISCV_RV32),y)
141LDFLAGS_ramstage += -m elf32lriscv
142endif #CONFIG_ARCH_RISCV_RV32
143
Martin Roth202e7d42018-07-18 12:03:48 -0600144endif #CONFIG_ARCH_RAMSTAGE_RISCV
Xiang Wanga6f9eab2019-03-28 12:19:30 +0800145
146ifeq ($(CONFIG_RISCV_OPENSBI),y)
147
148OPENSBI_SOURCE := $(top)/3rdparty/opensbi
149OPENSBI_BUILD := $(abspath $(obj)/3rdparty/opensbi)
150OPENSBI_TARGET := $(OPENSBI_BUILD)/platform/$(CONFIG_OPENSBI_PLATFORM)/firmware/fw_dynamic.elf
151OPENSBI := $(obj)/opensbi.elf
152
Arthur Heymanscf827af2023-05-23 12:38:19 +0200153# TODO: Building with clang has troubles finding the proper linker.
154# Always use GCC for now.
Xiang Wanga6f9eab2019-03-28 12:19:30 +0800155$(OPENSBI_TARGET): $(obj)/config.h | $(OPENSBI_SOURCE)
156 printf " MAKE $(subst $(obj)/,,$(@))\n"
157 mkdir -p $(OPENSBI_BUILD)
158 $(MAKE) \
159 -C "$(OPENSBI_SOURCE)" \
Arthur Heymanscf827af2023-05-23 12:38:19 +0200160 CC="$(GCC_ramstage) -fno-builtin" \
Xiang Wanga6f9eab2019-03-28 12:19:30 +0800161 LD="$(LD_ramstage)" \
162 OBJCOPY="$(OBJCOPY_ramstage)" \
163 AR="$(AR_ramstage)" \
164 PLATFORM=$(CONFIG_OPENSBI_PLATFORM) \
165 O="$(OPENSBI_BUILD)" \
166 FW_JUMP=y \
167 FW_DYNAMIC=y \
168 FW_PAYLOAD=n \
169 FW_PAYLOAD_OFFSET=0 \
170 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