xref: /linux/arch/riscv/Makefile (revision 4427259cc7f7571a157fbc9b5011e1ef6fe0a4a8)
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)
119b400d17SArd Biesheuvel	LDFLAGS_vmlinux += -shared -Bsymbolic -z notext
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)
18c217157bSPuranjay Mohan	CC_FLAGS_FTRACE := -fpatchable-function-entry=8,4
196724a76cSGuo Renelse
20c217157bSPuranjay Mohan	CC_FLAGS_FTRACE := -fpatchable-function-entry=4,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
49021d2342SWende Tan# LLVM has an issue with target-features and LTO: https://github.com/llvm/llvm-project/issues/59350
50021d2342SWende Tan# Ensure it is aware of linker relaxation with LTO, otherwise relocations may
51021d2342SWende Tan# be incorrect: https://github.com/llvm/llvm-project/issues/65090
527ccbe917SNathan Chancellorifeq ($(CONFIG_LTO_CLANG),y)
53021d2342SWende Tan	KBUILD_LDFLAGS += -mllvm -mattr=+c -mllvm -mattr=+relax
54ec3a5cb6SKhem Rajendif
55ec3a5cb6SKhem Raj
56d1584d79SSami Tolvanenifeq ($(CONFIG_SHADOW_CALL_STACK),y)
57d1584d79SSami Tolvanen	KBUILD_LDFLAGS += --no-relax-gp
58d1584d79SSami Tolvanenendif
59d1584d79SSami Tolvanen
60e8be5302SAlan Kao# ISA string setting
6109afac77SChristoph Hellwigriscv-march-$(CONFIG_ARCH_RV32I)	:= rv32ima
6209afac77SChristoph Hellwigriscv-march-$(CONFIG_ARCH_RV64I)	:= rv64ima
639671f706SAlan Kaoriscv-march-$(CONFIG_FPU)		:= $(riscv-march-y)fd
64e8be5302SAlan Kaoriscv-march-$(CONFIG_RISCV_ISA_C)	:= $(riscv-march-y)c
65fa8e7cceSGuo Renriscv-march-$(CONFIG_RISCV_ISA_V)	:= $(riscv-march-y)v
666df2a016SAurelien Jarno
6770a57b24SMiguel Ojedaifneq ($(CONFIG_RISCV_ISA_C),y)
6870a57b24SMiguel Ojeda	KBUILD_RUSTFLAGS += -Ctarget-feature=-c
6970a57b24SMiguel Ojedaendif
7070a57b24SMiguel Ojeda
71e89c2e81SNathan Chancellorifdef CONFIG_TOOLCHAIN_NEEDS_OLD_ISA_SPEC
72e89c2e81SNathan ChancellorKBUILD_CFLAGS += -Wa,-misa-spec=2.2
73e89c2e81SNathan ChancellorKBUILD_AFLAGS += -Wa,-misa-spec=2.2
74e89c2e81SNathan Chancellorelse
75e89c2e81SNathan Chancellorriscv-march-$(CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI) := $(riscv-march-y)_zicsr_zifencei
76e89c2e81SNathan Chancellorendif
776df2a016SAurelien Jarno
7838acdee3SAlexandre Ghiti# Check if the toolchain supports Zacas
7938acdee3SAlexandre Ghitiriscv-march-$(CONFIG_TOOLCHAIN_HAS_ZACAS) := $(riscv-march-y)_zacas
8038acdee3SAlexandre Ghiti
811658ef43SAlexandre Ghiti# Check if the toolchain supports Zabha
821658ef43SAlexandre Ghitiriscv-march-$(CONFIG_TOOLCHAIN_HAS_ZABHA) := $(riscv-march-y)_zabha
831658ef43SAlexandre Ghiti
84fa8e7cceSGuo Ren# Remove F,D,V from isa string for all. Keep extensions between "fd" and "v" by
85fa8e7cceSGuo Ren# matching non-v and non-multi-letter extensions out with the filter ([^v_]*)
86fa8e7cceSGuo RenKBUILD_CFLAGS += -march=$(shell echo $(riscv-march-y) | sed -E 's/(rv32ima|rv64ima)fd([^v_]*)v?/\1\2/')
87fa8e7cceSGuo Ren
88e8be5302SAlan KaoKBUILD_AFLAGS += -march=$(riscv-march-y)
89fbe934d6SPalmer Dabbelt
9077acc6b5SSamuel Holland# For C code built with floating-point support, exclude V but keep F and D.
9177acc6b5SSamuel HollandCC_FLAGS_FPU  := -march=$(shell echo $(riscv-march-y) | sed -E 's/(rv32ima|rv64ima)([^v_]*)v?/\1\2/')
9277acc6b5SSamuel Holland
93fbe934d6SPalmer DabbeltKBUILD_CFLAGS += -mno-save-restore
94fbe934d6SPalmer Dabbelt
95fbe934d6SPalmer Dabbeltifeq ($(CONFIG_CMODEL_MEDLOW),y)
96fbe934d6SPalmer Dabbelt	KBUILD_CFLAGS += -mcmodel=medlow
97fbe934d6SPalmer Dabbeltendif
98fbe934d6SPalmer Dabbeltifeq ($(CONFIG_CMODEL_MEDANY),y)
99fbe934d6SPalmer Dabbelt	KBUILD_CFLAGS += -mcmodel=medany
100fbe934d6SPalmer Dabbeltendif
101ab1ef68eSZong Li
1022f394c0eSAndreas Schwab# Avoid generating .eh_frame sections.
1032f394c0eSAndreas SchwabKBUILD_CFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables
1042f394c0eSAndreas Schwab
105e18048daSPalmer Dabbelt# The RISC-V attributes frequently cause compatibility issues and provide no
106e18048daSPalmer Dabbelt# information, so just turn them off.
107e18048daSPalmer DabbeltKBUILD_CFLAGS += $(call cc-option,-mno-riscv-attribute)
108e18048daSPalmer DabbeltKBUILD_AFLAGS += $(call cc-option,-mno-riscv-attribute)
109e18048daSPalmer DabbeltKBUILD_CFLAGS += $(call as-option,-Wa$(comma)-mno-arch-attr)
110e18048daSPalmer DabbeltKBUILD_AFLAGS += $(call as-option,-Wa$(comma)-mno-arch-attr)
111e18048daSPalmer Dabbelt
112ab1ef68eSZong LiKBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
113c1f6eff3SBen DooksKBUILD_AFLAGS_MODULE += $(call as-option,-Wa$(comma)-mno-relax)
114fbe934d6SPalmer Dabbelt
115fbe934d6SPalmer Dabbelt# GCC versions that support the "-mstrict-align" option default to allowing
116fbe934d6SPalmer Dabbelt# unaligned accesses.  While unaligned accesses are explicitly allowed in the
117fbe934d6SPalmer Dabbelt# RISC-V ISA, they're emulated by machine mode traps on all extant
118fbe934d6SPalmer Dabbelt# architectures.  It's faster to have GCC emit only aligned accesses.
119b6da6cbeSJisheng Zhangifneq ($(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS),y)
120fbe934d6SPalmer DabbeltKBUILD_CFLAGS += $(call cc-option,-mstrict-align)
121b6da6cbeSJisheng Zhangendif
122fbe934d6SPalmer Dabbelt
123fea2fed2SGuo Renifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
124fea2fed2SGuo Renprepare: stack_protector_prepare
125fea2fed2SGuo Renstack_protector_prepare: prepare0
126fea2fed2SGuo Ren	$(eval KBUILD_CFLAGS += -mstack-protector-guard=tls		  \
127fea2fed2SGuo Ren				-mstack-protector-guard-reg=tp		  \
128fea2fed2SGuo Ren				-mstack-protector-guard-offset=$(shell	  \
129fea2fed2SGuo Ren			awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}' \
130214c0eeaSMasahiro Yamada				$(objtree)/include/generated/asm-offsets.h))
131fea2fed2SGuo Renendif
132fea2fed2SGuo Ren
133889d746eSLuc Van Oostenryck# arch specific predefines for sparse
134889d746eSLuc Van OostenryckCHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS)
135889d746eSLuc Van Oostenryck
136c0fbcd99SAnup Patel# Default target when executing plain make
137c0fbcd99SAnup Patelboot					:= arch/riscv/boot
138e79dfcbfSEmil Renner Berthingboot-image-y				:= Image
139e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_BZIP2)	:= Image.bz2
140e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_GZIP)	:= Image.gz
141e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_LZ4)		:= Image.lz4
142e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_LZMA)	:= Image.lzma
143e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_LZO)		:= Image.lzo
144e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_KERNEL_ZSTD)	:= Image.zst
145ab4ce983SLasse Collinboot-image-$(CONFIG_KERNEL_XZ)		:= Image.xz
146e79dfcbfSEmil Renner Berthingifdef CONFIG_RISCV_M_MODE
147*3ad1b71fSFeng Jiangboot-image-$(CONFIG_SOC_CANAAN_K210)	:= loader.bin
148e79dfcbfSEmil Renner Berthingendif
149e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_EFI_ZBOOT)		:= vmlinuz.efi
150e79dfcbfSEmil Renner Berthingboot-image-$(CONFIG_XIP_KERNEL)		:= xipImage
151e79dfcbfSEmil Renner BerthingKBUILD_IMAGE				:= $(boot)/$(boot-image-y)
152e79dfcbfSEmil Renner Berthing
153fbe934d6SPalmer Dabbeltlibs-y += arch/riscv/lib/
154d7071743SAtish Patralibs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
155fbe934d6SPalmer Dabbelt
1565a19c7e0SAndreas Schwabifeq ($(KBUILD_EXTMOD),)
157a290f510SPalmer Dabbeltifeq ($(CONFIG_MMU),y)
158fde9c59aSSaleem Abdulrasoolprepare: vdso_prepare
159fde9c59aSSaleem Abdulrasoolvdso_prepare: prepare0
160fde9c59aSSaleem Abdulrasool	$(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso include/generated/vdso-offsets.h
1610715372aSGuo Ren	$(if $(CONFIG_COMPAT),$(Q)$(MAKE) \
1620715372aSGuo Ren		$(build)=arch/riscv/kernel/compat_vdso include/generated/compat_vdso-offsets.h)
1630715372aSGuo Ren
164a290f510SPalmer Dabbeltendif
1655a19c7e0SAndreas Schwabendif
166fde9c59aSSaleem Abdulrasool
16756769ba4SMasahiro Yamadavdso-install-y			+= arch/riscv/kernel/vdso/vdso.so.dbg
1684b0bf9a0SMasahiro Yamadavdso-install-$(CONFIG_COMPAT)	+= arch/riscv/kernel/compat_vdso/compat_vdso.so.dbg
16956769ba4SMasahiro Yamada
170ab4ce983SLasse CollinBOOT_TARGETS := Image Image.gz Image.bz2 Image.lz4 Image.lzma Image.lzo Image.zst Image.xz loader loader.bin xipImage vmlinuz.efi
171c0fbcd99SAnup Patel
172405fe7aaSChristoph Hellwigall:	$(notdir $(KBUILD_IMAGE))
173c0fbcd99SAnup Patel
174c4db7ff7SMasahiro Yamadaloader.bin: loader
175ab4ce983SLasse CollinImage.gz Image.bz2 Image.lz4 Image.lzma Image.lzo Image.zst Image.xz loader xipImage vmlinuz.efi: Image
176e79dfcbfSEmil Renner Berthing
177405fe7aaSChristoph Hellwig$(BOOT_TARGETS): vmlinux
178c0fbcd99SAnup Patel	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
179405fe7aaSChristoph Hellwig	@$(kecho) '  Kernel: $(boot)/$@ is ready'
180c0fbcd99SAnup Patel
181e79dfcbfSEmil Renner Berthing# the install target always installs KBUILD_IMAGE (which may be compressed)
182e79dfcbfSEmil Renner Berthing# but keep the zinstall target for compatibility with older releases
183399c1ec8SMasahiro Yamadainstall zinstall:
184f774f5bbSMasahiro Yamada	$(call cmd,install)
1852c42bcbbSKefeng Wang
1865d4595dbSRandy DunlapPHONY += rv32_randconfig
1875d4595dbSRandy Dunlaprv32_randconfig:
1885d4595dbSRandy Dunlap	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/riscv/configs/32-bit.config \
1895d4595dbSRandy Dunlap		-f $(srctree)/Makefile randconfig
1905d4595dbSRandy Dunlap
1915d4595dbSRandy DunlapPHONY += rv64_randconfig
1925d4595dbSRandy Dunlaprv64_randconfig:
1935d4595dbSRandy Dunlap	$(Q)$(MAKE) KCONFIG_ALLCONFIG=$(srctree)/arch/riscv/configs/64-bit.config \
1945d4595dbSRandy Dunlap		-f $(srctree)/Makefile randconfig
19572f045d1SGuo Ren
19672f045d1SGuo RenPHONY += rv32_defconfig
19772f045d1SGuo Renrv32_defconfig:
19872f045d1SGuo Ren	$(Q)$(MAKE) -f $(srctree)/Makefile defconfig 32-bit.config
19977c0c966SJesse Taube
20077c0c966SJesse TaubePHONY += rv32_nommu_virt_defconfig
20177c0c966SJesse Tauberv32_nommu_virt_defconfig:
20277c0c966SJesse Taube	$(Q)$(MAKE) -f $(srctree)/Makefile nommu_virt_defconfig 32-bit.config
20307501c49SEmil Renner Berthing
20407501c49SEmil Renner Berthingdefine archhelp
20507501c49SEmil Renner Berthing  echo  '  Image		- Uncompressed kernel image (arch/riscv/boot/Image)'
20607501c49SEmil Renner Berthing  echo  '  Image.gz	- Compressed kernel image (arch/riscv/boot/Image.gz)'
20707501c49SEmil Renner Berthing  echo  '  Image.bz2	- Compressed kernel image (arch/riscv/boot/Image.bz2)'
20807501c49SEmil Renner Berthing  echo  '  Image.lz4	- Compressed kernel image (arch/riscv/boot/Image.lz4)'
20907501c49SEmil Renner Berthing  echo  '  Image.lzma	- Compressed kernel image (arch/riscv/boot/Image.lzma)'
21007501c49SEmil Renner Berthing  echo  '  Image.lzo	- Compressed kernel image (arch/riscv/boot/Image.lzo)'
21107501c49SEmil Renner Berthing  echo  '  Image.zst	- Compressed kernel image (arch/riscv/boot/Image.zst)'
212ab4ce983SLasse Collin  echo  '  Image.xz	- Compressed kernel image (arch/riscv/boot/Image.xz)'
21307501c49SEmil Renner Berthing  echo  '  vmlinuz.efi	- Compressed EFI kernel image (arch/riscv/boot/vmlinuz.efi)'
21407501c49SEmil Renner Berthing  echo  '		  Default when CONFIG_EFI_ZBOOT=y'
21507501c49SEmil Renner Berthing  echo  '  xipImage	- Execute-in-place kernel image (arch/riscv/boot/xipImage)'
21607501c49SEmil Renner Berthing  echo  '		  Default when CONFIG_XIP_KERNEL=y'
21707501c49SEmil Renner Berthing  echo  '  install	- Install kernel using (your) ~/bin/$(INSTALLKERNEL) or'
21807501c49SEmil Renner Berthing  echo  '		  (distribution) /sbin/$(INSTALLKERNEL) or install to '
21907501c49SEmil Renner Berthing  echo  '		  $$(INSTALL_PATH)'
22007501c49SEmil Renner Berthingendef
221