mirror of
https://github.com/matrix-construct/construct
synced 2024-09-27 19:28:52 +02:00
configure: Reorg compiler feature flag sections.
This commit is contained in:
parent
38f6507434
commit
c0f2ff9067
1 changed files with 115 additions and 100 deletions
215
configure.ac
215
configure.ac
|
@ -536,49 +536,61 @@ dnl AC_SUBST(EXTRA_LDFLAGS, "$EXTRA_LDFLAGS")
|
||||||
dnl AC_SUBST(EXTRA_LIBS, "$EXTRA_LIBS")
|
dnl AC_SUBST(EXTRA_LIBS, "$EXTRA_LIBS")
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Gold linker
|
dnl Features
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
dnl Sorry there is no way to disable gold right now. You can try the
|
AM_COND_IF([GCC],
|
||||||
dnl binutils-gold package if your binutils package doesn't ship with it
|
|
||||||
dnl by default these days. Not sure if this is a problem with musl; please
|
|
||||||
dnl report any issues so we can weigh the need to change course here.
|
|
||||||
dnl
|
|
||||||
ld_gold="yes"
|
|
||||||
|
|
||||||
AM_CONDITIONAL([LD_GOLD], [[[[ $ld_gold = "yes" ]]]])
|
|
||||||
|
|
||||||
AM_COND_IF([LD_GOLD],
|
|
||||||
[
|
[
|
||||||
AM_COND_IF([GCC],
|
dnl RB_VAR_PREPEND([CXXFLAGS], ["-fmodules-ts"])
|
||||||
[
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,-fuse-ld=gold"])
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--gdb-index"])
|
|
||||||
])
|
|
||||||
|
|
||||||
AM_COND_IF([CLANG],
|
|
||||||
[
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-fuse-ld=gold"])
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wc,-fuse-ld=gold"])
|
|
||||||
])
|
|
||||||
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--warn-common"])
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--warn-execstack"])
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--detect-odr-violations"])
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--rosegment"])
|
|
||||||
dnl RB_VAR_PREPEND([LDFLAGS], ["-Wl,--icf=all"])
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,-z,noexecstack"])
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,-z,combreloc"])
|
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,-z,text-unlikely-segment"])
|
|
||||||
], [
|
|
||||||
AC_MSG_ERROR([Sorry, disabling the gold linker is not supported at this time.])
|
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl Note compact mode options available in both GOLD and LLD
|
AM_COND_IF([CLANG],
|
||||||
AM_COND_IF([COMPACT],
|
|
||||||
[
|
[
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--strip-all"])
|
dnl RB_VAR_PREPEND([CXXFLAGS], ["-fmodules"])
|
||||||
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--gc-sections"])
|
])
|
||||||
|
|
||||||
|
AM_COND_IF([CLANG],
|
||||||
|
[
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fblocks"])
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fasm-blocks"])
|
||||||
|
])
|
||||||
|
|
||||||
|
AM_COND_IF([CLANG11],
|
||||||
|
[
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fenable-matrix"])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Misc
|
||||||
|
dnl
|
||||||
|
|
||||||
|
dnl This disables thread-safety for static variable initialization
|
||||||
|
dnl (specifically local static variables inside functions) which reduces
|
||||||
|
dnl generated code size and complexity. This is alright since construct is
|
||||||
|
dnl primarily single threaded. Even if other threads are spawned for special
|
||||||
|
dnl tasks we consider the likelyhood of a static initialization race to either
|
||||||
|
dnl be sufficiently low or simply immaterial for our uses of them.
|
||||||
|
dnl
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fno-threadsafe-statics"])
|
||||||
|
|
||||||
|
dnl Exception safety at instruction boundary rather than function boundary
|
||||||
|
dnl This option is needed to enable noexcept(false) i.e to throw from a
|
||||||
|
dnl destructor; without this noexcept(false) still terminates.
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fasynchronous-unwind-tables"])
|
||||||
|
|
||||||
|
dnl -fvisibility-inlines-hidden - for optimization; note the address of inline
|
||||||
|
dnl functions won't be the same between translation units
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fvisibility-inlines-hidden"])
|
||||||
|
|
||||||
|
dnl see gcc(1)
|
||||||
|
AM_COND_IF([GCC],
|
||||||
|
[
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fnothrow-opt"])
|
||||||
|
])
|
||||||
|
|
||||||
|
AM_COND_IF([GCC],
|
||||||
|
[
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-flax-vector-conversions"])
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
|
@ -647,19 +659,6 @@ dnl
|
||||||
dnl Compiler intrumentation
|
dnl Compiler intrumentation
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
AM_COND_IF([DEBUG],
|
|
||||||
[
|
|
||||||
AM_COND_IF([GCC],
|
|
||||||
[
|
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-fmax-errors=2"])
|
|
||||||
])
|
|
||||||
|
|
||||||
AM_COND_IF([CLANG],
|
|
||||||
[
|
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-ferror-limit=2"])
|
|
||||||
])
|
|
||||||
])
|
|
||||||
|
|
||||||
AM_COND_IF([DEBUG],
|
AM_COND_IF([DEBUG],
|
||||||
[
|
[
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-g"])
|
RB_VAR_PREPEND([CXXFLAGS], ["-g"])
|
||||||
|
@ -680,6 +679,8 @@ AM_COND_IF([DEBUG],
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fverbose-asm"])
|
||||||
|
|
||||||
dnl Creates an ELF section in the output which contains a list of
|
dnl Creates an ELF section in the output which contains a list of
|
||||||
dnl the command line arguments used for compilation.
|
dnl the command line arguments used for compilation.
|
||||||
AM_COND_IF([GCC],
|
AM_COND_IF([GCC],
|
||||||
|
@ -690,8 +691,27 @@ AM_COND_IF([GCC],
|
||||||
AM_COND_IF([CLANG],
|
AM_COND_IF([CLANG],
|
||||||
[
|
[
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-grecord-gcc-switches"])
|
RB_VAR_PREPEND([CXXFLAGS], ["-grecord-gcc-switches"])
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fno-discard-value-names"])
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fident"])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
AM_COND_IF([DEBUG],
|
||||||
|
[
|
||||||
|
AM_COND_IF([GCC],
|
||||||
|
[
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-fmax-errors=2"])
|
||||||
|
])
|
||||||
|
|
||||||
|
AM_COND_IF([CLANG],
|
||||||
|
[
|
||||||
|
RB_VAR_PREPEND([CXXFLAGS], ["-ferror-limit=2"])
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Runtime intrumentation
|
||||||
|
dnl
|
||||||
|
|
||||||
AM_COND_IF([GCC],
|
AM_COND_IF([GCC],
|
||||||
[
|
[
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-fstack-protector-explicit"])
|
RB_VAR_PREPEND([CXXFLAGS], ["-fstack-protector-explicit"])
|
||||||
|
@ -715,56 +735,6 @@ AM_COND_IF([GCC],
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-fvtable-verify=none"])
|
RB_VAR_PREPEND([CXXFLAGS], ["-fvtable-verify=none"])
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl Not useful without GCC support...
|
|
||||||
dnl AM_COND_IF([CLANG],
|
|
||||||
dnl [
|
|
||||||
dnl RB_VAR_PREPEND([CXXFLAGS], ["-fasm-blocks"])
|
|
||||||
dnl ])
|
|
||||||
|
|
||||||
AM_COND_IF([GCC],
|
|
||||||
[
|
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-fverbose-asm"])
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Misc
|
|
||||||
dnl
|
|
||||||
|
|
||||||
dnl Exception safety at instruction boundary rather than function boundary
|
|
||||||
dnl This option is needed to enable noexcept(false) i.e to throw from a
|
|
||||||
dnl destructor; without this noexcept(false) still terminates.
|
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-fasynchronous-unwind-tables"])
|
|
||||||
|
|
||||||
dnl -fvisibility-inlines-hidden - for optimization; note the address of inline
|
|
||||||
dnl functions won't be the same between translation units
|
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-fvisibility-inlines-hidden"])
|
|
||||||
|
|
||||||
dnl see gcc(1)
|
|
||||||
AM_COND_IF([GCC],
|
|
||||||
[
|
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-fnothrow-opt"])
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl This disables thread-safety for static variable initialization
|
|
||||||
dnl (specifically local static variables inside functions) which reduces
|
|
||||||
dnl generated code size and complexity. This is alright since construct is
|
|
||||||
dnl primarily single threaded. Even if other threads are spawned for special
|
|
||||||
dnl tasks we consider the likelyhood of a static initialization race to either
|
|
||||||
dnl be sufficiently low or simply immaterial for our uses of them.
|
|
||||||
dnl
|
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-fno-threadsafe-statics"])
|
|
||||||
|
|
||||||
AM_COND_IF([GCC],
|
|
||||||
[
|
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-flax-vector-conversions"])
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl Enables matrix_type attribute for vectors of vectors etc
|
|
||||||
AM_COND_IF([CLANG11],
|
|
||||||
[
|
|
||||||
RB_VAR_PREPEND([CXXFLAGS], ["-fenable-matrix"])
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Machine Tuning
|
dnl Machine Tuning
|
||||||
dnl
|
dnl
|
||||||
|
@ -943,6 +913,51 @@ RB_VAR_PREPEND([CPPFLAGS], ["$CWARNS"])
|
||||||
dnl mirror the base CFLAGS and CXXFLAGS up to this point
|
dnl mirror the base CFLAGS and CXXFLAGS up to this point
|
||||||
CFLAGS="$CXXFLAGS"
|
CFLAGS="$CXXFLAGS"
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Gold linker
|
||||||
|
dnl
|
||||||
|
|
||||||
|
dnl Sorry there is no way to disable gold right now. You can try the
|
||||||
|
dnl binutils-gold package if your binutils package doesn't ship with it
|
||||||
|
dnl by default these days. Not sure if this is a problem with musl; please
|
||||||
|
dnl report any issues so we can weigh the need to change course here.
|
||||||
|
dnl
|
||||||
|
ld_gold="yes"
|
||||||
|
|
||||||
|
AM_CONDITIONAL([LD_GOLD], [[[[ $ld_gold = "yes" ]]]])
|
||||||
|
|
||||||
|
AM_COND_IF([LD_GOLD],
|
||||||
|
[
|
||||||
|
AM_COND_IF([GCC],
|
||||||
|
[
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,-fuse-ld=gold"])
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--gdb-index"])
|
||||||
|
])
|
||||||
|
|
||||||
|
AM_COND_IF([CLANG],
|
||||||
|
[
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-fuse-ld=gold"])
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wc,-fuse-ld=gold"])
|
||||||
|
])
|
||||||
|
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--warn-common"])
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--warn-execstack"])
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--detect-odr-violations"])
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--rosegment"])
|
||||||
|
dnl RB_VAR_PREPEND([LDFLAGS], ["-Wl,--icf=all"])
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,-z,noexecstack"])
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,-z,combreloc"])
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,-z,text-unlikely-segment"])
|
||||||
|
], [
|
||||||
|
AC_MSG_ERROR([Sorry, disabling the gold linker is not supported at this time.])
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl Note compact mode options available in both GOLD and LLD
|
||||||
|
AM_COND_IF([COMPACT],
|
||||||
|
[
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--strip-all"])
|
||||||
|
RB_VAR_PREPEND([LDFLAGS], ["-Wl,--gc-sections"])
|
||||||
|
])
|
||||||
|
|
||||||
dnl ***************************************************************************
|
dnl ***************************************************************************
|
||||||
dnl
|
dnl
|
||||||
|
|
Loading…
Reference in a new issue