All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Fischer <mf@go-sys.de>
To: <buildroot@buildroot.org>
Cc: Michael Fischer <mf@go-sys.de>
Subject: [Buildroot] [PATCH 1/4] package/sdl3: new package
Date: Tue, 14 Jul 2026 13:52:02 +0200	[thread overview]
Message-ID: <20260714115205.29838-1-mf@go-sys.de> (raw)

Simple DirectMedia Layer 3 is a library that allows programs
portable low level access to a video framebuffer, audio output,
mouse, and keyboard. It is not compatible with SDL2.

https://www.libsdl.org/
https://wiki.libsdl.org/SDL3/README-migration

Signed-off-by: Michael Fischer <mf@go-sys.de>
---
 DEVELOPERS             |  1 +
 package/Config.in      |  1 +
 package/sdl3/Config.in | 79 +++++++++++++++++++++++++++++++++++
 package/sdl3/sdl3.hash |  4 ++
 package/sdl3/sdl3.mk   | 95 ++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 180 insertions(+)
 create mode 100644 package/sdl3/Config.in
 create mode 100644 package/sdl3/sdl3.hash
 create mode 100644 package/sdl3/sdl3.mk

diff --git a/DEVELOPERS b/DEVELOPERS
index fdfab8b489..9f44548ea0 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -2406,6 +2406,7 @@ F:	configs/arcturus_ucls1012a_defconfig
 N:	Michael Fischer <mf@go-sys.de>
 F:	package/gnuplot/
 F:	package/sdl2/
+F:	package/sdl3/
 
 N:	Michael Nosthoff <buildroot@heine.tech>
 F:	package/boost/
diff --git a/package/Config.in b/package/Config.in
index b6f23308af..91903361c5 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -363,6 +363,7 @@ comment "Graphic libraries"
 	source "package/sdl2_mixer/Config.in"
 	source "package/sdl2_net/Config.in"
 	source "package/sdl2_ttf/Config.in"
+	source "package/sdl3/Config.in"
 	source "package/spirv-headers/Config.in"
 	source "package/tk/Config.in"
 	source "package/virglrenderer/Config.in"
