blob: c7cc6833c2357cbc39c65e98adcdd06f43257002 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#!/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
|