[cmake-developers] Using multiple toolchains
Eric Noulard
eric.noulard at gmail.com
Fri Jul 5 04:53:43 EDT 2013
2013/7/4 Stephen Kelly <steveire at gmail.com>:
[...]
>
> My approach comprises several steps:
>
> 1. Refactor cmake so that more that one toolchain can be available at
> a time.
> 2. Make host+target builds possible in a single buildsystem by initializing
> both the host and the target toolchain, specifying whether to find
> dependencies in the host or the target, and specifying whether to build a
> particular cmake-target for the host or for the target system. This does
> not expose us to problems of clashes of cmake-target names for multiple
> toolchains or problems of defining multiple per-toolchain make-targets
> for a single cmake-target as all of those things remain impossible at
> this step. This step requires some way to define such distinctions in
> front-end CMakeLists.txt files. Possibly something like a toolchains()
> command scoped to end with a endtoolchains() command.
> 3. Make it possible to define multiple toolchains to build a single target
> for. Still only two toolchains are possible (host+target), but now we can
> define that a single cmake-target created with add_executable should be
> built for both the host and the target. Consider moc for example, which
> might make sense to build for both so that target-on-target builds (or
> target-in-target-vm builds) can be done. In addition to step two, this
> step requires solving the disabmiguation problems of cmake-targets and
> other problems that come from using multiple toolchains from one
> cmake-target definition.
> 4. Make it possible to use N target toolchains. This takes advantage of the
> solutions created in step 3. In addition to step 3, this step requires
> deprecation of the undocumented CMAKE_TOOLCHAIN_FILE in favor of
> something which can be a list, and it requires some way of attaching
> names to toolchains. Projects using this have the disadvantage that there
> is nothing but convention to standardise toolchain names. One project
> might use RaspPi as a toolchain name in a CMakeLists.txt file, while
> another uses RaspberryPi and yet another Raspbian. Qt has a similar issue
> with device mkspec names.
>
>> While the work in your branch has gotten
>> impressively far, it also serves to demonstrate the inherent
>> complexity of the proposed approach. IMO it is not worth exploring
>> that approach further. Sorry.
>
> That reaction is not what I was hoping for. :)
I was surprised by Brad's answer as well.
> My branch makes a start mostly on steps 1 and 2 above, and to a small
> extent, step 4. 80% of the motivation and value of multiple toolchains comes
> from step 2, so I would happily truncate the other two as goals or leave
> them to future exporation.
+1
I do agree with that, I'm seldomly do cross-compiling but when I do
miss the native+target compilation I was used to when I was using
hand-written recursive makefile system 10+ year agos.
> I don't think an inappropriate amount of work or fundamental change to cmake
> is required to achieve step 2.
"innappropriate amount" heavily depends on who is doing the job but I guess
that the already proven workload given by Stephen to CMake speaks for itself.
I'm pretty sure he'll manage to do that.
The main issue would be, could it become a nightmare to maintain?
I did not manage to have so much time on the CMake front lately but
I'll try to follow and test Stephen work on that if it is going on.
--
Erk
L'élection n'est pas la démocratie -- http://www.le-message.org
More information about the cmake-developers
mailing list