[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