aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorBen Harris <bjh21@bjh21.me.uk>2023-02-19 23:20:29 +0000
committerBen Harris <bjh21@bjh21.me.uk>2023-02-19 23:20:29 +0000
commit1470c9530b1cff33d11170b9b891d94be62c4194 (patch)
tree9ade57426919284d605811a8f3ee1925b91a9dc5 /cmake
parentbb16b5a70ddf77d03f1e985cb761ad5aa6c19b2c (diff)
downloadpuzzles-1470c9530b1cff33d11170b9b891d94be62c4194.zip
puzzles-1470c9530b1cff33d11170b9b891d94be62c4194.tar.gz
puzzles-1470c9530b1cff33d11170b9b891d94be62c4194.tar.bz2
puzzles-1470c9530b1cff33d11170b9b891d94be62c4194.tar.xz
Try to stop CMake disabling assertions in release builds
Assertion failures are ugly, but they're better than the alternative. Defensive coding is a general principle throughout Puzzles and I don't think it's sensible to selectively turn that off. The mechanism by which we re-enable assertions is stolen from PuTTY (with an enhancement to cover MinSizeRel builds as well) and is pretty ugly because CMake doesn't seem to have a good way to do it.
Diffstat (limited to 'cmake')
-rw-r--r--cmake/setup.cmake10
1 files changed, 10 insertions, 0 deletions
diff --git a/cmake/setup.cmake b/cmake/setup.cmake
index 8f879e4..ea8d1bf 100644
--- a/cmake/setup.cmake
+++ b/cmake/setup.cmake
@@ -8,6 +8,16 @@ set(build_gui_programs TRUE)
set(build_icons FALSE)
set(need_c_icons FALSE)
+# Don't disable assertions, even in release mode. Our assertions
+# generally aren't expensive and protect against more annoying crashes
+# and memory corruption.
+string(REPLACE "/DNDEBUG" "" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}")
+string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}")
+string(REPLACE "/DNDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
+string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
+string(REPLACE "/DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
+string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
+
# Include one of platforms/*.cmake to define platform-specific stuff.
# Each of these is expected to:
# - define get_platform_puzzle_extra_source_files(), used below