mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 02:39:48 +00:00
![Luc Van Oostenryck](/assets/img/avatar_default.png)
RISC-V uses the macro __riscv_xlen, predefined by GCC, to make the distinction between 32 or 64 bit code. However, sparse doesn't know anything about this macro which lead to wrong warnings and failures. Fix this by adding a define of __riscv_xlen to CHECKFLAGS and add one for __riscv too. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
83 lines
2.2 KiB
Makefile
83 lines
2.2 KiB
Makefile
# This file is included by the global makefile so that you can add your own
|
|
# architecture-specific flags and dependencies. Remember to do have actions
|
|
# for "archclean" and "archdep" for cleaning up and making dependencies for
|
|
# this architecture
|
|
#
|
|
# This file is subject to the terms and conditions of the GNU General Public
|
|
# License. See the file "COPYING" in the main directory of this archive
|
|
# for more details.
|
|
#
|
|
|
|
LDFLAGS :=
|
|
OBJCOPYFLAGS := -O binary
|
|
LDFLAGS_vmlinux :=
|
|
ifeq ($(CONFIG_DYNAMIC_FTRACE),y)
|
|
LDFLAGS_vmlinux := --no-relax
|
|
endif
|
|
KBUILD_AFLAGS_MODULE += -fPIC
|
|
KBUILD_CFLAGS_MODULE += -fPIC
|
|
|
|
KBUILD_DEFCONFIG = defconfig
|
|
|
|
export BITS
|
|
ifeq ($(CONFIG_ARCH_RV64I),y)
|
|
BITS := 64
|
|
UTS_MACHINE := riscv64
|
|
|
|
KBUILD_CFLAGS += -mabi=lp64
|
|
KBUILD_AFLAGS += -mabi=lp64
|
|
KBUILD_MARCH = rv64im
|
|
LDFLAGS += -melf64lriscv
|
|
else
|
|
BITS := 32
|
|
UTS_MACHINE := riscv32
|
|
|
|
KBUILD_CFLAGS += -mabi=ilp32
|
|
KBUILD_AFLAGS += -mabi=ilp32
|
|
KBUILD_MARCH = rv32im
|
|
LDFLAGS += -melf32lriscv
|
|
endif
|
|
|
|
KBUILD_CFLAGS += -Wall
|
|
|
|
ifeq ($(CONFIG_RISCV_ISA_A),y)
|
|
KBUILD_ARCH_A = a
|
|
endif
|
|
ifeq ($(CONFIG_RISCV_ISA_C),y)
|
|
KBUILD_ARCH_C = c
|
|
endif
|
|
|
|
KBUILD_AFLAGS += -march=$(KBUILD_MARCH)$(KBUILD_ARCH_A)fd$(KBUILD_ARCH_C)
|
|
|
|
KBUILD_CFLAGS += -march=$(KBUILD_MARCH)$(KBUILD_ARCH_A)$(KBUILD_ARCH_C)
|
|
KBUILD_CFLAGS += -mno-save-restore
|
|
KBUILD_CFLAGS += -DCONFIG_PAGE_OFFSET=$(CONFIG_PAGE_OFFSET)
|
|
|
|
ifeq ($(CONFIG_CMODEL_MEDLOW),y)
|
|
KBUILD_CFLAGS += -mcmodel=medlow
|
|
endif
|
|
ifeq ($(CONFIG_CMODEL_MEDANY),y)
|
|
KBUILD_CFLAGS += -mcmodel=medany
|
|
endif
|
|
ifeq ($(CONFIG_MODULE_SECTIONS),y)
|
|
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/riscv/kernel/module.lds
|
|
endif
|
|
|
|
KBUILD_CFLAGS_MODULE += $(call cc-option,-mno-relax)
|
|
|
|
# GCC versions that support the "-mstrict-align" option default to allowing
|
|
# unaligned accesses. While unaligned accesses are explicitly allowed in the
|
|
# RISC-V ISA, they're emulated by machine mode traps on all extant
|
|
# architectures. It's faster to have GCC emit only aligned accesses.
|
|
KBUILD_CFLAGS += $(call cc-option,-mstrict-align)
|
|
|
|
# arch specific predefines for sparse
|
|
CHECKFLAGS += -D__riscv -D__riscv_xlen=$(BITS)
|
|
|
|
head-y := arch/riscv/kernel/head.o
|
|
|
|
core-y += arch/riscv/kernel/ arch/riscv/mm/
|
|
|
|
libs-y += arch/riscv/lib/
|
|
|
|
all: vmlinux
|