• Masahiro Yamada's avatar
    modpost: fix -i (--ignore-errors) MAKEFLAGS detection · 91e6ee58
    Masahiro Yamada authored
    $(filter -i,$(MAKEFLAGS)) works only in limited use-cases.
    
    The representation of $(MAKEFLAGS) depends on various factors:
      - GNU Make version (version 3.8x or version 4.x)
      - The presence of other flags like -j
    
    In my experiments, $(MAKEFLAGS) is expanded as follows:
    
      * GNU Make 3.8x:
    
        * without -j option:
          --no-print-directory -Rri
    
        * with -j option:
          --no-print-directory -Rr --jobserver-fds=3,4 -j -i
    
      * GNU Make 4.x:
    
        * without -j option:
          irR --no-print-directory
    
        * with -j option:
          irR -j --jobserver-fds=3,4 --no-print-directory
    
    For GNU Make 4.x, the flags are grouped as 'irR', which does not work.
    
    For the single thread build with GNU Make 3.8x, the flags are grouped
    as '-Rri', which does not work either.
    
    To make it work for all cases, do likewise as commit 6f0fa58e
    ("kbuild: simplify silent build (-s) detection").
    
    BTW, since commit ff9b45c5 ("kbuild: modpost: read modules.order
    instead of $(MODVERDIR)/*.mod"), you also need to pass -k option to
    build final *.ko files. 'make -i -k' ignores compile errors in modules,
    and build as many remaining *.ko as possible.
    
    Please note this feature is kind of dangerous if other modules depend
    on the broken module because the generated modules will lack the correct
    module dependency or CRC. Honestly, I am not a big fan of it, but I am
    keeping this feature.
    
    Fixes: eed380f3 ("modpost: Optionally ignore secondary errors seen if a single module build fails")
    Cc: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    91e6ee58
Makefile.modpost 3.43 KB