#!/bin/bash # # lws_config{,_private}.h are created by running cmake # We are not allowed to use cmake to do the Android build # These files for now have to be created offline # debug_mode="false" if [[ $1 == "debug" ]] || [[ $1 == "-d" ]]; then debug_mode="true" fi function remove_trailing_slash { if [[ $1 == "/" ]]; then echo $i else echo ${1%/} fi } set -o errexit MY_LOCATION="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )" MY_LOCATION=$(remove_trailing_slash $MY_LOCATION) CMAKE_LIST_FILE="$MY_LOCATION/CMakeLists.txt" ANDROID_ROOTDIR="$(realpath $MY_LOCATION/../..)" ANDROID_ROOTDIR=$(remove_trailing_slash $ANDROID_ROOTDIR) BUILD_DIR=$MY_LOCATION/build_dir # included by CMakeLists.txt CMAKE_ANDROID_FILE="$MY_LOCATION/CMakeAndroidLists.txt" # used to generate CMAKE_ANDROID_FILE CMAKE_ANDROID_FILE_TEMPLATE="$MY_LOCATION/CMakeAndroidLists.txt.template" function find_lib_path() { # find the library in the out directory, and returns the directory's absolute path # # $1 -> libname # $2 -> optional, lib file extension local libext=${2:-".a"} local libname="$1$libext" local res=`find ${ANDROID_ROOTDIR}/out -type f | egrep "$libname$" | egrep "$(uname -m)" | egrep -i "$(uname -s)"` echo $res } function sed_in_cmake_android() { # replace in-place 'from' with 'to' in CMAKE_ANDROID_FILE # # $1: from # $2: to # $3: CMAKE_ANDROID_FILE # local cmake_android_file=${3:-"${CMAKE_ANDROID_FILE}"} local from="____""$1""____" local to=$(echo $2 | sed -r 's/\//\\\//g') if [[ $debug_mode == "true" ]]; then echo "${FUNCNAME[0]} replaces in $cmake_android_file " echo " " $from echo "with " $to fi sed -i "s/$from/$to/g" $cmake_android_file } function build_prerequisites() { local modules=("$@") ( pushd ${ANDROID_ROOTDIR} source ${ANDROID_ROOTDIR}/build/envsetup.sh for mod in "${modules[@]}"; do mmm $mod done popd ) } function create_android_list() { # # by filling out the form in CMAKE_ANDROID_FILE_TEMPLATE, # create CMAKE_ANDROID_FILE that is included in CMakeLists.txt # # The CMAKE_ANDROID_FILE defines library/include directories for # libraries provided by somewhere in Android Root # rm -f ${CMAKE_ANDROID_FILE} || true cp -f ${CMAKE_ANDROID_FILE_TEMPLATE} ${CMAKE_ANDROID_FILE} sed_in_cmake_android "android_src_root_dir" ${ANDROID_ROOTDIR} ${CMAKE_ANDROID_FILE} # libraries that libwebsockets would depend on local libs=("libssl" "libcrypto" "libcap") # Android components that provide the "libs" above local components=("external/boringssl" "external/libcap") build_prerequisites "${components[@]}" for lib in ${libs[@]}; do local libfile_path=$(find_lib_path $lib) local libpath=$(dirname ${libfile_path}) libpath=$(remove_trailing_slash $libpath) str_to_replae="build_""$lib""_dir" sed_in_cmake_android "$str_to_replae" $libpath ${CMAKE_ANDROID_FILE} done } # create CMakeAndroidLists.txt create_android_list extension=$(date | md5sum | cut -d ' ' -f 1) cp -f $CMAKE_LIST_FILE $CMAKE_LIST_FILE.$extension # make CMakeLists.txt buildable sed -i 's/DO-NOT-BUILD-ME-AS-IS//g' ${CMAKE_ANDROID_FILE} # replace CHECK_FUNCTION_EXISTS with check_function_exists sed -i 's/CHECK_FUNCTION_EXISTS/check_function_exists/g' $CMAKE_LIST_FILE # run cmake to configure rm -fr $BUILD_DIR || true LIBWEBSOCKETS_SRC_ROOT=$MY_LOCATION mkdir -p $BUILD_DIR if [[ $debug_mode == "true" ]]; then pushd $BUILD_DIR cmake VERBOSE=1 .. popd else (pushd $BUILD_DIR > /dev/null 2>&1; cmake .. > /dev/null 2>&1; popd > /dev/null 2>&1) fi cp -f $BUILD_DIR/lws_config.h $LIBWEBSOCKETS_SRC_ROOT/include cp -f $BUILD_DIR/lws_config_private.h $LIBWEBSOCKETS_SRC_ROOT/include # clean up if [[ $debug_mode != "true" ]]; then rm -fr $BUILD_DIR || true rm -f $CMAKE_ANDROID_FILE || true mv -f $CMAKE_LIST_FILE.$extension $CMAKE_LIST_FILE fi