diff --git a/build.zig b/build.zig index 58ce683a6..9e15ab773 100644 --- a/build.zig +++ b/build.zig @@ -644,6 +644,22 @@ fn addDeps( return static_libs; } + // For dynamic linking, we prefer dynamic linking and to search by + // mode first. Mode first will search all paths for a dynamic library + // before falling back to static. + const dynamic_link_opts: std.build.Step.Compile.LinkSystemLibraryOptions = .{ + .preferred_link_mode = .Dynamic, + .search_strategy = .mode_first, + }; + + // On Linux, we need to add a couple common library paths that aren't + // on the standard search list. i.e. GTK is often in /usr/lib/x86_64-linux-gnu + // on x86_64. + if (step.target.isLinux()) { + const triple = try step.target.linuxTriple(b.allocator); + step.addLibraryPath(.{ .path = b.fmt("/usr/lib/{s}", .{triple}) }); + } + // If we're building a lib we have some different deps const lib = step.kind == .lib; @@ -703,14 +719,16 @@ fn addDeps( // Dynamic link if (!static) { step.addIncludePath(.{ .path = freetype.include_path_self }); - step.linkSystemLibrary("bzip2"); - step.linkSystemLibrary("freetype2"); - step.linkSystemLibrary("harfbuzz"); - step.linkSystemLibrary("libpng"); - step.linkSystemLibrary("pixman-1"); - step.linkSystemLibrary("zlib"); + step.linkSystemLibrary2("bzip2", dynamic_link_opts); + step.linkSystemLibrary2("freetype2", dynamic_link_opts); + step.linkSystemLibrary2("harfbuzz", dynamic_link_opts); + step.linkSystemLibrary2("libpng", dynamic_link_opts); + step.linkSystemLibrary2("pixman-1", dynamic_link_opts); + step.linkSystemLibrary2("zlib", dynamic_link_opts); - if (font_backend.hasFontconfig()) step.linkSystemLibrary("fontconfig"); + if (font_backend.hasFontconfig()) { + step.linkSystemLibrary2("fontconfig", dynamic_link_opts); + } } // Other dependencies, we may dynamically link @@ -800,14 +818,7 @@ fn addDeps( // When we're targeting flatpak we ALWAYS link GTK so we // get access to glib for dbus. - if (flatpak) { - step.linkSystemLibrary("gtk4"); - switch (step.target.getCpuArch()) { - .aarch64 => step.addLibraryPath(.{ .path = "/usr/lib/aarch64-linux-gnu" }), - .x86_64 => step.addLibraryPath(.{ .path = "/usr/lib/x86_64-linux-gnu" }), - else => @panic("unsupported flatpak target"), - } - } + if (flatpak) step.linkSystemLibrary2("gtk4", dynamic_link_opts); switch (app_runtime) { .none => {}, @@ -834,7 +845,7 @@ fn addDeps( }; try glfw.link(b, step, glfw_opts); - step.linkSystemLibrary("gtk4"); + step.linkSystemLibrary2("gtk4", dynamic_link_opts); }, } } diff --git a/flake.lock b/flake.lock index 3c2350a0f..cb4b30c43 100644 --- a/flake.lock +++ b/flake.lock @@ -126,11 +126,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1690978078, - "narHash": "sha256-+S9s6sjOGuGCtA9njTdduJ7KjZm2tskxKhwGRKBK/xM=", + "lastModified": 1691410097, + "narHash": "sha256-HoZ/JwddeysSKNYr7h3AqReCMXPcqgqW/eBVOekxhFM=", "owner": "mitchellh", "repo": "zig-overlay", - "rev": "c9f51464f2c2c9c75f3d7fdc58c157d252545dec", + "rev": "9eda53e9001c54c810e24efe256c28d57a75d20d", "type": "github" }, "original": { diff --git a/nix/devshell.nix b/nix/devshell.nix index b44a54f1d..f146eb3aa 100644 --- a/nix/devshell.nix +++ b/nix/devshell.nix @@ -30,7 +30,6 @@ , harfbuzz , libpng , libGL -, libuv , libX11 , libXcursor , libXext @@ -51,7 +50,6 @@ let freetype harfbuzz libpng - libuv zlib libX11 @@ -105,7 +103,6 @@ in mkShell rec { freetype harfbuzz libpng - libuv pixman zlib