ひつじTips

技術系いろいろつまみ食います。

UE4のアプリをJetson Nanoで動かす!(という名の,UE4でLinux-Arm環境向けにクロスコンパイルする方法)

f:id:mu-777:20190501014135j:plain


こんな感じのことができます.


全てはここの情報に従っています.

サマリとしては,UE4のソースをちょっっっっとだけ編集して,ビルドすればできました.

ただ,今思えばUE4のビルドまでしなくても,ToolchainのダウンロードアプリでのTargetの設定 だけで大丈夫そうな気もします.が,まぁいいか.どなたか試していただきたく.


以下の作業は,Windows10,ThinkPad x1 Carbon 2018(Intel Core i7-8550U)の環境で,UE4のバージョンは4.21で行いました.

迷いつつ/中断しつつでやったのでなんとも言えませんが,スムーズにいっても1日がかりだと思います.UE4のビルド,初回はめっちゃ長いので...
なにか暇つぶしがあるといいかもしれません.(自分は結構アニメ見ながらビルド待ったりしてました)

準備

UE4ソースのクローン

こはちょっとフォーカス外なので詳細は省略します.以下などを参考にソースをクローンしてください.

docs.unrealengine.com

api.unrealengine.com

注意点としては,

  • UE4の日本語ドキュメントは古いことが多い(個人的な主観)ので,英語の方が確実です
    • (が,ここに関しては日本語の方でも大丈夫そう)
  • 特定のバージョンにしたい場合は,該当バージョンの tag へ checkout しておきましょう
  • パスが奥深ーーーく掘られていって,パスが長過ぎるとWindowsに怒られることがあるので,できるだけ浅く置くようにしましょう
    • 自分は, C:\Users\xxxxxxx\programs\unreal\0_editor\UnrealEngine だとダメで, C:\Users\xxxxxxx\programs\unreal\ue4editor でOKでした


このドキュメント通りに進めて,UE4.sln ができ,Development Editor|Win64 でビルドができている前提で以下を進めます.

Toolchainのダウンロード

以下のページから,Toolchainをダウンロードできます.該当するバージョンのものを選択し,ダウンロードしてください.

docs.unrealengine.com

ダウンロード後,システム環境変数LINUX_MULTIARCH_ROOT が追加されていると思います.もしダウンロードしてきたvXX_clang-X.X.X-centos7 のパスが変わるのであれば,システム環境変数の方も変えておきましょう.

アーキテクチャの確認

一旦,Jetson Nano のアーキテクチャを確認しておきます.

$ uname -a
Linux myjetsonnano 4.9.140-tegra #1 SMP PREEMPT Wed Mar 13 00:32:22 PDT 2019 aarch64 aarch64 aarch64 GNU/Linux

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/7/lto-wrapper
Target: aarch64-linux-gnu
(後略)

で確認できます.

Jetson Nano のアーキテクチャは, aarch64-linux-gnu ですね

UE4のビルド

デフォルトアーキテクチャの変更

Engine\Source\Programs\UnrealBuildTool\Platform\Linux\UEBuildLinux.cs の124行目あたりからを,以下のようにコメントアウト部分を変更します.

 class LinuxPlatform : UEBuildPlatform
    {
        /// <summary>
        /// Linux architecture (compiler target triplet)
        /// </summary>
        // FIXME: for now switching between architectures is hard-coded
        //public const string DefaultArchitecture = "x86_64-unknown-linux-gnu";
        //public const string DefaultArchitecture = "arm-unknown-linux-gnueabihf";
        public const string DefaultArchitecture = "aarch64-unknown-linux-gnueabi";


Engine の下にも Programs フォルダがあるので注意です.EngineSourcePrograms です.

UE4をビルド

Visual Studio の「ビルド」→「パッチビルド」から,以下の5つの構成にチェックを入れてまとめてビルドしてしまいます.

プロジェクト 構成 プラットフォーム
UE4 Development x64
UE4 Development Editor x64
UE4 Linux_Development x64
UE4 Linux_Shipping x64
UE4 Shipping x64


(実はこんなにいろいろやらなくてもいい,というか必要な構成だけでOKかと思います)

アプリのビルド

アプリでのTargetの設定

アプリのフォルダの Config\DefaultEngine.ini に以下の2行を追加します.

[/Script/LinuxTargetPlatform.LinuxTargetSettings]
TargetArchitecture=AArch64UnknownLinuxGnueabi

アプリをビルド

Windows上ですが,普通にLinux向けにパッケージングを行います.

f:id:mu-777:20190501013022p:plain
Linuxビルド

指定するフォルダに LinuxNoEditor フォルダができればOKです.

アプリの実行

LinuxNoEditor をなにかしらで Jetson Nano へもっていき,直下の <AppName>.sh を実行すれば,Jetson Nano でUE4アプリが楽しめます!!!!!!!