Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at release-19.03 259 lines 8.6 kB view raw
1{stdenv, fetchurl, requireFile, makeWrapper, unzip, autoPatchelfHook, pkgs, pkgs_i686, licenseAccepted ? false}: 2 3{ toolsVersion ? "25.2.5" 4, platformToolsVersion ? "28.0.1" 5, buildToolsVersions ? [ "28.0.3" ] 6, includeEmulator ? false 7, emulatorVersion ? "28.0.14" 8, platformVersions ? [] 9, includeSources ? false 10, includeDocs ? false 11, includeSystemImages ? false 12, systemImageTypes ? [ "default" ] 13, abiVersions ? [ "armeabi-v7a" ] 14, lldbVersions ? [ ] 15, cmakeVersions ? [ ] 16, includeNDK ? false 17, ndkVersion ? "18.1.5063045" 18, useGoogleAPIs ? false 19, useGoogleTVAddOns ? false 20, includeExtras ? [] 21}: 22 23let 24 inherit (pkgs) stdenv fetchurl makeWrapper unzip; 25 26 # Determine the Android os identifier from Nix's system identifier 27 os = if stdenv.system == "x86_64-linux" then "linux" 28 else if stdenv.system == "x86_64-darwin" then "macosx" 29 else throw "No tarballs found for system architecture: ${stdenv.system}"; 30 31 # Generated Nix packages 32 packages = import ./generated/packages.nix { 33 inherit fetchurl; 34 }; 35 36 # Generated system images 37 system-images-packages-android = import ./generated/system-images-android.nix { 38 inherit fetchurl; 39 }; 40 41 system-images-packages-android-tv = import ./generated/system-images-android-tv.nix { 42 inherit fetchurl; 43 }; 44 45 system-images-packages-android-wear = import ./generated/system-images-android-wear.nix { 46 inherit fetchurl; 47 }; 48 49 system-images-packages-android-wear-cn = import ./generated/system-images-android-wear-cn.nix { 50 inherit fetchurl; 51 }; 52 53 system-images-packages-google_apis = import ./generated/system-images-google_apis.nix { 54 inherit fetchurl; 55 }; 56 57 system-images-packages-google_apis_playstore = import ./generated/system-images-google_apis_playstore.nix { 58 inherit fetchurl; 59 }; 60 61 system-images-packages = 62 stdenv.lib.recursiveUpdate 63 system-images-packages-android 64 (stdenv.lib.recursiveUpdate system-images-packages-android-tv 65 (stdenv.lib.recursiveUpdate system-images-packages-android-wear 66 (stdenv.lib.recursiveUpdate system-images-packages-android-wear-cn 67 (stdenv.lib.recursiveUpdate system-images-packages-google_apis system-images-packages-google_apis_playstore)))); 68 69 # Generated addons 70 addons = import ./generated/addons.nix { 71 inherit fetchurl; 72 }; 73in 74rec { 75 deployAndroidPackage = import ./deploy-androidpackage.nix { 76 inherit stdenv unzip; 77 }; 78 79 platform-tools = import ./platform-tools.nix { 80 inherit deployAndroidPackage os autoPatchelfHook pkgs; 81 inherit (stdenv) lib; 82 package = packages.platform-tools."${platformToolsVersion}"; 83 }; 84 85 build-tools = map (version: 86 import ./build-tools.nix { 87 inherit deployAndroidPackage os autoPatchelfHook makeWrapper pkgs pkgs_i686; 88 inherit (stdenv) lib; 89 package = packages.build-tools."${version}"; 90 } 91 ) buildToolsVersions; 92 93 docs = deployAndroidPackage { 94 inherit os; 95 package = packages.docs."1"; 96 }; 97 98 emulator = import ./emulator.nix { 99 inherit deployAndroidPackage os autoPatchelfHook makeWrapper pkgs pkgs_i686; 100 inherit (stdenv) lib; 101 package = packages.emulator."${emulatorVersion}"."${os}"; 102 }; 103 104 platforms = map (version: 105 deployAndroidPackage { 106 inherit os; 107 package = packages.platforms."${version}"; 108 } 109 ) platformVersions; 110 111 sources = map (version: 112 deployAndroidPackage { 113 inherit os; 114 package = packages.sources."${version}"; 115 } 116 ) platformVersions; 117 118 system-images = stdenv.lib.flatten (map (apiVersion: 119 map (type: 120 map (abiVersion: 121 deployAndroidPackage { 122 inherit os; 123 package = system-images-packages.${apiVersion}.${type}.${abiVersion}; 124 } 125 ) abiVersions 126 ) systemImageTypes 127 ) platformVersions); 128 129 lldb = map (version: 130 import ./lldb.nix { 131 inherit deployAndroidPackage os autoPatchelfHook pkgs; 132 inherit (stdenv) lib; 133 package = packages.lldb."${version}"; 134 } 135 ) lldbVersions; 136 137 cmake = map (version: 138 import ./cmake.nix { 139 inherit deployAndroidPackage os autoPatchelfHook pkgs; 140 inherit (stdenv) lib; 141 package = packages.cmake."${version}"; 142 } 143 ) cmakeVersions; 144 145 ndk-bundle = import ./ndk-bundle { 146 inherit deployAndroidPackage os autoPatchelfHook makeWrapper pkgs platform-tools; 147 inherit (stdenv) lib; 148 package = packages.ndk-bundle."${ndkVersion}"; 149 }; 150 151 google-apis = map (version: 152 deployAndroidPackage { 153 inherit os; 154 package = addons.addons."${version}".google_apis; 155 } 156 ) (builtins.filter (platformVersion: platformVersion < "26") platformVersions); # API level 26 and higher include Google APIs by default 157 158 google-tv-addons = map (version: 159 deployAndroidPackage { 160 inherit os; 161 package = addons.addons."${version}".google_tv_addon; 162 } 163 ) platformVersions; 164 165 # Function that automatically links all plugins for which multiple versions can coexist 166 linkPlugins = {name, plugins}: 167 stdenv.lib.optionalString (plugins != []) '' 168 mkdir -p ${name} 169 ${stdenv.lib.concatMapStrings (plugin: '' 170 ln -s ${plugin}/libexec/android-sdk/${name}/* ${name} 171 '') plugins} 172 ''; 173 174 # Function that automatically links a plugin for which only one version exists 175 linkPlugin = {name, plugin, check ? true}: 176 stdenv.lib.optionalString check '' 177 ln -s ${plugin}/libexec/android-sdk/* ${name} 178 ''; 179 180 # Links all plugins related to a requested platform 181 linkPlatformPlugins = {name, plugins, check}: 182 stdenv.lib.optionalString check '' 183 mkdir -p ${name} 184 ${stdenv.lib.concatMapStrings (plugin: '' 185 ln -s ${plugin}/libexec/android-sdk/${name}/* ${name} 186 '') plugins} 187 ''; # */ 188 189 # This derivation deploys the tools package and symlinks all the desired 190 # plugins that we want to use. 191 192 androidsdk = if !licenseAccepted then throw '' 193 You must accept the Android Software Development Kit License Agreement at 194 https://developer.android.com/studio/terms 195 by setting nixpkgs config option 'android_sdk.accept_license = true;' 196 '' else import ./tools.nix { 197 inherit deployAndroidPackage requireFile packages toolsVersion autoPatchelfHook makeWrapper os pkgs pkgs_i686; 198 inherit (stdenv) lib; 199 200 postInstall = '' 201 # Symlink all requested plugins 202 203 ${linkPlugin { name = "platform-tools"; plugin = platform-tools; }} 204 ${linkPlugins { name = "build-tools"; plugins = build-tools; }} 205 ${linkPlugin { name = "emulator"; plugin = emulator; check = includeEmulator; }} 206 ${linkPlugin { name = "docs"; plugin = docs; check = includeDocs; }} 207 ${linkPlugins { name = "platforms"; plugins = platforms; }} 208 ${linkPlatformPlugins { name = "sources"; plugins = sources; check = includeSources; }} 209 ${linkPlugins { name = "lldb"; plugins = lldb; }} 210 ${linkPlugins { name = "cmake"; plugins = cmake; }} 211 ${linkPlugin { name = "ndk-bundle"; plugin = ndk-bundle; check = includeNDK; }} 212 213 ${stdenv.lib.optionalString includeSystemImages '' 214 mkdir -p system-images 215 ${stdenv.lib.concatMapStrings (system-image: '' 216 apiVersion=$(basename $(echo ${system-image}/libexec/android-sdk/system-images/*)) 217 type=$(basename $(echo ${system-image}/libexec/android-sdk/system-images/*/*)) 218 mkdir -p system-images/$apiVersion/$type 219 ln -s ${system-image}/libexec/android-sdk/system-images/$apiVersion/$type/* system-images/$apiVersion/$type 220 '') system-images} 221 ''} 222 223 ${linkPlatformPlugins { name = "add-ons"; plugins = google-apis; check = useGoogleAPIs; }} 224 ${linkPlatformPlugins { name = "add-ons"; plugins = google-apis; check = useGoogleTVAddOns; }} 225 226 # Link extras 227 ${stdenv.lib.concatMapStrings (identifier: 228 let 229 path = addons.extras."${identifier}".path; 230 addon = deployAndroidPackage { 231 inherit os; 232 package = addons.extras."${identifier}"; 233 }; 234 in 235 '' 236 targetDir=$(dirname ${path}) 237 mkdir -p $targetDir 238 ln -s ${addon}/libexec/android-sdk/${path} $targetDir 239 '') includeExtras} 240 241 # Expose common executables in bin/ 242 mkdir -p $out/bin 243 find $PWD/tools -not -path '*/\.*' -type f -executable -mindepth 1 -maxdepth 1 | while read i 244 do 245 ln -s $i $out/bin 246 done 247 248 find $PWD/tools/bin -not -path '*/\.*' -type f -executable -mindepth 1 -maxdepth 1 | while read i 249 do 250 ln -s $i $out/bin 251 done 252 253 for i in ${platform-tools}/bin/* 254 do 255 ln -s $i $out/bin 256 done 257 ''; 258 }; 259}