Skip to content

[WIP] Vcpkg, ROS1 system dependencies, and Azure DevOps CI integration

In ROS1, there are many open sources project required as a minimum to run ROS desktop stack. In the beginning, we either privately built the libraries by project-specific build instructions or looked for stock binaries if it just works.

This approach works fine for the very initial ROS1 porting to manage the initial set of open sources libraries. However, we are also seeing problems with this method: * Build Instruction Management (How-to-build-xyz): Every new project could come with its owned way to build end-to-end. We should share the knowledge in a managible way. * Updatibility: Using stock binaries, it would be a bottleneck for us to upgrade its downstream projects (thinking about ABI changes or compatiblity), unless we know how to build them. * Latest Visual C++ toolchain support: Not every project keeps its build instructions or code up-to-dated for the latest Visual C++ toolchain. We want the binaries always come from the best of breed.

To address those issues, we are looking for any leverages to solve them. Here Vcpkg comes.

Vcpkg

"Vcpkg simplifies acquiring and building open source libraries on Windows." - Visual C++ Team Blog

It comes with the following features: * Managing the how-to-build sauces of eight hundred and more open-source projects. And it is still growing! * Clear visibility on the dependencies relationship between projects. Now we can better manage what to update after an upstream project gets updated. * Everything is compiled against the same set of depedencies, so no more ABI hazards.

Now let's take a look ROS1 system dependencies for Windows (as of today).

ROS1 System Dependencies (Target: Melodic Windows 10)

To evalute switching to Vcpkg, firstly we'd like to know anything missing from Vcpkg ports. After comparison, we see most of packages to exist on Vcpkg. Only few don't exist and need some more investigations: * libompl * log4cxx * libgraphviz * pkg-config

Also, some projects are Python modules mixing C/C++ sources (e.g., pyside2), and Vcpkg currently doesn't manage this type of projects.

References

package version vcpkg port link note
libflann 1.9.1 2019-04-07-1 (based on 1.9.1) flann
zlib 1.2.11 1.2.11-5 zlib
octomap 1.9.0 2017-03-11-7 (based on 1.8.0) octomap minor version
libglew 2.1.0 2.1.0-6 glew
ogre 1.10.11 1.12.1 ogre minor version
libompl 1.2.2 1.4.2-2 ompl minor version
assimp 4.0.1 5.0.0 assimp major version
boost 1.66.0 1.71.0 boost minor version
bullet3 2.87.0 2.88-1 bullet3 minor version
bzip2 1.0.6 1.0.6-4 bzip2
console_bridge 0.4.0 0.4.3-1 console-bridge
libccd 2.0.0 2.1-1 ccd minor version
libcurl 7.58.0 7.66.0 curl minor version
libfcl 0.5.0 0.5.0-6 fcl
libjpeg-turbo 1.5.3 2.0.2 libjepg-turbo major version
libopencv 3.4.1 4.1.1-1 opencv major version
cppunit 1.12.1 1.14.0 cppunit minor version
libpng 1.6.35 1.6.37-4 libpng
eigen 3.3.4 3.3.7-3 eigen3
libqhull 2015.2.0 7.3.2-1 (based on 2019.1) qhull major version
freeglut 3.0.0 3.0.0-7 freeglut
log4cxx 0.10.0 N/A missing
google-mock 1.8.0 2019-08-14-2 (based on 1.9.0) gtest minor version
cairo 1.15.12 1.16.0-2 cairo minor version
google-test 1.8.0 2019-08-14-2 (based on 1.9.0) gtest minor version
gtk2 2.22.1 N/A missing
gtk3 3.22.19 3.22.19-3 gtk
poco 1.8.1 1.9.2-1 poco minor version
pyqt5 5.10.1 N/A Python
OpenNI unsure N/A missing
OpenNI2 unsure 2.2.0.33-10 openni2
clapack 3.2.1 3.2.1-12 clapack
gflags 2.2.1 2.2.2-1 gflags
pyside2 5.10.1 N/A Python
glog 0.3.5 0.4.0-2 glog minor version
openblas 0.2.20 0.3.6-6 openblas minor version
suitesparse unsure 5.4.0-3 suitesparse
metis 5.1.0 5.1.0-5 metis
sdl 1.2.15 1.2.15-8 sdl1
protobuf 3.6.1 3.9.1 protobuf minor version
freeimage 3.17.0 3.18.0-7 freeimage minor version
cppzmq 4.2.2 4.4.1 cppzmq minor version
zeromq 4.2.5 2019-09-20 (based on 4.3.3) zeromq minor version
dlfcn-win32 1.1.1 1.1.1-3 dlfcn-win32
libwebp 0.6.1 1.0.2-7 libwebp major version
openjpeg 2.3.0 2.3.1-1 openjpeg
tiff 4.0.9 4.0.10-7 tiff
ilmbase 2.2.1 2.3.0 ilmbase minor version
sdl_image 1.2.12 N/A missing
jxrlib 1.1.0 1.1-8 jxrlib
sip 4.19.8 N/A Python
tinyxml 2.6.2 2.6.2-4 tinyxml
libraw 0.19.0 201903-1 (based on 0.19.0) libraw
tinyxml2 6.1.0 7.0.1-2 tinyxml2 major version
liblzma 5.2.4 5.2.4-2 liblzma
urdfdom 1.0.0 1.0.3-1 urdfdom
openexr 2.2.1 2.3.0-4 openexr minor version
urdfdom_headers 1.0.0 1.0.4-1 urdfdom-headers
lcms 2.8.0 2.9 lcms minor version
yaml-cpp 0.5.3 0.6.2-3 yaml-cpp minor version
jasper 2.0.14 2.0.16-2 jasper
ceres 1.14.0 1.14.0-6 ceres
qwt 6.1.3 6.1.3-8 qwt
gazebo9 9.4.1 N/A missing
libfltk 1.3.4 1.3.4-7 fltk
libtbb-dev 2018.6.0 2019_U8-1 tbb
libgraphviz 2.41.0 N/A missing
lz4 1.8.1 1.9.2 lz4 minor version
openssl 1.1.1 1.0.2s-1 openssl-windows minor version
orocos_kdl 1.3.1 1.4-2 orocos-kdl minor version
pkg-config 0.29.2 N/A missing
qt5-sdk 5.10.1 5.12.5 qt5 minor version
libtheora 1.1.1 1.2.0alpha1-20170719~vcpkg1-3 libtheora minor version
libogg 1.3.3 1.3.4 libogg
libpcl 1.8.1 1.9.1-9 pcl minor version
libazure-iot-sdk-c 1.2.10 2019-08-20.1 (based on 1.3.4) azure-iot-sdk-c minor version
libqglviewer 2.7.1 2.7.0-2 libqglviewer