1 macro(check_clzll VARIABLE)
2 check_c_source_compiles(
3 "int main(int argc, char *argv[])
4 {return __builtin_clzll(1LL);}"
9 macro(check_bsr64 VARIABLE)
10 check_c_source_compiles(
11 "int main(int argc, char *argv[])
12 {unsigned long foo; unsigned __int64 bar=1LL;
13 return _BitScanReverse64(&foo, bar);}"
18 macro(find_inline_keyword)
19 #Inspired from http://www.cmake.org/Wiki/CMakeTestInline
20 set(INLINE_TEST_SRC "/* Inspired by autoconf's c.m4 */
21 static inline int static_foo(){return 0\;}
22 int main(int argc, char *argv[]){return 0\;}
24 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCInline.c
27 foreach(KEYWORD "inline" "__inline__" "__inline")
28 if(NOT DEFINED C_INLINE)
29 try_compile(C_HAS_${KEYWORD}
30 ${CMAKE_CURRENT_BINARY_DIR}
31 ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCInline.c
32 COMPILE_DEFINITIONS "-Dinline=${KEYWORD}"
36 add_definitions("-Dinline=${KEYWORD}")
37 message(STATUS "Inline keyword found - ${KEYWORD}")
38 endif(C_HAS_${KEYWORD})
39 endif(NOT DEFINED C_INLINE)
42 if(NOT DEFINED C_INLINE)
43 add_definitions("-Dinline=")
44 message(STATUS "Inline keyword - not found")
45 endif(NOT DEFINED C_INLINE)
46 endmacro(find_inline_keyword)
48 macro(find_restrict_keyword)
49 set(RESTRICT_TEST_SRC "/* Inspired by autoconf's c.m4 */
50 int foo (int * restrict ip){return ip[0]\;}
51 int main(int argc, char *argv[]){int s[1]\;
52 int * restrict t = s\; t[0] = 0\; return foo(t)\;}
55 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCRestrict.c
58 foreach(KEYWORD "restrict" "__restrict" "__restrict__" "_Restrict")
59 if(NOT DEFINED C_RESTRICT)
60 try_compile(C_HAS_${KEYWORD}
61 ${CMAKE_CURRENT_BINARY_DIR}
62 ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCRestrict.c
63 COMPILE_DEFINITIONS "-Drestrict=${KEYWORD}"
67 add_definitions("-Drestrict=${KEYWORD}")
68 message(STATUS "Restrict keyword found - ${KEYWORD}")
69 endif(C_HAS_${KEYWORD})
70 endif(NOT DEFINED C_RESTRICT)
73 if(NOT DEFINED C_RESTRICT)
74 add_definitions("-Drestrict=")
75 message(STATUS "Restrict keyword - not found")
76 endif(NOT DEFINED C_RESTRICT)
77 endmacro(find_restrict_keyword)