[make][clang] Do not add unsupported warning flags
Currently, clang does not support the -Wno-nonnull-compare and -Wmaybe-uninitialized warning flags so this adds lots of unknown warning flag output for each compile job when not using GCC. This commit adds a makefile macro to check for supported warning flags and only adds them if the compiler actually supports them.
This commit is contained in:
committed by
Travis Geiselbrecht
parent
06a206f44e
commit
231f58903b
30
engine.mk
30
engine.mk
@@ -64,7 +64,7 @@ GLOBAL_INCLUDES := $(BUILDDIR) $(addsuffix /include,$(LKINC))
|
||||
GLOBAL_OPTFLAGS ?= $(ARCH_OPTFLAGS)
|
||||
GLOBAL_COMPILEFLAGS := -g -include $(CONFIGHEADER)
|
||||
GLOBAL_COMPILEFLAGS += -Wextra -Wall -Werror=return-type -Wshadow -Wdouble-promotion
|
||||
GLOBAL_COMPILEFLAGS += -Wno-multichar -Wno-unused-parameter -Wno-unused-function -Wno-unused-label -Wno-nonnull-compare
|
||||
GLOBAL_COMPILEFLAGS += -Wno-multichar -Wno-unused-parameter -Wno-unused-function -Wno-unused-label
|
||||
GLOBAL_COMPILEFLAGS += -fno-common
|
||||
GLOBAL_CFLAGS := --std=gnu11 -Werror-implicit-function-declaration -Wstrict-prototypes -Wwrite-strings
|
||||
GLOBAL_CPPFLAGS := --std=c++14 -fno-exceptions -fno-rtti -fno-threadsafe-statics
|
||||
@@ -181,6 +181,23 @@ ifndef TOOLCHAIN_PREFIX
|
||||
$(error TOOLCHAIN_PREFIX not set in the arch rules.mk)
|
||||
endif
|
||||
|
||||
# default to no ccache
|
||||
CCACHE ?=
|
||||
CC := $(CCACHE) $(TOOLCHAIN_PREFIX)gcc
|
||||
LD := $(TOOLCHAIN_PREFIX)ld
|
||||
OBJDUMP := $(TOOLCHAIN_PREFIX)objdump
|
||||
OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy
|
||||
CPPFILT := $(TOOLCHAIN_PREFIX)c++filt
|
||||
SIZE := $(TOOLCHAIN_PREFIX)size
|
||||
NM := $(TOOLCHAIN_PREFIX)nm
|
||||
STRIP := $(TOOLCHAIN_PREFIX)strip
|
||||
|
||||
# Now that CC is defined we can check if warning flags are supported and add
|
||||
# them to GLOBAL_COMPILEFLAGS if they are.
|
||||
ifeq ($(call is_warning_flag_supported,-Wnonnull-compare),yes)
|
||||
GLOBAL_COMPILEFLAGS += -Wno-nonnull-compare
|
||||
endif
|
||||
|
||||
$(info PROJECT = $(PROJECT))
|
||||
$(info PLATFORM = $(PLATFORM))
|
||||
$(info TARGET = $(TARGET))
|
||||
@@ -230,17 +247,6 @@ ifneq ($(DEFINES),)
|
||||
$(error DEFINES variable set, please move to GLOBAL_DEFINES: $(DEFINES))
|
||||
endif
|
||||
|
||||
# default to no ccache
|
||||
CCACHE ?=
|
||||
CC := $(CCACHE) $(TOOLCHAIN_PREFIX)gcc
|
||||
LD := $(TOOLCHAIN_PREFIX)ld
|
||||
OBJDUMP := $(TOOLCHAIN_PREFIX)objdump
|
||||
OBJCOPY := $(TOOLCHAIN_PREFIX)objcopy
|
||||
CPPFILT := $(TOOLCHAIN_PREFIX)c++filt
|
||||
SIZE := $(TOOLCHAIN_PREFIX)size
|
||||
NM := $(TOOLCHAIN_PREFIX)nm
|
||||
STRIP := $(TOOLCHAIN_PREFIX)strip
|
||||
|
||||
# try to have the compiler output colorized error messages if available
|
||||
export GCC_COLORS ?= 1
|
||||
|
||||
|
||||
5
external/lib/libm/rules.mk
vendored
5
external/lib/libm/rules.mk
vendored
@@ -2,7 +2,10 @@ LOCAL_DIR := $(GET_LOCAL_DIR)
|
||||
|
||||
MODULE := $(LOCAL_DIR)
|
||||
|
||||
MODULE_CFLAGS += -Wno-unused-variable -Wno-sign-compare -Wno-parentheses -Wno-double-promotion -Wno-maybe-uninitialized
|
||||
MODULE_CFLAGS += -Wno-unused-variable -Wno-sign-compare -Wno-parentheses -Wno-double-promotion
|
||||
ifeq ($(call is_warning_flag_supported,-Wmaybe-uninitialized),yes)
|
||||
MODULE_CFLAGS += -Wno-maybe-uninitialized
|
||||
endif
|
||||
MODULE_OPTIONS := float
|
||||
|
||||
MODULE_SRCS += \
|
||||
|
||||
@@ -58,3 +58,17 @@ define MAKECONFIGHEADER
|
||||
echo $3 >> $1.tmp; \
|
||||
$(call TESTANDREPLACEFILE,$1.tmp,$1)
|
||||
endef
|
||||
|
||||
check_compiler_flag = $(shell $(CC) -c -xc /dev/null -o /dev/null $(1) 2>/dev/null && echo yes || echo no)
|
||||
# Due to GCC's behaviour with regard to unknown warning flags this macro can
|
||||
# only be used to detect warning-enable options (-Wfoo) but not for warning
|
||||
# disable flags such as -Wno-foo.
|
||||
# https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#:~:text=When%20an%20unrecognized%20warning%20option%20is%20requested
|
||||
is_warning_flag_supported = $(strip \
|
||||
$(if $(findstring -Wno-,$(1)),$(error "Cannot use -Wno- flags here: $(1)"),) \
|
||||
$(if $(CC),,$(error "CC is not set, this macro cannot be used yet!")) \
|
||||
$(if $($(call MAKECVAR,$(1))), \
|
||||
$(info Using cached result for $(1): $($(call MAKECVAR,$(1)))), \
|
||||
$(eval $(call MAKECVAR,$(1)) := $(call check_compiler_flag,-Werror -fsyntax-only $(1))) \
|
||||
$(info Checking if $(1) is supported: $($(call MAKECVAR,$(1)))) \
|
||||
)$($(call MAKECVAR,$(1))))
|
||||
|
||||
Reference in New Issue
Block a user