Skip to content
Snippets Groups Projects
Commit 37535d48 authored by David Anderson's avatar David Anderson
Browse files

- client: small changes to make client compile on Android,

    and to report the platform as "arm-android".
    From Carl Christensen.
- Add a script for building BOINC and library dependencies on Android
    From Peter Hanappe.


svn path=/trunk/boinc/; revision=25440
parent 93a01530
No related branches found
No related tags found
No related merge requests found
...@@ -2715,3 +2715,18 @@ Rom 15 Mar 2012 ...@@ -2715,3 +2715,18 @@ Rom 15 Mar 2012
samples/vboxwrapper/ samples/vboxwrapper/
vbox.cpp, .h vbox.cpp, .h
vboxwrapper.cpp vboxwrapper.cpp
David 16 Mar 2012
- client: small changes to make client compile on Android,
and to report the platform as "arm-android".
From Carl Christensen.
- Add a script for building BOINC and library dependencies on Android
From Peter Hanappe.
lib/
mac_address.cpp
client/
android/
AndroidBuild.sh (new)
cs_platforms.cpp
hostinfo_unix.cpp
#!/bin/bash
# Script to compile BOINC for Android.
# Requires the BOINC source directory and the Android NDK.
#
# Date: December 12th, 2011
# Author: Peter Hanappe (Sony Computer Science Laboratory)
BOINCDIR=`pwd`
NDK_SYSROOT=""
NDK_PATH=""
NDK_ARCH="arm"
NDK_ROOT=""
NDK_ABI="armeabi"
NDK_VERSION="android-8"
COMPILE_BOINC="yes"
COMPILE_ZLIB="yes"
COMPILE_OPENSSL="yes"
COMPILE_CURL="yes"
CONFIGURE="yes"
MAKE_CLEAN="no"
function print_usage()
{
echo "Options:"
echo " --help"
echo " --boinc-dir <dir> Root directory of BOINC source tree (default: current dir)."
echo " --android-root <dir> The root directory of the Android NDK."
echo " --android-sysroot <dir> The target sysroot directory of the Android NDK."
echo " --android-bin <dir> The bin directory of the Android NDK compilers."
echo " --android-arch <dir> Compile for 'arm' or 'x86' architecture (default: arm)."
echo " --android-version <val> Specify Android version (default: android-8)."
echo " --skip-boinc Don't compile BOINC."
echo " --skip-zlib Don't download and compile zlib."
echo " --skip-openssl Don't download and compile OpenSSL."
echo " --skip-curl Don't download and compile curl."
echo " --skip-configure Don't run configure script before compiling."
echo " --make-clean Run 'make clean' before compiling."
echo "Example: ./AndroidBuild.sh \\"
echo " --android-root /opt/google/android-ndk-r6 \\"
echo " --android-bin /opt/google/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin"
exit 0
}
while (($#)); do
option=$1
shift
case "$option" in
--help)
print_usage
shift
;;
--boinc-dir)
BOINCDIR=$1
shift
;;
--android-sysroot)
NDK_SYSROOT=$1
shift
;;
--android-root)
NDK_ROOT=$1
shift
;;
--android-bin)
NDK_PATH=$1
shift
;;
--android-arch)
NDK_ARCH=$1
shift
;;
--android-version)
NDK_VERSION=$1
shift
;;
--skip-boinc)
COMPILE_BOINC="no"
;;
--skip-zlib)
COMPILE_ZLIB="no"
;;
--skip-openssl)
COMPILE_OPENSSL="no"
;;
--skip-curl)
COMPILE_CURL="no"
;;
--skip-configure)
CONFIGURE="no"
;;
--make-clean)
MAKE_CLEAN="yes"
;;
*)
echo "Unknown option ${option}"
print_usage
;;
esac
done
###################################################
# Test options and paths
if [ ! -e "${BOINCDIR}/client/gui_rpc_server.h" ]; then
echo "Please launch this script in the boinc root directory, or use the --boinc-dir <dir> option."
print_usage
fi
if [ "x${NDK_ROOT}" == "x" ]; then
echo "Please specify the Android NDK root directory."
print_usage
fi
if [ ${NDK_ARCH} == "arm" ]; then
NDK_HOST=arm-linux-androideabi
elif [ ${NDK_ARCH} == "x86" ]; then
NDK_HOST=i686-android-linux
else
echo "Please specify the Android architecture."
print_usage
fi
NDK_CC=${NDK_HOST}-gcc
if [ "x${NDK_SYSROOT}" == "x" ]; then
NDK_SYSROOT=${NDK_ROOT}/platforms/${NDK_VERSION}/arch-${NDK_ARCH}
if [ ! -d ${NDK_SYSROOT} ]; then
echo "Please specify the Android NDK sysroot."
echo "Tried, but failed: ${NDK_SYSROOT}"
print_usage
fi
fi
if [ "x${NDK_PATH}" == "x" ]; then
echo "Please specify the Android binary directory."
print_usage
fi
if [ ! -e "${NDK_SYSROOT}/usr/include/stdio.h" ]; then
echo "Could not find ${NDK_SYSROOT}/usr/include/stdio.h header. Please verify the sysroot."
print_usage
fi
if [ ! -e "${NDK_PATH}/${NDK_CC}" ]; then
echo "Could not find the ${NDK_CC} compiler. Please verify the binary path."
print_usage
fi
###################################################
echo "================================================"
echo "BOINCDIR ${BOINCDIR}"
echo "NDK_ROOT ${NDK_ROOT}"
echo "NDK_SYSROOT ${NDK_SYSROOT}"
echo "NDK_PATH ${NDK_PATH}"
echo "NDK_ARCH ${NDK_ARCH}"
echo "NDK_HOST ${NDK_HOST}"
echo "NDK_ABI ${NDK_ABI}"
echo "NDK_VERSION ${NDK_VERSION}"
echo "NDK_CC ${NDK_CC}"
echo "COMPILE_ZLIB $COMPILE_ZLIB"
echo "COMPILE_OPENSSL $COMPILE_OPENSSL"
echo "COMPILE_CURL $COMPILE_CURL"
echo "CONFIGURE $CONFIGURE"
echo "MAKE_CLEAN $MAKE_CLEAN"
echo "================================================"
###################################################
function compile_zlib()
{
echo "================================================"
echo "= Starting download and compilation of zlib ="
echo "================================================"
cd ${BOINCDIR}/android
if [ ! -e zlib-1.2.5 ]; then
wget http://zlib.net/zlib-1.2.5.tar.gz
tar xzvf zlib-1.2.5.tar.gz
fi
cd zlib-1.2.5
if [ $CONFIGURE == "yes" ]; then
CC="${NDK_PATH}/${NDK_CC} --sysroot=${NDK_SYSROOT}" \
./configure --prefix=${BOINCDIR}/android/${NDK_ARCH} --static
fi
if [ $MAKE_CLEAN == "yes" ]; then
make clean
fi
make
# The 'make install' script fails
mkdir -p ${BOINCDIR}/android/${NDK_ARCH}/lib
mkdir -p ${BOINCDIR}/android/${NDK_ARCH}/include
cp libz.a ${BOINCDIR}/android/${NDK_ARCH}/lib
cp zlib.h ${BOINCDIR}/android/${NDK_ARCH}/lib
cp zconf.h ${BOINCDIR}/android/${NDK_ARCH}/lib
}
###################################################
function compile_openssl()
{
echo "================================================"
echo "= Starting download and compilation of openssl ="
echo "================================================"
cd ${BOINCDIR}/android
if [ ! -e openssl-1.0.0e ]; then
wget http://www.openssl.org/source/openssl-1.0.0e.tar.gz
tar xzvf openssl-1.0.0e.tar.gz
fi
cd openssl-1.0.0e
if [ $CONFIGURE == "yes" ]; then
CC="${NDK_PATH}/${NDK_CC} --sysroot=${NDK_SYSROOT}" \
./config --prefix=${BOINCDIR}/android/${NDK_ARCH} no-shared no-asm
fi
if [ $MAKE_CLEAN == "yes" ]; then
make clean
fi
make
make install
}
###################################################
function compile_curl()
{
echo "================================================"
echo "= Starting download and compilation of curl ="
echo "================================================"
cd ${BOINCDIR}/android
if [ ! -e curl-7.23.1 ]; then
wget http://curl.haxx.se/download/curl-7.23.1.tar.gz
tar xzvf curl-7.23.1.tar.gz
fi
cd curl-7.23.1
# Export binary path.
export PATH=${PATH}:${NDK_PATH}
#
# ./configure --with-sysroot=${NDK_SYSROOT} doesn't seem to work. Pass
# the correct path using the CFLAGS environment variable.
#
# The ANDROID flag is used in curl-7.23.1/include/curl/curl.h
#
if [ $CONFIGURE == "yes" ]; then
CFLAGS="--sysroot=${NDK_SYSROOT} -DANDROID" \
./configure --host=${NDK_HOST} \
--with-sysroot=${NDK_SYSROOT} \
--prefix=${BOINCDIR}/android/${NDK_ARCH} --enable-debug \
--disable-shared --enable-static \
--enable-http --disable-ftp --disable-ldap --disable-ldaps \
--disable-rtsp --disable-proxy --disable-dict --disable-telnet \
--disable-tftp --disable-pop3 --disable-imap --disable-smtp \
--disable-gopher --disable-ipv6 --disable-sspi --disable-crypto-auth \
--disable-tls-srp --disable-ntlm-wb --disable-cookies --disable-manual \
--disable-threaded-resolver --without-ca-bundle
fi
if [ $MAKE_CLEAN == "yes" ]; then
make clean
fi
make
make install
}
###################################################
# Problems:
# - problems in configure.ac with curl: --with-curl doesn't use the correct path
# - config.sub too old to recognize --host=arm-linux-androideabi, used newer config.sub (2011-03-23)
# - changed lib/network.cpp:298: !defined(__ANDROID__)
# - changed lib/synch.cpp: #if defined(__ANDROID__) \ #define create_semaphore(_key) (-1), ...
# - changed lib/mac_address.cpp:189: #elif (defined(SIOCGIFCONF) || defined(SIOCGLIFCONF)) && !defined(__ANDROID__)
function compile_boinc()
{
cd ${BOINCDIR}
# Export binary path.
export PATH=${PATH}:${NDK_PATH}
if [ $CONFIGURE == "yes" ]; then
bash _autosetup
OPTIONS="--host=${NDK_HOST} \
--disable-server \
--enable-client \
--disable-manager \
--enable-libraries \
--enable-debug \
--with-ssl=${BOINCDIR}/android/arm/lib"
echo "================================================"
echo "Configuring BOINC with: $OPTIONS"
echo "================================================"
FLAGS="--sysroot=${NDK_SYSROOT} \
-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/include \
-I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/libs/${NDK_ABI}/include"
CFLAGS="${FLAGS}" \
CXXFLAGS="${FLAGS}" \
LDFLAGS="-L${BOINCDIR}/android/arm/lib -L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/libs/${NDK_ABI}" \
LIBS="-lstdc++" \
./configure ${OPTIONS}
fi
if [ $MAKE_CLEAN == "yes" ]; then
make clean
fi
make
}
###################################################
if [ ! -e "${BOINCDIR}/android" ]; then
echo "================================================"
echo "= Creating the android direcory ="
echo "================================================"
mkdir ${BOINCDIR}/android
fi
if [ $COMPILE_ZLIB == "yes" ]; then
compile_zlib
fi
if [ $COMPILE_OPENSSL == "yes" ]; then
compile_openssl
fi
if [ $COMPILE_CURL == "yes" ]; then
compile_curl
fi
if [ $COMPILE_BOINC == "yes" ]; then
compile_boinc
fi
...@@ -96,6 +96,8 @@ void CLIENT_STATE::detect_platforms() { ...@@ -96,6 +96,8 @@ void CLIENT_STATE::detect_platforms() {
} }
add_platform("windows_intelx86"); add_platform("windows_intelx86");
#endif #endif
#elif defined(ANDROID)
add_platform("arm-android");
#elif defined(__APPLE__) #elif defined(__APPLE__)
......
...@@ -62,9 +62,15 @@ ...@@ -62,9 +62,15 @@
#endif #endif
#include <sys/stat.h> #include <sys/stat.h>
#if HAVE_SYS_SWAP_H #if HAVE_SYS_SWAP_H
#ifdef ANDROID
#include <linux/swap.h>
#else
#include <sys/swap.h> #include <sys/swap.h>
#endif #endif
#endif
#if HAVE_SYS_SYSCTL_H #if HAVE_SYS_SYSCTL_H
#include <sys/sysctl.h> #include <sys/sysctl.h>
#endif #endif
......
...@@ -267,7 +267,11 @@ get_mac_addresses(char* addresses) { ...@@ -267,7 +267,11 @@ get_mac_addresses(char* addresses) {
strcat(addresses, delimiter); strcat(addresses, delimiter);
delimiter[0] = ':'; delimiter[0] = ':';
delimiter[1] = '\0'; delimiter[1] = '\0';
#ifdef ANDROID
strcat(addresses, "00");
#else
strcat(addresses, ether_ntoa(hw_addr)); strcat(addresses, ether_ntoa(hw_addr));
#endif
} }
return true; return true;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment