Build source engine with custom modified for team

Build the engine with custom source modified for our team use. Just like Epic engine release in launcher.
Make the artists can open and work around without requre recompiled project.
I find lots of such question about how to build and distribute a custom engine for a team. But i can’t find a perfect solution to solves this problem.

I follow this tut to build with command:
BuildGraph -target=“Make Installed Build Win64” -script=Engine/Build/InstalledEngineBuild.xml -clean -set:WithDDC=false
https://docs.unrealengine.com/latest/INT/Programming/Development/InstalledBuildReference/index.html
When compile done, i create a c++ base project with the custom build editor, everything work fine.
But when i make a copy of this project to other without VS IDE installed. when open project with custom build engine it requre VS IDE env to recomplie the project and builds failed(CANNOT find vs2015 to compile).
But if i create a project with epic launcher, it works fine, both can open it.
So, what did i wrong?!

Hey roshan_Ex-

How are you moving the project from one machine to the other? Are you just zipping the project folder? Was the project compiled prior to moving it to the second computer? Please provide as much detail about the process you’re using to help reproduce the behavior you’re seeing locally.

after custom source engine build,i open ue4editor under localbuild dir,and then create a cpp base empty project with a test map and test cpp actor ! Compile and Save project and quit. Switch to project folder just create and open it,runs well.
then make a zip copy with custom build engine (under local build)and proejct to other pc,when try to open this project it requires switch engine,then switch engine with custom build engine,then it requires recompiled project!
I’m sure the custom engine and project is the same!

If I can’t solve this problem before Monday next week, the artist going to eat me! Life always this hard! Someone help!:frowning:

Hello,anybody here?
, are u here?!

Hello, (I guess u still in holyday:-)), I final fixed this hard if i remove the UE4Editor.modules from local build engine binary dir. Because when i debug UBT, i find the BuildId in modules file is different between project and custom build engine.
If i copy and BuildId from engine folder to project, the problem can be solve, but i found that the BuildId always auto-gen when u recomplie the project. So, if u remove the UE4Editor.modules under building engine, then all this solve!
So, the question come now, why UE4Editor.modules create when use
cmd "BuildGraph -target=“Make Installed Build Win64” -script=Engine/Build/InstalledEngineBuild.xml -clean -set:WithDDC=false " build the installed version engine. I found the Epic launcher folder has NO such file under spe version engine!!!

Hi there, coincidentally i have exactly the same issue with the binary build. I have written an answerhub entry as well about this here

Your workaround seems to be the best for now, i tried it, i can build the project and it is working so far. Thats very nice (even it may be not intended to work like this?)

Thank you roshan_Ex, this is much better :slight_smile:

(:slight_smile:) ……Maybe the Epic staff can give a perfect answer.

Hi roshan_Ex,

You are on the right track with this. You would want to use BuildGraph to make the binary version of the Editor to share with your team. The problem that you are running into is that Windows assigns a unique random GUID registry key to the binary Engine when it is placed on a computer. When you create a project on the binary Engine on your computer, that GUID is added to the project’s .uproject file to indicate which Engine should be used if you double-click on the file. The problem is that this GUID won’t match the one assigned to the Engine on your artist’s computer. There are a couple things you can do to get around this.

The best option would be to right a script to assign a registry key to the Engine when it is installed on a new computer. That way you can make sure that every Engine has the same GUID, and project’s can easily be passed around the team.

The second option would be to locate the GUID for the Engine on the computer you want to use (using the Windows Registry Editor, or something similar), then edit the EngineAssociation field in the .uproject file to have that GUID value. Once this is done, you can double-click the .uproject file and it will open the project without needing the project to be built. Be careful with this option though, as it will only work when you are using the exact same installed binary build as everyone else on your team. If someone is using a different installed binary build, it could potentially introduce discrepancies into the project.

Thx , I sure the engine assciation GUID is the same. But the problem still unslove!
bool FVersionedModuleEnumerator::IsMatchingVersion(const FVersionManifest& Manifest) const { if(InitialManifest.Changelist == 0) { return Manifest.Changelist == 0 && (InitialManifest.BuildId == Manifest.BuildId || Manifest.BuildId.Len() == 0); } else { return InitialManifest.Changelist == Manifest.Changelist; } }
if the Changelist in modules file is 0, then always failed cause of buildid always auto-regen when rebuild project.
When i checkout engine source from git with 4-15-0, the Changelist in build version is 0, so when i use BuildGraph build the custom installed engine, the Changelist copy from the build file. And 0 always failed on function IsMatchingVersion.
When i open the modules file in launcher install engine version with 4_15, i found the build.vision config as follow:
{
“MajorVersion” : 4,
“MinorVersion” : 15,
“PatchVersion” : 0,
“Changelist” : 3299760,
“CompatibleChangelist” : 0,
“IsLicenseeVersion” : 0,
“IsPromotedBuild” : 1,
“BranchName” : “++UE4+Release-4.15”
}
The Changelist is 3299760. If i change Changelist in my custom build and NO eq 0, then it work.

Hi roshan_Ex,

There may be something that we are doing differently, because I am able to open a project using a different copy of the same binary local build of the Engine without needing to generate project files or build the project, even if the Changelist value in Build.version is 0. This is what I did:

  1. Use the BuildGraph to create a binary local build of 4.15.
  2. Copy that binary local build to a different computer.
  3. Create a basic code project using the binary local build that I created in step 1 (this is not the source build of the Engine that I used to create the binary local build).
  4. Copy the project to the other computer.
  5. Run the binary local build on the second computer once to ensure that Windows has a GUID for the Engine in the registry. It can be shut down once the Project Browser window appears.
  6. Open the Windows Registry Editor and locate the GUID for the Engine.
  7. Edit the project’s Engine Association in the .uproject file with the GUID for the Engine on the second computer.
  8. Save the .uproject file.
  9. Double-click the .uproject file.

At this point, the project opens in the Editor without needing to generate project files or build the project, both of which would require Visual Studio to be installed. Could you point out where your process is different?

Hi , the different are step 5 and 6;
1-4 we do the same, the different is before I open uproject on another computer, I manual create the same GUID(from first pc) with engine binary location in Windows Registry Editor.
After this step done, right click on uporject, chose switch engine version with custom build location, and then try to open uproject. Then recompiled require.
So, if i directly open the custom build editor, it will auto-gen the same GUID on any computer? If different, when some guy checkout svn it will override this field.
Thx , and love u guys!

Hi folks,
We have a similar issue, but with regards to different Windows and Mac builds (possibly Linux later) of the Unreal Engine.

We work with projects under Git version control to sync them between dev systems. Given that builds on the different machines are from the same Unreal version it seems logical they should have the same GUID (explicitly assigned), or something else making them equivalent.

When the project is edited and saved on one system it becomes associated with the engine GUID on that system and thus disassociated on the other dev computers I use. Basically I go between Mac OS and Windows 10 to make sure my project code is working across platforms (Windows, Mac OS, and later Linux).

I wish not to pollute the project repo with constant updates and changes of the associated engine version, rather have the engine GUID to be the same across my platforms – naturally could be changed if we change the engine version, or modifies the engine source.

What is the recommended practice in this scenario?

Thanks in advance,

Hi ,

Sorry for not getting back to you sooner. Have you found a method for working on different platforms that works for you and your team?

What would typically be done here is to create a custom installer for the local binary build of the Engine so that the same registry key is used for each installation on every computer. This is essentially what we do with the binary Engine versions that are distributed through the Launcher. Unfortunately I am not familiar with how this would work for installations on Mac or Linux computers.