Hi, I'd like to suggest the 2 micro-patch to help cross-compiling ros. ======== ROS BUILD ======== I now use more the rostoolchain.cmake and I really think that's the way forward. Mine looks like that: set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm-angstrom-linux-gnueabi) set(GUMSTIXTOP [...]/overo-oe) set(GUMSTIXFS [...]/overo-dev) set(CMAKE_C_COMPILER ${GUMSTIXTOP}/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi-gcc-sysroot) set(CMAKE_CXX_COMPILER ${GUMSTIXTOP}/tmp/cross/armv7a/bin/arm-angstrom-linux-gnueabi-g++-sysroot) set(CMAKE_FIND_ROOT_PATH ${GUMSTIXFS}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) The CMAKE_FIND... directives are conflicting with the _rosbuild_add_rostest and _rosbuild_add_pyunit in rosbuild/private.cmake. This can be corrected by applying the following patch: - find_file(_file_name ${file} ${PROJECT_SOURCE_DIR} /) + find_file(_file_name "${file}" "${PROJECT_SOURCE_DIR}" / NO_CMAKE_FIND_ROOT_PATH) in both function. This will force find_file to ignore the CMAKE_FIND_ROOT_PATH for these functions. This is fine since they seem to be used only to refer to local files. ======== OpenCV ======== In OpenCV, the Makefile does not use the toolchain file. I've modified mine as follows. There might cleaner ways to get the same semantic. CMAKE = cmake TOOLCHAIN = ifeq (x$(wildcard $(ROS_ROOT)/rostoolchain.cmake),x$(ROS_ROOT)/rostoolchain.cmake) TOOLCHAIN = -DCMAKE_TOOLCHAIN_FILE=$(ROS_ROOT)/rostoolchain.cmake endif CMAKE_ARGS = $(TOOLCHAIN) -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=`rospack find opencv2`/$(INSTALL_DIR) \ ... ========================= Next thing is to find a way to generate rospack and rosstack twice, once for host, another for deployment, and to call a different one during compilation and at runtime. Any idea? HTH -- Dr. Cedric Pradalier http://www.asl.ethz.ch/people/cedricp