• Sam Ravnborg's avatar
    kbuild: fix building external modules · db8c1a7b
    Sam Ravnborg authored
    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: default avatarSam Ravnborg <sam@ravnborg.org>
    db8c1a7b
Makefile.build 9.98 KB