More work on generating the project config files
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,6 +2,7 @@ a.out
|
|||||||
gprof.out
|
gprof.out
|
||||||
gmon.out
|
gmon.out
|
||||||
.vsconfig
|
.vsconfig
|
||||||
|
Integration.uproject
|
||||||
Integration.code-workspace
|
Integration.code-workspace
|
||||||
|
|
||||||
*~
|
*~
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -1,26 +0,0 @@
|
|||||||
{
|
|
||||||
"FileVersion": 3,
|
|
||||||
"EngineAssociation": "5.3",
|
|
||||||
"Category": "",
|
|
||||||
"Description": "",
|
|
||||||
"Modules": [
|
|
||||||
{
|
|
||||||
"Name": "Integration",
|
|
||||||
"Type": "Runtime",
|
|
||||||
"LoadingPhase": "Default",
|
|
||||||
"AdditionalDependencies": [
|
|
||||||
"Engine",
|
|
||||||
"CoreUObject"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"Plugins": [
|
|
||||||
{
|
|
||||||
"Name": "ModelingToolsEditorMode",
|
|
||||||
"Enabled": true,
|
|
||||||
"TargetAllowList": [
|
|
||||||
"Editor"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
149
make-vscode.py
Executable file
149
make-vscode.py
Executable file
@@ -0,0 +1,149 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
#
|
||||||
|
# This script generates these config files:
|
||||||
|
#
|
||||||
|
# Integration.uproject
|
||||||
|
# Integration.code-workspace
|
||||||
|
#
|
||||||
|
# Unreal needs "Integration.uproject". This config file tells
|
||||||
|
# UnrealBuildTool what version of the unreal engine to link this game
|
||||||
|
# with. It also specifies a couple of other game-specific configuration
|
||||||
|
# settings. It can't easily be checked into git because it contains
|
||||||
|
# a GUID which is specific to your local machine.
|
||||||
|
#
|
||||||
|
# VSCode needs "Integration.code-workspace," it tells vscode how to
|
||||||
|
# compile this game and how to run it under the debugger. It can't
|
||||||
|
# be checked into git because it contains many hardwired
|
||||||
|
# paths.
|
||||||
|
#
|
||||||
|
# We generate Integration.uproject from scratch. Later, the unreal
|
||||||
|
# editor will inject the engine GUID into the file.
|
||||||
|
#
|
||||||
|
# The UnrealBuildTool which is included with the UnrealEngine can
|
||||||
|
# generate a rough draft of Integration.code-workspace. However, the
|
||||||
|
# file it generates is not well-configured for our luprex-related
|
||||||
|
# needs.
|
||||||
|
#
|
||||||
|
# This python script uses UnrealBuildTool to generate a rough draft,
|
||||||
|
# then it loads Integration.code-workspace into RAM, edits it in RAM,
|
||||||
|
# and writes a new, improved version back out.
|
||||||
|
#
|
||||||
|
|
||||||
|
import sys, os, json
|
||||||
|
|
||||||
|
#
|
||||||
|
# These are some directory paths that we will need.
|
||||||
|
#
|
||||||
|
|
||||||
|
INTEGRATION = os.path.dirname(os.path.abspath(sys.argv[0]))
|
||||||
|
UNREALENGINE = os.environ["HOME"] + "/UnrealEngine"
|
||||||
|
|
||||||
|
#
|
||||||
|
# This is the template from which Integration.uproject is generated.
|
||||||
|
#
|
||||||
|
|
||||||
|
UPROJECT_TEMPLATE="""
|
||||||
|
{
|
||||||
|
"FileVersion": 3,
|
||||||
|
"EngineAssociation": "5.3",
|
||||||
|
"Category": "",
|
||||||
|
"Description": "",
|
||||||
|
"Modules": [
|
||||||
|
{
|
||||||
|
"Name": "Integration",
|
||||||
|
"Type": "Runtime",
|
||||||
|
"LoadingPhase": "Default",
|
||||||
|
"AdditionalDependencies": [
|
||||||
|
"Engine",
|
||||||
|
"CoreUObject"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Plugins": [
|
||||||
|
{
|
||||||
|
"Name": "ModelingToolsEditorMode",
|
||||||
|
"Enabled": true,
|
||||||
|
"TargetAllowList": [
|
||||||
|
"Editor"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
#
|
||||||
|
# Convert the UPROJECT template into json in RAM.
|
||||||
|
#
|
||||||
|
|
||||||
|
UPROJECT = json.loads(UPROJECT_TEMPLATE)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Write Integration.uproject
|
||||||
|
#
|
||||||
|
|
||||||
|
with open("Integration.uproject", "w") as uproj:
|
||||||
|
json.dump(UPROJECT, uproj, indent=4)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Use UnrealBuildTool to generate a rough draft of Integration.code-workspace.
|
||||||
|
#
|
||||||
|
|
||||||
|
BUILDPROJECTFILES = f'dotnet Engine/Binaries/DotNET/UnrealBuildTool/UnrealBuildTool.dll -projectfiles -project="{INTEGRATION}/Integration.uproject" -game -vscode'
|
||||||
|
os.chdir(UNREALENGINE)
|
||||||
|
print(BUILDPROJECTFILES)
|
||||||
|
os.system(BUILDPROJECTFILES)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Load the rough draft into RAM, then delete the rough draft.
|
||||||
|
#
|
||||||
|
|
||||||
|
os.chdir(INTEGRATION)
|
||||||
|
with open("Integration.code-workspace") as original:
|
||||||
|
WORKSPACE=json.load(original)
|
||||||
|
os.remove("Integration.code-workspace")
|
||||||
|
|
||||||
|
#
|
||||||
|
# Configure the correct build task as the default task.
|
||||||
|
#
|
||||||
|
|
||||||
|
for task in WORKSPACE["tasks"]["tasks"]:
|
||||||
|
if task["label"] == "IntegrationEditor Linux DebugGame Build":
|
||||||
|
task["group"] = { "kind": "build", "isDefault": "true" }
|
||||||
|
|
||||||
|
#
|
||||||
|
# Delete all build tasks that aren't relevant.
|
||||||
|
#
|
||||||
|
|
||||||
|
def goodtask(task):
|
||||||
|
return task["label"].startswith("IntegrationEditor Linux DebugGame")
|
||||||
|
|
||||||
|
WORKSPACE["tasks"]["tasks"] = [x for x in WORKSPACE["tasks"]["tasks"] if goodtask(x)]
|
||||||
|
|
||||||
|
#
|
||||||
|
# Convert all launch configurations to lldb.
|
||||||
|
#
|
||||||
|
|
||||||
|
LLDBINIT=f"command script import {UNREALENGINE}/Engine/Extras/LLDBDataFormatters/UEDataFormatters_2ByteChars.py"
|
||||||
|
|
||||||
|
for config in WORKSPACE["launch"]["configurations"]:
|
||||||
|
config["type"] = "lldb"
|
||||||
|
config["initCommands"] = [ LLDBINIT ]
|
||||||
|
config.pop("visualizerFile", None)
|
||||||
|
config.pop("showDisplayString", None)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Delete all but the relevant launch configuration.
|
||||||
|
#
|
||||||
|
|
||||||
|
def goodconf(config):
|
||||||
|
return config["name"] == "Launch IntegrationEditor (DebugGame)"
|
||||||
|
|
||||||
|
WORKSPACE["launch"]["configurations"] = [x for x in WORKSPACE["launch"]["configurations"] if goodconf(x)]
|
||||||
|
|
||||||
|
#
|
||||||
|
# Write it all back out.
|
||||||
|
#
|
||||||
|
|
||||||
|
with open("Integration.code-workspace", "w") as rewritten:
|
||||||
|
json.dump(WORKSPACE, rewritten, indent=4)
|
||||||
|
|
||||||
Reference in New Issue
Block a user