You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.8 KiB
136 lines
3.8 KiB
#!/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
|