CMake improvements part 1 (#13575)

* generate basic config.h
This commit is contained in:
Timotej S 2022-09-09 15:09:20 +02:00 committed by GitHub
parent 34613b88fe
commit 0c8c34955e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 133 additions and 0 deletions

View File

@ -330,6 +330,7 @@ IF(LINUX AND EXISTS "${CMAKE_SOURCE_DIR}/externaldeps/libbpf/libbpf.a")
list(APPEND NETDATA_COMMON_INCLUDE_DIRS ${ELF_INCLUDE_DIRS})
include_directories(BEFORE ${CMAKE_SOURCE_DIR}/externaldeps/libbpf/include ${CMAKE_SOURCE_DIR}/externaldeps/libbpf/include/uapi)
set(ENABLE_PLUGIN_EBPF True)
set(HAVE_LIBBPF True)
ELSE(ELF_LIBRARIES)
set(ENABLE_PLUGIN_EBPF False)
message(STATUS "ebpf plugin: disabled (requires libelf)")
@ -1671,3 +1672,79 @@ endif()
endif()
endif()
# generate config.h so that CMake becomes independent of automake
## netdata version
set(GIT_EXECUTABLE "git")
execute_process(COMMAND ${GIT_EXECUTABLE} describe OUTPUT_VARIABLE NETDATA_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
IF("${NETDATA_VERSION}" STREQUAL "")
file(STRINGS "packaging/version" NETDATA_VERSION LIMIT_COUNT 1)
ENDIF()
set(NETDATA_USER "netdata" CACHE STRING "use this user to drop privileges")
if(MAC_OS)
set(ENABLE_APPS_PLUGIN False)
else()
set(ENABLE_APPS_PLUGIN True)
endif()
check_include_file(time.h HAVE_TIME_H)
check_include_file(unistd.h HAVE_UNISTD_H)
if (HAVE_TIME_H)
include(CheckStructHasMember)
check_struct_has_member("struct timespec" tv_sec "time.h" HAVE_STRUCT_TIMESPEC)
endif ()
check_include_file(sys/statfs.h HAVE_SYS_STATFS_H)
check_include_file(sys/statvfs.h HAVE_SYS_STATVFS_H)
check_include_file(inttypes.h HAVE_INTTYPES_H)
check_include_file(stdint.h HAVE_STDINT_H)
include(CheckSymbolExists)
check_include_file(sys/mkdev.h HAVE_SYS_MKDEV_H)
if (HAVE_SYS_MKDEV_H)
check_symbol_exists(major "sys/mkdev.h" MAJOR_IN_MKDEV)
endif()
check_include_file(sys/sysmacros.h HAVE_SYS_SYSMACROS_H)
if (HAVE_SYS_SYSMACROS_H)
check_symbol_exists(major "sys/sysmacros.h" MAJOR_IN_SYSMACROS)
endif()
if (CRYPTO_FOUND)
include(CheckLibraryExists)
set(HAVE_CRYPTO True)
FIND_LIBRARY(CRYPTO_LIBRARY_LOCATION NAMES crypto)
check_library_exists(crypto X509_VERIFY_PARAM_set1_host ${CRYPTO_LIBRARY_LOCATION} HAVE_X509_VERIFY_PARAM_set1_host)
if (HAVE_X509_VERIFY_PARAM_set1_host)
set(HAVE_X509_VERIFY_PARAM_set1_host True)
endif()
endif()
include(CheckCSourceCompiles)
check_c_source_compiles("
#define _GNU_SOURCE
#include <string.h>
int main() { char x = *strerror_r(0, &x, sizeof(x)); return 0; }
" STRERROR_R_CHAR_P)
IF(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
SET(LIKELY_MACRO "__builtin_expect(!!(x), 1)")
SET(UNLIKELY_MACRO "__builtin_expect(!!(x), 0)")
ELSE()
SET(LIKELY_MACRO "(x)")
SET(UNLIKELY_MACRO "(x)")
ENDIF()
IF(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
SET(ALWAYS_UNUSED_MACRO "__attribute__((unused))")
SET(MAYBE_UNUSED_MACRO "__attribute__((unused))")
ELSE()
SET(ALWAYS_UNUSED_MACRO "")
SET(MAYBE_UNUSED_MACRO "")
ENDIF()
configure_file(config.cmake.h.in config.h)

56
config.cmake.h.in Normal file
View File

@ -0,0 +1,56 @@
/* This file was generated by CMAKE from config.cmake.h.in */
#define VERSION "@NETDATA_VERSION@"
#define CONFIGURE_COMMAND "cmake"
#define NETDATA_USER "@NETDATA_USER@"
/* Using a bundled copy of protobuf */
// #undef BUNDLED_PROTOBUF
#define HAVE_PROTOBUF 1
#define likely(x) @LIKELY_MACRO@
#define unlikely(x) @UNLIKELY_MACRO@
/* La boring stuff */
#cmakedefine HAVE_STRUCT_TIMESPEC
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
#cmakedefine HAVE_SYS_STATFS_H
#cmakedefine HAVE_SYS_STATVFS_H
#cmakedefine HAVE_INTTYPES_H
#cmakedefine HAVE_STDINT_H
#cmakedefine STRERROR_R_CHAR_P
#cmakedefine MAJOR_IN_MKDEV
#cmakedefine MAJOR_IN_SYSMACROS
#cmakedefine HAVE_CRYPTO
#cmakedefine ENABLE_PROMETHEUS_REMOTE_WRITE
/* they are defined as REQUIRED in CMakeLists.txt */
#define NETDATA_WITH_ZLIB 1
#define ENABLE_JSONC 1
#cmakedefine ENABLE_ML
#cmakedefine HAVE_LIBBPF
/* NSA spy stuff */
#define ENABLE_HTTPS 1
#cmakedefine01 HAVE_X509_VERIFY_PARAM_set1_host
#define ENABLE_ACLK
#define ENABLE_DBENGINE
#define ENABLE_COMPRESSION // pkg_check_modules(LIBLZ4 REQUIRED liblz4)
#cmakedefine ENABLE_APPS_PLUGIN
#define __always_unused @ALWAYS_UNUSED_MACRO@
#define __maybe_unused @MAYBE_UNUSED_MACRO@