Skip to content

Commit

Permalink
kbuild: fix building external modules
Browse files Browse the repository at this point in the history
kbuild failed to locate Makefile for external modules.
This brought to my attention how the variables for directories
have different values in different usage scenarios.

Different kbuild usage scenarios:
make       - plain make in same directory where kernel source lives
make O=    - kbuild is told to store output files in another directory
make M=    - building an external module
make O= M= - building an external module with kernel output seperate from src

Value assigned to the different variables:

           |$(src)          |$(obj) |$(srctree)        |$(objtree)
make       |reldir to k src |as src |abs path to k src |abs path to k src
make O=    |reldir to k src |as src |abs path to k src |abs path to output dir
make M=    |abs path to src |as src |abs path to k src |abs path to k src
make O= M= |abs path to src |as src |abs path to k src |abs path to k output

path to kbuild file:

make       | $(srctree)/$(src), $(src)
make O=    | $(srctree)/$(src)
make M=    | $(src)
make O= M= | $(src)

From the table above it can be seen that the only good way to find the
home directory of the kbuild file is to locate the one of the two variants
that is an absolute path. If $(src) is an absolute path (starts with /)
then use it, otherwise prefix $(src) with $(srctree).

Signed-off-by: Sam Ravnborg <[email protected]>
  • Loading branch information
Sam Ravnborg committed Jul 27, 2005
1 parent 72ba47c commit db8c1a7
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
4 changes: 2 additions & 2 deletions scripts/Makefile.build
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ __build:
-include .config

# The filename Kbuild has precedence over Makefile
include $(if $(wildcard $(srctree)/$(src)/Kbuild), \
$(srctree)/$(src)/Kbuild, $(srctree)/$(src)/Makefile)
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)

include scripts/Kbuild.include
include scripts/Makefile.lib
Expand Down
4 changes: 2 additions & 2 deletions scripts/Makefile.clean
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ __clean:
clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj

# The filename Kbuild has precedence over Makefile
include $(if $(wildcard $(srctree)/$(src)/Kbuild), \
$(srctree)/$(src)/Kbuild, $(srctree)/$(src)/Makefile)
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)

# Figure out what we need to build from the various variables
# ==========================================================================
Expand Down

0 comments on commit db8c1a7

Please sign in to comment.