# Build Fresh-checkout build procedure. Completed 2026-11-07 after the pinned engine was installed and a blank `Game/GigLine` build was packaged and launch-tested. ## Constraints - Engine installation is external to the repository. Record its path and exact version in [toolchain.md](toolchain.md). - Build output (`Binaries/`, `Intermediate/`, `Saved/`, `DerivedDataCache/`) is never committed. - Large content is LFS-tracked, so a fresh clone needs `git lfs install && git lfs pull` before any build. ## Engine Pinned install: **Unreal Engine 5.8.4** (CL 58902052, promoted build) at `/run/media/system/DATA/Engines/UE_5.8.4`. The engine bundles **no** Linux clang; the system clang (23.1.4, Fedora 45) is the game-code toolchain. Game targets must use `BuildSettingsVersion.V7` to share the installed editor's build environment. ## Fresh-checkout build ```bash git clone gig-line && cd gig-line git lfs install && git lfs pull Tools/check-lfs.sh # must pass before any content build # Compile the project's editor target (first build also proves the toolchain) cd /run/media/system/DATA/Engines/UE_5.8.4 Engine/Build/BatchFiles/Linux/Build.sh GigLineEditor Linux Development \ -project="$PWD/../../Documents/06-games/gig-line/Game/GigLine/GigLine.uproject" \ -WaitMutex # Expected tail: "Result: Succeeded"; module binary lands in # Game/GigLine/Binaries/Linux/libUnrealEditor-GigLine.so # Open in the editor (GUI, Vulkan) ./Engine/Binaries/Linux/UnrealEditor \ /run/media/system/DATA/Documents/06-games/gig-line/Game/GigLine/GigLine.uproject ``` Adapt the `-project=` path to the actual checkout location. ## Package a Linux build ```bash cd /run/media/system/DATA/Engines/UE_5.8.4 Engine/Build/BatchFiles/RunUAT.sh BuildCookRun \ -project="/run/media/system/DATA/Documents/06-games/gig-line/Game/GigLine/GigLine.uproject" \ -noP4 -platform=Linux -clientconfig=Development \ -cook -allmaps -build -stage -pak \ -archive -archivedirectory="/run/media/system/DATA/Builds/GigLine" \ -unattended # Expected: "BUILD SUCCESSFUL" (~1 min for the blank project; archive ~1.1 GiB) # Launch test: /run/media/system/DATA/Builds/GigLine/Linux/GigLine.sh ``` The archive directory is deliberately **outside** the repository; never archive into the checkout. ## Headless content checks Both content-acceptance tests run headless and are the template for all asset import verification: ```bash # Static-mesh scale test (Blender export -> Unreal import -> measure) # Blender: Tools/scale_test_export.py, Unreal: Tools/ue_scale_test_import.py # MPFB character (generate -> rig -> bake -> export -> skeletal import) # Blender: Tools/mpfb_character_export.py, Unreal: Tools/ue_character_import.py # Unreal side of any test: ./Engine/Binaries/Linux/UnrealEditor-Cmd \ /run/media/system/DATA/Documents/06-games/gig-line/Game/GigLine/GigLine.uproject \ -run=pythonscript -script=/Tools/