at 23.11-beta 167 lines 4.7 kB view raw
1{ lib, stdenv, fetchFromGitHub, fetchurl 2, callPackage 3, fetchpatch 4, cmake, pkg-config, dbus, makeWrapper 5, boost 6, elfutils # for libdw 7, git 8, glib 9, glm 10, gtest 11, libbfd 12, libcap 13, libdwarf 14, libGL 15, libglvnd 16, lxc 17, mesa 18, properties-cpp 19, protobuf 20, protobufc 21, python3 22, runtimeShell 23, SDL2 24, SDL2_image 25, systemd 26, writeText 27, writeShellScript 28, nixosTests 29}: 30 31let 32 33 dbus-service = writeText "org.anbox.service" '' 34 [D-BUS Service] 35 Name=org.anbox 36 Exec=@out@/libexec/anbox-session-manager 37 ''; 38 39 anbox-application-manager = writeShellScript "anbox-application-manager" '' 40 exec @out@/bin/anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity 41 ''; 42 43in 44 45stdenv.mkDerivation rec { 46 pname = "anbox"; 47 version = "unstable-2023-02-03"; 48 49 src = fetchFromGitHub { 50 owner = pname; 51 repo = pname; 52 rev = "ddf4c57ebbe3a2e46099087570898ab5c1e1f279"; 53 sha256 = "sha256-QXWhatewiUDQ93cH1UZsYgbjUxpgB1ajtGFYZnKmabc="; 54 fetchSubmodules = true; 55 }; 56 57 nativeBuildInputs = [ 58 cmake 59 pkg-config 60 makeWrapper 61 ]; 62 63 buildInputs = [ 64 boost 65 dbus 66 elfutils # libdw 67 glib 68 glm 69 gtest 70 libbfd 71 libcap 72 libdwarf 73 libGL 74 lxc 75 mesa 76 properties-cpp 77 protobuf protobufc 78 python3 79 SDL2 SDL2_image 80 systemd 81 ]; 82 83 # Flag needed by GCC 12 but unrecognized by GCC 9 (aarch64-linux default now) 84 env.NIX_CFLAGS_COMPILE = toString (lib.optionals (with stdenv; cc.isGNU && lib.versionAtLeast cc.version "12") [ 85 "-Wno-error=mismatched-new-delete" 86 ]); 87 88 prePatch = '' 89 patchShebangs scripts 90 91 cat >cmake/FindGMock.cmake <<'EOF' 92 add_library(gtest INTERFACE) 93 target_include_directories(gtest INTERFACE ${gtest.dev}/include) 94 target_link_libraries(gtest INTERFACE ${gtest}/lib/libgtest.so ''${CMAKE_THREAD_LIBS_INIT}) 95 add_dependencies(gtest GMock) 96 97 add_library(gtest_main INTERFACE) 98 target_include_directories(gtest_main INTERFACE ${gtest.dev}/include) 99 target_link_libraries(gtest_main INTERFACE ${gtest}/lib/libgtest_main.so gtest) 100 101 add_library(gmock INTERFACE) 102 target_include_directories(gmock INTERFACE ${gtest.dev}/include) 103 target_link_libraries(gmock INTERFACE ${gtest}/lib/libgmock.so gtest) 104 105 add_library(gmock_main INTERFACE) 106 target_include_directories(gmock_main INTERFACE ${gtest.dev}/include) 107 target_link_libraries(gmock_main INTERFACE ${gtest}/lib/libgmock_main.so gmock gtest_main) 108 109 set(GTEST_LIBRARIES gtest) 110 set(GTEST_MAIN_LIBRARIES gtest_main) 111 set(GMOCK_LIBRARIES gmock gmock_main) 112 set(GTEST_BOTH_LIBRARIES ''${GTEST_LIBRARIES} ''${GTEST_MAIN_LIBRARIES}) 113 EOF 114 ''; 115 116 patches = [ 117 # Fixes compatibility with lxc 4 118 (fetchpatch { 119 url = "https://git.alpinelinux.org/aports/plain/community/anbox/lxc4.patch?id=64243590a16aee8d4e72061886fc1b15256492c3"; 120 sha256 = "1da5xyzyjza1g2q9nbxb4p3njj2sf3q71vkpvmmdphia5qnb0gk5"; 121 }) 122 # Wait 10× more time when starting 123 # Not *strictly* needed, but helps a lot on slower hardware 124 (fetchpatch { 125 url = "https://git.alpinelinux.org/aports/plain/community/anbox/give-more-time-to-start.patch?id=058b56d4b332ef3379551b343bf31e0f2004321a"; 126 sha256 = "0iiz3c7fgfgl0dvx8sf5hv7a961xqnihwpz6j8r0ib9v8piwxh9a"; 127 }) 128 # Ensures generated desktop files work on store path change 129 ./0001-NixOS-Use-anbox-from-PATH-in-desktop-files.patch 130 # Provide window icons 131 (fetchpatch { 132 url = "https://github.com/samueldr/anbox/commit/2387f4fcffc0e19e52e58fb6f8264fbe87aafe4d.patch"; 133 sha256 = "12lmr0kxw1n68g3abh1ak5awmpczfh75c26f53jc8qpvdvv1ywha"; 134 }) 135 ]; 136 137 postInstall = '' 138 wrapProgram $out/bin/anbox \ 139 --set SDL_VIDEO_X11_WMCLASS "anbox" \ 140 --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [libGL libglvnd]} \ 141 --prefix PATH : ${git}/bin 142 143 mkdir -p $out/share/dbus-1/services 144 substitute ${dbus-service} $out/share/dbus-1/services/org.anbox.service \ 145 --subst-var out 146 147 mkdir $out/libexec 148 makeWrapper $out/bin/anbox $out/libexec/anbox-session-manager \ 149 --add-flags session-manager 150 151 substitute ${anbox-application-manager} $out/bin/anbox-application-manager \ 152 --subst-var out 153 chmod +x $out/bin/anbox-application-manager 154 ''; 155 156 passthru.tests = { inherit (nixosTests) anbox; }; 157 passthru.image = callPackage ./postmarketos-image.nix { }; 158 159 meta = with lib; { 160 homepage = "https://anbox.io"; 161 description = "Android in a box"; 162 license = licenses.gpl2; 163 maintainers = with maintainers; [ edwtjo ]; 164 platforms = [ "armv7l-linux" "aarch64-linux" "x86_64-linux" ]; 165 }; 166 167}