From 256f237f5dcc139cbe97328d61e07b6f57e3c4db Mon Sep 17 00:00:00 2001
From: Rashad Kanavath <rashad.kanavath@c-s.fr>
Date: Tue, 29 Aug 2017 11:34:38 +0200
Subject: [PATCH] COMP: fix openmp & sse flag checks

---
 CMake/OTBCheckSSEFeatures.cmake         | 32 ++++++++-----------------
 CMake/OTBSetStandardCompilerFlags.cmake | 15 ++++++------
 CMakeLists.txt                          |  2 ++
 3 files changed, 20 insertions(+), 29 deletions(-)

diff --git a/CMake/OTBCheckSSEFeatures.cmake b/CMake/OTBCheckSSEFeatures.cmake
index af97f40e3a..d13161f7c3 100644
--- a/CMake/OTBCheckSSEFeatures.cmake
+++ b/CMake/OTBCheckSSEFeatures.cmake
@@ -1,10 +1,7 @@
 function(check_sse_features sse_flags )
-  include(CheckIncludeFile)
-  include(CheckLibraryExists)
   include(CheckCXXSourceRuns)
   include(CheckCXXCompilerFlag)
 
-  set(has_sse FALSE)
   set(${sse_flags} "0" PARENT_SCOPE)
   # For apple assume sse2 is on for all intel builds, check for 64 and 32 bit versions
   if(APPLE)
@@ -24,14 +21,11 @@ function(check_sse_features sse_flags )
         b = _mm_add_pd(a,a);
         _mm_storeu_pd(vals,b);
         return 0;
-     }"
-      has_sse)
+     }" HAVE_SSE2_FLAGS)
  
-    if(has_sse)
-      message(STATUS "Performing Test CXX_HAS_SSE2 - Success")
+    if(HAVE_SSE2_FLAGS)
       set(${sse_flags} "-msse2 -mfpmath=sse" PARENT_SCOPE)
-    else()
-      message(STATUS "Performing Test CXX_HAS_SSE2 - Failed")
+      return()
     endif()
 
     set(CMAKE_REQUIRED_FLAGS "-msse")
@@ -46,18 +40,13 @@ function(check_sse_features sse_flags )
         b = _mm_add_ps(a,b);
         _mm_storeu_ps(vals,b);
         return 0;
-    }"
-      has_sse)
+    }" HAVE_SSE_FLAGS)
     
-    if(has_sse)
-      message(STATUS "Performing Test CXX_HAS_SSE - Success")
+    if(HAVE_SSE_FLAGS)
       set(${sse_flags} "-msse -mfpmath=sse" PARENT_SCOPE)
       return()
-    else()
-      message(STATUS "Performing Test CXX_HAS_SSE - Failed")
-      return()
     endif()
-    
+
   elseif(MSVC)
     if(CMAKE_SIZEOF_VOID_P EQUAL 8)
       return()
@@ -73,15 +62,14 @@ function(check_sse_features sse_flags )
           b = _mm_add_pd(a,a);
           _mm_storeu_pd(vals,b);
           return 0;
-        }"
-      has_sse)
+        }" HAVE_SSE_FLAGS)
     
-    if(has_sse)
-      message(STATUS "Performing Test CXX_HAS_SSE - Success")
+    if(HAVE_SSE_FLAGS)
+      message(STATUS "Performing Test HAVE_SSE_FLAGS - Success")
       set(${sse_flags} "/arch:SSE2 /fp:fast -D__SSE__ -D__SSE2__" PARENT_SCOPE)
       return()
     else()
-      message(STATUS "Performing Test CXX_HAS_SSE - Failed")
+      message(STATUS "Performing Test HAVE_SSE_FLAGS - Failed")
       return()
     endif()
 endif()
diff --git a/CMake/OTBSetStandardCompilerFlags.cmake b/CMake/OTBSetStandardCompilerFlags.cmake
index 9761301af3..d2495d4a07 100644
--- a/CMake/OTBSetStandardCompilerFlags.cmake
+++ b/CMake/OTBSetStandardCompilerFlags.cmake
@@ -281,23 +281,24 @@ macro(check_compiler_platform_flags)
 
   # check for OpenMP
   if(OTB_USE_OPENMP)
+    message(STATUS "OpenMP support requested with OTB_USE_OPENMP=${OTB_USE_OPENMP}")
     find_package(OpenMP QUIET)
   endif()
   if(OPENMP_FOUND)
-    message(STATUS "Enabling OpenMP support")
-    set(OTB_REQUIRED_C_FLAGS "${OTB_REQUIRED_C_FLAGS} ${OpenMP_C_FLAGS}")
+    message(STATUS "Adding '${OpenMP_CXX_FLAGS}' to OTB_REQUIRED_CXX_FLAGS ")
     set(OTB_REQUIRED_CXX_FLAGS "${OTB_REQUIRED_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
-    set(OTB_REQUIRED_LINK_FLAGS "${OTB_REQUIRED_LINK_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
-  else()
-    message(STATUS "Disabling OpenMP support")
+    if(OpenMP_EXE_LINKER_FLAGS)
+      set(OTB_REQUIRED_LINK_FLAGS "${OTB_REQUIRED_LINK_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
+    endif()
   endif()
 
   set(OTB_SSE_FLAGS)
- if(OTB_USE_SSE_FLAGS)
+  if(OTB_USE_SSE_FLAGS)
+    message(STATUS "SIMD extensions requested with OTB_USE_SSE_FLAGS=${OTB_USE_SSE_FLAGS}")
     include(OTBCheckSSEFeatures)
     check_sse_features(OTB_SSE_FLAGS)
     if(OTB_SSE_FLAGS)
-      message(STATUS "Adding OTB_SSE_FLAGS(${OTB_SSE_FLAGS}) to OTB_REQUIRED_CXX_FLAGS")
+      message(STATUS "Adding '${OTB_SSE_FLAGS}' to OTB_REQUIRED_CXX_FLAGS")
       set(OTB_REQUIRED_CXX_FLAGS "${OTB_REQUIRED_CXX_FLAGS} ${OTB_SSE_FLAGS}")
     endif()
   endif()
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1753c49c50..31be37b164 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -506,6 +506,8 @@ foreach(otb_option
     OTB_WRAP_PYTHON
     OTB_WRAP_JAVA
     OTB_DATA_ROOT
+    OTB_USE_OPENMP
+    OTB_USE_SSE_FLAGS
     )
     get_white_spaces("${otb_option}" spaces)
   message("${otb_option} ${spaces} = ${${otb_option}}")
-- 
GitLab