[Buildroot] [PATCH] infra/pkg-cmake: use an obviously-invalid value for CMAKE_SYSTEM_VERSION
Arnout Vandecappelle
arnout at mind.be
Sun Jan 13 22:29:43 UTC 2019
On 13/01/2019 10:52, Yann E. MORIN wrote:
> In 36568732e4, we expanded toolchain.cmake to also define the value for
> CMAKE_SYSTEM_VERSION, as the cmake documentation states that it must be
> manually defined when doing cross-compilation [0]:
>
> When the CMAKE_SYSTEM_NAME variable is set explicitly to enable
> cross compiling then the value of CMAKE_SYSTEM_VERSION must also
> be set explicitly to specify the target system version.
>
> However, the fix in 36568732e4 uses the version of the kernel headers,
> assuming that would be the oldest kernel we could run on. Yet, this is
> not the case, because glibc (for example) has fallbacks to support
> running on kernels older than the headers it was built against.
Not a convincing argument, since "1" is definitely further away from the truth.
>
> The cmake official wiki [1] additionally states:
>
> * CMAKE_SYSTEM_VERSION : optional, version of your target system, not
> used very much.
Goes to show that the official wiki isn't worth much, because elsewhere it says
that it is mandatory...
>
> Folllowed a little bit below, by:
>
> * CMAKE_TOOLCHAIN_FILE : absolute or relative path to a cmake script
> which sets up all the toolchain related variables mentioned above
>
> For instance for crosscompiling from Linux to Embedded Linux on PowerPC
> this file could look like this:
>
> # this one is important
> SET(CMAKE_SYSTEM_NAME Linux)
> #this one not so much
> SET(CMAKE_SYSTEM_VERSION 1)
>
> [...]
>
> Furthermore, using the kernel headers version can be a bit misleading (as
> it really looks like is is the correct version to use when it is not),
> while it is obvious that 1 is not really the output of `uname -r` and
> thus is definitely not misleading.
OK, looking at it like that, it *is* a convincing argument.
>
> Finally, random searches [2] about CMAKE_SYSTEM_VERSION, mostly only
> turns up issues related with Windows, Mac-OS, and to a lesser extent,
> Android (where it is forcibly set to 1), with issues realted to running
> under just Linux (as opposed to Adnroid) mostly non-existent.
>
> Consequently, we revert to using the value that is suggested in the
> cmake WiKi, i.e. 1, and which is basically what we also used as a
> workaround in the azure-iot-sdk-c paclkage up until d300b1d3b1.
>
> A case were we will need to have a real kernel version, is if we one day
> have a cmake-based pacakge that builds and installs a kernel module [3],
Not a great example; trying to install kernel modules with anything else than
'make modules_install M=...' is a recipe for disaster...
Which actually makes it a good example! Indeed, a case like that we *want* to
break (so that it gets patched to use 'make modules_install M=...). Therefore:
Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be>
Regards,
Arnout
> because it will need the _running_ kernel version to install it in
> /lib/modules/VERSION/, but in that case it will anyway most probably
> not be the headers version.
>
> [0] https://cmake.org/cmake/help/v3.8/variable/CMAKE_SYSTEM_VERSION.html
> [1] https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/CrossCompiling
> [2] https://duckduckgo.com/?q=CMAKE_SYSTEM_VERSION
> [3] https://stackoverflow.com/questions/38205745/cmake-system-version-not-updated-for-new-kernel
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> Cc: Arnout Vandecappelle <arnout at mind.be>
> Cc: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
> Cc: Samuel Martin <s.martin49 at gmail.com>
> ---
> package/pkg-cmake.mk | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/package/pkg-cmake.mk b/package/pkg-cmake.mk
> index dd048b0949..50ae2b982a 100644
> --- a/package/pkg-cmake.mk
> +++ b/package/pkg-cmake.mk
> @@ -264,7 +264,7 @@ define TOOLCHAIN_CMAKE_INSTALL_FILES
> -e 's#@@TARGET_CC@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_CC)))#' \
> -e 's#@@TARGET_CXX@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_CXX)))#' \
> -e 's#@@TARGET_FC@@#$(subst $(HOST_DIR)/,,$(call qstrip,$(TARGET_FC)))#' \
> - -e 's#@@CMAKE_SYSTEM_VERSION@@#$(call qstrip,$(BR2_TOOLCHAIN_HEADERS_AT_LEAST))#' \
> + -e 's#@@CMAKE_SYSTEM_VERSION@@#1#' \
> -e 's#@@CMAKE_SYSTEM_PROCESSOR@@#$(call qstrip,$(CMAKE_SYSTEM_PROCESSOR))#' \
> -e 's#@@TOOLCHAIN_HAS_FORTRAN@@#$(if $(BR2_TOOLCHAIN_HAS_FORTRAN),1,0)#' \
> -e 's#@@CMAKE_BUILD_TYPE@@#$(if $(BR2_ENABLE_DEBUG),Debug,Release)#' \
>
More information about the buildroot
mailing list