[cmake-developers] [CMake] dependencies of cross compiliations

Torsten Robitzki Torsten at Robitzki.de
Tue Dec 4 02:56:07 EST 2018

> Am 27.11.2018 um 19:55 schrieb Eric Noulard <eric.noulard at gmail.com>:
> However from my point of view and my cross-compiling experience when you cross-compile you have:
> 1) the host compiler which is used to compile "host tools"
> 2) the target compiler (may be several of them) to "cross-compile"
> My assumption are:
>  a) when you cross-compile your build is a "whole" and you shouldn't have to setup some superbuild
>    structure for building host tools ht_exe and another for target1 tool t1t_exe and another one for target2 tool t2t_exe.
>  b) what you want is to build:
>      ht_exe for the host
>      possibly use ht_exe during the build to generate some [source] file
>      t1t_exe for the [cross]target1
>      t2t_exe for the [cross]target2
>  c)  you seldomly compile the same source for the host AND the target, but it may happen.

In case, you are doing unit tests, it’s normal to have the same code running in a test on the host platform and in the final binary on the target.

I think, having more than 1 target platform becomes more and more normal as it becomes more usual to have multiple microcontrollers in a project.

Previously, I have encoded this in the build type. So instead of just having Debug and Release, I had HOST_Debug, HOST_Release NRF51_Debug, NRF51_Release, STM8_Debug, STM8_Release and so on. It doesn’t annoy me very much, that I have to run CMake 3 times to get all the binaries for a release build. The problem that I have, are dependencies between this builds. If I write a tool that (for example) generates source files for one of the target platforms, the build for the host platform must run before the build for that target platform. And when I make changes to that tool, I want the build to regenerate the generated source files.

Keeping track of this dependencies to solve this kind of ordering issues and to allow minimum rebuilds, is the main purpose of any build system. To solve this with CMake, I think we need a way to define the dependencies between build types (in the example above, from the generator from the host build to the generated source file in one of the target builds) and CMake needs to know the build directory for all build types (not only the current).

> The wish-season is coming up, so that's sort of what I would like to
> have. Now it's your turn. No bikeshedding please, only deliveries ;)

How about ``add_dependencies()`` allowing me to define dependencies between different build types? :-)

best regards,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Message signed with OpenPGP
URL: <https://cmake.org/pipermail/cmake-developers/attachments/20181204/18d9707d/attachment.sig>

More information about the cmake-developers mailing list