Merge pull request #160554 from Cloudef/android-prebuilt

Fix android prebuilt toolchains
This commit is contained in:
Rick van Schijndel 2022-07-18 10:01:00 +02:00 committed by GitHub
commit 9532db9eb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 499 additions and 214 deletions

@ -36,6 +36,7 @@ rec {
config = parse.tripleFromSystem final.parsed;
# Determine whether we can execute binaries built for the provided platform.
canExecute = platform:
final.isAndroid == platform.isAndroid &&
parse.isCompatible final.parsed.cpu platform.parsed.cpu
&& final.parsed.kernel == platform.parsed.kernel;
isCompatible = _: throw "2022-05-23: isCompatible has been removed in favor of canExecute, refer to the 22.11 changelog for details";

@ -57,23 +57,23 @@ rec {
armv7a-android-prebuilt = {
config = "armv7a-unknown-linux-androideabi";
rustc.config = "armv7-linux-androideabi";
sdkVer = "29";
ndkVer = "21";
sdkVer = "28";
ndkVer = "24";
useAndroidPrebuilt = true;
} // platforms.armv7a-android;
aarch64-android-prebuilt = {
config = "aarch64-unknown-linux-android";
rustc.config = "aarch64-linux-android";
sdkVer = "29";
ndkVer = "21";
sdkVer = "28";
ndkVer = "24";
useAndroidPrebuilt = true;
};
aarch64-android = {
config = "aarch64-unknown-linux-android";
sdkVer = "30";
ndkVer = "21";
ndkVer = "24";
libc = "bionic";
useAndroidPrebuilt = false;
useLLVM = true;

@ -1,6 +1,5 @@
{ lib, stdenv
, makeWrapper
, runCommand, wrapBintoolsWith, wrapCCWith
{ lib, stdenv, makeWrapper
, runCommand, wrapBintoolsWith, wrapCCWith, autoPatchelfHook
, buildAndroidndk, androidndk, targetAndroidndkPkgs
}:
@ -11,6 +10,9 @@ let
# N.B. The Android NDK uses slightly different LLVM-style platform triples
# than we do. We don't just use theirs because ours are less ambiguous and
# some builds need that clarity.
#
# FIXME:
# There's some dragons here. Build host and target concepts are being mixed up.
ndkInfoFun = { config, ... }: {
x86_64-apple-darwin = {
double = "darwin-x86_64";
@ -21,65 +23,96 @@ let
i686-unknown-linux-android = {
triple = "i686-linux-android";
arch = "x86";
toolchain = "x86";
gccVer = "4.9";
};
x86_64-unknown-linux-android = {
triple = "x86_64-linux-android";
arch = "x86_64";
toolchain = "x86_64";
gccVer = "4.9";
};
armv7a-unknown-linux-androideabi = {
arch = "arm";
triple = "arm-linux-androideabi";
toolchain = "arm-linux-androideabi";
gccVer = "4.9";
};
aarch64-unknown-linux-android = {
arch = "arm64";
triple = "aarch64-linux-android";
toolchain = "aarch64-linux-android";
gccVer = "4.9";
};
}.${config} or
(throw "Android NDK doesn't support ${config}, as far as we know");
buildInfo = ndkInfoFun stdenv.buildPlatform;
hostInfo = ndkInfoFun stdenv.hostPlatform;
targetInfo = ndkInfoFun stdenv.targetPlatform;
prefix = lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform) (stdenv.targetPlatform.config + "-");
inherit (stdenv.targetPlatform) sdkVer;
suffixSalt = lib.replaceStrings ["-" "."] ["_" "_"] stdenv.targetPlatform.config;
# targetInfo.triple is what Google thinks the toolchain should be, this is a little
# different from what we use. We make it four parts to conform with the existing
# standard more properly.
targetConfig = lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform) (stdenv.targetPlatform.config);
in
rec {
# Misc tools
binaries = runCommand "ndk-toolchain-binutils" {
pname = "ndk-toolchain-binutils";
binaries = stdenv.mkDerivation {
pname = "${targetConfig}-ndk-toolchain";
inherit (androidndk) version;
nativeBuildInputs = [ makeWrapper ];
nativeBuildInputs = [ makeWrapper autoPatchelfHook ];
propagatedBuildInputs = [ androidndk ];
passthru = {
targetPrefix = prefix;
isClang = true; # clang based cc, but bintools ld
};
} ''
mkdir -p $out/bin
dontUnpack = true;
dontBuild = true;
dontStrip = true;
dontConfigure = true;
dontPatch = true;
autoPatchelfIgnoreMissingDeps = true;
installPhase = ''
# https://developer.android.com/ndk/guides/other_build_systems
mkdir -p $out
cp -r ${androidndk}/libexec/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/${buildInfo.double} $out/toolchain
find $out/toolchain -type d -exec chmod 777 {} \;
# llvm toolchain
for prog in ${androidndk}/libexec/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/${hostInfo.double}/bin/*; do
ln -s $prog $out/bin/$(basename $prog)
ln -s $prog $out/bin/${prefix}$(basename $prog)
done
if [ ! -d $out/toolchain/sysroot/usr/lib/${targetInfo.triple}/${sdkVer} ]; then
echo "NDK does not contain libraries for SDK version ${sdkVer}";
exit 1
fi
# bintools toolchain
for prog in ${androidndk}/libexec/android-sdk/ndk-bundle/toolchains/${targetInfo.toolchain}-${targetInfo.gccVer}/prebuilt/${hostInfo.double}/bin/*; do
prog_suffix=$(basename $prog | sed 's/${targetInfo.triple}-//')
ln -s $prog $out/bin/${stdenv.targetPlatform.config}-$prog_suffix
done
ln -vfs $out/toolchain/sysroot/usr/lib $out/lib
ln -s $out/toolchain/sysroot/usr/lib/${targetInfo.triple}/*.so $out/lib/
ln -s $out/toolchain/sysroot/usr/lib/${targetInfo.triple}/*.a $out/lib/
chmod +w $out/lib/*
ln -s $out/toolchain/sysroot/usr/lib/${targetInfo.triple}/${sdkVer}/*.so $out/lib/
ln -s $out/toolchain/sysroot/usr/lib/${targetInfo.triple}/${sdkVer}/*.o $out/lib/
# shitty googly wrappers
rm -f $out/bin/${stdenv.targetPlatform.config}-gcc $out/bin/${stdenv.targetPlatform.config}-g++
'';
echo "INPUT(-lc++_static)" > $out/lib/libc++.a
ln -s $out/toolchain/bin $out/bin
ln -s $out/toolchain/${targetInfo.triple}/bin/* $out/bin/
for f in $out/bin/${targetInfo.triple}-*; do
ln -s $f ''${f/${targetInfo.triple}-/${targetConfig}-}
done
for f in $(find $out/toolchain -type d -name ${targetInfo.triple}); do
ln -s $f ''${f/${targetInfo.triple}/${targetConfig}}
done
rm -f $out/bin/${targetConfig}-ld
ln -s $out/bin/lld $out/bin/${targetConfig}-ld
(cd $out/bin;
for tool in llvm-*; do
ln -sf $tool ${targetConfig}-$(echo $tool | sed 's/llvm-//')
ln -sf $tool $(echo $tool | sed 's/llvm-//')
done)
# handle last, as llvm-as is for llvm bytecode
ln -sf $out/bin/${targetInfo.triple}-as $out/bin/${targetConfig}-as
ln -sf $out/bin/${targetInfo.triple}-as $out/bin/as
patchShebangs $out/bin
'';
};
binutils = wrapBintoolsWith {
bintools = binaries;
@ -95,9 +128,16 @@ rec {
libc = targetAndroidndkPkgs.libraries;
extraBuildCommands = ''
echo "-D__ANDROID_API__=${stdenv.targetPlatform.sdkVer}" >> $out/nix-support/cc-cflags
echo "-target ${stdenv.targetPlatform.config}" >> $out/nix-support/cc-cflags
echo "-resource-dir=$(echo ${androidndk}/libexec/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/${hostInfo.double}/lib*/clang/*)" >> $out/nix-support/cc-cflags
echo "--gcc-toolchain=${androidndk}/libexec/android-sdk/ndk-bundle/toolchains/${targetInfo.toolchain}-${targetInfo.gccVer}/prebuilt/${hostInfo.double}" >> $out/nix-support/cc-cflags
# Android needs executables linked with -pie since version 5.0
# Use -fPIC for compilation, and link with -pie if no -shared flag used in ldflags
echo "-target ${targetInfo.triple} -fPIC" >> $out/nix-support/cc-cflags
echo "-z,noexecstack -z,relro -z,now" >> $out/nix-support/cc-ldflags
echo 'if [[ ! " $@ " =~ " -shared " ]]; then NIX_LDFLAGS_${suffixSalt}+=" -pie"; fi' >> $out/nix-support/add-flags.sh
echo "-Xclang -mnoexecstack" >> $out/nix-support/cc-cxxflags
if [ ${targetInfo.triple} == arm-linux-androideabi ]; then
# https://android.googlesource.com/platform/external/android-cmake/+/refs/heads/cmake-master-dev/android.toolchain.cmake
echo "--fix-cortex-a8" >> $out/nix-support/cc-ldflags
fi
'';
};
@ -107,10 +147,14 @@ rec {
# cross-compiling packages to wrap incorrectly wrap binaries we don't include
# anyways.
libraries = runCommand "bionic-prebuilt" {} ''
mkdir -p $out
cp -r ${buildAndroidndk}/libexec/android-sdk/ndk-bundle/sysroot/usr/include $out/include
chmod +w $out/include
cp -r ${buildAndroidndk}/libexec/android-sdk/ndk-bundle/sysroot/usr/include/${targetInfo.triple}/* $out/include
ln -s ${buildAndroidndk}/libexec/android-sdk/ndk-bundle/platforms/android-${stdenv.hostPlatform.sdkVer}/arch-${hostInfo.arch}/usr/${if hostInfo.arch == "x86_64" then "lib64" else "lib"} $out/lib
lpath=${buildAndroidndk}/libexec/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/${buildInfo.double}/sysroot/usr/lib/${targetInfo.triple}/${sdkVer}
if [ ! -d $lpath ]; then
echo "NDK does not contain libraries for SDK version ${sdkVer} <$lpath>"
exit 1
fi
mkdir -p $out/lib
cp $lpath/*.so $lpath/*.a $out/lib
chmod +w $out/lib/*
cp $lpath/* $out/lib
'';
}

@ -2,36 +2,6 @@
}:
{
"18b" =
let
ndkVersion = "18.1.5063045";
buildAndroidComposition = buildPackages.buildPackages.androidenv.composeAndroidPackages {
includeNDK = true;
inherit ndkVersion;
};
androidComposition = androidenv.composeAndroidPackages {
includeNDK = true;
inherit ndkVersion;
};
in
import ./androidndk-pkgs.nix {
inherit lib;
inherit (buildPackages)
makeWrapper;
inherit (pkgs)
stdenv
runCommand wrapBintoolsWith wrapCCWith;
# buildPackages.foo rather than buildPackages.buildPackages.foo would work,
# but for splicing messing up on infinite recursion for the variants we
# *dont't* use. Using this workaround, but also making a test to ensure
# these two really are the same.
buildAndroidndk = buildAndroidComposition.ndk-bundle;
androidndk = androidComposition.ndk-bundle;
targetAndroidndkPkgs = targetPackages.androidndkPkgs_18b;
};
"21" =
let
ndkVersion = "21.0.6113669";
@ -49,7 +19,7 @@
import ./androidndk-pkgs.nix {
inherit lib;
inherit (buildPackages)
makeWrapper;
makeWrapper autoPatchelfHook;
inherit (pkgs)
stdenv
runCommand wrapBintoolsWith wrapCCWith;
@ -62,4 +32,64 @@
targetAndroidndkPkgs = targetPackages.androidndkPkgs_21;
};
"23b" =
let
ndkVersion = "23.1.7779620";
buildAndroidComposition = buildPackages.buildPackages.androidenv.composeAndroidPackages {
includeNDK = true;
inherit ndkVersion;
};
androidComposition = androidenv.composeAndroidPackages {
includeNDK = true;
inherit ndkVersion;
};
in
import ./androidndk-pkgs.nix {
inherit lib;
inherit (buildPackages)
makeWrapper autoPatchelfHook;
inherit (pkgs)
stdenv
runCommand wrapBintoolsWith wrapCCWith;
# buildPackages.foo rather than buildPackages.buildPackages.foo would work,
# but for splicing messing up on infinite recursion for the variants we
# *dont't* use. Using this workaround, but also making a test to ensure
# these two really are the same.
buildAndroidndk = buildAndroidComposition.ndk-bundle;
androidndk = androidComposition.ndk-bundle;
targetAndroidndkPkgs = targetPackages.androidndkPkgs_23b;
};
"24" =
let
ndkVersion = "24.0.8215888";
buildAndroidComposition = buildPackages.buildPackages.androidenv.composeAndroidPackages {
includeNDK = true;
inherit ndkVersion;
};
androidComposition = androidenv.composeAndroidPackages {
includeNDK = true;
inherit ndkVersion;
};
in
import ./androidndk-pkgs.nix {
inherit lib;
inherit (buildPackages)
makeWrapper autoPatchelfHook;
inherit (pkgs)
stdenv
runCommand wrapBintoolsWith wrapCCWith;
# buildPackages.foo rather than buildPackages.buildPackages.foo would work,
# but for splicing messing up on infinite recursion for the variants we
# *dont't* use. Using this workaround, but also making a test to ensure
# these two really are the same.
buildAndroidndk = buildAndroidComposition.ndk-bundle;
androidndk = androidComposition.ndk-bundle;
targetAndroidndkPkgs = targetPackages.androidndkPkgs_24;
};
}

@ -3,7 +3,7 @@
}:
{ toolsVersion ? "26.1.1"
, platformToolsVersion ? "33.0.1"
, platformToolsVersion ? "33.0.2"
, buildToolsVersions ? [ "32.0.0" ]
, includeEmulator ? false
, emulatorVersion ? "31.3.7"
@ -11,7 +11,7 @@
, includeSources ? false
, includeSystemImages ? false
, systemImageTypes ? [ "google_apis_playstore" ]
, abiVersions ? [ "armeabi-v7a" ]
, abiVersions ? [ "armeabi-v7a" "arm64-v8a" ]
, cmakeVersions ? [ ]
, includeNDK ? false
, ndkVersion ? "24.0.8215888"
@ -181,7 +181,7 @@ rec {
makeNdkBundle = ndkVersion:
import ./ndk-bundle {
inherit deployAndroidPackage os autoPatchelfHook makeWrapper pkgs pkgsHostHost lib platform-tools stdenv;
package = packages.ndk-bundle.${ndkVersion};
package = packages.ndk-bundle.${ndkVersion} or packages.ndk.${ndkVersion};
};
# All NDK bundles.

@ -12,23 +12,22 @@ deployAndroidPackage {
nativeBuildInputs = [ makeWrapper ]
++ lib.optionals stdenv.isLinux [ autoPatchelfHook ];
autoPatchelfIgnoreMissingDeps = true;
buildInputs = lib.optional (os == "linux") [ pkgs.glibc pkgs.stdenv.cc.cc pkgs.python2 pkgs.ncurses5 pkgs.zlib pkgs.libcxx.out pkgs.libxml2 ];
buildInputs = lib.optional (os == "linux") [ pkgs.zlib ];
patchInstructions = lib.optionalString (os == "linux") (''
patchShebangs .
# Fix the shebangs of the auto-generated scripts.
substituteInPlace ./build/tools/make_standalone_toolchain.py \
--replace '#!/bin/bash' '#!${pkgs.bash}/bin/bash'
'' + lib.optionalString (builtins.compareVersions (lib.getVersion package) "21" > 0) ''
patch -p1 \
--no-backup-if-mismatch < ${./make_standalone_toolchain.py_18.patch} || true
wrapProgram ./build/tools/make_standalone_toolchain.py --prefix PATH : "${runtime_paths}"
'' + ''
# TODO: allow this stuff
rm -rf docs tests
# Ndk now has a prebuilt toolchains inside, the file layout has changed, we do a symlink
# to still support the old standalone toolchains builds.
if [ -d $out/libexec/android-sdk/ndk ] && [ ! -d $out/libexec/android-sdk/ndk-bundle ]; then
ln -sf $out/libexec/android-sdk/ndk/${package.revision} $out/libexec/android-sdk/ndk-bundle
else
echo "The ndk-bundle layout has changed. The nix expressions have to be updated!"
exit 1
fi
# Patch the executables of the toolchains, but not the libraries -- they are needed for crosscompiling
if [ -d $out/libexec/android-sdk/ndk-bundle/toolchains/renderscript/prebuilt/linux-x86_64/lib64 ]; then
addAutoPatchelfSearchPath $out/libexec/android-sdk/ndk-bundle/toolchains/renderscript/prebuilt/linux-x86_64/lib64

@ -1,44 +0,0 @@
diff -Naur android-ndk-r18b/build/tools/make_standalone_toolchain.py android-ndk-r18b-new/build/tools/make_standalone_toolchain.py
--- android-ndk-r18b/build/tools/make_standalone_toolchain.py 2018-10-11 12:49:38.000000000 +0200
+++ android-ndk-r18b-new/build/tools/make_standalone_toolchain.py 2018-11-20 21:55:52.689991420 +0100
@@ -30,7 +30,7 @@
import sys
import tempfile
import textwrap
-
+import subprocess
THIS_DIR = os.path.realpath(os.path.dirname(__file__))
NDK_DIR = os.path.realpath(os.path.join(THIS_DIR, '../..'))
@@ -173,6 +173,7 @@
logger().debug('Copying %s', src_file)
shutil.copy2(src_file, dst_dir)
+ subprocess.check_call(["chmod", "-R", "+w", dst])
def make_clang_scripts(install_dir, triple, api, windows):
"""Creates Clang wrapper scripts.
@@ -365,6 +366,7 @@
install_headers = os.path.join(install_sysroot, 'usr/include')
os.makedirs(os.path.dirname(install_headers))
shutil.copytree(headers, install_headers)
+ subprocess.check_call(["chmod", "-R", "+w", install_path])
arch_headers = os.path.join(sysroot, 'usr/include', triple)
copy_directory_contents(arch_headers, os.path.join(install_headers))
@@ -375,6 +377,7 @@
install_sysroot, 'usr/lib{}'.format(lib_suffix))
if os.path.exists(lib_path):
shutil.copytree(lib_path, lib_install)
+ subprocess.check_call(["chmod", "-R", "+w", install_path])
static_lib_path = os.path.join(sysroot, 'usr/lib', triple)
static_lib_install = os.path.join(install_sysroot, 'usr/lib')
@@ -389,6 +392,7 @@
NDK_DIR, 'prebuilt', 'android-' + arch, 'gdbserver')
gdbserver_install = os.path.join(install_path, 'share', 'gdbserver')
shutil.copytree(gdbserver_path, gdbserver_install)
+ subprocess.check_call(["chmod", "-R", "+w", install_path])
toolchain_lib_dir = os.path.join(gcc_path, 'lib/gcc', triple)
dirs = os.listdir(toolchain_lib_dir)

@ -1241,6 +1241,21 @@
},
"23": {
"google_apis": {
"arm64-v8a": {
"archives": [
{
"os": "all",
"sha1": "2d1ae21b1978e202917b7c6a5f49ab8bc87c6417",
"size": 493891214,
"url": "https://dl.google.com/android/repository/sys-img/google_apis/arm64-v8a-23_r33.zip"
}
],
"displayName": "Google APIs ARM 64 v8a System Image",
"license": "android-sdk-license",
"name": "system-image-23-google_apis-arm64-v8a",
"path": "system-images/android-23/google_apis/arm64-v8a",
"revision": "23-google_apis-arm64-v8a"
},
"armeabi-v7a": {
"archives": [
{
@ -1663,43 +1678,117 @@
}
}
},
"Tiramisu": {
"33": {
"google_apis_playstore": {
"arm64-v8a": {
"archives": [
{
"os": "macosx",
"sha1": "2b6d4dc0af98b2b4d3ed4ac82b6d8ee0bfe38383",
"size": 1457296537,
"url": "https://dl.google.com/android/repository/sys-img/google_apis_playstore/arm64-v8a-Tiramisu_r02-darwin.zip"
"sha1": "0b850a4f317d7a6abe854a6845705c9ca4437764",
"size": 1492105537,
"url": "https://dl.google.com/android/repository/sys-img/google_apis_playstore/arm64-v8a-33_r05-darwin.zip"
},
{
"os": "linux",
"sha1": "2b6d4dc0af98b2b4d3ed4ac82b6d8ee0bfe38383",
"size": 1457296537,
"url": "https://dl.google.com/android/repository/sys-img/google_apis_playstore/arm64-v8a-Tiramisu_r02-linux.zip"
"sha1": "0b850a4f317d7a6abe854a6845705c9ca4437764",
"size": 1492105537,
"url": "https://dl.google.com/android/repository/sys-img/google_apis_playstore/arm64-v8a-33_r05-linux.zip"
}
],
"displayName": "Google Play ARM 64 v8a System Image",
"license": "android-sdk-arm-dbt-license",
"name": "system-image-Tiramisu-google_apis_playstore-arm64-v8a",
"path": "system-images/android-Tiramisu/google_apis_playstore/arm64-v8a",
"revision": "Tiramisu-google_apis_playstore-arm64-v8a"
"name": "system-image-33-google_apis_playstore-arm64-v8a",
"path": "system-images/android-33/google_apis_playstore/arm64-v8a",
"revision": "33-google_apis_playstore-arm64-v8a"
},
"x86_64": {
"archives": [
{
"os": "all",
"sha1": "2d2fb4c36efa836f348d6acbfc588f9eed70934e",
"size": 1438511715,
"url": "https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86_64-Tiramisu_r02.zip"
"sha1": "ed2931ebef4f7bedff8610254748d6496ce5d3c4",
"size": 1496628942,
"url": "https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86_64-33_r05.zip"
}
],
"displayName": "Google Play Intel x86 Atom_64 System Image",
"license": "android-sdk-preview-license",
"name": "system-image-Tiramisu-google_apis_playstore-x86_64",
"path": "system-images/android-Tiramisu/google_apis_playstore/x86_64",
"revision": "Tiramisu-google_apis_playstore-x86_64"
"name": "system-image-33-google_apis_playstore-x86_64",
"path": "system-images/android-33/google_apis_playstore/x86_64",
"revision": "33-google_apis_playstore-x86_64"
}
}
},
"Tiramisu": {
"android-tv": {
"arm64-v8a": {
"archives": [
{
"os": "all",
"sha1": "4b70bed5ffb28162cdde7852e0597d957910270d",
"size": 840304267,
"url": "https://dl.google.com/android/repository/sys-img/android-tv/arm64-v8a-Tiramisu_r03.zip"
}
],
"displayName": "Android TV ARM 64 v8a System Image",
"license": "android-sdk-license",
"name": "system-image-Tiramisu-android-tv-arm64-v8a",
"path": "system-images/android-Tiramisu/android-tv/arm64-v8a",
"revision": "Tiramisu-android-tv-arm64-v8a"
},
"x86": {
"archives": [
{
"os": "all",
"sha1": "547a24d9dec83e11486ef4ea45848d9fa99f35c2",
"size": 832895525,
"url": "https://dl.google.com/android/repository/sys-img/android-tv/x86-Tiramisu_r03.zip"
}
],
"displayName": "Android TV Intel x86 Atom System Image",
"license": "android-sdk-license",
"name": "system-image-Tiramisu-android-tv-x86",
"path": "system-images/android-Tiramisu/android-tv/x86",
"revision": "Tiramisu-android-tv-x86"
}
}
},
"TiramisuPrivacySandbox": {
"google_apis_playstore": {
"arm64-v8a": {
"archives": [
{
"os": "macosx",
"sha1": "4653d7aa2dbd2629c3afc1c700284de0f7791bb2",
"size": 1514681298,
"url": "https://dl.google.com/android/repository/sys-img/google_apis_playstore/arm64-v8a-TiramisuPrivacySandbox_r05-darwin.zip"
},
{
"os": "linux",
"sha1": "4653d7aa2dbd2629c3afc1c700284de0f7791bb2",
"size": 1514681298,
"url": "https://dl.google.com/android/repository/sys-img/google_apis_playstore/arm64-v8a-TiramisuPrivacySandbox_r05-linux.zip"
}
],
"displayName": "Google Play ARM 64 v8a System Image",
"license": "android-sdk-arm-dbt-license",
"name": "system-image-TiramisuPrivacySandbox-google_apis_playstore-arm64-v8a",
"path": "system-images/android-TiramisuPrivacySandbox/google_apis_playstore/arm64-v8a",
"revision": "TiramisuPrivacySandbox-google_apis_playstore-arm64-v8a"
},
"x86_64": {
"archives": [
{
"os": "all",
"sha1": "2a4ea6ce714155ea8ddfea26cf61ad219f32c02a",
"size": 1519169526,
"url": "https://dl.google.com/android/repository/sys-img/google_apis_playstore/x86_64-TiramisuPrivacySandbox_r05.zip"
}
],
"displayName": "Google Play Intel x86 Atom_64 System Image",
"license": "android-sdk-preview-license",
"name": "system-image-TiramisuPrivacySandbox-google_apis_playstore-x86_64",
"path": "system-images/android-TiramisuPrivacySandbox/google_apis_playstore/x86_64",
"revision": "TiramisuPrivacySandbox-google_apis_playstore-x86_64"
}
}
}
@ -3298,32 +3387,32 @@
"path": "build-tools/32.1.0-rc1",
"revision": "32.1.0-rc1"
},
"33.0.0-rc2": {
"33.0.0": {
"archives": [
{
"os": "windows",
"sha1": "789aa6dfb2155b81e073108c70982f73c890a95b",
"size": 55466255,
"url": "https://dl.google.com/android/repository/830151c9e0c410f6148390f0de30bd349ba91efd.build-tools_r33-rc2-windows.zip"
},
{
"os": "linux",
"sha1": "013f98217b7af4f5677ab1a47e98da18ad57721c",
"size": 57876882,
"url": "https://dl.google.com/android/repository/build-tools_r33-rc2-linux.zip"
"sha1": "c561971600d4ce682b128b0bd5d4ab71c5f2ad35",
"size": 56000182,
"url": "https://dl.google.com/android/repository/build-tools_r33-linux.zip"
},
{
"os": "macosx",
"sha1": "586f8f77847ba3899b7652d6514e8c6a78ab673a",
"size": 59910819,
"url": "https://dl.google.com/android/repository/f8baa248444f0a5aca1119b48e897908a3da49d5.build-tools_r33-rc2-macosx.zip"
"sha1": "3693851532ba9640710d2dd360d85aa5b04c5151",
"size": 60023096,
"url": "https://dl.google.com/android/repository/build-tools_r33-macosx.zip"
},
{
"os": "windows",
"sha1": "f4ef853e5e755ea5ffc50de73a9e420fc76c662e",
"size": 55610532,
"url": "https://dl.google.com/android/repository/build-tools_r33-windows.zip"
}
],
"displayName": "Android SDK Build-Tools 33-rc2",
"license": "android-sdk-preview-license",
"displayName": "Android SDK Build-Tools 33",
"license": "android-sdk-license",
"name": "build-tools",
"path": "build-tools/33.0.0-rc2",
"revision": "33.0.0-rc2"
"path": "build-tools/33.0.0",
"revision": "33.0.0"
}
},
"cmake": {
@ -3625,62 +3714,116 @@
"name": "cmdline-tools",
"path": "cmdline-tools/6.0",
"revision": "6.0"
}
},
"emulator": {
"31.2.9": {
},
"7.0": {
"archives": [
{
"os": "linux",
"sha1": "164b759748b3d2ee2616da74173867b11b18f64f",
"size": 276337192,
"url": "https://dl.google.com/android/repository/emulator-linux_x64-8316981.zip"
},
{
"os": "windows",
"sha1": "2b6768485a8e6492823a9156fa43c55092afd533",
"size": 345298639,
"url": "https://dl.google.com/android/repository/emulator-windows_x64-8316981.zip"
"sha1": "5e7bf2dd563d34917d32f3c5920a85562a795c93",
"size": 114168525,
"url": "https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip"
},
{
"os": "macosx",
"sha1": "af2d950318d8ae8cc516a1401a94f888f615aca6",
"size": 313877066,
"url": "https://dl.google.com/android/repository/emulator-darwin_x64-8316981.zip"
"sha1": "9a663c49dbd3709fc2b7d49db2814b383d811b4a",
"size": 114168511,
"url": "https://dl.google.com/android/repository/commandlinetools-mac-8512546_latest.zip"
},
{
"os": "windows",
"sha1": "1bdd32ac4b9fffea04f5bc341108e8b4fea6f32c",
"size": 114147385,
"url": "https://dl.google.com/android/repository/commandlinetools-win-8512546_latest.zip"
}
],
"displayName": "Android SDK Command-line Tools",
"license": "android-sdk-license",
"name": "cmdline-tools",
"path": "cmdline-tools/7.0",
"revision": "7.0"
}
},
"emulator": {
"31.2.10": {
"archives": [
{
"os": "linux",
"sha1": "1f2c3ddeb2c9ac4feef5946098a0a710d08e9c6d",
"size": 276337904,
"url": "https://dl.google.com/android/repository/emulator-linux_x64-8420304.zip"
},
{
"os": "windows",
"sha1": "206491b5c4e531b2c66dc80402702b9fa1a64c2a",
"size": 345300871,
"url": "https://dl.google.com/android/repository/emulator-windows_x64-8420304.zip"
},
{
"os": "macosx",
"sha1": "677b6a00c145eb8bf4306daeb2231c8efd507177",
"size": 313876814,
"url": "https://dl.google.com/android/repository/emulator-darwin_x64-8420304.zip"
}
],
"displayName": "Android Emulator",
"license": "android-sdk-license",
"name": "emulator",
"path": "emulator",
"revision": "31.2.9"
"revision": "31.2.10"
},
"31.3.7": {
"31.3.8": {
"archives": [
{
"os": "macosx",
"sha1": "0020b44623995a5a9a5b0d114f8fd942e9d3cbed",
"size": 347204784,
"url": "https://dl.google.com/android/repository/emulator-darwin_x64-8408431.zip"
"sha1": "7214e8384c97a7c9875142149d3bf9c940e9b5a0",
"size": 347222379,
"url": "https://dl.google.com/android/repository/emulator-darwin_x64-8598121.zip"
},
{
"os": "linux",
"sha1": "46ba0c398fcd2704bee015c95e44d8f317b7b720",
"size": 293765376,
"url": "https://dl.google.com/android/repository/emulator-linux_x64-8408431.zip"
"sha1": "0f781977a6cc5377b64444121ff75a513841a4fa",
"size": 293782881,
"url": "https://dl.google.com/android/repository/emulator-linux_x64-8598121.zip"
},
{
"os": "windows",
"sha1": "c09a35dd8c7eb7d8c53bf89c86019f5dbcd89b9d",
"size": 380137986,
"url": "https://dl.google.com/android/repository/emulator-windows_x64-8408431.zip"
"sha1": "b4f30bad4e68da41cc9bd44965259b2111a011a1",
"size": 380151866,
"url": "https://dl.google.com/android/repository/emulator-windows_x64-8598121.zip"
}
],
"displayName": "Android Emulator",
"license": "android-sdk-preview-license",
"name": "emulator",
"path": "emulator",
"revision": "31.3.7"
"revision": "31.3.8"
},
"31.3.9": {
"archives": [
{
"os": "macosx",
"sha1": "6e7b549113252728cfe0992d58e8cb1790dce9d6",
"size": 347241742,
"url": "https://dl.google.com/android/repository/emulator-darwin_x64-8700579.zip"
},
{
"os": "linux",
"sha1": "1c1a7ef65476d3de34f19455a0093cb68e8e90f7",
"size": 293801439,
"url": "https://dl.google.com/android/repository/emulator-linux_x64-8700579.zip"
},
{
"os": "windows",
"sha1": "ea834211b199a7fcf6b6758a53c4594d01b44ab9",
"size": 380168712,
"url": "https://dl.google.com/android/repository/emulator-windows_x64-8700579.zip"
}
],
"displayName": "Android Emulator",
"license": "android-sdk-license",
"name": "emulator",
"path": "emulator",
"revision": "31.3.9"
}
},
"extras": {
@ -4523,6 +4666,33 @@
"path": "ndk/23.1.7779620",
"revision": "23.1.7779620"
},
"23.2.8568313": {
"archives": [
{
"os": "macosx",
"sha1": "1fc65d8f6083f3f5cd01e0cf97c6adc10f4f076f",
"size": 982917530,
"url": "https://dl.google.com/android/repository/android-ndk-r23c-darwin.zip"
},
{
"os": "linux",
"sha1": "e5053c126a47e84726d9f7173a04686a71f9a67a",
"size": 724733960,
"url": "https://dl.google.com/android/repository/android-ndk-r23c-linux.zip"
},
{
"os": "windows",
"sha1": "f2c5def76a9de371f27d028864fe301ab4fe0cf8",
"size": 788336993,
"url": "https://dl.google.com/android/repository/android-ndk-r23c-windows.zip"
}
],
"displayName": "NDK (Side by side) 23.2.8568313",
"license": "android-sdk-license",
"name": "ndk",
"path": "ndk/23.2.8568313",
"revision": "23.2.8568313"
},
"24.0.7856742-rc1": {
"archives": [
{
@ -4684,6 +4854,60 @@
"name": "ndk",
"path": "ndk/25.0.8221429",
"revision": "25.0.8221429-rc2"
},
"25.0.8355429-rc3": {
"archives": [
{
"os": "macosx",
"sha1": "224594abb41357c20cb4a9f4a732c484b2e743ba",
"size": 748047157,
"url": "https://dl.google.com/android/repository/android-ndk-r25-beta3-darwin.zip"
},
{
"os": "linux",
"sha1": "79c8db05e20edde0cbb02d2326e7b8405f7eb977",
"size": 510520692,
"url": "https://dl.google.com/android/repository/android-ndk-r25-beta3-linux.zip"
},
{
"os": "windows",
"sha1": "7d2c398045f6bbad03f6fb2f2ba419a2a48ab1e7",
"size": 506142216,
"url": "https://dl.google.com/android/repository/android-ndk-r25-beta3-windows.zip"
}
],
"displayName": "NDK (Side by side) 25.0.8355429",
"license": "android-sdk-preview-license",
"name": "ndk",
"path": "ndk/25.0.8355429",
"revision": "25.0.8355429-rc3"
},
"25.0.8528842-rc4": {
"archives": [
{
"os": "macosx",
"sha1": "d7f344ecc68518a8178d15b1b80e27bc5c69f00d",
"size": 716633626,
"url": "https://dl.google.com/android/repository/android-ndk-r25-beta4-darwin.zip"
},
{
"os": "linux",
"sha1": "d13f688fd286709f0d950c75119ec9fcad8a47ff",
"size": 531018178,
"url": "https://dl.google.com/android/repository/android-ndk-r25-beta4-linux.zip"
},
{
"os": "windows",
"sha1": "668b063c7c535c4f8be52c84acebb5779935203b",
"size": 464031742,
"url": "https://dl.google.com/android/repository/android-ndk-r25-beta4-windows.zip"
}
],
"displayName": "NDK (Side by side) 25.0.8528842",
"license": "android-sdk-preview-license",
"name": "ndk",
"path": "ndk/25.0.8528842",
"revision": "25.0.8528842-rc4"
}
},
"ndk-bundle": {
@ -5381,32 +5605,32 @@
}
},
"platform-tools": {
"33.0.1": {
"33.0.2": {
"archives": [
{
"os": "macosx",
"sha1": "82f7c23e9e4acf6c86991bb23cd5d9f861f7819f",
"size": 13131422,
"url": "https://dl.google.com/android/repository/platform-tools_r33.0.1-darwin.zip"
"sha1": "9b5661e0c18a2e5b6935e2b96bcc7be580cd6dcd",
"size": 13038676,
"url": "https://dl.google.com/android/repository/platform-tools_r33.0.2-darwin.zip"
},
{
"os": "linux",
"sha1": "4792ee4593e8e2395ddb87a3e82d60629eb0e977",
"size": 7449306,
"url": "https://dl.google.com/android/repository/platform-tools_r33.0.1-linux.zip"
"sha1": "6bf4f747ad929b02378b44ce083b4502d26109c7",
"size": 7406632,
"url": "https://dl.google.com/android/repository/platform-tools_r33.0.2-linux.zip"
},
{
"os": "windows",
"sha1": "e91ab59b5ddc5e387c5171b37c3813eaa2fa3846",
"size": 6331279,
"url": "https://dl.google.com/android/repository/platform-tools_r33.0.1-windows.zip"
"sha1": "2d7599f59b54f02c4ecd33d656091a3c1e55ad9c",
"size": 6304111,
"url": "https://dl.google.com/android/repository/platform-tools_r33.0.2-windows.zip"
}
],
"displayName": "Android SDK Platform-Tools",
"license": "android-sdk-license",
"name": "platform-tools",
"path": "platform-tools",
"revision": "33.0.1"
"revision": "33.0.2"
}
},
"platforms": {
@ -5809,6 +6033,21 @@
"path": "platforms/android-32",
"revision": "32"
},
"33": {
"archives": [
{
"os": "all",
"sha1": "298f5800e37f3c089ab0eb58d4f6aef4058b689b",
"size": 67324871,
"url": "https://dl.google.com/android/repository/platform-33_r01.zip"
}
],
"displayName": "Android SDK Platform 33",
"license": "android-sdk-license",
"name": "platforms",
"path": "platforms/android-33",
"revision": "33"
},
"4": {
"archives": [
{
@ -5935,20 +6174,20 @@
"path": "platforms/android-9",
"revision": "9"
},
"Tiramisu": {
"TiramisuPrivacySandbox": {
"archives": [
{
"os": "all",
"sha1": "2ac79862a909392d68d8ad503c45809e725d71f6",
"size": 67290653,
"url": "https://dl.google.com/android/repository/platform-Tiramisu_r02.zip"
"sha1": "8dd74a564f71c8381f5230682c5da291d230cc81",
"size": 67918949,
"url": "https://dl.google.com/android/repository/platform-TiramisuPrivacySandbox_r03.zip"
}
],
"displayName": "Android SDK Platform Tiramisu",
"displayName": "Android SDK Platform TiramisuPrivacySandbox",
"license": "android-sdk-license",
"name": "platforms",
"path": "platforms/android-Tiramisu",
"revision": "Tiramisu"
"path": "platforms/android-TiramisuPrivacySandbox",
"revision": "TiramisuPrivacySandbox"
}
},
"skiaparser": {
@ -6304,6 +6543,21 @@
"name": "sources",
"path": "sources/android-31",
"revision": "31"
},
"32": {
"archives": [
{
"os": "all",
"sha1": "d7195c6de611b99d7ec3565eabe2fd21268b7f98",
"size": 46933291,
"url": "https://dl.google.com/android/repository/sources-32_r01.zip"
}
],
"displayName": "Sources for Android 32",
"license": "android-sdk-license",
"name": "sources",
"path": "sources/android-32",
"revision": "32"
}
},
"tools": {

@ -2672,9 +2672,10 @@ with pkgs;
pkgs_i686 = pkgsi686Linux;
};
androidndkPkgs = androidndkPkgs_18b;
androidndkPkgs_18b = (callPackage ../development/androidndk-pkgs {})."18b";
androidndkPkgs = androidndkPkgs_21;
androidndkPkgs_21 = (callPackage ../development/androidndk-pkgs {})."21";
androidndkPkgs_23b = (callPackage ../development/androidndk-pkgs {})."23b";
androidndkPkgs_24 = (callPackage ../development/androidndk-pkgs {})."24";
androidsdk_9_0 = androidenv.androidPkgs_9_0.androidsdk;