godot: avoid builtin libraries where possible (#444063)

Changed files
+130 -42
pkgs
+25
pkgs/development/tools/godot/Linux-fix-missing-library-with-builtin_glslang-false.patch
···
···
+
From 6d43e80c0a455fea5dcb656967e73f755ecdd645 Mon Sep 17 00:00:00 2001
+
From: David McFarland <corngood@gmail.com>
+
Date: Sun, 9 Mar 2025 19:42:33 -0300
+
Subject: [PATCH] Linux: fix missing library with builtin_glslang=false
+
+
---
+
platform/linuxbsd/detect.py | 2 +-
+
1 file changed, 1 insertion(+), 1 deletion(-)
+
+
diff --git a/platform/linuxbsd/detect.py b/platform/linuxbsd/detect.py
+
index b5e80f4a4d..8389096e26 100644
+
--- a/platform/linuxbsd/detect.py
+
+++ b/platform/linuxbsd/detect.py
+
@@ -472,7 +472,7 @@ def configure(env: "SConsEnvironment"):
+
env.ParseConfig("pkg-config vulkan --cflags --libs")
+
if not env["builtin_glslang"]:
+
# No pkgconfig file so far, hardcode expected lib name.
+
- env.Append(LIBS=["glslang", "SPIRV"])
+
+ env.Append(LIBS=["glslang", "glslang-default-resource-limits", "SPIRV"])
+
+
if env["opengl3"]:
+
env.Append(CPPDEFINES=["GLES3_ENABLED"])
+
--
+
2.47.1
+
+105 -42
pkgs/development/tools/godot/common.nix
···
callPackage,
dbus,
dotnetCorePackages,
exportTemplatesHash,
fetchFromGitHub,
fetchpatch,
fontconfig,
glib,
hash,
installShellFiles,
lib,
libdecor,
libGL,
libpulseaudio,
libX11,
libXcursor,
libXext,
···
libXrandr,
libXrender,
makeWrapper,
perl,
pkg-config,
runCommand,
scons,
speechd-minimal,
stdenv,
stdenvNoCC,
···
# https://github.com/godotengine/godot/pull/73504
withWayland ? true,
withX11 ? true,
}:
assert lib.asserts.assertOneOf "withPrecision" withPrecision [
"single"
···
ccflags = "-fno-strict-aliasing";
linkflags = "-Wl,--build-id";
use_sowrap = false;
}
// lib.optionalAttrs (lib.versionAtLeast version "4.5") {
redirect_build_objects = false; # Avoid copying build objects to output
}
···
strictDeps = true;
-
patches =
-
lib.optionals (lib.versionOlder version "4.4") [
-
(fetchpatch {
-
name = "wayland-header-fix.patch";
-
url = "https://github.com/godotengine/godot/commit/6ce71f0fb0a091cffb6adb4af8ab3f716ad8930b.patch";
-
hash = "sha256-hgAtAtCghF5InyGLdE9M+9PjPS1BWXWGKgIAyeuqkoU=";
-
})
-
# Fix a crash in the mono test project build. It no longer seems to
-
# happen in 4.4, but an existing fix couldn't be identified.
-
./CSharpLanguage-fix-crash-in-reload_assemblies-after-.patch
-
]
-
++ lib.optional (lib.versionAtLeast version "4.5") ./fix-freetype-link-error.patch;
postPatch = ''
# this stops scons from hiding e.g. NIX_CFLAGS_COMPILE
perl -pi -e '{ $r += s:(env = Environment\(.*):\1\nenv["ENV"] = os.environ: } END { exit ($r != 1) }' SConstruct
substituteInPlace thirdparty/glad/egl.c \
--replace-fail \
···
pkg-config
];
-
buildInputs =
-
lib.optionals (editor && withMono) dotnet-sdk.packages
-
++ lib.optional withAlsa alsa-lib
-
++ lib.optional (withX11 || withWayland) libxkbcommon
-
++ lib.optionals withX11 [
-
libX11
-
libXcursor
-
libXext
-
libXfixes
-
libXi
-
libXinerama
-
libXrandr
-
libXrender
-
]
-
++ lib.optionals withWayland [
-
# libdecor
-
wayland
-
]
-
++ lib.optionals withDbus [
-
dbus
-
]
-
++ lib.optionals withFontconfig [
-
fontconfig
-
]
-
++ lib.optional withPulseaudio libpulseaudio
-
++ lib.optionals withSpeechd [
-
speechd-minimal
-
glib
-
]
-
++ lib.optional withUdev udev;
nativeBuildInputs = [
installShellFiles
···
callPackage,
dbus,
dotnetCorePackages,
+
embree,
+
enet,
exportTemplatesHash,
fetchFromGitHub,
fetchpatch,
fontconfig,
+
freetype,
glib,
+
glslang,
+
graphite2,
+
harfbuzz,
hash,
+
icu,
installShellFiles,
lib,
libdecor,
libGL,
+
libjpeg_turbo,
libpulseaudio,
+
libtheora,
+
libwebp,
libX11,
libXcursor,
libXext,
···
libXrandr,
libXrender,
makeWrapper,
+
mbedtls,
+
miniupnpc,
+
openxr-loader,
+
pcre2,
perl,
pkg-config,
+
recastnavigation,
runCommand,
scons,
+
sdl3,
speechd-minimal,
stdenv,
stdenvNoCC,
···
# https://github.com/godotengine/godot/pull/73504
withWayland ? true,
withX11 ? true,
+
wslay,
+
zstd,
}:
assert lib.asserts.assertOneOf "withPrecision" withPrecision [
"single"
···
ccflags = "-fno-strict-aliasing";
linkflags = "-Wl,--build-id";
+
# libraries that aren't available in nixpkgs
+
builtin_msdfgen = true;
+
builtin_rvo2_2d = true;
+
builtin_rvo2_3d = true;
+
builtin_xatlas = true;
+
+
# using system clipper2 is currently not implemented
+
builtin_clipper2 = true;
+
use_sowrap = false;
}
+
// lib.optionalAttrs (lib.versionOlder version "4.4") {
+
# libraries that aren't available in nixpkgs
+
builtin_squish = true;
+
+
# broken with system packages
+
builtin_miniupnpc = true;
+
}
// lib.optionalAttrs (lib.versionAtLeast version "4.5") {
redirect_build_objects = false; # Avoid copying build objects to output
}
···
strictDeps = true;
+
patches = [
+
./Linux-fix-missing-library-with-builtin_glslang-false.patch
+
]
+
++ lib.optionals (lib.versionOlder version "4.4") [
+
(fetchpatch {
+
name = "wayland-header-fix.patch";
+
url = "https://github.com/godotengine/godot/commit/6ce71f0fb0a091cffb6adb4af8ab3f716ad8930b.patch";
+
hash = "sha256-hgAtAtCghF5InyGLdE9M+9PjPS1BWXWGKgIAyeuqkoU=";
+
})
+
# Fix a crash in the mono test project build. It no longer seems to
+
# happen in 4.4, but an existing fix couldn't be identified.
+
./CSharpLanguage-fix-crash-in-reload_assemblies-after-.patch
+
]
+
++ lib.optional (lib.versionAtLeast version "4.5") ./fix-freetype-link-error.patch;
postPatch = ''
# this stops scons from hiding e.g. NIX_CFLAGS_COMPILE
perl -pi -e '{ $r += s:(env = Environment\(.*):\1\nenv["ENV"] = os.environ: } END { exit ($r != 1) }' SConstruct
+
+
# disable all builtin libraries by default
+
perl -pi -e '{ $r |= s:(opts.Add\(BoolVariable\("builtin_.*, )True(\)\)):\1False\2: } END { exit ($r != 1) }' SConstruct
+
+
substituteInPlace platform/linuxbsd/detect.py \
+
--replace-fail /usr/include/recastnavigation ${lib.escapeShellArg (lib.getDev recastnavigation)}/include/recastnavigation
substituteInPlace thirdparty/glad/egl.c \
--replace-fail \
···
pkg-config
];
+
buildInputs = [
+
embree
+
enet
+
freetype
+
glslang
+
graphite2
+
(harfbuzz.override { withIcu = true; })
+
icu
+
libtheora
+
libwebp
+
mbedtls
+
miniupnpc
+
openxr-loader
+
pcre2
+
recastnavigation
+
wslay
+
zstd
+
]
+
++ lib.optionals (lib.versionAtLeast version "4.5") [
+
libjpeg_turbo
+
sdl3
+
]
+
++ lib.optionals (editor && withMono) dotnet-sdk.packages
+
++ lib.optional withAlsa alsa-lib
+
++ lib.optional (withX11 || withWayland) libxkbcommon
+
++ lib.optionals withX11 [
+
libX11
+
libXcursor
+
libXext
+
libXfixes
+
libXi
+
libXinerama
+
libXrandr
+
libXrender
+
]
+
++ lib.optionals withWayland [
+
libdecor
+
wayland
+
]
+
++ lib.optionals withDbus [
+
dbus
+
]
+
++ lib.optionals withFontconfig [
+
fontconfig
+
]
+
++ lib.optional withPulseaudio libpulseaudio
+
++ lib.optionals withSpeechd [
+
speechd-minimal
+
glib
+
]
+
++ lib.optional withUdev udev;
nativeBuildInputs = [
installShellFiles