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