mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-06 03:45:24 -04:00
In order to keep compatability with current Moto products, GKI products should use qcom dlkm files for GKI compile. Including original qcom dlkm file will also easily sync with Qcom's changes. Change-Id: I2373003e8149a2cfb9a2fbb4bf4784297d30d7e1 Reviewed-on: https://gerrit.mot.com/1709604 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Reviewed-by: Jianqi Yang <yangj@motorola.com> Tested-by: Jira Key Submit-Approved: Jira Key
182 lines
7.6 KiB
Makefile
182 lines
7.6 KiB
Makefile
ifneq (,$(findstring gki,$(KERNEL_DEFCONFIG)))
|
|
#GKI product should use Qcom latest dlkm compile file
|
|
include device/qcom/common/dlkm/AndroidKernelModule.mk
|
|
else
|
|
DISABLE_THIS_DLKM := $(strip $(TARGET_KERNEL_DLKM_DISABLE))
|
|
|
|
ifeq ($(DISABLE_THIS_DLKM),true)
|
|
ifneq (,$(filter $(LOCAL_MODULE),$(TARGET_KERNEL_DLKM_OVERRIDE)))
|
|
DISABLE_THIS_DLKM = false
|
|
else
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(DISABLE_THIS_DLKM),true)
|
|
$(warning DLKM '$(LOCAL_MODULE)' disabled for target)
|
|
else
|
|
|
|
# Assign external kernel modules to the DLKM class
|
|
LOCAL_MODULE_CLASS := DLKM
|
|
|
|
# Set the default install path to vendor/lib/modules
|
|
LOCAL_MODULE_PATH := $(strip $(LOCAL_MODULE_PATH))
|
|
ifeq ($(LOCAL_MODULE_PATH),)
|
|
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/modules
|
|
endif
|
|
|
|
# Set the default Kbuild file path to LOCAL_PATH
|
|
KBUILD_FILE := $(strip $(KBUILD_FILE))
|
|
ifeq ($(KBUILD_FILE),)
|
|
KBUILD_FILE := $(LOCAL_PATH)/Kbuild
|
|
endif
|
|
|
|
# Get rid of any whitespace
|
|
LOCAL_MODULE_KBUILD_NAME := $(strip $(LOCAL_MODULE_KBUILD_NAME))
|
|
|
|
include $(BUILD_SYSTEM)/base_rules.mk
|
|
|
|
|
|
# The kernel build system doesn't support parallel kernel module builds
|
|
# that share the same output directory. Thus, in order to build multiple
|
|
# kernel modules that reside in a single directory (and therefore have
|
|
# the same output directory), there must be just one invocation of the
|
|
# kernel build system that builds all the modules of a given directory.
|
|
#
|
|
# Therefore, all kernel modules must depend on the same, unique target
|
|
# that invokes the kernel build system and builds all of the modules
|
|
# for the directory. The $(KBUILD_TARGET) target serves this purpose.
|
|
# To ensure the value of KBUILD_TARGET is unique, it is essentially set
|
|
# to the path of the source directory, i.e. LOCAL_PATH.
|
|
#
|
|
# Since KBUILD_TARGET is used as a target and a variable name, it should
|
|
# not contain characters other than letters, numbers, and underscores.
|
|
KBUILD_TARGET := $(strip \
|
|
$(subst .,_, \
|
|
$(subst -,_, \
|
|
$(subst :,_, \
|
|
$(subst /,_,$(LOCAL_PATH))))))
|
|
|
|
# Intermediate directory where the kernel modules are created
|
|
# by the kernel build system. Ideally this would be the same
|
|
# directory as LOCAL_BUILT_MODULE, but because we're using
|
|
# relative paths for both O= and M=, we don't have much choice
|
|
KBUILD_OUT_DIR := $(TARGET_OUT_INTERMEDIATES)/$(LOCAL_PATH)
|
|
|
|
# Path to the intermediate location where the kernel build
|
|
# system creates the kernel module.
|
|
KBUILD_MODULE := $(KBUILD_OUT_DIR)/$(LOCAL_MODULE)
|
|
|
|
# Since we only invoke the kernel build system once per directory,
|
|
# each kernel module must depend on the same target.
|
|
$(KBUILD_MODULE): kbuild_out := $(KBUILD_OUT_DIR)/$(LOCAL_MODULE_KBUILD_NAME)
|
|
$(KBUILD_MODULE): $(KBUILD_TARGET)
|
|
ifneq "$(LOCAL_MODULE_KBUILD_NAME)" ""
|
|
mv -f $(kbuild_out) $@
|
|
endif
|
|
|
|
|
|
# To ensure KERNEL_OUT and TARGET_PREBUILT_INT_KERNEL are defined,
|
|
# kernel/AndroidKernel.mk (kernel_definitions.mk) must be included. While m and regular
|
|
# make builds will include kernel/AndroidKernel.mk, mm and mmm builds
|
|
# do not. Therefore, we need to explicitly include kernel/AndroidKernel.mk (kernel_definitions.mk).
|
|
# It is safe to include it more than once because the entire file is
|
|
# guarded by "ifeq ($(TARGET_PREBUILT_KERNEL),) ... endif".
|
|
# If AndroidKernel.mk is not found, fall back to use the kernel_definitions.mk
|
|
ifneq ($(wildcard $(TARGET_KERNEL_SOURCE)/AndroidKernel.mk),)
|
|
TARGET_KERNEL_PATH := $(TARGET_KERNEL_SOURCE)/AndroidKernel.mk
|
|
else
|
|
TARGET_KERNEL_PATH := device/qcom/kernelscripts/kernel_definitions.mk
|
|
endif
|
|
include $(TARGET_KERNEL_PATH)
|
|
|
|
# Simply copy the kernel module from where the kernel build system
|
|
# created it to the location where the Android build system expects it.
|
|
# If LOCAL_MODULE_DEBUG_ENABLE is set, strip debug symbols. So that,
|
|
# the final images generated by ABS will have the stripped version of
|
|
# the modules
|
|
ifeq ($(TARGET_KERNEL_VERSION),3.18)
|
|
MODULE_SIGN_FILE := perl ./$(TARGET_KERNEL_SOURCE)/scripts/sign-file
|
|
MODSECKEY := $(KERNEL_OUT)/signing_key.priv
|
|
MODPUBKEY := $(KERNEL_OUT)/signing_key.x509
|
|
else
|
|
MODULE_SIGN_FILE := $(KERNEL_OUT)/scripts/sign-file
|
|
MODSECKEY := $(KERNEL_OUT)/certs/signing_key.pem
|
|
MODPUBKEY := $(KERNEL_OUT)/certs/signing_key.x509
|
|
endif
|
|
|
|
$(LOCAL_BUILT_MODULE): $(KBUILD_MODULE) | $(ACP)
|
|
ifneq "$(LOCAL_MODULE_DEBUG_ENABLE)" ""
|
|
mkdir -p $(dir $@)
|
|
cp $< $<.unstripped
|
|
$(TARGET_STRIP) --strip-debug $<
|
|
cp $< $<.stripped
|
|
endif
|
|
@sh -c "\
|
|
KMOD_SIG_ALL=`cat $(KERNEL_OUT)/.config | grep CONFIG_MODULE_SIG_ALL | cut -d'=' -f2`; \
|
|
KMOD_SIG_HASH=`cat $(KERNEL_OUT)/.config | grep CONFIG_MODULE_SIG_HASH | cut -d'=' -f2 | sed 's/\"//g'`; \
|
|
if [ \"\$$KMOD_SIG_ALL\" = \"y\" ] && [ -n \"\$$KMOD_SIG_HASH\" ]; then \
|
|
echo \"Signing kernel module: \" `basename $<`; \
|
|
cp $< $<.unsigned; \
|
|
$(MODULE_SIGN_FILE) \$$KMOD_SIG_HASH $(MODSECKEY) $(MODPUBKEY) $<; \
|
|
fi; \
|
|
"
|
|
$(transform-prebuilt-to-target)
|
|
|
|
# This should really be cleared in build/core/clear-vars.mk, but for
|
|
# the time being, we need to clear it ourselves
|
|
LOCAL_MODULE_KBUILD_NAME :=
|
|
LOCAL_MODULE_DEBUG_ENABLE :=
|
|
|
|
# Ensure the kernel module created by the kernel build system, as
|
|
# well as all the other intermediate files, are removed during a clean.
|
|
$(cleantarget): PRIVATE_CLEAN_FILES := $(PRIVATE_CLEAN_FILES) $(KBUILD_OUT_DIR)
|
|
|
|
|
|
# Since this file will be included more than once for directories
|
|
# with more than one kernel module, the shared KBUILD_TARGET rule should
|
|
# only be defined once to avoid "overriding commands ..." warnings.
|
|
ifndef $(KBUILD_TARGET)_RULE
|
|
$(KBUILD_TARGET)_RULE := 1
|
|
|
|
# Kernel modules have to be built after:
|
|
# * the kernel config has been created
|
|
# * host executables, like scripts/basic/fixdep, have been built
|
|
# (otherwise parallel invocations of the kernel build system will
|
|
# fail as they all try to compile these executables at the same time)
|
|
# * a full kernel build (to make module versioning work)
|
|
#
|
|
# For these reasons, kernel modules are dependent on
|
|
# TARGET_PREBUILT_INT_KERNEL which will ensure all of the above.
|
|
#
|
|
# NOTE: Due to a bug in the kernel build system when using a Kbuild file
|
|
# and relative paths for both O= and M=, the Kbuild file must
|
|
# be copied to the output directory.
|
|
#
|
|
# NOTE: The following paths are equivalent:
|
|
# $(KBUILD_OUT_DIR)
|
|
# $(KERNEL_OUT)/../$(LOCAL_PATH)
|
|
.PHONY: $(KBUILD_TARGET)
|
|
$(KBUILD_TARGET): local_path := $(LOCAL_PATH)
|
|
$(KBUILD_TARGET): kbuild_out_dir := $(KBUILD_OUT_DIR)
|
|
$(KBUILD_TARGET): kbuild_options := $(KBUILD_OPTIONS)
|
|
ifneq ($(USE_CLANG_FOR_MODULES),)
|
|
$(KBUILD_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
|
@mkdir -p $(kbuild_out_dir)
|
|
$(hide) cp -f $(local_path)/Kbuild $(kbuild_out_dir)/Kbuild
|
|
$(MAKE) -C $(TARGET_KERNEL_SOURCE) M=$(KERNEL_TO_BUILD_ROOT_OFFSET)$(local_path) O=$(KERNEL_TO_BUILD_ROOT_OFFSET)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS) modules $(kbuild_options) ANDROID_BUILD_TOP=$$(pwd) TOP=$$(pwd)
|
|
else
|
|
$(KBUILD_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
|
@mkdir -p $(kbuild_out_dir)
|
|
$(hide) cp -f $(local_path)/Kbuild $(kbuild_out_dir)/Kbuild
|
|
$(MAKE) -C $(TARGET_KERNEL_SOURCE) M=$(KERNEL_TO_BUILD_ROOT_OFFSET)$(local_path) O=$(KERNEL_TO_BUILD_ROOT_OFFSET)$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_CFLAGS) modules $(kbuild_options) TOP=$$(pwd)
|
|
endif
|
|
|
|
# Once the KBUILD_OPTIONS variable has been used for the target
|
|
# that's specific to the LOCAL_PATH, clear it. If this isn't done,
|
|
# then every kernel module would need to explicitly set KBUILD_OPTIONS,
|
|
# or the variable would have to be cleared in 'include $(CLEAR_VARS)'
|
|
# which would require a change to build/core.
|
|
KBUILD_OPTIONS :=
|
|
endif
|
|
endif
|
|
endif #(findstring gki,$(KERNEL_DEFCONFIG))
|