at 22.05-pre 159 lines 4.0 kB view raw
1{ lib, stdenv, fetchFromGitHub, fetchurl 2, cmake, pkg-config, dbus, makeWrapper 3, boost 4, elfutils # for libdw 5, git 6, glib 7, glm 8, gtest 9, libbfd 10, libcap 11, libdwarf 12, libGL 13, libglvnd 14, lxc 15, mesa 16, properties-cpp 17, protobuf 18, protobufc 19, python3 20, runtimeShell 21, SDL2 22, SDL2_image 23, systemd 24, writeText 25, writeScript 26}: 27 28let 29 30 dbus-service = writeText "org.anbox.service" '' 31 [D-BUS Service] 32 Name=org.anbox 33 Exec=@out@/libexec/anbox-session-manager 34 ''; 35 36 anbox-application-manager = writeScript "anbox-application-manager" '' 37 #!${runtimeShell} 38 39 ${systemd}/bin/busctl --user call \ 40 org.freedesktop.DBus \ 41 /org/freedesktop/DBus \ 42 org.freedesktop.DBus \ 43 StartServiceByName "su" org.anbox 0 44 45 @out@/bin/anbox launch --package=org.anbox.appmgr --component=org.anbox.appmgr.AppViewActivity 46 ''; 47 48in 49 50stdenv.mkDerivation rec { 51 pname = "anbox"; 52 version = "unstable-2020-11-29"; 53 54 src = fetchFromGitHub { 55 owner = pname; 56 repo = pname; 57 rev = "6c10125a7f13908d2cbe56d2d9ab09872755f265"; 58 sha256 = "00bqssh4zcs0jj6w07b91719xkrpdw75vpcplwrvlhwsvl55f901"; 59 fetchSubmodules = true; 60 }; 61 62 nativeBuildInputs = [ 63 cmake 64 pkg-config 65 makeWrapper 66 ]; 67 68 buildInputs = [ 69 boost 70 dbus 71 elfutils # libdw 72 glib 73 glm 74 gtest 75 libbfd 76 libcap 77 libdwarf 78 libGL 79 lxc 80 mesa 81 properties-cpp 82 protobuf protobufc 83 python3 84 SDL2 SDL2_image 85 systemd 86 ]; 87 88 patchPhase = '' 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 postInstall = '' 117 wrapProgram $out/bin/anbox \ 118 --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [libGL libglvnd]} \ 119 --prefix PATH : ${git}/bin 120 121 mkdir -p $out/share/dbus-1/services 122 substitute ${dbus-service} $out/share/dbus-1/services/org.anbox.service \ 123 --subst-var out 124 125 mkdir $out/libexec 126 makeWrapper $out/bin/anbox $out/libexec/anbox-session-manager \ 127 --add-flags session-manager 128 129 substitute ${anbox-application-manager} $out/bin/anbox-application-manager \ 130 --subst-var out 131 ''; 132 133 passthru.image = let 134 imgroot = "https://build.anbox.io/android-images"; 135 in 136 { 137 armv7l-linux = fetchurl { 138 url = imgroot + "/2017/06/12/android_1_armhf.img"; 139 sha256 = "1za4q6vnj8wgphcqpvyq1r8jg6khz7v6b7h6ws1qkd5ljangf1w5"; 140 }; 141 aarch64-linux = fetchurl { 142 url = imgroot + "/2017/08/04/android_1_arm64.img"; 143 sha256 = "02yvgpx7n0w0ya64y5c7bdxilaiqj9z3s682l5s54vzfnm5a2bg5"; 144 }; 145 x86_64-linux = fetchurl { 146 url = imgroot + "/2018/07/19/android_amd64.img"; 147 sha256 = "1jlcda4q20w30cm9ikm6bjq01p547nigik1dz7m4v0aps4rws13b"; 148 }; 149 }.${stdenv.system} or null; 150 151 meta = with lib; { 152 homepage = "https://anbox.io"; 153 description = "Android in a box"; 154 license = licenses.gpl2; 155 maintainers = with maintainers; [ edwtjo ]; 156 platforms = [ "armv7l-linux" "aarch64-linux" "x86_64-linux" ]; 157 }; 158 159}