diff options
author | Alejandro Colomar <alx@kernel.org> | 2024-02-12 12:03:36 +0100 |
---|---|---|
committer | Alejandro Colomar <alx@kernel.org> | 2024-02-12 12:27:38 +0100 |
commit | b2975c3063d820b9ba2b91bffbdc3ecbfd97e300 (patch) | |
tree | f4beae5f7ee5359244e27bcbbbe753e7babe04c7 | |
parent | 24a5673291c96359134c6ac144bcf552fdefa2da (diff) | |
download | liba2i-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.mk | 21 |
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 |