Move QMMM source to C++
[gromacs.git] / cmake / gmxTestCompilerProblems.cmake
blob223a1eb642e0049981c8058316864ea96ee10b62
2 # This file is part of the GROMACS molecular simulation package.
4 # Copyright (c) 2012,2013,2014,2015, by the GROMACS development team, led by
5 # Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
6 # and including many others, as listed in the AUTHORS file in the
7 # top-level source directory and at http://www.gromacs.org.
9 # GROMACS is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU Lesser General Public License
11 # as published by the Free Software Foundation; either version 2.1
12 # of the License, or (at your option) any later version.
14 # GROMACS is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 # Lesser General Public License for more details.
19 # You should have received a copy of the GNU Lesser General Public
20 # License along with GROMACS; if not, see
21 # http://www.gnu.org/licenses, or write to the Free Software Foundation,
22 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
24 # If you want to redistribute modifications to GROMACS, please
25 # consider that scientific software is very special. Version
26 # control is crucial - bugs must be traceable. We will be happy to
27 # consider code for inclusion in the official distribution, but
28 # derived work must not be called official GROMACS. Details are found
29 # in the README & COPYING files - if they are missing, get the
30 # official version at http://www.gromacs.org.
32 # To help us fund GROMACS development, we humbly ask that you cite
33 # the research papers on the package. Check out http://www.gromacs.org.
35 # Macro that runs through a number of tests for buggy compiler
36 # versions, or other potential problems.
37 macro(gmx_test_compiler_problems)
39     # Warn if C and C++ compilers do not match
40     if(NOT CMAKE_C_COMPILER_ID STREQUAL CMAKE_CXX_COMPILER_ID)
41         message(WARNING "The ids of the C and C++ compilers do not match (${CMAKE_C_COMPILER_ID} and ${CMAKE_CXX_COMPILER_ID}, respectively). Mixing different C/C++ compilers can cause problems.")
42     endif()
43     if(NOT CMAKE_C_COMPILER_VERSION STREQUAL CMAKE_CXX_COMPILER_VERSION)
44         message(WARNING "The versions of the C and C++ compilers do not match (${CMAKE_C_COMPILER_VERSION} and ${CMAKE_CXX_COMPILER_VERSION}, respectively). Mixing different C/C++ compilers can cause problems.")
45     endif()
47     # gcc 4.4.x is buggy and crashes when compiling some files with O3 and OpenMP on.
48     # Detect here whether applying a workaround is needed and will apply it later
49     # on the affected files. This test must come after gmx_c_flags(), since we
50     # only want to enable the workaround when using the -O3 flag.
51     include(gmxGCC44O3BugWorkaround)
52     gmx_check_gcc44_bug_workaround_needed(GMX_USE_GCC44_BUG_WORKAROUND)
54     # clang 3.0 is buggy for some unknown reason detected during adding
55     # the SSE2 group kernels for GROMACS 4.6. If we ever work out what
56     # that is, we should replace these tests with a compiler feature test,
57     # update GROMACS Redmine task #1039 and perhaps report a clang bug.
58     #
59     # In the meantime, until we require CMake 2.8.10 we cannot rely on it to detect
60     # the compiler version for us. So we need a manual check for clang 3.0.
61     include(gmxDetectClang30)
62     gmx_detect_clang_3_0(COMPILER_IS_CLANG_3_0)
63     if(COMPILER_IS_CLANG_3_0)
64         message(FATAL_ERROR "Your compiler is clang version 3.0, which is known to be buggy for GROMACS. Use a different compiler.")
65     endif()
67     # clang <=3.2 contains a bug that causes incorrect code to be generated for the
68     # vfmaddps instruction and therefore the bug is triggered with AVX_128_FMA.
69     # (see: http://llvm.org/bugs/show_bug.cgi?id=15040).
70     # We can work around this by not using the integrated assembler (except on OS X
71     # which has an outdated assembler that does not support AVX instructions).
72     if (CMAKE_C_COMPILER_ID MATCHES "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_LESS "3.3")
73         set(GMX_USE_CLANG_C_FMA_BUG_WORKAROUND TRUE)
74     endif()
75     if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.3")
76         set(GMX_USE_CLANG_CXX_FMA_BUG_WORKAROUND TRUE)
77     endif()
79     if (CMAKE_C_COMPILER_ID STREQUAL "PGI")
80         message(WARNING "All tested PGI compiler versions (up to 12.9.0) generate binaries which produce incorrect results, or even fail to  compile GROMACS. Highly recommended to use a different compiler. If you choose to use PGI, make sure to run the regressiontests.")
81     endif()
83     if(CMAKE_COMPILER_IS_GNUCC AND
84             (CMAKE_C_COMPILER_VERSION VERSION_LESS "4.9.0" OR CMAKE_SIZEOF_VOID_P EQUAL 8)
85             AND (WIN32 OR CYGWIN)
86             AND GMX_SIMD MATCHES "AVX" AND NOT GMX_SIMD STREQUAL AVX_128_FMA)
87         message(WARNING "GCC on Windows (GCC older than 4.9 or any version when compiling for 64bit) with AVX (other than AVX_128_FMA) crashes. Choose a different GMX_SIMD or a different compiler.") # GCC bug 49001, 54412.
88     endif()
90     if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND WIN32)
91         if(CMAKE_VERSION VERSION_LESS 3.0.0)
92             message(WARNING "Clang on Windows requires cmake 3.0.0")
93         endif()
94         if(CMAKE_C_COMPILER_VERSION VERSION_LESS 3.5.0)
95             message(WARNING "Clang on Windows requires clang 3.5.0")
96         endif()
97     endif()
99     if(CMAKE_C_COMPILER_ID MATCHES "Intel" AND CMAKE_C_COMPILER_VERSION VERSION_LESS "12.0.0")
100         message(WARNING "Intel compilers before 12.0.0 are not routinely tested, so there may be problems. Version 11.1 with SSE4.1 is known to produce incorrect results. It is highly recommended to use a more up-to-date compiler. If you choose to use this version, make sure you run the regressiontests.")
101     endif()
103 endmacro(gmx_test_compiler_problems)