additional fix to commit c5d62af07d01b8, now libmd also get suffixes
[gromacs/rigid-bodies.git] / cmake / gmxCFlags.cmake
blobf4ff02ca5ff957cfb23b2975f989a387a21c5497
1 MACRO(gmx_c_flags)
3 include(CheckCCompilerFlag)
4 include(CheckCXXCompilerFlag)
6 if(CMAKE_COMPILER_IS_GNUCC)
7 # this one is set by cmake depending on the build target
8 #  CHECK_C_COMPILER_FLAG( "-O3" XFLAGS_O3)
9 #  if (XFLAGS_O3)
10 #    set(GMXC_C_FLAGS " -O3 ${GMXC_C_FLAGS}")
11 #  endif()
13   CHECK_C_COMPILER_FLAG( "-Wall -Wno-unused" XFLAGS_WARN)
14   if (XFLAGS_WARN)
15     set(GMXC_C_FLAGS "-Wall -Wno-unused ${GMXC_C_FLAGS}")
16   endif()
18 #  CHECK_C_COMPILER_FLAG( "-std=gnu99" XFLAGS_GNU99)
19 #  if (XFLAGS_GNU99)
20 #    set(GMXC_C_FLAGS "-std=gnu99 ${GMXC_C_FLAGS}")
21 #  endif()
23   CHECK_C_COMPILER_FLAG( "-march=native" XFLAGS_MARCH)
24   if (XFLAGS_MARCH)
25     set(GMXC_C_FLAGS "-march=native ${GMXC_C_FLAGS}")
26   endif()
28   # new in gcc 4.5
29   CHECK_C_COMPILER_FLAG( "-fexcess-precision=fast" XFLAGS_EXCESS_PRECISION)
30   if (XFLAGS_EXCESS_PRECISION)
31     set(GMXC_C_FLAGS "-fexcess-precision=fast ${GMXC_C_FLAGS}")
32   endif()
34   CHECK_C_COMPILER_FLAG( "-fomit-frame-pointer -finline-functions -funroll-all-loops" XFLAGS_OPT)
35   if (XFLAGS_OPT)
36     set(GMXC_C_FLAGS_RELEASE "-fomit-frame-pointer -finline-functions -funroll-all-loops ${GMXC_C_FLAGS_RELEASE}")
37   endif()
38 endif()
41 if(CMAKE_COMPILER_IS_GNUCXX )
42 # this one is set by cmake depending on the build target
43 #  CHECK_CXX_COMPILER_FLAG( "-O3" XXFLAGS_O3)
44 #  if (XXFLAGS_O3)
45 ##    set(GMXC_CXX_FLAGS " -O3 ${GMXC_CXX_FLAGS}")
46 #  endif()
48   CHECK_CXX_COMPILER_FLAG( "-Wall -Wno-unused" XXFLAGS_WARN)
49   if (XXFLAGS_WARN)
50     set(GMXC_CXX_FLAGS "-Wall -Wno-unused ${GMXC_CXX_FLAGS}")
51   endif()
53   CHECK_CXX_COMPILER_FLAG( "-march=native" XXFLAGS_MARCH)
54   if (XXFLAGS_MARCH)
55     set(GMXC_CXX_FLAGS "-march=native ${GMXC_CXX_FLAGS}")
56   endif()
57   # new in gcc 4.5
58   CHECK_CXX_COMPILER_FLAG( "-fexcess-precision=fast" XXFLAGS_EXCESS_PRECISION)
59   if (XXFLAGS_EXCESS_PRECISION)
60     set(GMXC_CXX_FLAGS "-fexcess-precision=fast ${GMXC_CXX_FLAGS}")
61   endif()
63   CHECK_CXX_COMPILER_FLAG( "-fomit-frame-pointer -finline-functions -funroll-all-loops" XXFLAGS_OPT)
64   if (XXFLAGS_OPT)
65     set(GMXC_CXX_FLAGS_RELEASE "-fomit-frame-pointer -finline-functions -funroll-all-loops ${GMXC_CXX_FLAGS_RELEASE}")
66   endif()
67 endif()
70 # icc
71 if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
72     if (NOT WIN32) 
73         CHECK_C_COMPILER_FLAG("-ip -w -funroll-all-loops -std=gnu99" XFLAGS_OPT)
74         if (XFLAGS_OPT)
75             set(GMXC_C_FLAGS "-ip -w -funroll-all-loops -std=gnu99 ${GMXC_C_FLAGS}")
76         endif()
77         CHECK_C_COMPILER_FLAG("-msse2" XFLAGS_OPT_SSE2)
78         if (XFLAGS_OPT_SSE2)
79             set(GMXC_C_FLAGS "-msse2 ${GMXC_C_FLAGS}")
80         endif()
81         CHECK_C_COMPILER_FLAG("-mtune=core2" XFLAGS_OPT_X86)
82         if (XFLAGS_OPT_X86)
83             set(GMXC_C_FLAGS "-mtune=core2 ${GMXC_C_FLAGS}")
84         endif()
85         CHECK_C_COMPILER_FLAG("-mtune=itanium2" XFLAGS_OPT_IA64)
86         if (XFLAGS_OPT_IA64)
87             set(GMXC_C_FLAGS "-mtune=itanium2 ${GMXC_C_FLAGS}")
88         endif()
89     else()
90         CHECK_C_COMPILER_FLAG("/Qip " XFLAGS_OPT)
91         if (XFLAGS_OPT)
92             set(GMXC_C_FLAGS "/Qip ${GMXC_CXX_FLAGS}")
93         endif()
94         CHECK_C_COMPILER_FLAG("/arch:SSE2" XFLAGS_OPT_SSE2)
95         if (XFLAGS_OPT_SSE2)
96             set(GMXC_C_FLAGS "/arch:SSE2 ${GMXC_C_FLAGS}")
97         endif()
98     endif()
99 endif()
101 if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
102     if (NOT WIN32) 
103         CHECK_CXX_COMPILER_FLAG("-ip -w -funroll-all-loops -std=gnu99" XXFLAGS_OPT)
104         if (XXFLAGS_OPT)
105             set(GMXC_CXX_FLAGS "-ip -w -funroll-all-loops ${GMXC_CXX_FLAGS}")
106         endif()
107         CHECK_CXX_COMPILER_FLAG("-msse2" XXFLAGS_OPT_SSE2)
108         if (XXFLAGS_OPT_SSE2)
109             set(GMXC_CXX_FLAGS "-msse2 ${GMXC_CXX_FLAGS}")
110         endif()
111         CHECK_CXX_COMPILER_FLAG("-mtune=pentium4" XXFLAGS_OPT_X86)
112         if (XXFLAGS_OPT_X86)
113             set(GMXC_CXX_FLAGS "-mtune=pentium4 ${GMXC_CXX_FLAGS}")
114         endif()
115         CHECK_CXX_COMPILER_FLAG("-mtune=core2" XXFLAGS_OPT_X86)
116         if (XXFLAGS_OPT_X86)
117             set(GMXC_CXX_FLAGS "-mtune=core2 ${GMXC_CXX_FLAGS}")
118         endif()
119         CHECK_CXX_COMPILER_FLAG("-mtune=itanium2" XXFLAGS_OPT_IA64)
120         if (XXFLAGS_OPT_IA64)
121             set(GMXC_CXX_FLAGS "-mtune=itanium2 ${GMXC_CXX_FLAGS}")
122         endif()
123     else()
124         CHECK_CXX_COMPILER_FLAG("/Qip " XXFLAGS_OPT)
125         if (XXFLAGS_OPT)
126             set(GMXC_CXX_FLAGS "/Qip ${GMXC_CXX_FLAGS}")
127         endif()
128         CHECK_CXX_COMPILER_FLAG("/arch:SSE2" XXFLAGS_OPT_SSE2)
129         if (XXFLAGS_OPT_SSE2)
130             set(GMXC_CXX_FLAGS "/arch:SSE2 ${GMXC_CXX_FLAGS}")
131         endif()
132     endif()
133 endif()
135 #TODO: other compilers, like xlc
137 # now actually set the flags:
138 if (NOT DEFINED GMXCFLAGS_SET)
139     set(GMXCFLAGS_SET true CACHE INTERNAL "Whether to reset the C flags" FORCE)
140     # C
141     set(CMAKE_C_FLAGS "${GMXC_C_FLAGS} ${CMAKE_C_FLAGS}" 
142         CACHE STRING "Flags used by the compiler during all build types" FORCE)
143     set(CMAKE_C_FLAGS_RELEASE "${GMXC_C_FLAGS_RELEASE} ${CMAKE_C_FLAGS_RELEASE}" 
144         CACHE STRING "Flags used by the compiler during release build" FORCE)
145     # C++
146     set(CMAKE_CXX_FLAGS "${GMXC_CXX_FLAGS} ${CMAKE_CXX_FLAGS}" 
147         CACHE STRING "Flags used by the compiler during all build types" FORCE)
148     set(CMAKE_CXX_FLAGS_RELEASE "${GMXC_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS_RELEASE}" 
149         CACHE STRING "Flags used by the compiler during all release build" FORCE)
150 endif()
152 ENDMACRO(gmx_c_flags)