]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Reorganize the setup_compiler_* files
authormaier <maier@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 18 Sep 2012 20:14:01 +0000 (20:14 +0000)
committermaier <maier@0785d39b-7218-0410-832d-ea1e28bc413d>
Tue, 18 Sep 2012 20:14:01 +0000 (20:14 +0000)
git-svn-id: https://svn.dealii.org/branches/branch_cmake@26482 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/contrib/cmake/setup_compiler_flags.cmake
deal.II/contrib/cmake/setup_compiler_flags_gnu.cmake [new file with mode: 0644]

index c21a02eb90b02616aeace2bb8ce698362ef484f3..f9fa254c027a64883d6ebead83ed7272e4692ace 100644 (file)
 #
 # Setup default compiler flags:
 #
-# FAT NOTE:
-#
-# TODO
+# This file sets up sensible default compiler flags for the various
+# platforms, compilers and build targets supported by the deal.II
+# library.
 #
 
 #
-# TODO: For the moment assume that CC and CXX are the same compilers...
+#   ####################
+#   #     FAT NOTE:    #
+#   ####################
+#
+# As a rule of thumb: All configuration in setup_compiler_flags.cmake and
+# setup_compiler_flags_<compiler>.cmake shall ONLY consist of CFLAGS,
+# CXXFLAGS and LINKER_FLAGS being set.
+#
+# Checks for compiler features (such as C++11 support) and compiler
+# specific bugs that set up further configuration (such as definitions)
+# belong to
+#
+# ./check/check_for_compiler_features.cmake
+# ./check/check_for_compiler_bugs.cmake
+# ./check/check_for_cxx_features.cmake
+#
+# TODO: There is a bit of ambiguity. Clarify with Wolfgang.
 #
 
 
+#
+# For the moment we assume that CC and CXX are the same compilers.
+# (We only need CC for the compilation of the bundled umfpack library.)
+# So, give a prominent error message in case CC and CXX differ:
+#
+IF(NOT ( ${CMAKE_C_COMPILER_ID} STREQUAL ${CMAKE_CXX_COMPILER_ID} AND
+         ${CMAKE_C_COMPILER_VERSION} STREQUAL ${CMAKE_CXX_COMPILER_VERSION} ) )
+    MESSAGE(SEND_ERROR "\n"
+      "Configuration error: The specified C and CXX compiler have to be the "
+      "same, but found:\n"
+      "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}\n"
+      "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}\n"
+      )
+ENDIF()
 
 
-#######################################################
-#                                                     #
-#    General setup for GCC and GCC like compilers:    #
-#                                                     #
-#######################################################
+#
+# General setup for GCC and compilers sufficiently close to GCC:
+#
 
 IF( CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR
     CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
+  INCLUDE(setup_compiler_flags_gnu)
+  SET(DEAL_II_KNOWN_COMPILER TRUE)
+ENDIF()
 
-  ########################
-  #                      #
-  #    General setup:    #
-  #                      #
-  ########################
-
-  #
-  # Set the pic flag.
-  # On some systems, -fpic/PIC is implied, so don't set anything to avoid
-  # a warning. (TODO)
-  #
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-fpic")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-fpic")
-
-  #
-  # Check whether the -as-needed flag is available. If so set it to link
-  # the deal.II library with it.
-  #
-  ENABLE_IF_AVAILABLE(CMAKE_SHARED_LINKER_FLAGS "-Wl,-as-needed")
-
-  #
-  # Set -pedantic if the compiler supports it.
-  # Do not enable -pedantic for gcc-4.4, though...
-  #
-  IF(NOT ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION MATCHES "4.4." ))
-    ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-pedantic")
-    ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-pedantic")
-  ENDIF()
-
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wall")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wall")
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wpointer-arith")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wpointer-arith")
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wwrite-strings")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wwrite-strings")
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wsynth")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wsynth")
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wsign-compare")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wsign-compare")
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wswitch")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wswitch")
-
-  #################################
-  #                               #
-  #    For the Release target:    #
-  #                               #
-  #################################
-
-  #
-  # General optimization flags:
-  #
-  ADD_FLAGS(CMAKE_C_FLAGS_RELEASE "-O2")
-  ADD_FLAGS(CMAKE_CXX_FLAGS_RELEASE "-O2")
-
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS_RELEASE "-funroll-loops")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS_RELEASE "-funroll-loops")
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS_RELEASE "-fstrict-aliasing")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS_RELEASE "-fstrict-aliasing")
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS_RELEASE "-felide-constructors")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS_RELEASE "-felide-constructors")
-
-  ###############################
-  #                             #
-  #    For the Debug target:    #
-  #                             #
-  ###############################
-
-  IF (CMAKE_BUILD_TYPE MATCHES "Debug")
-    ADD_DEFINITIONS("-DDEBUG")
-  ENDIF()
-
-  ADD_FLAGS(CMAKE_C_FLAGS_DEBUG "-O0")
-  ADD_FLAGS(CMAKE_CXX_FLAGS_DEBUG "-O0")
-
-  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS_DEBUG "-ggdb")
-  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS_DEBUG "-ggdb")
-  ENABLE_IF_AVAILABLE(CMAKE_SHARED_LINKER_FLAGS "-ggdb")
-  IF(NOT DEAL_II_HAVE_FLAG_-ggdb)
-    # If -ggdb is not available, fall back to -g:
-    ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS_DEBUG "-g")
-    ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS_DEBUG "-g")
-    ENABLE_IF_AVAILABLE(CMAKE_SHARED_LINKER_FLAGS "-g")
-  ENDIF()
-
-ELSE()
 
