nixpkgs/pkgs/development/mobile/androidenv/androidndk.nix
John Wiegley 28b6fb61e6 Change occurrences of gcc to the more general cc
This is done for the sake of Yosemite, which does not have gcc, and yet
this change is also compatible with Linux.
2014-12-26 11:06:21 -06:00

80 lines
2.4 KiB
Nix

{ stdenv, fetchurl, zlib, ncurses, p7zip, lib, makeWrapper
, coreutils, file, findutils, gawk, gnugrep, gnused, jdk, which
, platformTools
}:
assert stdenv.isLinux;
stdenv.mkDerivation rec {
name = "android-ndk-r10c";
src = if stdenv.system == "i686-linux"
then fetchurl {
url = "http://dl.google.com/android/ndk/${name}-linux-x86.bin";
sha256 = "0gyq68zrpzj3gkh81czs6r0jmikg5rwzh1bqg4rk16g2nxm4lll3";
}
else if stdenv.system == "x86_64-linux" then fetchurl {
url = "http://dl.google.com/android/ndk/${name}-linux-x86_64.bin";
sha256 = "126rqzkmf8xz1hqdziwx81yln17hpivs2j45rxhzdr45iw9b758c";
}
else throw "platform ${stdenv.system} not supported!";
phases = "buildPhase";
buildInputs = [ p7zip makeWrapper ];
buildCommand = let
bin_path = "$out/bin";
pkg_path = "$out/libexec/${name}";
sed_script_1 =
"'s|^PROGDIR=`dirname $0`" +
"|PROGDIR=`dirname $(readlink -f $(which $0))`|'";
sed_script_2 =
"'s|^MYNDKDIR=`dirname $0`" +
"|MYNDKDIR=`dirname $(readlink -f $(which $0))`|'";
runtime_paths = (lib.makeSearchPath "bin" [
coreutils file findutils
gawk gnugrep gnused
jdk
which
]) + ":${platformTools}/platform-tools";
in ''
set -x
mkdir -pv $out/libexec
cd $out/libexec
7z x $src
# so that it doesn't fail because of read-only permissions set
cd -
patch -p1 \
--no-backup-if-mismatch \
-d $out/libexec/${name} < ${ ./make-standalone-toolchain.patch }
cd ${pkg_path}
find $out \( \
\( -type f -a -name "*.so*" \) -o \
\( -type f -a -perm /0100 \) \
\) -exec patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-*so.? \
--set-rpath ${zlib}/lib:${ncurses}/lib {} \;
# fix ineffective PROGDIR / MYNDKDIR determination
for i in ndk-build ndk-gdb ndk-gdb-py
do
sed -i -e ${sed_script_1} $i
done
sed -i -e ${sed_script_2} ndk-which
# a bash script
patchShebangs ndk-which
# make some executables available in PATH
mkdir -pv ${bin_path}
for i in \
ndk-build 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 ndk-gdb ndk-gdb-py ndk-which
do
wrapProgram "${bin_path}/$i" --prefix PATH : "${runtime_paths}"
done
'';
}