mirror of
https://github.com/netdata/netdata.git
synced 2025-04-13 17:19:11 +00:00

* Properly support CMake 3.30. As of CMake 3.30, calling `FetchContent_Populate` is officially deprecated, and you get a warning about eventual removal. We end up calling this function to compensate for the fact that CMake prior to 3.28 provides no other way to make an external project managed through FetchContent available without adding it to the `all` target and thus installing the files from it, which we need to avoid doing for our vendored libraries. This changes things to check for CMake 3.28 or newer, and use the preferred method on those systems. Unfortunately, this is handled in a different place than the old workaround needed it to be handled in, so we need checks in multiple places to make this work. * Bump supported CMake versions to 3.16-3.30. The last system we supported that shipped 3.13 was Debian 10, which we no longer support, and 3.30 is the latest version.
45 lines
1.7 KiB
CMake
45 lines
1.7 KiB
CMake
# Extra tools for working with FetchContent on older CMake
|
|
#
|
|
# Copyright (c) 2024 Netdata Inc.
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
# FetchContent_MakeAvailable_NoInstall
|
|
#
|
|
# Add a sub-project with FetchContent, but with the EXCLUDE_FROM_ALL
|
|
# argument for the add_subdirectory part.
|
|
#
|
|
# CMake 3.28 and newer provide a way to do this with an extra argument
|
|
# on FetchContent_Declare, but older versions need you to implement
|
|
# the logic yourself. Once we no longer support CMake versions older
|
|
# than 3.28, we can get rid of this macro.
|
|
#
|
|
# Unlike FetchContent_MakeAvailble, this only accepts a single project
|
|
# to make available.
|
|
macro(FetchContent_MakeAvailable_NoInstall name)
|
|
include(FetchContent)
|
|
|
|
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28)
|
|
FetchContent_MakeAvailable(${name})
|
|
else()
|
|
FetchContent_GetProperties(${name})
|
|
|
|
if(NOT ${name}_POPULATED)
|
|
FetchContent_Populate(${name})
|
|
add_subdirectory(${${name}_SOURCE_DIR} ${${name}_BINARY_DIR} EXCLUDE_FROM_ALL)
|
|
endif()
|
|
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}")
|