blob: c7cc6833c2357cbc39c65e98adcdd06f43257002 [file] [log] [blame]
Steve Kim6379e252020-04-08 14:45:01 -07001#!/bin/bash
2#
3# lws_config{,_private}.h are created by running cmake
4# We are not allowed to use cmake to do the Android build
5# These files for now have to be created offline
6#
7debug_mode="false"
8if [[ $1 == "debug" ]] || [[ $1 == "-d" ]]; then
9 debug_mode="true"
10fi
11
12function remove_trailing_slash {
13 if [[ $1 == "/" ]]; then
14 echo $i
15 else
16 echo ${1%/}
17 fi
18}
19
20set -o errexit
21MY_LOCATION="$( cd -P "$( dirname "$SOURCE" )" >/dev/null 2>&1 && pwd )"
22MY_LOCATION=$(remove_trailing_slash $MY_LOCATION)
23CMAKE_LIST_FILE="$MY_LOCATION/CMakeLists.txt"
24
25ANDROID_ROOTDIR="$(realpath $MY_LOCATION/../..)"
26ANDROID_ROOTDIR=$(remove_trailing_slash $ANDROID_ROOTDIR)
27
28BUILD_DIR=$MY_LOCATION/build_dir
29
30# included by CMakeLists.txt
31CMAKE_ANDROID_FILE="$MY_LOCATION/CMakeAndroidLists.txt"
32
33# used to generate CMAKE_ANDROID_FILE
34CMAKE_ANDROID_FILE_TEMPLATE="$MY_LOCATION/CMakeAndroidLists.txt.template"
35
36function find_lib_path() {
37 # find the library in the out directory, and returns the directory's absolute path
38 #
39 # $1 -> libname
40 # $2 -> optional, lib file extension
41 local libext=${2:-".a"}
42 local libname="$1$libext"
43 local res=`find ${ANDROID_ROOTDIR}/out -type f | egrep "$libname$" | egrep "$(uname -m)" | egrep -i "$(uname -s)"`
44 echo $res
45}
46
47function sed_in_cmake_android() {
48 # replace in-place 'from' with 'to' in CMAKE_ANDROID_FILE
49 #
50 # $1: from
51 # $2: to
52 # $3: CMAKE_ANDROID_FILE
53 #
54 local cmake_android_file=${3:-"${CMAKE_ANDROID_FILE}"}
55 local from="____""$1""____"
56 local to=$(echo $2 | sed -r 's/\//\\\//g')
57 if [[ $debug_mode == "true" ]]; then
58 echo "${FUNCNAME[0]} replaces in $cmake_android_file "
59 echo " " $from
60 echo "with " $to
61 fi
62 sed -i "s/$from/$to/g" $cmake_android_file
63}
64
Steve Kim4e3c3e52020-04-08 14:50:59 -070065function build_prerequisites() {
66 local modules=("$@")
67 (
68 pushd ${ANDROID_ROOTDIR}
69 source ${ANDROID_ROOTDIR}/build/envsetup.sh
70 for mod in "${modules[@]}"; do
71 mmm $mod
72 done
73 popd
74 )
75}
76
Steve Kim6379e252020-04-08 14:45:01 -070077function create_android_list() {
78 #
79 # by filling out the form in CMAKE_ANDROID_FILE_TEMPLATE,
80 # create CMAKE_ANDROID_FILE that is included in CMakeLists.txt
81 #
Steve Kim4e3c3e52020-04-08 14:50:59 -070082 # The CMAKE_ANDROID_FILE defines library/include directories for
Steve Kim6379e252020-04-08 14:45:01 -070083 # libraries provided by somewhere in Android Root
84 #
85 rm -f ${CMAKE_ANDROID_FILE} || true
86 cp -f ${CMAKE_ANDROID_FILE_TEMPLATE} ${CMAKE_ANDROID_FILE}
87 sed_in_cmake_android "android_src_root_dir" ${ANDROID_ROOTDIR} ${CMAKE_ANDROID_FILE}
Steve Kim4e3c3e52020-04-08 14:50:59 -070088 # libraries that libwebsockets would depend on
89 local libs=("libssl" "libcrypto" "libcap")
90 # Android components that provide the "libs" above
91 local components=("external/boringssl" "external/libcap")
92 build_prerequisites "${components[@]}"
Steve Kim6379e252020-04-08 14:45:01 -070093 for lib in ${libs[@]}; do
94 local libfile_path=$(find_lib_path $lib)
95 local libpath=$(dirname ${libfile_path})
96 libpath=$(remove_trailing_slash $libpath)
97 str_to_replae="build_""$lib""_dir"
98 sed_in_cmake_android "$str_to_replae" $libpath ${CMAKE_ANDROID_FILE}
99 done
100}
101
Steve Kim6379e252020-04-08 14:45:01 -0700102# create CMakeAndroidLists.txt
103create_android_list
104
105extension=$(date | md5sum | cut -d ' ' -f 1)
106cp -f $CMAKE_LIST_FILE $CMAKE_LIST_FILE.$extension
107
108# make CMakeLists.txt buildable
109sed -i 's/DO-NOT-BUILD-ME-AS-IS//g' ${CMAKE_ANDROID_FILE}
110
111# replace CHECK_FUNCTION_EXISTS with check_function_exists
112sed -i 's/CHECK_FUNCTION_EXISTS/check_function_exists/g' $CMAKE_LIST_FILE
113
114# run cmake to configure
115rm -fr $BUILD_DIR || true
116LIBWEBSOCKETS_SRC_ROOT=$MY_LOCATION
117mkdir -p $BUILD_DIR
118
119if [[ $debug_mode == "true" ]]; then
120 pushd $BUILD_DIR
121 cmake VERBOSE=1 ..
122 popd
123else
124 (pushd $BUILD_DIR > /dev/null 2>&1; cmake .. > /dev/null 2>&1; popd > /dev/null 2>&1)
125fi
126
127cp -f $BUILD_DIR/lws_config.h $LIBWEBSOCKETS_SRC_ROOT/include
128cp -f $BUILD_DIR/lws_config_private.h $LIBWEBSOCKETS_SRC_ROOT/include
129
130# clean up
131if [[ $debug_mode != "true" ]]; then
132 rm -fr $BUILD_DIR || true
133 rm -f $CMAKE_ANDROID_FILE || true
134 mv -f $CMAKE_LIST_FILE.$extension $CMAKE_LIST_FILE
135fi