diff --git a/package/sdl3/Config.in b/package/sdl3/Config.in
new file mode 100644
index 0000000000..109bb5678e
--- /dev/null
+++ b/package/sdl3/Config.in
@@ -0,0 +1,79 @@
+config BR2_PACKAGE_SDL3
+	bool "sdl3"
+	depends on !BR2_STATIC_LIBS
+	help
+	  Simple DirectMedia Layer 3 - SDL3 is a library that allows
+	  programs portable low level access to a video framebuffer,
+	  audio output, mouse, and keyboard. It is not compatible with
+	  SDL2.
+
+	  http://www.libsdl.org/
+
+if BR2_PACKAGE_SDL3
+
+config BR2_PACKAGE_SDL3_X11
+	bool "X11 video driver"
+	depends on BR2_PACKAGE_XORG7
+	depends on BR2_USE_MMU # fork()
+	select BR2_PACKAGE_XLIB_LIBX11
+	select BR2_PACKAGE_XLIB_LIBXEXT
+
+comment "X11 video driver needs X.org"
+	depends on !BR2_PACKAGE_XORG7
+	depends on BR2_USE_MMU
+
+config BR2_PACKAGE_SDL3_KMSDRM
+	bool "KMS/DRM video driver"
+	depends on BR2_TOOLCHAIN_HAS_THREADS  # libdrm
+	depends on BR2_PACKAGE_HAS_LIBGBM
+	depends on BR2_PACKAGE_HAS_LIBEGL
+	depends on BR2_PACKAGE_SDL3_OPENGL || BR2_PACKAGE_SDL3_OPENGLES
+	select BR2_PACKAGE_LIBDRM
+
+comment "KMS/DRM video driver needs a toolchain w/ threads"
+	depends on !BR2_TOOLCHAIN_HAS_THREADS
+
+comment "KMS/DRM video driver needs a GBM provider, and OpenGL or OpenGLES+EGL"
+	depends on !BR2_PACKAGE_HAS_LIBGBM || \
+		!BR2_PACKAGE_HAS_LIBEGL || \
+		!(BR2_PACKAGE_SDL3_OPENGL || BR2_PACKAGE_SDL3_OPENGLES)
+
+config BR2_PACKAGE_SDL3_WAYLAND
+	bool "Wayland video driver"
+	depends on BR2_TOOLCHAIN_HAS_THREADS # wayland
+	depends on BR2_PACKAGE_WAYLAND
+	depends on BR2_PACKAGE_HAS_LIBEGL
+	depends on BR2_PACKAGE_SDL3_OPENGLES
+	select BR2_PACKAGE_LIBXKBCOMMON
+	select BR2_PACKAGE_WAYLAND_PROTOCOLS
+
+comment "Wayland video driver needs a toolchain w/ threads"
+	depends on !BR2_TOOLCHAIN_HAS_THREADS
+
+comment "Wayland video driver needs wayland with an OpenGLES+EGL backend"
+	depends on !BR2_PACKAGE_WAYLAND || \
+		!BR2_PACKAGE_HAS_LIBEGL || \
+		!BR2_PACKAGE_SDL3_OPENGLES
+
+config BR2_PACKAGE_SDL3_OPENGL
+	bool "OpenGL (GLX)"
+	depends on BR2_PACKAGE_HAS_LIBGL
+	depends on BR2_PACKAGE_XORG7
+	depends on BR2_USE_MMU # X11 video driver
+	select BR2_PACKAGE_SDL3_X11
+
+comment "OpenGL support needs X11 and an OpenGL provider"
+	depends on BR2_USE_MMU
+	depends on !BR2_PACKAGE_HAS_LIBGL || !BR2_PACKAGE_XORG7
+
+config BR2_PACKAGE_SDL3_OPENGLES
+	bool "OpenGL ES"
+	depends on BR2_PACKAGE_HAS_LIBGLES
+
+comment "OpenGL ES support needs an OpenGL ES provider"
+	depends on !BR2_PACKAGE_HAS_LIBGLES
+
+endif
+
+comment "sdl3 needs a toolchain w/ dynamic library"
+	depends on BR2_STATIC_LIBS
diff --git a/package/sdl3/sdl3.hash b/package/sdl3/sdl3.hash
new file mode 100644
index 0000000000..27197ae594
--- /dev/null
+++ b/package/sdl3/sdl3.hash
@@ -0,0 +1,4 @@
+# Locally calculated after checking http://www.libsdl.org/release/SDL3-3.4.12.tar.gz.sig
+sha256  f07b958a9ac5020fb7a44cadb957f658b2149c3c8abb4f63145fac9303249db7  SDL3-3.4.12.tar.gz
+# Locally calculated
+sha256  1c040b8271b37e5076359f8fd54240e371114112924d2df81ef87c7d6a1dfdfd  LICENSE.txt
diff --git a/package/sdl3/sdl3.mk b/package/sdl3/sdl3.mk
new file mode 100644
index 0000000000..85defe10be
--- /dev/null
+++ b/package/sdl3/sdl3.mk
@@ -0,0 +1,95 @@
+################################################################################
+#
+# sdl3
+#
+################################################################################
+
+SDL3_VERSION = 3.4.12
+SDL3_SOURCE = SDL3-$(SDL3_VERSION).tar.gz
+SDL3_SITE = http://www.libsdl.org/release
+SDL3_LICENSE = Zlib
+SDL3_LICENSE_FILES = LICENSE.txt
+SDL3_CPE_ID_VENDOR = libsdl
+SDL3_CPE_ID_PRODUCT = simple_directmedia_layer
+SDL3_INSTALL_STAGING = YES
+
+SDL3_CONF_OPTS = \
+	-DSDL_RPATH=OFF \
+	-DSDL_DBUS=OFF \
+	-DSDL_PULSEAUDIO=OFF \
+	-DSDL_VIVANTE=OFF \
+	-DSDL_VULKAN=OFF \
+	-DSDL_DUMMYVIDEO=OFF \
+	-DSDL_OFFSCREEN=OFF \
+	-DSDL_HIDAPI=OFF \
+	-DSDL_IBUS=OFF \
+	-DSDL_JOYSTICK_MFI=OFF \
+	-DSDL_JOYSTICK_VIRTUAL=OFF \
+	-DSDL_RENDER_D3D=OFF \
+	-DSDL_UNIX_CONSOLE_BUILD=ON \
+	-DSDL_INSTALL_DOCS=OFF \
+	-DSDL_STATIC=ON
+
+# SDL3 fails to build in Thumb mode on some ARM architectures
+ifeq ($(BR2_ARM_INSTRUCTIONS_THUMB),y)
+SDL3_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -marm"
+endif
+
+ifeq ($(BR2_PACKAGE_HAS_UDEV),y)
+SDL3_DEPENDENCIES += udev
+SDL3_CONF_OPTS += -DSDL_LIBUDEV=ON
+else
+SDL3_CONF_OPTS += -DSDL_LIBUDEV=OFF
+endif
+
+ifeq ($(BR2_X86_CPU_HAS_SSE),y)
+SDL3_CONF_OPTS += -DSDL_SSE=ON
+else
+SDL3_CONF_OPTS += -DSDL_SSE=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_SDL3_X11),y)
+SDL3_DEPENDENCIES += xlib_libX11 xlib_libXext
+SDL3_CONF_OPTS += -DSDL_X11=ON
+else
+SDL3_CONF_OPTS += -DSDL_X11=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_SDL3_WAYLAND),y)
+SDL3_DEPENDENCIES += libegl libxkbcommon wayland wayland-protocols
+SDL3_CONF_OPTS += -DSDL_WAYLAND=ON
+else
+SDL3_CONF_OPTS += -DSDL_WAYLAND=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_SDL3_OPENGL),y)
+SDL3_DEPENDENCIES += libgl
+SDL3_CONF_OPTS += -DSDL_OPENGL=ON
+else
+SDL3_CONF_OPTS += -DSDL_OPENGL=OFF
+endif
+
+ifeq ($(BR2_PACKAGE_SDL3_OPENGLES),y)
+SDL3_DEPENDENCIES += libgles libegl
+SDL3_CONF_OPTS += -DSDL_OPENGLES=ON
+else
+SDL3_CONF_OPTS += -DSDL_OPENGLES=OFF
+endif
+
+# The explicit dependencies make sure libdrm/gbm/egl are built before
+# sdl3, otherwise the kmsdrm video driver is silently disabled at
+# configure time.
+ifeq ($(BR2_PACKAGE_SDL3_KMSDRM),y)
+SDL3_DEPENDENCIES += libdrm libgbm libegl
+SDL3_CONF_OPTS += -DSDL_KMSDRM=ON
+else
+SDL3_CONF_OPTS += -DSDL_KMSDRM=OFF
+endif
+
+# SDL3 installs a copy of its license on the target, drop it
+define SDL3_REMOVE_LICENSES
+	rm -rf $(TARGET_DIR)/usr/share/licenses/SDL3
+endef
+SDL3_POST_INSTALL_TARGET_HOOKS += SDL3_REMOVE_LICENSES
+
+$(eval $(cmake-package))
-- 
2.43.0

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

             reply	other threads:[~2026-07-14 12:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-14 11:52 Michael Fischer [this message]
2026-07-14 11:52 ` [Buildroot] [PATCH 2/4] package/sdl3_gfx: new package Michael Fischer
2026-07-14 11:52 ` [Buildroot] [PATCH 3/4] package/sdl3_image: " Michael Fischer
2026-07-14 11:52 ` [Buildroot] [PATCH 4/4] package/sdl3_ttf: " Michael Fischer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260714115205.29838-1-mf@go-sys.de \
    --to=mf@go-sys.de \
    --cc=buildroot@buildroot.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.