Disable threads completely if OpenMP is not present. This reduces the penalty paid by Mutex lock and unlock operations in single threaded mode. Change-Id: I185380bde73fe87e901fc434d152d6c366ff1d5d
diff --git a/CMakeLists.txt b/CMakeLists.txt index f5aaeed..537a103 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -43,7 +43,7 @@ # Git Bash (shipped with msysgit) SET (LOCAL_GIT_DIRECTORY ${CMAKE_SOURCE_DIR}/.git) ELSE (EXISTS ${CMAKE_SOURCE_DIR}/.git) - # TODO(keir) Add proper windows support + # TODO(keir) Add proper Windows support ENDIF (EXISTS ${CMAKE_SOURCE_DIR}/.git) IF (EXISTS ${LOCAL_GIT_DIRECTORY}) @@ -471,15 +471,35 @@ IF (${OPENMP}) FIND_PACKAGE(OpenMP) - IF(${OPENMP_FOUND}) - MESSAGE("-- Found OpenMP.") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - ADD_DEFINITIONS(-DCERES_USE_OPENMP) - ELSE(${OPENMP_FOUND}) - MESSAGE("-- Can't find OpenMP. Continuing without it.") - ENDIF(${OPENMP_FOUND}) ENDIF (${OPENMP}) +IF(${OPENMP_FOUND}) + MESSAGE("-- Found OpenMP.") + ADD_DEFINITIONS(-DCERES_USE_OPENMP) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + IF ("${UNIX}") + # At least on Linux, we need pthreads to be enabled for mutex to + # compile. This may not work on Windows or Android. + FIND_PACKAGE(Threads REQUIRED) + SET(STATIC_LIBRARY_FLAGS + "${STATIC_LIBRARY_FLAGS} ${CMAKE_THREAD_LIBS_INIT}") + SET(CMAKE_SHARED_LINKER_FLAGS + "${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_THREAD_LIBS_INIT}") + ADD_DEFINITIONS(-DCERES_HAVE_PTHREAD) + ADD_DEFINITIONS(-DCERES_HAVE_RWLOCK) + ENDIF ("${UNIX}") +ELSE(${OPENMP_FOUND}) + MESSAGE("-- Can't find OpenMP. Disabling multithreading.") + ADD_DEFINITIONS(-DCERES_NO_THREADS) +ENDIF(${OPENMP_FOUND}) + +# Disable threads in mutex.h. Someday, after there is OpenMP support in +# Android, this can get removed. Also turn on a workaround for an NDK bug. +IF (${BUILD_ANDROID}) + ADD_DEFINITIONS(-DCERES_NO_THREADS) + ADD_DEFINITIONS(-DCERES_WORK_AROUND_ANDROID_NDK_COMPILER_BUG) +ENDIF (${BUILD_ANDROID}) + # Protocol buffers OPTION(PROTOBUF "Enable protocol buffers support." @@ -497,25 +517,6 @@ ADD_DEFINITIONS(-DCERES_NO_PROTOCOL_BUFFERS) ENDIF (${PROTOBUF}) - -# Use threads but not on Android, where there is no support for OpenMP yet. -IF ("${UNIX}" AND NOT ${BUILD_ANDROID}) - # At least on Linux, we need pthreads to be enabled for mutex to compile. - # This may not work on windows or android. - FIND_PACKAGE(Threads REQUIRED) - SET(STATIC_LIBRARY_FLAGS "${STATIC_LIBRARY_FLAGS} ${CMAKE_THREAD_LIBS_INIT}") - SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_THREAD_LIBS_INIT}") - ADD_DEFINITIONS(-DCERES_HAVE_PTHREAD) - ADD_DEFINITIONS(-DCERES_HAVE_RWLOCK) -ENDIF ("${UNIX}" AND NOT ${BUILD_ANDROID}) - -# Disable threads in mutex.h. Someday, after there is OpenMP support in -# Android, this can get removed. Also turn on a workaround for an NDK bug. -IF (${BUILD_ANDROID}) - ADD_DEFINITIONS(-DCERES_NO_THREADS) - ADD_DEFINITIONS(-DCERES_WORK_AROUND_ANDROID_NDK_COMPILER_BUG) -ENDIF (${BUILD_ANDROID}) - OPTION(DISABLE_TR1 "Don't use TR1. This replaces some hash tables with sets. Slower." OFF)