Cesium for Linux arm64

The Cesium source has instructions how to build from source for Windows, Linux, macOS. It also provides 6 cmake files under the extern folder but nothing for Linux Arm64.
In our case we want to build Cesium so it can be used on the Jetson NX which is Linux Arm64.
We do Unreal development on Windows (UE5.1.1) and we are using the Toolchain (v20_clang-13.0.1-centos7) to cross compile and deploy on the Jetson NX no problem from Windows.
We need to add Cesium to the mix, so we have to build Cesium from source but we don’t have a cmake to do that.

We are following the developer-setup-linux.md instructions to create our own Linux Arm64 build.
We tried creating a cmake based on the unreal-linux-toolchain.cmake.
Our new cmake file unreal-linuxarm64-toolchain.cmake looks like this:

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm64)

SET(CMAKE_SYSROOT $ENV{UNREAL_ENGINE_COMPILER_DIR})

SET(CMAKE_C_COMPILER $ENV{UNREAL_ENGINE_COMPILER_DIR}/bin/clang)
SET(CMAKE_CXX_COMPILER $ENV{UNREAL_ENGINE_COMPILER_DIR}/bin/clang++)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH on)
SET(CMAKE_POSITION_INDEPENDENT_CODE on)

SET(CMAKE_CXX_FLAGS “-nostdinc++ -I$ENV{UNREAL_ENGINE_LIBCXX_DIR}/include -I$ENV{UNREAL_ENGINE_LIBCXX_DIR}/include/c++/v1 -I$ENV{UNREAL_ENGINE_LIBCXX_DIR}/include/c++/v1”)

search for programs in the build host directories

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

for libraries and headers in the target directories

SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

Should we also change the export where the compiler is pointing to as well?
From:
export UNREAL_ENGINE_COMPILER_DIR=$UNREAL_ENGINE_DIR/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v20_clang-13.0.1-centos7/x86_64-unknown-linux-gnu

To:
export UNREAL_ENGINE_COMPILER_DIR=$UNREAL_ENGINE_DIR/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v20_clang-13.0.1-centos7/aarch64-unknown-linux-gnueabi

Using the first export x86_64 it builds, but we get linker errors in Unreal when packaging for LinuxArm64.
The second case fails early on when we try to build Cesium on an Ubuntu x86_64 machine. (Not on an arm64).

Is there a cmake available for LinuxArm64? Also the questions raised about the export and the compiler that needs to be used, if anyone has any more ideas for us to try would be appreciated.

We’ve never tried this, but I don’t know of any reason it won’t work. No, there’s no existing cmake script for LinuxArm64. It looks like you’re on the right track, though. Specifically the aarch64 export should be the right one. You said “The second case fails early on when we try to build Cesium on an Ubuntu x86_64 machine” but you haven’t told us how it fails.

Because you’re compiling from ARM64 from an x64 machine, you’re cross-compiling. Which means you may be better off starting with the unreal-linux-from-windows-toolchain.cmake (which also cross-compiles) rather than the native linux one (which doesn’t). In particular, specifying the -target parameter in CMAKE_CXX_FLAGS and CMAKE_C_FLAGS is probably necessary. Along with CMAKE_C_COMPILER_TARGET and CMAKE_CXX_COMPILER_TARGET.

Hi Kevin,
Thanks for the replies.
The early fail I think it was because of cmake and not Cesium but I could be wrong. This is the partial part of the error:

CMake Error at /home/sage/Downloads/cmake-3.27.1-linux-x86_64/share/cmake-3.27/Modules/CMakeTestCXXCompiler.cmake:64 (message):
The C++ compiler

"/data/Unreal/UE5.1/Linux_Unreal_Engine_5.1.1/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v20_clang-13.0.1-centos7/aarch64-unknown-linux-gnueabi/bin/clang++"

is not able to compile a simple test program.

It fails with the following output:

Change Dir: '/home/sage/dev/cesium-unreal/extern/build/CMakeFiles/CMakeScratch/TryCompile-CMRmhS'

The way I fixed, or bypass it I should say was to set the following in our new cmake file unreal-linuxarm64-toolchain.cmake:
SET(CMAKE_C_COMPILER_FORCED TRUE)
SET(CMAKE_CXX_COMPILER_FORCED TRUE)

In your second reply you are suggesting starting with the unreal-linux-from-windows-toolchain.cmake and making our own unreal-linuxarm64-from-windows-toolchain.cmake.
So after making the changes it would look like this:

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm64)