-  MESSAGE(WARNING "Unrecognized compiler. Please set the relevant compiler options by hand.")
+IF(NOT DEAL_II_KNOWN_COMPILER)
+  MESSAGE(WARNING "\n"
+    "Unrecognized compiler!\n\n"
+    "Please set the relevant compiler options by hand.\n")
 ENDIF()
 
diff --git a/deal.II/contrib/cmake/setup_compiler_flags_gnu.cmake b/deal.II/contrib/cmake/setup_compiler_flags_gnu.cmake
new file mode 100644 (file)
index 0000000..d426a75
--- /dev/null
@@ -0,0 +1,91 @@
+#
+# General setup for GCC and compilers sufficiently close to GCC
+#
+# Please read the fat note in setup_compiler_flags.cmake prior to editing
+# this file.
+#
+
+
+########################
+#                      #
+#    General setup:    #
+#                      #
+########################
+
+#
+# Set the pic flag.
+# On some systems, -fpic/PIC is implied, so don't set anything to avoid
+# a warning. (TODO)
+#
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-fpic")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-fpic")
+
+#
+# Check whether the -as-needed flag is available. If so set it to link
+# the deal.II library with it.
+#
+ENABLE_IF_AVAILABLE(CMAKE_SHARED_LINKER_FLAGS "-Wl,-as-needed")
+
+#
+# Set -pedantic if the compiler supports it.
+# Do not enable -pedantic for gcc-4.4, though...
+#
+IF(NOT ( CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION MATCHES "4.4." ))
+  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-pedantic")
+  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-pedantic")
+ENDIF()
+
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wall")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wall")
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wpointer-arith")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wpointer-arith")
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wwrite-strings")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wwrite-strings")
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wsynth")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wsynth")
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wsign-compare")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wsign-compare")
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS "-Wswitch")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS "-Wswitch")
+
+#################################
+#                               #
+#    For the Release target:    #
+#                               #
+#################################
+
+#
+# General optimization flags:
+#
+ADD_FLAGS(CMAKE_C_FLAGS_RELEASE "-O2")
+ADD_FLAGS(CMAKE_CXX_FLAGS_RELEASE "-O2")
+
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS_RELEASE "-funroll-loops")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS_RELEASE "-funroll-loops")
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS_RELEASE "-fstrict-aliasing")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS_RELEASE "-fstrict-aliasing")
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS_RELEASE "-felide-constructors")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS_RELEASE "-felide-constructors")
+
+###############################
+#                             #
+#    For the Debug target:    #
+#                             #
+###############################
+
+IF (CMAKE_BUILD_TYPE MATCHES "Debug")
+  ADD_DEFINITIONS("-DDEBUG")
+ENDIF()
+
+ADD_FLAGS(CMAKE_C_FLAGS_DEBUG "-O0")
+ADD_FLAGS(CMAKE_CXX_FLAGS_DEBUG "-O0")
+
+ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS_DEBUG "-ggdb")
+ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS_DEBUG "-ggdb")
+ENABLE_IF_AVAILABLE(CMAKE_SHARED_LINKER_FLAGS "-ggdb")
+IF(NOT DEAL_II_HAVE_FLAG_-ggdb)
+  # If -ggdb is not available, fall back to -g:
+  ENABLE_IF_AVAILABLE(CMAKE_C_FLAGS_DEBUG "-g")
+  ENABLE_IF_AVAILABLE(CMAKE_CXX_FLAGS_DEBUG "-g")
+  ENABLE_IF_AVAILABLE(CMAKE_SHARED_LINKER_FLAGS "-g")
+ENDIF()

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.