My configuration is:
Windows for unreal,
Linux for file storage.
SMB/NFS mount points on the Windows machine to network file shares. My compile times are really slow, or rather, the startup time is really slow as Unreal sorts out its PCH and caching and all that. My local windows filesystem is 1tb nvme, 4gb/s. But 1tb is small. My remote share has many many terabytes, and lots of projects live there. I prefer to leave them all there, well organized, and not “localize” projects for Unreal. Loading source code and assets works fine over the network, but compiling does not.
Getting this configuration to work at all was a trick… allowing .dll files to read/write over the network, trust settings for Visual Studio, Unix permissions, a case-insensitive local file system with a case sensitive remote filesystem, etc. But finally did get all that working. But ultimately compiles are slow over the network just using the mapped drive path.
The solution, which took me a while to figure out, was to get the Intermediates
folder to be local. At first I tried soft linking the Intermediates
folder from the remote system to something on the local system, but windows won’t allow that.
Where P: is remote filesystem:
mklink /D "P:\projects\[UnrealProject]\Intermediate" "C:\Users\[username]\Documents\Unreal Projects\[UnrealProject]\Intermediate"
… this won’t work, because the remote filesystem is not NTFS, and because Windows doesn’t want to save or resolve a softlink on a remote filesystem.
BUT! This does work… Create a wrapper folder on your local filesystem, for instance C:\Users\[username]\Documents\Unreal Projects\UnrealProject
. Then, softink the important parts of your project like Content
and Source
and Plugins
to the remote share.
cd C:\Users\[username]\Documents\Unreal Projects\[UnrealProject]
mklink /D Config "P:\projects\[UnrealProject]\Config"
mklink /D Content "P:\projects\[UnrealProject]\Content"
mklink /D Plugins "P:\projects\[UnrealProject]\Plugins"
mklink /D Source "P:\projects\[UnrealProject]\Source"
Now your remote share actually stores the files, the Intermediate
, DerivedDataCache
, Saved
, *sln
, etc. all reside on your fast local disk for compiling. You don’t want to commit any of those temporary things over git anyway, so I can commit/push git from either system, I can compile quickly, I can keep large data organized on a single remote share.
Yay! Hope that helps someone.