# git rev-parse -q --verify 06513ddaf77b8f49ef8540c92d92c9ef0ad49426^{commit} 06513ddaf77b8f49ef8540c92d92c9ef0ad49426 already have revision, skipping fetch # git checkout -q -f -B kisskb 06513ddaf77b8f49ef8540c92d92c9ef0ad49426 # git clean -qxdf # < git log -1 # commit 06513ddaf77b8f49ef8540c92d92c9ef0ad49426 # Author: Masahiro Yamada # Date: Sun Nov 10 10:34:39 2024 +0900 # # kbuild: allow to start building external modules in any directory # # Unless an explicit O= option is provided, external module builds must # start from the kernel directory. # # This can be achieved by using the -C option: # # $ make -C /path/to/kernel M=/path/to/external/module # # This commit allows starting external module builds from any directory, # so you can also do the following: # # $ make -f /path/to/kernel/Makefile M=/path/to/external/module # # The key difference is that the -C option changes the working directory # and parses the Makefile located there, while the -f option only # specifies the Makefile to use. # # As shown in the examples in Documentation/kbuild/modules.rst, external # modules usually have a wrapper Makefile that allows you to build them # without specifying any make arguments. The Makefile typically contains # a rule as follows: # # KDIR ?= /path/to/kernel # default: # $(MAKE) -C $(KDIR) M=$(CURDIR) $(MAKECMDGOALS) # # The log will appear as follows: # # $ make # make -C /path/to/kernel M=/path/to/external/module # make[1]: Entering directory '/path/to/kernel' # make[2]: Entering directory '/path/to/external/module' # CC [M] helloworld.o # MODPOST Module.symvers # CC [M] helloworld.mod.o # CC [M] .module-common.o # LD [M] helloworld.ko # make[2]: Leaving directory '/path/to/external/module' # make[1]: Leaving directory '/path/to/kernel' # # This changes the working directory twice because the -C option first # switches to the kernel directory, and then Kbuild internally recurses # back to the external module directory. # # With this commit, the wrapper Makefile can directly include the kernel # Makefile: # # KDIR ?= /path/to/kernel # export KBUILD_EXTMOD := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) # include $(KDIR)/Makefile # # This avoids unnecessary sub-make invocations: # # $ make # CC [M] helloworld.o # MODPOST Module.symvers # CC [M] helloworld.mod.o # CC [M] .module-common.o # LD [M] helloworld.ko # # Signed-off-by: Masahiro Yamada # Reviewed-by: Nicolas Schier # < /opt/cross/kisskb/korg/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux-ld --version # < git log --format=%s --max-count=1 06513ddaf77b8f49ef8540c92d92c9ef0ad49426 # make -s -j 160 ARCH=arm64 O=/kisskb/build/kbuild_defconfig_arm64-gcc13 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux- defconfig # < make -s -j 160 ARCH=arm64 O=/kisskb/build/kbuild_defconfig_arm64-gcc13 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux- help # make -s -j 160 ARCH=arm64 O=/kisskb/build/kbuild_defconfig_arm64-gcc13 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux- olddefconfig # make -s -j 160 ARCH=arm64 O=/kisskb/build/kbuild_defconfig_arm64-gcc13 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-13.1.0-nolibc/aarch64-linux/bin/aarch64-linux- Completed OK # rm -rf /kisskb/build/kbuild_defconfig_arm64-gcc13 # Build took: 0:04:23.847902