build: enable extra runtime checks in libstdc++/libc++ in debug mode
Change-Id: I1e8b99ccd68b67ae6b3c92236987a0549d86809d
diff --git a/.waf-tools/default-compiler-flags.py b/.waf-tools/default-compiler-flags.py
index 82632d6..ef97f25 100644
--- a/.waf-tools/default-compiler-flags.py
+++ b/.waf-tools/default-compiler-flags.py
@@ -136,7 +136,7 @@
def getDebugFlags(self, conf):
"""Get dict of CXXFLAGS, LINKFLAGS, and DEFINES that are needed only in debug mode"""
- return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': ['_DEBUG']}
+ return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': []}
def getOptimizedFlags(self, conf):
"""Get dict of CXXFLAGS, LINKFLAGS, and DEFINES that are needed only in optimized mode"""
@@ -174,6 +174,9 @@
'-Wno-error=maybe-uninitialized', # Bug #1615
]
flags['LINKFLAGS'] += self.__linkFlags
+ # Enable assertions in libstdc++
+ # https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_macros.html
+ flags['DEFINES'] += ['_GLIBCXX_ASSERTIONS=1']
return flags
def getOptimizedFlags(self, conf):
@@ -235,6 +238,13 @@
def getDebugFlags(self, conf):
flags = super().getDebugFlags(conf)
flags['CXXFLAGS'] += self.__cxxFlags
+ # Enable assertions in libc++
+ if self.getCompilerVersion(conf) >= (18, 0, 0):
+ # https://libcxx.llvm.org/Hardening.html
+ flags['DEFINES'] += ['_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE']
+ elif self.getCompilerVersion(conf) >= (15, 0, 0):
+ # https://releases.llvm.org/15.0.0/projects/libcxx/docs/UsingLibcxx.html#enabling-the-safe-libc-mode
+ flags['DEFINES'] += ['_LIBCPP_ENABLE_ASSERTIONS=1']
return flags
def getOptimizedFlags(self, conf):