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