[PATCH 01/13] Be consistent about defining NDEBUG

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



We setup the two standard CMake build_types so that Release includes
NDEBUG and RelWithDebInfo does not (by default CMake sets it in both).

The recommendation is for packagers to use Release (by setting
-DCMAKE_BUILD_TYPE=Release) and developers use RelWithDebInfo
(the default)

This also replaces the default flags for Release with the RelWithDebInfo,
flags (-O2 -g -DNDEBUG) which is what we consider suitable for packaging.
The CMake default of -O3 is not tested.

Note that all the packaging systems I looked at force NDEBUG into the
CFLAGS.

Signed-off-by: Jason Gunthorpe <jgunthorpe@xxxxxxxxxxxxxxxxxxxx>
---
 CMakeLists.txt                |  5 +++++
 buildlib/RDMA_BuildType.cmake | 41 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 46 insertions(+)
 create mode 100644 buildlib/RDMA_BuildType.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a829cd477c52..06dd98203349 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,6 +7,9 @@
 # Common options passed to cmake are:
 #  -DCMAKE_EXPORT_COMPILE_COMMANDS=1
 #      Write a compile_commands.json file for clang tooling
+#  -DCMAKE_BUILD_TYPE=RelWithDebInfo
+#      Change the optimization level, Debug disables optimization,
+#      Release is for packagers
 #  -DENABLE_VALGRIND=1 (default disabled)
 #      Embed valgrind notations, this has a tiny negative performance impact
 #  -DENABLE_RESOLVE_NEIGH=0 (default enabled)
@@ -58,12 +61,14 @@ include(CheckCCompilerFlag)
 include(CheckIncludeFile)
 include(CheckTypeSize)
 include(RDMA_EnableCStd)
+include(RDMA_BuildType)
 include(RDMA_DoFixup)
 include(publish_headers)
 include(rdma_functions)
 
 #-------------------------
 # Setup the basic C compiler
+RDMA_BuildType()
 include_directories(${BUILD_INCLUDE})
 # FIXME: Eliminate HAVE_CONFIG_H, we always have it.
 add_definitions(-DHAVE_CONFIG_H)
diff --git a/buildlib/RDMA_BuildType.cmake b/buildlib/RDMA_BuildType.cmake
new file mode 100644
index 000000000000..4f7485c397a0
--- /dev/null
+++ b/buildlib/RDMA_BuildType.cmake
@@ -0,0 +1,41 @@
+# COPYRIGHT (c) 2015 Obsidian Research Corporation. See COPYING file
+
+function(RDMA_BuildType)
+  set(build_types Debug Release RelWithDebInfo MinSizeRel)
+
+  # Set the default build type to RelWithDebInfo. Since RDMA is typically used
+  # in performance contexts it doesn't make much sense to have the default build
+  # turn off the optimizer.
+  if(NOT CMAKE_BUILD_TYPE)
+    set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE String
+      "Options are ${build_types}"
+      FORCE
+      )
+    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${build_types})
+  endif()
+
+  # Release should be used by packagers, it is the same as the default RelWithDebInfo,
+  # this means it uses -O2 and -DNDEBUG (not -O3)
+  foreach (language CXX C)
+    set(VAR_TO_MODIFY "CMAKE_${language}_FLAGS_RELEASE")
+    if ("${${VAR_TO_MODIFY}}" STREQUAL "${${VAR_TO_MODIFY}_INIT}")
+      set(${VAR_TO_MODIFY} "${CMAKE_${language}_FLAGS_RELWITHDEBINFO_INIT}"
+	  CACHE STRING "Default flags for Release configuration" FORCE)
+    endif()
+  endforeach()
+
+  # RelWithDebInfo should be used by developers, it is the same as Release but
+  # with the -DNDEBUG removed
+  foreach (language CXX C)
+    set(VAR_TO_MODIFY "CMAKE_${language}_FLAGS_RELWITHDEBINFO")
+    if (${${VAR_TO_MODIFY}} STREQUAL ${${VAR_TO_MODIFY}_INIT})
+	string(REGEX REPLACE "(^| )[/-]D *NDEBUG($| )"
+	  " "
+	  replacement
+	  "${${VAR_TO_MODIFY}}"
+	  )
+	set(${VAR_TO_MODIFY} "${replacement}"
+	    CACHE STRING "Default flags for RelWithDebInfo configuration" FORCE)
+    endif()
+  endforeach()
+endfunction()
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux