From 94155cc8abd6c64cf04d4c99fce97c489ebb8d31 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Thu, 5 Jan 2012 16:21:46 +0100
Subject: [PATCH] Removed -march switch on Mac gcc 4.2.1 and correctly set
 OpenMP settings.

Wrapped OpenMP includes in #ifdefs.
---
 CMakeLists.txt                                | 22 ++++++++++++++-----
 MathLib/LinAlg/Solvers/CGParallel.cpp         |  2 ++
 MathLib/LinAlg/Sparse/CRSMatrixDiagPrecond.h  |  4 +++-
 MathLib/LinAlg/Sparse/amuxCRS.cpp             |  2 ++
 MathLib/MathTools.h                           |  2 ++
 SimpleTests/MatrixTests/MatMult.cpp           |  5 ++++-
 .../SolverTests/BiCGStabDiagPrecond.cpp       |  5 ++++-
 ...onjugateGradientDiagonalPreconditioned.cpp |  5 ++++-
 .../ConjugateGradientUnpreconditioned.cpp     |  5 ++++-
 9 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index cf2f2981646..50986d0a927 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,23 +4,35 @@ cmake_minimum_required(VERSION 2.6)
 # Project name
 project( OGS-6 )
 
-# Set cmake module path 
+# Set cmake module path
 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
   "${CMAKE_SOURCE_DIR}/scripts/cmake/cmake"
   "${CMAKE_SOURCE_DIR}/scripts/cmake")
 
-# Set cmake module path 
-#SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeConfiguration")
+INCLUDE(GetCompilerInfoString)
+
+# Finds
+FIND_PACKAGE(OpenMP)
+IF(OPENMP_FOUND)
+	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+ENDIF()
 
 ### For GNU C/CXX
 IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC)
+		get_gcc_version(GCC_VERSION)
         IF( NOT CMAKE_BUILD_TYPE STREQUAL "Debug" )
                 MESSAGE(STATUS "Set GCC release flags")
