From 3edf33257350d1dca12697af1b940c5a5d1b102d Mon Sep 17 00:00:00 2001 From: Dan Rose Date: Fri, 13 Sep 2019 04:54:06 -0500 Subject: [PATCH] Use rosdep (#32) * Add Cyclone DDS build dependencies for rosdep * Update README.md Change apt install commands to rosdep install. * build_depend -> buildtool_depend for maven and java * Add vendor package to build cyclonedds from source Remove maven and java dependency (thanks, @eboasson) * remove --symlink-build flag this obscures the intention of the code and sophisticated users can choose whether to use it or not. * add rosdep to readme --- README.md | 17 ++++++++--------- cyclonedds_cmake_module/package.xml | 2 +- cyclonedds_vendor/CMakeLists.txt | 14 ++++++++++++++ cyclonedds_vendor/package.xml | 15 +++++++++++++++ rmw_cyclonedds_cpp/CMakeLists.txt | 10 +++++++++- rmw_cyclonedds_cpp/package.xml | 2 ++ 6 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 cyclonedds_vendor/CMakeLists.txt create mode 100644 cyclonedds_vendor/package.xml diff --git a/README.md b/README.md index b93a444..5d5841d 100644 --- a/README.md +++ b/README.md @@ -5,27 +5,26 @@ with [*Eclipse Cyclone DDS*](https://github.com/eclipse-cyclonedds/cyclonedds) a implementation. ## Getting, building and using it - -All it takes to get Cyclone DDS support into ROS2 is to clone this repository and the Cyclone DDS -one in the ROS2 workspace source directory, and then run colcon build in the usual manner: + +All it takes to get Cyclone DDS support into ROS2 is to clone this repository into the ROS2 workspace +source directory, and then run colcon build in the usual manner: cd ros2_ws/src git clone https://github.com/atolab/rmw_cyclonedds - git clone https://github.com/eclipse-cyclonedds/cyclonedds cd .. - colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo + rosdep install --from src -i + colcon build --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCYCLONEDDS_FROM_SOURCE=ON export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp +If you prefer to install CycloneDDS yourself, set `-DCYCLONEDDS_FROM_SOURCE=OFF`. CMake caches this +value, so you can omit it between builds + This seems to work fine on Linux with a binary ROS2 installation as well as when building ROS2 from source. On macOS it has only been tested in a source build on a machine in an "unsupported" configuration (macOS 10.14 with SIP enabled, instead of 10.12 with SIP disabled), and apart from a few details that are caused by the machine configuration, that works fine, too. There is no reason why it wouldn't work the same on Windows, but I haven't tried. -That said, Cyclone DDS has some prerequisites because it currently relies on Java and Maven to build -its IDL preprocessor, and so it is probably advisable to check its README for details. On an Ubuntu -18.04 system, ``sudo apt-get install maven default-jdk`` will likely address that. - If you want to use a pre-existing installation of Cyclone DDS, you don't need to clone it, but you may have to tell CMake where to look for it using the CycloneDDS\_DIR variable. That also appears to be the case if there are other packages in the ROS2 workspace that you would like to use Cyclone diff --git a/cyclonedds_cmake_module/package.xml b/cyclonedds_cmake_module/package.xml index d6e7eb6..4d9c0a9 100644 --- a/cyclonedds_cmake_module/package.xml +++ b/cyclonedds_cmake_module/package.xml @@ -8,7 +8,7 @@ Apache License 2.0 ament_cmake - + ament_lint_auto ament_lint_common diff --git a/cyclonedds_vendor/CMakeLists.txt b/cyclonedds_vendor/CMakeLists.txt new file mode 100644 index 0000000..e2a3233 --- /dev/null +++ b/cyclonedds_vendor/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.5) +project(cyclonedds_vendor) +find_package(ament_cmake REQUIRED) + +include(ExternalProject) +ExternalProject_Add(cyclonedds + GIT_REPOSITORY "https://github.com/eclipse-cyclonedds/cyclonedds.git" + CMAKE_ARGS + -DBUILD_CONFTOOL:BOOL=OFF + -DBUILD_IDLC:BOOL=OFF + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + ) + +ament_package() \ No newline at end of file diff --git a/cyclonedds_vendor/package.xml b/cyclonedds_vendor/package.xml new file mode 100644 index 0000000..668fada --- /dev/null +++ b/cyclonedds_vendor/package.xml @@ -0,0 +1,15 @@ + + + + cyclonedds_vendor + 0.4.0 + Wrapper package for Eclipse CycloneDDS. + Erik Boasson + Apache License 2.0 + + ament_cmake + + + ament_cmake + + diff --git a/rmw_cyclonedds_cpp/CMakeLists.txt b/rmw_cyclonedds_cpp/CMakeLists.txt index 9e823ad..944d8e1 100644 --- a/rmw_cyclonedds_cpp/CMakeLists.txt +++ b/rmw_cyclonedds_cpp/CMakeLists.txt @@ -16,6 +16,8 @@ cmake_minimum_required(VERSION 3.5) project(rmw_cyclonedds_cpp) +set(CYCLONEDDS_FROM_SOURCE CACHE BOOL "Should we download and build cycloneDDS from source?") + link_directories(/usr/local/lib) # Default to C++14 @@ -31,7 +33,13 @@ find_package(ament_cmake_ros REQUIRED) find_package(rcutils REQUIRED) -find_package(cyclonedds_cmake_module REQUIRED) +if (CYCLONEDDS_FROM_SOURCE) + message("Building CycloneDDS from source") + find_package(cyclonedds_vendor REQUIRED) +else() + find_package(cyclonedds_cmake_module REQUIRED) + message("Using installed CycloneDDS") +endif() find_package(CycloneDDS REQUIRED CONFIG) find_package(rmw REQUIRED) diff --git a/rmw_cyclonedds_cpp/package.xml b/rmw_cyclonedds_cpp/package.xml index aaa9b5d..acf0782 100644 --- a/rmw_cyclonedds_cpp/package.xml +++ b/rmw_cyclonedds_cpp/package.xml @@ -14,6 +14,8 @@ cyclonedds cyclonedds_cmake_module + cyclonedds_vendor + rcutils rmw rosidl_generator_c