# SPDX-License-Identifier: GPL-2.0-only ifneq ($(KERNELRELEASE),) include Kbuild else # PATH KROOT=$(shell expr match $(PWD) '\(.*/kernel-[0-9.]*/\)') ROOT_DIR=$(realpath $(KROOT)/..) OUT_DIR=$(PWD)/out srctree=$(KROOT) src=$(subst $(KROOT),,$(PWD)) ifeq ($(KDIR),) KDIR:=$(shell ls -d $(ROOT_DIR)/out_mgk_*/target/product/mgk_*/obj/KERNEL_OBJ/kernel-*/) endif $(info KDIR = "$(KDIR)") ## reference config file to fetch clang version CONFIG=$(KROOT)build.config.constants CLANG_VERSION=$(shell cat $(CONFIG) | grep CLANG_VERSION | cut -d'=' -f 2) COMMON_CONFIG=$(KROOT)build.config.common CLANG_PREBUILT_BIN=$(shell cat $(COMMON_CONFIG) | grep CLANG_PREBUILT_BIN | cut -d'=' -f 2) CLANG_PATH=$(ROOT_DIR)/$(subst $${CLANG_VERSION},$(CLANG_VERSION),$(CLANG_PREBUILT_BIN)) #$(info CLANG_VERSION = $(CLANG_VERSION)) #$(info CLANG_PREBUILT_BIN = $(CLANG_PREBUILT_BIN)) $(info CLANG_PATH = $(CLANG_PATH)) # Toolchain TARGET_ARCH=arm64 CROSS_COMPILE:=aarch64-linux-gnu- CROSS_COMPILE_COMPAT:=arm-linux-gnueabi- CC=$(CLANG_PATH)/clang LD=$(CLANG_PATH)/ld.lld AR=$(CLANG_PATH)/llvm-ar NM=$(CLANG_PATH)/llvm-nm STRIP=$(CLANG_PATH)/llvm-strip OBJCOPY=$(CLANG_PATH)/llvm-objcopy OBJDUMP=$(CLANG_PATH)/llvm-objdump READELF=$(CLANG_PATH)/llvm-readelf HOSTCC=$(CLANG_PATH)/clang HOSTAR=$(CLANG_PATH)/llvm-ar HOSTLD=$(CLANG_PATH)/ld.lld CFLAGS=-Wall LLVM=1 LLVM_IAS=1 # disable BTF as workaround for "pahole: invalid operation -J" issue EXT_CONFIG="\ CONFIG_DEBUG_INFO_BTF_MODULES= \ " ### DEFINE ### define kernel-make +$(MAKE) -C $(KDIR) \ ARCH=$(TARGET_ARCH) \ CROSS_COMPILE=$(CROSS_COMPILE) \ CROSS_COMPILE_COMPAT=$(CROSS_COMPILE_COMPAT) \ CFLAGS=$(CFLAGS) \ CC=$(CC) \ LD=$(LD) \ AR=$(AR) \ STRIP=$(STRIP) \ OBJCOPY=$(OBJCOPY) \ OBJDUMP=$(OBJDUMP) \ READELF=$(READELF) \ HOSTCC=$(HOSTCC) \ HOSTAR=$(HOSTAR) \ HOSTLD=$(HOSTLD) \ M=$(PWD) endef N := 1 define check-patch +git format-patch --stdout -$(N) HEAD | $(KROOT)/scripts/checkpatch.pl \ --show-types --max-line-length=100 \ --ignore=DT_SCHEMA_BINDING_PATCH,DT_SPLIT_BINDING_PATCH,GERRIT_CHANGE_ID,FILE_PATH_CHANGES,MEMORY_BARRIER,NEW_TYPEDEFS,VOLATILE,MISSING_SIGN_OFF,COMMIT_LOG_LONG_LINE endef .PHONY: all build clean check-env all: check-env build install list_ko build: $(kernel-make) modules $(EXT_CONFIG) install: build $(kernel-make) modules_install INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(OUT_DIR) clean: $(kernel-make) clean # clean *.lds find -name "*.lds" -exec rm {} \; # clean out rm -rf $(OUT_DIR) check-env: ifndef KDIR $(error KDIR (prebuilt kernel path) is undefined) endif $(info prebuilt kernel = $(KDIR)) checkpatch: $(check-patch) list_ko: install @echo "list of ko:" @find -name *.ko -exec ls -l {} \; endif