-                SET(CMAKE_CXX_FLAGS "-O3 -march=native -mtune=native -msse4.2 -DNDEBUG")
+				IF(APPLE AND GCC_VERSION VERSION_LESS "4.3" AND NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode" )
+					# -march=native does not work here when on normal gcc compiler
+					# see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33144
+					SET(CMAKE_CXX_FLAGS "-O3 -mtune=native -msse4.2 -DNDEBUG")
+				ELSE()
+                	SET(CMAKE_CXX_FLAGS "-O3 -march=native -mtune=native -msse4.2 -DNDEBUG")
+				ENDIF()
         ENDIF()
         # -g
         SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wall -Wextra -fno-nonansi-builtins")
-        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
         ADD_DEFINITIONS(
                 -DGCC
         )
diff --git a/MathLib/LinAlg/Solvers/CGParallel.cpp b/MathLib/LinAlg/Solvers/CGParallel.cpp
index c752961e30d..bdfa4cfb32c 100644
--- a/MathLib/LinAlg/Solvers/CGParallel.cpp
+++ b/MathLib/LinAlg/Solvers/CGParallel.cpp
@@ -7,7 +7,9 @@
 
 #include <limits>
 
+#ifdef _OPENMP
 #include <omp.h>
+#endif
 
 #include "MathTools.h"
 #include "blas.h"
diff --git a/MathLib/LinAlg/Sparse/CRSMatrixDiagPrecond.h b/MathLib/LinAlg/Sparse/CRSMatrixDiagPrecond.h
index 51982a1f93e..cce05d48ad6 100644
--- a/MathLib/LinAlg/Sparse/CRSMatrixDiagPrecond.h
+++ b/MathLib/LinAlg/Sparse/CRSMatrixDiagPrecond.h
@@ -1,7 +1,9 @@
 #ifndef CRSMATRIXDIAGPRECOND_H
 #define CRSMATRIXDIAGPRECOND_H
 
-//#include <omp.h>
+#ifdef _OPENMP
+#include <omp.h>
+#endif
 
 #include "CRSMatrix.h"
 #include "sparse.h"
diff --git a/MathLib/LinAlg/Sparse/amuxCRS.cpp b/MathLib/LinAlg/Sparse/amuxCRS.cpp
index 99c77eafc67..04a7528e878 100644
--- a/MathLib/LinAlg/Sparse/amuxCRS.cpp
+++ b/MathLib/LinAlg/Sparse/amuxCRS.cpp
@@ -7,7 +7,9 @@
 
 #include "amuxCRS.h"
 #include <cstddef>
+#ifdef _OPENMP
 #include <omp.h>
+#endif
 #ifdef HAVE_PTHREADS
 #include <pthread.h>
 #endif
diff --git a/MathLib/MathTools.h b/MathLib/MathTools.h
index 4a9d2b804f9..ea6109150ae 100644
--- a/MathLib/MathTools.h
+++ b/MathLib/MathTools.h
@@ -12,7 +12,9 @@
 #include <cmath>
 #include <limits>
 
+#ifdef _OPENMP
 #include <omp.h>
+#endif
 
 #include "Point.h"
 
diff --git a/SimpleTests/MatrixTests/MatMult.cpp b/SimpleTests/MatrixTests/MatMult.cpp
index 62c76e74d84..6266c0365f2 100644
--- a/SimpleTests/MatrixTests/MatMult.cpp
+++ b/SimpleTests/MatrixTests/MatMult.cpp
@@ -2,7 +2,6 @@
 #include <iostream>
 #include <cmath>
 #include <limits>
-#include <omp.h>
 #include <cstdlib>
 #include "sparse.h"
 #include "LinAlg/Sparse/CRSMatrix.h"
@@ -11,6 +10,10 @@
 #include "RunTimeTimer.h"
 #include "CPUTimeTimer.h"
 
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
 int main(int argc, char *argv[])
 {
 	if (argc < 4) {
diff --git a/SimpleTests/SolverTests/BiCGStabDiagPrecond.cpp b/SimpleTests/SolverTests/BiCGStabDiagPrecond.cpp
index 5bdd39217dd..43cf9cc247f 100644
--- a/SimpleTests/SolverTests/BiCGStabDiagPrecond.cpp
+++ b/SimpleTests/SolverTests/BiCGStabDiagPrecond.cpp
@@ -2,7 +2,6 @@
 #include <iostream>
 #include <cmath>
 #include <cstdlib>
-#include <omp.h>
 #include "LinAlg/Solvers/BiCGStab.h"
 #include "LinAlg/Sparse/CRSMatrixDiagPrecond.h"
 #include "sparse.h"
@@ -10,6 +9,10 @@
 #include "RunTimeTimer.h"
 #include "CPUTimeTimer.h"
 
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
 int main(int argc, char *argv[])
 {
 	if (argc != 4) {
diff --git a/SimpleTests/SolverTests/ConjugateGradientDiagonalPreconditioned.cpp b/SimpleTests/SolverTests/ConjugateGradientDiagonalPreconditioned.cpp
index d533628c419..30700aa9524 100644
--- a/SimpleTests/SolverTests/ConjugateGradientDiagonalPreconditioned.cpp
+++ b/SimpleTests/SolverTests/ConjugateGradientDiagonalPreconditioned.cpp
@@ -2,7 +2,6 @@
 #include <iostream>
 #include <cmath>
 #include <cstdlib>
-#include <omp.h>
 #include "LinAlg/Solvers/CG.h"
 #include "LinAlg/Sparse/CRSMatrixDiagPrecond.h"
 #include "sparse.h"
@@ -10,6 +9,10 @@
 #include "RunTimeTimer.h"
 #include "CPUTimeTimer.h"
 
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
 int main(int argc, char *argv[])
 {
 	if (argc != 4) {
diff --git a/SimpleTests/SolverTests/ConjugateGradientUnpreconditioned.cpp b/SimpleTests/SolverTests/ConjugateGradientUnpreconditioned.cpp
index 1f0c4cb92b1..96ead4200cf 100644
--- a/SimpleTests/SolverTests/ConjugateGradientUnpreconditioned.cpp
+++ b/SimpleTests/SolverTests/ConjugateGradientUnpreconditioned.cpp
@@ -1,12 +1,15 @@
 #include <fstream>
 #include <iostream>
-#include <omp.h>
 #include "LinAlg/Solvers/CG.h"
 #include "LinAlg/Sparse/CRSMatrix.h"
 #include "sparse.h"
 #include "vector_io.h"
 //#include "timeMeasurement.h"
 
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
 int main(int argc, char *argv[])
 {
 	(void) argc;
-- 
GitLab