xref: /linux/arch/riscv/Makefile (revision 6a34dfa15d6edf7e78b8118d862d2db0889cf669)
1fbe934d6SPalmer Dabbelt# This file is included by the global makefile so that you can add your own
28212f898SMasahiro Yamada# architecture-specific flags and dependencies.
3fbe934d6SPalmer Dabbelt#
4fbe934d6SPalmer Dabbelt# This file is subject to the terms and conditions of the GNU General Public
5fbe934d6SPalmer Dabbelt# License.  See the file "COPYING" in the main directory of this archive
6fbe934d6SPalmer Dabbelt# for more details.
7fbe934d6SPalmer Dabbelt#
8fbe934d6SPalmer Dabbelt
926e7aacbSAlexandre GhitiLDFLAGS_vmlinux := -z norelro
1039b33072SAlexandre Ghitiifeq ($(CONFIG_RELOCATABLE),y)
1126e7aacbSAlexandre Ghiti	LDFLAGS_vmlinux += -shared -Bsymbolic -z notext --emit-relocs
1239b33072SAlexandre Ghiti	KBUILD_CFLAGS += -fPIE
1339b33072SAlexandre Ghitiendif
14a1d2a6b4SAlan Kaoifeq ($(CONFIG_DYNAMIC_FTRACE),y)
1539b33072SAlexandre Ghiti	LDFLAGS_vmlinux += --no-relax
16afc76b8bSGuo Ren	KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
17409c8fb2SGuo Renifeq ($(CONFIG_RISCV_ISA_C),y)
18409c8fb2SGuo Ren	CC_FLAGS_FTRACE := -fpatchable-function-entry=4
196724a76cSGuo Renelse
206724a76cSGuo Ren	CC_FLAGS_FTRACE := -fpatchable-function-entry=2
21409c8fb2SGuo Renendif
22a1d2a6b4SAlan Kaoendif
23aad15bc8SVincent Chen
245d2388dbSKhem Rajifeq ($(CONFIG_CMODEL_MEDLOW),y)
25aad15bc8SVincent ChenKBUILD_CFLAGS_MODULE += -mcmodel=medany
26aad15bc8SVincent Chenendif
27fbe934d6SPalmer Dabbelt
28fbe934d6SPalmer Dabbeltexport BITS
29fbe934d6SPalmer Dabbeltifeq ($(CONFIG_ARCH_RV64I),y)
30fbe934d6SPalmer Dabbelt	BITS := 64
31fbe934d6SPalmer Dabbelt	UTS_MACHINE := riscv64
32fbe934d6SPalmer Dabbelt
33fbe934d6SPalmer Dabbelt	KBUILD_CFLAGS += -mabi=lp64
34fbe934d6SPalmer Dabbelt	KBUILD_AFLAGS += -mabi=lp64
35a89757daSAlex Guo
36d503ac53SMasahiro Yamada	KBUILD_LDFLAGS += -melf64lriscv
3770a57b24SMiguel Ojeda
3870a57b24SMiguel Ojeda	KBUILD_RUSTFLAGS += -Ctarget-cpu=generic-rv64 --target=riscv64imac-unknown-none-elf \
3970a57b24SMiguel Ojeda			    -Cno-redzone
40fbe934d6SPalmer Dabbeltelse
41fbe934d6SPalmer Dabbelt	BITS := 32
42fbe934d6SPalmer Dabbelt	UTS_MACHINE := riscv32
43fbe934d6SPalmer Dabbelt
44fbe934d6SPalmer Dabbelt	KBUILD_CFLAGS += -mabi=ilp32
45fbe934d6SPalmer Dabbelt	KBUILD_AFLAGS += -mabi=ilp32
46d503ac53SMasahiro Yamada	KBUILD_LDFLAGS += -melf32lriscv
47fbe934d6SPalmer Dabbeltendif
48fbe934d6SPalmer Dabbelt
4955b71d2cSNathan Chancellorifndef CONFIG_RISCV_USE_LINKER_RELAXATION
50ec3a5cb6SKhem Raj	KBUILD_CFLAGS += -mno-relax
51ec3a5cb6SKhem Raj	KBUILD_AFLAGS += -mno-relax
5252cc02b9SMasahiro Yamadaifndef CONFIG_AS_IS_LLVM
53ec3a5cb6SKhem Raj	KBUILD_CFLAGS += -Wa,-mno-relax
54ec3a5cb6SKhem Raj	KBUILD_AFLAGS += -Wa,-mno-relax
55ec3a5cb6SKhem Rajendif
56021d2342SWende Tan# LLVM has an issue with target-features and LTO: https://github.com/llvm/llvm-project/issues/59350
57021d2342SWende Tan# Ensure it is aware of linker relaxation with LTO, otherwise relocations may
58021d2342SWende Tan# be incorrect: https://github.com/llvm/llvm-project/issues/65090
59021d2342SWende Tanelse ifeq ($(CONFIG_LTO_CLANG),y)
60021d2342SWende Tan	KBUILD_LDFLAGS += -mllvm -mattr=+c -mllvm -mattr=+relax
61ec3a5cb6SKhem Rajendif
62ec3a5cb6SKhem Raj
63d1584d79SSami Tolvanenifeq ($(CONFIG_SHADOW_CALL_STACK),y)
64d1584d79SSami Tolvanen	KBUILD_LDFLAGS += --no-relax-gp
65d1584d79SSami Tolvanenendif
66d1584d79SSami Tolvanen
67e8be5302SAlan Kao# ISA string setting
6809afac77SChristoph Hellwigriscv-march-$(CONFIG_ARCH_RV32I)	:= rv32ima
6909afac77SChristoph Hellwigriscv-march-$(CONFIG_ARCH_RV64I)	:= rv64ima
709671f706SAlan Kaoriscv-march-$(CONFIG_FPU)		:= $(riscv-march-y)fd
71e8be5302SAlan Kaoriscv-march-$(CONFIG_RISCV_ISA_C)	:= $(riscv-march-y)c
72fa8e7cceSGuo Renriscv-march-$(CONFIG_RISCV_ISA_V)	:= $(riscv-march-y)v
736df2a016SAurelien Jarno
7470a57b24SMiguel Ojedaifneq ($(CONFIG_RISCV_ISA_C),y)
7570a57b24SMiguel Ojeda	KBUILD_RUSTFLAGS += -Ctarget-feature=-c
7670a57b24SMiguel Ojedaendif
7770a57b24SMiguel Ojeda
78e89c2e81SNathan Chancellorifdef CONFIG_TOOLCHAIN_NEEDS_OLD_ISA_SPEC
79e89c2e81SNathan ChancellorKBUILD_CFLAGS += -Wa,-misa-spec=2.2
80e89c2e81SNathan ChancellorKBUILD_AFLAGS += -Wa,-misa-spec=2.2
81e89c2e81SNathan Chancellorelse
82e89c2e81SNathan Chancellorriscv-march-$(CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI) := $(riscv-march-y)_zicsr_zifencei
83e89c2e81SNathan Chancellorendif
846df2a016SAurelien Jarno
8538acdee3SAlexandre Ghiti# Check if the toolchain supports Zacas
8638acdee3SAlexandre Ghitiriscv-march-$(CONFIG_TOOLCHAIN_HAS_ZACAS) := $(riscv-march-y)_zacas
8738acdee3SAlexandre Ghiti
881658ef43SAlexandre Ghiti# Check if the toolchain supports Zabha
891658ef43SAlexandre Ghitiriscv-march-$(CONFIG_TOOLCHAIN_HAS_ZABHA) := $(riscv-march-y)_zabha
901658ef43SAlexandre Ghiti
91fa8e7cceSGuo Ren# Remove F,D,V from isa string for all. Keep extensions between "fd" and "v" by
92fa8e7cceSGuo Ren# matching non-v and non-multi-letter extensions out with the filter ([^v_]*)
93fa8e7cceSGuo RenKBUILD_CFLAGS += -march=$(shell echo $(riscv-march-y) | sed -E 's/(rv32ima|rv64ima)fd([^v_]*)v?/\1\2/')
94fa8e7cceSGuo Ren
95e8be5302SAlan KaoKBUILD_AFLAGS += -march=$(riscv-march-y)
96fbe934d6SPalmer Dabbelt
9777acc6b5SSamuel Holland# For C code built with floating-point support, exclude V but keep F and D.
9877acc6b5SSamuel HollandCC_FLAGS_FPU  := -march=$(shell echo $(riscv-march-y) | sed -E 's/(rv32ima|rv64ima)([^v_]*)v?/\1\2/')
9977acc6b5SSamuel Holland
100fbe934d6SPalmer DabbeltKBUILD_CFLAGS += -mno-save-restore
101fbe934d6SPalmer DabbeltKBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET)
102fbe934d6SPalmer Dabbelt
103fbe934d6SPalmer Dabbeltifeq ($(CONFIG_CMODEL_MEDLOW),y)
104fbe934d6SPalmer Dabbelt	KBUILD_CFLAGS += -mcmodel=medlow
105fbe934d6SPalmer Dabbeltendif
106fbe934d6SPalmer Dabbeltifeq ($(CONFIG_CMODEL_MEDANY),y)
107fbe934d6SPalmer Dabbelt	KBUILD_CFLAGS += -mcmodel=medany
108fbe934d6SPalmer Dabbeltendif
109ab1ef68eSZong Li
1102f394c0eSAndreas Schwab# Avoid generating .eh_frame sections.
1112f394c0eSAndreas SchwabKBUILD_CFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables
1122f394c0eSAndreas Schwab
113e18048daSPalmer Dabbelt# The RISC-V attributes frequently cause compatibility issues and provide no
114e18048daSPalmer Dabbelt# information, so just turn them off.
115e18048daSPalmer DabbeltKBUILD_CFLAGS += $(call cc-option,-mno-riscv-attribute)
116e18048daSPalmer DabbeltKBUILD_AFLAGS += $(call cc-option,-mno-riscv-attribute)
117e18048daSPalmer DabbeltKBUILD_CFLAGS += $(call as-option,-Wa$(comma)-mno-arch-attr)
118e18048daSPalmer DabbeltKBUILD_AFLAGS += $(call as-option,-Wa$(comma)-mno-arch-attr)
119e18048daSPalmer Dabbelt
120ab1ef68eSZong LiKBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
121c1f6eff3SBen DooksKBUILD_AFLAGS_MODULE += $(call as-option,-Wa$(comma)-mno-relax)
122fbe934d6SPalmer Dabbelt
123fbe934d6SPalmer Dabbelt# GCC versions that support the "-mstrict-align" option default to allowing
124fbe934d6SPalmer Dabbelt# unaligned accesses.  While unaligned accesses are explicitly allowed in the
125fbe934d6SPalmer Dabbelt# RISC-V ISA, they're emulated by machine mode traps on all extant
126fbe934d6SPalmer Dabbelt# architectures.  It's faster to have GCC emit only aligned accesses.
127b6da6cbeSJisheng Zhangifneq ($(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS),y)
128fbe934d6SPalmer DabbeltKBUILD_CFLAGS += $(call cc-option,-mstrict-align)
129b6da6cbeSJisheng Zhangendif
130fbe934d6SPalmer Dabbelt
131fea2fed2SGuo Renifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
132fea2fed2SGuo Renprepare: stack_protector_prepare
133fea2fed2SGuo Renstack_protector_prepare: prepare0
134fea2fed2SGuo Ren	$(eval KBUILD_CFLAGS += -mstack-protector-guard=tls		  \
135fea2fed2SGuo Ren				-mstack-protector-guard-reg=tp		  \
136fea2fed2SGuo Ren				-mstack-protector-guard-offset=$(shell	  \
137fea2fed2SGuo Ren			awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}' \
138*214c0eeaSMasahiro Yamada				$(objtree)/include/generated/asm-offsets.h))
139fea2fed2SGuo Renendif
140fea2fed2SGuo Ren
141889d746eSLuc Van Oostenryck# arch specific predefines for sparse
142889d746eSLuc Van OostenryckCHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS)
143889d746eSLuc Van Oostenryck
144c0fbcd99SAnup Patel# Default target when executing plain make
145c0fbcd99SAnup Patelboot		:= arch/riscv/boot
14644c92257SVitaly Woolifeq ($(CONFIG_XIP_KERNEL),y)
14744c92257SVitaly WoolKBUILD_IMAGE := $(boot)/xipImage
14844c92257SVitaly Woolelse
1490bfbc914SLinus Torvaldsifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_SOC_CANAAN_K210),yy)
1503b938e23SMasahiro YamadaKBUILD_IMAGE := $(boot)/loader.bin
1513b938e23SMasahiro Yamadaelse
1523b938e23SMasahiro Yamadaifeq ($(CONFIG_EFI_ZBOOT),)
153c0fbcd99SAnup PatelKBUILD_IMAGE	:= $(boot)/Image.gz
1543b938e23SMasahiro Yamadaelse
1553b938e23SMasahiro YamadaKBUILD_IMAGE := $(boot)/vmlinuz.efi
1563b938e23SMasahiro Yamadaendif
1573b938e23SMasahiro Yamadaendif
15844c92257SVitaly Woolendif
159c0fbcd99SAnup Patel
160e79dfcbfSEmil Renner Berthingboot					:= arch/riscv/boot
161e79dfcbfSEmil Renner Berthingboot-image-y				:= Image
162e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_BZIP2)	:= Image.bz2
163e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_GZIP)	:= Image.gz
164e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_LZ4)		:= Image.lz4
165e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_LZMA)	:= Image.lzma
166e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_LZO)		:= Image.lzo
167e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_ZSTD)	:= Image.zst
168ab4ce983SLasse Collinboot-image-$(CONFIG_KERNEL_XZ)		:= Image.xz
169e79dfcbfSEmil Renner Berthingifdef CONFIG_RISCV_M_MODE
170e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_ARCH_CANAAN)	:= loader.bin
171e79dfcbfSEmil Renner Berthingendif
172e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_EFI_ZBOOT)		:= vmlinuz.efi
173e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_XIP_KERNEL)		:= xipImage
174e79dfcbfSEmil Renner BerthingKBUILD_IMAGE				:= $(boot)/$(boot-image-y)
175e79dfcbfSEmil Renner Berthing
176fbe934d6SPalmer Dabbeltlibs-y += arch/riscv/lib/
177d7071743SAtish Patralibs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
178fbe934d6SPalmer Dabbelt
1795a19c7e0SAndreas Schwabifeq ($(KBUILD_EXTMOD),)
180a290f510SPalmer Dabbeltifeq ($(CONFIG_MMU),y)
181fde9c59aSSaleem Abdulrasoolprepare: vdso_prepare
182fde9c59aSSaleem Abdulrasoolvdso_prepare: prepare0
183fde9c59aSSaleem Abdulrasool	$(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso include/generated/vdso-offsets.h
1840715372aSGuo Ren	$(if $(CONFIG_COMPAT),$(Q)$(MAKE) \
1850715372aSGuo Ren		$(build)=arch/riscv/kernel/compat_vdso include/generated/compat_vdso-offsets.h)
1860715372aSGuo Ren
187a290f510SPalmer Dabbeltendif
1885a19c7e0SAndreas Schwabendif
189fde9c59aSSaleem Abdulrasool
19056769ba4SMasahiro Yamadavdso-install-y			+= arch/riscv/kernel/vdso/vdso.so.dbg
1914b0bf9a0SMasahiro Yamadavdso-install-$(CONFIG_COMPAT)	+= arch/riscv/kernel/compat_vdso/compat_vdso.so.dbg
19256769ba4SMasahiro Yamada
193ab4ce983SLasse CollinBOOT_TARGETS := Image Image.gz Image.bz2 Image.lz4 Image.lzma Image.lzo Image.zst Image.xz loader loader.bin xipImage vmlinuz.efi
194c0fbcd99SAnup Patel
195405fe7aaSChristoph Hellwigall:	$(notdir $(KBUILD_IMAGE))
196c0fbcd99SAnup Patel
197c4db7ff7SMasahiro Yamadaloader.bin: loader
198ab4ce983SLasse CollinImage.gz Image.bz2 Image.lz4 Image.lzma Image.lzo Image.zst Image.xz loader xipImage vmlinuz.efi: Image
199e79dfcbfSEmil Renner Berthing
200405fe7aaSChristoph Hellwig$(BOOT_TARGETS): vmlinux
201c0fbcd99SAnup Patel	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
202405fe7aaSChristoph Hellwig	@$(kecho) '  Kernel: $(boot)/$@ is ready'
203c0fbcd99SAnup Patel
204e79dfcbfSEmil Renner Berthing# the install target always installs KBUILD_IMAGE (which may be compressed)
205e79dfcbfSEmil Renner Berthing# but keep the zinstall target for compatibility with older releases
206399c1ec8SMasahiro Yamadainstall zinstall:
207f774f5bbSMasahiro Yamada	$(call cmd,install)
2082c42bcbbSKefeng Wang
2095d4595dbSRandy DunlapPHONY += rv32_randconfig
2105d4595dbSRandy Dunlaprv32_randconfig:
2115d4595dbSRandy Dunlap	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/riscv/configs/32-bit.config \
2125d4595dbSRandy Dunlap		-f $(srctree)/Makefile randconfig
2135d4595dbSRandy Dunlap
2145d4595dbSRandy DunlapPHONY += rv64_randconfig
2155d4595dbSRandy Dunlaprv64_randconfig:
2165d4595dbSRandy Dunlap	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/riscv/configs/64-bit.config \
2175d4595dbSRandy Dunlap		-f $(srctree)/Makefile randconfig
21872f045d1SGuo Ren
21972f045d1SGuo RenPHONY += rv32_defconfig
22072f045d1SGuo Renrv32_defconfig:
22172f045d1SGuo Ren	$(Q)$(MAKE) -f $(srctree)/Makefile defconfig 32-bit.config
22277c0c966SJesse Taube
22377c0c966SJesse TaubePHONY += rv32_nommu_virt_defconfig
22477c0c966SJesse Tauberv32_nommu_virt_defconfig:
22577c0c966SJesse Taube	$(Q)$(MAKE) -f $(srctree)/Makefile nommu_virt_defconfig 32-bit.config
22607501c49SEmil Renner Berthing
22707501c49SEmil Renner Berthingdefine archhelp
22807501c49SEmil Renner Berthing  echo  '  Image		- Uncompressed kernel image (arch/riscv/boot/Image)'
22907501c49SEmil Renner Berthing  echo  '  Image.gz	- Compressed kernel image (arch/riscv/boot/Image.gz)'
23007501c49SEmil Renner Berthing  echo  '  Image.bz2	- Compressed kernel image (arch/riscv/boot/Image.bz2)'
23107501c49SEmil Renner Berthing  echo  '  Image.lz4	- Compressed kernel image (arch/riscv/boot/Image.lz4)'
23207501c49SEmil Renner Berthing  echo  '  Image.lzma	- Compressed kernel image (arch/riscv/boot/Image.lzma)'
23307501c49SEmil Renner Berthing  echo  '  Image.lzo	- Compressed kernel image (arch/riscv/boot/Image.lzo)'
23407501c49SEmil Renner Berthing  echo  '  Image.zst	- Compressed kernel image (arch/riscv/boot/Image.zst)'
235ab4ce983SLasse Collin  echo  '  Image.xz	- Compressed kernel image (arch/riscv/boot/Image.xz)'
23607501c49SEmil Renner Berthing  echo  '  vmlinuz.efi	- Compressed EFI kernel image (arch/riscv/boot/vmlinuz.efi)'
23707501c49SEmil Renner Berthing  echo  '		  Default when CONFIG_EFI_ZBOOT=y'
23807501c49SEmil Renner Berthing  echo  '  xipImage	- Execute-in-place kernel image (arch/riscv/boot/xipImage)'
23907501c49SEmil Renner Berthing  echo  '		  Default when CONFIG_XIP_KERNEL=y'
24007501c49SEmil Renner Berthing  echo  '  install	- Install kernel using (your) ~/bin/$(INSTALLKERNEL) or'
24107501c49SEmil Renner Berthing  echo  '		  (distribution) /sbin/$(INSTALLKERNEL) or install to '
24207501c49SEmil Renner Berthing  echo  '		  $$(INSTALL_PATH)'
24307501c49SEmil Renner Berthingendef
244