@cryptotaxi247 / netdata-1 / commits / e81a8d826

Ensure that the choice of compiler and target is passed to sub-projects. (#17732)

If not explicitly set using exported environment variables, the choice of compilers and compiler targets used by CMake does not get propagated to sub-porjects created with ExternalProject_Add or FetchContent_Declare. In most cases this does not matter, because very few people are building using non-default compilers for their environment, but it can cause issues in two specific cases: - If building for the same system that the build is happening on, but using a non-default compiler specified using CMake arguments (instead of via exported environment variables), sub-projects will still use the default compiler for the system, which may result in linking errors (or runtime failures even if the link succeeds). - If cross-compiling and not using the preferred approaches of either a toolchain file or exported environment variables, sub-projects may not even build for the correct CPU architecture, causing the build to fail. This adds logic to ensure that the compiler and compiler targets get propagated correctly even if they are just specified on the command line, thus avoiding the above two possibilities.

Austin S. Hemmelgarn committed May 24, 2024 at 07:13 UTC e81a8d826cbab4b74fbca5c16e2d4fe683cecbf6
6 files changed +21
CMakeLists.txt
+2
@@ -204,6 +204,7 @@ endif()
204
205 if(ENABLE_WEBRTC)
206 include(FetchContent)
207 + include(NetdataFetchContentExtra)
208
209 # ignore debhelper
210 set(FETCHCONTENT_FULLY_DISCONNECTED Off)
@@ -217,6 +218,7 @@ if(ENABLE_WEBRTC)
218 FetchContent_Declare(libdatachannel
219 GIT_REPOSITORY https://github.com/paullouisageneau/libdatachannel.git
220 GIT_TAG v0.20.1
221 + CMAKE_ARGS ${NETDATA_PROPAGATE_TOOLCHAIN_ARGS}
222 )
223 FetchContent_MakeAvailable(libdatachannel)
224 endif()
packaging/cmake/Modules/NetdataFetchContentExtra.cmake
+14
@@ -25,3 +25,17 @@ macro(FetchContent_MakeAvailable_NoInstall name)
25 add_subdirectory(${${name}_SOURCE_DIR} ${${name}_BINARY_DIR} EXCLUDE_FROM_ALL)
26 endif()
27 endmacro()
28 +
29 +# NETDATA_PROPAGATE_TOOLCHAIN_ARGS
30 +#
31 +# Defines a set of CMake flags to be passed to CMAKE_ARGS for
32 +# FetchContent_Declare and ExternalProject_Add to ensure that toolchain
33 +# configuration propagates correctly to sub-projects.
34 +#
35 +# This needs to be explicitly included for any sub-project that needs
36 +# to be built for the target system.
37 +set(NETDATA_PROPAGATE_TOOLCHAIN_ARGS
38 + "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
39 + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
40 + $<$<BOOL:${CMAKE_C_COMPILER_TARGET}>:-DCMAKE_C_COMPILER_TARGET=${CMAKE_C_COMPILER_TARGET}
41 + $<$<BOOL:${CMAKE_CXX_COMPILER_TARGET}>:-DCMAKE_CXX_COMPILER_TARGET=${CMAKE_CXX_COMPILER_TARGET}")
packaging/cmake/Modules/NetdataJSONC.cmake
+1
@@ -40,6 +40,7 @@ function(netdata_bundle_jsonc)
40 FetchContent_Declare(json-c
41 GIT_REPOSITORY https://github.com/json-c/json-c
42 GIT_TAG b4c371fa0cbc4dcbaccc359ce9e957a22988fb34 # json-c-0.17-20230812
43 + CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
44 )
45
46 FetchContent_MakeAvailable_NoInstall(json-c)
packaging/cmake/Modules/NetdataProtobuf.cmake
+2
@@ -33,6 +33,7 @@ function(netdata_bundle_protobuf)
33 FetchContent_Declare(absl
34 GIT_REPOSITORY https://github.com/abseil/abseil-cpp
35 GIT_TAG ${ABSL_TAG}
36 + CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
37 )
38 FetchContent_MakeAvailable_NoInstall(absl)
39 message(STATUS "Finished preparing bundled Abseil")
@@ -47,6 +48,7 @@ function(netdata_bundle_protobuf)
48 FetchContent_Declare(protobuf
49 GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
50 GIT_TAG ${PROTOBUF_TAG}
51 + CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
52 )
53 FetchContent_MakeAvailable_NoInstall(protobuf)
54 message(STATUS "Finished preparing bundled Protobuf.")
packaging/cmake/Modules/NetdataSentry.cmake
+1
@@ -28,6 +28,7 @@ function(netdata_bundle_sentry)
28 sentry
29 GIT_REPOSITORY https://github.com/getsentry/sentry-native.git
30 GIT_TAG c97bcc63fa89ae557cef9c9b6e3acb11a72ff97d # v0.6.6
31 + CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
32 )
33 FetchContent_MakeAvailable(sentry)
34 endfunction()
packaging/cmake/Modules/NetdataYAML.cmake
+1
@@ -23,6 +23,7 @@ function(netdata_bundle_libyaml)
23 FetchContent_Declare(yaml
24 GIT_REPOSITORY https://github.com/yaml/libyaml
25 GIT_TAG 2c891fc7a770e8ba2fec34fc6b545c672beb37e6 # v0.2.5
26 + CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
27 )
28
29 FetchContent_MakeAvailable_NoInstall(yaml)