Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at fix-function-merge 173 lines 4.9 kB view raw
1{ lib, stdenv, fetchFromGitHub 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 hash = "sha256-QXWhatewiUDQ93cH1UZsYgbjUxpgB1ajtGFYZnKmabc="; 54 fetchSubmodules = true; 55 }; 56 57 nativeBuildInputs = [ 58 cmake 59 pkg-config 60 makeWrapper 61 protobufc 62 ]; 63 64 buildInputs = [ 65 boost 66 dbus 67 elfutils # libdw 68 glib 69 glm 70 gtest 71 libbfd 72 libcap 73 libdwarf 74 libGL 75 lxc 76 mesa 77 properties-cpp 78 protobuf 79 python3 80 SDL2 SDL2_image 81 systemd 82 ]; 83 84 env.CXXFLAGS = toString [ "-include cstdint" ]; 85 86 env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isGNU (toString [ 87 "-Wno-error=redundant-move" 88 # Flag needed by GCC 12 but unrecognized by GCC 9 (aarch64-linux default now) 89 (lib.optionalString (lib.versionAtLeast stdenv.cc.version "12") "-Wno-error=mismatched-new-delete") 90 ]); 91 92 prePatch = '' 93 patchShebangs scripts 94 95 cat >cmake/FindGMock.cmake <<'EOF' 96 add_library(gtest INTERFACE) 97 target_include_directories(gtest INTERFACE ${gtest.dev}/include) 98 target_link_libraries(gtest INTERFACE ${gtest}/lib/libgtest.so ''${CMAKE_THREAD_LIBS_INIT}) 99 add_dependencies(gtest GMock) 100 101 add_library(gtest_main INTERFACE) 102 target_include_directories(gtest_main INTERFACE ${gtest.dev}/include) 103 target_link_libraries(gtest_main INTERFACE ${gtest}/lib/libgtest_main.so gtest) 104 105 add_library(gmock INTERFACE) 106 target_include_directories(gmock INTERFACE ${gtest.dev}/include) 107 target_link_libraries(gmock INTERFACE ${gtest}/lib/libgmock.so gtest) 108 109 add_library(gmock_main INTERFACE) 110 target_include_directories(gmock_main INTERFACE ${gtest.dev}/include) 111 target_link_libraries(gmock_main INTERFACE ${gtest}/lib/libgmock_main.so gmock gtest_main) 112 113 set(GTEST_LIBRARIES gtest) 114 set(GTEST_MAIN_LIBRARIES gtest_main) 115 set(GMOCK_LIBRARIES gmock gmock_main) 116 set(GTEST_BOTH_LIBRARIES ''${GTEST_LIBRARIES} ''${GTEST_MAIN_LIBRARIES}) 117 EOF 118 ''; 119 120 patches = [ 121 # Fixes compatibility with lxc 4 122 (fetchpatch { 123 url = "https://git.alpinelinux.org/aports/plain/community/anbox/lxc4.patch?id=64243590a16aee8d4e72061886fc1b15256492c3"; 124 sha256 = "1da5xyzyjza1g2q9nbxb4p3njj2sf3q71vkpvmmdphia5qnb0gk5"; 125 }) 126 # Wait 10× more time when starting 127 # Not *strictly* needed, but helps a lot on slower hardware 128 (fetchpatch { 129 url = "https://git.alpinelinux.org/aports/plain/community/anbox/give-more-time-to-start.patch?id=058b56d4b332ef3379551b343bf31e0f2004321a"; 130 sha256 = "0iiz3c7fgfgl0dvx8sf5hv7a961xqnihwpz6j8r0ib9v8piwxh9a"; 131 }) 132 # Ensures generated desktop files work on store path change 133 ./0001-NixOS-Use-anbox-from-PATH-in-desktop-files.patch 134 # Allows android-emugl to build with gtest 1.13+ 135 ./0002-NixOS-Build-android-emugl-with-cpp-14.patch 136 # Provide window icons 137 (fetchpatch { 138 url = "https://github.com/samueldr/anbox/commit/2387f4fcffc0e19e52e58fb6f8264fbe87aafe4d.patch"; 139 sha256 = "12lmr0kxw1n68g3abh1ak5awmpczfh75c26f53jc8qpvdvv1ywha"; 140 }) 141 ]; 142 143 postInstall = '' 144 wrapProgram $out/bin/anbox \ 145 --set SDL_VIDEO_X11_WMCLASS "anbox" \ 146 --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [libGL libglvnd]} \ 147 --prefix PATH : ${git}/bin 148 149 mkdir -p $out/share/dbus-1/services 150 substitute ${dbus-service} $out/share/dbus-1/services/org.anbox.service \ 151 --subst-var out 152 153 mkdir $out/libexec 154 makeWrapper $out/bin/anbox $out/libexec/anbox-session-manager \ 155 --add-flags session-manager 156 157 substitute ${anbox-application-manager} $out/bin/anbox-application-manager \ 158 --subst-var out 159 chmod +x $out/bin/anbox-application-manager 160 ''; 161 162 passthru.tests = { inherit (nixosTests) anbox; }; 163 passthru.image = callPackage ./postmarketos-image.nix { }; 164 165 meta = with lib; { 166 homepage = "https://anbox.io"; 167 description = "Android in a box"; 168 license = licenses.gpl2Only; 169 maintainers = with maintainers; [ edwtjo ]; 170 platforms = [ "armv7l-linux" "aarch64-linux" "x86_64-linux" ]; 171 }; 172 173}