3 export SCRIPTDIR=$(readlink -e $(dirname $0))
4 export TOPDIR=$(readlink -f "${SCRIPTDIR}/../..")
5 export CHROME_SRC="${TOPDIR}"
6 export LATEST_TIZEN_VERSION=8.0
7 export DEFAULT_TIZEN_VERSION=$LATEST_TIZEN_VERSION
9 if [ "$(echo "$@" | grep -e "--tizen")" != "" ]; then
10 tizen_version=$(echo $@ | sed -e 's#.*--tizen_\([0-9.]*\).*#\1#')
11 DEFAULT_TIZEN_VERSION=$tizen_version
15 export PUBLIC_REPO_VERSION=
16 if [ "$DEFAULT_TIZEN_VERSION" != "${LATEST_TIZEN_VERSION}" ]; then
17 PUBLIC_REPO_VERSION=-$DEFAULT_TIZEN_VERSION
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
23 function getSystemDeps() {
24 local host_arch=$(getHostArch)
26 local system_deps="--system-libraries
32 if [ "$platform" != "desktop" ]; then
34 if [ "$host_arch" == "x86" -o "$host_arch" == "x64" ]; then
38 # Non product tv profiles on tizen 6.0
39 if [ "$platform" != "tv" -a "$DEFAULT_TIZEN_VERSION" == "6.0" ]; then
47 function getHostOs() {
48 echo $(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')
51 function getHostArch() {
52 echo $(uname -m | sed -e \
53 's/i.86/x86/;s/x86_64/x64/;s/amd64/x64/;s/arm.*/arm/;s/i86pc/x86/;s/aarch64/arm64/;s/riscv.*/riscv64/')
56 function getGccVersion() {
57 echo $(gcc -dumpversion)
60 function getPythonVersion() {
61 echo $(python3 --version 2>&1 | sed -e 's/Python \([0-9]\+\.[0-9]\+\)\.[0-9]\+/\1/')
64 function setIfUndef() {
67 if [ -n "$original" ]; then
74 function hostBuldScriptUsage() {
78 Build non gbs version of chromium-efl
81 -h, --help Show this message
82 --build-ewk-unittests Build ewk unittests
83 --enable-pepper-extensions Enable Tizen Pepper Extensions
84 --ccache Configure ccache installed in your system
85 --clang Use chromium's clang compiler to build the sources
86 --debug Build debug version of chromium-efl (out.${host_arch}/Debug instead of out.${host_arch}/Release)
87 -jN Set number of jobs, just like with make or ninja
88 --skip-ninja Skip ninja step
97 function undoReplacedGn() {
98 local system_deps=$(getSystemDeps $1)
99 if [ "$system_deps" != "" ]; then
100 echo "** use system lib : undo **"
101 # Restore gn files to their original states not to mess up the tree permanently.
102 $TOPDIR/build/linux/unbundle/replace_gn_files.py --undo $system_deps icu
106 function parseHostBuildScriptParams() {
107 trap 'undoReplacedGn $1' SIGINT
110 export FORCE_JHBUILD=0
112 export BUILD_EWK_UNITTESTS=0
113 export BUILD_CHROME=0
114 export BUILD_SUBDIRECTORY=Release
115 export COMPONENT_BUILD=0
116 export ENABLE_PEPPER_EXTENSIONS=0
121 while [[ $# > 0 ]]; do
124 hostBuldScriptUsage ${0}
132 source $TOPDIR/tizen_src/build/ccache_env.sh ${platform}
138 export BUILD_CHROME=1
141 export FORCE_JHBUILD=1
146 --build-ewk-unittests)
147 export BUILD_EWK_UNITTESTS=1
150 export BUILD_SUBDIRECTORY="Debug"
153 export COMPONENT_BUILD=1
155 --enable-pepper-extensions)
156 export ENABLE_PEPPER_EXTENSIONS=1
162 echo "Unknown argument: $1"
170 function hostGnChromiumEfl() {
171 if [[ $SKIP_GN != 1 ]]; then
173 local COMPONENT_ARG=""
174 local PEPPER_EXTENSIONS_ARG=""
175 if [[ $COMPONENT_BUILD == 1 ]]; then
176 COMPONENT_ARG="component=shared_library"
178 if [[ $ENABLE_PEPPER_EXTENSIONS == 1 ]]; then
179 PEPPER_EXTENSIONS_ARG="tizen_pepper_extensions=true"
181 ${TOPDIR}/tizen_src/build/gn_chromiumefl.sh \
184 $PEPPER_EXTENSIONS_ARG \
189 function hostNinja() {
191 if [[ $SKIP_NINJA == 0 ]]; then
192 if [[ $BUILD_CHROME == 1 ]]; then
193 TARGETS="content_shell chrome"
195 TARGETS="chromium-ewk efl_webprocess efl_webview_app ubrowser"
197 if [[ $BUILD_EWK_UNITTESTS == 1 ]]; then
198 TARGETS="$TARGETS ewk_unittests"
200 if [[ $BUILD_CHROMEDRIVER == 1 ]]; then
201 TARGETS="$TARGETS chromedriver"
203 export BUILD_SUBDIRECTORY=""
204 BUILDDIR=${GN_GENERATOR_OUTPUT}/${BUILD_SUBDIRECTORY}
205 ninja -C $BUILDDIR ${JOBS} ${TARGETS}
210 if [[ $RESULT != 0 ]]; then
215 function error_report() {
216 echo "Error: File:$1 Line:$2"
220 function findElementInArray() {
222 for elm in "${@:2}"; do
223 [[ "$elm" = "$1" ]] && return 0;
228 function setupAndExecuteTargetBuild() {
237 local exclusive_options=0
242 local RELEASE_BUILD=0
243 local MAKE_SQUASHFS_RPM=0
246 # "|| :" means "or always succeeding built-in command"
247 PROFILE=$(echo "$@" | grep -Po "(?<=\-P\s)[^\s]*" | head -1 || :)
248 ARCHITECTURE=$(echo "$@" | grep -Po "(?<=\-A\s)[^\s]*" | head -1 || :)
249 GBS_ROOT=$(echo "$@" | grep -Po "(?<=\-B\s)[^\s]*" | head -1 || :)
251 while [[ $# > 0 ]]; do
254 ARGS+=(--define "_debug_mode 1")
257 ARGS+=(--define "_skip_ninja 1")
260 ARGS+=(--define "_skip_gn 1")
263 ARGS[$count]=--define
264 count=$(( $count + 1 ))
265 ARGS[$count]="_ttrace 1"
268 ARGS+=(--define "component_build 1")
271 ARGS+=(--define "_disable_wrt_js 1")
277 ARGS+=(--define "_use_system_icu $(echo $1 | sed -e 's/--icu=//g')")
283 ARGS+=(--define "_nodebug 1")
301 ARGS+=(--define "_clang 0")
305 ARGS+=(--define "_clang 1")
308 PROFILE=tz_$(echo $1 | sed 's/--//g')
311 PROFILE=tz_$(echo $1 | sed 's/--//g')
317 ARGS+=(--define "_build_chrome 1")
326 ARGS+=(--define "_make_squashfs_rpm $MAKE_SQUASHFS_RPM")
328 if [ "$LOCAL_BUILD" == "1" ]; then
329 ARGS+=(--define "_local_build 1")
330 local _jobs=$((`/usr/bin/getconf _NPROCESSORS_ONLN` / 2 - `ps -ef | grep " ninja " | wc -l` -1))
331 local _smp_mflags=-j$(if ((${_jobs} > 10)); then echo ${_jobs}; else echo 10; fi)
332 ARGS+=(--define "_costomized_smp_mflags $_smp_mflags")
334 ARGS+=(--define "_clang 1")
337 if [ "$RELEASE_BUILD" == "1" ]; then
338 ARGS+=(--define "_local_build 0")
339 if [[ $platform == "tv" ]]; then
340 ARGS+=(--define "_clang 1")
342 ARGS+=(--define "_clang 0")
343 ARGS+=(--define "_no_lto 0")
347 if [ "$PROFILE" == "" ]; then
348 if [[ $platform == "tv" ]]; then
349 PROFILE=tztv_${DEFAULT_TIZEN_VERSION}_arm-pontusm
350 elif [[ $platform == "da" ]]; then
351 PROFILE=tzda_${DEFAULT_TIZEN_VERSION}_arm-kantm
352 elif [[ $platform == "riscv" ]]; then
353 PROFILE=tz_${DEFAULT_TIZEN_VERSION}_riscv
354 elif [[ $platform == "wearable" ]]; then
355 PROFILE=tzwr_5.5_arm-spin
356 elif [[ $platform == "Base-X" ]]; then
359 echo "Cannot set default PROFILE for platform=${platform}"
364 if [ "$MIRROR" == "1" ]; then
365 PROFILE=${PROFILE}_mirror
368 echo "Set the profile : $PROFILE"
370 if [ "$ARCHITECTURE" == "" ]; then
373 echo "Set the architecture : $ARCHITECTURE"
375 if [ "$(echo "${PROFILE}" | grep -P "tz_standard")" != "" -a "$NOINIT" == 0 ]; then
376 processRpmlintOption $PROFILE $RPMLINT
378 local BRANCH=$(echo $(basename $(git symbolic-ref HEAD)))
379 if [ "$(echo $BRANCH | grep dev)" != "" ]; then
381 elif [ "$(echo $BRANCH | grep beta)" != "" ]; then
386 local CHROMIUM_VERSION=$(echo $(head -n 1 chrome/VERSION) | sed -e 's/MAJOR=//g')
389 if [ "$USE_GLOBAL_GBS_CONF" == "" ]; then
390 CONF_FLAG="--conf ${SCRIPTDIR}/gbs.conf"
391 if [ "$GBS_ROOT" == "" ]; then
392 if [ "$BUILD_CHROME" == "1" ]; then
393 GBS_ROOT_OPT="-B ~/GBS-ROOT-M${CHROMIUM_VERSION}-${PROFILE^^}-TIZEN_${DEFAULT_TIZEN_VERSION^^}-CHROME-${BRANCH^^}"
395 GBS_ROOT_OPT="-B ~/GBS-ROOT-M${CHROMIUM_VERSION}-${PROFILE^^}-TIZEN_${DEFAULT_TIZEN_VERSION^^}-${BRANCH^^}"
398 GBS_ROOT_OPT="-B $GBS_ROOT"
402 processICU initialize_icu
403 gbs $CONF_FLAG build -P $PROFILE --include-all -A $ARCHITECTURE "${ARGS[@]}" $BUILD_CONF_OPTS --incremental $GBS_ROOT_OPT
406 undoReplacedGn $platform
407 processICU restore_icu
409 if [[ $RESULT != 0 ]]; then
414 function processICU() {
415 local ICU_PATH="$TOPDIR/third_party/icu/source"
416 local ICU_REPLACE_PATH="$TOPDIR/third_party/icu/source_replace"
418 if [ "$1" == "replace_icu" ]; then
419 if [ ! -e $ICU_REPLACE_PATH ] && [ -e $ICU_PATH ]; then
420 echo "** third_party/icu/source is replaced to use system icu."
421 mv $ICU_PATH $ICU_REPLACE_PATH
423 elif [ "$1" == "restore_icu" ]; then
424 if [ -e $ICU_REPLACE_PATH ] && [ ! -e $ICU_PATH ]; then
425 echo "** third_party/icu/source is restored."
426 mv $ICU_REPLACE_PATH $ICU_PATH
428 elif [ "$1" == "initialize_icu" ]; then
429 if [ -e $ICU_REPLACE_PATH ]; then
430 echo "** third_party/icu/source is initialized."
432 mv $ICU_REPLACE_PATH $ICU_PATH
437 function processRpmlintOption() {
441 export BUILD_CONF_OPTS=
443 echo "** Process rpmlint option"
445 local PREVIOUS_RPMLINT="!rpmlint"
446 if [ ! -f "$PREVIOUS_BUILD_CONF_PATH" ]; then
449 elif [ "$(grep -Po "\!rpmlint" "$PREVIOUS_BUILD_CONF_PATH" | uniq -d)" != "!rpmlint" ]; then
450 # Once built with rpmlint
451 PREVIOUS_RPMLINT="rpmlint"
455 if [ "$RPMLINT" == 0 ]; then
456 echo "** Disable rpmlint"
457 BUILD_CONF_DIR=$SCRIPTDIR/build_conf
458 rm -rf $BUILD_CONF_DIR
459 mkdir $BUILD_CONF_DIR
460 URL_TARGET=$(echo $PROFILE | sed -e 's#.*\.[0-9]*_\([-a-zA-Z0-9]*\).*#\1#;s/tz_//g')
461 # The latest version doesn't have tizen version in snapshot repository url.
462 if [ "$DEFAULT_TIZEN_VERSION" == "${LATEST_TIZEN_VERSION}" ]; then
465 URL_TIZEN_VERSION=-$DEFAULT_TIZEN_VERSION
467 REPO=http://download.tizen.org/snapshots/TIZEN/Tizen$URL_TIZEN_VERSION/Tizen$URL_TIZEN_VERSION-$platform/latest/repos/$URL_TARGET/packages/repodata/
468 echo "** Repo : $REPO"
469 wget $REPO -O $BUILD_CONF_DIR/index.html > /dev/null 2>&1
470 BUILD_CONF_GZ=$(grep "build.conf.gz" $BUILD_CONF_DIR/index.html | sed -e 's#.*\=\"\(.*\)\".*#\1#')
471 BUILD_CONF=$(basename $BUILD_CONF_GZ .gz)
472 wget $REPO$BUILD_CONF_GZ -P $BUILD_CONF_DIR > /dev/null 2>&1
473 if [ ! -f "$BUILD_CONF_DIR/$BUILD_CONF_GZ" ]; then
474 echo "It's failed to donwload build.conf. Please contact system administrator."
477 gunzip $BUILD_CONF_DIR/$BUILD_CONF_GZ
478 sed -i 's/rpmlint-mini\ rpmlint-tizen/!rpmlint-mini\ !rpmlint-tizen/g' $BUILD_CONF_DIR/$BUILD_CONF
479 if [ "$DEFAULT_TIZEN_VERSION" == "6.0" ]; then
480 sed -i 's/tizen_version_major 5/tizen_version_major 6/g' $BUILD_CONF_DIR/$BUILD_CONF
481 sed -i 's/tizen_version_minor 5/tizen_version_minor 0/g' $BUILD_CONF_DIR/$BUILD_CONF
483 BUILD_CONF_OPTS="-D $BUILD_CONF_DIR/$BUILD_CONF"
484 if [ "$PREVIOUS_RPMLINT" == "rpmlint" ]; then
485 echo "** Once built with rpmlint"
486 BUILD_CONF_OPTS+=" --clean"
488 else # Enable rpmlint
489 echo "** Enable rpmlint"
491 if [ "$PREVIOUS_RPMLINT" == "!rpmlint" ]; then
492 BUILD_CONF_OPTS="--clean"