• Masahiro Yamada's avatar
    kbuild: refactor scripts/Makefile.extrawarn · 64a91907
    Masahiro Yamada authored
    Instead of the warning-[123] magic, let's accumulate compiler options
    to KBUILD_CFLAGS directly as the top Makefile does. I think this makes
    it easier to understand what is going on in this file.
    
    This commit slightly changes the behavior, I think all of which are OK.
    
    [1] Currently, cc-option calls are needlessly evaluated. For example,
          warning-3 += $(call cc-option, -Wpacked-bitfield-compat)
        needs evaluating only when W=3, but it is actually evaluated for
        W=1, W=2 as well. With this commit, only relevant cc-option calls
        will be evaluated. This is a slight optimization.
    
    [2] Currently, unsupported level like W=4 is checked by:
          $(error W=$(KBUILD_ENABLE_EXTRA_GCC_CHECKS) is unknown)
        This will no longer be checked, but I do not think it is a big
        deal.
    
    [3] Currently, 4 Clang warnings (Winitializer-overrides, Wformat,
        Wsign-compare, Wformat-zero-length) are shown by any of W=1, W=2,
        and W=3. With this commit, they will be warned only by W=1. I
        think this is a more correct behavior since each warning belongs
        to only one group.
    
    For understanding this commit correctly:
    
    We have 3 warning groups, W=1, W=2, and W=3. You may think W=3 has a
    higher level than W=1, but they are actually independent. If you like,
    you can combine them like W=13. To enable all the warnings, you can
    pass W=123. It is shown by 'make help', but not noticed much. Since we
    support W= combination, there should not exist intersection among the
    three groups. If we enable Winitializer-overrides for W=1, we do not
    need to for W=2 or W=3. This is the reason why I think the change [3]
    makes sense.
    
    The documentation says -Winitializer-overrides is enabled by default.
    (https://clang.llvm.org/docs/DiagnosticsReference.html#winitializer-overrides)
    We negate it by passing -Wno-initializer-overrides for the normal
    build, but we do not do that for W=1. This means, W=1 effectively
    enables -Winitializer-overrides by the clang's default. The same for
    the other three.
    
    Add comments in case people are confused with the code.
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Reviewed-by: default avatarNathan Chancellor <natechancellor@gmail.com>
    Tested-by: default avatarSedat Dilek <sedat.dilek@gmail.com>
    Acked-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Acked-by: default avatarMiguel Ojeda <miguel.ojeda.sandonis@gmail.com>
    64a91907
Makefile.extrawarn 2.45 KB