You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-12 13:20:55 +00:00
Made possible by EIREXE, xsellier and the SDL team. This commit includes statically linked SDL3 for Windows, Linux and macOS. The vendored copy of SDL3 was setup to only build the required subsystems for gamepad/joystick support, with some patches to be able to make it as minimal as possible and reduce the impact on binary size and code size. Co-authored-by: Álex Román Núñez <eirexe123@gmail.com> Co-authored-by: Xavier Sellier <xsellier@gmail.com> Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
143 lines
4.4 KiB
Python
143 lines
4.4 KiB
Python
#!/usr/bin/env python
|
|
from misc.utility.scons_hints import *
|
|
|
|
Import("env")
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
import platform_windows_builders
|
|
|
|
from methods import redirect_emitter
|
|
|
|
sources = []
|
|
|
|
common_win = [
|
|
"godot_windows.cpp",
|
|
"os_windows.cpp",
|
|
"display_server_windows.cpp",
|
|
"key_mapping_windows.cpp",
|
|
"tts_windows.cpp",
|
|
"windows_terminal_logger.cpp",
|
|
"windows_utils.cpp",
|
|
"native_menu_windows.cpp",
|
|
"gl_manager_windows_native.cpp",
|
|
"gl_manager_windows_angle.cpp",
|
|
"wgl_detect_version.cpp",
|
|
"rendering_context_driver_vulkan_windows.cpp",
|
|
"drop_target_windows.cpp",
|
|
]
|
|
|
|
if env.msvc:
|
|
common_win += ["crash_handler_windows_seh.cpp"]
|
|
else:
|
|
common_win += ["crash_handler_windows_signal.cpp"]
|
|
|
|
common_win_wrap = [
|
|
"console_wrapper_windows.cpp",
|
|
]
|
|
|
|
|
|
def arrange_program_clean(prog):
|
|
"""
|
|
Given an SCons program, arrange for output files SCons doesn't know about
|
|
to be cleaned when SCons is called with --clean
|
|
"""
|
|
extensions_to_clean = [".ilk", ".exp", ".pdb", ".lib"]
|
|
for program in prog:
|
|
executable_stem = Path(program.name).stem
|
|
extra_files_to_clean = [f"#bin/{executable_stem}{extension}" for extension in extensions_to_clean]
|
|
Clean(prog, extra_files_to_clean)
|
|
|
|
|
|
env["BUILDERS"]["RES"].emitter = redirect_emitter
|
|
res_file = "godot_res.rc"
|
|
res_target = "godot_res" + env["OBJSUFFIX"]
|
|
res_obj = env.RES(res_target, res_file)
|
|
env.Depends(res_obj, "#core/version_generated.gen.h")
|
|
|
|
env.add_source_files(sources, common_win)
|
|
sources += res_obj
|
|
|
|
if env["accesskit"] and not env.msvc:
|
|
env["BUILDERS"]["DEF"].emitter = redirect_emitter
|
|
def_file = "uiautomationcore." + env["arch"] + ".def"
|
|
def_target = "libuiautomationcore." + env["arch"] + ".a"
|
|
def_obj = env.DEF(def_target, def_file)
|
|
sources += def_obj
|
|
|
|
prog = env.add_program("#bin/godot", sources, PROGSUFFIX=env["PROGSUFFIX"])
|
|
arrange_program_clean(prog)
|
|
|
|
if env.msvc:
|
|
env.Depends(prog, "godot.natvis")
|
|
|
|
# Build console wrapper app.
|
|
if env["windows_subsystem"] == "gui":
|
|
env_wrap = env.Clone()
|
|
res_wrap_file = "godot_res_wrap.rc"
|
|
res_wrap_target = "godot_res_wrap" + env["OBJSUFFIX"]
|
|
res_wrap_obj = env_wrap.RES(res_wrap_target, res_wrap_file)
|
|
env_wrap.Depends(res_wrap_obj, "#core/version_generated.gen.h")
|
|
|
|
if env.msvc:
|
|
env_wrap.Append(LINKFLAGS=["/SUBSYSTEM:CONSOLE"])
|
|
env_wrap.Append(LINKFLAGS=["version.lib"])
|
|
else:
|
|
env_wrap.Append(LINKFLAGS=["-Wl,--subsystem,console"])
|
|
env_wrap.Append(LIBS=["version"])
|
|
|
|
prog_wrap = env_wrap.add_program("#bin/godot", common_win_wrap + res_wrap_obj, PROGSUFFIX=env["PROGSUFFIX_WRAP"])
|
|
arrange_program_clean(prog_wrap)
|
|
env_wrap.Depends(prog_wrap, prog)
|
|
sources += common_win_wrap + res_wrap_obj
|
|
|
|
if env["d3d12"]:
|
|
dxc_target_aliases = {
|
|
"x86_32": "x86",
|
|
"x86_64": "x64",
|
|
"arm32": "arm",
|
|
"arm64": "arm64",
|
|
}
|
|
dxc_arch_subdir = dxc_target_aliases[env["arch"]]
|
|
|
|
agility_target_aliases = {
|
|
"x86_32": "win32",
|
|
"x86_64": "x64",
|
|
"arm32": "arm",
|
|
"arm64": "arm64",
|
|
}
|
|
agility_arch_subdir = agility_target_aliases[env["arch"]]
|
|
|
|
# Used in cases where we can have multiple archs side-by-side.
|
|
arch_bin_dir = "#bin/" + env["arch"]
|
|
|
|
# Agility SDK
|
|
if env["agility_sdk_path"] != "" and os.path.exists(env["agility_sdk_path"]):
|
|
agility_dlls = ["D3D12Core.dll", "d3d12SDKLayers.dll"]
|
|
# Whether these are loaded from arch-specific directory or not has to be known at build time.
|
|
target_dir = arch_bin_dir if env["agility_sdk_multiarch"] else "#bin"
|
|
for dll in agility_dlls:
|
|
env.CommandNoCache(
|
|
target_dir + "/" + dll,
|
|
env["agility_sdk_path"] + "/build/native/bin/" + agility_arch_subdir + "/" + dll,
|
|
Copy("$TARGET", "$SOURCE"),
|
|
)
|
|
|
|
# PIX
|
|
if env["use_pix"]:
|
|
pix_dll = "WinPixEventRuntime.dll"
|
|
env.CommandNoCache(
|
|
"#bin/" + pix_dll,
|
|
env["pix_path"] + "/bin/" + dxc_arch_subdir + "/" + pix_dll,
|
|
Copy("$TARGET", "$SOURCE"),
|
|
)
|
|
|
|
if not env.msvc:
|
|
if env["debug_symbols"]:
|
|
env.AddPostAction(prog, env.Run(platform_windows_builders.make_debug_mingw))
|
|
if env["windows_subsystem"] == "gui":
|
|
env.AddPostAction(prog_wrap, env.Run(platform_windows_builders.make_debug_mingw))
|
|
|
|
env.platform_sources += sources
|