161 lines
5.1 KiB
Python
161 lines
5.1 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
This is SConstruct file for building GDExtension variant using SCons build system.
|
|
For module variant, see SCsub file.
|
|
|
|
Use --project=DIR to customize output path for built targets.
|
|
- Built targets are placed into "DIR/addons/limboai/bin".
|
|
- For example: scons --project="../my_project"
|
|
- built targets will be placed into "../my_project/addons/limboai/bin".
|
|
- If not specified, built targets are put into the demo/ project.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
from limboai_version import generate_module_version_header, godot_cpp_ref
|
|
|
|
sys.path.append("gdextension")
|
|
from update_icon_entries import update_icon_entries
|
|
from fix_icon_imports import fix_icon_imports
|
|
|
|
# Check if godot-cpp/ exists
|
|
if not os.path.exists("godot-cpp"):
|
|
print("Directory godot-cpp/ not found. Cloning repository...")
|
|
result = subprocess.run(
|
|
["git", "clone", "-b", godot_cpp_ref, "https://github.com/godotengine/godot-cpp.git"],
|
|
check=True,
|
|
# capture_output=True
|
|
)
|
|
if result.returncode != 0:
|
|
print("Error: Cloning godot-cpp repository failed.")
|
|
Exit(1)
|
|
print("Finished cloning godot-cpp repository.")
|
|
|
|
AddOption(
|
|
"--project",
|
|
dest="project",
|
|
type="string",
|
|
nargs=1,
|
|
action="store",
|
|
metavar="DIR",
|
|
default="demo",
|
|
help="Specify project directory",
|
|
)
|
|
|
|
help_text = """
|
|
Options:
|
|
--project=DIR Specify project directory (default: "demo");
|
|
built targets will be placed in DIR/addons/limboai/bin
|
|
"""
|
|
Help(help_text)
|
|
|
|
project_dir = GetOption("project")
|
|
if not os.path.isdir(project_dir):
|
|
print("Project directory not found: " + project_dir)
|
|
Exit(2)
|
|
|
|
# Parse LimboAI-specific variables.
|
|
vars = Variables()
|
|
vars.AddVariables(
|
|
BoolVariable("deploy_manifest", help="Deploy limboai.gdextension into PROJECT/addons/limboai/bin", default=True),
|
|
BoolVariable("deploy_icons", help="Deploy icons into PROJECT/addons/limboai/icons", default=True),
|
|
)
|
|
env = Environment(tools=["default"], PLATFORM="", variables=vars)
|
|
Help(vars.GenerateHelpText(env))
|
|
|
|
# Read LimboAI-specific variables.
|
|
deploy_manifest = env["deploy_manifest"]
|
|
deploy_icons = env["deploy_icons"]
|
|
|
|
# Remove processed variables from ARGUMENTS to avoid godot-cpp warnings.
|
|
for o in vars.options:
|
|
if o.key in ARGUMENTS:
|
|
del ARGUMENTS[o.key]
|
|
|
|
# For reference:
|
|
# - CCFLAGS are compilation flags shared between C and C++
|
|
# - CFLAGS are for C-specific compilation flags
|
|
# - CXXFLAGS are for C++-specific compilation flags
|
|
# - CPPFLAGS are for pre-processor flags
|
|
# - CPPDEFINES are for pre-processor defines
|
|
# - LINKFLAGS are for linking flags
|
|
|
|
env = SConscript("godot-cpp/SConstruct")
|
|
|
|
# Generate version header.
|
|
print("Generating LimboAI version header...")
|
|
generate_module_version_header()
|
|
|
|
# Update icon entries in limboai.gdextension file.
|
|
# Note: This will remove everything after [icons] section, and rebuild it with generated icon entries.
|
|
print("Updating LimboAI icon entries...")
|
|
update_icon_entries(silent=True)
|
|
|
|
# Fix icon imports in the PROJECT/addons/limboai/icons/.
|
|
# Enables scaling and color conversion in the editor for imported SVG icons.
|
|
try:
|
|
fix_icon_imports(project_dir)
|
|
except FileNotFoundError as e:
|
|
print(e)
|
|
except Exception as e:
|
|
print("Unknown error: " + str(e))
|
|
|
|
# Tweak this if you want to use different folders, or more folders, to store your source code in.
|
|
env.Append(CPPDEFINES=["LIMBOAI_GDEXTENSION"])
|
|
sources = Glob("*.cpp")
|
|
sources += Glob("blackboard/*.cpp")
|
|
sources += Glob("blackboard/bb_param/*.cpp")
|
|
sources += Glob("bt/*.cpp")
|
|
sources += Glob("bt/tasks/*.cpp")
|
|
sources += Glob("bt/tasks/blackboard/*.cpp")
|
|
sources += Glob("bt/tasks/composites/*.cpp")
|
|
sources += Glob("bt/tasks/decorators/*.cpp")
|
|
sources += Glob("bt/tasks/scene/*.cpp")
|
|
sources += Glob("bt/tasks/utility/*.cpp")
|
|
sources += Glob("gdextension/*.cpp")
|
|
sources += Glob("editor/debugger/*.cpp")
|
|
sources += Glob("editor/*.cpp")
|
|
sources += Glob("hsm/*.cpp")
|
|
sources += Glob("util/*.cpp")
|
|
|
|
# Generate documentation header.
|
|
if env["target"] in ["editor", "template_debug"]:
|
|
doc_data = env.GodotCPPDocData("gen/doc_data.gen.cpp", source=Glob("doc_classes/*.xml"))
|
|
sources.append(doc_data)
|
|
|
|
# Build library.
|
|
if env["platform"] == "macos":
|
|
library = env.SharedLibrary(
|
|
project_dir
|
|
+ "/addons/limboai/bin/liblimboai.{}.{}.framework/liblimboai.{}.{}".format(
|
|
env["platform"], env["target"], env["platform"], env["target"]
|
|
),
|
|
source=sources,
|
|
)
|
|
else:
|
|
library = env.SharedLibrary(
|
|
project_dir + "/addons/limboai/bin/liblimboai{}{}".format(env["suffix"], env["SHLIBSUFFIX"]),
|
|
source=sources,
|
|
)
|
|
|
|
Default(library)
|
|
|
|
# Deploy icons into PROJECT/addons/limboai/icons.
|
|
if deploy_icons:
|
|
cmd_deploy_icons = env.Command(
|
|
project_dir + "/addons/limboai/icons/",
|
|
"icons/",
|
|
Copy("$TARGET", "$SOURCE"),
|
|
)
|
|
Default(cmd_deploy_icons)
|
|
|
|
# Deploy limboai.gdextension into PROJECT/addons/limboai/bin.
|
|
if deploy_manifest:
|
|
cmd_deploy_manifest = env.Command(
|
|
project_dir + "/addons/limboai/bin/limboai.gdextension",
|
|
"gdextension/limboai.gdextension",
|
|
Copy("$TARGET", "$SOURCE"),
|
|
)
|
|
Default(cmd_deploy_manifest)
|