lineage: build: kernel: Rework kernel module logic

The existing kernel module logic does not detect failed kernel module
builds.  This is because the module build logic is a long shell chain
that invokes make macros which are not intended to be used in this way.
The essense of the issue is that we get a shell chain that looks like:

	cmd && cmd && var=value; cmd && var=value; cmd;

The shell breaks this into three separate commands.  The first builds
the modules.  The other two are the macro invocations.  So the result
of the command is the result of the last macro invocation, which will
always succeed even if the modules fail to build.

The issue is made worse by the existing build rule conflating the built
kernel modules and the installed kernel modules.

Fix this by reducing the built kernel module command to a single shell
command and creating a separate target INSTALLED_KERNEL_MODULES.  Any
kernel module build failure will show up properly.  The commands for
INSTALLED_KERNEL_MODULES do not invoke any macros and should avoid the
issue described above.

Finally, this also removes the fake target no-external-modules and
unifies the install logic for in-tree and out-of-tree modules.

Change-Id: I3d13056e217e1e937c8c3a345032682ffc394bca
gugelfrei
Tom Marshall 7 years ago committed by Bruno Martins
parent b11d5736b0
commit f15c371403

@ -235,30 +235,13 @@ endif
KERNEL_CROSS_COMPILE := CROSS_COMPILE="$(ccache) $(KERNEL_TOOLCHAIN_PATH)"
ccache =
define mv-modules
mdpath=`find $(KERNEL_MODULES_OUT) -type f -name modules.order`;\
if [ "$$mdpath" != "" ];then\
mpath=`dirname $$mdpath`;\
ko=`find $$mpath/kernel -type f -name *.ko`;\
for i in $$ko; do $(KERNEL_TOOLCHAIN_PATH)strip --strip-unneeded $$i;\
mv $$i $(KERNEL_MODULES_OUT)/; done;\
fi
endef
define clean-module-folder
mdpath=`find $(KERNEL_MODULES_OUT) -type f -name modules.order`;\
if [ "$$mdpath" != "" ];then\
mpath=`dirname $$mdpath`; rm -rf $$mpath;\
fi
endef
ifeq ($(HOST_OS),darwin)
MAKE_FLAGS += C_INCLUDE_PATH=$(ANDROID_BUILD_TOP)/external/elfutils/libelf:/usr/local/opt/openssl/include
MAKE_FLAGS += LIBRARY_PATH=/usr/local/opt/openssl/lib
endif
ifeq ($(TARGET_KERNEL_MODULES),)
TARGET_KERNEL_MODULES := no-external-modules
TARGET_KERNEL_MODULES := INSTALLED_KERNEL_MODULES
endif
$(KERNEL_OUT_STAMP):
@ -290,24 +273,28 @@ $(KERNEL_CONFIG): $(KERNEL_OUT_STAMP) $(KERNEL_DEFCONFIG_SRC) $(KERNEL_ADDITIONA
TARGET_KERNEL_BINARIES: $(KERNEL_OUT_STAMP) $(KERNEL_CONFIG) $(KERNEL_HEADERS_INSTALL_STAMP)
@echo "Building Kernel"
$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(BOARD_KERNEL_IMAGE_NAME)
$(hide) if grep -q 'CONFIG_OF=y' $(KERNEL_CONFIG) ; \
then \
echo "Building DTBs" ; \
$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) dtbs ; \
else \
echo "DTBs not enabled" ; \
fi ;
$(hide) if grep -q 'CONFIG_MODULES=y' $(KERNEL_CONFIG) ; \
then \
echo "Building Kernel Modules" ; \
$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) modules && \
$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) INSTALL_MOD_PATH=../../$(KERNEL_MODULES_INSTALL) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) modules_install && \
$(mv-modules) && \
$(clean-module-folder) ; \
else \
echo "Kernel Modules not enabled" ; \
fi ;
$(hide) if grep -q '^CONFIG_OF=y' $(KERNEL_CONFIG); then \
echo "Building DTBs"; \
$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) dtbs; \
fi
$(hide) if grep -q '^CONFIG_MODULES=y' $(KERNEL_CONFIG); then \
echo "Building Kernel Modules"; \
$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) modules; \
fi
.PHONY: INSTALLED_KERNEL_MODULES
INSTALLED_KERNEL_MODULES:
$(hide) if grep -q '^CONFIG_MODULES=y' $(KERNEL_CONFIG); then \
echo "Installing Kernel Modules"; \
$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) INSTALL_MOD_PATH=../../$(KERNEL_MODULES_INSTALL) modules_install && \
mofile=$$(find $(KERNEL_MODULES_OUT) -type f -name modules.order) && \
mpath=$$(dirname $$mofile) && \
for f in $$(find $$mpath/kernel -type f -name '*.ko'); do \
$(KERNEL_TOOLCHAIN_PATH)strip --strip-unneeded $$f; \
mv $$f $(KERNEL_MODULES_OUT); \
done && \
rm -rf $$mpath; \
fi
$(TARGET_KERNEL_MODULES): TARGET_KERNEL_BINARIES

Loading…
Cancel
Save