[ARM] Linux Compile for ARM

will there be support in the future? as I would like to deploy my game on a ARM Linux system,

I tried with compile Linux file and it wont run: UE4Game: cannot execute binary file: Exec format error

The build system supports compiling for different Linux architectures (any target triplet), however this is not something you can do out of the box, and games in particular will need code changes (Linux code uses regular GL path, most ARM devices need GLES). It’s easier to get started with getting the headless server to run.

What’s your target machine/board/device?

Nvidia Jetson TK1 Dev board

if i need to change the GL → GLES reder path, is there a tutorial or some hints or form i can take a look?

For that device you don’t need GLES. I investigated supporting it on this Epic Friday (Screenshots of a couple of UnrealEngine 4 tools running on Jetson TK1 board (an Epic Friday project). - Imgur) and plan to make ARM cross-toolchain + prebuilt TPS available.

Hello, I DL the UE4.5.0 but I still don’t see how to cross-compile to ARM, isn’t the 4.5.0 support that? or do I miss something?

Hello, I download the UE 4.5.0 don’t it support ARM Linux cross compiling? or am I missing something?

It’s not supported in 4.5, not out of the box. You can create an ARM-targeting toolchain by modifying ct-ng scripts from current x86_64-targeting toolchain as I did, and compile most of the engine, but you will need binary PhysX from us. We will look into including both pre-build toolchain and TPS libraries with 4.6, although that is not certain.

is the 4.6 has the proper ARM target support?

It is much easier to target ARM in 4.6, but you still need a slight code change (set ARM architecture in UBT to be the default). Also, the toolchain is not yet public, but if you want we can make it available.

“the toolchain is not yet public, but if you want we can make it available.”

YES PLEASE, i would like to have some instruction on how to compile UE4 for ARM

I would also be interested in getting a working toolchain and tips for any other code modifications, as I want to try getting the Oculus Rift DK2 working with my Tegra TK1 Jetson board.

The link to the toolchain that allows you to compile UE4 for ARM Linux: https://s3.amazonaws.com/unrealengine/qfe/arm-unknown-linux-gnueabihf_v5_clang-3.5.0-ld-2.23.1-glibc-2.13.zip

Note that the toolchain itself runs on Windows (the set up is basically the same as our normal cross-toolchain for x64 Linux). To make UBT choose ARM, you need to edit UEBuildLinux.cs and set DefaultArchitecture to “arm-unknown-linux-gnueabihf”.

You of course need third-party ARM libraries (which are included for 4.6 and should be picked up by UBT automatically).

You can build server, games and programs. You cannot build the editor (e.g. because there’s no FBX for ARM, although you may try working around that). Note that for all targets except the server you will need a desktop GL (currently only Jetson has it).

Problem, I DL the 4.6.1 and in the

UEBuildLinux.cs

there is no:
DefaultArchitecture to “arm-unknown-linux-gnueabihf”.

am I missing something?

There is a variable called DefaultArchitecture, please set it to that value (take a look at lines 24-26).

I minor issue, the same game I compiled works on PC, but when it is for ARM Linux, it will crash when there is an audio play back (this does not occur in the PC/Windows)

It may be because libopenal.so (and other .so) in Engine/Binaries/Linux are still x86-64. There’s currently no separate, per-architecture directories for run-time libraries, so you need to pay extra attention when deploying an ARM build.

does that means i have some files need to compile in VS2013? or does it means there is no runtime file for ARMs at all?(until Epic update them?)

Neither of these. A subset of .so files that the engine links against (notably OpenAL) needs to be placed in Engine/Binaries/Linux directory. Since Binaries/Linux directory does not have architecture-specific sub-directories (which need to be added to rpath), only x86 files are present there by default.

For now, when packaging for Linux ARM, you need to take care of that manually, replacing x64 libraries by respective ARM ones, which can be found in Engine/Source/ThirdParty/*.

I have compiled all the information here and add them to the cross compile for linux wiki page (A new, community-hosted Unreal Engine Wiki - Announcements - Epic Developer Community Forums). Have also verified for myself that these steps allowed me compile, package, and run SunTemple demo for Jetson TK1. Please review and correct or let me know if there are any mistakes.

Thanks.