Mac ARM64 vs X86

From PSwiki
Revision as of 21:31, 25 October 2026 by Talad (talk | contribs) (Created page with " = PlaneShift — Mac Shipping Build: ARM64 / x86_64 Architecture Issues = '''Environment:''' Unreal Engine 5.7.4, macOS Sonoma 14.6.1, Xcode 16.2, Apple Silicon M1. == 1. Problem encountered — October 25, 2026 == When building the Mac Shipping client, Unreal Engine started failing during cooking: <code>UnrealEditor-Cmd: Illegal instruction: 4 ExitCode=132 Cook failed</code> Even running <code>UnrealEditor-Cmd -help</code> produced the same error, before loading Pl...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

PlaneShift — Mac Shipping Build: ARM64 / x86_64 Architecture Issues

Environment: Unreal Engine 5.7.4, macOS Sonoma 14.6.1, Xcode 16.2, Apple Silicon M1.

1. Problem encountered — October 25, 2026

When building the Mac Shipping client, Unreal Engine started failing during cooking:

UnrealEditor-Cmd: Illegal instruction: 4
ExitCode=132
Cook failed

Even running UnrealEditor-Cmd -help produced the same error, before loading PlaneShift.

Root cause: conflicting architectures

The Mac Shipping script requested x86_64:

-architecture=x86_64
-specifiedarchitecture=x86_64

Without additional flags, UnrealBuildTool also rebuilt the Unreal Editor for x86_64, overwriting the working native ARM64 editor binaries.

We confirmed this in the logs:

Building PSUnrealEditor, ShaderCompileWorker,
UnrealPak and PSUnrealClient...

[15/911] Link [Intel] UnrealEditor-Core.dylib

The resulting x86_64 editor crashed under Rosetta with SIGILL.

Important: The exact cause of the illegal instruction inside the Intel editor was not conclusively established. The last library initializer reported before the crash was libembree4.4.dylib, making Embree a possible contributor.

Rebuilding Unreal Engine in Xcode for ARM64 restored the working editor.

2. Correct architecture configuration

The intended arrangement is:

Component Architecture
UnrealEditor ARM64
UnrealEditor-Cmd (cooker) ARM64
UnrealEditor-Core.dylib ARM64
UnrealEditor-PSUnreal.dylib ARM64
PSUnrealClient Shipping x86_64

The cooking editor and its PlaneShift game module must have matching architectures. The packaged client can target a different architecture.

3. Required Shipping build flags

Keep the existing x86_64 client options, but add:

-nocompileeditor -skipbuildeditor

Full command:

/Volumes/DATA-2TB/5.7.4-release/Engine/Build/BatchFiles/RunUAT.command \
BuildCookRun \
-project="/Users/luke/PSUnreal511/PSUnreal.uproject" \
-nop4 \
-Prereqs \
-package \
-target=PSUnrealClient \
-clientconfig=Shipping \
-utf8output \
-specifiedarchitecture=x86_64 \
-platform=Mac \
-architecture=x86_64 \
-targetplatform=Mac \
-build \
-nocompileeditor \
-skipbuildeditor \
-cook \
-allmaps \
-pak \
-stage \
-archive \
-archivedirectory="/Users/luke/temp/PSUnreal_Ship"

These flags successfully prevented AutomationTool from rebuilding PSUnrealEditor for Intel in our tests.

The build log should list:

Building UnrealPak and PSUnrealClient...

It should NOT list:

Building PSUnrealEditor...

4. Pre-build verification commands

Run these before creating a Shipping release.

Check Unreal Editor executable

file /Volumes/DATA-2TB/5.7.4-release/Engine/Binaries/Mac/UnrealEditor-Cmd

Expected:

Mach-O 64-bit executable arm64

Check engine Core library

file /Volumes/DATA-2TB/5.7.4-release/Engine/Binaries/Mac/UnrealEditor-Core.dylib

Expected:

Mach-O 64-bit dynamically linked shared library arm64

Check PlaneShift editor module

file /Users/luke/PSUnreal511/Binaries/Mac/UnrealEditor-PSUnreal.dylib

Expected:

Mach-O 64-bit dynamically linked shared library arm64

Check Shipping client architecture

file /Users/luke/PSUnreal511/Binaries/Mac/PSUnrealClient-Mac-Shipping

Expected:

Mach-O 64-bit executable x86_64

Check installed build tools

uname -m
sw_vers
xcodebuild -version

5. Repairing the project editor module

If cooking fails with:

The game module 'PSUnreal' could not be found.
Please ensure that this module exists and that it is compiled.

First check UnrealEditor-PSUnreal.dylib.

In our case, this file was x86_64 while the engine was ARM64, so Unreal couldn't load it.

Rebuild the project editor module for ARM64:

cd /Volumes/DATA-2TB/5.7.4-release

./Engine/Build/BatchFiles/Mac/Build.sh \
PSUnrealEditor Mac Development \
-Project="/Users/luke/PSUnreal511/PSUnreal.uproject" \
-architecture=arm64

Verify the architecture again before launching the Shipping build.

6. If UnrealEditor-Cmd crashes again

Test the editor independently:

/Volumes/DATA-2TB/5.7.4-release/Engine/Binaries/Mac/UnrealEditor-Cmd -help

echo "Exit code: $?"

If the result is Illegal instruction: 4 (exit code 132):

  1. Check whether the editor binaries became x86_64.
  2. Inspect the build logs for PSUnrealEditor Mac Development -architecture=x64.
  3. Rebuild the editor for ARM64 in Xcode.
  4. Verify the PlaneShift editor module is also ARM64.
  5. Ensure the Shipping script contains -nocompileeditor -skipbuildeditor.

An x86_64 editor is not automatically invalid, but that configuration caused startup crashes on this Mac.

7. Where to find cooking logs

AutomationTool logs are stored in:

~/Library/Logs/Unreal Engine/LocalBuildLogs/

The cooking log filename can change when AutomationTool copies it from the engine directory.

Find the latest logs:

ls -lt "$HOME/Library/Logs/Unreal Engine/LocalBuildLogs/" | head -20

To inspect the latest Cook log:

LOG=$(ls -t "$HOME/Library/Logs/Unreal Engine/LocalBuildLogs/"/Cook-*.txt | head -1)
tail -n 120 "$LOG"

8. Final notes

  • Don't force the entire build environment into x86_64 using the old arch -x86_64 shell workaround.
  • Don't rebuild the Intel editor just because the game client targets Intel.
  • Avoid running Xcode editor builds and Shipping builds simultaneously.
  • Always verify both the engine and game-module architecture after rebuilding.
  • The compilation phase can succeed even when the resulting editor cannot run.
  • The ARM64 editor successfully progressed into static-mesh processing and Metal shader compilation after these fixes.

Resolution status: The ARM64 editor and matching PlaneShift editor module successfully reached the cooking stage with the new Shipping flags.