diff options
Diffstat (limited to 'pkgs/development/mobile/androidenv/androidsdk.nix')
-rw-r--r-- | pkgs/development/mobile/androidenv/androidsdk.nix | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/pkgs/development/mobile/androidenv/androidsdk.nix b/pkgs/development/mobile/androidenv/androidsdk.nix new file mode 100644 index 000000000000..e8e1f919fe4e --- /dev/null +++ b/pkgs/development/mobile/androidenv/androidsdk.nix @@ -0,0 +1,194 @@ +{ stdenv, stdenv_32bit, fetchurl, unzip, makeWrapper +, platformTools, support, platforms, sysimages, addons +, zlib_32bit +, libX11_32bit, libxcb_32bit, libXau_32bit, libXdmcp_32bit, libXext_32bit +, libX11, libXext, libXrender, libxcb, libXau, libXdmcp +, freetype, fontconfig, gtk, atk +}: +{platformVersions, useGoogleAPIs}: + +stdenv.mkDerivation { + name = "android-sdk-21"; + + src = if (stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux") + then fetchurl { + url = http://dl.google.com/android/android-sdk_r21-linux.tgz; + md5 = "7f8d73b629f808cdcfc9f9900bbd7580"; + } + else if stdenv.system == "x86_64-darwin" then fetchurl { + url = http://dl.google.com/android/android-sdk_r21-macosx.zip; + md5 = "67e46adca90dd18d7291443f6c15d6af"; + } + else throw "platform not ${stdenv.system} supported!"; + + buildCommand = '' + mkdir -p $out/libexec + cd $out/libexec + unpackFile $src; + + cd android-sdk-*/tools + + ${stdenv.lib.optionalString (stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux") + '' + # There are a number of native binaries. We must patch them to let them find the interpreter and libstdc++ + + for i in dmtracedump emulator emulator-arm emulator-mips emulator-x86 hprof-conv mksdcard sqlite3 + do + patchelf --set-interpreter ${stdenv_32bit.gcc.libc}/lib/ld-linux.so.2 $i + patchelf --set-rpath ${stdenv_32bit.gcc.gcc}/lib $i + done + + ${stdenv.lib.optionalString (stdenv.system == "x86_64-linux") '' + # We must also patch the 64-bit emulator instances, if needed + + for i in emulator64-arm emulator64-mips emulator64-x86 + do + patchelf --set-interpreter ${stdenv.gcc.libc}/lib/ld-linux-x86-64.so.2 $i + patchelf --set-rpath ${stdenv.gcc.gcc}/lib64 $i + done + ''} + + # These tools also need zlib in addition to libstdc++ + + for i in etc1tool zipalign + do + patchelf --set-interpreter ${stdenv_32bit.gcc.libc}/lib/ld-linux.so.2 $i + patchelf --set-rpath ${stdenv_32bit.gcc.gcc}/lib:${zlib_32bit}/lib $i + done + + # The emulators need additional libraries, which are not in the RPATH => let's wrap them + + for i in emulator emulator-arm emulator-mips emulator-x86 + do + wrapProgram `pwd`/$i \ + --prefix LD_LIBRARY_PATH : `pwd`/lib:${libX11_32bit}/lib:${libxcb_32bit}/lib:${libXau_32bit}/lib:${libXdmcp_32bit}/lib:${libXext_32bit}/lib + done + + ${stdenv.lib.optionalString (stdenv.system == "x86_64-linux") '' + for i in emulator64-arm emulator64-mips emulator64-x86 + do + wrapProgram `pwd`/$i \ + --prefix LD_LIBRARY_PATH : `pwd`/lib:${libX11}/lib:${libxcb}/lib:${libXau}/lib:${libXdmcp}/lib:${libXext}/lib + done + ''} + ''} + + patchShebangs . + + ${if stdenv.system == "i686-linux" then + '' + # The monitor requires some more patching + + cd lib/monitor-x86 + patchelf --set-interpreter ${stdenv.gcc.libc}/lib/ld-linux.so.2 monitor + patchelf --set-rpath ${libX11}/lib:${libXext}/lib:${libXrender}/lib:${freetype}/lib:${fontconfig}/lib libcairo-swt.so + + wrapProgram `pwd`/monitor \ + --prefix LD_LIBRARY_PATH : ${gtk}/lib:${atk}/lib:${stdenv.gcc.gcc}/lib + + cd ../.. + '' + else if stdenv.system == "x86_64-linux" then + '' + # The monitor requires some more patching + + cd lib/monitor-x86_64 + patchelf --set-interpreter ${stdenv.gcc.libc}/lib/ld-linux-x86-64.so.2 monitor + patchelf --set-rpath ${libX11}/lib:${libXext}/lib:${libXrender}/lib:${freetype}/lib:${fontconfig}/lib libcairo-swt.so + + wrapProgram `pwd`/monitor \ + --prefix LD_LIBRARY_PATH : ${gtk}/lib:${atk}/lib:${stdenv.gcc.gcc}/lib + + cd ../.. + '' + else ""} + + # Symlink the other sub packages + + cd .. + ln -s ${platformTools}/platform-tools + ln -s ${support}/support + + # Symlink required Google API add-ons + + mkdir -p add-ons + cd add-ons + + ${if useGoogleAPIs then + stdenv.lib.concatMapStrings (platformVersion: + if (builtins.hasAttr ("google_apis_"+platformVersion) addons) then + let + googleApis = builtins.getAttr ("google_apis_"+platformVersion) addons; + in + "ln -s ${googleApis}/* addon-google_apis-${platformVersion}" + else "") platformVersions + else ""} + + cd .. + + # Symlink required platforms + + mkdir -p platforms + cd platforms + + ${stdenv.lib.concatMapStrings (platformVersion: + if (builtins.hasAttr ("platform_"+platformVersion) platforms) then + let + platform = builtins.getAttr ("platform_"+platformVersion) platforms; + in + "ln -s ${platform}/* android-${platformVersion}" + else "" + ) platformVersions} + + cd .. + + # Symlink required system images + + mkdir -p system-images + cd system-images + + ${stdenv.lib.concatMapStrings (platformVersion: + if (builtins.hasAttr ("sysimg_"+platformVersion) sysimages) then + let + sysimg = builtins.getAttr ("sysimg_"+platformVersion) sysimages; + in + '' + mkdir -p android-${platformVersion} + cd android-${platformVersion} + ln -s ${sysimg}/* + cd .. + '' + else "" + ) platformVersions} + + # Create wrappers to the most important tools and platform tools so that we can run them if the SDK is in our PATH + + ensureDir $out/bin + + for i in $out/libexec/android-sdk-*/tools/* + do + if [ ! -d $i ] && [ -x $i ] + then + ( echo '#! ${stdenv.shell} -e' + echo "cd $out/libexec/android-sdk-*/tools" + echo "exec ./$(basename $i) \"\$@\"" ) > $out/bin/$(basename $i) + + chmod +x $out/bin/$(basename $i) + fi + done + + for i in $out/libexec/android-sdk-*/platform-tools/* + do + if [ ! -d $i ] && [ -x $i ] + then + ( echo '#! ${stdenv.shell} -e' + echo "cd $out/libexec/android-sdk-*/platform-tools" + echo "exec ./$(basename $i) \"\$@\"") > $out/bin/$(basename $i) + + chmod +x $out/bin/$(basename $i) + fi + done + ''; + + buildInputs = [ unzip makeWrapper ]; +} |