Support CLZ intrinsic for VC.
[platform/upstream/libaec.git] / CMakeLists.txt
1 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.6)
2 INCLUDE(CheckIncludeFiles)
3 INCLUDE(TestBigEndian)
4 INCLUDE(CheckCSourceCompiles)
5 INCLUDE(GenerateExportHeader)
6 PROJECT(libaec)
7 SET(libaec_VERSION_MAJOR 0)
8 SET(libaec_VERSION_MINOR 2)
9 SET(CMAKE_BUILD_TYPE Release)
10 ENABLE_TESTING()
11
12 CHECK_INCLUDE_FILES(malloc.h HAVE_MALLOC_H)
13 CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
14 TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
15 CHECK_C_SOURCE_COMPILES(
16   "int main(int argc, char *argv[])
17 {return __builtin_clzll(1LL);}"
18   HAVE_DECL___BUILTIN_CLZLL
19   )
20 IF (NOT HAVE_DECL___BUILTIN_CLZLL)
21   CHECK_C_SOURCE_COMPILES(
22     "int main(int argc, char *argv[])
23 {unsigned long foo; unsigned __int64 bar=1LL;
24 return _BitScanReverse64(&foo, bar);}"
25     HAVE_BSR64
26   )
27 ENDIF (NOT HAVE_DECL___BUILTIN_CLZLL)
28
29 #Inspired from http://www.cmake.org/Wiki/CMakeTestInline
30 SET(INLINE_TEST_SRC "/* Inspired by autoconf's c.m4 */
31 static inline int static_foo(){return 0\;}
32 int main(int argc, char *argv[]){return 0\;}
33 ")
34 FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCInline.c
35   ${INLINE_TEST_SRC})
36
37 FOREACH(KEYWORD "inline" "__inline__" "__inline")
38    IF(NOT DEFINED C_INLINE)
39      TRY_COMPILE(C_HAS_${KEYWORD}
40        ${CMAKE_CURRENT_BINARY_DIR}
41        ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCInline.c
42        COMPILE_DEFINITIONS "-Dinline=${KEYWORD}"
43        )
44      IF(C_HAS_${KEYWORD})
45        SET(C_INLINE TRUE)
46        ADD_DEFINITIONS("-Dinline=${KEYWORD}")
47      ENDIF(C_HAS_${KEYWORD})
48    ENDIF(NOT DEFINED C_INLINE)
49 ENDFOREACH(KEYWORD)
50
51 IF(NOT DEFINED C_INLINE)
52    ADD_DEFINITIONS("-Dinline=")
53 ENDIF(NOT DEFINED C_INLINE)
54
55 SET(RESTRICT_TEST_SRC "/* Inspired by autoconf's c.m4 */
56 int foo (int * restrict ip){return ip[0]\;}
57 int main(int argc, char *argv[]){int s[1]\;
58 int * restrict t = s\; t[0] = 0\; return foo(t)\;}
59 ")
60
61 FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCRestrict.c
62   ${RESTRICT_TEST_SRC})
63
64 FOREACH(KEYWORD "restrict" "__restrict" "__restrict__" "_Restrict")
65    IF(NOT DEFINED C_RESTRICT)
66      TRY_COMPILE(C_HAS_${KEYWORD}
67        ${CMAKE_CURRENT_BINARY_DIR}
68        ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCRestrict.c
69        COMPILE_DEFINITIONS "-Drestrict=${KEYWORD}"
70        )
71      IF(C_HAS_${KEYWORD})
72        SET(C_RESTRICT TRUE)
73        ADD_DEFINITIONS("-Drestrict=${KEYWORD}")
74      ENDIF(C_HAS_${KEYWORD})
75    ENDIF(NOT DEFINED C_RESTRICT)
76 ENDFOREACH(KEYWORD)
77
78 IF(NOT DEFINED C_RESTRICT)
79    ADD_DEFINITIONS("-Drestrict=")
80 ENDIF(NOT DEFINED C_RESTRICT)
81
82 CONFIGURE_FILE(
83   ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
84   ${CMAKE_CURRENT_BINARY_DIR}/config.h
85   )
86
87 SET(BUILD_SHARED_LIBS FALSE)
88 INCLUDE_DIRECTORIES("${PROJECT_BINARY_DIR}")
89 INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/src")
90
91 ADD_SUBDIRECTORY(src)
92 IF(WIN32)
93   ADD_SUBDIRECTORY(tests)
94 ELSE(WIN32)
95   ADD_SUBDIRECTORY(tests EXCLUDE_FROM_ALL)
96 ENDIF(WIN32)