How to setup Cross Compilation for Arm64
Hello,
I am looking into cross compiling my ROS kinetic project that run on x64 to arm64. I have been reading several posts and links here and there. What I gathered is that some install rebuild ROS arm64 packages and some build ROS from scratch. My question is how do you install ROS arm64 libs on my Ubuntu Desktop (x64) to be able cross compile my project? I did try dpkg --add-archtecture arm64 and after apt-get update I did try to install ros-kinetix-ros-core. sudo apt-get install ros-kinetix-ros-core:arm64 but this fails. Is this the correct doing it? Or building from source is better way to go. I do not find clear information about this anywhere.
If you are familiar with this could you share except steps you did to get ROS cross compilation working?
Edit: Ok per your request let me explain what I am trying to do in grater detail. I ma doing this first time so I might have wrong assumptions.
As of now I have a ROS Kinetic project that I did build on my Ubuntu 16.04 x64 Desktop. This works just fine. Now what I want to do is cross compile my project my my desktop for arm64. From my reading there are two options
- Cross compile entire ROS on my desktop for arm64
- Install already prebuild ROS arm64 packages on my Desktop x64
Before cross compiling entire ROS first I am trying to figure out step 2
For that reason I created new Ubuntu 16.04 x64 VM and now I am trying to install only ROS arm64 on it to cross compile my project. To do this I did read https://wiki.debian.org/Multiarch/HOWTO , https://wiki.ubuntu.com/MultiarchSpec and https://askubuntu.com/questions/52322...
So in my fresh VM here are the steps I took ( http://wiki.ros.org/kinetic/Installat... )
- sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo dpkg --add-architecture
arm64
dpkg --print-foreign-architectures
i386 arm64
Modify ros-latest.list in /etc/apt/sources.list.d
deb [arch=amd64,arm64] http://packages.ros.org/ros/ubuntu xenial main
Create arm64-xenial.list in /etc/apt/sources.list.d with contents
deb [arch=arm64,amd64] http://ports.ubuntu.com/ xenial main restricted universe multiverse deb [arch=arm64,amd64] http://ports.ubuntu.com/ xenial-security main restricted universe multiverse deb [arch=arm64,amd64] http://ports.ubuntu.com/ xenial-backports main restricted universe multiverse deb [arch=arm64,amd64] http://ports.ubuntu.com/ubuntu-ports xenial main multiverse universe restricted deb [arch=arm64,amd64] http://ports.ubuntu.com/ubuntu-ports xenial-updates main multiverse universe
restricted deb [arch=arm64,amd64] http://ports.ubuntu.com/ubuntu-ports xenial-security main multiverse universe restricted
sudo apt-get update
- sudo apt-get install crossbuild-essential-arm64
- Then I did try to install ros-kinetic-ros-core:arm64
At this point I got these message
# sudo apt-get install ros-kinetic-ros-base:arm64
Reading package lists... Done
Building dependency tree
Reading ...
just making sure: the release name is Kinetic, not Kinetix. So depending on your exact OS,
ros-kinetic-ros-core
should work.Sorry, It was a typo... Still is it possible to install Arm64 ROS development packages on Ubuntu 16.06 x64 desktop to do cross compilation? If so what am I doing or missing above?
Thanx
I'm far from a cross-compilation expert, but the first thing would be to describe what it is exactly that "fails". Be specific.
Also: catkin == CMake. So I would look up resources about cross-compilation with CMake.
Note that even then it's not trivial to get this to work correctly.
I have few project cross compiling with cmake that do not need ROS. So I ma familiar with it. I just need to install arm64 ros packages so I can build against it.
Did you ever solve this? I'm running into the same problem. It looks like some packages that ROS relies on don't play with multi-arch very well, at least on ubuntu xenial and ros kinetic.