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)
10 # set(GMXC_C_FLAGS " -O3 ${GMXC_C_FLAGS}")
13 CHECK_C_COMPILER_FLAG( "-Wall -Wno-unused" XFLAGS_WARN)
15 set(GMXC_C_FLAGS "-Wall -Wno-unused ${GMXC_C_FLAGS}")
18 # CHECK_C_COMPILER_FLAG( "-std=gnu99" XFLAGS_GNU99)
20 # set(GMXC_C_FLAGS "-std=gnu99 ${GMXC_C_FLAGS}")
23 CHECK_C_COMPILER_FLAG( "-march=native" XFLAGS_MARCH)
25 set(GMXC_C_FLAGS "-march=native ${GMXC_C_FLAGS}")
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}")
34 CHECK_C_COMPILER_FLAG( "-fomit-frame-pointer -finline-functions -funroll-all-loops" XFLAGS_OPT)
36 set(GMXC_C_FLAGS_RELEASE "-fomit-frame-pointer -finline-functions -funroll-all-loops ${GMXC_C_FLAGS_RELEASE}")
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)
45 ## set(GMXC_CXX_FLAGS " -O3 ${GMXC_CXX_FLAGS}")
48 CHECK_CXX_COMPILER_FLAG( "-Wall -Wno-unused" XXFLAGS_WARN)
50 set(GMXC_CXX_FLAGS "-Wall -Wno-unused ${GMXC_CXX_FLAGS}")
53 CHECK_CXX_COMPILER_FLAG( "-march=native" XXFLAGS_MARCH)
55 set(GMXC_CXX_FLAGS "-march=native ${GMXC_CXX_FLAGS}")
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}")
63 CHECK_CXX_COMPILER_FLAG( "-fomit-frame-pointer -finline-functions -funroll-all-loops" XXFLAGS_OPT)
65 set(GMXC_CXX_FLAGS_RELEASE "-fomit-frame-pointer -finline-functions -funroll-all-loops ${GMXC_CXX_FLAGS_RELEASE}")
71 if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
73 CHECK_C_COMPILER_FLAG("-ip -w -funroll-all-loops -std=gnu99" XFLAGS_OPT)
75 set(GMXC_C_FLAGS "-ip -w -funroll-all-loops -std=gnu99 ${GMXC_C_FLAGS}")
77 CHECK_C_COMPILER_FLAG("-msse2" XFLAGS_OPT_SSE2)
79 set(GMXC_C_FLAGS "-msse2 ${GMXC_C_FLAGS}")
81 CHECK_C_COMPILER_FLAG("-mtune=core2" XFLAGS_OPT_X86)
83 set(GMXC_C_FLAGS "-mtune=core2 ${GMXC_C_FLAGS}")
85 CHECK_C_COMPILER_FLAG("-mtune=itanium2" XFLAGS_OPT_IA64)
87 set(GMXC_C_FLAGS "-mtune=itanium2 ${GMXC_C_FLAGS}")
90 CHECK_C_COMPILER_FLAG("/Qip " XFLAGS_OPT)
92 set(GMXC_C_FLAGS "/Qip ${GMXC_CXX_FLAGS}")
94 CHECK_C_COMPILER_FLAG("/arch:SSE2" XFLAGS_OPT_SSE2)
96 set(GMXC_C_FLAGS "/arch:SSE2 ${GMXC_C_FLAGS}")
101 if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
103 CHECK_CXX_COMPILER_FLAG("-ip -w -funroll-all-loops -std=gnu99" XXFLAGS_OPT)
105 set(GMXC_CXX_FLAGS "-ip -w -funroll-all-loops ${GMXC_CXX_FLAGS}")
107 CHECK_CXX_COMPILER_FLAG("-msse2" XXFLAGS_OPT_SSE2)
108 if (XXFLAGS_OPT_SSE2)
109 set(GMXC_CXX_FLAGS "-msse2 ${GMXC_CXX_FLAGS}")
111 CHECK_CXX_COMPILER_FLAG("-mtune=pentium4" XXFLAGS_OPT_X86)
113 set(GMXC_CXX_FLAGS "-mtune=pentium4 ${GMXC_CXX_FLAGS}")
115 CHECK_CXX_COMPILER_FLAG("-mtune=core2" XXFLAGS_OPT_X86)
117 set(GMXC_CXX_FLAGS "-mtune=core2 ${GMXC_CXX_FLAGS}")
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}")
124 CHECK_CXX_COMPILER_FLAG("/Qip " XXFLAGS_OPT)
126 set(GMXC_CXX_FLAGS "/Qip ${GMXC_CXX_FLAGS}")
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}")
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)
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)
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)
152 ENDMACRO(gmx_c_flags)