SET(CMAKE_SYSROOT $ENV{UNREAL_ENGINE_COMPILER_DIR})

SET(CMAKE_C_COMPILER $ENV{UNREAL_ENGINE_COMPILER_DIR}/bin/clang)
SET(CMAKE_CXX_COMPILER $ENV{UNREAL_ENGINE_COMPILER_DIR}/bin/clang++)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH on)
SET(CMAKE_POSITION_INDEPENDENT_CODE on)

set(CMAKE_C_COMPILER_TARGET aarch64-unknown-linux-gnueabi)
set(CMAKE_CXX_COMPILER_TARGET aarch64-unknown-linux-gnueabi)
SET(CMAKE_CXX_FLAGS “-nostdinc++ "-I$ENV{UNREAL_ENGINE_LIBCXX_DIR}/include" "-I$ENV{UNREAL_ENGINE_LIBCXX_DIR}/include/c++/v1" -target aarch64-unknown-linux-gnueabi”)
SET(CMAKE_C_FLAGS “-target aarch64-unknown-linux-gnueabi”)

search for programs in the build host directories

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

for libraries and headers in the target directories

SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

I keep the export like you said export UNREAL_ENGINE_COMPILER_DIR=$UNREAL_ENGINE_DIR/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v20_clang-13.0.1-centos7/aarch64-unknown-linux-gnueabi

and build on Ubuntu desktop following the developer-setup-linux.md ?

cd ~/dev/cesium-unreal/extern

cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=“unreal-linuxarm64-from-windows-toolchain.cmake” -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_BUILD_TYPE=Release

cmake --build build --target install -j14

cd $UNREAL_ENGINE_DIR/Engine/Build/BatchFiles

./RunUAT.sh BuildPlugin -Plugin=“$CESIUM_FOR_UNREAL_DIR/CesiumForUnreal.uplugin” -Package=“$CESIUM_FOR_UNREAL_DIR/…/packages/CesiumForUnreal” -CreateSubFolder -TargetPlatforms=LinuxArm64

Notice I use TargetPlatforms=LinuxArm64
Let me know if all the steps look good to you.

Also management here at work (I won’t mention names for obvious reasons) asked me if we could have you or anyone else on your team as a direct contact instead of using the forum for communication.

Thanks again for all your help!

Update from today
After doing all the above and building the last step errors with the following output:

Running AutomationTool…

