@cryptotaxi247 / netdata-1 / commits / 4ac496d74

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.

Austin S. Hemmelgarn committed Apr 24, 2024 at 15:54 UTC 4ac496d7498a3000443d1e4d3932841596a8c0ca
1 file changed +54 -39
CMakeLists.txt
+54 -39
@@ -70,7 +70,8 @@ find_package(PkgConfig REQUIRED)
70 set(CMAKE_C_STANDARD 11)
71 set(CMAKE_CXX_STANDARD 14)
72
73 -option(USE_CXX_11 "use C++11 instead of C++14" False)
73 +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)
74 +mark_as_advanced(USE_CXX_11)
75
76 if(USE_CXX_11)
77 set(CMAKE_CXX_STANDARD 11)
@@ -85,7 +86,8 @@ if(NOT CMAKE_BUILD_TYPE)
86 set(CMAKE_BUILD_TYPE "Release")
87 endif()
88
88 -option(ENABLE_ADDRESS_SANITIZER "enable address sanitizer" False)
89 +option(ENABLE_ADDRESS_SANITIZER "Build with address sanitizer enabled" False)
90 +mark_as_advanced(ENABLE_ADDRESS_SANITIZER)
91
92 if(ENABLE_ADDRESS_SANITIZER)
93 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address")
@@ -101,42 +103,55 @@ set(CONFIG_H ${CONFIG_H_DIR}/config.h)
103
104 # This is intended to make life easier for developers who are working on one
105 # specific feature.
104 -option(DEFAULT_FEATURE_STATE "specify the default state for optional features" True)
106 +option(DEFAULT_FEATURE_STATE "Specify the default state for most optional features" True)
107 mark_as_advanced(DEFAULT_FEATURE_STATE)
108
107 -option(ENABLE_CLOUD "enable cloud" ${DEFAULT_FEATURE_STATE})
108 -option(ENABLE_ACLK "enable aclk" ${DEFAULT_FEATURE_STATE})
109 -option(ENABLE_ML "enable machine learning" ${DEFAULT_FEATURE_STATE})
110 -option(ENABLE_H2O "enable h2o" True)
111 -option(ENABLE_DBENGINE "enable dbengine" True)
112 -
113 -option(ENABLE_PLUGIN_APPS "enable apps.plugin" ${DEFAULT_FEATURE_STATE})
114 -option(ENABLE_PLUGIN_CGROUP_NETWORK "enable cgroup-network plugin" ${DEFAULT_FEATURE_STATE})
115 -option(ENABLE_PLUGIN_CUPS "enable cups.plugin" ${DEFAULT_FEATURE_STATE})
116 -option(ENABLE_PLUGIN_DEBUGFS "enable debugfs.plugin" ${DEFAULT_FEATURE_STATE})
117 -option(ENABLE_PLUGIN_EBPF "enable ebpf.plugin" ${DEFAULT_FEATURE_STATE})
118 -option(ENABLE_PLUGIN_FREEIPMI "enable freeipmi.plugin" ${DEFAULT_FEATURE_STATE})
119 -option(ENABLE_PLUGIN_GO "enable go.d.plugin" ${DEFAULT_FEATURE_STATE})
120 -option(ENABLE_PLUGIN_LOCAL_LISTENERS "enable local-listeners" ${DEFAULT_FEATURE_STATE})
121 -option(ENABLE_PLUGIN_LOGS_MANAGEMENT "enable logs-management.plugin" ${DEFAULT_FEATURE_STATE})
122 -option(ENABLE_PLUGIN_NETWORK_VIEWER "enable network-viewer" ${DEFAULT_FEATURE_STATE})
123 -option(ENABLE_PLUGIN_NFACCT "enable nfacct.plugin" ${DEFAULT_FEATURE_STATE})
124 -option(ENABLE_PLUGIN_PERF "enable perf.plugin" ${DEFAULT_FEATURE_STATE})
125 -option(ENABLE_PLUGIN_SLABINFO "enable slabinfo.plugin" ${DEFAULT_FEATURE_STATE})
126 -option(ENABLE_PLUGIN_SYSTEMD_JOURNAL "enable systemd-journal.plugin" ${DEFAULT_FEATURE_STATE})
127 -option(ENABLE_PLUGIN_XENSTAT "enable xenstat.plugin" ${DEFAULT_FEATURE_STATE})
128 -
129 -option(ENABLE_EXPORTER_PROMETHEUS_REMOTE_WRITE "enable prometheus remote write exporter" ${DEFAULT_FEATURE_STATE})
130 -option(ENABLE_EXPORTER_MONGODB "enable mongodb exporter" ${DEFAULT_FEATURE_STATE})
131 -
132 -option(ENABLE_BUNDLED_JSONC "enable bundled json-c" False)
133 -option(ENABLE_BUNDLED_YAML "enable bundled yaml" False)
134 -option(ENABLE_BUNDLED_PROTOBUF "enable bundled protobuf" False)
135 -
136 -option(ENABLE_LOGS_MANAGEMENT_TESTS "enable logs management tests" True)
137 -
138 -option(ENABLE_SENTRY "enable sentry" False)
139 -option(ENABLE_WEBRTC "enable webrtc" False)
109 +# High-level features
110 +option(ENABLE_ACLK "Enable Netdata Cloud support (ACLK)" ${DEFAULT_FEATURE_STATE})
111 +cmake_dependent_option(ENABLE_CLOUD "Enable Netdata Cloud by default at runtime" True "NOT ENABLE_ACLK" False)
112 +mark_as_advanced(ENABLE_CLOUD)
113 +option(ENABLE_ML "Enable machine learning features" ${DEFAULT_FEATURE_STATE})
114 +option(ENABLE_DBENGINE "Enable dbengine metrics storage" True)
115 +
116 +# Data collection plugins
117 +option(ENABLE_PLUGIN_APPS "Enable per-process resource usage monitoring" ${DEFAULT_FEATURE_STATE})
118 +option(ENABLE_PLUGIN_CGROUP_NETWORK "Enable Linux CGroup network usage monitoring" ${DEFAULT_FEATURE_STATE})
119 +option(ENABLE_PLUGIN_CUPS "Enable CUPS monitoring" ${DEFAULT_FEATURE_STATE})
120 +option(ENABLE_PLUGIN_DEBUGFS "Enable Linux DebugFS metric collection" ${DEFAULT_FEATURE_STATE})
121 +option(ENABLE_PLUGIN_EBPF "Enable Linux eBPF metric collection" ${DEFAULT_FEATURE_STATE})
122 +option(ENABLE_PLUGIN_FREEIPMI "Enable IPMI monitoring" ${DEFAULT_FEATURE_STATE})
123 +option(ENABLE_PLUGIN_GO "Enable metric collectors written in Go" ${DEFAULT_FEATURE_STATE})
124 +option(ENABLE_PLUGIN_LOCAL_LISTENERS "Enable local listening socket tracking (including service auto-discovery support)" ${DEFAULT_FEATURE_STATE})
125 +option(ENABLE_PLUGIN_LOGS_MANAGEMENT "Enable log collection and monitoring based on Fluent Bit" ${DEFAULT_FEATURE_STATE})
126 +option(ENABLE_PLUGIN_NETWORK_VIEWER "Enable network viewer functionality" ${DEFAULT_FEATURE_STATE})
127 +option(ENABLE_PLUGIN_NFACCT "Enable Linux NFACCT metric collection" ${DEFAULT_FEATURE_STATE})
128 +option(ENABLE_PLUGIN_PERF "Enable Linux performance counter monitoring" ${DEFAULT_FEATURE_STATE})
129 +option(ENABLE_PLUGIN_SLABINFO "Enable Linux kernel SLAB allocator monitoring" ${DEFAULT_FEATURE_STATE})
130 +option(ENABLE_PLUGIN_SYSTEMD_JOURNAL "Enable systemd journal log collection" ${DEFAULT_FEATURE_STATE})
131 +option(ENABLE_PLUGIN_XENSTAT "Enable Xen domain monitoring" ${DEFAULT_FEATURE_STATE})
132 +
133 +# Metrics exporters
134 +option(ENABLE_EXPORTER_PROMETHEUS_REMOTE_WRITE "Enable exporting to Prometheus via remote write API" ${DEFAULT_FEATURE_STATE})
135 +option(ENABLE_EXPORTER_MONGODB "Enable exporting to MongoDB" ${DEFAULT_FEATURE_STATE})
136 +
137 +# Vendoring
138 +option(ENABLE_BUNDLED_JSONC "Force use of a vendored copy of JSON-C" False)
139 +option(ENABLE_BUNDLED_YAML "Force use of a vendored copy of libyaml" False)
140 +option(ENABLE_BUNDLED_PROTOBUF "Use a vendored copy of protobuf" False)
141 +
142 +# Optional test code
143 +cmake_dependent_option(ENABLE_LOGS_MANAGEMENT_TESTS "Enable test code for logs-management plugin." True "NOT ENABLE_PLUGIN_LOGS_MANAGEMENT" False)
144 +mark_as_advanced(ENABLE_LOGS_MANAGEMENT_TESTS)
145 +
146 +# Experimental features
147 +option(ENABLE_WEBRTC "Enable WebRTC dashboard communications (experimental)" False)
148 +mark_as_advanced(ENABLE_WEBRTC)
149 +option(ENABLE_H2O "Enable H2O web server (experimental)" True)
150 +mark_as_advanced(ENABLE_H2O)
151 +
152 +# Other optional functionality
153 +option(ENABLE_SENTRY "Build with Sentry Native crash reporting" False)
154 +mark_as_advanced(ENABLE_SENTRY)
155
156 cmake_dependent_option(FORCE_LEGACY_LIBBPF "Force usage of libbpf 0.0.9 instead of the latest version." False "ENABLE_PLUGIN_LIBBPF" False)
157 mark_as_advanced(FORCE_LEGACY_LIBBPF)
@@ -190,9 +205,9 @@ include(NetdataCompilerFlags)
205
206 # Disable hardening for debug builds by default.
207 if(CMAKE_BUILD_TYPE STREQUAL "Debug")
193 - option(DISABLE_HARDENING "disable adding extra compiler flags for hardening" TRUE)
208 + option(DISABLE_HARDENING "Disable adding extra compiler flags for hardening" TRUE)
209 else()
195 - option(DISABLE_HARDENING "disable adding extra compiler flags for hardening" FALSE)
210 + option(DISABLE_HARDENING "Disable adding extra compiler flags for hardening" FALSE)
211 endif()
212
213 set(EXTRA_HARDENING_C_FLAGS "")
@@ -271,7 +286,7 @@ if(NOT HAVE_LOG10)
286 list(APPEND CMAKE_REQUIRED_LIBRARIES m)
287 check_function_exists(log10 HAVE_LOG10)
288 if(HAVE_LOG10)
274 - set(LINK_LIBM True CACHE BOOL "" FORCE)
289 + set(LINK_LIBM True)
290 else()
291 message(FATAL_ERROR "Can not use log10 with/without libm.")
292 endif()