It is pretty much standard. I wrote the toolchain file adapting
different examples.
the Cmakelist is for the subdirectory of my parser (called SIT_parser).
The trick si that I use a custom command for Lex/Yacc, so even when
cross-compiling it is still correctly called.
Michele
Le 10/10/2016 à 12:48, Robert Bielik a écrit :
Ok, I cannot get this to work. The source files to be generated with
add_custom_command have property GENERATED set to ON, but cmake does
not adhere, and tries to use the tool binaries of the target system.
Michele, would you be ok with sharing your cmake code for this
particular bit ?
Regards
/R
*From:*portolan [mailto:[email protected]]
*Sent:* den 10 oktober 2016 11:33
*To:* Robert Bielik <[email protected]>; Craig Scott
<[email protected]>
*Cc:* [email protected]
*Subject:* Re: [CMake] Crosscompilation woes
I cannot answer your question: I am a newcomer to Cmake (I have been
using it for less than 6 months) and on my build system I have 3.6, so
I never really looked at the previous versions.
Sorry,
Michele
Le 10/10/2016 à 11:30, Robert Bielik a écrit :
Thank you Michele,
This is exactly what I’m after. You specify cmake v3.6 docs ? Is
it only working from 3.6.x ? I have 3.5.2 on my build system.
Regards
/Robert
*From:*portolan [mailto:[email protected]]
*Sent:* den 10 oktober 2016 11:27
*To:* Robert Bielik <[email protected]>
<mailto:[email protected]>; Craig Scott
<[email protected]> <mailto:[email protected]>
*Cc:* [email protected] <mailto:[email protected]>
*Subject:* Re: [CMake] Crosscompilation woes
In my project I build on Linux i686 and I use a Toolchain file to
specify the ARM cross-compiler
https://cmake.org/cmake/help/v3.6/manual/cmake-toolchains.7.html
The nice thing is that if you mark some files as "generated" CMAKE
will automatically use the build rather than the target
toolchains. For instance, I have a Flex/Byson compiler that is
generated locally on i686 , but then compiled for ARM.
Regards,
Michele
Le 10/10/2016 à 11:10, Robert Bielik a écrit :
Thanks Craig,
Your solution will work for me I think.
Regards
/R
*From:*Craig Scott [mailto:[email protected]]
*Sent:* den 10 oktober 2016 10:47
*To:* Robert Bielik <[email protected]>
<mailto:[email protected]>
*Cc:* [email protected] <mailto:[email protected]>
*Subject:* Re: [CMake] Crosscompilation woes
Here's one possible solution (not perfect, but has been
working in production for us for a while now for a similar
scenario to what you describe):
http://stackoverflow.com/q/36084785/1938798
An alternative is a superbuild arrangement which would require
a top level project to drive two sub-builds brought in via
ExternalProject
<https://cmake.org/cmake/help/latest/module/ExternalProject.html>,
one for the host and the other for arm. This is both better
and worse, depending on your point of view, so you may need to
do some research/experimenting to see which is a better fit
for your situation.
On Mon, Oct 10, 2016 at 7:29 PM, Robert Bielik
<[email protected] <mailto:[email protected]>> wrote:
Hi all,
I am crosscompiling a project for arm (on linux i686), and
use codegeneration tools within the project (together with
add_custom_command). Of course, this will fail, since the
tools are compiled for arm also and thus won't execute on
my host system. So the tools need to be compiled for i686
whilst the rest for arm. I'm sure this can be handled by
CMake although haven't done it before so would appreciate
pointers :)
Regards
/Robert
--
Powered by www.kitware.com <http://www.kitware.com>
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
<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
<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
--
Craig Scott
Melbourne, Australia
https://crascit.com
### SET(CMAKE_SYSTEM_NAME Linux) # Tell CMake we're cross-compiling
### include(CMakeForceCompiler)
### # Prefix detection only works with compiler id "GNU"
### # CMake will look for prefixed g++, cpp, ld, etc. automatically
### CMAKE_FORCE_CXX_COMPILER( arm-linux-gnueabihf-g++ GNU)
# this one is important
SET(CMAKE_SYSTEM_NAME Linux)
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)
# specify the cross compiler
SET(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc-5)
SET(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++-5)
# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /usr/bin/)
# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
INCLUDE(CMakeForceCompiler)
# specify the cross compiler
CMAKE_FORCE_C_COMPILER(arm-linux-gnueabihf-gcc-5 GNU)
CMAKE_FORCE_CXX_COMPILER(arm-linux-gnueabihf-g++-5 GNU)
cmake_minimum_required(VERSION 3.5)
project(SIT_parser)
find_package(FLEX)
find_package(BISON)
if ( NOT FLEX_FOUND)
message( FATAL_ERROR "Flex not found")
endif()
if (NOT BISON_FOUND)
message( FATAL_ERROR "Bison not found")
endif()
add_definitions(${P_WARNINGS})
set (P_WARNINGS "-Wall -Wno-sign-compare -Wnon-virtual-dtor -Wredundant-decls
-Wundef -Wmissing-declarations -Wmissing-include-dirs")
add_definitions(${P_CFLAGS})
set (P_CFLAGS "${P_WARNINGS} -std=c++14")
add_definitions(${Flex_Switches})
if (WIN32)
#+ set (P_CFLAGS ${P_CFLAGS} -DBUILD_DLL)
set (P_CFLAGS ${P_CFLAGS})
set (Flex_Switches -v -L)
else()
set (P_CFLAGS "${P_CFLAGS} -fPIC")
set (Flex_Switches -v -L)
endif()
set (LEX_YACC_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/")
# Create custom command for flex/lex (note the outputs)
ADD_CUSTOM_TARGET(SIT_Lexer_class echo "Creating SIT_lexer")
add_custom_command(
OUTPUT ${LEX_YACC_SRC_DIR}SIT_lexer.yy.cc
COMMAND flex ${Flex_Switches} -o${LEX_YACC_SRC_DIR}SIT_lexer.yy.cc
${LEX_YACC_SRC_DIR}SIT_lexer.l
DEPENDS SIT_lexer.l
)
# Create target for the parser
ADD_CUSTOM_TARGET(SIT_Parser_class echo "Creating SIT_parser")
add_custom_command(
OUTPUT ${LEX_YACC_SRC_DIR}SIT_parser.tab.cc
${LEX_YACC_SRC_DIR}SIT_parser.tab.hh
COMMAND bison -d -v -l ${LEX_YACC_SRC_DIR}SIT_parser.yy -o
${LEX_YACC_SRC_DIR}SIT_parser.tab.cc
DEPENDS SIT_parser.yy
)
# Add parser.c to the list of sources
#+SET(SIT_parser_SRCS ${SIT_parser_SRC} ${LEX_YACC_SRC_DIR}SIT_parser.tab.cc
${LEX_YACC_SRC_DIR}SIT_lexer.yy.cc)
# Since parser.c does not exists yet when cmake is run, mark it as generated
SET_SOURCE_FILES_PROPERTIES(${LEX_YACC_SRC_DIR}SIT_parser.tab.cc GENERATED)
SET_SOURCE_FILES_PROPERTIES(${LEX_YACC_SRC_DIR}SIT_lexer.yy.cc GENERATED)
# Include binary directory to include lexer.c in parser.c
#+include_directories(${CMAKE_BINARY_DIR}/SIT_parser/)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/)
add_executable (SIT_reader_demo ${LEX_YACC_SRC_DIR}main.cpp)
set_target_properties(SIT_reader_demo PROPERTIES COMPILE_FLAGS "${P_CFLAGS}" )
--
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