SeqAn3 3.4.0-rc.1
The Modern C++ library for sequence analysis.
Loading...
Searching...
No Matches
platform.hpp File Reference

Provides platform and dependency checks. More...

#include <cinttypes>
#include <ciso646>
#include <cstddef>
+ Include dependency graph for platform.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define SEQAN3_COMPILER_IS_GCC   0
 Whether the current compiler is GCC.
 
#define SEQAN3_DEPRECATED_340    [[deprecated("This will be removed in SeqAn-3.4.0; please see the documentation.")]]
 Deprecation message for SeqAn 3.4.0 release.
 
#define SEQAN3_DEPRECATED_HEADER(message)   SEQAN3_PRAGMA(GCC warning message)
 Deprecation message for deprecated header.
 
#define SEQAN3_DISABLE_COMPILER_CHECK
 This disables the warning you would get if your compiler is not known to work.
 
#define SEQAN3_DISABLE_LEGACY_STD_DIAGNOSTIC
 This disables the warning you would get if -D_GLIBCXX_USE_CXX11_ABI=0 is set.
 
#define SEQAN3_PRAGMA(non_string_literal)   _Pragma(#non_string_literal)
 _Pragma requires a string-literal and # makes it a string
 
#define SEQAN3_WITH_CEREAL   0
 Whether CEREAL support is available or not.
 
#define SEQAN3_WORKAROUND_DEFAULT_CONSTRUCTIBLE_VIEW   0
 A view does not need to be default constructible. This change is first implemented in gcc12.
 
#define SEQAN3_WORKAROUND_GCC_100139   0
 See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100139 std::views::{take, drop} do not type-erase. This is a defect within the standard lib (fixed in gcc12).
 
#define SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY   0
 Workaround bogus memcpy errors in GCC 12 and 13. (Wrestrict and Wstringop-overflow)
 
#define SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI   0
 This is needed to support CentOS 7 or RHEL 7; Newer CentOS's include a more modern default-gcc version making this macro obsolete.
 
#define SEQAN3_WORKAROUND_LITERAL   inline
 Our char literals returning std::vector should be constexpr if constexpr std::vector is supported.
 
#define SEQAN3_WORKAROUND_VIEW_PERFORMANCE   1
 Performance of views, especially filter and join is currently bad, especially in I/O.
 
Cereal function macros

These can be changed by apps so we used the macros instead of the values internally.

#define CEREAL_LOAD_FUNCTION_NAME   load
 Macro for Cereal's load function.
 
#define CEREAL_LOAD_MINIMAL_FUNCTION_NAME   load_minimal
 Macro for Cereal's load_minimal function.
 
#define CEREAL_SAVE_FUNCTION_NAME   save
 Macro for Cereal's save function.
 
#define CEREAL_SAVE_MINIMAL_FUNCTION_NAME   save_minimal
 
#define CEREAL_SERIALIZE_FUNCTION_NAME   serialize
 Macro for Cereal's serialize function.
 

Detailed Description

Provides platform and dependency checks.

Author
Hannes Hauswedell <hannes.hauswedell AT fu-berlin.de>

Macro Definition Documentation

◆ CEREAL_SAVE_MINIMAL_FUNCTION_NAME

#define CEREAL_SAVE_MINIMAL_FUNCTION_NAME   save_minimal

Macro for Cereal's save_minimal function.

◆ SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY

#define SEQAN3_WORKAROUND_GCC_BOGUS_MEMCPY   0

Workaround bogus memcpy errors in GCC 12 and 13. (Wrestrict and Wstringop-overflow)

See also
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105545

◆ SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI

#define SEQAN3_WORKAROUND_GCC_NO_CXX11_ABI   0

This is needed to support CentOS 7 or RHEL 7; Newer CentOS's include a more modern default-gcc version making this macro obsolete.

In GCC 5 there was a bigger ABI change and modern systems compile with dual ABI, but some enterprise systems (those where gcc 4 is the standard compiler) don't support dual ABI. This has the effect that even community builds of gcc are build with –disable-libstdcxx-dual-abi. Only building the compiler yourself would solve this problem.

See also
https://github.com/seqan/seqan3/issues/2244
https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html

◆ SEQAN3_WORKAROUND_LITERAL

#define SEQAN3_WORKAROUND_LITERAL   inline

Our char literals returning std::vector should be constexpr if constexpr std::vector is supported.

The _GLIBCXX_DEBUG statement is a workaround for a libstdc++ bug

See also
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104748
https://github.com/seqan/seqan3/issues/3221
https://godbolt.org/z/159n8xrdo
Hide me