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