Jancy building in aarm64

Hello again Vladimir!
This is not a big issue for me, but I tell you, fyi, as could be useful to fix something.
I tried to build Jancy in a aarm64 plataform (a Rasperry Pi 3 and a Rock64, with Arch Linux 64).
I was able to build it (more details below), but when I "make test", there are many failed tests.
c65988b9-ca0e-4087-b181-5a786da15964-image.png

Looking inside the LastTest.log, I saw something I felt could be at the root of the problem, the SISSEGV event
7071aacf-8f9e-4afa-8666-0936c52fddb7-image.png (I have no problem to provide you the file, if you want it)

As I commented, in fact, I have an issue when building it, the problem was when proceding to the "cmake" of de LLVM 3.4.2, then an error of triplet unknown is thrown an it said about use a more recent version of the config.guess and config.sub (the message even told about where you can wget them). Once updated, LLVM could be build.

Well, as I told you, it is not a big issue for me (as I am not sure if were going to use Jancy in those plataforms), but perhaps this info is useful to you, or could be indicative of other problems.

Also, I confirm that I am able to build Jancy on a Intel PC without problem (0 tests failed)

Regards!
Josep

Hello Josep,

Thank you for the issue report!

Jancy is fully functional on arm64; the SEGFAULTs you see are caused by incomplete support of the arm64 ABI in llvm-3.4.2.

I've just checked our build boxes -- we build the official packages for Linux-arm64 using llvm-11.0.1; packages for macOS-arm64 are built using llvm-15.0.7.

I remember trying to bisect and find the LLVM release where the arm64 ABI compatibility issues were fixed, and I think it was llvm-9 (but that's not 100%). You can go for llvm-11 or higher just to be sure, it works fine on arm64.

Also, I have some good news regarding your previous report (Ethernet Tap + ioninja-hwc). I'll post a reply in the original thread.

Hello! Quite sure that this solves the issue. I try and confirm you that. Thank you! and -about the Ethernet tap- they are great news!!

Hello!
I tried to build LLVM 11.0.1, but it eventually fails
d148de5b-75f8-4dfd-919a-87610f698d56-image.png

I followed the same indications that are in the Jancy building guide:
2b99df21-9113-4868-8aa7-6b6459d14f53-image.png
and then just "make" it.
Do I have to do some different? Take into account that I have nearly zero knowledge about cmake and building process (and less than zero about LLMV), so perhaps I am missing some basic thing.
Regards

Yeah, many versions of LLVM just don't build out-of-the-box with the default settings. Here's what you can do:

  1. Easy way

Simply install the LLVM coming with your distro. If you are on Arch, then pacman -S llvm should do (llvm-libs install runtime shared objects only, without the development files).

  1. Way of the Samurai

Build LLVM from sources. A bit trickier, but allows you to choose the exact version of LLVM for your projects. Here's the suggested sequence of steps:

cd ./llvm-x.x.x-src
mkdir build
cd build
cmake ..
ccmake .

Then navigate through the settings using UI (ccmake or cmake-gui) and fine-tune the following:

CMAKE_BUILD_TYPE=Release
CMAKE_INSTALL_PREFIX=(where to install, e.g. /home/you/Develop/llvm/llvm-x.x.x)
CMAKE_C_FLAGS=-fvisibility=hidden
CMAKE_CXX_FLAGS=-fvisibility=hidden
LLVM_BUILD_RUNTIME=ON
LLVM_BUILD_(everything else)=OFF
LLVM_INCLUDE_(everything)=OFF
LLVM_TARGETS_TO_BUILD=AArch64 

To access CMAKE_C_FLAGS/CMAKE_CXX_FLAGS, switch to the "Advanced" mode (t in ccmake)

Then "Configure" and "Generate" from the UI (c then g in ccmake)

Finally, build and install:

make -j4 install

Hello!
In fact, I had already tried the "Easy way", and there is no easy way (at least, not so easy). It seems that there is something missing, because after installing the llvm package, when building jancy it seems to go well... but eventually fails
3c0955c9-f1af-47c5-a2f3-9aa45b83e868-image.png

(I do not know, but perhaps the available package for Arm have differences respect the "regular" x86-64 one)

Anyway, I will take the Way of the Samurai, and let you know what happens.
Thank you, and regards!

Hmm, you are right.. Looks like they stopped packaging static LLVM libs into the recent LLVM development packages on Arch. At the same time, llvm_map_components_to_libnames still returns a list of static libs (rather than a single shared object). It looks like the new "proper" way of getting a list of LLVM libraries to link to is not to use the official LLVM CMake macros -- but to call the llvm-config tool instead. Kinda weird calling an external executable from a CMake script when there is a dedicated official CMake macro for this exact purpose, but oh well..

I'll need to update the Jancy CMake files to address that. In the meantime -- follow the way of the Samurai. BTW, it's okay not to add -fvisibility=hidden to CMAKE_C_FLAGS/CMAKE_CXX_FLAGS -- this is taken care of by the versioning script for libjancy.so now.

So, the modifications required to build the minimal LLVM for arm64:

CMAKE_BUILD_TYPE=Release
CMAKE_INSTALL_PREFIX=(where to install, e.g. /home/you/Develop/llvm/llvm-x.x.x)
LLVM_BUILD_RUNTIME=ON
LLVM_BUILD_(everything else)=OFF
LLVM_INCLUDE_(everything)=OFF
LLVM_TARGETS_TO_BUILD=AArch64 

The "easy way" should work now, too. The latest Jancy commit makes use of llvm-config to build the list of required LLVM libs (and will pick up the LLVM shared object installed by pacman -S llvm)

👏👏👏

I confirm that the Easy Way works perfectly. Thank you and regards!
Josep

f7440544-3e60-4559-a973-8452b9e8d22b-image.png