Compiler les sources d’Unreal Engine : Pourquoi & comment ?

Si il y a bien une chose qui peut devenir nécessaire quand on développe une application avec Unreal Engine, c’est de compiler les sources du moteur. Par chance elles sont ouvertes et accessibles via github. Vous allez probablement me demander pourquoi ? Il y a plusieurs cas de figure, pour ma part, voici pourquoi je compile les sources :

  • Pouvoir compiler un serveur dédié : Par défaut il n’est pas possible de faire une build headless, pour cela il faut compiler les sources avec le flag WithServer.
  • Accéder à la dernières version d’une branche, par exemple avoir la version 5.0 tout de suite
  • Débloquer des fonctionnalités spécifiques, c’est le cas du Fork d’Oculus par exemple
  • Corriger ou adapter les sources à ces besoins
  • Utiliser le moteur sur une distribution Linux

Je vais détailler ici comment je fais pour compiler les sources de la branche 4.x sur le fork d’Oculus. Même si la documentation explique ce qu’il faut faire, elle n’indique pas certains petits points qui peuvent vite être bloquant. Par exemple la bonne version du SDK Windows à installer… Toutes ces manipulations sont valables pour les sources officielles et le fork Oculus.

Installation de Visual Studio 2019

Bien qu’Epic recommande d’utiliser Visual Studio 2017, c’est bien la version 2019 que j’utiliserais ici. Voici ce que j’ai installé :

Mon setup de Visual Studio 2019

Vous noterez que j’ai deux SDK Windows, je pense que vous ne pouvez installer que la version 10.0.0.18362.0. Avant d’avoir installé ce SDK, j’avais des erreurs de compilation. N’oubliez pas d’installer la prise en charge de .Net 4.6.2.

Si vous compilez les sources d’Unreal Engine 5, il est possible d’utiliser des versions plus récentes : VS2022, .Net 6, SDK plus récent, etc… Mais sur la branche 4.x, il est recommandé d’utiliser ces versions là.

Si vous voulez compiler la cible Android, il faut installer Android Studio et le paramétrer correctement (SDK et NDK).

Préparation et compilation des sources

La documentation explique assez bien ce qu’il faut faire… Je vous recommande par contre de cloner les sources à la racine de votre support de stockage pour éviter tout problème de chemin trop long (uniquement sous Windows). Comptez 300 Go de stockage pour le clone, les dépendances et le résultat de compilation ! L’idéal est à mon avis, un SSD externe de 1To en USB 3.1 dédié aux builds.

  • On récupère les sources via git
  • On double clic sur Setup.bat (ou Setup.sh sous Linux/Mac)
  • On double clic sur GenerateProjectFiles.bat (ou .sh sous Linux/Mac)

Sous Windows il suffit d’ouvrir la solution Visual Studio et de choisir la cible Development-Editor, puis de compiler le projet UE4…. Comptez 5h sur une machine équipée d’un bon CPU…

A la suite de ça, vous pourrez lancer l’exécutable dans UnrealEngine/Engine/Binaries/Win64/UE4-Editor.exe. Mais attention car vous ne pouvez pas déplacer cet exécutable car tout lié aux sources ! Il n’est donc absolument pas facile de partager cette build avec quelqu’un.. Il y a cependant une méthode beaucoup plus efficace : l’Installed Build !

Compiler une Installed Build aka Rocket Build

L’Installed Build ou Rocket Build est une build indépendante du dossier des sources d’Unreal. Elle peut être partagée avec votre équipe, c’est la solution à adopter pour vraiment profiter d’une compilation custom du moteur.

Pour pouvoir l’exécuter il faut déjà compiler les outils automatisation du moteur

Une fois que c’est fait, il suffit d’ouvrir un terminal et de taper la ligne de commande suivante :

D:\UnrealMeta\Engine\Build\BatchFiles\RunUAT.bat BuildGraph -target="Make Installed Build Win64" -script=Engine/Build/InstalledEngineBuild.xml -set:VS2019=true -set:HostPlatformOnly=false -set:WithClient=true -set:WithServer=true  -set:WithDDC=false -set:WithLinux=false -set:WithWin64=true -set:WithWin32=false -set:WithMac=false -set:WithAndroid=true -set:WithIOS=false -set:WithTVOS=false -set:WithLumin=false -set:WithLinuxAArch64=false -set:WithHoloLens=false -set:WithLuminMac=false -set:WithHoloLens=false -set:WithLuminMac=false -set:WithFullDebugInfo=false -set:SignExecutables=false
 

Vous pouvez changer les paramètres de cette ligne de commande pour l’adapter à vos besoins. Ici on compile la version Win64 de l’éditeur avec les cibles de déploiement Win64 et Android. Toutes les autres cibles ne seront pas disponibles. Vous trouverez une liste des options disponibles dans D:\UnrealMeta\Engine\Build\InstalledBuild.xml. Passez bien HostPlatformOnly à false si vous voulez utiliser la build partout. Comptez environ 50 Go pour la build complète ! C’est beaucoup, mais vous pouvez réduire cette taille en supprimant les fichiers de débogage et les plugins inutiles (bon courage 😉 ).

Finalisation

Une fois que la compilation est terminée, vous trouverez un dossier LocalBuilds dans le dossier des sources. Vous pouvez copier son contenu où vous voulez et le partager avec votre équipe 🙂 Il y a cependant un dernier point à aborder. Si vous lancez l’exécutable UE4-Editor.exe, une entrée dans le registre sera ajoutée avec comme nom de moteur un hash absolument pas explicite. L’idéal c’est d’avoir un nom plus normalisé. Pour se faire, ouvrez l’éditeur de registre (regedit) et ajoutez une clé dans HKEY_CURRENT_USER\SOFTWARE\Epic Games\UnrealEngine\Builds qui aura comme nom l’identifiant du moteur, par exemple 4.27-Meta et comme valeur le chemin d’accès ! Grâce à ça, le projet qui fonctionnera avec cette version d’Unreal aura comme version d’Unreal, la clé que vous aurez choisi. C’est nettement plus simple de lire 4.27-Meta que b26479bf99da52190dce9c2fd81efa02 non ?

In the end

Je n’utilise pas les versions custom pour travailler sur mes productions, mais généralement pour compiler le package final. La distribution officielle est largement suffisante pour la production de A à Z.