#!/bin/sh # # Copyright (C) 2009 Jurij Smakov # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. die() { echo "FATAL: ${1}" exit 1 } check_variables() { test -z "${ANDROID_DIR}" && die "specify Android directory using --android-dir" test -d "${ANDROID_DIR}" || die "Android directory ${ANDROID_DIR} is invalid" test -z "${PJSIP_DIR}" && test -z "${SKIP_PJSIP}" && die "specify PJSIP directory using --pjsip-dir" test ! -d "${PJSIP_DIR}" && test -z "${SKIP_PJSIP}" && die "PJSIP directory ${PJSIP_DIR} is invalid" test -z "${VOIDROID_DIR}" && test -z "${SKIP_VOIDROID}" && die "specify VOIDROID directory using --voidroid-dir" test ! -d "${VOIDROID_DIR}" && test -z "${SKIP_VOIDROID}" && die "VOIDROID directory ${VOIDROID_DIR} is invalid" echo "Android directory: ${ANDROID_DIR}" echo "PJSIP directory: ${PJSIP_DIR}" echo "VOIDROID directory: ${VOIDROID_DIR}" } build_pjsip() { MAK_FILE="${PJSIP_DIR}/build/os-android.mak" test -f "${MAK_FILE}" || die "${MAK_FILE} not found" echo "INFO: running substitutions in ${MAK_FILE}" sed -i -e "s!@ANDROID_CFLAGS@!${ANDROID_CFLAGS}!g" "${MAK_FILE}" sed -i -e "s!@ANDROID_LDFLAGS@!${ANDROID_LDFLAGS}!g" "${MAK_FILE}" TOOLCHAIN_BIN="${ANDROID_DIR}/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin" (export PATH="${PATH}:${TOOLCHAIN_BIN}" cd "${PJSIP_DIR}" && \ env CC='arm-eabi-gcc' \ CFLAGS="${ANDROID_CFLAGS}" \ LDFLAGS="${ANDROID_LDFLAGS}" \ ./configure --host=arm-eabi && make dep && make) } build_voidroid() { MF_IN="${VOIDROID_DIR}/assets/Makefile.android.in" MF_OUT="${VOIDROID_DIR}/assets/Makefile" sed -e "s!@PJSIP_DIR@!${PJSIP_DIR}!g" \ -e "s!@ANDROID_DIR@!${ANDROID_DIR}!g" \ -e "s!@ANDROID_LDFLAGS_LIBRARY@!${ANDROID_LDFLAGS_LIBRARY}!" \ -e "s!@ANDROID_CXXFLAGS@!${ANDROID_CFLAGS}!" < "${MF_IN}" > "${MF_OUT}" (cd "${VOIDROID_DIR}/assets" && make clean && make) (cd "${VOIDROID_DIR}" && ant) } # Main script while test -n "${1}"; do case "${1}" in --android-dir) ANDROID_DIR="${2}" shift 2 ;; --pjsip-dir) PJSIP_DIR="${2}" shift 2 ;; --skip-pjsip) SKIP_PJSIP='yes' shift 1 ;; --voidroid-dir) VOIDROID_DIR="${2}" shift 2 ;; --skip-voidroid) SKIP_VOIDROID='yes' shift 1 ;; *) die "unknown option \"${1}\"." ;; esac done check_variables ANDROID_CFLAGS="-DPJ_ANDROID=1 -I${ANDROID_DIR}/system/core/include -I${ANDROID_DIR}/hardware/libhardware/include -I${ANDROID_DIR}/hardware/ril/include -I${ANDROID_DIR}/dalvik/libnativehelper/include -I${ANDROID_DIR}/frameworks/base/include -I${ANDROID_DIR}/external/skia/include -I${ANDROID_DIR}/out/target/product/generic/obj/include -I${ANDROID_DIR}/bionic/libc/arch-arm/include -I${ANDROID_DIR}/bionic/libc/include -I${ANDROID_DIR}/bionic/libstdc++/include -I${ANDROID_DIR}/bionic/libc/kernel/common -I${ANDROID_DIR}/bionic/libc/kernel/arch-arm -I${ANDROID_DIR}/bionic/libm/include -I${ANDROID_DIR}/bionic/libm/include/arch/arm -I${ANDROID_DIR}/bionic/libthread_db/include -I${ANDROID_DIR}/bionic/libm/arm -I${ANDROID_DIR}/bionic/libm -I${ANDROID_DIR}/out/target/product/generic/obj/SHARED_LIBRARIES/libm_intermediates -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID -DSK_RELEASE -include ${ANDROID_DIR}/system/core/include/arch/linux-arm/AndroidConfig.h -UDEBUG -DNDEBUG -march=armv5te -mtune=xscale -msoft-float -mthumb-interwork -fpic -fno-exceptions -ffunction-sections -funwind-tables -fstack-protector -fmessage-length=0 -O2 -finline-functions -finline-limit=300 -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -fomit-frame-pointer -fstrict-aliasing -funswitch-loops" # LDFLAGS for linking an executable ANDROID_LDFLAGS="-nostdlib -Bdynamic -Wl,-T,${ANDROID_DIR}/build/core/armelf.x -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--no-undefined -Wl,-rpath-link=${ANDROID_DIR}/out/target/product/generic/obj/lib -L${ANDROID_DIR}/out/target/product/generic/obj/lib ${ANDROID_DIR}/out/target/product/generic/obj/lib/crtend_android.o ${ANDROID_DIR}/out/target/product/generic/obj/lib/crtbegin_dynamic.o ${ANDROID_DIR}/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/lib/gcc/arm-eabi/4.2.1/interwork/libgcc.a -lc -lm -lm -lssl -lcrypto -lmedia" # LDFLAGS for linking a shared library ANDROID_LDFLAGS_LIBRARY="-nostdlib -Wl,-T,${ANDROID_DIR}/build/core/armelf.xsc -Wl,-shared,-Bsymbolic -L${ANDROID_DIR}/out/target/product/generic/obj/lib -lc -lm -lm -lssl -lcrypto -lmedia" test -z "${SKIP_PJSIP}" && build_pjsip test -z "${SKIP_VOIDROID}" && build_voidroid