summary refs log tree commit diff
path: root/pkgs/development/mobile/androidenv
diff options
context:
space:
mode:
authorBastian Köcher <git@kchr.de>2018-08-29 18:31:38 +0200
committerBastian Köcher <git@kchr.de>2018-09-07 22:03:26 +0200
commitdd0b3dafc9c3b77fe6ab972d0f39394a2bb8b53e (patch)
treecf841f047967e11beef83fa8292708f65033a04f /pkgs/development/mobile/androidenv
parent48bdf31f58b40dfb7f781033c100c87e2dd729f2 (diff)
downloadnixpkgs-dd0b3dafc9c3b77fe6ab972d0f39394a2bb8b53e.tar
nixpkgs-dd0b3dafc9c3b77fe6ab972d0f39394a2bb8b53e.tar.gz
nixpkgs-dd0b3dafc9c3b77fe6ab972d0f39394a2bb8b53e.tar.bz2
nixpkgs-dd0b3dafc9c3b77fe6ab972d0f39394a2bb8b53e.tar.lz
nixpkgs-dd0b3dafc9c3b77fe6ab972d0f39394a2bb8b53e.tar.xz
nixpkgs-dd0b3dafc9c3b77fe6ab972d0f39394a2bb8b53e.tar.zst
nixpkgs-dd0b3dafc9c3b77fe6ab972d0f39394a2bb8b53e.zip
androidndk: Add `makeStandaloneToolchain` support
Example:
```
let
  toolchain = (androidenv.androidndk.makeStandaloneToolchain 24 "arm64");
in
...
```
Diffstat (limited to 'pkgs/development/mobile/androidenv')
-rw-r--r--pkgs/development/mobile/androidenv/androidndk.nix164
1 files changed, 87 insertions, 77 deletions
diff --git a/pkgs/development/mobile/androidenv/androidndk.nix b/pkgs/development/mobile/androidenv/androidndk.nix
index eb7e7815280..dc693accbf4 100644
--- a/pkgs/development/mobile/androidenv/androidndk.nix
+++ b/pkgs/development/mobile/androidenv/androidndk.nix
@@ -1,100 +1,110 @@
 { stdenv, fetchurl, zlib, ncurses5, unzip, lib, makeWrapper
 , coreutils, file, findutils, gawk, gnugrep, gnused, jdk, which
-, platformTools, python3, libcxx, version, sha256, bash
+, platformTools, python3, libcxx, version, sha256, bash, runCommand
 , fullNDK ? false # set to true if you want other parts of the NDK
                   # that is not used by Nixpkgs like sources,
                   # examples, docs, or LLVM toolchains
 }:
 
