Compiling ROOT 6.24 for ARM (Zynq Ultrascale+)

OK, thanks, I’ll try

OK, I tried everything, nothing works so far. I’ll try to find out what’s going on and I’ll keep you in touch

Thanks a lot Bertrand for having a look ! Let us know if we can be of any help. This framework is a bit cumbersome indeed …

Cheers,

Mathieu

(if there is a simpler recipe with just a Dockerfile that still fails in the same way it might make things easier)

OK, so the build is ongoing. But looking more carefully at your log, it looks like the main issue is the -mtune=cortex-a72.cortex-a53 flag not supported by clang. So it’s maybe due to the version of clang used by ROOT.
EDIT: Well, maybe not, I’m lost with the informations in the log files. I’ll try to figure out in the docker build itself

@mathieubenoit @simonspa OK, so it build, and fails. Now, how (and where) can I run cmake to try to change some options? where is the build directory of ROOT? Where is the source directory of ROOT?

@mathieubenoit @simonspa Any help about my last question?

Hi @bellenot , sorry, got a bit busy.

The easiest way, in the current image you have, is to mount an extra volume with a checkout of root git repo :

mkir root_src 
cd root_src && git clone git://github.com/root-project/root.git && cd ..
docker run -it --net=host -v ${PWD}/root_src:/root_src -v ${PWD}/downloads:/downloads -v  ${PWD}/sstate-cache:/sstate-cache gitlab-registry.cern.ch/mbenoit/meta-caribou bash

Then from inside the image, there is a convenient tool call devtool, that you can use to point to bitbake where to pick the source to compile :