Fixing inconsistent case in filenames.
Setting up Mono
Setting up bundled DotNet SDK
Start UAT Interactively: dotnet AutomationTool.dll BuildPlugin -Plugin=/home/sage/dev/cesium-unreal/CesiumForUnreal.uplugin -Package=/home/sage/dev/cesium-unreal/…/packages/CesiumForUnreal -CreateSubFolder -TargetPlatforms=LinuxArm64
/data/Unreal/UE5.1/Linux_Unreal_Engine_5.1.1/Engine/Build/BatchFiles/Linux/…/…/…/Binaries/ThirdParty/DotNet/6.0.302/linux/dotnet
Starting AutomationTool…
Parsing command line: BuildPlugin -Plugin=/home/sage/dev/cesium-unreal/CesiumForUnreal.uplugin -Package=/home/sage/dev/cesium-unreal/…/packages/CesiumForUnreal -CreateSubFolder -TargetPlatforms=LinuxArm64
Initializing script modules…
Total script module initialization time: 0.12 s.
Executing commands…
Copying 19312 file(s) using max 64 thread(s)
Reading plugin from /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/CesiumForUnreal.uplugin…
Building plugin for host platforms: Linux
Running: /data/Unreal/UE5.1/Linux_Unreal_Engine_5.1.1/Engine/Binaries/ThirdParty/DotNet/6.0.302/linux/dotnet “/data/Unreal/UE5.1/Linux_Unreal_Engine_5.1.1/Engine/Binaries/DotNET/UnrealBuildTool/UnrealBuildTool.dll” UnrealEditor Linux Development -Project=/home/sage/dev/packages/CesiumForUnreal/HostProject/HostProject.uproject -plugin=/home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/CesiumForUnreal.uplugin -iwyu -noubtmakefiles -manifest=/home/sage/dev/packages/CesiumForUnreal/HostProject/Saved/Manifest-UnrealEditor-Linux-Development.xml -nohotreload -log=“/home/sage/Library/Logs/Unreal Engine/LocalBuildLogs/UBT-UnrealEditor-Linux-Development.txt”
Log file: /home/sage/Library/Logs/Unreal Engine/LocalBuildLogs/UBT-UnrealEditor-Linux-Development.txt
Parsing headers for UnrealEditor
Running Internal UnrealHeaderTool /home/sage/dev/packages/CesiumForUnreal/HostProject/HostProject.uproject /home/sage/dev/packages/CesiumForUnreal/HostProject/Intermediate/Build/Linux/B4D820EA/UnrealEditor/Development/UnrealEditor.uhtmanifest -WarningsAsErrors -installed
Total of 102 written
Reflection code generated for UnrealEditor in 3.2835322 seconds
------- Build details --------
Using toolchain located at ‘/data/Unreal/UE5.1/Linux_Unreal_Engine_5.1.1/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v20_clang-13.0.1-centos7/x86_64-unknown-linux-gnu’.
Using clang (/data/Unreal/UE5.1/Linux_Unreal_Engine_5.1.1/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v20_clang-13.0.1-centos7/x86_64-unknown-linux-gnu/bin/clang++) version ‘clang version 13.0.1
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /data/Unreal/UE5.1/Linux_Unreal_Engine_5.1.1/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v20_clang-13.0.1-centos7/x86_64-unknown-linux-gnu/bin’ (string), 13 (major), 0 (minor), 1 (patch)
Using bundled libc++ standard C++ library.
Using lld linker
Using llvm-ar (/data/Unreal/UE5.1/Linux_Unreal_Engine_5.1.1/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v20_clang-13.0.1-centos7/x86_64-unknown-linux-gnu/bin/llvm-ar) version ‘LLVM (http://llvm.org/):
LLVM version 13.0.1
Optimized build.
Default target: x86_64-unknown-linux-gnu
Host CPU: skylake-avx512 (string)’
Using fast way to relink circularly dependent libraries (no FixDeps).
‘------------------------------’
Writing manifest to /home/sage/dev/packages/CesiumForUnreal/HostProject/Saved/Manifest-UnrealEditor-Linux-Development.xml
Building UnrealEditor…
Determining max actions to execute in parallel (20 physical cores, 20 logical cores)
Executing up to 20 processes, one per physical core
Building 12 actions with 12 processes…
[1/12] Compile PCH.CesiumRuntime.h
[2/12] Compile PCH.CesiumEditor.h
[3/12] Compile Module.CesiumRuntime.4_of_6.cpp
[4/12] Compile Module.CesiumRuntime.2_of_6.cpp
[5/12] Compile Module.CesiumRuntime.3_of_6.cpp
[6/12] Compile Module.CesiumRuntime.1_of_6.cpp
[7/12] Compile Module.CesiumRuntime.5_of_6.cpp
[8/12] Compile Module.CesiumEditor.cpp
[9/12] Compile Module.CesiumRuntime.6_of_6.cpp
[10/12] Link (lld) libUnrealEditor-CesiumRuntime.so
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libasync++.a(scheduler.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(BingMapsRasterOverlay.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(BoundingVolume.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(CreditSystem.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(DebugColorizeTilesRasterOverlay.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(GltfUtilities.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(IonRasterOverlay.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(RasterOverlay.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(RasterOverlayCollection.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(RasterOverlayTile.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(RasterizedPolygonsOverlay.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(RasterizedPolygonsTileExcluder.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(Tile.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(TileContent.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(TileID.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(TileMapServiceRasterOverlay.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(TileOcclusionRendererProxy.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(Tileset.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(ViewState.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: /home/sage/dev/packages/CesiumForUnreal/HostProject/Plugins/CesiumForUnreal/Source/ThirdParty/lib/Linux-x64/libCesium3DTilesSelection.a(WebMapServiceRasterOverlay.cpp.o) is incompatible with elf64-x86-64
ld.lld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
[11/12] Link (lld) libUnrealEditor-CesiumEditor.so cancelled
[12/12] WriteMetadata UnrealEditor.target cancelled
Took 69.16592059999999s to run dotnet, ExitCode=6
UnrealBuildTool failed. See log for more details. (/home/sage/Library/Logs/Unreal Engine/LocalBuildLogs/UBT-UnrealEditor-Linux-Development.txt)
AutomationTool executed for 0h 1m 10s
AutomationTool exiting with ExitCode=6 (6)
RunUAT ERROR: AutomationTool was unable to run successfully. Exited with code: 6

is not able to compile a simple test program

That makes sense. Because cmake doesn’t know you’re cross-compiling, it’s trying to run the test program (which targets ARM) on your Intel machine, and that fails. You need the cross-compiling bits I mentioned in my second post above.

Let me know if all the steps look good to you.

Maybe. Give it a try!

Also management here at work (I won’t mention names for obvious reasons) asked me if we could have you or anyone else on your team as a direct contact instead of using the forum for communication.

My email address is easy to find, but we strongly prefer you use the forum. That way when we spend our time helping you out, it benefits others as well. There doesn’t appear to be anything proprietary here, so why shouldn’t it be public?

After doing all the above and building the last step errors with the following output:

The build output says UE is building for Intel. You probably need to add -NoHostPlatform.

Ok i got it to build with all the above changes. I moved the Cesium plugin on Windows and it built and packaged for LinuxArm64. I built a development package so I have some logs to see when loading up.
I am currently getting a crash. I am attaching a screenshot of the output. It has to do with the WorldGridMaterial.
Any changes I need to make to the Unreal project so the FCesiumPointAttenuationVertexFactory.

I’m not sure why FCesiumPointAttenuationVertexFactory would be missing. It’s located in the Shaders/Private directory, so perhaps that didn’t make it across when you copied the plugin?

No the file got copied, is there in C:\Program Files\Epic Games\UE_5.1\Engine\Plugins\Marketplace\CesiumForUnreal\Shaders\Private\CesiumPointAttenuationVertexFactory.ush

I’m not sure, then. I think I’d scroll up earlier in the log and see if there are any clues.

I don’t see anything that stands out in the log. No warnings other than what I put in the previous post.

HI
I followed the .cmake file you guys discussed and the toolchain using UE 5.2.1. It didn’t go well:

Compiling the CXX compiler identification source file “CMakeCXXCompilerId.cpp” failed.
Compiler: /home/newton/Documents/UnrealEngine-5.2.1-release/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v21_clang-15.0.1-centos7/aarch64-unknown-linux-gnueabi/bin/clang++
Build flags: -nostdinc++;-I/home/newton/Documents/UnrealEngine-5.2.1-release/Engine/Source/ThirdParty/Unix/LibCxx/include;-I/home/newton/Documents/UnrealEngine-5.2.1-release/Engine/Source/ThirdParty/Unix/LibCxx/include/c++/v1;-target;aarch64-unknown-linux-gnueabi
Id flags:

The output was:
1
/home/newton/Documents/UnrealEngine-5.2.1-release/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v21_clang-15.0.1-centos7/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-ld: cannot find Scrt1.o: No such file or directory
/home/newton/Documents/UnrealEngine-5.2.1-release/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v21_clang-15.0.1-centos7/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-ld: cannot find crti.o: No such file or directory
/home/newton/Documents/UnrealEngine-5.2.1-release/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v21_clang-15.0.1-centos7/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-ld: cannot find -lm
/home/newton/Documents/UnrealEngine-5.2.1-release/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v21_clang-15.0.1-centos7/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-ld: cannot find -lc
/home/newton/Documents/UnrealEngine-5.2.1-release/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v21_clang-15.0.1-centos7/aarch64-unknown-linux-gnueabi/bin/aarch64-unknown-linux-gnueabi-ld: cannot find crtn.o: No such file or directory
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

Compiling the C compiler identification source file “CMakeCCompilerId.c” failed.
Compiler: /home/newton/Documents/UnrealEngine-5.2.1-release/Engine/Extras/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v21_clang-15.0.1-centos7/aarch64-unknown-linux-gnueabi/bin/clang
Build flags: -target;aarch64-unknown-linux-gnueabi

I really hope I can get your help.

The exact steps our CI system uses to build the plugin on (Intel) Linux can be found here:

We’ve never tried building for Linux/ARM64, but I suspect you can get it to work by adapting those steps. Your errors suggest that perhaps one of the necessary environment variables hasn’t been set, or something hasn’t been passed through correctly via the toolchain file? Sometimes when changing toolchain files, it is necessary to delete the build directory compelely and start over.

Beyond that, I can’t really help you, as Linux/ARM64 isn’t officially supported and I don’t have a system I can try it on myself.

Does it run, at last?