Goal

Configure a regular ros package to be ready for a mingw cross compile.

Even if you're looking to create qt apps, this is still necessary if your msg/srv packages are kept separate (recommended). You may however want to skip to the qt tutorial and come back to this one.

Create the Package

Set up your package as you would usually do for rosbuild1 somewhere in your source tree, e.g.

> roscreate-pkg foo

Confirm that you can build natively (rosbuild1 style) with the usual make command.

Configuring for Rosbuild2

The next step is to make the package rosbuild2 compatible.

Manifest

This involves adding a small excerpt to your manifest.xml which deals with:

  • ros package dependencies
  • system dependencies (rosdeps)
  • msg/srv exports

An example (from qt_tutorials):

<rosbuild2>
   <!-- private dependencies -->
   <depend package="qt_build"/>
   <!-- ros dependencies -->
   <depend package="roscpp"/>
   <depend package="std_msgs"/>
   <!-- system dependencies -->
   <rosdep name="qt4"/>
   <!-- msg/srv's -->
   <srvs>srv/TwoInts.srv</srvs>
</rosbuild2>

CMake

You'll need an alternative CMakeLists.txt for when your project detects rosbuild2.

The usual method is to insert an alternative call at the top of your CMakeLists.txt:

if(ROSBUILD)  
  # This is the rosbuild2 path
  include(rosbuild.cmake OPTIONAL)
  return()
endif()

# CMake for rosbuild1 should follow this as normal.

In rosbuild.cmake put the rosbuild2 compatible cmake. Most of the function calls are essentially the same - the only really big difference is that msg and srv generation is no longer needed in the cmake itself - it's automatic.

Most of the fundamental ros packages have this embedded already - browse the CMakeLists.txt and rosbuild.cmake in packages such as cpp_common, rostime, roscpp for examples. Keep in mind that the cmake for rosbuild2 is stored in the cmake stack, not rosbuild.

Building

If everything is all ok, you should be able to build a native version in the source tree (rosbuild1)

> roscd foo
> make

and a mingw compiled version in the rosbuild2 parallel build directory (refer to the mingw build environment tutorial.

> cd ~/mingwros/build
> cmake .      # cmake has to rerun to discover your new package
> cd foo
> make -j5     # -jx for number of parallel jobs

Wiki: mingw_cross/Mingw Packages - Electric (last edited 2012-03-21 05:06:05 by DanielStonier)