From 741c2118488c4bd2ff98d1274fabc0fce42f9161 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 19 Jul 2022 12:38:10 -0700 Subject: [PATCH] configure: Add conditional flags for forced pch w/ clang. --- configure.ac | 4 +- include/ircd/Makefile.am | 3 +- ircd/Makefile.am | 98 ++++++++++++++++++++++++---------------- matrix/Makefile.am | 21 +++++++-- modules/Makefile.am | 10 +++- 5 files changed, 86 insertions(+), 50 deletions(-) diff --git a/configure.ac b/configure.ac index c7fb39945..5f0d1cfae 100644 --- a/configure.ac +++ b/configure.ac @@ -469,6 +469,7 @@ AC_ARG_ENABLE(pch, RB_HELP_STRING([--disable-pch], [Disable precompiled header g ]) AM_CONDITIONAL([BUILD_PCH], [[[[ "$build_pch" = "yes" ]]]]) +AM_CONDITIONAL([CLANG_PCH], [[[[ "$build_pch" = "yes" ]] && [[ $CXX = clang* ]]]]) dnl dnl Generic Mode compilation @@ -2693,7 +2694,6 @@ AC_SUBST(ASIO_UNIT_CPPFLAGS) ASIO_UNIT_CPPFLAGS+=" $BOOST_CPPFLAGS" ASIO_UNIT_CPPFLAGS+=" $SSL_CPPFLAGS" ASIO_UNIT_CPPFLAGS+=" $CRYPTO_CPPFLAGS" -ASIO_UNIT_CPPFLAGS+=" -include ircd/asio.h" dnl Units defining spirit grammars may benefit from special compiler flags due dnl to their various complexities. The ./configure may have generated flags @@ -2701,10 +2701,8 @@ dnl in $GRAMMAR_UNIT_CXXFLAGS to improve compile time and reduce debug symbol. AC_SUBST(SPIRIT_UNIT_CPPFLAGS) SPIRIT_UNIT_CPPFLAGS+=" $ICU_CPPFLAGS" SPIRIT_UNIT_CPPFLAGS+=" $BOOST_CPPFLAGS" -SPIRIT_UNIT_CPPFLAGS+=" -include ircd/spirit.h" AC_SUBST(SPIRIT_UNIT_CXXFLAGS) - AM_COND_IF([GCC], [ SPIRIT_UNIT_CXXFLAGS+=" -fno-var-tracking" diff --git a/include/ircd/Makefile.am b/include/ircd/Makefile.am index 1540bd85f..f9951c0b4 100644 --- a/include/ircd/Makefile.am +++ b/include/ircd/Makefile.am @@ -7,7 +7,8 @@ AM_CXXFLAGS =# AM_CXXFLAGS += -x c++-header if CLANG11 -AM_CXXFLAGS += -fpch-instantiate-templates +#TODO: XXX +#AM_CXXFLAGS += -fpch-instantiate-templates endif if GCC diff --git a/ircd/Makefile.am b/ircd/Makefile.am index ebf0e0c4d..b8515c440 100644 --- a/ircd/Makefile.am +++ b/ircd/Makefile.am @@ -7,7 +7,6 @@ DEFS += -DIRCD_UNIT AM_CPPFLAGS =# AM_CPPFLAGS += -I$(top_srcdir)/include -AM_CPPFLAGS += -include ircd/ircd.pic.h AM_CXXFLAGS =# AM_CXXFLAGS += -ftls-model=initial-exec @@ -31,9 +30,17 @@ AM_LDFLAGS += -Wl,-z,nodlopen AM_LDFLAGS += -Wl,-z,lazy AM_LDFLAGS += $(PLATFORM_LDFLAGS) +if CLANG_PCH +AM_CPPFLAGS += -include-pch $(top_srcdir)/include/ircd/ircd.pic.h.gch +else +AM_CPPFLAGS += -include ircd/ircd.pic.h +endif + if CLANG +if !CLANG_PCH AM_CXXFLAGS += -fno-c++-static-destructors endif +endif if LTO AM_CXXFLAGS += -flto=thin @@ -266,6 +273,8 @@ ROCKSDB_SRC_CPPFLAGS += -isystem $(top_srcdir)/deps/rocksdb/include ROCKSDB_SRC_CPPFLAGS += -isystem $(top_srcdir)/deps/rocksdb GPT_FP_CXXFLAGS =# +#TODO: XXX +if !CLANG_PCH GPT_FP_CXXFLAGS += -fno-math-errno GPT_FP_CXXFLAGS += -fno-trapping-math GPT_FP_CXXFLAGS += -ffinite-math-only @@ -277,42 +286,51 @@ if CLANG GPT_FP_CXXFLAGS += -fdenormal-fp-math=positive-zero GPT_FP_CXXFLAGS += -ffp-model=fast endif +endif -client.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} +if CLANG_PCH +ASIO_UNIT_CPPFLAGS += -include-pch $(top_srcdir)/include/ircd/asio.h.gch +SPIRIT_UNIT_CPPFLAGS += -include-pch $(top_srcdir)/include/ircd/spirit.h.gch +else +ASIO_UNIT_CPPFLAGS += -include ircd/asio.h +SPIRIT_UNIT_CPPFLAGS += -include ircd/spirit.h +endif + +client.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} ctx_x86_64.lo: AM_CPPFLAGS := -I$(top_srcdir)/include -ctx.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -ctx_ole.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -ctx_eh.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -db.lo: AM_CPPFLAGS := ${ROCKSDB_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -db_allocator.lo: AM_CPPFLAGS := ${ROCKSDB_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -db_database.lo: AM_CPPFLAGS := ${ROCKSDB_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -db_env.lo: AM_CPPFLAGS := ${ROCKSDB_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -db_fixes.lo: AM_CPPFLAGS := ${ROCKSDB_UNIT_CPPFLAGS} ${AM_CPPFLAGS} +ctx.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +ctx_ole.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +ctx_eh.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +db.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ROCKSDB_UNIT_CPPFLAGS} +db_allocator.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ROCKSDB_UNIT_CPPFLAGS} +db_database.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ROCKSDB_UNIT_CPPFLAGS} +db_env.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ROCKSDB_UNIT_CPPFLAGS} +db_fixes.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ROCKSDB_UNIT_CPPFLAGS} db_fixes.lo: AM_CPPFLAGS += ${ROCKSDB_SRC_CPPFLAGS} -db_port.lo: AM_CPPFLAGS := ${ROCKSDB_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -exception.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -exec.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -fmt.lo: AM_CPPFLAGS := ${SPIRIT_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -fmt.lo: AM_CXXFLAGS := ${SPIRIT_UNIT_CXXFLAGS} ${AM_CXXFLAGS} -fs.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -fs_path.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} +db_port.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ROCKSDB_UNIT_CPPFLAGS} +exception.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +exec.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +fmt.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${SPIRIT_UNIT_CPPFLAGS} +fmt.lo: AM_CXXFLAGS := ${AM_CXXFLAGS} ${SPIRIT_UNIT_CXXFLAGS} +fs.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +fs_path.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} if AIO -fs_aio.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} +fs_aio.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} endif if IOU -fs_iou.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} +fs_iou.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} endif gpt_cpu.lo: AM_CXXFLAGS := ${AM_CXXFLAGS} ${GPT_FP_CXXFLAGS} -http.lo: AM_CPPFLAGS := ${SPIRIT_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -http.lo: AM_CXXFLAGS := ${SPIRIT_UNIT_CXXFLAGS} ${AM_CXXFLAGS} -ios.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} +http.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${SPIRIT_UNIT_CPPFLAGS} +http.lo: AM_CXXFLAGS := ${AM_CXXFLAGS} ${SPIRIT_UNIT_CXXFLAGS} +ios.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} if JS js.lo: AM_CPPFLAGS := @JS_CPPFLAGS@ ${AM_CPPFLAGS} endif -json.lo: AM_CPPFLAGS := ${SPIRIT_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -json.lo: AM_CXXFLAGS := ${SPIRIT_UNIT_CXXFLAGS} ${AM_CXXFLAGS} -lex_cast.lo: AM_CPPFLAGS := ${SPIRIT_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -lex_cast.lo: AM_CXXFLAGS := ${SPIRIT_UNIT_CXXFLAGS} ${AM_CXXFLAGS} +json.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${SPIRIT_UNIT_CPPFLAGS} +json.lo: AM_CXXFLAGS := ${AM_CXXFLAGS} ${SPIRIT_UNIT_CXXFLAGS} +lex_cast.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${SPIRIT_UNIT_CPPFLAGS} +lex_cast.lo: AM_CXXFLAGS := ${AM_CXXFLAGS} ${SPIRIT_UNIT_CXXFLAGS} if OPENCL cl.lo: AM_CPPFLAGS := @OPENCL_CPPFLAGS@ ${AM_CPPFLAGS} endif @@ -324,27 +342,27 @@ endif if IMAGEMAGICK magick.lo: AM_CPPFLAGS := @IMAGEMAGICK_CPPFLAGS@ ${AM_CPPFLAGS} endif IMAGEMAGICK -mods.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -net.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -net_addrs.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -net_dns.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -net_dns_resolver.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -net_listener.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -net_listener_udp.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} +mods.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +net.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +net_addrs.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +net_dns.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +net_dns_resolver.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +net_listener.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} +net_listener_udp.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} openssl.lo: AM_CPPFLAGS := @SSL_CPPFLAGS@ @CRYPTO_CPPFLAGS@ ${AM_CPPFLAGS} -parse.lo: AM_CPPFLAGS := ${SPIRIT_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -parse.lo: AM_CXXFLAGS := ${SPIRIT_UNIT_CXXFLAGS} ${AM_CXXFLAGS} +parse.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${SPIRIT_UNIT_CPPFLAGS} +parse.lo: AM_CXXFLAGS := ${AM_CXXFLAGS} ${SPIRIT_UNIT_CXXFLAGS} if PBC pbc.lo: AM_CPPFLAGS := @PBC_CPPFLAGS@ ${AM_CPPFLAGS} endif if PNG png.o: AM_CPPFLAGS := @PNG_CPPFLAGS@ ${AM_CPPFLAGS} endif PNG -rfc1459.lo: AM_CPPFLAGS := ${SPIRIT_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -rfc1459.lo: AM_CXXFLAGS := ${SPIRIT_UNIT_CXXFLAGS} ${AM_CXXFLAGS} -rfc3986.lo: AM_CPPFLAGS := ${SPIRIT_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -rfc3986.lo: AM_CXXFLAGS := ${SPIRIT_UNIT_CXXFLAGS} ${AM_CXXFLAGS} -server.lo: AM_CPPFLAGS := ${ASIO_UNIT_CPPFLAGS} ${AM_CPPFLAGS} +rfc1459.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${SPIRIT_UNIT_CPPFLAGS} +rfc1459.lo: AM_CXXFLAGS := ${AM_CXXFLAGS} ${SPIRIT_UNIT_CXXFLAGS} +rfc3986.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${SPIRIT_UNIT_CPPFLAGS} +rfc3986.lo: AM_CXXFLAGS := ${AM_CXXFLAGS} ${SPIRIT_UNIT_CXXFLAGS} +server.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS} if SODIUM sodium.lo: AM_CPPFLAGS := @SODIUM_CPPFLAGS@ ${AM_CPPFLAGS} endif diff --git a/matrix/Makefile.am b/matrix/Makefile.am index 0e5f78b5a..c42a5f469 100644 --- a/matrix/Makefile.am +++ b/matrix/Makefile.am @@ -8,8 +8,6 @@ DEFS += -DIRCD_MATRIX_UNIT AM_CPPFLAGS =# AM_CPPFLAGS += -I$(top_srcdir)/include -AM_CPPFLAGS += -include ircd/matrix.pic.h -AM_CPPFLAGS += -include ircd/mods/mapi.h AM_CXXFLAGS =# @@ -23,6 +21,14 @@ AM_LDFLAGS += -Wl,-z,lazy AM_LDFLAGS += -L$(top_srcdir)/ircd AM_LDFLAGS += $(PLATFORM_LDFLAGS) +if CLANG_PCH +AM_CPPFLAGS += -include-pch $(top_srcdir)/include/ircd/matrix.pic.h.gch +AM_CPPFLAGS += -include ircd/mods/mapi.h +else +AM_CPPFLAGS += -include ircd/matrix.pic.h +AM_CPPFLAGS += -include ircd/mods/mapi.h +endif + if GCC AM_CXXFLAGS += -ftls-model=local-dynamic endif @@ -186,8 +192,15 @@ libircd_matrix_la_SOURCES += matrix.cc # Unit configurations # -id.lo: AM_CPPFLAGS := ${SPIRIT_UNIT_CPPFLAGS} ${AM_CPPFLAGS} -id.lo: CXXFLAGS += ${SPIRIT_UNIT_CXXFLAGS} ${AM_CXXFLAGS} +if CLANG_PCH +SPIRIT_UNIT_CPPFLAGS += -include ircd/spirit.h +#SPIRIT_UNIT_CPPFLAGS += -include-pch $(top_srcdir)/include/ircd/spirit.h.gch +else +SPIRIT_UNIT_CPPFLAGS += -include ircd/spirit.h +endif + +id.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${SPIRIT_UNIT_CPPFLAGS} +id.lo: CXXFLAGS += ${AM_CXXFLAGS} ${SPIRIT_UNIT_CXXFLAGS} # # Other recipes diff --git a/modules/Makefile.am b/modules/Makefile.am index 7358bdc28..9ea9de1fa 100644 --- a/modules/Makefile.am +++ b/modules/Makefile.am @@ -5,8 +5,6 @@ DEFS += -DIRCD_UNIT_MODULE AM_CPPFLAGS =# AM_CPPFLAGS += -I$(top_srcdir)/include -AM_CPPFLAGS += -include $(top_srcdir)/include/ircd/matrix.pic.h -AM_CPPFLAGS += -include $(top_srcdir)/include/ircd/mods/mapi.h AM_CXXFLAGS =# AM_CXXFLAGS += -ftls-model=global-dynamic @@ -20,6 +18,14 @@ AM_LDFLAGS += -L$(top_srcdir)/ircd AM_LDFLAGS += -L$(top_srcdir)/matrix AM_LDFLAGS += $(PLATFORM_LDFLAGS) +if CLANG_PCH +AM_CPPFLAGS += -include-pch $(top_srcdir)/include/ircd/matrix.pic.h.gch +AM_CPPFLAGS += -include $(top_srcdir)/include/ircd/mods/mapi.h +else +AM_CPPFLAGS += -include $(top_srcdir)/include/ircd/matrix.pic.h +AM_CPPFLAGS += -include $(top_srcdir)/include/ircd/mods/mapi.h +endif + if GOLD AM_LDFLAGS += -Wl,--no-gnu-unique AM_LDFLAGS += -Wl,--sort-common=descending