Add ASAN build configuration
authorRoland Schulz <roland@utk.edu>
Sun, 11 May 2014 20:26:14 +0000 (16:26 -0400)
committerRoland Schulz <roland@utk.edu>
Thu, 22 May 2014 16:19:47 +0000 (12:19 -0400)
Also renamed ThreadSanitizer to TSAN

Change-Id: I4373a626acc3962bfb8f163297ab146684bd5ea6

CMakeLists.txt
cmake/gmxBuildTypeASAN.cmake [new file with mode: 0644]
cmake/gmxBuildTypeTSAN.cmake [moved from cmake/gmxBuildTypeThreadSanitizer.cmake with 90% similarity]

index 12e1ece2ccc91318059bffe528be883d61516fe2..774ce6ab57eebf954501e40f5de69362ffd60db2 100644 (file)
@@ -104,7 +104,8 @@ mark_as_advanced(GMX_INSTALL_PREFIX)
 
 include(gmxBuildTypeReference)
 include(gmxBuildTypeProfile)
-include(gmxBuildTypeThreadSanitizer)
+include(gmxBuildTypeTSAN)
+include(gmxBuildTypeASAN)
 include(gmxBuildTypeReleaseWithAssert)
 
 if(NOT CMAKE_BUILD_TYPE)
diff --git a/cmake/gmxBuildTypeASAN.cmake b/cmake/gmxBuildTypeASAN.cmake
new file mode 100644 (file)
index 0000000..a37fc30
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# This file is part of the GROMACS molecular simulation package.
+#
+# Copyright (c) 2014, by the GROMACS development team, led by
+# Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
+# and including many others, as listed in the AUTHORS file in the
+# top-level source directory and at http://www.gromacs.org.
+#
+# GROMACS is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public License
+# as published by the Free Software Foundation; either version 2.1
+# of the License, or (at your option) any later version.
+#
+# GROMACS is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with GROMACS; if not, see
+# http://www.gnu.org/licenses, or write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
+#
+# If you want to redistribute modifications to GROMACS, please
+# consider that scientific software is very special. Version
+# control is crucial - bugs must be traceable. We will be happy to
+# consider code for inclusion in the official distribution, but
+# derived work must not be called official GROMACS. Details are found
+# in the README & COPYING files - if they are missing, get the
+# official version at http://www.gromacs.org.
+#
+# To help us fund GROMACS development, we humbly ask that you cite
+# the research papers on the package. Check out http://www.gromacs.org.
+
+# Custom build type "ASAN", to be used to run the
+# AddressSanatizer memory checker.
+
+set(_flags "-O1 -g -fsanitize=address -fno-omit-frame-pointer")
+
+foreach(_language C CXX)
+    string(REPLACE "X" "+" _human_readable_language ${_language})
+    set(CMAKE_${_language}_FLAGS_ASAN ${_flags} CACHE STRING "${_human_readable_language} flags for address sanitizer")
+    mark_as_advanced(CMAKE_${_language}_FLAGS_ASAN)
+endforeach()
+
+string(TOUPPER "${CMAKE_BUILD_TYPE}" _cmake_build_type)
+if (APPLE AND _cmake_build_type STREQUAL ASAN) #https://code.google.com/p/address-sanitizer/issues/detail?id=210
+   set(BUILD_SHARED_LIBS OFF CACHE BOOL "Disabled for ASAN builds" FORCE)
+endif()
+
similarity index 90%
rename from cmake/gmxBuildTypeThreadSanitizer.cmake
rename to cmake/gmxBuildTypeTSAN.cmake
index 3c513d7479e69761b625527c56754b14db10dec4..550edb88f91bbb5a93eef918f54a12355201ea7b 100644 (file)
@@ -32,7 +32,7 @@
 # To help us fund GROMACS development, we humbly ask that you cite
 # the research papers on the package. Check out http://www.gromacs.org.
 
-# Custom build type "ThreadSanitizer", to be used for compiling GROMACS 
+# Custom build type "TSAN", to be used for compiling GROMACS 
 # with clang 3.4 or gcc 4.8 (currently pre-release) with ThreadSanitizer
 # (aka "TSan") turned on, so that the tests can be run to detect data races.
 #
@@ -73,13 +73,13 @@ foreach(_language C CXX)
     string(REPLACE "X" "+" _human_readable_language ${_language})
 
     if (CMAKE_${_language}_COMPILER_ID MATCHES "GNU")
-        set(CMAKE_${_language}_FLAGS_THREADSANITIZER "${_flags} -pie -fPIE" CACHE STRING "${_human_readable_language} flags for thread sanitizer")
+        set(CMAKE_${_language}_FLAGS_TSAN "${_flags} -pie -fPIE" CACHE STRING "${_human_readable_language} flags for thread sanitizer")
     else()
-        set(CMAKE_${_language}_FLAGS_THREADSANITIZER ${_flags} CACHE STRING "${_human_readable_language} flags for thread sanitizer")
+        set(CMAKE_${_language}_FLAGS_TSAN ${_flags} CACHE STRING "${_human_readable_language} flags for thread sanitizer")
     endif()
-    mark_as_advanced(CMAKE_${_language}_FLAGS_THREADSANITIZER)
+    mark_as_advanced(CMAKE_${_language}_FLAGS_TSAN)
     string(TOUPPER "${CMAKE_BUILD_TYPE}" _cmake_build_type)
-    if (_cmake_build_type STREQUAL THREADSANITIZER)
+    if (_cmake_build_type STREQUAL TSAN)
         set(TMPI_ATOMICS_DISABLED 1)
         set(TMPI_ATOMICS 0)
         if (NOT((CMAKE_${_language}_COMPILER_ID MATCHES "Clang" AND