diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 336 |
1 files changed, 232 insertions, 104 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 9752f371..c12e9c81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,31 +9,25 @@ project(netdata C CXX) find_package(Threads REQUIRED) find_package(PkgConfig REQUIRED) +include(CheckFunctionExists) +include(CheckLibraryExists) + # default is "Debug" #set(CMAKE_BUILD_TYPE "Release") # set this to see the compilation commands -# set(CMAKE_VERBOSE_MAKEFILE 1) - +#set(CMAKE_VERBOSE_MAKEFILE 1) # ----------------------------------------------------------------------------- # Set compilation options according to build type +set(CMAKE_C_STANDARD 11) + IF("${CMAKE_BUILD_TYPE}" MATCHES "Debug") + set(CXX_DEFAULT_CFLAGS "-O0 -g -DNETDATA_INTERNAL_CHECKS=1 -DNETDATA_DEV_MODE=1 -fstack-protector-all -fno-omit-frame-pointer") message(STATUS "building for: debugging") - - ## unfortunately these produce errors - #include(CheckCXXCompilerFlag) - #CHECK_CXX_COMPILER_FLAG("-Wformat-signedness" CXX_FORMAT_SIGNEDNESS) - #CHECK_CXX_COMPILER_FLAG("-Werror=format-security" CXX_FORMAT_SECURITY) - #CHECK_CXX_COMPILER_FLAG("-fstack-protector-all" CXX_STACK_PROTECTOR) - set(CXX_FORMAT_SIGNEDNESS "-Wformat-signedness") - set(CXX_FORMAT_SECURITY "-Werror=format-security") - set(CXX_STACK_PROTECTOR "-fstack-protector-all") - set(CXX_FLAGS_DEBUG "-O0") - set(CMAKE_C_STANDARD 99) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O1 -ggdb -Wall -Wextra -DNETDATA_INTERNAL_CHECKS=1 -DNETDATA_VERIFY_LOCKS=1 ${CXX_FORMAT_SIGNEDNESS} ${CXX_FORMAT_SECURITY} ${CXX_STACK_PROTECTOR} ${CXX_FLAGS_DEBUG}") ELSE() + set(CXX_DEFAULT_CFLAGS "-O2") message(STATUS "building for: release") cmake_policy(SET CMP0069 "NEW") include(CheckIPOSupported) @@ -46,6 +40,7 @@ ELSE() ENDIF() ENDIF() +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O1 -ggdb -Wall -Wextra -Wformat-signedness -Werror=format-security -Wunused-result ${CXX_DEFAULT_CFLAGS}") # ----------------------------------------------------------------------------- # O/S Detection @@ -67,6 +62,15 @@ ENDIF() # show the operating system on the console message(STATUS "system name: ${CMAKE_SYSTEM_NAME}") +set(GENERATED_CONFIG_H_DIR ${CMAKE_BINARY_DIR}) +set(GENERATED_CONFIG_H ${GENERATED_CONFIG_H_DIR}/config.h) + +# ----------------------------------------------------------------------------- +# Math + +set(NETDATA_COMMON_LIBRARIES ${NETDATA_COMMON_LIBRARIES} m) +set(NETDATA_REQUIRED_DEFINES "-DSTORAGE_WITH_MATH=1 ${NETDATA_REQUIRED_DEFINES}") + # ----------------------------------------------------------------------------- # Detect libuuid @@ -82,6 +86,7 @@ pkg_check_modules(ZLIB REQUIRED zlib) set(NETDATA_COMMON_CFLAGS ${NETDATA_COMMON_CFLAGS} ${ZLIB_CFLAGS_OTHER}) set(NETDATA_COMMON_LIBRARIES ${NETDATA_COMMON_LIBRARIES} ${ZLIB_LIBRARIES}) set(NETDATA_COMMON_INCLUDE_DIRS ${NETDATA_COMMON_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS}) +# set(NETDATA_REQUIRED_DEFINES "${NETDATA_REQUIRED_DEFINES} -DNETDATA_WITH_ZLIB=1") # ----------------------------------------------------------------------------- # libuv multi-platform support library with a focus on asynchronous I/O @@ -98,6 +103,7 @@ pkg_check_modules(LIBLZ4 REQUIRED liblz4) set(NETDATA_COMMON_CFLAGS ${NETDATA_COMMON_CFLAGS} ${LIBLZ4_CFLAGS_OTHER}) set(NETDATA_COMMON_LIBRARIES ${NETDATA_COMMON_LIBRARIES} ${LIBLZ4_LIBRARIES}) set(NETDATA_COMMON_INCLUDE_DIRS ${NETDATA_COMMON_INCLUDE_DIRS} ${LIBLZ4_INCLUDE_DIRS}) +# set(NETDATA_REQUIRED_DEFINES "${NETDATA_REQUIRED_DEFINES} -DENABLE_COMPRESSION=1") # ----------------------------------------------------------------------------- # Judy General purpose dynamic array @@ -111,6 +117,7 @@ pkg_check_modules(OPENSSL REQUIRED openssl) set(NETDATA_COMMON_CFLAGS ${NETDATA_COMMON_CFLAGS} ${OPENSSL_CFLAGS_OTHER}) set(NETDATA_COMMON_LIBRARIES ${NETDATA_COMMON_LIBRARIES} ${OPENSSL_LIBRARIES}) set(NETDATA_COMMON_INCLUDE_DIRS ${NETDATA_COMMON_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIRS}) +# set(NETDATA_REQUIRED_DEFINES "${NETDATA_REQUIRED_DEFINES} -DENABLE_HTTPS=1") # ----------------------------------------------------------------------------- # JSON-C used to health @@ -220,7 +227,11 @@ pkg_check_modules(CURL libcurl) # ----------------------------------------------------------------------------- # Detect libcups -pkg_check_modules(CURL libcups) +pkg_check_modules(CUPS libcups) +IF(NOT CUPS_LIBRARIES) + pkg_check_modules(CUPS cups) +ENDIF() + # later we use: # ${CUPS_LIBRARIES} # ${CUPS_CFLAGS_OTHER} @@ -328,8 +339,9 @@ IF(LINUX AND EXISTS "${CMAKE_SOURCE_DIR}/externaldeps/libbpf/libbpf.a") ${CMAKE_SOURCE_DIR}/externaldeps/libbpf/libbpf.a ${ELF_LIBRARIES}) list(APPEND NETDATA_COMMON_INCLUDE_DIRS ${ELF_INCLUDE_DIRS}) - include_directories(BEFORE ${CMAKE_SOURCE_DIR}/externaldeps/libbpf/include) + 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)") @@ -340,11 +352,11 @@ ENDIF() # Detect ml dependencies file(STRINGS "${CMAKE_SOURCE_DIR}/config.h" DEFINE_ENABLE_ML REGEX "^#define ENABLE_ML 1$") IF(DEFINE_ENABLE_ML MATCHES ".+" AND - EXISTS "${CMAKE_SOURCE_DIR}/ml/kmeans/dlib/dlib/all/source.cpp" AND + EXISTS "${CMAKE_SOURCE_DIR}/ml/dlib/dlib/all/source.cpp" AND EXISTS "${CMAKE_SOURCE_DIR}/ml/json/single_include/nlohmann/json.hpp") set(ENABLE_ML True) list(APPEND NETDATA_COMMON_CFLAGS "-DDLIB_NO_GUI_SUPPORT") - list(APPEND NETDATA_COMMON_INCLUDE_DIRS "ml/kmeans/dlib") + list(APPEND NETDATA_COMMON_INCLUDE_DIRS "ml/dlib") ELSE() set(ENABLE_ML False) ENDIF() @@ -409,6 +421,8 @@ target_include_directories(judy PUBLIC libnetdata/libjudy/src libnetdata/libjudy/src/JudyCommon) +target_include_directories(judy BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) + target_compile_definitions(judy PUBLIC JU_64BIT JUDYL) @@ -445,6 +459,8 @@ set(LIBNETDATA_FILES libnetdata/avl/avl.h libnetdata/buffer/buffer.c libnetdata/buffer/buffer.h + libnetdata/circular_buffer/circular_buffer.c + libnetdata/circular_buffer/circular_buffer.h libnetdata/clocks/clocks.c libnetdata/clocks/clocks.h libnetdata/completion/completion.c @@ -453,10 +469,15 @@ set(LIBNETDATA_FILES libnetdata/dictionary/dictionary.h libnetdata/eval/eval.c libnetdata/eval/eval.h + libnetdata/health/health.c + libnetdata/health/health.h libnetdata/inlined.h + libnetdata/json/json.c + libnetdata/json/json.h + libnetdata/json/jsmn.c + libnetdata/json/jsmn.h libnetdata/libnetdata.c libnetdata/libnetdata.h - libnetdata/required_dummies.h libnetdata/locks/locks.c libnetdata/locks/locks.h libnetdata/log/log.c @@ -469,6 +490,9 @@ set(LIBNETDATA_FILES libnetdata/popen/popen.h libnetdata/procfile/procfile.c libnetdata/procfile/procfile.h + libnetdata/required_dummies.h + libnetdata/socket/security.c + libnetdata/socket/security.h libnetdata/simple_pattern/simple_pattern.c libnetdata/simple_pattern/simple_pattern.h libnetdata/socket/socket.c @@ -477,23 +501,16 @@ set(LIBNETDATA_FILES libnetdata/statistical/statistical.h libnetdata/storage_number/storage_number.c libnetdata/storage_number/storage_number.h + libnetdata/string/string.c + libnetdata/string/string.h libnetdata/threads/threads.c libnetdata/threads/threads.h libnetdata/url/url.c libnetdata/url/url.h - libnetdata/json/json.c - libnetdata/json/json.h - libnetdata/json/jsmn.c - libnetdata/json/jsmn.h - libnetdata/health/health.c - libnetdata/health/health.h libnetdata/string/utf8.h - libnetdata/socket/security.c - libnetdata/socket/security.h libnetdata/worker_utilization/worker_utilization.c libnetdata/worker_utilization/worker_utilization.h - libnetdata/circular_buffer/circular_buffer.c - libnetdata/circular_buffer/circular_buffer.h) + ) IF(ENABLE_PLUGIN_EBPF) list(APPEND LIBNETDATA_FILES @@ -503,13 +520,11 @@ ENDIF() add_library(libnetdata OBJECT ${LIBNETDATA_FILES}) +target_include_directories(libnetdata BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) + set(APPS_PLUGIN_FILES collectors/apps.plugin/apps_plugin.c) -set(CHECKS_PLUGIN_FILES - collectors/checks.plugin/plugin_checks.c - ) - set(FREEBSD_PLUGIN_FILES collectors/freebsd.plugin/plugin_freebsd.c collectors/freebsd.plugin/plugin_freebsd.h @@ -633,8 +648,6 @@ set(PROC_PLUGIN_FILES collectors/proc.plugin/proc_net_netstat.c collectors/proc.plugin/proc_net_rpc_nfs.c collectors/proc.plugin/proc_net_rpc_nfsd.c - collectors/proc.plugin/proc_net_snmp.c - collectors/proc.plugin/proc_net_snmp6.c collectors/proc.plugin/proc_net_sctp_snmp.c collectors/proc.plugin/proc_net_sockstat.c collectors/proc.plugin/proc_net_sockstat6.c @@ -716,6 +729,8 @@ set(RRD_PLUGIN_FILES database/rrddimvar.c database/rrddimvar.h database/rrdfamily.c + database/rrdfunctions.c + database/rrdfunctions.h database/rrdhost.c database/rrdlabels.c database/rrd.c @@ -729,6 +744,8 @@ set(RRD_PLUGIN_FILES database/storage_engine.h database/ram/rrddim_mem.c database/ram/rrddim_mem.h + database/sqlite/sqlite_metadata.c + database/sqlite/sqlite_metadata.h database/sqlite/sqlite_functions.c database/sqlite/sqlite_functions.h database/sqlite/sqlite_context.c @@ -741,8 +758,6 @@ set(RRD_PLUGIN_FILES database/sqlite/sqlite_health.h database/sqlite/sqlite_aclk_node.c database/sqlite/sqlite_aclk_node.h - database/sqlite/sqlite_aclk_chart.c - database/sqlite/sqlite_aclk_chart.h database/sqlite/sqlite_aclk_alert.c database/sqlite/sqlite_aclk_alert.h database/sqlite/sqlite3.c @@ -762,16 +777,6 @@ set(RRD_PLUGIN_FILES database/engine/pagecache.h database/engine/rrdenglocking.c database/engine/rrdenglocking.h - database/engine/metadata_log/metadatalog.h - database/engine/metadata_log/metadatalogapi.c - database/engine/metadata_log/metadatalogapi.h - database/engine/metadata_log/logfile.h - database/engine/metadata_log/logfile.c - database/engine/metadata_log/metadatalogprotocol.h - database/engine/metadata_log/metalogpluginsd.c - database/engine/metadata_log/metalogpluginsd.h - database/engine/metadata_log/compaction.c - database/engine/metadata_log/compaction.h database/KolmogorovSmirnovDist.c database/KolmogorovSmirnovDist.h ) @@ -851,6 +856,8 @@ set(STREAMING_PLUGIN_FILES streaming/compression.c streaming/receiver.c streaming/sender.c + streaming/replication.c + streaming/replication.h ) set(CLAIM_PLUGIN_FILES @@ -860,15 +867,13 @@ set(CLAIM_PLUGIN_FILES set(ACLK_ALWAYS_BUILD aclk/aclk_rrdhost_state.h - aclk/aclk_api.c - aclk/aclk_api.h aclk/aclk_proxy.c aclk/aclk_proxy.h + aclk/aclk.c + aclk/aclk.h ) set(ACLK_FILES - aclk/aclk.c - aclk/aclk.h aclk/aclk_util.c aclk/aclk_util.h aclk/aclk_stats.c @@ -885,38 +890,18 @@ set(ACLK_FILES aclk/aclk_rx_msgs.h aclk/https_client.c aclk/https_client.h - aclk/aclk_charts_api.c - aclk/aclk_charts_api.h aclk/aclk_alarm_api.c aclk/aclk_alarm_api.h aclk/aclk_contexts_api.c aclk/aclk_contexts_api.h - mqtt_websockets/src/mqtt_wss_client.c - mqtt_websockets/src/include/mqtt_wss_client.h - mqtt_websockets/src/mqtt_wss_log.c - mqtt_websockets/src/include/mqtt_wss_log.h - mqtt_websockets/src/ws_client.c - mqtt_websockets/src/include/ws_client.h - mqtt_websockets/src/mqtt_ng.c - mqtt_websockets/src/include/mqtt_ng.h - mqtt_websockets/src/common_public.c - mqtt_websockets/src/include/common_public.h - mqtt_websockets/src/include/common_internal.h - mqtt_websockets/c-rbuf/src/ringbuffer.c - mqtt_websockets/c-rbuf/include/ringbuffer.h - mqtt_websockets/c-rbuf/src/ringbuffer_internal.h - mqtt_websockets/MQTT-C/src/mqtt.c - mqtt_websockets/MQTT-C/include/mqtt.h + aclk/aclk_capas.c + aclk/aclk_capas.h aclk/schema-wrappers/connection.cc aclk/schema-wrappers/connection.h aclk/schema-wrappers/node_connection.cc aclk/schema-wrappers/node_connection.h aclk/schema-wrappers/node_creation.cc aclk/schema-wrappers/node_creation.h - aclk/schema-wrappers/chart_stream.cc - aclk/schema-wrappers/chart_stream.h - aclk/schema-wrappers/chart_config.cc - aclk/schema-wrappers/chart_config.h aclk/schema-wrappers/alarm_stream.cc aclk/schema-wrappers/alarm_stream.h aclk/schema-wrappers/alarm_config.cc @@ -934,6 +919,27 @@ set(ACLK_FILES aclk/schema-wrappers/schema_wrappers.h aclk/schema-wrappers/schema_wrapper_utils.cc aclk/schema-wrappers/schema_wrapper_utils.h + aclk/helpers/mqtt_wss_pal.h + aclk/helpers/ringbuffer_pal.h + ) + +set(MQTT_WEBSOCKETS_FILES + mqtt_websockets/src/mqtt_wss_client.c + mqtt_websockets/src/include/mqtt_wss_client.h + mqtt_websockets/src/mqtt_wss_log.c + mqtt_websockets/src/include/mqtt_wss_log.h + mqtt_websockets/src/ws_client.c + mqtt_websockets/src/include/ws_client.h + mqtt_websockets/src/mqtt_ng.c + mqtt_websockets/src/include/mqtt_ng.h + mqtt_websockets/src/common_public.c + mqtt_websockets/src/include/common_public.h + mqtt_websockets/src/include/common_internal.h + mqtt_websockets/c-rbuf/src/ringbuffer.c + mqtt_websockets/c-rbuf/include/ringbuffer.h + mqtt_websockets/c-rbuf/src/ringbuffer_internal.h + mqtt_websockets/MQTT-C/src/mqtt.c + mqtt_websockets/MQTT-C/include/mqtt.h ) set(SPAWN_PLUGIN_FILES @@ -1018,30 +1024,30 @@ set(ML_FILES ml/ml-dummy.c ) +# ----------------------------------------------------------------------------- +# ML + IF(ENABLE_ML) + message(STATUS "ML: enabled") list(APPEND ML_FILES - ml/BitBufferCounter.h - ml/BitBufferCounter.cc - ml/BitRateWindow.h - ml/BitRateWindow.cc ml/Config.h ml/Config.cc - ml/Database.h - ml/Database.cc ml/Dimension.cc ml/Dimension.h ml/Host.h ml/Host.cc ml/Query.h - ml/kmeans/KMeans.h - ml/kmeans/KMeans.cc - ml/kmeans/SamplesBuffer.h - ml/kmeans/SamplesBuffer.cc - ml/kmeans/dlib/dlib/all/source.cpp + ml/KMeans.h + ml/KMeans.cc + ml/SamplesBuffer.h + ml/SamplesBuffer.cc + ml/dlib/dlib/all/source.cpp ml/json/single_include/nlohmann/json.hpp ml/ml.cc ml/ml-private.h ) +ELSE() + message(STATUS "ML: disabled") ENDIF() set(NETDATA_FILES @@ -1049,7 +1055,6 @@ set(NETDATA_FILES ${DAEMON_FILES} ${API_PLUGIN_FILES} ${EXPORTING_ENGINE_FILES} - ${CHECKS_PLUGIN_FILES} ${HEALTH_PLUGIN_FILES} ${IDLEJITTER_PLUGIN_FILES} ${ML_FILES} @@ -1194,6 +1199,10 @@ ENDIF() set(NETDATA_COMMON_LIBRARIES ${NETDATA_COMMON_LIBRARIES} m ${CMAKE_THREAD_LIBS_INIT}) +option(ENABLE_ACLK "Enables functionality required to connect to cloud (must be activated by user at run time)" ON) + +if(ENABLE_ACLK) + find_package(Protobuf REQUIRED) function(PROTOBUF_ACLK_GENERATE_CPP SRCS HDRS) @@ -1238,10 +1247,6 @@ set(ACLK_PROTO_DEFS aclk/aclk-schemas/proto/agent/v1/connection.proto aclk/aclk-schemas/proto/alarm/v1/config.proto aclk/aclk-schemas/proto/alarm/v1/stream.proto - aclk/aclk-schemas/proto/chart/v1/config.proto - aclk/aclk-schemas/proto/chart/v1/dimension.proto - aclk/aclk-schemas/proto/chart/v1/instance.proto - aclk/aclk-schemas/proto/chart/v1/stream.proto aclk/aclk-schemas/proto/nodeinstance/connection/v1/connection.proto aclk/aclk-schemas/proto/nodeinstance/create/v1/creation.proto aclk/aclk-schemas/proto/nodeinstance/info/v1/info.proto @@ -1253,14 +1258,29 @@ PROTOBUF_ACLK_GENERATE_CPP(ACLK_PROTO_BUILT_SRCS ACLK_PROTO_BUILT_HDRS ${ACLK_PR list(APPEND NETDATA_COMMON_LIBRARIES ${PROTOBUF_LIBRARIES}) list(APPEND NETDATA_COMMON_INCLUDE_DIRS ${PROTOBUF_INCLUDE_DIRS}) list(APPEND NETDATA_COMMON_CFLAGS ${PROTOBUF_CFLAGS_OTHER}) -list(APPEND NETDATA_FILES ${ACLK_ALWAYS_BUILD}) -list(APPEND NETDATA_FILES ${TIMEX_PLUGIN_FILES}) list(APPEND NETDATA_FILES ${ACLK_FILES} ${ACLK_PROTO_BUILT_SRCS} ${ACLK_PROTO_BUILT_HDRS}) include_directories(BEFORE ${CMAKE_SOURCE_DIR}/aclk/aclk-schemas) include_directories(BEFORE ${CMAKE_SOURCE_DIR}/mqtt_websockets/MQTT-C/include) include_directories(BEFORE ${CMAKE_SOURCE_DIR}/mqtt_websockets/src/include) include_directories(BEFORE ${CMAKE_SOURCE_DIR}/mqtt_websockets/c-rbuf/include) +ADD_LIBRARY(mqttwebsockets STATIC + ${MQTT_WEBSOCKETS_FILES}) + +target_compile_options(mqttwebsockets PUBLIC + -DMQTT_WSS_CUSTOM_ALLOC + -DRBUF_CUSTOM_MALLOC) + +target_include_directories(mqttwebsockets PUBLIC + ${CMAKE_SOURCE_DIR}/aclk/helpers) + +set(NETDATA_COMMON_LIBRARIES ${NETDATA_COMMON_LIBRARIES} mqttwebsockets) + +ENDIF() + +list(APPEND NETDATA_FILES ${ACLK_ALWAYS_BUILD}) +list(APPEND NETDATA_FILES ${TIMEX_PLUGIN_FILES}) + # ----------------------------------------------------------------------------- # netdata @@ -1268,7 +1288,7 @@ IF(LINUX) list(APPEND NETDATA_FILES daemon/static_threads_linux.c) list(APPEND NETDATA_COMMON_LIBRARIES rt) - add_executable(netdata config.h ${NETDATA_FILES} + add_executable(netdata ${GENERATED_CONFIG_H} ${NETDATA_FILES} ${CGROUPS_PLUGIN_FILES} ${DISKSPACE_PLUGIN_FILES} ${PROC_PLUGIN_FILES} @@ -1276,6 +1296,7 @@ IF(LINUX) ) target_link_libraries (netdata libnetdata ${NETDATA_COMMON_LIBRARIES}) target_include_directories(netdata PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS}) + target_include_directories(netdata BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(netdata PUBLIC ${NETDATA_COMMON_CFLAGS}) SET(ENABLE_PLUGIN_CGROUP_NETWORK True) @@ -1286,9 +1307,10 @@ IF(LINUX) ELSEIF(FREEBSD) list(APPEND NETDATA_FILES daemon/static_threads_freebsd.c) - add_executable(netdata config.h ${NETDATA_FILES} ${FREEBSD_PLUGIN_FILES}) + add_executable(netdata ${GENERATED_CONFIG_H} ${NETDATA_FILES} ${FREEBSD_PLUGIN_FILES}) target_link_libraries (netdata libnetdata ${NETDATA_COMMON_LIBRARIES}) target_include_directories(netdata PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS}) + target_include_directories(netdata BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(netdata PUBLIC ${NETDATA_COMMON_CFLAGS}) SET(ENABLE_PLUGIN_CGROUP_NETWORK False) SET(ENABLE_PLUGIN_APPS True) @@ -1299,9 +1321,10 @@ ELSEIF(FREEBSD) ELSEIF(MACOS) list(APPEND NETDATA_FILES daemon/static_threads_macos.c) - add_executable(netdata config.h ${NETDATA_FILES} ${MACOS_PLUGIN_FILES}) + add_executable(netdata ${GENERATED_CONFIG_H} ${NETDATA_FILES} ${MACOS_PLUGIN_FILES}) target_link_libraries (netdata libnetdata ${NETDATA_COMMON_LIBRARIES} ${IOKIT} ${FOUNDATION}) target_include_directories(netdata PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS}) + target_include_directories(netdata BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(netdata PUBLIC ${NETDATA_COMMON_CFLAGS}) SET(ENABLE_PLUGIN_CGROUP_NETWORK False) SET(ENABLE_PLUGIN_APPS False) @@ -1344,9 +1367,10 @@ ENDIF() # ----------------------------------------------------------------------------- # netdatacli -add_executable(netdatacli config.h ${NETDATACLI_FILES}) +add_executable(netdatacli ${GENERATED_CONFIG_H} ${NETDATACLI_FILES}) target_link_libraries (netdatacli libnetdata ${NETDATA_COMMON_LIBRARIES}) target_include_directories(netdatacli PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS}) +target_include_directories(netdatacli BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(netdatacli PUBLIC ${NETDATA_COMMON_CFLAGS}) @@ -1355,9 +1379,10 @@ target_compile_options(netdatacli PUBLIC ${NETDATA_COMMON_CFLAGS}) IF(ENABLE_PLUGIN_APPS) message(STATUS "apps.plugin: enabled") - add_executable(apps.plugin config.h ${APPS_PLUGIN_FILES}) + add_executable(apps.plugin ${GENERATED_CONFIG_H} ${APPS_PLUGIN_FILES}) target_link_libraries (apps.plugin libnetdata ${NETDATA_COMMON_LIBRARIES} ${CAP_LIBRARIES}) target_include_directories(apps.plugin PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS} ${CAP_INCLUDE_DIRS}) + target_include_directories(apps.plugin BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(apps.plugin PUBLIC ${NETDATA_COMMON_CFLAGS} ${CAP_CFLAGS_OTHER}) ELSE() message(STATUS "apps.plugin: disabled") @@ -1369,9 +1394,10 @@ ENDIF() IF(ENABLE_PLUGIN_FREEIPMI) message(STATUS "freeipmi.plugin: enabled") - add_executable(freeipmi.plugin config.h ${FREEIPMI_PLUGIN_FILES}) + add_executable(freeipmi.plugin ${GENERATED_CONFIG_H} ${FREEIPMI_PLUGIN_FILES}) target_link_libraries (freeipmi.plugin libnetdata ${NETDATA_COMMON_LIBRARIES} ${IPMI_LIBRARIES}) target_include_directories(freeipmi.plugin PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS} ${IPMI_INCLUDE_DIRS}) + target_include_directories(freeipmi.plugin BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(freeipmi.plugin PUBLIC ${NETDATA_COMMON_CFLAGS} ${IPMI_CFLAGS_OTHER}) ELSE() message(STATUS "freeipmi.plugin: disabled (depends on libipmimonitoring)") @@ -1383,9 +1409,10 @@ ENDIF() IF(ENABLE_PLUGIN_NFACCT) message(STATUS "nfacct.plugin: enabled") - add_executable(nfacct.plugin config.h ${NFACCT_PLUGIN_FILES}) + add_executable(nfacct.plugin ${GENERATED_CONFIG_H} ${NFACCT_PLUGIN_FILES}) target_link_libraries (nfacct.plugin libnetdata ${NETDATA_COMMON_LIBRARIES} ${MNL_LIBRARIES} ${NFACCT_LIBRARIES}) target_include_directories(nfacct.plugin PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS} ${MNL_INCLUDE_DIRS} ${NFACCT_INCLUDE_DIRS}) + target_include_directories(nfacct.plugin BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(nfacct.plugin PUBLIC ${NETDATA_COMMON_CFLAGS} ${MNL_CFLAGS_OTHER} ${NFACCT_CFLAGS_OTHER}) ELSE() message(STATUS "nfacct.plugin: disabled (requires libmnl and libnetfilter_acct)") @@ -1397,9 +1424,10 @@ ENDIF() IF(ENABLE_PLUGIN_XENSTAT) message(STATUS "xenstat.plugin: enabled") - add_executable(xenstat.plugin config.h ${XENSTAT_PLUGIN_FILES}) + add_executable(xenstat.plugin ${GENERATED_CONFIG_H} ${XENSTAT_PLUGIN_FILES}) target_link_libraries (xenstat.plugin libnetdata ${NETDATA_COMMON_LIBRARIES} ${XENSTAT_LIBRARIES}) target_include_directories(xenstat.plugin PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS} ${XENSTAT_INCLUDE_DIRS}) + target_include_directories(xenstat.plugin BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(xenstat.plugin PUBLIC ${NETDATA_COMMON_CFLAGS} ${XENSTAT_CFLAGS_OTHER}) ELSE() message(STATUS "xenstat.plugin: disabled (requires libxenstat)") @@ -1411,9 +1439,10 @@ ENDIF() IF(ENABLE_PLUGIN_PERF) message(STATUS "perf.plugin: enabled") - add_executable(perf.plugin config.h ${PERF_PLUGIN_FILES}) + add_executable(perf.plugin ${GENERATED_CONFIG_H} ${PERF_PLUGIN_FILES}) target_link_libraries (perf.plugin libnetdata ${NETDATA_COMMON_LIBRARIES}) target_include_directories(perf.plugin PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS}) + target_include_directories(perf.plugin BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(perf.plugin PUBLIC ${NETDATA_COMMON_CFLAGS}) ELSE() message(STATUS "perf.plugin: disabled") @@ -1425,9 +1454,10 @@ ENDIF() IF(ENABLE_PLUGIN_EBPF) message(STATUS "ebpf.plugin: enabled") - add_executable(ebpf.plugin config.h ${EBPF_PROCESS_PLUGIN_FILES}) + add_executable(ebpf.plugin ${GENERATED_CONFIG_H} ${EBPF_PROCESS_PLUGIN_FILES}) target_link_libraries (ebpf.plugin libnetdata ${NETDATA_COMMON_LIBRARIES}) target_include_directories(ebpf.plugin PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS}) + target_include_directories(ebpf.plugin BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(ebpf.plugin PUBLIC ${NETDATA_COMMON_CFLAGS}) ELSE() message(STATUS "ebpf.plugin: disabled") @@ -1439,9 +1469,10 @@ ENDIF() IF(ENABLE_PLUGIN_SLABINFO) message(STATUS "slabinfo.plugin: enabled") - add_executable(slabinfo.plugin config.h ${SLABINFO_PLUGIN_FILES}) + add_executable(slabinfo.plugin ${GENERATED_CONFIG_H} ${SLABINFO_PLUGIN_FILES}) target_link_libraries (slabinfo.plugin libnetdata ${NETDATA_COMMON_LIBRARIES}) target_include_directories(slabinfo.plugin PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS}) + target_include_directories(slabinfo.plugin BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(slabinfo.plugin PUBLIC ${NETDATA_COMMON_CFLAGS}) ELSE() message(STATUS "slabinfo.plugin: disabled") @@ -1453,9 +1484,10 @@ ENDIF() IF(ENABLE_PLUGIN_CUPS) message(STATUS "cups.plugin: enabled") - add_executable(cups.plugin config.h ${CUPS_PLUGIN_FILES}) + add_executable(cups.plugin ${GENERATED_CONFIG_H} ${CUPS_PLUGIN_FILES}) target_link_libraries (cups.plugin libnetdata ${NETDATA_COMMON_LIBRARIES} ${CUPS_LIBRARIES}) target_include_directories(cups.plugin PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS} ${CUPS_INCLUDE_DIRS}) + target_include_directories(cups.plugin BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(cups.plugin PUBLIC ${NETDATA_COMMON_CFLAGS} ${CUPS_CFLAGS_OTHER}) ELSE() message(STATUS "cups.plugin: disabled") @@ -1467,9 +1499,10 @@ ENDIF() IF(ENABLE_PLUGIN_CGROUP_NETWORK) message(STATUS "cgroup-network: enabled") - add_executable(cgroup-network config.h ${CGROUP_NETWORK_FILES}) + add_executable(cgroup-network ${GENERATED_CONFIG_H} ${CGROUP_NETWORK_FILES}) target_link_libraries (cgroup-network libnetdata ${NETDATA_COMMON_LIBRARIES}) target_include_directories(cgroup-network PUBLIC ${NETDATA_COMMON_INCLUDE_DIRS}) + target_include_directories(cgroup-network BEFORE PUBLIC ${GENERATED_CONFIG_H_DIR}) target_compile_options(cgroup-network PUBLIC ${NETDATA_COMMON_CFLAGS}) ELSE() message(STATUS "cgroup-network: disabled (requires Linux)") @@ -1500,6 +1533,7 @@ if(BUILD_TESTING) exporting/tests/netdata_doubles.c exporting/tests/system_doubles.c database/rrdlabels.c + database/rrdvar.c ) set(TEST_NAME exporting_engine) set(PROMETHEUS_REMOTE_WRITE_LINK_OPTIONS) @@ -1672,3 +1706,97 @@ 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) + 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() + +# ----------------------------------------------------------------------------- + +check_library_exists(c clock_gettime "" HAVE_CLOCK_GETTIME) + +IF(NOT HAVE_CLOCK_GETTIME) + CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_CLOCK_GETTIME) +ENDIF() + +IF(HAVE_CLOCK_GETTIME) + message("-- clock_gettime(): found") + set(NETDATA_REQUIRED_DEFINES "-DHAVE_CLOCK_GETTIME=1 ${NETDATA_REQUIRED_DEFINES}") +ELSE() + message("-- clock_gettime(): not found") +ENDIF() + +# ----------------------------------------------------------------------------- +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NETDATA_REQUIRED_DEFINES}") +message("CFLAGS=\"${CMAKE_C_FLAGS}\"") + +configure_file(config.cmake.h.in config.h) |