diff options
| -rw-r--r-- | gnu/local.mk | 1 | ||||
| -rw-r--r-- | gnu/packages/game-development.scm | 42 | ||||
| -rw-r--r-- | gnu/packages/patches/godot-libjpeg-turbo-unbundle.patch | 217 |
3 files changed, 244 insertions, 16 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index 4bdfb4e860..3c74745915 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1511,6 +1511,7 @@ dist_patch_DATA = \ %D%/packages/patches/go-github-com-warpfork-go-wish-fix-tests.patch \ %D%/packages/patches/go-github-com-wraparound-wrap-free-fonts.patch \ %D%/packages/patches/go-skip-gc-test.patch \ + %D%/packages/patches/godot-libjpeg-turbo-unbundle.patch \ %D%/packages/patches/gourmet-sqlalchemy-compat.patch \ %D%/packages/patches/gpaste-fix-paths.patch \ %D%/packages/patches/gpm-glibc-2.26.patch \ diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm index 7e846b9adb..d670d7f2c4 100644 --- a/gnu/packages/game-development.scm +++ b/gnu/packages/game-development.scm @@ -2382,7 +2382,7 @@ scripted in a Python-like language.") (define-public godot (package (name "godot") - (version "4.4.1") + (version "4.5") (source (origin (method git-fetch) (uri (git-reference @@ -2391,7 +2391,10 @@ scripted in a Python-like language.") (file-name (git-file-name name version)) (sha256 (base32 - "0fdq69jisrvihmdir2pg6wf4mfqgqg3c0szc58mgci2lqlm4l684")) + "0s9ymgy9cwnk4v35qpn9fm993pn64h1i5k9khpd7mqs6023hl8i4")) + ;; TODO: Remove this patch on next update as it was merged post + ;; 4.5 release. + (patches (search-patches "godot-libjpeg-turbo-unbundle.patch")) (modules '((guix build utils) (ice-9 ftw) (srfi srfi-1))) @@ -2403,6 +2406,7 @@ scripted in a Python-like language.") (with-directory-excursion "thirdparty" (let* ((preserved-files '("README.md" + "accesskit" "amd-fsr" "amd-fsr2" "assimp" @@ -2424,6 +2428,9 @@ scripted in a Python-like language.") ;; which is no longer in the glslang output ;; after the most recent update. "glslang" + ;; This is part of the simdjson package though + ;; modified by Godot. + "grisu2" "jolt_physics" "jpeg-compressor" "libktx" @@ -2442,6 +2449,7 @@ scripted in a Python-like language.") "pvrtccompressor" "recastnavigation" "rvo2" + "smaa" "spirv-reflect" "squish" "stb_rect_pack" @@ -2449,7 +2457,7 @@ scripted in a Python-like language.") "tinyexr" "ufbx" "vhacd" - "volk" + ;; Godot uses a specific (patched) version. "vulkan" "xatlas"))) (for-each delete-file-recursively @@ -2460,9 +2468,6 @@ scripted in a Python-like language.") (arguments (list #:scons-flags #~`("platform=linuxbsd" "target=editor" "production=yes" - ;; XXX: There may be advantages to enabling volk, - ;; requiring unbundling and patching to use our input. - "use_volk=no" ;; Avoid using many of the bundled libs. ;; Note: These options can be found in the SConstruct file. "builtin_brotli=no" @@ -2475,6 +2480,7 @@ scripted in a Python-like language.") "builtin_graphite=no" "builtin_harfbuzz=no" "builtin_icu4c=no" + "builtin_libjpeg_turbo=no" "builtin_libogg=no" "builtin_libpng=no" "builtin_libtheora=no" @@ -2483,6 +2489,7 @@ scripted in a Python-like language.") "builtin_mbedtls=no" "builtin_pcre2=no" "builtin_pcre2_with_jit=no" + "builtin_sdl=no" "builtin_wslay=no" "builtin_zlib=no" "builtin_zstd=no") @@ -2504,7 +2511,6 @@ scripted in a Python-like language.") "drivers/pulseaudio/pulse-so_wrap.c" "platform/linuxbsd/dbus-so_wrap.c" "platform/linuxbsd/fontconfig-so_wrap.c" - "platform/linuxbsd/libudev-so_wrap.c" "platform/linuxbsd/speechd-so_wrap.c" "platform/linuxbsd/wayland/dynwrappers/libdecor-so_wrap.c" "platform/linuxbsd/wayland/dynwrappers/wayland-client-core-so_wrap.c" @@ -2518,14 +2524,11 @@ scripted in a Python-like language.") "platform/linuxbsd/x11/dynwrappers/xlib-so_wrap.c" "platform/linuxbsd/x11/dynwrappers/xrandr-so_wrap.c" "platform/linuxbsd/x11/dynwrappers/xrender-so_wrap.c" - "platform/linuxbsd/xkbcommon-so_wrap.c" - "thirdparty/volk/volk.c" - "thirdparty/volk/volk.c")) + "platform/linuxbsd/xkbcommon-so_wrap.c")) (libs '("libasound.so.2" "libpulse.so.0" "libdbus-1.so.3" "libfontconfig.so.1" - "libudev.so.1" "libspeechd.so.2" "libdecor-0.so.0" "libwayland-client.so.0" @@ -2539,9 +2542,7 @@ scripted in a Python-like language.") "libX11.so.6" "libXrandr.so.2" "libXrender.so.1" - "libxkbcommon.so.0" - "libvulkan.so.1" - "libvulkan.so"))) + "libxkbcommon.so.0"))) (for-each (lambda (file lib) (substitute* file (((string-append "dlopen\\(\"" lib "\"")) @@ -2581,7 +2582,14 @@ scripted in a Python-like language.") #$(this-package-input "wayland-protocols") "/share/wayland-protocols")) (("#thirdparty/wayland") (string-append - #$(this-package-input "wayland") "/share/wayland"))))) + #$(this-package-input "wayland") "/share/wayland"))))) + (add-after 'unbundle-wayland 'unbundle-volk + (lambda _ + (let ((volk-dir "thirdparty/volk")) + (mkdir-p volk-dir) + (copy-recursively (string-append #$(this-package-input "vulkan-volk") + "/include") + volk-dir)))) (replace 'install (lambda* (#:key inputs #:allow-other-keys) (let ((zenity (search-input-file inputs "bin/zenity"))) @@ -2631,6 +2639,7 @@ scripted in a Python-like language.") harfbuzz icu4c libdecor + libjpeg-turbo-3 libtheora libvorbis libvpx @@ -2647,8 +2656,9 @@ scripted in a Python-like language.") opusfile pcre2 pulseaudio + sdl3 speech-dispatcher - vulkan-loader + vulkan-volk wayland wayland-protocols wslay diff --git a/gnu/packages/patches/godot-libjpeg-turbo-unbundle.patch b/gnu/packages/patches/godot-libjpeg-turbo-unbundle.patch new file mode 100644 index 0000000000..f324de3d0b --- /dev/null +++ b/gnu/packages/patches/godot-libjpeg-turbo-unbundle.patch @@ -0,0 +1,217 @@ +From 6d8aa8582f5c312cd5aab396f90904df1ddc0567 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= <rverschelde@gmail.com> +Date: Mon, 15 Sep 2025 23:43:13 +0200 +Subject: [PATCH] Linux: Allow unbundling libjpeg-turbo to use system package + +--- + modules/jpg/SCsub | 182 ++++++++++++++++++------------------ + platform/linuxbsd/detect.py | 3 + + 2 files changed, 93 insertions(+), 92 deletions(-) + +diff --git a/modules/jpg/SCsub b/modules/jpg/SCsub +index e5b1bc19c0b9..a45b5eff33f1 100644 +--- a/modules/jpg/SCsub ++++ b/modules/jpg/SCsub +@@ -8,98 +8,96 @@ env_jpg = env_modules.Clone() + + thirdparty_obj = [] + +-thirdparty_dir = "#thirdparty/libjpeg-turbo" +- +-thirdparty_sources_common = [ +- "jaricom.c", +- "jcapimin.c", +- "jcarith.c", +- "jchuff.c", +- "jcicc.c", +- "jcinit.c", +- "jcmarker.c", +- "jcmaster.c", +- "jcomapi.c", +- "jcparam.c", +- "jcphuff.c", +- "jctrans.c", +- "jdapimin.c", +- "jdarith.c", +- "jdatadst.c", +- "jdatadst-tj.c", +- "jdatasrc.c", +- "jdatasrc-tj.c", +- "jdhuff.c", +- "jdicc.c", +- "jdinput.c", +- "jdmarker.c", +- "jdmaster.c", +- "jdphuff.c", +- "jdtrans.c", +- "jerror.c", +- "jfdctflt.c", +- "jmemmgr.c", +- "jmemnobs.c", +- "jpeg_nbits.c", +- "transupp.c", +- "turbojpeg.c", +-] +- +-thirdparty_sources_bit_dependent = [ +- "jcapistd.c", +- "jccoefct.c", +- "jccolor.c", +- "jcdctmgr.c", +- "jcmainct.c", +- "jcprepct.c", +- "jcsample.c", +- "jdcoefct.c", +- "jdcolor.c", +- "jdapistd.c", +- "jddctmgr.c", +- "jdmainct.c", +- "jdmerge.c", +- "jdpostct.c", +- "jdsample.c", +- "jfdctfst.c", +- "jfdctint.c", +- "jidctflt.c", +- "jidctfst.c", +- "jidctint.c", +- "jidctred.c", +- "jutils.c", +- "jquant1.c", +- "jquant2.c", +-] +- +-thirdparty_sources_by_bits = { +- 8: list(thirdparty_sources_bit_dependent), +- 12: list(thirdparty_sources_bit_dependent), +-} +- +- +-def source_paths(files): +- return [thirdparty_dir + "/src/" + f for f in files] +- +- +-env_jpg.Prepend(CPPEXTPATH=[thirdparty_dir + "/src"]) +- +- +-def add_bit_depth(bit_depth: int): +- env_bit_depth = env_jpg.Clone() +- env_bit_depth.disable_warnings() +- env_bit_depth["OBJSUFFIX"] = f"_{bit_depth}{env_bit_depth['OBJSUFFIX']}" +- env_bit_depth.Append(CPPDEFINES=[f"BITS_IN_JSAMPLE={bit_depth}"]) +- env_bit_depth.add_source_files(thirdparty_obj, source_paths(thirdparty_sources_by_bits[bit_depth])) +- +- +-add_bit_depth(8) +-add_bit_depth(12) +- +-env_thirdparty = env_jpg.Clone() +-env_thirdparty.disable_warnings() +-env_thirdparty.add_source_files(thirdparty_obj, source_paths(thirdparty_sources_common)) +-env.modules_sources += thirdparty_obj ++if env["builtin_libjpeg_turbo"]: ++ thirdparty_dir = "#thirdparty/libjpeg-turbo" ++ ++ thirdparty_sources_common = [ ++ "jaricom.c", ++ "jcapimin.c", ++ "jcarith.c", ++ "jchuff.c", ++ "jcicc.c", ++ "jcinit.c", ++ "jcmarker.c", ++ "jcmaster.c", ++ "jcomapi.c", ++ "jcparam.c", ++ "jcphuff.c", ++ "jctrans.c", ++ "jdapimin.c", ++ "jdarith.c", ++ "jdatadst.c", ++ "jdatadst-tj.c", ++ "jdatasrc.c", ++ "jdatasrc-tj.c", ++ "jdhuff.c", ++ "jdicc.c", ++ "jdinput.c", ++ "jdmarker.c", ++ "jdmaster.c", ++ "jdphuff.c", ++ "jdtrans.c", ++ "jerror.c", ++ "jfdctflt.c", ++ "jmemmgr.c", ++ "jmemnobs.c", ++ "jpeg_nbits.c", ++ "transupp.c", ++ "turbojpeg.c", ++ ] ++ ++ thirdparty_sources_bit_dependent = [ ++ "jcapistd.c", ++ "jccoefct.c", ++ "jccolor.c", ++ "jcdctmgr.c", ++ "jcmainct.c", ++ "jcprepct.c", ++ "jcsample.c", ++ "jdcoefct.c", ++ "jdcolor.c", ++ "jdapistd.c", ++ "jddctmgr.c", ++ "jdmainct.c", ++ "jdmerge.c", ++ "jdpostct.c", ++ "jdsample.c", ++ "jfdctfst.c", ++ "jfdctint.c", ++ "jidctflt.c", ++ "jidctfst.c", ++ "jidctint.c", ++ "jidctred.c", ++ "jutils.c", ++ "jquant1.c", ++ "jquant2.c", ++ ] ++ ++ thirdparty_sources_by_bits = { ++ 8: list(thirdparty_sources_bit_dependent), ++ 12: list(thirdparty_sources_bit_dependent), ++ } ++ ++ def source_paths(files): ++ return [thirdparty_dir + "/src/" + f for f in files] ++ ++ env_jpg.Prepend(CPPEXTPATH=[thirdparty_dir + "/src"]) ++ ++ def add_bit_depth(bit_depth: int): ++ env_bit_depth = env_jpg.Clone() ++ env_bit_depth.disable_warnings() ++ env_bit_depth["OBJSUFFIX"] = f"_{bit_depth}{env_bit_depth['OBJSUFFIX']}" ++ env_bit_depth.Append(CPPDEFINES=[f"BITS_IN_JSAMPLE={bit_depth}"]) ++ env_bit_depth.add_source_files(thirdparty_obj, source_paths(thirdparty_sources_by_bits[bit_depth])) ++ ++ add_bit_depth(8) ++ add_bit_depth(12) ++ ++ env_thirdparty = env_jpg.Clone() ++ env_thirdparty.disable_warnings() ++ env_thirdparty.add_source_files(thirdparty_obj, source_paths(thirdparty_sources_common)) ++ env.modules_sources += thirdparty_obj ++ + + # Godot source files + +diff --git a/platform/linuxbsd/detect.py b/platform/linuxbsd/detect.py +index df4dbddedd36..fbb3cdf1f13c 100644 +--- a/platform/linuxbsd/detect.py ++++ b/platform/linuxbsd/detect.py +@@ -278,6 +278,9 @@ def configure(env: "SConsEnvironment"): + if not env["builtin_libwebp"]: + env.ParseConfig("pkg-config libwebp --cflags --libs") + ++ if not env["builtin_libjpeg_turbo"]: ++ env.ParseConfig("pkg-config libturbojpeg --cflags --libs") ++ + if not env["builtin_mbedtls"]: + # mbedTLS only provides a pkgconfig file since 3.6.0, but we still support 2.28.x, + # so fallback to manually specifying LIBS if it fails. |
