Hi Marcel, Thanks for your e-mail. I am not sure if your approach wil fully satisfy my use case. I need to compile on both the back-end and front-end.
My question really boils down to whether it's possible to use two different compilers for the same language within the same configuration. I was hoping there would be a way to set properties on individual files or directories and specify a different compiler (as one could specify different compilers flags). Is that possible? Perhaps, another alternative is to define a FRONTEND_C, FRONTEND_CXX and FRONTEND_F90 languages, as well as, define associated "add_frontend_executable()" and "add_frontend_library()", which would work with the frontend compiler when we are cross-compiling, or call "add_executable()" and "add_library" otherwise. This may be a bit of overkill though (but very useful), given that only a relative small subset of the project needs to be compiled for the front-end. Is there a good guide on how would one could define a different language in CMake? I am curious if there are any other known alternatives? Cheers, George On Wed, Oct 15, 2014 at 1:54 AM, Marcel Loose <lo...@astron.nl> wrote: > Hi George, > > You could (ab)use the "assembler plugin" system for that. Define your own > CMake-ASM-BGQ*.cmake files and use the assembler to compile the sources. > > Here's how I did this a couple of years ago for the BG/P. > > In the CMakeLists.txt file for the files that need to be compiled with the > BG/P compiler I have: > > ## --------------------------------------------------------------------------- > ## Enable BGP specific assembler. > ## Use the BGP assembler also for linking C/C++ programs. > ## --------------------------------------------------------------------------- > enable_language(ASM-BGP) > set(CMAKE_C_LINK_EXECUTABLE ${CMAKE_ASM-BGP_LINK_EXECUTABLE}) > set(CMAKE_CXX_LINK_EXECUTABLE ${CMAKE_ASM-BGP_LINK_EXECUTABLE}) > > > CMakeASM-BGPInformation.cmake: > > set(ASM_DIALECT "-BGP") > set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS S) > set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT > "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <DEFINES> <FLAGS> -c -o <OBJECT> > <SOURCE>") > set(CMAKE_ASM${ASM_DIALECT}_LINK_EXECUTABLE > "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <FLAGS> <LINK_FLAGS> <OBJECTS> -o > <TARGET> <LINK_LIBRARIES>") > include(CMakeASMInformation) > set(ASM_DIALECT) > > > CMakeDetermineASM-BGPCompiler.cmake: > > set(ASM_DIALECT "-BGP") > set(CMAKE_ASM${ASM_DIALECT}_COMPILER_INIT ${CMAKE_ASM_COMPILER}) > include(CMakeDetermineASMCompiler) > set(ASM_DIALECT) > > > CMakeTestASM-BGPCompiler.cmake: > > set(ASM_DIALECT "-BGP") > include(CMakeTestASMCompiler) > set(ASM_DIALECT) > > > Hope this helps. > > Regards, > Marcel Loose. > > > On 15/10/14 04:23, George Zagaris wrote: > > Dear all, > > I am working on a project where on certain platforms, namely, on a BG/Q > or Cray, we have to cross-compile the code, but still, there are parts of > the code that should only be compiled for the front end, login nodes. > > Typically, we have a toolchain file, which among other things sets: > - CMAKE_CXX_COMPILER > - CMAKE_C_COMPILER > - CMAKE_FORTRAN_COMPILER > > to the respective cross-compilers available on the target platform. > > This compiles everything for the back-end. > > The obvious way to compile front-end tools is to create another > directory, e.g., "front-end-build" and run cmake therein to re-configure > and build with a front-end compiler. > > However, since only a relatively small subset of the files needs to be > compiled for the front-end, it is desirable to do this within the same > build, which leads to my question: > > Is it possible to tell CMake to build certain files with a different > compiler? I know there is a way to set file properties to control the > compiler flags of certain files. Is there a "blessed" approach to control > the compiler for certain files and/or directories (and avoid things like > set(CMAKE_CXX_COMPILER...) within a CMakeLists file)? > > Thank you very much for all your help. > > Best, > George > > > > > > > -- > > Powered by www.kitware.com > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Kitware offers various services to support the CMake community. For more > information on each offering, please visit: > > CMake Support: http://cmake.org/cmake/help/support.html > CMake Consulting: http://cmake.org/cmake/help/consulting.html > CMake Training Courses: http://cmake.org/cmake/help/training.html > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Follow this link to subscribe/unsubscribe: > http://public.kitware.com/mailman/listinfo/cmake >
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake