Make text selection feature available on desktop builds.
[platform/framework/web/chromium-efl.git] / tizen_src / build / common.sh
1 #!/bin/bash
2
3 export SCRIPTDIR=$(readlink -e $(dirname $0))
4 export TOPDIR=$(readlink -f "${SCRIPTDIR}/../..")
5 export CHROME_SRC="${TOPDIR}"
6
7 function getHostOs() {
8   echo $(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')
9 }
10
11 function getHostArch() {
12   echo $(uname -m | sed -e \
13         's/i.86/ia32/;s/x86_64/x64/;s/amd64/x64/;s/arm.*/arm/;s/i86pc/ia32/;s/aarch64/arm64/')
14 }
15
16 function getPythonVersion() {
17   echo $(python --version  2>&1 | sed -e 's/Python \([0-9]\+\.[0-9]\+\)\.[0-9]\+/\1/')
18 }
19
20 function setIfUndef() {
21     eval original=\$$1
22     new=$2
23     if [ -n "$original" ]; then
24         echo $original
25     else
26         echo $new
27     fi
28 }
29
30
31 function hostBuldScriptUsage() {
32 cat << EOF
33 usage: $1 [OPTIONS]
34
35 Build non gbs version of chromium-efl
36
37 OPTIONS:
38    -h, --help            Show this message
39    --build-ewk-unittests Build ewk unittests
40    --ccache              Configure ccache installed in your system
41    --clang               Use chromium's clang compiler to build the sources
42    --no-content-shell    Don't build content_shell application
43    --debug               Build debug version of chromium-efl (out.${host_arch}/Debug instead of out.${host_arch}/Release)
44    -jN                   Set number of jobs, just like with make or ninja
45    --skip-gyp            Skip restore_gyp, jhbuild and gyp_chromium steps
46    --skip-ninja          Skip ninja step
47    --xwalk               Build crosswalk and friends
48
49 examples:
50 $0 --skip-gyp
51 $0 --skip-gyp --ccache
52 $0 --skip-ninja
53 EOF
54   exit
55 }
56
57 function parseHostBuildScriptParams() {
58
59   export SKIP_GYP=0
60   export USE_CCACHE=0
61   export USE_CLANG=0
62   export FORCE_JHBUILD=0
63   export SKIP_NINJA=0
64   export BUILD_EWK_UNITTESTS=0
65   export BUILD_CONTENT_SHELL=1
66   export BUILD_XWALK=0
67   export BUILD_SUBDIRECTORY=Release
68   export COMPONENT_BUILD=0
69
70   local platform="$1"
71   shift
72
73   while [[ $# > 0 ]]; do
74     case "$1" in
75       -h|--help)
76         hostBuldScriptUsage ${0}
77         ;;
78       --skip-gyp)
79         export SKIP_GYP=1
80         ;;
81       --ccache)
82         echo using ccache
83         export USE_CCACHE=1
84         source $TOPDIR/tizen_src/build/ccache_env.sh ${platform}
85         ;;
86       --clang)
87         export USE_CLANG=1
88         ;;
89       --no-content-shell)
90         export BUILD_CONTENT_SHELL=0
91         ;;
92       --force-jhbuild)
93         export FORCE_JHBUILD=1
94         ;;
95       --skip-ninja)
96         export SKIP_NINJA=1
97         ;;
98       --build-ewk-unittests)
99         export BUILD_EWK_UNITTESTS=1
100         ;;
101       --debug)
102         export BUILD_SUBDIRECTORY="Debug"
103         ;;
104       --xwalk)
105         export BUILD_XWALK=1
106         ;;
107       --component-build)
108         export COMPONENT_BUILD=1
109         ;;
110       -j*)
111         export JOBS="$1"
112         ;;
113       *)
114         echo "Unknown argument: $1"
115         exit 1
116         ;;
117     esac
118     shift;
119   done
120 }
121
122 function hostGypChromiumEfl() {
123   if [[ $SKIP_GYP == 0 ]]; then
124     local XWALK_ARG=""
125     local COMPONENT_ARG=""
126     if [[ $BUILD_XWALK == 1 ]]; then
127       XWALK_ARG="--xwalk"
128     fi
129     if [[ $COMPONENT_BUILD == 1 ]]; then
130       COMPONENT_ARG="-Dcomponent=shared_library"
131     fi
132     ${TOPDIR}/tizen_src/build/gyp_chromiumefl.sh \
133       $XWALK_ARG \
134       $COMPONENT_ARG \
135       -Dedje_dir="out.$(getHostArch)/${BUILD_SUBDIRECTORY}/resources" \
136       $@
137   fi
138 }
139
140 function hostNinja() {
141   if [[ $SKIP_NINJA == 0 ]]; then
142     TARGETS="chromium-ewk efl_webprocess efl_webview_app ubrowser"
143     if [[ $BUILD_EWK_UNITTESTS == 1 ]]; then
144       TARGETS="$TARGETS ewk_unittests"
145     fi
146     if [[ $BUILD_CONTENT_SHELL == 1 ]]; then
147       TARGETS="$TARGETS content_shell dump_syms minidump_stackwalk"
148     fi
149     if [[ $BUILD_XWALK == 1 ]]; then
150       TARGETS="$TARGETS xwalk"
151     fi
152     BUILDDIR=${GYP_GENERATOR_OUTPUT}/${BUILD_SUBDIRECTORY}
153     ninja -C $BUILDDIR ${JOBS} ${TARGETS}
154   fi
155 }
156
157 function error_report() {
158   echo "Error: File:$1 Line:$2"
159   exit 1
160 }
161
162 function findElementInArray() {
163   local elm
164   for elm in "${@:2}"; do
165     [[ "$elm" = "$1" ]] && return 0;
166   done
167   return 1;
168 }
169
170 function setupAndExecuteTargetBuild() {
171
172   local platform="$1"
173   shift
174
175   local PROFILE
176   local ARCHITECTURE
177   local CONF_FLAG
178   local SPEC_FILE="chromium-efl.spec"
179   local -a ARGS
180
181   # "|| :" means "or always succeeding built-in command"
182   PROFILE=$(echo "$@" | grep -Po "(?<=\-P\s)[^\s]*" || :)
183   ARCHITECTURE=$(echo "$@" | grep -Po "(?<=\-A\s)[^\s]*" || :)
184
185   if [ "$PROFILE" == "" ]; then
186     if [[ $platform == "mobile" ]]; then
187       PROFILE=tzmb_v3.0_arm64-wayland
188     elif [[ $platform == "mobile_emulator" ]]; then
189       PROFILE=tzmb_v3.0_emulator-wayland
190     elif [[ $platform == "tv" ]]; then
191       PROFILE=tztv_v3.0_arm-wayland
192     elif [[ $platform == "tv_emulator" ]]; then
193       PROFILE=tztv_v3.0_emulator-wayland
194     else
195       echo "Cannot set default PROFILE for platform=${platform}"
196       exit 1
197     fi
198   fi
199   echo "Set the profile : $PROFILE"
200
201   if [ "$ARCHITECTURE" == "" ]; then
202     if [[ $platform == "mobile" ]]; then
203       ARCHITECTURE=aarch64
204     elif [[ $platform == "mobile_emulator" ]]; then
205       ARCHITECTURE=i586
206     elif [[ $platform == "tv" ]]; then
207       ARCHITECTURE=armv7l
208     elif [[ $platform == "tv_emulator" ]]; then
209       ARCHITECTURE=i586
210     else
211       echo "Cannot set default ARCHITECTURE for platform=${platform}"
212       exit 1
213     fi
214   fi
215   echo "Set the architecture : $ARCHITECTURE"
216
217   if [ "$USE_GLOBAL_GBS_CONF" == "" ]; then
218     CONF_FLAG="--conf ${SCRIPTDIR}/gbs.conf"
219   fi
220
221   EXTRA_PACK_OPTS=""
222   if [ "$PROFILE" == "tztv_v2.2.1_prehawk" ]; then
223     EXTRA_PACK_OPTS="--extra-packs python-base-x86-arm,python-x86-arm,python-xml-x86-arm"
224   fi
225
226   if [ "$(echo "${PROFILE}" | grep -Po "v3.0")" != "" ]; then
227     prepareTizen3Build $PROFILE
228   fi
229
230   local count=0
231   local exclusive_options=0
232   while [[ $# > 0 ]]; do
233     count=$(( $count + 1 ))
234     case "$1" in
235     --debug)
236         ARGS[$count]=--define
237         count=$(( $count + 1 ))
238         ARGS[$count]="_debug_mode 1"
239     ;;
240     --skip-ninja)
241         ARGS[$count]=--define
242         count=$(( $count + 1 ))
243         ARGS[$count]="_skip_ninja 1"
244     ;;
245     --skip-gyp)
246         ARGS[$count]=--define
247         count=$(( $count + 1 ))
248         ARGS[$count]="_skip_gyp 1"
249     ;;
250     --xwalk)
251         ARGS[$count]=--define
252         count=$(( $count + 1 ))
253         ARGS[$count]="build_xwalk 1"
254     ;;
255     --component-build)
256         ARGS[$count]=--define
257         count=$(( $count + 1 ))
258         ARGS[$count]="component_build 1"
259     ;;
260     --libs)
261         target="libs"
262         exclusive_options=$(( $exclusive_options + 1 ))
263     ;;
264     --crosswalk-bin)
265         target="crosswalk-bin"
266         exclusive_options=$(( $exclusive_options + 1 ))
267     ;;
268     --gbs-debug)
269         ARGS[$count]=--debug
270     ;;
271     *)
272       ARGS[$count]="$1"
273     ;;
274     esac
275     shift;
276   done
277
278   if [[ $exclusive_options -gt 1 ]]; then
279     echo "ERROR: --libs and --crosswalk-bin are mutually exclusive parameters."
280     exit 1
281   fi
282
283   cd $TOPDIR
284   rm -f packaging
285   ln -sf tizen_src/packaging packaging
286
287   if [ "$target" == "libs" ]; then
288     SPEC_FILE="chromium-efl-libs.spec"
289   elif [ "$target" == "crosswalk-bin" ]; then
290     SPEC_FILE="crosswalk-bin.spec"
291   fi
292
293   gbs $CONF_FLAG build -P $PROFILE --spec $SPEC_FILE --include-all -A $ARCHITECTURE --incremental "${ARGS[@]}" $BUILD_CONF_OPTS $EXTRA_PACK_OPTS
294 }
295
296 function prepareTizen3Build() {
297   local PROFILE=$1
298   BUILD_CONF_OPTS=""
299
300   # In case of '_rpmlint 1', build.conf of gbs repo will be used, enabling rpmlint.
301   # Otherwise, locally prepared build.conf will be used, disabling rpmlint.
302   local PREVIOUS_BUILD_CONF_PATH=""
303   local LOCAL_BUILD_CONF_PATH=""
304
305   if [ "$PROFILE" == "tztv_v3.0_arm-wayland" ]; then
306     PREVIOUS_BUILD_CONF_PATH="/var/tmp/$USER-gbs/tztv_v3.0_arm-walynad.conf"
307     LOCAL_BUILD_CONF_PATH="$TOPDIR/tizen_src/build/tztv_v3.0_arm-wayland.conf"
308   elif [ "$PROFILE" == "tzmb_v3.0_arm-wayland" ]; then
309     PREVIOUS_BUILD_CONF_PATH="/var/tmp/$USER-gbs/tzmb_v3.0_arm-walynad.conf"
310     LOCAL_BUILD_CONF_PATH="$TOPDIR/tizen_src/build/tzmb_v3.0_arm-wayland.conf"
311   elif [ "$PROFILE" == "tzmb_v3.0_arm64-wayland" ]; then
312     PREVIOUS_BUILD_CONF_PATH="/var/tmp/$USER-gbs/tzmb_v3.0_arm64-walynad.conf"
313     LOCAL_BUILD_CONF_PATH="$TOPDIR/tizen_src/build/tzmb_v3.0_arm64-wayland.conf"
314   fi
315
316   local PREVIOUS_RPMLINT="!rpmlint"
317   if [ ! -f "$PREVIOUS_BUILD_CONF_PATH" ]; then
318     PREVIOUS_RPMLINT=""
319   elif [ "$(grep -Po "\!rpmlint" "$PREVIOUS_BUILD_CONF_PATH" | uniq -d)" != "!rpmlint" ]; then
320     PREVIOUS_RPMLINT="rpmlint"
321   fi
322
323   if [ "$LOCAL_BUILD_CONF_PATH" != "" ]; then
324     BUILD_CONF_OPTS="-D $LOCAL_BUILD_CONF_PATH"
325   fi
326
327   if [ "$(echo "$@" | grep -Po "_rpmlint\ 1")" == "" ]; then
328     if [ "$PREVIOUS_RPMLINT" == "rpmlint" ]; then
329       BUILD_CONF_OPTS+=" --clean"
330     fi
331   else
332     BUILD_CONF_OPTS=""
333     if [ "$PREVIOUS_RPMLINT" == "!rpmlint" ]; then
334       BUILD_CONF_OPTS="--clean"
335     fi
336   fi
337 }