Skip to content

Commit

Permalink
Ensure that the choice of compiler and target is passed to sub-projec…
Browse files Browse the repository at this point in the history
…ts. (#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.
  • Loading branch information
Ferroin committed May 24, 2024
1 parent 66b6f33 commit e81a8d8
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ endif()

if(ENABLE_WEBRTC)
include(FetchContent)
include(NetdataFetchContentExtra)

# ignore debhelper
set(FETCHCONTENT_FULLY_DISCONNECTED Off)
Expand All @@ -217,6 +218,7 @@ if(ENABLE_WEBRTC)
FetchContent_Declare(libdatachannel
GIT_REPOSITORY https://github.com/paullouisageneau/libdatachannel.git
GIT_TAG v0.20.1
CMAKE_ARGS ${NETDATA_PROPAGATE_TOOLCHAIN_ARGS}
)
FetchContent_MakeAvailable(libdatachannel)
endif()
Expand Down
14 changes: 14 additions & 0 deletions packaging/cmake/Modules/NetdataFetchContentExtra.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,17 @@ macro(FetchContent_MakeAvailable_NoInstall name)
add_subdirectory(${${name}_SOURCE_DIR} ${${name}_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
endmacro()

# NETDATA_PROPAGATE_TOOLCHAIN_ARGS
#
# Defines a set of CMake flags to be passed to CMAKE_ARGS for
# FetchContent_Declare and ExternalProject_Add to ensure that toolchain
# configuration propagates correctly to sub-projects.
#
# This needs to be explicitly included for any sub-project that needs
# to be built for the target system.
set(NETDATA_PROPAGATE_TOOLCHAIN_ARGS
"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
$<$<BOOL:${CMAKE_C_COMPILER_TARGET}>:-DCMAKE_C_COMPILER_TARGET=${CMAKE_C_COMPILER_TARGET}
$<$<BOOL:${CMAKE_CXX_COMPILER_TARGET}>:-DCMAKE_CXX_COMPILER_TARGET=${CMAKE_CXX_COMPILER_TARGET}")
1 change: 1 addition & 0 deletions packaging/cmake/Modules/NetdataJSONC.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ function(netdata_bundle_jsonc)
FetchContent_Declare(json-c
GIT_REPOSITORY https://github.com/json-c/json-c
GIT_TAG b4c371fa0cbc4dcbaccc359ce9e957a22988fb34 # json-c-0.17-20230812
CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
)

FetchContent_MakeAvailable_NoInstall(json-c)
Expand Down
2 changes: 2 additions & 0 deletions packaging/cmake/Modules/NetdataProtobuf.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ function(netdata_bundle_protobuf)
FetchContent_Declare(absl
GIT_REPOSITORY https://github.com/abseil/abseil-cpp
GIT_TAG ${ABSL_TAG}
CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
)
FetchContent_MakeAvailable_NoInstall(absl)
message(STATUS "Finished preparing bundled Abseil")
Expand All @@ -47,6 +48,7 @@ function(netdata_bundle_protobuf)
FetchContent_Declare(protobuf
GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git
GIT_TAG ${PROTOBUF_TAG}
CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
)
FetchContent_MakeAvailable_NoInstall(protobuf)
message(STATUS "Finished preparing bundled Protobuf.")
Expand Down
1 change: 1 addition & 0 deletions packaging/cmake/Modules/NetdataSentry.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ function(netdata_bundle_sentry)
sentry
GIT_REPOSITORY https://github.com/getsentry/sentry-native.git
GIT_TAG c97bcc63fa89ae557cef9c9b6e3acb11a72ff97d # v0.6.6
CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
)
FetchContent_MakeAvailable(sentry)
endfunction()
1 change: 1 addition & 0 deletions packaging/cmake/Modules/NetdataYAML.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ function(netdata_bundle_libyaml)
FetchContent_Declare(yaml
GIT_REPOSITORY https://github.com/yaml/libyaml
GIT_TAG 2c891fc7a770e8ba2fec34fc6b545c672beb37e6 # v0.2.5
CMAKE_ARGS ${NETDATA_CMAKE_PROPAGATE_TOOLCHAIN_ARGS}
)

FetchContent_MakeAvailable_NoInstall(yaml)
Expand Down

0 comments on commit e81a8d8

Please sign in to comment.