linux/arch/riscv/Makefile
<<
>>
Prefs
   1# 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
  11OBJCOPYFLAGS    := -O binary
  12LDFLAGS_vmlinux :=
  13ifeq ($(CONFIG_DYNAMIC_FTRACE),y)
  14        LDFLAGS_vmlinux := --no-relax
  15        KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
  16        CC_FLAGS_FTRACE := -fpatchable-function-entry=8
  17endif
  18
  19ifeq ($(CONFIG_CMODEL_MEDLOW),y)
  20KBUILD_CFLAGS_MODULE += -mcmodel=medany
  21endif
  22
  23export BITS
  24ifeq ($(CONFIG_ARCH_RV64I),y)
  25        BITS := 64
  26        UTS_MACHINE := riscv64
  27
  28        KBUILD_CFLAGS += -mabi=lp64
  29        KBUILD_AFLAGS += -mabi=lp64
  30
  31        KBUILD_LDFLAGS += -melf64lriscv
  32else
  33        BITS := 32
  34        UTS_MACHINE := riscv32
  35
  36        KBUILD_CFLAGS += -mabi=ilp32
  37        KBUILD_AFLAGS += -mabi=ilp32
  38        KBUILD_LDFLAGS += -melf32lriscv
  39endif
  40
  41ifeq ($(CONFIG_LD_IS_LLD),y)
  42        KBUILD_CFLAGS += -mno-relax
  43        KBUILD_AFLAGS += -mno-relax
  44ifndef CONFIG_AS_IS_LLVM
  45        KBUILD_CFLAGS += -Wa,-mno-relax
  46        KBUILD_AFLAGS += -Wa,-mno-relax
  47endif
  48endif
  49
  50# ISA string setting
  51riscv-march-$(CONFIG_ARCH_RV32I)        := rv32ima
  52riscv-march-$(CONFIG_ARCH_RV64I)        := rv64ima
  53riscv-march-$(CONFIG_FPU)               := $(riscv-march-y)fd
  54riscv-march-$(CONFIG_RISCV_ISA_C)       := $(riscv-march-y)c
  55KBUILD_CFLAGS += -march=$(subst fd,,$(riscv-march-y))
  56KBUILD_AFLAGS += -march=$(riscv-march-y)
  57
  58KBUILD_CFLAGS += -mno-save-restore
  59KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET)
  60
  61ifeq ($(CONFIG_CMODEL_MEDLOW),y)
  62        KBUILD_CFLAGS += -mcmodel=medlow
  63endif
  64ifeq ($(CONFIG_CMODEL_MEDANY),y)
  65        KBUILD_CFLAGS += -mcmodel=medany
  66endif
  67ifeq ($(CONFIG_PERF_EVENTS),y)
  68        KBUILD_CFLAGS += -fno-omit-frame-pointer
  69endif
  70
  71KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
  72
  73# GCC versions that support the "-mstrict-align" option default to allowing
  74# unaligned accesses.  While unaligned accesses are explicitly allowed in the
  75# RISC-V ISA, they're emulated by machine mode traps on all extant
  76# architectures.  It's faster to have GCC emit only aligned accesses.
  77KBUILD_CFLAGS += $(call cc-option,-mstrict-align)
  78
  79ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
  80prepare: stack_protector_prepare
  81stack_protector_prepare: prepare0
  82        $(eval KBUILD_CFLAGS += -mstack-protector-guard=tls               \
  83                                -mstack-protector-guard-reg=tp            \
  84                                -mstack-protector-guard-offset=$(shell    \
  85                        awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}' \
  86                                        include/generated/asm-offsets.h))
  87endif
  88
  89# arch specific predefines for sparse
  90CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS)
  91
  92# Default target when executing plain make
  93boot            := arch/riscv/boot
  94ifeq ($(CONFIG_XIP_KERNEL),y)
  95KBUILD_IMAGE := $(boot)/xipImage
  96else
  97KBUILD_IMAGE    := $(boot)/Image.gz
  98endif
  99
 100head-y := arch/riscv/kernel/head.o
 101
 102core-$(CONFIG_RISCV_ERRATA_ALTERNATIVE) += arch/riscv/errata/
 103
 104libs-y += arch/riscv/lib/
 105libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
 106
 107PHONY += vdso_install
 108vdso_install:
 109        $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso $@
 110
 111ifeq ($(CONFIG_MMU),y)
 112prepare: vdso_prepare
 113vdso_prepare: prepare0
 114        $(Q)$(MAKE) $(build)=arch/riscv/kernel/vdso include/generated/vdso-offsets.h
 115endif
 116
 117ifneq ($(CONFIG_XIP_KERNEL),y)
 118ifeq ($(CONFIG_RISCV_M_MODE)$(CONFIG_SOC_CANAAN),yy)
 119KBUILD_IMAGE := $(boot)/loader.bin
 120else
 121KBUILD_IMAGE := $(boot)/Image.gz
 122endif
 123endif
 124BOOT_TARGETS := Image Image.gz loader loader.bin xipImage
 125
 126all:    $(notdir $(KBUILD_IMAGE))
 127
 128$(BOOT_TARGETS): vmlinux
 129        $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 130        @$(kecho) '  Kernel: $(boot)/$@ is ready'
 131
 132Image.%: Image
 133        $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
 134
 135install: install-image = Image
 136zinstall: install-image = Image.gz
 137install zinstall:
 138        $(CONFIG_SHELL) $(srctree)/$(boot)/install.sh $(KERNELRELEASE) \
 139        $(boot)/$(install-image) System.map "$(INSTALL_PATH)"
 140
 141archclean:
 142        $(Q)$(MAKE) $(clean)=$(boot)
 143