From 627426f10d5f8e53af9ef04231ff4a808a36dd73 Mon Sep 17 00:00:00 2001 From: Mathis Rosenhauer Date: Wed, 16 Jul 2014 11:54:48 +0200 Subject: [PATCH] CMake checks for inline and restrict. Toupper. --- CMakeLists.txt | 97 +++++++++++++++++++++++++++++++++++++++------------- src/CMakeLists.txt | 26 +++++++------- tests/CMakeLists.txt | 26 +++++++------- 3 files changed, 99 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e9bf98..26ea2bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,31 +1,80 @@ -cmake_minimum_required(VERSION 2.6) -include(CheckIncludeFiles) -include(TestBigEndian) -include(CheckCSourceCompiles) -project(libaec) -set(libaec_VERSION_MAJOR 0) -set(libaec_VERSION_MINOR 2) -set(CMAKE_BUILD_TYPE Release) -enable_testing() - -if(CMAKE_COMPILER_IS_GNUCC) - set(CMAKE_C_FLAGS "-Wall -std=gnu99 ${CMAKE_C_FLAGS}") -endif(CMAKE_COMPILER_IS_GNUCC) - -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(void) { return __builtin_clzll(1LL); }" +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +INCLUDE(CheckIncludeFiles) +INCLUDE(TestBigEndian) +INCLUDE(CheckCSourceCompiles) +PROJECT(libaec) +SET(libaec_VERSION_MAJOR 0) +SET(libaec_VERSION_MINOR 2) +SET(CMAKE_BUILD_TYPE Release) +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 ) -configure_file( +#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) + +CONFIGURE_FILE( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h ) -include_directories("${PROJECT_BINARY_DIR}") - -add_subdirectory(src) -add_subdirectory(tests EXCLUDE_FROM_ALL) +INCLUDE_DIRECTORIES("${PROJECT_BINARY_DIR}") +ADD_SUBDIRECTORY(src) +ADD_SUBDIRECTORY(tests EXCLUDE_FROM_ALL) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b5a6391..cf1642b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,25 +1,25 @@ -set(libaec_SRCS encode.c encode_accessors.c decode.c) -add_library(aec SHARED ${libaec_SRCS}) -set_target_properties(aec PROPERTIES +SET(libaec_SRCS encode.c encode_accessors.c decode.c) +ADD_LIBRARY(aec SHARED ${libaec_SRCS}) +SET_TARGET_PROPERTIES(aec PROPERTIES VERSION 0 SOVERSION 0.0 ) -add_library(sz SHARED sz_compat.c) -set_target_properties(sz PROPERTIES +ADD_LIBRARY(sz SHARED sz_compat.c) +SET_TARGET_PROPERTIES(sz PROPERTIES VERSION 0 SOVERSION 0.0 ) -target_link_libraries(sz aec) +TARGET_LINK_LIBRARIES(sz aec) -add_executable(aec_client aec.c) -set_target_properties(aec_client PROPERTIES OUTPUT_NAME "aec") -target_link_libraries(aec_client aec) -add_executable(utime EXCLUDE_FROM_ALL utime.c) +ADD_EXECUTABLE(aec_client aec.c) +SET_TARGET_PROPERTIES(aec_client PROPERTIES OUTPUT_NAME "aec") +TARGET_LINK_LIBRARIES(aec_client aec) +ADD_EXECUTABLE(utime EXCLUDE_FROM_ALL utime.c) -install(FILES libaec.h szlib.h DESTINATION include) -install(TARGETS aec sz +INSTALL(FILES libaec.h szlib.h DESTINATION include) +INSTALL(TARGETS aec sz RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib ) -install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/aec DESTINATION bin) +INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/aec DESTINATION bin) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2f7affc..5b75192 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,25 +1,25 @@ -add_library(check_aec check_aec.c) +ADD_LIBRARY(check_aec check_aec.c) -add_executable(check_code_options check_code_options.c) -target_link_libraries(check_code_options check_aec aec) +ADD_EXECUTABLE(check_code_options check_code_options.c) +TARGET_LINK_LIBRARIES(check_code_options check_aec aec) -add_executable(check_buffer_sizes check_buffer_sizes.c) -target_link_libraries(check_buffer_sizes check_aec aec) +ADD_EXECUTABLE(check_buffer_sizes check_buffer_sizes.c) +TARGET_LINK_LIBRARIES(check_buffer_sizes check_aec aec) -add_executable(check_long_fs check_long_fs.c) -target_link_libraries(check_long_fs check_aec aec) +ADD_EXECUTABLE(check_long_fs check_long_fs.c) +TARGET_LINK_LIBRARIES(check_long_fs check_aec aec) -add_test(check_code_options check_code_options) -add_test(check_buffer_sizes check_buffer_sizes) -add_test(check_long_fs check_long_fs) +ADD_TEST(check_code_options check_code_options) +ADD_TEST(check_buffer_sizes check_buffer_sizes) +ADD_TEST(check_long_fs check_long_fs) -add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) -add_dependencies(check +ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND}) +ADD_DEPENDENCIES(check check_code_options check_buffer_sizes check_long_fs) -add_custom_target(bench +ADD_CUSTOM_TARGET(bench COMMAND ${CMAKE_SOURCE_DIR}/tests/benc.sh COMMAND ${CMAKE_SOURCE_DIR}/tests/bdec.sh DEPENDS aec_client utime -- 2.7.4