From 67bf182aa542a614c591b55c11736a0082feed47 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Tue, 9 Jul 2019 14:25:52 +0800 Subject: [PATCH] cmake: extract checks into CephChecks.cmake also use case chosen in the macro definition as per suggested by cmake document. see https://cmake.org/cmake/help/latest/command/macro.html#invocation Signed-off-by: Kefu Chai --- CMakeLists.txt | 92 +--------------------------------- cmake/modules/CephChecks.cmake | 91 +++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 91 deletions(-) create mode 100644 cmake/modules/CephChecks.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 92acfd2f2a6..8521a74c1fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,12 +39,6 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") FIND_PACKAGE(Threads) endif(CMAKE_SYSTEM_NAME MATCHES "Linux") -if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7) - message(FATAL_ERROR "GCC 7+ required due to C++17 requirements") - endif() -endif() - option(WITH_CCACHE "Build with ccache.") if(WITH_CCACHE) find_program(CCACHE_FOUND ccache) @@ -84,97 +78,13 @@ if(FREEBSD) list(APPEND CMAKE_REQUIRED_INCLUDES /usr/local/include) endif(FREEBSD) -#Check Includes -include(CheckIncludeFiles) -include(CheckIncludeFileCXX) -include(CheckFunctionExists) #put all the libs and binaries in one place set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - -CHECK_FUNCTION_EXISTS(fallocate CEPH_HAVE_FALLOCATE) -CHECK_FUNCTION_EXISTS(posix_fadvise HAVE_POSIX_FADVISE) -CHECK_FUNCTION_EXISTS(posix_fallocate HAVE_POSIX_FALLOCATE) -CHECK_FUNCTION_EXISTS(syncfs HAVE_SYS_SYNCFS) -CHECK_FUNCTION_EXISTS(sync_file_range HAVE_SYNC_FILE_RANGE) -CHECK_FUNCTION_EXISTS(pwritev HAVE_PWRITEV) -CHECK_FUNCTION_EXISTS(splice CEPH_HAVE_SPLICE) -CHECK_FUNCTION_EXISTS(getgrouplist HAVE_GETGROUPLIST) -if(NOT APPLE) - CHECK_FUNCTION_EXISTS(fdatasync HAVE_FDATASYNC) -endif() -CHECK_FUNCTION_EXISTS(strerror_r HAVE_Strerror_R) -CHECK_FUNCTION_EXISTS(name_to_handle_at HAVE_NAME_TO_HANDLE_AT) -CHECK_FUNCTION_EXISTS(pipe2 HAVE_PIPE2) -CHECK_FUNCTION_EXISTS(accept4 HAVE_ACCEPT4) - -include(CMakePushCheckState) -cmake_push_check_state(RESET) -set(CMAKE_REQUIRED_LIBRARIES pthread) -CHECK_FUNCTION_EXISTS(pthread_spin_init HAVE_PTHREAD_SPINLOCK) -CHECK_FUNCTION_EXISTS(pthread_set_name_np HAVE_PTHREAD_SET_NAME_NP) -CHECK_FUNCTION_EXISTS(pthread_get_name_np HAVE_PTHREAD_GET_NAME_NP) -CHECK_FUNCTION_EXISTS(pthread_setname_np HAVE_PTHREAD_SETNAME_NP) -CHECK_FUNCTION_EXISTS(pthread_getname_np HAVE_PTHREAD_GETNAME_NP) -CHECK_FUNCTION_EXISTS(pthread_rwlockattr_setkind_np HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP) -cmake_pop_check_state() - -CHECK_FUNCTION_EXISTS(eventfd HAVE_EVENTFD) -CHECK_FUNCTION_EXISTS(getprogname HAVE_GETPROGNAME) - -CHECK_INCLUDE_FILES("linux/types.h" HAVE_LINUX_TYPES_H) -CHECK_INCLUDE_FILES("linux/version.h" HAVE_LINUX_VERSION_H) -CHECK_INCLUDE_FILES("arpa/nameser_compat.h" HAVE_ARPA_NAMESER_COMPAT_H) -CHECK_INCLUDE_FILES("sys/mount.h" HAVE_SYS_MOUNT_H) -CHECK_INCLUDE_FILES("sys/param.h" HAVE_SYS_PARAM_H) -CHECK_INCLUDE_FILES("sys/types.h" HAVE_SYS_TYPES_H) -CHECK_INCLUDE_FILES("sys/vfs.h" HAVE_SYS_VFS_H) -CHECK_INCLUDE_FILES("sys/prctl.h" HAVE_SYS_PRCTL_H) -CHECK_INCLUDE_FILES("execinfo.h" HAVE_EXECINFO_H) -if(LINUX) - CHECK_INCLUDE_FILES("sched.h" HAVE_SCHED) -endif(LINUX) -CHECK_INCLUDE_FILES("valgrind/helgrind.h" HAVE_VALGRIND_HELGRIND_H) - -include(CheckTypeSize) -set(CMAKE_EXTRA_INCLUDE_FILES "linux/types.h") -CHECK_TYPE_SIZE(__be16 __BE16) -CHECK_TYPE_SIZE(__be32 __BE32) -CHECK_TYPE_SIZE(__be64 __BE64) -CHECK_TYPE_SIZE(__le16 __LE16) -CHECK_TYPE_SIZE(__le32 __LE32) -CHECK_TYPE_SIZE(__le64 __LE64) -CHECK_TYPE_SIZE(__u8 __U8) -CHECK_TYPE_SIZE(__u16 __U16) -CHECK_TYPE_SIZE(__u32 __U32) -CHECK_TYPE_SIZE(__u64 __U64) -CHECK_TYPE_SIZE(__s8 __S8) -CHECK_TYPE_SIZE(__s16 __S16) -CHECK_TYPE_SIZE(__s32 __S32) -CHECK_TYPE_SIZE(__s64 __S64) -unset(CMAKE_EXTRA_INCLUDE_FILES) - -include(CheckSymbolExists) -CHECK_SYMBOL_EXISTS(res_nquery "resolv.h" HAVE_RES_NQUERY) -CHECK_SYMBOL_EXISTS(F_SETPIPE_SZ "linux/fcntl.h" CEPH_HAVE_SETPIPE_SZ) -CHECK_SYMBOL_EXISTS(__func__ "" HAVE_FUNC) -CHECK_SYMBOL_EXISTS(__PRETTY_FUNCTION__ "" HAVE_PRETTY_FUNC) -CHECK_SYMBOL_EXISTS(getentropy "unistd.h" HAVE_GETENTROPY) - -include(CheckCXXSourceCompiles) -CHECK_CXX_SOURCE_COMPILES(" - #include - int main() { char x = *strerror_r(0, &x, sizeof(x)); return 0; } - " STRERROR_R_CHAR_P) - -include(CheckStructHasMember) -CHECK_STRUCT_HAS_MEMBER("struct stat" st_mtim.tv_nsec sys/stat.h - HAVE_STAT_ST_MTIM_TV_NSEC LANGUAGE C) -CHECK_STRUCT_HAS_MEMBER("struct stat" st_mtimespec.tv_nsec sys/stat.h - HAVE_STAT_ST_MTIMESPEC_TV_NSEC LANGUAGE C) +include(CephChecks) set(CEPH_MAN_DIR "share/man" CACHE STRING "Install location for man pages (relative to prefix).") diff --git a/cmake/modules/CephChecks.cmake b/cmake/modules/CephChecks.cmake new file mode 100644 index 00000000000..642d35eaa89 --- /dev/null +++ b/cmake/modules/CephChecks.cmake @@ -0,0 +1,91 @@ +if(CMAKE_CXX_COMPILER_ID STREQUAL GNU) + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7) + message(FATAL_ERROR "GCC 7+ required due to C++17 requirements") + endif() +endif() + +#Check Includes +include(CheckIncludeFiles) +include(CheckIncludeFileCXX) +include(CheckFunctionExists) + +check_function_exists(fallocate CEPH_HAVE_FALLOCATE) +check_function_exists(posix_fadvise HAVE_POSIX_FADVISE) +check_function_exists(posix_fallocate HAVE_POSIX_FALLOCATE) +check_function_exists(syncfs HAVE_SYS_SYNCFS) +check_function_exists(sync_file_range HAVE_SYNC_FILE_RANGE) +check_function_exists(pwritev HAVE_PWRITEV) +check_function_exists(splice CEPH_HAVE_SPLICE) +check_function_exists(getgrouplist HAVE_GETGROUPLIST) +if(NOT APPLE) + check_function_exists(fdatasync HAVE_FDATASYNC) +endif() +check_function_exists(strerror_r HAVE_Strerror_R) +check_function_exists(name_to_handle_at HAVE_NAME_TO_HANDLE_AT) +check_function_exists(pipe2 HAVE_PIPE2) +check_function_exists(accept4 HAVE_ACCEPT4) + +include(CMakePushCheckState) +cmake_push_check_state(RESET) +set(CMAKE_REQUIRED_LIBRARIES pthread) +check_function_exists(pthread_spin_init HAVE_PTHREAD_SPINLOCK) +check_function_exists(pthread_set_name_np HAVE_PTHREAD_SET_NAME_NP) +check_function_exists(pthread_get_name_np HAVE_PTHREAD_GET_NAME_NP) +check_function_exists(pthread_setname_np HAVE_PTHREAD_SETNAME_NP) +check_function_exists(pthread_getname_np HAVE_PTHREAD_GETNAME_NP) +check_function_exists(pthread_rwlockattr_setkind_np HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP) +cmake_pop_check_state() + +check_function_exists(eventfd HAVE_EVENTFD) +check_function_exists(getprogname HAVE_GETPROGNAME) + +CHECK_INCLUDE_FILES("linux/types.h" HAVE_LINUX_TYPES_H) +CHECK_INCLUDE_FILES("linux/version.h" HAVE_LINUX_VERSION_H) +CHECK_INCLUDE_FILES("arpa/nameser_compat.h" HAVE_ARPA_NAMESER_COMPAT_H) +CHECK_INCLUDE_FILES("sys/mount.h" HAVE_SYS_MOUNT_H) +CHECK_INCLUDE_FILES("sys/param.h" HAVE_SYS_PARAM_H) +CHECK_INCLUDE_FILES("sys/types.h" HAVE_SYS_TYPES_H) +CHECK_INCLUDE_FILES("sys/vfs.h" HAVE_SYS_VFS_H) +CHECK_INCLUDE_FILES("sys/prctl.h" HAVE_SYS_PRCTL_H) +CHECK_INCLUDE_FILES("execinfo.h" HAVE_EXECINFO_H) +if(LINUX) + CHECK_INCLUDE_FILES("sched.h" HAVE_SCHED) +endif() +CHECK_INCLUDE_FILES("valgrind/helgrind.h" HAVE_VALGRIND_HELGRIND_H) + +include(CheckTypeSize) +set(CMAKE_EXTRA_INCLUDE_FILES "linux/types.h") +CHECK_TYPE_SIZE(__be16 __BE16) +CHECK_TYPE_SIZE(__be32 __BE32) +CHECK_TYPE_SIZE(__be64 __BE64) +CHECK_TYPE_SIZE(__le16 __LE16) +CHECK_TYPE_SIZE(__le32 __LE32) +CHECK_TYPE_SIZE(__le64 __LE64) +CHECK_TYPE_SIZE(__u8 __U8) +CHECK_TYPE_SIZE(__u16 __U16) +CHECK_TYPE_SIZE(__u32 __U32) +CHECK_TYPE_SIZE(__u64 __U64) +CHECK_TYPE_SIZE(__s8 __S8) +CHECK_TYPE_SIZE(__s16 __S16) +CHECK_TYPE_SIZE(__s32 __S32) +CHECK_TYPE_SIZE(__s64 __S64) +unset(CMAKE_EXTRA_INCLUDE_FILES) + +include(CheckSymbolExists) +check_symbol_exists(res_nquery "resolv.h" HAVE_RES_NQUERY) +check_symbol_exists(F_SETPIPE_SZ "linux/fcntl.h" CEPH_HAVE_SETPIPE_SZ) +check_symbol_exists(__func__ "" HAVE_FUNC) +check_symbol_exists(__PRETTY_FUNCTION__ "" HAVE_PRETTY_FUNC) +check_symbol_exists(getentropy "unistd.h" HAVE_GETENTROPY) + +include(CheckCXXSourceCompiles) +check_cxx_source_compiles(" + #include + int main() { char x = *strerror_r(0, &x, sizeof(x)); return 0; } + " STRERROR_R_CHAR_P) + +include(CheckStructHasMember) +CHECK_STRUCT_HAS_MEMBER("struct stat" st_mtim.tv_nsec sys/stat.h + HAVE_STAT_ST_MTIM_TV_NSEC LANGUAGE C) +CHECK_STRUCT_HAS_MEMBER("struct stat" st_mtimespec.tv_nsec sys/stat.h + HAVE_STAT_ST_MTIMESPEC_TV_NSEC LANGUAGE C) -- 2.39.5