devtool modify -n root /root_src/root
[caribou@docker-desktop build]$ devtool modify -n root /root_src/root
NOTE: Starting bitbake server...
INFO: Creating workspace layer in /home/caribou/poky/build/workspace
NOTE: Reconnecting to bitbake server...
NOTE: Retrying server connection (#1)...
NOTE: Started PRServer with DBfile: /home/caribou/poky/build/cache/prserv.sqlite3, IP: 127.0.0.1, PORT: 58659, PID: 73
WARNING: Host distribution "centos-8" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
Parsing recipes: 100% |################################################################################################################################################| Time: 0:00:54
Parsing of 2276 .bb files complete (0 cached, 2276 parsed). 3404 targets, 135 skipped, 0 masked, 0 errors.

Summary: There was 1 WARNING message shown.
INFO: Recipe root now set up to build from /root_src/root

From now on the local copy of root in root_src in the host PC will be used to compile.

So when you issue bitbake root, it will use this version, that you can modify at will.

The cmake options are defined , inside the image in file at /home/caribou/poky/meta-caribou/recipes-caribou/root/root_git.bb

You can modify the EXTRA_OECMAKE variable there. I know it is not the most convenient.

@simonspa , is there a way to override the EXTRA_OECMAKE directly from command line, that you know of ?

Would that work for you ?

Cheers,

Mathieu

Thanks @mathieubenoit ! I’ll try to play with that and report back here. (sorry for the basic questions, but as I said I’m a Windows user…)

Hi,
is the build toolchain (specifically compiler and standard library) coming from devtoolset?
ROOT has a bunch of issues with devtoolset, see e.g. Devtoolset/gcc-toolset compatibility

1 Like

slightly off-topic, but I’d be interested to know if groot were to run on that SoC.
it should be as simple as:

$> curl -O -L https://go-hep.org/dist/latest/root-ls-linux_arm64.exe
$> chmod +x ./root-ls-linux_arm64.exe
$> ./root-ls-linux_arm64.exe /path/to/some/file.root

Salut @sbinet , I will give it a try !

So I tried to change an option in root_git.bb and here is what I get now:

[caribou@bbcc7x64 build]$ bitbake root
NOTE: Started PRServer with DBfile: /home/caribou/poky/build/cache/prserv.sqlite3, IP: 127.0.0.1, PORT: 45118, PID: 155
WARNING: Host distribution "centos-8" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
Loading cache: 100% |################################################################################################| Time: 0:00:00
Loaded 3400 entries from dependency cache.
Parsing recipes: 100% |##############################################################################################| Time: 0:00:00
Parsing of 2276 .bb files complete (2272 cached, 4 parsed). 3404 targets, 135 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "1.44.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "arm-poky-linux-gnueabi"
MACHINE              = "caribou-zynq7"
DISTRO               = "poky"
DISTRO_VERSION       = "3.0.4"
TUNE_FEATURES        = "arm vfp cortexa9 neon thumb callconvention-hard"
TARGET_FPU           = "hard"
meta
meta-poky
meta-yocto-bsp       = "zeus:d88d62c20d7d8da85f02edb170dae0280624ad7e"
meta-xilinx-bsp
meta-xilinx-contrib  = "zeus:b82343ac5f013926839627cee9dae7106c008ae9"
meta-oe
meta-python
meta-networking      = "zeus:2b5dd1eb81cd08bc065bc76125f2856e9383e98b"
meta-caribou         = "ROOT-compilation-test:1ed173c77a11a41b04ed8362722b7edc06f50984"

Initialising tasks: 100% |###########################################################################################| Time: 0:00:01
Sstate summary: Wanted 561 Found 33 Missed 528 Current 0 (5% match, 0% complete)
NOTE: Executing Tasks
WARNING: The free space of /home/caribou/poky/build/tmp (rootfs) is running low (0.536GB left)
ERROR: No new tasks can be executed since the disk space monitor action is "STOPTASKS"!
WARNING: The free space of /downloads (/dev/vda1) is running low (0.536GB left)
ERROR: No new tasks can be executed since the disk space monitor action is "STOPTASKS"!
WARNING: The free space of /sstate-cache (/dev/vda1) is running low (0.536GB left)
ERROR: No new tasks can be executed since the disk space monitor action is "STOPTASKS"!
NOTE: Tasks Summary: Attempted 0 tasks of which 0 didn't need to be rerun and all succeeded.

Summary: There were 4 WARNING messages shown.
Summary: There were 3 ERROR messages shown, returning a non-zero exit code.
[caribou@bbcc7x64 build]$

I tried to delete everything in the /home/caribou/poky/build/tmp directory, but no change

Seems to work fine !

root@ST1_ME-XU1-6CG-1E-D11E:~# chmod +x ./root-ls-linux_arm64.exe 
root@ST1_ME-XU1-6CG-1E-D11E:~# ./root-ls-linux_arm64.exe 
error: you need to give a ROOT file

Usage: root-ls [options] file1.root [file2.root [...]]

ex:
 $> root-ls ./testdata/graphs.root
 $> root-ls -t -sinfos ./testdata/graphs.root

options:
  -cpu-profile string
    	path to CPU profile output file
  -sinfos
    	print StreamerInfos
  -t	print Tree(s) (recursively)
root@ST1_ME-XU1-6CG-1E-D11E:~# ls
pulser_results.root  root-ls-linux_arm64.exe
root@ST1_ME-XU1-6CG-1E-D11E:~# ./root-ls-linux_arm64.exe pulser_results.root 
=== [pulser_results.root] ===
version: 62401
TCanvas c1_n2   c1_n2   (cycle=1)
TCanvas c1_n3   c1_n3   (cycle=1)
TCanvas c1_n4   c1_n4   (cycle=1)

Hi Bertrand, it seems to be an issue of docker itself running out of space. It will not increase the space beyond a certain limit as to not kill your machine by accident. You can try pruning old image that are not used :

docker system prune

also,

There should be also a setting in the docker runner where you can increase the allowable size for docker. I am not sure where in the windows version, it should be called disk images max size in Docker Settings.

OK, thanks, that was my VM (CentOS) on which I run the docker image which was a bit low on disk space…

Latest news, after creating a dedicated VM, here is what I got when trying to build with bitbake root:

exit 1 from 'cmake -G 'Ninja' -DCMAKE_MAKE_PROGRAM=ninja $oecmake_sitefile /home/caribou/poky/build/tmp/work/cortexa9t2hf-neon-poky-linux-gnueabi/root/AUTOINC+069afcc949-r0/git -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_INSTALL_BINDIR:PATH=bin -DCMAKE_INSTALL_SBINDIR:PATH=sbin -DCMAKE_INSTALL_LIBEXECDIR:PATH=libexec -DCMAKE_INSTALL_SYSCONFDIR:PATH=/etc -DCMAKE_INSTALL_SHAREDSTATEDIR:PATH=../com -DCMAKE_INSTALL_LOCALSTATEDIR:PATH=/var -DCMAKE_INSTALL_LIBDIR:PATH=lib -DCMAKE_INSTALL_INCLUDEDIR:PATH=include -DCMAKE_INSTALL_DATAROOTDIR:PATH=share -DCMAKE_INSTALL_SO_NO_EXE=0 -DCMAKE_TOOLCHAIN_FILE=/home/caribou/poky/build/tmp/work/cortexa9t2hf-neon-poky-linux-gnueabi/root/AUTOINC+069afcc949-r0/toolchain.cmake -DCMAKE_NO_SYSTEM_FROM_IMPORTED=1 -Drootfit=ON -Dminuit2=ON -Dssl=ON -Dbuiltin_freetype=OFF -Dbuiltin_llvm=ON -Dbuiltin_clang=ON -Dbuiltin_cling=ON -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_STANDARD_REQUIRED=ON -DPYTHON_EXECUTABLE=python3 -Wno-dev'
ERROR: Task (/home/caribou/poky/meta-caribou/recipes-caribou/root/root_git.bb:do_configure) failed with exit code '1'

And here is the bottom part of /CMakeError.log:

Run Build Command(s):ninja cmTC_d2873 && [1/2] Building C object CMakeFiles/cmTC_d2873.dir/CheckSymbolExists.c.o
FAILED: CMakeFiles/cmTC_d2873.dir/CheckSymbolExists.c.o
/home/caribou/poky/build/tmp/work/cortexa9t2hf-neon-poky-linux-gnueabi/root/AUTOINC+069afcc949-r0/recipe-sysroot-native/usr/bin/arm-poky-linux-gnueabi/arm-poky-linu
x-gnueabi-gcc -D_GNU_SOURCE  -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 -fstack-protector-strong  -D_FORTIFY_SOURCE=2   --sysroot=/home/caribou/poky/build/
tmp/work/cortexa9t2hf-neon-poky-linux-gnueabi/root/AUTOINC+069afcc949-r0/recipe-sysroot  -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=/home/caribo
u/poky/build/tmp/work/cortexa9t2hf-neon-poky-linux-gnueabi/root/AUTOINC+069afcc949-r0=/usr/src/debug/root/AUTOINC+069afcc949-r0                      -fdebug-prefix-
map=/home/caribou/poky/build/tmp/work/cortexa9t2hf-neon-poky-linux-gnueabi/root/AUTOINC+069afcc949-r0=/usr/src/debug/root/AUTOINC+069afcc949-r0
 -fdebug-prefix-map=/home/caribou/poky/build/tmp/work/cortexa9t2hf-neon-poky-linux-gnueabi/root/AUTOINC+069afcc949-r0/recipe-sysroot=                      -fdebug-p
refix-map=/home/caribou/poky/build/tmp/work/cortexa9t2hf-neon-poky-linux-gnueabi/root/AUTOINC+069afcc949-r0/recipe-sysroot-native=   -mthumb -mfpu=neon -mfloat-abi=
hard -mcpu=cortex-a9 -fstack-protector-strong  -D_FORTIFY_SOURCE=2   --sysroot=/home/caribou/poky/build/tmp/work/cortexa9t2hf-neon-poky-linux-gnueabi/root/AUTOINC+0
69afcc949-r0/recipe-sysroot -fdiagnostics-color=always -Wno-implicit-fallthrough -pipe -Wall -W -pthread -fPIC -Werror=date-time -w -fdiagnostics-color -ffunction-s
ections -fdata-sections -o CMakeFiles/cmTC_d2873.dir/CheckSymbolExists.c.o   -c CheckSymbolExists.c
CheckSymbolExists.c:2:10: fatal error: os/signpost.h: No such file or directory
    2 | #include <os/signpost.h>
      |          ^~~~~~~~~~~~~~~
compilation terminated.
ninja: build stopped: subcommand failed.


File /home/caribou/poky/build/tmp/work/cortexa9t2hf-neon-poky-linux-gnueabi/root/AUTOINC+069afcc949-r0/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c:
/* */
#include <os/signpost.h>

int main(int argc, char** argv)
{
  (void)argv;
#ifndef os_signpost_interval_begin
  return ((int*)(&os_signpost_interval_begin))[argc];
#else
  (void)argc;
  return 0;
#endif
}

(if it’s the relevant part…)

And the only information I could find is: Fail when Using RISCV gcc to build LLVM · Issue #823 · riscv/riscv-gnu-toolchain · GitHub

cool.
(I wasn’t particularly worried as I do use such a thing -kind of: an Altera SocKit DE-10- for a non-LHC experiment where the whole DAQ is in Go, translating an experiment-cooked binary format to LCIO and/or ROOT, still in Go.)

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.