I wish to add support for cross-compiling to CMake since its a tool I use a lot, and I can finally kill the last few of my projects using autotools. To my knowledge, autotools is the only system that provides cross-compiling, and poorly at that, and I've been thinking on ways to add it to CMake. Here's what I got so far:

Add a standard flag when the language is c, or c++ (or some other language that can be cross-compiled): CROSS_COMPILE?

If its yes, remove the normal fields for compilers (from the advanced view), and have the following (I'm open to suggestions for TARGET (the machine being built for) and LOCAL:
TARGET_CC
TARGET_CXX
TARGET_LD
TARGET_*etc*
TARGET_PLATFORM

LOCAL_CC
LOCAL_CXX
LOCAL_LD
LOCAL_*etc*


*CMAKE_SSH=ssh
*CMAKE_SCP=scp
TARGET_REMOTE_PATH=~

* = should probably be environment varriables
Anyone who's cross-compiled anything with autotools will notice that I chose to use different terminology, and omit the equivalent of -- target that autotools use for a few reasons:

--target is only used in VERY rare cases when doing a canadian cross, or when creating an actual cross-compiler. In years of using cross- compilers, I've never seen the need to do it. Beside gcc and binutils, to my knowledge, no package uses --target. (for those of you curious, --target is used to set the target output of code from a compiler, hence why its not used very often - I don't believe general projects will ever need this functionality, and if they do, they can simply write a custom macro to mimic its functionality).

Next, you'll see that I specfic CMAKE_SSH/SCP and TARGET_REMTOE_PATH. autotools cross-compiler support is VERY clunky, and it is very poor in running remote platform tests. When autotoos needs to determine if something is true on the target machine, it bombs with "Unable to test due to cross-compiling", and doesn't give you any alternative but to dig into the configure script, find the variable it's referring and manually set it. It also "helpfully" deletes any test code it would have used to determine it on a local platform. In addition, this can be extended to CTest to properly run tests on both the remote and building systems.

Also, since GCC is the only open-source and free cross-compiler (OpenWatcom can't be built as a crosscompiler, and Borland and Microsoft don't offer them (expect for Windows CE, and VERY old versions of Windows NT)), it will be a requirement for CMake to test for GCC as the cross-compiler, but have support for different native compilers.

Finally, a special generator will have to be written that can handle the generation of a makefile that will properly do the cross-compiling.

I am interested in any support or ideas before I attempt to take this project on.
Michael
_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to