summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2024-02-12 12:03:36 +0100
committerAlejandro Colomar <alx@kernel.org>2024-02-12 12:27:38 +0100
commitb2975c3063d820b9ba2b91bffbdc3ecbfd97e300 (patch)
treef4beae5f7ee5359244e27bcbbbe753e7babe04c7
parent24a5673291c96359134c6ac144bcf552fdefa2da (diff)
downloadliba2i-b2975c3063d820b9ba2b91bffbdc3ecbfd97e300.tar.gz
share/mk/configure/cc.mk: $CFLAGS: Use -ffat-lto-objects
And use -flto only if -ffat-lto-objects is available. Clang <= 17 doesn't have -ffat-lto-objects, and it doesn't behave well with -flto in our build system. Filter-out both from CLANGCFLAGS. Suggested-by: Sam James <sam@gentoo.org> Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rw-r--r--share/mk/configure/cc.mk21
1 files changed, 19 insertions, 2 deletions
diff --git a/share/mk/configure/cc.mk b/share/mk/configure/cc.mk
index cf4237b..d0a584e 100644
--- a/share/mk/configure/cc.mk
+++ b/share/mk/configure/cc.mk
@@ -26,8 +26,18 @@ CC_VENDOR := \
)
+CC_HAS_FFAT_LTO_OBJECTS := \
+ $(shell \
+ if $(ECHO) 'int main(void) {}' \
+ | $(CC) -Werror -ffat-lto-objects -x c -o /dev/null - $(HIDE_ERR); then \
+ $(ECHO) yes; \
+ else \
+ $(ECHO) no; \
+ fi \
+ )
+
+
GCC_CFLAGS := -fanalyzer
-GCC_CFLAGS += -flto
CLANG_CFLAGS := -Weverything
@@ -56,16 +66,23 @@ DEFAULT_CFLAGS += -Wno-nullability-completeness
DEFAULT_CFLAGS += -Wno-unknown-attributes
DEFAULT_CFLAGS += -Wno-unknown-pragmas
DEFAULT_CFLAGS += -Wno-unused-command-line-argument
+
ifeq ($(CC_VENDOR),gcc)
DEFAULT_CFLAGS += $(GCC_CFLAGS)
else ifeq ($(CC_VENDOR),clang)
DEFAULT_CFLAGS += $(CLANG_CFLAGS)
endif
+
+ifeq ($(CC_HAS_FFAT_LTO_OBJECTS),yes)
+DEFAULT_CFLAGS += -flto
+DEFAULT_CFLAGS += -ffat-lto-objects
+endif
+
EXTRA_CFLAGS :=
export CFLAGS := $(DEFAULT_CFLAGS) $(EXTRA_CFLAGS)
-CLANGCFLAGS := $(filter-out $(GCC_CFLAGS), $(CFLAGS))
+CLANGCFLAGS := $(filter-out $(GCC_CFLAGS) -flto -ffat-lto-objects, $(CFLAGS))
endif # include guard