Advertisement
ducn10

Build Curl Android

May 31st, 2016
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.75 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Download and build libcurl, openssl and zlib for Android using Crystax NDK r7
  4. # Must be run on 32 bit Linux as the Crystax r7 NDK doesn't support 64 bit hosts
  5. # Tested on Ubuntu 14.04
  6.  
  7. # Make the working directory
  8. mkdir curl-android-build
  9. cd curl-android-build
  10. ROOT_DIR=`pwd -P`
  11. echo Building curl for Android in $ROOT_DIR
  12.  
  13. OUTPUT_DIR=$ROOT_DIR/output
  14. mkdir $OUTPUT_DIR
  15.  
  16. # Download Crystax NDK
  17. wget https://www.crystax.net/download/android-ndk-r7-crystax-5.beta3-linux-x86.tar.bz2
  18. tar -xvf android-ndk-r7-crystax-5.beta3-linux-x86.tar.bz2
  19.  
  20. # NDK environment variables
  21. export NDK_ROOT=$ROOT_DIR/android-ndk-r7-crystax-5.beta3/
  22. export PATH=$PATH:$NDK_ROOT
  23.  
  24. # Create standalone toolchain for cross-compiling
  25. $NDK_ROOT/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-14 --install-dir=ndk-standalone-toolchain
  26. TOOLCHAIN=$ROOT_DIR/ndk-standalone-toolchain
  27.  
  28. # Setup cross-compile environment
  29. export PATH=$PATH:$TOOLCHAIN/bin
  30. export SYSROOT=$TOOLCHAIN/sysroot
  31. export ARCH=armv7
  32. export CC=arm-linux-androideabi-gcc
  33. export CXX=arm-linux-androideabi-g++
  34. export AR=arm-linux-androideabi-ar
  35. export AS=arm-linux-androideabi-as
  36. export LD=arm-linux-androideabi-ld
  37. export RANLIB=arm-linux-androideabi-ranlib
  38. export NM=arm-linux-androideabi-nm
  39. export STRIP=arm-linux-androideabi-strip
  40. export CHOST=arm-linux-androideabi
  41.  
  42. OUTPUT_DIR=$ROOT_DIR/libcurl-android
  43. mkdir $OUTPUT_DIR
  44.  
  45. # Download and build zlib
  46. mkdir -p $OUTPUT_DIR/zlib/lib/armeabi-v7a
  47. mkdir $OUTPUT_DIR/zlib/include
  48. ZLIB_DIR=$ROOT_DIR/zlib-1.2.8
  49. wget http://zlib.net/zlib-1.2.8.tar.gz
  50. tar -xvzf zlib-1.2.8.tar.gz
  51. cd $ZLIB_DIR
  52. ./configure --static
  53. make
  54.  
  55. # Copy zlib lib and includes to output directory
  56. cp libz.a $OUTPUT_DIR/zlib/lib/armeabi-v7a/
  57. cp zconf.h $OUTPUT_DIR/zlib/include/
  58. cp zlib.h $OUTPUT_DIR/zlib/include/
  59. cd ..
  60.  
  61. # Download and build openssl
  62. wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2d.tar.gz
  63. tar -xvf openssl-1.0.2d.tar.gz
  64. cd openssl-1.0.2d/
  65. export CPPFLAGS="-mthumb -mfloat-abi=softfp -mfpu=vfp -march=${ARCH} -DANDROID"
  66. ./Configure android-armv7 no-asm no-shared --static --with-zlib-include=${ZLIB_DIR}/include --with-zlib-lib=${ZLIB_DIR}/lib
  67. make build_crypto build_ssl
  68.  
  69. # Copy openssl lib and includes to output directory
  70. mkdir -p $OUTPUT_DIR/openssl/lib/armeabi-v7a
  71. mkdir $OUTPUT_DIR/openssl/include
  72. cp libssl.a $OUTPUT_DIR/openssl/lib/armeabi-v7a
  73. cp libcrypto.a $OUTPUT_DIR/openssl/lib/armeabi-v7a
  74. cp -LR include/openssl $OUTPUT_DIR/openssl/include
  75. cd ..
  76. OPENSSL_DIR=$ROOT_DIR/openssl-1.0.2d
  77.  
  78. # Download and build libcurl
  79. wget http://curl.haxx.se/download/curl-7.45.0.tar.gz
  80. tar -xvf curl-7.45.0.tar.gz
  81. cd curl-7.45.0
  82. export CFLAGS="-v --sysroot=$SYSROOT -mandroid -march=$ARCH -mfloat-abi=softfp -mfpu=vfp -mthumb"
  83. export CPPFLAGS="$CFLAGS -DANDROID -DCURL_STATICLIB -mthumb -mfloat-abi=softfp -mfpu=vfp -march=$ARCH -I${OPENSSL_DIR}/include/ -I${TOOLCHAIN}/include"
  84. export LDFLAGS="-march=$ARCH -Wl,--fix-cortex-a8 -L${OPENSSL_DIR}"
  85. ./configure --host=arm-linux-androideabi --disable-shared --enable-static --disable-dependency-tracking --with-zlib=${ZLIB_DIR} --with-ssl=${OPENSSL_DIR} --without-ca-bundle --without-ca-path --enable-ipv6 --enable-http --enable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-sspi --disable-manual --target=arm-linux-androideabi --prefix=/opt/curlssl
  86. make
  87.  
  88. # Copy libcurl and includes to output directory
  89. mkdir -p $OUTPUT_DIR/curl/lib/armeabi-v7a
  90. mkdir $OUTPUT_DIR/curl/include
  91. cp lib/.libs/libcurl.a $OUTPUT_DIR/curl/lib/armeabi-v7a
  92. cp -LR include/curl $OUTPUT_DIR/curl/include
  93. cd ..
  94.  
  95. # Tar up output
  96. OUTPUT_FILE=libcurl-android.tar.gz
  97. tar -czf $OUTPUT_FILE -C $OUTPUT_DIR .
  98.  
  99. echo Build result saved to $ROOT_DIR/$OUTPUT_FILE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement