Correctly handle required compilation flags for dependencies. (#17664)
`target_compile_definitions` can only be used for actual command line _macro definitions_. But the `*_CFLAGS_OTHER` may contain flags that are _not_ macro definitions, and when that happens, any use of `target_compile_definitions` with the relevant `*_CFLAGS_OTHER` variable will break the build. Instead, we should be using `target_compile_options` for these variables.
Austin S. Hemmelgarn committed
May 16, 2024 at 06:47 UTC
bfdd2284a63b7656296d503ffe6e0c24a943dbce
5 files changed
+15
-12
CMakeLists.txt
+10
-7
@@ -1655,7 +1655,7 @@ if(MACOS)
1655
else()
1656
pkg_check_modules(ZLIB REQUIRED zlib)
1657
target_include_directories(libnetdata BEFORE PUBLIC ${ZLIB_INCLUDE_DIRS})
1658
- target_compile_definitions(libnetdata PUBLIC ${ZLIB_CFLAGS_OTHER})
1658
+ target_compile_options(libnetdata PUBLIC ${ZLIB_CFLAGS_OTHER})
1659
target_link_libraries(libnetdata PUBLIC ${ZLIB_LDFLAGS})
1660
endif()
1661
@@ -1670,7 +1670,7 @@ else()
1670
endif()
1671
1672
target_include_directories(libnetdata BEFORE PUBLIC ${LIBLZ4_INCLUDE_DIRS})
1673
-target_compile_definitions(libnetdata PUBLIC ${LIBLZ4_CFLAGS_OTHER})
1673
+target_compile_options(libnetdata PUBLIC ${LIBLZ4_CFLAGS_OTHER})
1674
target_link_libraries(libnetdata PUBLIC ${LIBLZ4_LDFLAGS})
1675
1676
# zstd
@@ -1678,7 +1678,7 @@ pkg_check_modules(LIBZSTD libzstd)
1678
if(LIBZSTD_FOUND)
1679
set(ENABLE_ZSTD On)
1680
target_include_directories(libnetdata BEFORE PUBLIC ${LIBZSTD_INCLUDE_DIRS})
1681
- target_compile_definitions(libnetdata PUBLIC ${LIBZSTD_CFLAGS_OTHER})
1681
+ target_compile_options(libnetdata PUBLIC ${LIBZSTD_CFLAGS_OTHER})
1682
target_link_libraries(libnetdata PUBLIC ${LIBZSTD_LDFLAGS})
1683
endif()
1684
@@ -1687,7 +1687,7 @@ pkg_check_modules(LIBBROTLI libbrotlidec libbrotlienc libbrotlicommon)
1687
if(LIBBROTLI_FOUND)
1688
set(ENABLE_BROTLI On)
1689
target_include_directories(libnetdata PUBLIC ${LIBBROTLI_INCLUDE_DIRS})
1690
- target_compile_definitions(libnetdata PUBLIC ${LIBBROTLI_CFLAGS_OTHER})
1690
+ target_compile_options(libnetdata PUBLIC ${LIBBROTLI_CFLAGS_OTHER})
1691
target_link_libraries(libnetdata PUBLIC ${LIBBROTLI_LDFLAGS})
1692
endif()
1693
@@ -1698,14 +1698,14 @@ if(MACOS OR WINDOWS)
1698
else()
1699
pkg_check_modules(UUID REQUIRED uuid)
1700
target_include_directories(libnetdata BEFORE PUBLIC ${UUID_INCLUDE_DIRS})
1701
- target_compile_definitions(libnetdata PUBLIC ${UUID_CFLAGS_OTHER})
1701
+ target_compile_options(libnetdata PUBLIC ${UUID_CFLAGS_OTHER})
1702
target_link_libraries(libnetdata PUBLIC ${UUID_LDFLAGS})
1703
endif()
1704
1705
# uv
1706
pkg_check_modules(LIBUV REQUIRED libuv)
1707
target_include_directories(libnetdata BEFORE PUBLIC ${LIBUV_INCLUDE_DIRS})
1708
-target_compile_definitions(libnetdata PUBLIC ${LIBUV_CFLAGS_OTHER})
1708
+target_compile_options(libnetdata PUBLIC ${LIBUV_CFLAGS_OTHER})
1709
target_link_libraries(libnetdata PUBLIC ${LIBUV_LDFLAGS})
1710
1711
# crypto
@@ -2267,6 +2267,9 @@ add_executable(netdata
2267
2268
target_compile_definitions(netdata PRIVATE
2269
"$<$<BOOL:${ENABLE_ML}>:DLIB_NO_GUI_SUPPORT>"
2270
+)
2271
+
2272
+target_compile_options(netdata PRIVATE
2273
"$<$<BOOL:${ENABLE_EXPORTER_MONGODB}>:${MONGOC_CFLAGS_OTHER}>"
2274
"$<$<BOOL:${ENABLE_EXPORTER_PROMETHEUS_REMOTE_WRITE}>:${SNAPPY_CFLAGS_OTHER}>"
2275
)
@@ -2333,7 +2336,7 @@ if(PCRE2_FOUND)
2336
2337
add_executable(log2journal ${LOG2JOURNAL_FILES})
2338
target_include_directories(log2journal BEFORE PUBLIC ${CONFIG_H_DIR} ${CMAKE_SOURCE_DIR}/src ${PCRE2_INCLUDE_DIRS})
2336
- target_compile_definitions(log2journal PUBLIC ${PCRE2_CFLAGS_OTHER})
2339
+ target_compile_options(log2journal PUBLIC ${PCRE2_CFLAGS_OTHER})
2340
target_link_libraries(log2journal PUBLIC "${PCRE2_LDFLAGS}")
2341
2342
netdata_add_libyaml_to_target(log2journal)
packaging/cmake/Modules/NetdataJSONC.cmake
+1
-1
@@ -96,7 +96,7 @@ endmacro()
96
# macro must have already been run at least once for this to work correctly.
97
function(netdata_add_jsonc_to_target _target)
98
target_include_directories(${_target} PUBLIC ${NETDATA_JSONC_INCLUDE_DIRS})
99
- target_compile_definitions(${_target} PUBLIC ${NETDATA_JSONC_CFLAGS_OTHER})
99
+ target_compile_options(${_target} PUBLIC ${NETDATA_JSONC_CFLAGS_OTHER})
100
target_link_libraries(${_target} PUBLIC ${NETDATA_JSONC_LDFLAGS})
101
add_dependencies(${_target} json-c-compat-link)
102
endfunction()
packaging/cmake/Modules/NetdataLibBPF.cmake
+2
-2
@@ -90,13 +90,13 @@ function(netdata_bundle_libbpf)
90
PROPERTY INTERFACE_LINK_LIBRARIES "${ELF_LIBRARIES};${ZLIB_LIBRARIES}"
91
)
92
set(NETDATA_LIBBPF_INCLUDE_DIRECTORIES "${libbpf_SOURCE_DIR}/usr/include;${libbpf_SOURCE_DIR}/include;${ELF_INCLUDE_DIRECTORIES};${ZLIB_INCLUDE_DIRECTORIES}" PARENT_SCOPE)
93
- set(NETDATA_LIBBPF_COMPILE_DEFINITIONS "${ELF_CFLAGS_OTHER};${ZLIB_CFLAGS_OTHER}" PARENT_SCOPE)
93
+ set(NETDATA_LIBBPF_COMPILE_OPTIONS "${ELF_CFLAGS_OTHER};${ZLIB_CFLAGS_OTHER}" PARENT_SCOPE)
94
endfunction()
95
96
# Add libbpf as a link dependency for the given target.
97
function(netdata_add_libbpf_to_target _target)
98
target_link_libraries(${_target} PUBLIC libbpf_library)
99
target_include_directories(${_target} BEFORE PUBLIC "${NETDATA_LIBBPF_INCLUDE_DIRECTORIES}")
100
- target_compile_definitions(${_target} PUBLIC "${NETDATA_LIBBPF_COMPILE_DEFINITIONS}")
100
+ target_compile_options(${_target} PUBLIC "${NETDATA_LIBBPF_COMPILE_OPTIONS}")
101
add_dependencies(${_target} libbpf)
102
endfunction()
packaging/cmake/Modules/NetdataProtobuf.cmake
+1
-1
@@ -165,7 +165,7 @@ endfunction()
165
166
# Add protobuf to a specified target.
167
function(netdata_add_protobuf _target)
168
- target_compile_definitions(${_target} PRIVATE ${PROTOBUF_CFLAGS_OTHER})
168
+ target_compile_options(${_target} PRIVATE ${PROTOBUF_CFLAGS_OTHER})
169
target_include_directories(${_target} PRIVATE ${PROTOBUF_INCLUDE_DIRS})
170
target_link_libraries(${_target} PRIVATE ${PROTOBUF_LIBRARIES})
171
endfunction()
packaging/cmake/Modules/NetdataYAML.cmake
+1
-1
@@ -60,6 +60,6 @@ endmacro()
60
# macro must have already been run at least once for this to work correctly.
61
function(netdata_add_libyaml_to_target _target)
62
target_include_directories(${_target} PUBLIC ${NETDATA_YAML_INCLUDE_DIRS})
63
- target_compile_definitions(${_target} PUBLIC ${NETDATA_YAML_CFLAGS_OTHER})
63
+ target_compile_options(${_target} PUBLIC ${NETDATA_YAML_CFLAGS_OTHER})
64
target_link_libraries(${_target} PUBLIC ${NETDATA_YAML_LDFLAGS})
65
endfunction()