-stdenv.mkDerivation rec {
-  name = "android-ndk-r${version}";
-  inherit version;
+let
+  makeStandaloneToolchain = api: arch: let
+      full_ndk = (ndk true);
+    in runCommand "makeStandaloneToolchain-${version}" {} ''
+      ${full_ndk}/libexec/${full_ndk.name}/build/tools/make_standalone_toolchain.py --api ${toString api} --arch ${arch} --install-dir $out
+    '';
+  ndk = fullNDK: stdenv.mkDerivation rec {
+    name = "android-ndk-r${version}";
+    inherit version;
 
-  src = if stdenv.hostPlatform.system == "x86_64-linux" then fetchurl {
+    src = if stdenv.hostPlatform.system == "x86_64-linux" then fetchurl {
       url = "https://dl.google.com/android/repository/${name}-linux-x86_64.zip";
       inherit sha256;
     } else throw "platform ${stdenv.hostPlatform.system} not supported!";
 
-  phases = "buildPhase";
+    phases = "buildPhase";
 
-  nativeBuildInputs = [ unzip makeWrapper file ];
+    nativeBuildInputs = [ unzip makeWrapper file ];
 
-  buildCommand = let
-    bin_path = "$out/bin";
-    pkg_path = "$out/libexec/${name}";
-    sed_script_1 =
-      "'s|^PROGDIR=`dirname $0`" +
-      "|PROGDIR=`dirname $(readlink -f $(which $0))`|'";
-    runtime_paths = (lib.makeBinPath [
-      coreutils file findutils
-      gawk gnugrep gnused
-      jdk python3 which
-    ]) + ":${platformTools}/platform-tools";
-  in ''
-    mkdir -pv $out/libexec
-    cd $out/libexec
-    unzip -qq $src
+    buildCommand = let
+      bin_path = "$out/bin";
+      pkg_path = "$out/libexec/${name}";
+      sed_script_1 =
+        "'s|^PROGDIR=`dirname $0`" +
+        "|PROGDIR=`dirname $(readlink -f $(which $0))`|'";
+      runtime_paths = (lib.makeBinPath [
+        coreutils file findutils
+        gawk gnugrep gnused
+        jdk python3 which
+      ]) + ":${platformTools}/platform-tools";
+    in ''
+      mkdir -pv $out/libexec
+      cd $out/libexec
+      unzip -qq $src
 
-    # so that it doesn't fail because of read-only permissions set
-    cd -
-    ${if (version == "10e") then
-        ''
-          patch -p1 \
-            --no-backup-if-mismatch \
-            -d $out/libexec/${name} < ${ ./make-standalone-toolchain_r10e.patch }
-        ''
-      else
-        ''
-          patch -p1 \
-            --no-backup-if-mismatch \
-            -d $out/libexec/${name} < ${ ./. + "/make_standalone_toolchain.py_${version}.patch" }
+      # so that it doesn't fail because of read-only permissions set
+      cd -
+      ${if (version == "10e") then
+          ''
+            patch -p1 \
+              --no-backup-if-mismatch \
+              -d $out/libexec/${name} < ${ ./make-standalone-toolchain_r10e.patch }
+          ''
+        else
+          ''
+            patch -p1 \
+              --no-backup-if-mismatch \
+              -d $out/libexec/${name} < ${ ./. + "/make_standalone_toolchain.py_" + "${version}" + ".patch" }
 
-          sed -i 's,#!/usr/bin/env python,#!${python3}/bin/python,g' ${pkg_path}/build/tools/make_standalone_toolchain.py
-          sed -i 's,#!/bin/bash,#!${bash}/bin/bash,g' ${pkg_path}/build/tools/make_standalone_toolchain.py
-          wrapProgram ${pkg_path}/build/tools/make_standalone_toolchain.py --prefix PATH : "${runtime_paths}"
-        ''
-    }
+            sed -i 's,#!/usr/bin/env python,#!${python3}/bin/python,g' ${pkg_path}/build/tools/make_standalone_toolchain.py
+            sed -i 's,#!/bin/bash,#!${bash}/bin/bash,g' ${pkg_path}/build/tools/make_standalone_toolchain.py
+            wrapProgram ${pkg_path}/build/tools/make_standalone_toolchain.py --prefix PATH : "${runtime_paths}"
+          ''
+      }
 
-    patchShebangs ${pkg_path}
+      patchShebangs ${pkg_path}
 
-    cd ${pkg_path}
+      cd ${pkg_path}
 
-  '' + lib.optionalString (!fullNDK) ''
-    # Steps to reduce output size
-    rm -rf docs sources tests
-    # We only support cross compiling with gcc for now
-    rm -rf toolchains/*-clang* toolchains/llvm*
-  '' +
+    '' + lib.optionalString (!fullNDK) ''
+      # Steps to reduce output size
+      rm -rf docs sources tests
+      # We only support cross compiling with gcc for now
+      rm -rf toolchains/*-clang* toolchains/llvm*
+    '' +
 
-  ''
-    find ${pkg_path}/toolchains \( \
-        \( -type f -a -name "*.so*" \) -o \
-        \( -type f -a -perm -0100 \) \
-        \) -exec patchelf --set-interpreter ${stdenv.cc.libc.out}/lib/ld-*so.? \
-                          --set-rpath ${stdenv.lib.makeLibraryPath [ libcxx zlib ncurses5 ]} {} \;
-    # fix ineffective PROGDIR / MYNDKDIR determination
-    for i in ndk-build ${lib.optionalString (version == "10e") "ndk-gdb ndk-gdb-py"}
-    do
-        sed -i -e ${sed_script_1} $i
-    done
+    ''
+      find ${pkg_path}/toolchains \( \
+          \( -type f -a -name "*.so*" \) -o \
+          \( -type f -a -perm -0100 \) \
+          \) -exec patchelf --set-interpreter ${stdenv.cc.libc.out}/lib/ld-*so.? \
+                            --set-rpath ${stdenv.lib.makeLibraryPath [ libcxx zlib ncurses5 ]} {} \;
+      # fix ineffective PROGDIR / MYNDKDIR determination
+      for i in ndk-build ${lib.optionalString (version == "10e") "ndk-gdb ndk-gdb-py"}
+      do
+          sed -i -e ${sed_script_1} $i
+      done
 
-    # wrap
-    for i in ndk-build ${lib.optionalString (version == "10e") "ndk-gdb ndk-gdb-py ndk-which"}
-    do
-        wrapProgram "$(pwd)/$i" --prefix PATH : "${runtime_paths}"
-    done
-    # make some executables available in PATH
-    mkdir -pv ${bin_path}
-    for i in \
-        ndk-build ${lib.optionalString (version == "10e") "ndk-depends ndk-gdb ndk-gdb-py ndk-gdb.py ndk-stack ndk-which"}
-    do
-        ln -sf ${pkg_path}/$i ${bin_path}/$i
-    done
-  '';
+      # wrap
+      for i in ndk-build ${lib.optionalString (version == "10e") "ndk-gdb ndk-gdb-py ndk-which"}
+      do
+          wrapProgram "$(pwd)/$i" --prefix PATH : "${runtime_paths}"
+      done
+      # make some executables available in PATH
+      mkdir -pv ${bin_path}
+      for i in \
+          ndk-build ${lib.optionalString (version == "10e") "ndk-depends ndk-gdb ndk-gdb-py ndk-gdb.py ndk-stack ndk-which"}
+      do
+          ln -sf ${pkg_path}/$i ${bin_path}/$i
+      done
+    '';
 
-  meta = {
-    platforms = stdenv.lib.platforms.linux;
-    hydraPlatforms = [];
-    license = stdenv.lib.licenses.asl20;
+    meta = {
+      platforms = stdenv.lib.platforms.linux;
+      hydraPlatforms = [];
+      license = stdenv.lib.licenses.asl20;
+    };
   };
-}
+  passthru = {
+    inherit makeStandaloneToolchain;
+  };
+in lib.extendDerivation true passthru (ndk fullNDK)