|
| 1 | +LOG ( "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" ) |
| 2 | +LOG ( "Checking compiler features:" ) |
| 3 | +LOG ( "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" ) |
| 4 | + |
| 5 | +####################################################################################### |
| 6 | + |
| 7 | + LOG ( "+++++ Checking sizes of types" ) |
| 8 | + CHECK_TYPE_SIZE("void *" CF_SIZEOF_PTR) |
| 9 | + CHECK_TYPE_SIZE(char CF_SIZEOF_CHAR) |
| 10 | + CHECK_TYPE_SIZE(short CF_SIZEOF_SHORT) |
| 11 | + CHECK_TYPE_SIZE(int CF_SIZEOF_INT) |
| 12 | + CHECK_TYPE_SIZE(long CF_SIZEOF_LONG) |
| 13 | + CHECK_TYPE_SIZE(float CF_SIZEOF_FLOAT) |
| 14 | + CHECK_TYPE_SIZE(double CF_SIZEOF_DOUBLE) |
| 15 | + CHECK_TYPE_SIZE("long double" CF_SIZEOF_LONG_DOUBLE) |
| 16 | +# CHECK_TYPE_SIZE(int8_t CF_SIZEOF_INT8_T) |
| 17 | +# CHECK_TYPE_SIZE(uint8_t CF_SIZEOF_UINT8_T) |
| 18 | +# CHECK_TYPE_SIZE(int_least8_t CF_SIZEOF_INT_LEAST8_T) |
| 19 | +# CHECK_TYPE_SIZE(uint_least8_t CF_SIZEOF_UINT_LEAST8_T) |
| 20 | +# CHECK_TYPE_SIZE(int_fast8_t CF_SIZEOF_INT_FAST8_T) |
| 21 | +# CHECK_TYPE_SIZE(uint_fast8_t CF_SIZEOF_UINT_FAST8_T) |
| 22 | +# CHECK_TYPE_SIZE(int16_t CF_SIZEOF_INT16_T) |
| 23 | +# CHECK_TYPE_SIZE(uint16_t CF_SIZEOF_UINT16_T) |
| 24 | +# CHECK_TYPE_SIZE(int_least16_t CF_SIZEOF_INT_LEAST16_T) |
| 25 | +# CHECK_TYPE_SIZE(uint_least16_t CF_SIZEOF_UINT_LEAST16_T) |
| 26 | +# CHECK_TYPE_SIZE(int_fast16_t CF_SIZEOF_INT_FAST16_T) |
| 27 | +# CHECK_TYPE_SIZE(uint_fast16_t CF_SIZEOF_UINT_FAST16_T) |
| 28 | +# CHECK_TYPE_SIZE(int32_t CF_SIZEOF_INT32_T) |
| 29 | +# CHECK_TYPE_SIZE(uint32_t CF_SIZEOF_UINT32_T) |
| 30 | +# CHECK_TYPE_SIZE(int_least32_t CF_SIZEOF_INT_LEAST32_T) |
| 31 | +# CHECK_TYPE_SIZE(uint_least32_t CF_SIZEOF_UINT_LEAST32_T) |
| 32 | +# CHECK_TYPE_SIZE(int_fast32_t CF_SIZEOF_INT_FAST32_T) |
| 33 | +# CHECK_TYPE_SIZE(uint_fast32_t CF_SIZEOF_UINT_FAST32_T) |
| 34 | +# CHECK_TYPE_SIZE(int64_t CF_SIZEOF_INT64_T) |
| 35 | +# CHECK_TYPE_SIZE(uint64_t CF_SIZEOF_UINT64_T) |
| 36 | +# CHECK_TYPE_SIZE(int_least64_t CF_SIZEOF_INT_LEAST64_T) |
| 37 | +# CHECK_TYPE_SIZE(uint_least64_t CF_SIZEOF_UINT_LEAST64_T) |
| 38 | +# CHECK_TYPE_SIZE(int_fast64_t CF_SIZEOF_INT_FAST64_T) |
| 39 | +# CHECK_TYPE_SIZE(uint_fast64_t CF_SIZEOF_UINT_FAST64_T) |
| 40 | + CHECK_TYPE_SIZE(size_t CF_SIZEOF_SIZE_T) |
| 41 | +# CHECK_TYPE_SIZE(ssize_t CF_SIZEOF_SSIZE_T) |
| 42 | +# CHECK_TYPE_SIZE(off_t CF_SIZEOF_OFF_T) |
| 43 | +# CHECK_TYPE_SIZE(__int64 CF_SIZEOF___INT64) |
| 44 | + CHECK_TYPE_SIZE("long long" CF_SIZEOF_LONG_LONG) |
| 45 | + |
| 46 | + MATH ( EXPR CF_OS_BITS "${CF_SIZEOF_PTR} * 8") |
| 47 | + |
| 48 | +####################################################################################### |
| 49 | + |
| 50 | + LOG ( "+++++ Checking MPI support" ) |
| 51 | + INCLUDE(CheckMPI) |
| 52 | + |
| 53 | +####################################################################################### |
| 54 | + |
| 55 | + # LOG ( "+++++ Checking for pre compiled header support" ) |
| 56 | + # INCLUDE(CheckPreCompiledHeaderSupport) |
| 57 | + |
| 58 | +####################################################################################### |
| 59 | + |
| 60 | + LOG ( "+++++ Checking C++ compiler has namespaces" ) |
| 61 | + CHECK_CXX_SOURCE_COMPILES ( |
| 62 | + " namespace lolo { struct popo { int i; }; } |
| 63 | + using namespace lolo; |
| 64 | + int main(int argc, char* argv[]) |
| 65 | + { |
| 66 | + lolo::popo p; |
| 67 | + popo pp; |
| 68 | + return 0; |
| 69 | + } |
| 70 | + " |
| 71 | + CF_CXX_HAVE_NAMESPACES) |
| 72 | + IF( NOT CF_CXX_HAVE_NAMESPACES ) |
| 73 | + MESSAGE ( FATAL_ERROR "C++ compiler does not support namespaces" ) |
| 74 | + ENDIF() |
| 75 | + |
| 76 | +####################################################################################### |
| 77 | + |
| 78 | + LOG ( "+++++ Checking for __FUNCTION__ support" ) |
| 79 | + INCLUDE(CheckFunctionDef) |
| 80 | + |
| 81 | +####################################################################################### |
| 82 | + |
| 83 | + LOG ( "+++++ Checking for restrict keyword" ) |
| 84 | + INCLUDE(CheckRestrictKeyword) |
| 85 | + |
| 86 | +####################################################################################### |
| 87 | + |
| 88 | + # LOG ( "+++++ Checking for explicit template support" ) # output in macro |
| 89 | + INCLUDE ( CheckExplicitInstantiation ) |
| 90 | + |
| 91 | +####################################################################################### |
| 92 | + |
| 93 | + LOG ( "+++++ Checking for mmap support" ) # check memory mmap functions |
| 94 | + # check memory mmap functions |
| 95 | + CHECK_FUNCTION_EXISTS(mmap CF_HAVE_MMAP) |
| 96 | + CHECK_FUNCTION_EXISTS(munmap CF_HAVE_MUNMAP) |
| 97 | + CHECK_FUNCTION_EXISTS(mremap CF_HAVE_MREMAP) |
| 98 | + IF(CF_HAVE_MMAP AND CF_HAVE_MUNMAP AND CF_HAVE_MREMAP) |
| 99 | + SET( CF_HAVE_ALLOC_MMAP 1 CACHE BOOL "MemoryAllocator_MMAP can be built") |
| 100 | + ENDIF() |
| 101 | + |
| 102 | +####################################################################################### |
| 103 | + |
| 104 | + LOG ( "+++++ Checking for vsnprintf function" ) # check memory mmap functions |
| 105 | + CHECK_FUNCTION_EXISTS(vsnprintf CF_HAVE_VSNPRINTF) |
| 106 | + |
| 107 | +####################################################################################### |
| 108 | + |
| 109 | + LOG ( "+++++ Checking for erfc function" ) |
| 110 | + CHECK_CXX_SOURCE_COMPILES ( |
| 111 | + " #include <cmath> |
| 112 | + int main (int argc, char* argv[]) { erfc (0.); } |
| 113 | + " |
| 114 | + CF_HAVE_MATH_ERFC ) |
| 115 | + |
| 116 | +####################################################################################### |
| 117 | + |
| 118 | + LOG ( "+++++ Checking for asinh function" ) |
| 119 | + CHECK_CXX_SOURCE_COMPILES ( |
| 120 | + " #include <cmath> |
| 121 | + int main (int argc, char* argv[]) { asinh (0.); } |
| 122 | + " |
| 123 | + CF_HAVE_MATH_ASINH ) |
| 124 | + |
| 125 | +####################################################################################### |
| 126 | + |
| 127 | + LOG ( "+++++ Checking for acosh function" ) |
| 128 | + CHECK_CXX_SOURCE_COMPILES ( |
| 129 | + " #include <cmath> |
| 130 | + int main (int argc, char* argv[]) { acosh (0.); } |
| 131 | + " |
| 132 | + CF_HAVE_MATH_ACOSH ) |
| 133 | + |
| 134 | +####################################################################################### |
| 135 | + |
| 136 | + LOG ( "+++++ Checking for atanh function" ) |
| 137 | + CHECK_CXX_SOURCE_COMPILES ( |
| 138 | + " #include <cmath> |
| 139 | + int main (int argc, char* argv[]) { atanh (0.); } |
| 140 | + " |
| 141 | + CF_HAVE_MATH_ATANH) |
| 142 | + |
| 143 | +####################################################################################### |
| 144 | + |
| 145 | + LOG ( "+++++ Checking for the POSIX unistd.h header" ) # check unistd.h |
| 146 | + CHECK_INCLUDE_FILE( unistd.h CF_HAVE_UNISTD_H ) |
| 147 | + |
| 148 | +####################################################################################### |
| 149 | + |
| 150 | + # check for c++ abi, ussually present in GNU compilers |
| 151 | + LOG ( "+++++ Checking for cxxabi" ) |
| 152 | + |
| 153 | + CHECK_CXX_SOURCE_COMPILES ( |
| 154 | + "#include <cxxabi.h> |
| 155 | + int main(int argc, char* argv[]) |
| 156 | + { char * type; int status; |
| 157 | + char * r = abi::__cxa_demangle(type, 0, 0, &status); |
| 158 | + return 0; |
| 159 | + }" |
| 160 | + CF_HAVE_CXXABI_H) |
| 161 | + |
| 162 | +####################################################################################### |
| 163 | + |
| 164 | + # check for time headers |
| 165 | + LOG ( "+++++ Checking for headers with time information" ) |
| 166 | + CHECK_INCLUDE_FILE(sys/time.h CF_HAVE_SYS_TIME_H) |
| 167 | + CHECK_INCLUDE_FILE(time.h CF_HAVE_TIME_H) |
| 168 | + CHECK_INCLUDE_FILE(sys/resource.h CF_HAVE_SYS_RESOURCE_H) |
| 169 | + CHECK_FUNCTION_EXISTS(gettimeofday CF_HAVE_GETTIMEOFDAY) |
| 170 | + |
| 171 | +####################################################################################### |
| 172 | +# Win32 specific |
| 173 | +####################################################################################### |
| 174 | + |
| 175 | +IF(WIN32) |
| 176 | + |
| 177 | + LOG ( "+++++ Checking for the Win32 windows.h header" ) # check windows.hfor Windows API |
| 178 | + CHECK_INCLUDE_FILE_CXX(windows.h CF_HAVE_WINDOWSH) |
| 179 | + LOG ( "+++++ Checking for the Win32 dbghelp.h header" ) # check dbghelp.h for call stack |
| 180 | + CHECK_INCLUDE_FILE_CXX(dbghelp.h CF_HAVE_DBGHELPH) |
| 181 | + LOG ( "+++++ Checking for the Win32 psapi.h header" ) # check psapi.h for memory info |
| 182 | + CHECK_INCLUDE_FILE_CXX(psapi.h CF_HAVE_PSAPIH) |
| 183 | + |
| 184 | +ENDIF() |
| 185 | + |
| 186 | +####################################################################################### |
| 187 | +# UNIX specific |
| 188 | +####################################################################################### |
| 189 | + |
| 190 | +IF(UNIX) |
| 191 | + |
| 192 | + LOG ( "+++++ Checking for the dlfcn.h header" ) # for dlopen |
| 193 | + CHECK_INCLUDE_FILE_CXX(dlfcn.h CF_HAVE_DLOPEN) |
| 194 | + |
| 195 | +ENDIF() |
| 196 | + |
0 commit comments