| I've been working on determining on how to do the platform part of this. My first guess is we could do something like this in the platform files: (from gcc.cmake) IF(CMAKE_COMPILER_IS_GNUCC) SET (CMAKE_C_FLAGS_INIT "") SET (CMAKE_C_FLAGS_DEBUG_INIT "-g") SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") SET (CMAKE_C_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") SET (CMAKE_C_CREATE_PREPROCESSED_SOURCE "<CMAKE_C_COMPILER> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>") SET (CMAKE_C_CREATE_ASSEMBLY_SOURCE "<CMAKE_C_COMPILER> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>") ENDIF(CMAKE_COMPILER_IS_GNUCC) We could add something like this under it: IF(CROSS_COMPILING) IF(CMAKE_CROSSCOMPILER_IS_GNUCC) SET (CMAKE_CROSS_C_FLAGS_INIT "") SET (CMAKE_CROSS_C_FLAGS_DEBUG_INIT "-g") SET (CMAKE_CROSS_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") SET (CMAKE_CROSS_C_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") SET (CMAKE_CROSS_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g") SET (CMAKE_CROSS_C_CREATE_PREPROCESSED_SOURCE "<CMAKE_CROSS_C_COMPILER> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>") SET (CMAKE_CROSS_C_CREATE_ASSEMBLY_SOURCE "<CMAKE_CROSS_C_COMPILER> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>") ENDIF(CMAKE_COMPILER_IS_GNUCC) ENDIF(CROSS_COMPILING) Now this isn't ideal because it means adding quite a bit of information to each platform file, but its also very powerful because there cases where you don't want the platform to be same. For instance, if you were cross-compiling to Mac OS X, your not going to want Universial Binary settings there since (to my knowledge), it's nearly impossible to do that. =
Now, we also need a way to denote if a tool should be built natively, or if it should both built natively or crosscompiled, We could go to ADD_EXECUTABLE, and friends, and add a switch. NATIVE|BOTH. Native would build the tool with the local tool-chain instead of cross-compiler, and both would, obviously enough, compile both for native and cross. This is a fairly large change, so at the moment, I was hoping some of the CMake developers could give so more input on their opinions. Finally, in regards to systems that cross-compile packages often (like OpenEmbedded or only of the many firmware packages for the Linkssy WRT54G(S)), it should be as easy to setup cross-compiling from the command line as it is for ./configure. I also believe a few distributions cross-compile their packages (I believe debian does this with their builddd system, but I don't really know for sure). It should be like this: cmake -DCROSS_COMPILE_HOST=armvt5eb-unknown-linux which is comparable to: ./configure --host=armvt5eb-unknown-linux I'm aware that CMake doesn't really use the *arch*-*vendor*-*platform* style, but it does have variables for them. The hardest part will be figuring out which platform file to load at compile time. It doesn't seem we can have a multiple choice thing in so I'm interested in any ideas. For those unfamiliar with cross-compilers, GCC will build with a name like this, which should be the default when cross-compilng: *host*-*vendor*-*style*-gcc *host*-*vendor*-*style*-g++ etc. Michael On Sep 7, 2006, at 7:35 PM, William A. Hoffman wrote:
|
_______________________________________________ CMake mailing list [email protected] http://www.cmake.org/mailman/listinfo/cmake
