Enable chrome with aura for tizen
[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 export LATEST_TIZEN_VERSION=7.0
7 export DEFAULT_TIZEN_VERSION=$LATEST_TIZEN_VERSION
8
9 if [ "$(echo "$@" | grep -e "--tizen")" != "" ]; then
10   tizen_version=$(echo $@ | sed -e 's#.*--tizen_\([0-9.]*\).*#\1#')
11   DEFAULT_TIZEN_VERSION=$tizen_version
12 fi
13
14 # Generate gbs.conf
15 export PUBLIC_REPO_VERSION=
16 if [ "$DEFAULT_TIZEN_VERSION" != "${LATEST_TIZEN_VERSION}" ]; then
17   PUBLIC_REPO_VERSION=$DEFAULT_TIZEN_VERSION-
18 fi
19 sed -e "s/@PUBLIC_REPO_VERSION@/$PUBLIC_REPO_VERSION/g" \
20     -e "s/@TIZEN_VERSION@/$DEFAULT_TIZEN_VERSION/g" \
21     tizen_src/build/gbs.conf.in > tizen_src/build/gbs.conf
22
23 function getSystemDeps() {
24   local host_arch=$(getHostArch)
25   local platform=$1
26   local system_deps="--system-libraries
27                      libevent
28                      libpng
29                      libxml
30                      libxslt
31                      zlib
32                     "
33   # Tizen profile
34   if [ "$platform" != "desktop" ]; then
35     # Emulator profile
36     if [ "$host_arch" == "x86" -o "$host_arch" == "x64" ]; then
37       system_deps+="libjpeg
38                    "
39     fi
40     # Non product tv profiles on tizen 6.0
41     if [ "$platform" != "tv" -a "$DEFAULT_TIZEN_VERSION" == "6.0" ]; then
42       system_deps+="icu
43                    "
44     fi
45   fi
46   echo $system_deps
47 }
48
49 function getHostOs() {
50   echo $(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')
51 }
52
53 function getHostArch() {
54   echo $(uname -m | sed -e \
55         's/i.86/x86/;s/x86_64/x64/;s/amd64/x64/;s/arm.*/arm/;s/i86pc/x86/;s/aarch64/arm64/')
56 }
57
58 function getGccVersion() {
59   echo $(gcc -dumpversion)
60 }
61
62 function getPythonVersion() {
63   echo $(python3 --version  2>&1 | sed -e 's/Python \([0-9]\+\.[0-9]\+\)\.[0-9]\+/\1/')
64 }
65
66 function setIfUndef() {
67     eval original=\$$1
68     new=$2
69     if [ -n "$original" ]; then
70         echo $original
71     else
72         echo $new
73     fi
74 }
75
76 function hostBuldScriptUsage() {
77 cat << EOF
78 usage: $1 [OPTIONS]
79
80 Build non gbs version of chromium-efl
81
82 OPTIONS:
83    -h, --help            Show this message
84    --build-ewk-unittests Build ewk unittests
85    --ccache              Configure ccache installed in your system
86    --clang               Use chromium's clang compiler to build the sources
87    --no-content-shell    Don't build content_shell application
88    --debug               Build debug version of chromium-efl (out.${host_arch}/Debug instead of out.${host_arch}/Release)
89    -jN                   Set number of jobs, just like with make or ninja
90    --skip-ninja          Skip ninja step
91
92 examples:
93 $0 --ccache
94 $0 --skip-ninja
95 EOF
96   exit
97 }
98
99 function undoReplacedGn() {
100   local system_deps=$(getSystemDeps $1)
101   if [ "$system_deps" != "" ]; then
102     echo "** use system lib : undo **"
103     # Restore gn files to their original states not to mess up the tree permanently.
104     $TOPDIR/build/linux/unbundle/replace_gn_files.py --undo $system_deps icu
105   fi
106 }
107
108 function parseHostBuildScriptParams() {
109   trap 'undoReplacedGn $1' SIGINT
110   export USE_CCACHE=0
111   export USE_CLANG=1
112   export FORCE_JHBUILD=0
113   export SKIP_NINJA=0
114   export BUILD_EWK_UNITTESTS=0
115   export BUILD_CONTENT_SHELL=1
116   export BUILD_SUBDIRECTORY=Release
117   export COMPONENT_BUILD=0
118
119   local platform="$1"
120   shift
121
122   while [[ $# > 0 ]]; do
123     case "$1" in
124       -h|--help)
125         hostBuldScriptUsage ${0}
126         ;;
127       --skip-gn)
128         export SKIP_GN=1
129         ;;
130       --ccache)
131         echo using ccache
132         export USE_CCACHE=1
133         source $TOPDIR/tizen_src/build/ccache_env.sh ${platform}
134         ;;
135       --gcc)
136         export USE_CLANG=0
137         ;;
138       --no-content-shell)
139         export BUILD_CONTENT_SHELL=0
140         ;;
141       --force-jhbuild)
142         export FORCE_JHBUILD=1
143         ;;
144       --skip-ninja)
145         export SKIP_NINJA=1
146         ;;
147       --build-ewk-unittests)
148         export BUILD_EWK_UNITTESTS=1
149         ;;
150       --debug)
151         export BUILD_SUBDIRECTORY="Debug"
152         ;;
153       --component-build)
154         export COMPONENT_BUILD=1
155         ;;
156       -j*)
157         export JOBS="$1"
158         ;;
159       *)
160         echo "Unknown argument: $1"
161         exit 1
162         ;;
163     esac
164     shift;
165   done
166 }
167
168 function hostGnChromiumEfl() {
169   if [[ $SKIP_GN != 1 ]]; then
170     local XWALK_ARG=""
171     local COMPONENT_ARG=""
172     if [[ $COMPONENT_BUILD == 1 ]]; then
173       COMPONENT_ARG="component=shared_library"
174     fi
175     ${TOPDIR}/tizen_src/build/gn_chromiumefl.sh \
176       $XWALK_ARG \
177       $COMPONENT_ARG \
178       $@
179   fi
180 }
181
182 function hostNinja() {
183   if [[ $SKIP_NINJA == 0 ]]; then
184     TARGETS="chromium-ewk efl_webprocess efl_webview_app ubrowser content_shell chrome"
185     if [[ $BUILD_EWK_UNITTESTS == 1 ]]; then
186       TARGETS="$TARGETS ewk_unittests"
187     fi
188     if [[ $BUILD_CONTENT_SHELL == 1 ]]; then
189       TARGETS="$TARGETS content_shell dump_syms minidump_stackwalk"
190     fi
191     if [[ $BUILD_CHROMEDRIVER == 1 ]]; then
192       TARGETS="$TARGETS chromedriver"
193     fi
194     export BUILD_SUBDIRECTORY=""
195     BUILDDIR=${GN_GENERATOR_OUTPUT}/${BUILD_SUBDIRECTORY}
196     ninja -C $BUILDDIR ${JOBS} ${TARGETS}
197   fi
198   undoReplacedGn $1
199 }
200
201 function error_report() {
202   echo "Error: File:$1 Line:$2"
203   exit 1
204 }
205
206 function findElementInArray() {
207   local elm
208   for elm in "${@:2}"; do
209     [[ "$elm" = "$1" ]] && return 0;
210   done
211   return 1;
212 }
213
214 function setupAndExecuteTargetBuild() {
215   local platform="$1"
216   shift
217
218   local PROFILE
219   local ARCHITECTURE
220   local CONF_FLAG
221   local -a ARGS
222
223   local exclusive_options=0
224   local RPMLINT=0
225   local NOINIT=0
226   local MIRROR=0
227   local LOCAL_BUILD=1
228   local RELEASE_BUILD=0
229
230   # "|| :" means "or always succeeding built-in command"
231   PROFILE=$(echo "$@" | grep -Po "(?<=\-P\s)[^\s]*" | head -1 || :)
232   ARCHITECTURE=$(echo "$@" | grep -Po "(?<=\-A\s)[^\s]*" | head -1 || :)
233   GBS_ROOT=$(echo "$@" | grep -Po "(?<=\-B\s)[^\s]*" | head -1 || :)
234
235   while [[ $# > 0 ]]; do
236     case "$1" in
237     --debug)
238         ARGS+=(--define "_debug_mode 1")
239     ;;
240     --skip-ninja)
241         ARGS+=(--define "_skip_ninja 1")
242     ;;
243     --skip-gn)
244         ARGS+=(--define "_skip_gn 1")
245     ;;
246     --component-build)
247         ARGS+=(--define "component_build 1")
248     ;;
249     --disable-wrtjs)
250         ARGS+=(--define "_disable_wrt_js 1")
251     ;;
252     --gbs-debug)
253         ARGS+=(--debug)
254     ;;
255     --icu=*)
256         ARGS+=(--define "_use_system_icu $(echo $1 | sed -e 's/--icu=//g')")
257     ;;
258     --rpmlint)
259         RPMLINT=1
260     ;;
261     --nodebug)
262         ARGS+=(--define "_nodebug 1")
263     ;;
264     --noinit)
265         NOINIT=1
266         ARGS+=("$1")
267     ;;
268     --mirror)
269         MIRROR=1
270     ;;
271     --release)
272         LOCAL_BUILD=0
273         RELEASE_BUILD=1
274     ;;
275     --gcc)
276         LOCAL_BUILD=0
277         ARGS+=(--define "_clang 0")
278     ;;
279     --clang)
280         LOCAL_BUILD=0
281         ARGS+=(--define "_clang 1")
282     ;;
283     --standard*)
284         PROFILE=tz_$(echo $1 | sed 's/--//g')
285     ;;
286     --emulator*)
287         PROFILE=tz_$(echo $1 | sed 's/--//g')
288     ;;
289     --tizen*)
290     ;;
291     *)
292       ARGS+=("$1")
293     ;;
294     esac
295     shift;
296   done
297   if [ "$LOCAL_BUILD" == "1" ]; then
298     ARGS+=(--define "_local_build 1")
299     local _jobs=$((`/usr/bin/getconf _NPROCESSORS_ONLN` / 2 - `ps -ef | grep " ninja " | wc -l` -1))
300     local _smp_mflags=-j$(if ((${_jobs} > 10)); then echo ${_jobs}; else echo 10; fi)
301     ARGS+=(--define "_costomized_smp_mflags $_smp_mflags")
302     # Default values
303     ARGS+=(--define "_clang 1")
304   fi
305
306   if [ "$RELEASE_BUILD" == "1" ]; then
307     ARGS+=(--define "_local_build 0")
308     if [[ $platform == "tv" ]]; then
309       ARGS+=(--define "_clang 1")
310     else
311       ARGS+=(--define "_clang 0")
312       ARGS+=(--define "_no_lto 0")
313     fi
314   fi
315
316   if [ "$PROFILE" == "" ]; then
317     if [[ $platform == "tv" ]]; then
318       PROFILE=tztv_${DEFAULT_TIZEN_VERSION}_arm-pontusm
319     elif [[ $platform == "da" ]]; then
320       PROFILE=tzda_${DEFAULT_TIZEN_VERSION}_arm-kantm
321     elif [[ $platform == "wearable" ]]; then
322       PROFILE=tzwr_5.5_arm-spin
323     else
324       echo "Cannot set default PROFILE for platform=${platform}"
325       exit 1
326     fi
327   fi
328
329   if [ "$MIRROR" == "1" ]; then
330     PROFILE=${PROFILE}_mirror
331   fi
332
333   echo "Set the profile : $PROFILE"
334
335   if [ "$ARCHITECTURE" == "" ]; then
336     ARCHITECTURE=armv7l
337   fi
338   echo "Set the architecture : $ARCHITECTURE"
339
340   if [ "$(echo "${PROFILE}" | grep -P "tz_standard")" != "" -a "$NOINIT" == 0 ]; then
341     processRpmlintOption $PROFILE $RPMLINT
342   fi
343   local BRANCH=$(echo $(basename $(git symbolic-ref HEAD)))
344   if [ "$(echo $BRANCH | grep dev)" != "" ]; then
345     BRANCH=dev
346   elif [ "$(echo $BRANCH | grep beta)" != "" ]; then
347     BRANCH=beta
348   else
349     BRANCH=release
350   fi
351   local CHROMIUM_VERSION=$(echo $(head -n 1 chrome/VERSION) | sed -e 's/MAJOR=//g')
352
353   local GBS_ROOT_OPT=
354   if [ "$USE_GLOBAL_GBS_CONF" == "" ]; then
355     CONF_FLAG="--conf ${SCRIPTDIR}/gbs.conf"
356     if [ "$GBS_ROOT" == "" ]; then
357       GBS_ROOT_OPT="-B ~/GBS-ROOT-M${CHROMIUM_VERSION}-${PROFILE^^}-TIZEN_${DEFAULT_TIZEN_VERSION^^}-${BRANCH^^}"
358     else
359       GBS_ROOT_OPT="-B $GBS_ROOT"
360     fi
361   fi
362
363   processICU initialize_icu
364   gbs $CONF_FLAG build -P $PROFILE --include-all -A $ARCHITECTURE "${ARGS[@]}" $BUILD_CONF_OPTS --incremental $GBS_ROOT_OPT
365
366   undoReplacedGn $platform
367   processICU restore_icu
368 }
369
370 function processICU() {
371   local ICU_PATH="$TOPDIR/third_party/icu/source"
372   local ICU_REPLACE_PATH="$TOPDIR/third_party/icu/source_replace"
373
374   if [ "$1" == "replace_icu" ]; then
375     if [ ! -e $ICU_REPLACE_PATH ] && [ -e $ICU_PATH ]; then
376       echo "** third_party/icu/source is replaced to use system icu."
377       mv $ICU_PATH $ICU_REPLACE_PATH
378     fi
379   elif [ "$1" == "restore_icu" ]; then
380     if [ -e $ICU_REPLACE_PATH ] && [ ! -e $ICU_PATH ]; then
381       echo "** third_party/icu/source is restored."
382       mv $ICU_REPLACE_PATH $ICU_PATH
383     fi
384   elif [ "$1" == "initialize_icu" ]; then
385     if [ -e $ICU_REPLACE_PATH ]; then
386       echo "** third_party/icu/source is initialized."
387       rm -rf $ICU_PATH
388       mv $ICU_REPLACE_PATH $ICU_PATH
389     fi
390   fi
391 }
392
393 function processRpmlintOption() {
394   local PROFILE=$1
395   local RPMLINT=$2
396   local URL_TARGET=
397   export BUILD_CONF_OPTS=
398
399   echo "** Process rpmlint option"
400
401   local PREVIOUS_RPMLINT="!rpmlint"
402   if [ ! -f "$PREVIOUS_BUILD_CONF_PATH" ]; then
403     # Never built before
404     PREVIOUS_RPMLINT=""
405   elif [ "$(grep -Po "\!rpmlint" "$PREVIOUS_BUILD_CONF_PATH" | uniq -d)" != "!rpmlint" ]; then
406     # Once built with rpmlint
407     PREVIOUS_RPMLINT="rpmlint"
408   fi
409
410   # Disable rpmlint
411   if [ "$RPMLINT" == 0 ]; then
412     echo "** Disable rpmlint"
413     BUILD_CONF_DIR=$SCRIPTDIR/build_conf
414     rm -rf $BUILD_CONF_DIR
415     mkdir $BUILD_CONF_DIR
416     URL_TARGET=$(echo $PROFILE | sed -e 's#.*\.[0-9]*_\([-a-zA-Z0-9]*\).*#\1#;s/tz_//g')
417     # The latest version doesn't have tizen version in snapshot repository url.
418     if [ "$DEFAULT_TIZEN_VERSION" == "${LATEST_TIZEN_VERSION}" ]; then
419       URL_TIZEN_VERSION=
420     else
421       URL_TIZEN_VERSION=$DEFAULT_TIZEN_VERSION-
422     fi
423     REPO=http://download.tizen.org/snapshots/tizen/$URL_TIZEN_VERSION$platform/latest/repos/$URL_TARGET/packages/repodata/
424     echo "** Repo : $REPO"
425     wget $REPO -O $BUILD_CONF_DIR/index.html > /dev/null 2>&1
426     BUILD_CONF_GZ=$(grep "build.conf.gz" $BUILD_CONF_DIR/index.html | sed -e 's#.*\=\"\(.*\)\".*#\1#')
427     BUILD_CONF=$(basename $BUILD_CONF_GZ .gz)
428     wget $REPO$BUILD_CONF_GZ -P $BUILD_CONF_DIR > /dev/null 2>&1
429     if [ ! -f "$BUILD_CONF_DIR/$BUILD_CONF_GZ" ]; then
430       echo "It's failed to donwload build.conf. Please contact system administrator."
431       exit 1
432     fi
433     gunzip $BUILD_CONF_DIR/$BUILD_CONF_GZ
434     sed -i 's/rpmlint-mini\ rpmlint-tizen/!rpmlint-mini\ !rpmlint-tizen/g' $BUILD_CONF_DIR/$BUILD_CONF
435     if [ "$DEFAULT_TIZEN_VERSION" == "6.0" ]; then
436       sed -i 's/tizen_version_major 5/tizen_version_major 6/g' $BUILD_CONF_DIR/$BUILD_CONF
437       sed -i 's/tizen_version_minor 5/tizen_version_minor 0/g' $BUILD_CONF_DIR/$BUILD_CONF
438     fi
439     BUILD_CONF_OPTS="-D $BUILD_CONF_DIR/$BUILD_CONF"
440     if [ "$PREVIOUS_RPMLINT" == "rpmlint" ]; then
441       echo "** Once built with rpmlint"
442       BUILD_CONF_OPTS+=" --clean"
443     fi
444   else # Enable rpmlint
445     echo "** Enable rpmlint"
446     BUILD_CONF_OPTS=""
447     if [ "$PREVIOUS_RPMLINT" == "!rpmlint" ]; then
448       BUILD_CONF_OPTS="--clean"
449     fi
450   fi
451 }