Files
npu-ax3386-kernel/driver/build.mk
2022-09-13 10:35:16 +08:00

162 lines
5.0 KiB
Makefile

##
# Copyright (C) 2020 Alibaba Group Holding Limited
##
include Makefile
ifeq ($(BUILDROOT_DIR),)
$(error BUILDROOT_DIR is empty)
endif
LINUX_DIR ?= $(BUILDROOT_DIR)/output/build/linux-custom
TOOLCHAIN_DIR ?= $(BUILDROOT_DIR)/output/host/bin
CROSS_COMPILE ?= ${TOOLCHAIN_DIR}/bin/riscv64-unknown-linux-gnu-
export ARCH ?= riscv
# if building the kernel module in-tree, these config options
# should be put into a Kconfig file.
# if building out-of-tree, defining them here is as good as any.
# CONFIG_VHA: build the VHA driver
export CONFIG_VHA := m
# hardware options:
# CONFIG_VHA_DUMMY: driver runs without hardware
# CONFIG_VHA_THEAD_LIGHT_FPGA_C910: driver runs with T-Head Light-FPGA hw platform using a device tree
# system configuration options
# CONFIG_VHA_SYS_MIRAGE: driver runs with Mirage system configuration file. It is set by default when CONFIG_HW_AX2 is set.
# CONFIG_VHA_SYS_AURA: driver runs with Aura system configuration file. It is set by default when CONFIG_HW_AX3 is set.
# CONFIG_VHA_SYS_VAGUS: driver runs with Vagus system configuration file. Applicable when CONFIG_HW_AX3 is set.
subdir-ccflags-y += -Wall -g
EXTRA_CFLAGS :=
# fail if target not specified
ifeq ($(CONFIG_VHA_THEAD_LIGHT_FPGA_C910),y)
EXTRA_CFLAGS += -DCONFIG_VHA_THEAD_LIGHT_FPGA_C910
export CONFIG_NAME=CONFIG_VHA_THEAD_LIGHT_FPGA_C910
export CONFIG_HW_AX3 := y
else ifeq ($(CONFIG_VHA_THEAD_LIGHT),y)
EXTRA_CFLAGS += -DCONFIG_VHA_THEAD_LIGHT
export CONFIG_NAME=CONFIG_VHA_THEAD_LIGHT
export CONFIG_HW_AX3 := y
export CONFIG_VHA_LO_PRI_SUBSEGS := y
else ifeq ($(CONFIG_VHA_DUMMY),y)
export CONFIG_NAME=CONFIG_VHA_DUMMY
export CONFIG_HW_AX3 := y
else
$(error no VHA platform specified. Try CONFIG_VHA_DUMMY=y or CONFIG_VHA_THEAD_XXX=y etc)
endif
#------------------------------------
# for internal use
#------------------------------------
ifeq ($(KERNELRELEASE),)
KDIR ?= $(LINUX_DIR)
PWD := $(shell pwd)
# Hardware layout
ifeq ($(CONFIG_HW_AX2)$(CONFIG_HW_AX3),)
$(info no HW layout specified. Defaulting to Mirage: CONFIG_HW_AX2=y. To build for Aura, please specify: CONFIG_HW_AX3=y)
export CONFIG_HW_AX2 := y
endif
ifeq ($(CONFIG_HW_AX2), y)
$(info Building Mirage target!)
ifeq ($(CONFIG_VHA_SCF), y)
$(error Safety cirtical features not supported by Mirage!)
endif
export CONFIG_VHA_MMU_MIRRORED_CTX ?= n
ifeq ($(CONFIG_VHA_MMU_MIRRORED_CTX),)
$(error Separate MMU contexts not supported by Mirage!)
endif
endif
ifeq ($(CONFIG_HW_AX3), y)
# Default OS target = 0
export CONFIG_TARGET_OSID ?= 0
$(info Building Aura/Vagus target for OS$(CONFIG_TARGET_OSID) !)
export CONFIG_VHA_MMU_MIRRORED_CTX ?= y
ifeq ($(CONFIG_VHA_MMU_MIRRORED_CTX),y)
$(info Building Aura/Vagus target with mirrored mmu contexts!)
else
$(info Building Aura/Vagus target with separate mmu contexts!)
endif
# System config
ifeq ($(CONFIG_VHA_SYS_AURA)$(CONFIG_VHA_SYS_VAGUS),)
# $(info no system config specified. Defaulting to Aura: CONFIG_VHA_SYS_AURA=y. To build for Vagus, please specify: CONFIG_VHA_SYS_VAGUS=y)
export CONFIG_VHA_SYS_AURA := y
endif
ifeq ($(CONFIG_VHA_SYS_VAGUS),)
ifeq ($(CONFIG_VHA_SCF), y)
# No safety critical features
$(error Safety cirtical features not supported by Aura!)
endif
else
# Safety critical features
ifeq ($(CONFIG_VHA_SCF), y)
$(info Building with Vagus safety cirtical features !)
endif
endif
endif
# kernel warning levels: as high as possible:
# W=12 and W=123 seem to warn about linux kernel headers, so use W=1.
KWARN := W=1
ifneq (,$(shell which sparse))
# C=1: use 'sparse' for extra warnings, if it is avail.
SPARSE := C=1
endif
all: info modules
@echo Build \"$(CONFIG_NAME)\" finished
info:
@echo
@echo =====================================
@echo ==== The build options are below ====
@echo =====================================
@echo CONFIG_NAME=$(CONFIG_NAME)
@echo BUILDROOT_DIR=$(BUILDROOT_DIR)
@echo LINUX_DIR=$(LINUX_DIR)
# @echo PATH_TO_SYSROOT=$(PATH_TO_SYSROOT)
@echo TOOLCHAIN_DIR=$(TOOLCHAIN_DIR)
@echo CROSS_COMPILE=$(CROSS_COMPILE)
@echo KDIR=$(KDIR)
@echo ARCH=$(ARCH)
@echo subdir-ccflags-y=$(subdir-ccflags-y)
@echo EXTRA_CFLAGS=$(EXTRA_CFLAGS)
@echo
@echo CONFIG_VHA=$(CONFIG_VHA)
@echo CONFIG_HW_AX3=$(CONFIG_HW_AX3)
@echo CONFIG_TARGET_OSID=$(CONFIG_TARGET_OSID)
@echo CONFIG_VHA_MMU_MIRRORED_CTX=$(CONFIG_VHA_MMU_MIRRORED_CTX)
@echo CONFIG_VHA_SYS_MIRAGE=$(CONFIG_VHA_SYS_MIRAGE)
@echo CONFIG_VHA_SYS_AURA=$(CONFIG_VHA_SYS_AURA)
@echo CONFIG_VHA_SYS_VAGUS=$(CONFIG_VHA_SYS_VAGUS)
@echo CONFIG_VHA_SCF=$(CONFIG_VHA_SCF)
@echo CONFIG_VHA_NEXEF=$(CONFIG_VHA_NEXEF)
@echo CONFIG_LOKI=$(CONFIG_LOKI)
@echo =====================================
@echo
modules: info
$(MAKE) -C $(KDIR) M=$(PWD) $(SPARSE) $(KWARN) EXTRA_CFLAGS="$(EXTRA_CFLAGS)" CROSS_COMPILE=$(CROSS_COMPILE)
clean:
if [ -d "$(KDIR)" ]; then \
$(MAKE) -C $(KDIR) M=$(PWD) clean; \
fi
check:
cd $(KDIR); scripts/checkpatch.pl -f `find $(PWD)/vha $(PWD)/include $(PWD)/img_mem -name "*\.[ch]"`
endif # KERNELRELEASE