[Product TV] Update gbs.conf with the official repos
[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=6.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 $(python --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"
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
229   # "|| :" means "or always succeeding built-in command"
230   PROFILE=$(echo "$@" | grep -Po "(?<=\-P\s)[^\s]*" | head -1 || :)
231   ARCHITECTURE=$(echo "$@" | grep -Po "(?<=\-A\s)[^\s]*" | head -1 || :)
232   GBS_ROOT=$(echo "$@" | grep -Po "(?<=\-B\s)[^\s]*" | head -1 || :)
233
234   while [[ $# > 0 ]]; do
235     case "$1" in
236     --debug)
237         ARGS+=(--define "_debug_mode 1")
238     ;;
239     --skip-ninja)
240         ARGS+=(--define "_skip_ninja 1")
241     ;;
242     --skip-gn)
243         ARGS+=(--define "_skip_gn 1")
244     ;;
245     --component-build)
246         ARGS+=(--define "component_build 1")
247     ;;
248     --disable-wrtjs)
249         ARGS+=(--define "_disable_wrt_js 1")
250     ;;
251     --gbs-debug)
252         ARGS+=(--debug)
253     ;;
254     --icu=*)
255         ARGS+=(--define "_use_system_icu $(echo $1 | sed -e 's/--icu=//g')")
256     ;;
257     --rpmlint)
258         RPMLINT=1
259     ;;
260     --nodebug)
261         ARGS+=(--define "_nodebug 1")
262     ;;
263     --noinit)
264         NOINIT=1
265         ARGS+=("$1")
266     ;;
267     --mirror)
268         MIRROR=1
269     ;;
270     --release)
271         LOCAL_BUILD=0
272         ARGS+=(--define "_local_build 0")
273         ARGS+=(--define "_clang 0")
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     if [[ $platform == "tv" ]]; then
304       ARGS+=(--define "_clang 0")
305     else
306       ARGS+=(--define "_clang 1")
307     fi
308   fi
309
310   if [ "$PROFILE" == "" ]; then
311     if [[ $platform == "tv" ]]; then
312       PROFILE=tztv_${DEFAULT_TIZEN_VERSION}_arm-nikem
313     elif [[ $platform == "da" ]]; then
314       PROFILE=tzda_${DEFAULT_TIZEN_VERSION}_arm-kantm
315     elif [[ $platform == "wearable" ]]; then
316       PROFILE=tzwr_5.5_arm-spin
317     else
318       echo "Cannot set default PROFILE for platform=${platform}"
319       exit 1
320     fi
321   fi
322
323   if [ "$MIRROR" == "1" ]; then
324     PROFILE=${PROFILE}_mirror
325   fi
326
327   echo "Set the profile : $PROFILE"
328
329   if [ "$ARCHITECTURE" == "" ]; then
330     ARCHITECTURE=armv7l
331   fi
332   echo "Set the architecture : $ARCHITECTURE"
333
334   if [ "$(echo "${PROFILE}" | grep -P "tz_standard")" != "" -a "$NOINIT" == 0 ]; then
335     processRpmlintOption $PROFILE $RPMLINT
336   fi
337   local BRANCH=$(echo $(basename $(git symbolic-ref HEAD)))
338   if [ "$(echo $BRANCH | grep dev)" != "" ]; then
339     BRANCH=dev
340   elif [ "$(echo $BRANCH | grep beta)" != "" ]; then
341     BRANCH=beta
342   else
343     BRANCH=release
344   fi
345   local CHROMIUM_VERSION=$(echo $(head -n 1 chrome/VERSION) | sed -e 's/MAJOR=//g')
346
347   local GBS_ROOT_OPT=
348   if [ "$USE_GLOBAL_GBS_CONF" == "" ]; then
349     CONF_FLAG="--conf ${SCRIPTDIR}/gbs.conf"
350     if [ "$GBS_ROOT" == "" ]; then
351       GBS_ROOT_OPT="-B ~/GBS-ROOT-M${CHROMIUM_VERSION}-${PROFILE^^}-TIZEN_${DEFAULT_TIZEN_VERSION^^}-${BRANCH^^}"
352     else
353       GBS_ROOT_OPT="-B $GBS_ROOT"
354     fi
355   fi
356
357   processICU initialize_icu
358   gbs $CONF_FLAG build -P $PROFILE --include-all -A $ARCHITECTURE "${ARGS[@]}" $BUILD_CONF_OPTS --incremental $GBS_ROOT_OPT
359
360   undoReplacedGn $platform
361   processICU restore_icu
362 }
363
364 function processICU() {
365   local ICU_PATH="$TOPDIR/third_party/icu/source"
366   local ICU_REPLACE_PATH="$TOPDIR/third_party/icu/source_replace"
367
368   if [ "$1" == "replace_icu" ]; then
369     if [ ! -e $ICU_REPLACE_PATH ] && [ -e $ICU_PATH ]; then
370       echo "** third_party/icu/source is replaced to use system icu."
371       mv $ICU_PATH $ICU_REPLACE_PATH
372     fi
373   elif [ "$1" == "restore_icu" ]; then
374     if [ -e $ICU_REPLACE_PATH ] && [ ! -e $ICU_PATH ]; then
375       echo "** third_party/icu/source is restored."
376       mv $ICU_REPLACE_PATH $ICU_PATH
377     fi
378   elif [ "$1" == "initialize_icu" ]; then
379     if [ -e $ICU_REPLACE_PATH ]; then
380       echo "** third_party/icu/source is initialized."
381       rm -rf $ICU_PATH
382       mv $ICU_REPLACE_PATH $ICU_PATH
383     fi
384   fi
385 }
386
387 function processRpmlintOption() {
388   local PROFILE=$1
389   local RPMLINT=$2
390   local URL_TARGET=
391   export BUILD_CONF_OPTS=
392
393   echo "** Process rpmlint option"
394
395   local PREVIOUS_RPMLINT="!rpmlint"
396   if [ ! -f "$PREVIOUS_BUILD_CONF_PATH" ]; then
397     # Never built before
398     PREVIOUS_RPMLINT=""
399   elif [ "$(grep -Po "\!rpmlint" "$PREVIOUS_BUILD_CONF_PATH" | uniq -d)" != "!rpmlint" ]; then
400     # Once built with rpmlint
401     PREVIOUS_RPMLINT="rpmlint"
402   fi
403
404   # Disable rpmlint
405   if [ "$RPMLINT" == 0 ]; then
406     echo "** Disable rpmlint"
407     BUILD_CONF_DIR=$SCRIPTDIR/build_conf
408     rm -rf $BUILD_CONF_DIR
409     mkdir $BUILD_CONF_DIR
410     URL_TARGET=$(echo $PROFILE | sed -e 's#.*\.[0-9]*_\([-a-zA-Z0-9]*\).*#\1#;s/tz_//g')
411     # The latest version doesn't have tizen version in snapshot repository url.
412     if [ "$DEFAULT_TIZEN_VERSION" == "${LATEST_TIZEN_VERSION}" ]; then
413       URL_TIZEN_VERSION=
414     else
415       URL_TIZEN_VERSION=$DEFAULT_TIZEN_VERSION-
416     fi
417     REPO=http://download.tizen.org/snapshots/tizen/$URL_TIZEN_VERSION$platform/latest/repos/$URL_TARGET/packages/repodata/
418     echo "** Repo : $REPO"
419     wget $REPO -O $BUILD_CONF_DIR/index.html > /dev/null 2>&1
420     BUILD_CONF_GZ=$(grep "build.conf.gz" $BUILD_CONF_DIR/index.html | sed -e 's#.*\=\"\(.*\)\".*#\1#')
421     BUILD_CONF=$(basename $BUILD_CONF_GZ .gz)
422     wget $REPO$BUILD_CONF_GZ -P $BUILD_CONF_DIR > /dev/null 2>&1
423     if [ ! -f "$BUILD_CONF_DIR/$BUILD_CONF_GZ" ]; then
424       echo "It's failed to donwload build.conf. Please contact system administrator."
425       exit 1
426     fi
427     gunzip $BUILD_CONF_DIR/$BUILD_CONF_GZ
428     sed -i 's/rpmlint-mini\ rpmlint-tizen/!rpmlint-mini\ !rpmlint-tizen/g' $BUILD_CONF_DIR/$BUILD_CONF
429     if [ "$DEFAULT_TIZEN_VERSION" == "6.0" ]; then
430       sed -i 's/tizen_version_major 5/tizen_version_major 6/g' $BUILD_CONF_DIR/$BUILD_CONF
431       sed -i 's/tizen_version_minor 5/tizen_version_minor 0/g' $BUILD_CONF_DIR/$BUILD_CONF
432     fi
433     BUILD_CONF_OPTS="-D $BUILD_CONF_DIR/$BUILD_CONF"
434     if [ "$PREVIOUS_RPMLINT" == "rpmlint" ]; then
435       echo "** Once built with rpmlint"
436       BUILD_CONF_OPTS+=" --clean"
437     fi
438   else # Enable rpmlint
439     echo "** Enable rpmlint"
440     BUILD_CONF_OPTS=""
441     if [ "$PREVIOUS_RPMLINT" == "!rpmlint" ]; then
442       BUILD_CONF_OPTS="--clean"
443     fi
444   fi
445 }