From 6e67b01cfc0d196970f65ef9fd8245f01850f729 Mon Sep 17 00:00:00 2001 From: Mathis Rosenhauer Date: Fri, 25 Jul 2014 11:00:04 +0200 Subject: [PATCH] Move some CMake chunks as macros in separate file --- .gitignore | 4 +-- CMakeLists.txt | 75 +++++--------------------------------- config.h.in => cmake/config.h.in | 0 cmake/macros.cmake | 77 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 70 deletions(-) rename config.h.in => cmake/config.h.in (100%) create mode 100644 cmake/macros.cmake diff --git a/.gitignore b/.gitignore index 83af2b9..5076717 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,4 @@ libtool autom4te.cache .DS_Store data -*.cmake -CMakeFiles -build +build* diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b789ab..6a914e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8.6) INCLUDE(CheckIncludeFiles) INCLUDE(TestBigEndian) INCLUDE(CheckCSourceCompiles) +INCLUDE(cmake/macros.cmake) PROJECT(libaec) SET(libaec_VERSION_MAJOR 0) SET(libaec_VERSION_MINOR 2) @@ -11,75 +12,15 @@ ENABLE_TESTING() CHECK_INCLUDE_FILES(malloc.h HAVE_MALLOC_H) CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H) TEST_BIG_ENDIAN(WORDS_BIGENDIAN) -CHECK_C_SOURCE_COMPILES( - "int main(int argc, char *argv[]) -{return __builtin_clzll(1LL);}" - HAVE_DECL___BUILTIN_CLZLL - ) -IF (NOT HAVE_DECL___BUILTIN_CLZLL) - CHECK_C_SOURCE_COMPILES( - "int main(int argc, char *argv[]) -{unsigned long foo; unsigned __int64 bar=1LL; -return _BitScanReverse64(&foo, bar);}" - HAVE_BSR64 - ) -ENDIF (NOT HAVE_DECL___BUILTIN_CLZLL) - -#Inspired from http://www.cmake.org/Wiki/CMakeTestInline -SET(INLINE_TEST_SRC "/* Inspired by autoconf's c.m4 */ -static inline int static_foo(){return 0\;} -int main(int argc, char *argv[]){return 0\;} -") -FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCInline.c - ${INLINE_TEST_SRC}) - -FOREACH(KEYWORD "inline" "__inline__" "__inline") - IF(NOT DEFINED C_INLINE) - TRY_COMPILE(C_HAS_${KEYWORD} - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCInline.c - COMPILE_DEFINITIONS "-Dinline=${KEYWORD}" - ) - IF(C_HAS_${KEYWORD}) - SET(C_INLINE TRUE) - ADD_DEFINITIONS("-Dinline=${KEYWORD}") - ENDIF(C_HAS_${KEYWORD}) - ENDIF(NOT DEFINED C_INLINE) -ENDFOREACH(KEYWORD) - -IF(NOT DEFINED C_INLINE) - ADD_DEFINITIONS("-Dinline=") -ENDIF(NOT DEFINED C_INLINE) - -SET(RESTRICT_TEST_SRC "/* Inspired by autoconf's c.m4 */ -int foo (int * restrict ip){return ip[0]\;} -int main(int argc, char *argv[]){int s[1]\; -int * restrict t = s\; t[0] = 0\; return foo(t)\;} -") - -FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCRestrict.c - ${RESTRICT_TEST_SRC}) - -FOREACH(KEYWORD "restrict" "__restrict" "__restrict__" "_Restrict") - IF(NOT DEFINED C_RESTRICT) - TRY_COMPILE(C_HAS_${KEYWORD} - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCRestrict.c - COMPILE_DEFINITIONS "-Drestrict=${KEYWORD}" - ) - IF(C_HAS_${KEYWORD}) - SET(C_RESTRICT TRUE) - ADD_DEFINITIONS("-Drestrict=${KEYWORD}") - ENDIF(C_HAS_${KEYWORD}) - ENDIF(NOT DEFINED C_RESTRICT) -ENDFOREACH(KEYWORD) - -IF(NOT DEFINED C_RESTRICT) - ADD_DEFINITIONS("-Drestrict=") -ENDIF(NOT DEFINED C_RESTRICT) +CHECK_CLZLL(HAVE_DECL___BUILTIN_CLZLL) +IF(NOT HAVE_DECL___BUILTIN_CLZLL) + CHECK_BSR64(HAVE_BSR64) +ENDIF(NOT HAVE_DECL___BUILTIN_CLZLL) +FIND_INLINE_KEYWORD() +FIND_RESTRICT_KEYWORD() CONFIGURE_FILE( - ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h ) ADD_DEFINITIONS("-DHAVE_CONFIG_H") diff --git a/config.h.in b/cmake/config.h.in similarity index 100% rename from config.h.in rename to cmake/config.h.in diff --git a/cmake/macros.cmake b/cmake/macros.cmake new file mode 100644 index 0000000..39bca9a --- /dev/null +++ b/cmake/macros.cmake @@ -0,0 +1,77 @@ +MACRO(CHECK_CLZLL VARIABLE) + CHECK_C_SOURCE_COMPILES( + "int main(int argc, char *argv[]) +{return __builtin_clzll(1LL);}" + ${VARIABLE} + ) +ENDMACRO() + +MACRO(CHECK_BSR64 VARIABLE) + CHECK_C_SOURCE_COMPILES( + "int main(int argc, char *argv[]) +{unsigned long foo; unsigned __int64 bar=1LL; +return _BitScanReverse64(&foo, bar);}" + ${VARIABLE} + ) +ENDMACRO() + +MACRO(FIND_INLINE_KEYWORD) + #Inspired from http://www.cmake.org/Wiki/CMakeTestInline + SET(INLINE_TEST_SRC "/* Inspired by autoconf's c.m4 */ +static inline int static_foo(){return 0\;} +int main(int argc, char *argv[]){return 0\;} +") + FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCInline.c + ${INLINE_TEST_SRC}) + + FOREACH(KEYWORD "inline" "__inline__" "__inline") + IF(NOT DEFINED C_INLINE) + TRY_COMPILE(C_HAS_${KEYWORD} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCInline.c + COMPILE_DEFINITIONS "-Dinline=${KEYWORD}" + ) + IF(C_HAS_${KEYWORD}) + SET(C_INLINE TRUE) + ADD_DEFINITIONS("-Dinline=${KEYWORD}") + MESSAGE(STATUS "Inline keyword found - ${KEYWORD}") + ENDIF(C_HAS_${KEYWORD}) + ENDIF(NOT DEFINED C_INLINE) + ENDFOREACH(KEYWORD) + + IF(NOT DEFINED C_INLINE) + ADD_DEFINITIONS("-Dinline=") + MESSAGE(STATUS "Inline keyword - not found") + ENDIF(NOT DEFINED C_INLINE) +ENDMACRO(FIND_INLINE_KEYWORD) + +MACRO(FIND_RESTRICT_KEYWORD) + SET(RESTRICT_TEST_SRC "/* Inspired by autoconf's c.m4 */ +int foo (int * restrict ip){return ip[0]\;} +int main(int argc, char *argv[]){int s[1]\; +int * restrict t = s\; t[0] = 0\; return foo(t)\;} +") + + FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCRestrict.c + ${RESTRICT_TEST_SRC}) + + FOREACH(KEYWORD "restrict" "__restrict" "__restrict__" "_Restrict") + IF(NOT DEFINED C_RESTRICT) + TRY_COMPILE(C_HAS_${KEYWORD} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCRestrict.c + COMPILE_DEFINITIONS "-Drestrict=${KEYWORD}" + ) + IF(C_HAS_${KEYWORD}) + SET(C_RESTRICT TRUE) + ADD_DEFINITIONS("-Drestrict=${KEYWORD}") + MESSAGE(STATUS "Restrict keyword found - ${KEYWORD}") + ENDIF(C_HAS_${KEYWORD}) + ENDIF(NOT DEFINED C_RESTRICT) + ENDFOREACH(KEYWORD) + + IF(NOT DEFINED C_RESTRICT) + ADD_DEFINITIONS("-Drestrict=") + MESSAGE(STATUS "Restrict keyword - not found") + ENDIF(NOT DEFINED C_RESTRICT) +ENDMACRO(FIND_RESTRICT_KEYWORD) -- 2.7.4