blob: 2372464ad27d5f775102febd9512d1db5f310cd2 [file] [log] [blame]
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -07001# This file is included by the global makefile so that you can add your own
2# architecture-specific flags and dependencies. Remember to do have actions
3# for "archclean" and "archdep" for cleaning up and making dependencies for
4# this architecture
5#
6# This file is subject to the terms and conditions of the GNU General Public
7# License. See the file "COPYING" in the main directory of this archive
8# for more details.
9#
10
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070011OBJCOPYFLAGS := -O binary
12LDFLAGS_vmlinux :=
Alan Kaoa1d2a6b2018-02-13 13:13:16 +080013ifeq ($(CONFIG_DYNAMIC_FTRACE),y)
14 LDFLAGS_vmlinux := --no-relax
Guo Renafc76b82020-12-17 16:01:41 +000015 KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
16 CC_FLAGS_FTRACE := -fpatchable-function-entry=8
Alan Kaoa1d2a6b2018-02-13 13:13:16 +080017endif
Vincent Chenaad15bc2020-02-21 10:47:55 +080018
19ifeq ($(CONFIG_64BIT)$(CONFIG_CMODEL_MEDLOW),yy)
20KBUILD_CFLAGS_MODULE += -mcmodel=medany
21endif
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070022
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070023export BITS
24ifeq ($(CONFIG_ARCH_RV64I),y)
25 BITS := 64
26 UTS_MACHINE := riscv64
27
28 KBUILD_CFLAGS += -mabi=lp64
29 KBUILD_AFLAGS += -mabi=lp64
Alex Guoa89757d2018-07-29 01:14:47 +000030
Masahiro Yamadad503ac52018-08-24 08:20:39 +090031 KBUILD_LDFLAGS += -melf64lriscv
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070032else
33 BITS := 32
34 UTS_MACHINE := riscv32
35
36 KBUILD_CFLAGS += -mabi=ilp32
37 KBUILD_AFLAGS += -mabi=ilp32
Masahiro Yamadad503ac52018-08-24 08:20:39 +090038 KBUILD_LDFLAGS += -melf32lriscv
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070039endif
40
Alan Kaoe8be5302018-10-09 10:18:32 +080041# ISA string setting
Christoph Hellwig09afac72019-04-15 11:14:35 +020042riscv-march-$(CONFIG_ARCH_RV32I) := rv32ima
43riscv-march-$(CONFIG_ARCH_RV64I) := rv64ima
Alan Kao9671f702018-10-09 10:18:33 +080044riscv-march-$(CONFIG_FPU) := $(riscv-march-y)fd
Alan Kaoe8be5302018-10-09 10:18:32 +080045riscv-march-$(CONFIG_RISCV_ISA_C) := $(riscv-march-y)c
46KBUILD_CFLAGS += -march=$(subst fd,,$(riscv-march-y))
47KBUILD_AFLAGS += -march=$(riscv-march-y)
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070048
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070049KBUILD_CFLAGS += -mno-save-restore
50KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET)
51
52ifeq ($(CONFIG_CMODEL_MEDLOW),y)
53 KBUILD_CFLAGS += -mcmodel=medlow
54endif
55ifeq ($(CONFIG_CMODEL_MEDANY),y)
56 KBUILD_CFLAGS += -mcmodel=medany
57endif
Mao Handbeb90b2019-08-29 14:57:00 +080058ifeq ($(CONFIG_PERF_EVENTS),y)
59 KBUILD_CFLAGS += -fno-omit-frame-pointer
60endif
Zong Liab1ef682018-03-15 16:50:41 +080061
62KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070063
64# GCC versions that support the "-mstrict-align" option default to allowing
65# unaligned accesses. While unaligned accesses are explicitly allowed in the
66# RISC-V ISA, they're emulated by machine mode traps on all extant
67# architectures. It's faster to have GCC emit only aligned accesses.
68KBUILD_CFLAGS += $(call cc-option,-mstrict-align)
69
Luc Van Oostenryck889d7462018-05-31 17:42:01 +020070# arch specific predefines for sparse
71CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS)
72
Anup Patelc0fbcd92018-11-12 11:25:15 +053073# Default target when executing plain make
74boot := arch/riscv/boot
75KBUILD_IMAGE := $(boot)/Image.gz
76
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070077head-y := arch/riscv/kernel/head.o
78
Masahiro Yamada909548d2019-08-21 18:26:58 +090079core-y += arch/riscv/
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070080
81libs-y += arch/riscv/lib/
Atish Patrad7071742020-09-17 15:37:14 -070082libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
Palmer Dabbeltfbe934d2017-07-10 18:08:08 -070083
David Abdurachmanovf157d412018-11-05 15:35:37 +010084PHONY += vdso_install
85vdso_install:
86 $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
87
Damien Le Moal08734e02020-12-13 22:50:38 +090088ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_SOC_CANAAN),yy)
Christoph Hellwig37809df2020-03-16 09:47:43 +090089KBUILD_IMAGE := $(boot)/loader.bin
Christoph Hellwig405fe7a2019-10-28 13:10:42 +010090else
91KBUILD_IMAGE := $(boot)/Image.gz
92endif
Christoph Hellwig37809df2020-03-16 09:47:43 +090093BOOT_TARGETS := Image Image.gz loader loader.bin
Anup Patelc0fbcd92018-11-12 11:25:15 +053094
Christoph Hellwig405fe7a2019-10-28 13:10:42 +010095all: $(notdir $(KBUILD_IMAGE))
Anup Patelc0fbcd92018-11-12 11:25:15 +053096
Christoph Hellwig405fe7a2019-10-28 13:10:42 +010097$(BOOT_TARGETS): vmlinux
Anup Patelc0fbcd92018-11-12 11:25:15 +053098 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
Christoph Hellwig405fe7a2019-10-28 13:10:42 +010099 @$(kecho) ' Kernel: $(boot)/$@ is ready'
Anup Patelc0fbcd92018-11-12 11:25:15 +0530100
Kefeng Wangc18d7c12020-11-04 14:14:59 +0800101Image.%: Image
102 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
103
Anup Patelc0fbcd92018-11-12 11:25:15 +0530104zinstall install:
105 $(Q)$(MAKE) $(build)=$(boot) $@
Kefeng Wang2c42bcb2020-11-04 14:15:00 +0800106
107archclean:
108 $(Q)$(MAKE) $(clean)=$(boot)