You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +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>
210 lines
6.7 KiB
Python
210 lines
6.7 KiB
Python
#!/usr/bin/env python
|
|
from misc.utility.scons_hints import *
|
|
|
|
Import("env")
|
|
|
|
env_sdl = env.Clone()
|
|
|
|
# Thirdparty source files
|
|
|
|
thirdparty_obj = []
|
|
|
|
if env["builtin_sdl"]:
|
|
thirdparty_dir = "#thirdparty/sdl/"
|
|
|
|
# Use our own SDL_build_config_private.h.
|
|
env_sdl.Prepend(CPPDEFINES=["SDL_PLATFORM_PRIVATE"])
|
|
|
|
# Common sources.
|
|
|
|
env_sdl.Prepend(
|
|
CPPPATH=[
|
|
thirdparty_dir,
|
|
thirdparty_dir + "include",
|
|
thirdparty_dir + "include/build_config",
|
|
".", # SDL_build_config_private.h
|
|
]
|
|
)
|
|
|
|
thirdparty_sources = [
|
|
"SDL.c",
|
|
"SDL_assert.c",
|
|
"SDL_error.c",
|
|
"SDL_guid.c",
|
|
"SDL_hashtable.c",
|
|
"SDL_hints.c",
|
|
"SDL_list.c",
|
|
"SDL_log.c",
|
|
"SDL_properties.c",
|
|
"SDL_utils.c",
|
|
"atomic/SDL_atomic.c",
|
|
"atomic/SDL_spinlock.c",
|
|
"events/SDL_events.c",
|
|
"events/SDL_eventwatch.c",
|
|
"haptic/SDL_haptic.c",
|
|
"io/SDL_iostream.c",
|
|
"joystick/SDL_gamepad.c",
|
|
"joystick/SDL_joystick.c",
|
|
"joystick/SDL_steam_virtual_gamepad.c",
|
|
"joystick/controller_type.c",
|
|
"libm/e_atan2.c",
|
|
"libm/e_exp.c",
|
|
"libm/e_fmod.c",
|
|
"libm/e_log.c",
|
|
"libm/e_log10.c",
|
|
"libm/e_pow.c",
|
|
"libm/e_rem_pio2.c",
|
|
"libm/e_sqrt.c",
|
|
"libm/k_cos.c",
|
|
"libm/k_rem_pio2.c",
|
|
"libm/k_sin.c",
|
|
"libm/k_tan.c",
|
|
"libm/s_atan.c",
|
|
"libm/s_copysign.c",
|
|
"libm/s_cos.c",
|
|
"libm/s_fabs.c",
|
|
"libm/s_floor.c",
|
|
"libm/s_isinf.c",
|
|
"libm/s_isinff.c",
|
|
"libm/s_isnan.c",
|
|
"libm/s_isnanf.c",
|
|
"libm/s_modf.c",
|
|
"libm/s_scalbn.c",
|
|
"libm/s_sin.c",
|
|
"libm/s_tan.c",
|
|
"sensor/SDL_sensor.c",
|
|
"sensor/dummy/SDL_dummysensor.c",
|
|
"stdlib/SDL_crc16.c",
|
|
"stdlib/SDL_crc32.c",
|
|
"stdlib/SDL_getenv.c",
|
|
"stdlib/SDL_iconv.c",
|
|
"stdlib/SDL_malloc.c",
|
|
"stdlib/SDL_memcpy.c",
|
|
"stdlib/SDL_memmove.c",
|
|
"stdlib/SDL_memset.c",
|
|
"stdlib/SDL_mslibc.c",
|
|
"stdlib/SDL_murmur3.c",
|
|
"stdlib/SDL_qsort.c",
|
|
"stdlib/SDL_random.c",
|
|
"stdlib/SDL_stdlib.c",
|
|
"stdlib/SDL_string.c",
|
|
"stdlib/SDL_strtokr.c",
|
|
"thread/SDL_thread.c",
|
|
"thread/generic/SDL_syscond.c",
|
|
"thread/generic/SDL_sysrwlock.c",
|
|
"thread/generic/SDL_systhread.c",
|
|
"timer/SDL_timer.c",
|
|
]
|
|
|
|
# HIDAPI
|
|
thirdparty_sources += [
|
|
"hidapi/SDL_hidapi.c",
|
|
"joystick/hidapi/SDL_hidapi_combined.c",
|
|
"joystick/hidapi/SDL_hidapi_gamecube.c",
|
|
"joystick/hidapi/SDL_hidapijoystick.c",
|
|
"joystick/hidapi/SDL_hidapi_luna.c",
|
|
"joystick/hidapi/SDL_hidapi_ps3.c",
|
|
"joystick/hidapi/SDL_hidapi_ps4.c",
|
|
"joystick/hidapi/SDL_hidapi_ps5.c",
|
|
"joystick/hidapi/SDL_hidapi_rumble.c",
|
|
"joystick/hidapi/SDL_hidapi_shield.c",
|
|
"joystick/hidapi/SDL_hidapi_stadia.c",
|
|
"joystick/hidapi/SDL_hidapi_steam.c",
|
|
"joystick/hidapi/SDL_hidapi_steamdeck.c",
|
|
"joystick/hidapi/SDL_hidapi_steam_hori.c",
|
|
"joystick/hidapi/SDL_hidapi_switch.c",
|
|
"joystick/hidapi/SDL_hidapi_wii.c",
|
|
"joystick/hidapi/SDL_hidapi_xbox360.c",
|
|
"joystick/hidapi/SDL_hidapi_xbox360w.c",
|
|
"joystick/hidapi/SDL_hidapi_xboxone.c",
|
|
]
|
|
|
|
# Platform specific sources.
|
|
|
|
if env["platform"] == "linuxbsd":
|
|
# TODO: Check support for BSD systems.
|
|
env_sdl.Append(CPPDEFINES=["SDL_PLATFORM_LINUX"])
|
|
thirdparty_sources += [
|
|
"core/linux/SDL_dbus.c",
|
|
"core/linux/SDL_evdev.c",
|
|
"core/linux/SDL_evdev_capabilities.c",
|
|
"core/linux/SDL_evdev_kbd.c",
|
|
"core/linux/SDL_fcitx.c",
|
|
"core/linux/SDL_ibus.c",
|
|
"core/linux/SDL_ime.c",
|
|
"core/linux/SDL_system_theme.c",
|
|
"core/linux/SDL_threadprio.c",
|
|
"core/linux/SDL_udev.c",
|
|
"core/unix/SDL_appid.c",
|
|
"core/unix/SDL_poll.c",
|
|
"haptic/linux/SDL_syshaptic.c",
|
|
"joystick/linux/SDL_sysjoystick.c",
|
|
"loadso/dlopen/SDL_sysloadso.c",
|
|
"thread/pthread/SDL_syscond.c",
|
|
"thread/pthread/SDL_sysmutex.c",
|
|
"thread/pthread/SDL_sysrwlock.c",
|
|
"thread/pthread/SDL_syssem.c",
|
|
"thread/pthread/SDL_systhread.c",
|
|
"thread/pthread/SDL_systls.c",
|
|
"timer/unix/SDL_systimer.c",
|
|
]
|
|
|
|
elif env["platform"] == "macos":
|
|
env_sdl.Append(CPPDEFINES=["SDL_PLATFORM_MACOS"])
|
|
thirdparty_sources += [
|
|
"core/unix/SDL_appid.c",
|
|
"core/unix/SDL_poll.c",
|
|
"haptic/darwin/SDL_syshaptic.c",
|
|
"joystick/darwin/SDL_iokitjoystick.c",
|
|
"joystick/apple/SDL_mfijoystick.m",
|
|
"thread/pthread/SDL_syscond.c",
|
|
"thread/pthread/SDL_sysmutex.c",
|
|
"thread/pthread/SDL_sysrwlock.c",
|
|
"thread/pthread/SDL_syssem.c",
|
|
"thread/pthread/SDL_systhread.c",
|
|
"thread/pthread/SDL_systls.c",
|
|
"timer/unix/SDL_systimer.c",
|
|
]
|
|
|
|
elif env["platform"] == "windows":
|
|
env_sdl.Append(CPPDEFINES=["SDL_PLATFORM_WINDOWS"])
|
|
thirdparty_sources += [
|
|
"core/windows/SDL_gameinput.c",
|
|
"core/windows/SDL_hid.c",
|
|
"core/windows/SDL_immdevice.c",
|
|
"core/windows/SDL_windows.c",
|
|
"core/windows/SDL_xinput.c",
|
|
"core/windows/pch.c",
|
|
"haptic/windows/SDL_dinputhaptic.c",
|
|
"haptic/windows/SDL_windowshaptic.c",
|
|
"joystick/windows/SDL_dinputjoystick.c",
|
|
"joystick/windows/SDL_rawinputjoystick.c",
|
|
"joystick/windows/SDL_windows_gaming_input.c",
|
|
"joystick/windows/SDL_windowsjoystick.c",
|
|
"joystick/windows/SDL_xinputjoystick.c",
|
|
"thread/windows/SDL_syscond_cv.c",
|
|
"thread/windows/SDL_sysmutex.c",
|
|
"thread/windows/SDL_sysrwlock_srw.c",
|
|
"thread/windows/SDL_syssem.c",
|
|
"thread/windows/SDL_systhread.c",
|
|
"thread/windows/SDL_systls.c",
|
|
"timer/windows/SDL_systimer.c",
|
|
]
|
|
|
|
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
|
|
|
|
env_thirdparty = env_sdl.Clone()
|
|
env_thirdparty.disable_warnings()
|
|
env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources)
|
|
env.drivers_sources += thirdparty_obj
|
|
|
|
# Godot source files
|
|
|
|
driver_obj = []
|
|
|
|
env_sdl.add_source_files(driver_obj, "*.cpp")
|
|
env.drivers_sources += driver_obj
|
|
|
|
# Needed to force rebuilding the driver files when the thirdparty library is updated.
|
|
env.Depends(driver_obj, thirdparty_obj)
|