mirror of
https://github.com/pkdawson/imgui-godot.git
synced 2026-09-15 19:24:18 +00:00
111 lines
3.2 KiB
Python
111 lines
3.2 KiB
Python
#!/usr/bin/env python
|
|
from glob import glob
|
|
from pathlib import Path
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import SCons
|
|
import sys
|
|
|
|
|
|
class CustomCacheDir(SCons.CacheDir.CacheDir):
|
|
@classmethod
|
|
def copy_to_cache(cls, env, src, dst) -> str:
|
|
fn = str(src)
|
|
if fn.startswith("godot-cpp"):
|
|
if os.path.splitext(fn)[1] not in [".lib", ".dll", ".exp", ".a", ".so"]:
|
|
return super().copy_to_cache(env, src, dst)
|
|
return None
|
|
|
|
|
|
env = SConscript("godot-cpp/SConstruct")
|
|
env.CacheDir("scons_cache", CustomCacheDir)
|
|
env.Append(CPPDEFINES=['IMGUI_USER_CONFIG="\\"imconfig-godot.h\\""', "IGN_EXPORT"])
|
|
env.Append(CPPPATH=["src/", "imgui/", "include/", "gen/"])
|
|
env.Replace(CXXFLAGS=str(env["CXXFLAGS"]).replace("c++17", "c++20"))
|
|
|
|
windows = env["platform"] == "windows"
|
|
linux = env["platform"] == "linux"
|
|
config = "release" if env["target"] == "template_release" else "debug"
|
|
|
|
if config == "release":
|
|
if windows:
|
|
env.Append(CPPDEFINES=["NDEBUG"])
|
|
|
|
if windows:
|
|
if env["arch"] == "arm64":
|
|
triplet = "arm64-windows-static"
|
|
else:
|
|
triplet = "x64-windows-static"
|
|
if not os.path.exists(f"vcpkg_installed/{triplet}"):
|
|
subprocess.call(f'"%VCPKG_ROOT%/vcpkg" install --triplet {triplet}', shell=True)
|
|
elif linux:
|
|
triplet = "x64-linux"
|
|
if not os.path.exists("vcpkg_installed"):
|
|
subprocess.call("$VCPKG_ROOT/vcpkg install", shell=True)
|
|
else:
|
|
triplet = "arm64-osx"
|
|
if not os.path.exists("vcpkg_installed"):
|
|
if subprocess.call("zsh scripts/vcpkg-macos.sh", shell=True) != 0:
|
|
sys.exit(1)
|
|
|
|
if not os.path.exists("gen/imgui_bindings.gen.h"):
|
|
subprocess.call("python scripts/gds_bindings.py", shell=True)
|
|
|
|
shutil.copy("imgui-godot-native.gdextension", "../addons/imgui-godot/")
|
|
shutil.copytree("include", "../addons/imgui-godot/include", dirs_exist_ok=True)
|
|
|
|
sources = Glob("src/*.cpp") + Glob("imgui/*.cpp") + Glob("gen/*.cpp")
|
|
|
|
(extension_path,) = glob("../addons/imgui-godot/*.gdextension")
|
|
addon_path = Path(extension_path).parent
|
|
project_name = Path(extension_path).stem
|
|
|
|
libpath = env.get("LIBPATH", [])
|
|
libs = [env["LIBS"]]
|
|
|
|
env.Append(CPPPATH=["imgui/misc/freetype/"])
|
|
env.Append(CPPPATH=[f"vcpkg_installed/{triplet}/include"])
|
|
env.Append(CPPDEFINES=["IMGUI_ENABLE_FREETYPE"])
|
|
# env.Append(CPPDEFINES=["IMGUI_ENABLE_FREETYPE_LUNASVG"])
|
|
sources += Glob("imgui/misc/freetype/*.cpp")
|
|
libpath += [f"vcpkg_installed/{triplet}/lib"]
|
|
libs += [
|
|
"freetype",
|
|
# "lunasvg",
|
|
"bz2",
|
|
"libpng16" if windows else "png16",
|
|
"zs" if windows else "z",
|
|
"brotlidec",
|
|
"brotlicommon",
|
|
]
|
|
|
|
if env["platform"] == "macos":
|
|
library = env.SharedLibrary(
|
|
"{0}/bin/lib{1}.{2}.{3}.framework/{1}.{2}.{3}".format(
|
|
addon_path,
|
|
project_name,
|
|
env["platform"],
|
|
config,
|
|
),
|
|
source=sources,
|
|
LIBPATH=libpath,
|
|
LIBS=libs,
|
|
)
|
|
else:
|
|
library = env.SharedLibrary(
|
|
"{}/bin/lib{}.{}.{}.{}{}".format(
|
|
addon_path,
|
|
project_name,
|
|
env["platform"],
|
|
config,
|
|
env["arch"],
|
|
env["SHLIBSUFFIX"],
|
|
),
|
|
source=sources,
|
|
LIBPATH=libpath,
|
|
LIBS=libs,
|
|
)
|
|
|
|
Default(library)
|