[Buildroot] [PATCH v2] infra/pkg-cmake: use an obviously-invalid value for CMAKE_SYSTEM_VERSION
Peter Korsgaard
peter at korsgaard.com
Wed Jan 16 22:19:50 UTC 2019
>>>>> "Yann" == Yann E MORIN <yann.morin.1998 at free.fr> writes:
> 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.
> The cmake official wiki [1] additionally states:
> * CMAKE_SYSTEM_VERSION : optional, version of your target system, not
> used very much.
> 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.
> 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],
> 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>
> Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout at mind.be>
> ---
> Changes v1 -> v2:
> - directly hard-code the condtant in toolchainfile.cmake.in (Thomas)
Committed, thanks.
--
Bye, Peter Korsgaard
More information about the buildroot
mailing list