Cross Compiling for Linux-ARM/Raspberry PI 3

You don’t need to build your own cross-toolchain anymore - since version 8 of the toolchain, ARM and AArch64 sysroots are included in the zip (you can examine its contents), you just need to set it up using LINUX_MULTIARCH_ROOT variable and not deprecated LINUX_ROOT one. Edit your project’s DefaultEngine.ini and add (or change, if it exists) this section:

[/Script/LinuxTargetPlatform.LinuxTargetSettings]
TargetArchitecture=ArmUnknownLinuxGnueabihf

then re-build the Linux binaries (from scratch). You may encounter compiler errors since some targets will try to build ShaderCompileWorker first - please ignore ShaderCompileWorker ones as you don’t need SCW on the device.

I have tried this for various versions of Unreal and can really using Anything between 4.15 - 4.18
I started by following:
https://wiki.unrealengine.com/Compiling_For_Linux

But its really unclear where to start. So there is clang-3.5.0-arm but it seems like that is for Unreal version <= 4.8

So instead started to follow the directions to build my own to function with a version of unreal my game works with following these directions
https://wiki.unrealengine.com/Building_Linux_cross-toolchain

So since I am currently using Unreal version 4.18 I download v10 clang 5.0.0-based. I copy this to my ARM device which is running Ubuntu 16.04 (I thought that version was recommended somewhere but I cant find it any more)

I install all the required packages and unzip. The I change directories to build/scripts and run the command /BuildCrossToolchain.sh
Turns out this file has some windows line feeds that prevent it from building. I dos2unix that file. Then I get an issue further down the line with a .config.2 file having a ‘/r’. Seems like that file is pulled from a repo or something

My question is am I even heading in the right direction? Is this the correct first step? What am I even building , it seems like its building a special version of gcc? or is this clang I am building? Is there a prebuilt version of this somewhere?

[Update] with help from RCL

  • Download V10 clang from description for 4.18
  • Unzip it into a stable location (eg c:\dev)
  • Set environment variable LINUX_MULTIARCH_ROOT ( EG c:\dev\v10_clang-5.0.0-centos7) This directory has the sub folder arm-unknown-linux-gnueabih (this will be refrenced later)
  • In your Unreal project edit /Config/DefaultEngine.ini add or modify the value
[/Script/LinuxTargetPlatform.LinuxTargetSettings]
TargetArchitecture=ArmUnknownLinuxGnueabihf
  • Edit your Engine seetings UEBUildLinux.cs (eg C:\Program Files\Epic Games\UE_4.18\Engine\Source\Programs\UnrealBuildTool\Platform\Linux\UEBuildLinux.cs)
static private string DefaultArchitecture = "x86_64-unknown-linux-gnu"; 

and un-commenting the linux-arm architecture line just below it:

//static private string DefaultArchitecture = "arm-unknown-linux-gnueabihf";

this is the path for the sub-directory referenced byLINUX_MULTIARCH_ROOT

  • Back in your project directory regenerate your sln file Right-click on your .uproject and select “Generate Visual Studio Project Files”

Thanks for the help! Ok this seems to change things now I am getting errors like this below, did I do something else wrong? (I added all my steps to the main question above if that helps but I referenced c drive instead of d to help others)
UATHelper: Packaging (Linux): [2/24] Compile PCH.UELinkerFixups.h
UATHelper: Packaging (Linux): d:\dev\TestProject 4.18\Intermediate\Build\Linux\48086BB4\TestProject\Development\UELinkerFixups\PCH.UELinkerFixups.h(2,10): error: non-portable path to file ‘“d\dev\TestProject 4.18\Intermediate\Build\Linux\48086BB4\UE4\Development\UELinkerFixupsName.h”’; specified path differs in case from file name on disk [-Werror,-Wnonportable-include-path]

have you found a solution for that error? I’m having the same exact issue.

Make sure you use consistent case in all your disk paths, in #include or otherwise.
Please examine the reported path and see if there’s something in it that is spelled differently in the actual file system, e.g. Dev instead of dev.

Should one still compile UE 4.23 in Windows as described above in order to get an ARM version? [I’m trying to get a version of UE 4 for the NVIDIA Nano].