summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAustin S. Hemmelgarn <austin@netdata.cloud>2024-04-24 15:54:10 +0300
committerGitHub <noreply@github.com>2024-04-24 15:54:10 +0300
commit4ac496d7498a3000443d1e4d3932841596a8c0ca (patch)
treececf92d4e849b3dd11303d29228d0e3de9b62ec5
parente63cc315b5ef2e86cc8f4ea0feb30fd2e921d1a7 (diff)
Clean up CMake build options. (#17442)
- Ensure that they have a properly descriptive help string that can be understood without detailed knowledge of Netdata. - Ensure that options that are not intended to be used by regular users are flagged as advanced (and thus do not show up in the various CMake UIs by default). - Ensure that options that are logically dependent on others are handled as such by CMake. - Properly sort main options, and label the groups with comments describing them.
-rw-r--r--CMakeLists.txt93
1 files changed, 54 insertions, 39 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5b1648f656..67a0a20896 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -70,7 +70,8 @@ find_package(PkgConfig REQUIRED)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
-option(USE_CXX_11 "use C++11 instead of C++14" False)
+option(USE_CXX_11 "Use C++11 instead of C++14 (should only be used on legacy systems that cannot support C++14, may disable some features)" False)
+mark_as_advanced(USE_CXX_11)
if(USE_CXX_11)
set(CMAKE_CXX_STANDARD 11)
@@ -85,7 +86,8 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif()
-option(ENABLE_ADDRESS_SANITIZER "enable address sanitizer" False)
+option(ENABLE_ADDRESS_SANITIZER "Build with address sanitizer enabled" False)
+mark_as_advanced(ENABLE_ADDRESS_SANITIZER)
if(ENABLE_ADDRESS_SANITIZER)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
@@ -101,42 +103,55 @@ set(CONFIG_H ${CONFIG_H_DIR}/config.h)
# This is intended to make life easier for developers who are working on one
# specific feature.
-option(DEFAULT_FEATURE_STATE "specify the default state for optional features" True)
+option(DEFAULT_FEATURE_STATE "Specify the default state for most optional features" True)
mark_as_advanced(DEFAULT_FEATURE_STATE)
-option(ENABLE_CLOUD "enable cloud" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_ACLK "enable aclk" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_ML "enable machine learning" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_H2O "enable h2o" True)
-option(ENABLE_DBENGINE "enable dbengine" True)
-
-option(ENABLE_PLUGIN_APPS "enable apps.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_CGROUP_NETWORK "enable cgroup-network plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_CUPS "enable cups.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_DEBUGFS "enable debugfs.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_EBPF "enable ebpf.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_FREEIPMI "enable freeipmi.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_GO "enable go.d.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_LOCAL_LISTENERS "enable local-listeners" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_LOGS_MANAGEMENT "enable logs-management.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_NETWORK_VIEWER "enable network-viewer" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_NFACCT "enable nfacct.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_PERF "enable perf.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_SLABINFO "enable slabinfo.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_SYSTEMD_JOURNAL "enable systemd-journal.plugin" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_PLUGIN_XENSTAT "enable xenstat.plugin" ${DEFAULT_FEATURE_STATE})
-
-option(ENABLE_EXPORTER_PROMETHEUS_REMOTE_WRITE "enable prometheus remote write exporter" ${DEFAULT_FEATURE_STATE})
-option(ENABLE_EXPORTER_MONGODB "enable mongodb exporter" ${DEFAULT_FEATURE_STATE})
-
-option(ENABLE_BUNDLED_JSONC "enable bundled json-c" False)
-option(ENABLE_BUNDLED_YAML "enable bundled yaml" False)
-option(ENABLE_BUNDLED_PROTOBUF "enable bundled protobuf" False)
-
-option(ENABLE_LOGS_MANAGEMENT_TESTS "enable logs management tests" True)
-
-option(ENABLE_SENTRY "enable sentry" False)
-option(ENABLE_WEBRTC "enable webrtc" False)
+# High-level features
+option(ENABLE_ACLK "Enable Netdata Cloud support (ACLK)" ${DEFAULT_FEATURE_STATE})
+cmake_dependent_option(ENABLE_CLOUD "Enable Netdata Cloud by default at runtime" True "NOT ENABLE_ACLK" False)
+mark_as_advanced(ENABLE_CLOUD)
+option(ENABLE_ML "Enable machine learning features" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_DBENGINE "Enable dbengine metrics storage" True)
+
+# Data collection plugins
+option(ENABLE_PLUGIN_APPS "Enable per-process resource usage monitoring" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_CGROUP_NETWORK "Enable Linux CGroup network usage monitoring" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_CUPS "Enable CUPS monitoring" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_DEBUGFS "Enable Linux DebugFS metric collection" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_EBPF "Enable Linux eBPF metric collection" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_FREEIPMI "Enable IPMI monitoring" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_GO "Enable metric collectors written in Go" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_LOCAL_LISTENERS "Enable local listening socket tracking (including service auto-discovery support)" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_LOGS_MANAGEMENT "Enable log collection and monitoring based on Fluent Bit" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_NETWORK_VIEWER "Enable network viewer functionality" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_NFACCT "Enable Linux NFACCT metric collection" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_PERF "Enable Linux performance counter monitoring" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_SLABINFO "Enable Linux kernel SLAB allocator monitoring" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_SYSTEMD_JOURNAL "Enable systemd journal log collection" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_PLUGIN_XENSTAT "Enable Xen domain monitoring" ${DEFAULT_FEATURE_STATE})
+
+# Metrics exporters
+option(ENABLE_EXPORTER_PROMETHEUS_REMOTE_WRITE "Enable exporting to Prometheus via remote write API" ${DEFAULT_FEATURE_STATE})
+option(ENABLE_EXPORTER_MONGODB "Enable exporting to MongoDB" ${DEFAULT_FEATURE_STATE})
+
+# Vendoring
+option(ENABLE_BUNDLED_JSONC "Force use of a vendored copy of JSON-C" False)
+option(ENABLE_BUNDLED_YAML "Force use of a vendored copy of libyaml" False)
+option(ENABLE_BUNDLED_PROTOBUF "Use a vendored copy of protobuf" False)
+
+# Optional test code
+cmake_dependent_option(ENABLE_LOGS_MANAGEMENT_TESTS "Enable test code for logs-management plugin." True "NOT ENABLE_PLUGIN_LOGS_MANAGEMENT" False)
+mark_as_advanced(ENABLE_LOGS_MANAGEMENT_TESTS)
+
+# Experimental features
+option(ENABLE_WEBRTC "Enable WebRTC dashboard communications (experimental)" False)
+mark_as_advanced(ENABLE_WEBRTC)
+option(ENABLE_H2O "Enable H2O web server (experimental)" True)
+mark_as_advanced(ENABLE_H2O)
+
+# Other optional functionality
+option(ENABLE_SENTRY "Build with Sentry Native crash reporting" False)
+mark_as_advanced(ENABLE_SENTRY)
cmake_dependent_option(FORCE_LEGACY_LIBBPF "Force usage of libbpf 0.0.9 instead of the latest version." False "ENABLE_PLUGIN_LIBBPF" False)
mark_as_advanced(FORCE_LEGACY_LIBBPF)
@@ -190,9 +205,9 @@ include(NetdataCompilerFlags)
# Disable hardening for debug builds by default.
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- option(DISABLE_HARDENING "disable adding extra compiler flags for hardening" TRUE)
+ option(DISABLE_HARDENING "Disable adding extra compiler flags for hardening" TRUE)
else()
- option(DISABLE_HARDENING "disable adding extra compiler flags for hardening" FALSE)
+ option(DISABLE_HARDENING "Disable adding extra compiler flags for hardening" FALSE)
endif()
set(EXTRA_HARDENING_C_FLAGS "")
@@ -271,7 +286,7 @@ if(NOT HAVE_LOG10)
list(APPEND CMAKE_REQUIRED_LIBRARIES m)
check_function_exists(log10 HAVE_LOG10)
if(HAVE_LOG10)
- set(LINK_LIBM True CACHE BOOL "" FORCE)
+ set(LINK_LIBM True)
else()
message(FATAL_ERROR "Can not use log10 with/without libm.")
endif()