1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
{ lib, stdenv, fetchFromGitiles, fetchpatch, meson, ninja, pkg-config, python3
, aemu, darwin, libdrm, libglvnd, vulkan-headers, vulkan-loader, xorg
}:
stdenv.mkDerivation {
pname = "gfxstream";
version = "0.1.2";
src = fetchFromGitiles {
url = "https://android.googlesource.com/platform/hardware/google/gfxstream";
rev = "a29282666c0e2fdbb2c98cfe68a7c0677163ef91";
hash = "sha256-IYXkaHZPEYIE9KW731GN6x6yRS+FYtP1zyHcaSofhIM=";
};
patches = [
# Make libdrm an optional dependency, which is required to build on Darwin.
(fetchpatch {
url = "https://android.googlesource.com/platform/hardware/google/gfxstream/+/a8df2a3eb099b419a7b3638e68ea30b4cffb751b%5E%21/?format=TEXT";
decode = "base64 -d";
hash = "sha256-shjeNuxtQokscCGBKEUbOPKOWRELBAnHFNj3Y5w87Nw=";
})
];
# Ensure that meson can find an Objective-C compiler on Darwin.
postPatch = lib.optionalString stdenv.isDarwin ''
substituteInPlace meson.build \
--replace-fail "project('gfxstream_backend', 'cpp', 'c'" "project('gfxstream_backend', 'cpp', 'c', 'objc'"
'';
nativeBuildInputs = [ meson ninja pkg-config python3 ];
buildInputs = [ aemu libglvnd vulkan-headers vulkan-loader xorg.libX11 ]
++ lib.optionals (lib.meta.availableOn stdenv.hostPlatform libdrm) [ libdrm ]
++ lib.optionals stdenv.isDarwin [
darwin.apple_sdk.frameworks.Cocoa
darwin.apple_sdk.frameworks.CoreGraphics
darwin.apple_sdk.frameworks.IOKit
darwin.apple_sdk.frameworks.IOSurface
darwin.apple_sdk.frameworks.OpenGL
darwin.apple_sdk.frameworks.QuartzCore
];
env = lib.optionalAttrs stdenv.isDarwin {
NIX_LDFLAGS = toString [
"-framework Cocoa"
"-framework IOKit"
"-framework IOSurface"
"-framework OpenGL"
"-framework QuartzCore"
"-needed-lvulkan"
];
};
# dlopens libvulkan.
preConfigure = lib.optionalString (!stdenv.isDarwin) ''
mesonFlagsArray=(-Dcpp_link_args="-Wl,--push-state -Wl,--no-as-needed -lvulkan -Wl,--pop-state")
'';
meta = with lib; {
homepage = "https://android.googlesource.com/platform/hardware/google/gfxstream";
description = "Graphics Streaming Kit";
license = licenses.free; # https://android.googlesource.com/platform/hardware/google/gfxstream/+/refs/heads/main/LICENSE
maintainers = with maintainers; [ qyliss ];
platforms = aemu.meta.platforms;
};
}
|