• Masahiro Yamada's avatar
    kbuild: introduce ccflags-remove-y and asflags-remove-y · 15d5761a
    Masahiro Yamada authored
    CFLAGS_REMOVE_<file>.o filters out flags when compiling a particular
    object, but there is no convenient way to do that for every object in
    a directory.
    
    Add ccflags-remove-y and asflags-remove-y to make it easily.
    
    Use ccflags-remove-y to clean up some Makefiles.
    
    The add/remove order works as follows:
    
     [1] KBUILD_CFLAGS specifies compiler flags used globally
    
     [2] ccflags-y adds compiler flags for all objects in the
         current Makefile
    
     [3] ccflags-remove-y removes compiler flags for all objects in the
         current Makefile (New feature)
    
     [4] CFLAGS_<file> adds compiler flags per file.
    
     [5] CFLAGS_REMOVE_<file> removes compiler flags per file.
    
    Having [3] before [4] allows us to remove flags from most (but not all)
    objects in the current Makefile.
    
    For example, kernel/trace/Makefile removes $(CC_FLAGS_FTRACE)
    from all objects in the directory, then adds it back to
    trace_selftest_dynamic.o and CFLAGS_trace_kprobe_selftest.o
    
    The same applies to lib/livepatch/Makefile.
    
    Please note ccflags-remove-y has no effect to the sub-directories.
    In contrast, the previous notation got rid of compiler flags also from
    all the sub-directories.
    
    The following are not affected because they have no sub-directories:
    
      arch/arm/boot/compressed/
      arch/powerpc/xmon/
      arch/sh/
      kernel/trace/
    
    However, lib/ has several sub-directories.
    
    To keep the behavior, I added ccflags-remove-y to all Makefiles
    in subdirectories of lib/, except the following:
    
      lib/vdso/Makefile        - Kbuild does not descend into this Makefile
      lib/raid/test/Makefile   - This is not used for the kernel build
    
    I think commit 2464a609 ("ftrace: do not trace library functions")
    excluded too much. In the next commit, I will remove ccflags-remove-y
    from the sub-directories of lib/.
    Suggested-by: default avatarSami Tolvanen <samitolvanen@google.com>
    Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    Acked-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
    Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
    Acked-by: Brendan Higgins <brendanhiggins@google.com> (KUnit)
    Tested-by: default avatarAnders Roxell <anders.roxell@linaro.org>
    15d5761a
makefiles.rst 49.1 KB