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
33 if [ "$platform" != "desktop" ]; then
35 if [ "$host_arch" == "x86" -o "$host_arch" == "x64" ]; then
39 # Non product tv profiles on tizen 6.0
40 if [ "$platform" != "tv" -a "$DEFAULT_TIZEN_VERSION" == "6.0" ]; then
48 function getHostOs() {
49 echo $(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')
52 function getHostArch() {
53 echo $(uname -m | sed -e \
54 's/i.86/x86/;s/x86_64/x64/;s/amd64/x64/;s/arm.*/arm/;s/i86pc/x86/;s/aarch64/arm64/;s/riscv.*/riscv64/')
57 function getGccVersion() {
58 echo $(gcc -dumpversion)
61 function getPythonVersion() {
62 echo $(python3 --version 2>&1 | sed -e 's/Python \([0-9]\+\.[0-9]\+\)\.[0-9]\+/\1/')
65 function setIfUndef() {
68 if [ -n "$original" ]; then
75 function hostBuldScriptUsage() {
79 Build non gbs version of chromium-efl
82 -h, --help Show this message
83 --build-ewk-unittests Build ewk unittests
84 --enable-pepper-extensions Enable Tizen Pepper Extensions
85 --ccache Configure ccache installed in your system
86 --clang Use chromium's clang compiler to build the sources
87 --debug Build debug version of chromium-efl (out.${host_arch}/Debug instead of out.${host_arch}/Release)
88 -jN Set number of jobs, just like with make or ninja
89 --skip-ninja Skip ninja step
98 function undoReplacedGn() {
99 local system_deps=$(getSystemDeps $1)
100 if [ "$system_deps" != "" ]; then
101 echo "** use system lib : undo **"
102 # Restore gn files to their original states not to mess up the tree permanently.
103 $TOPDIR/build/linux/unbundle/replace_gn_files.py --undo $system_deps icu
107 function parseHostBuildScriptParams() {
108 trap 'undoReplacedGn $1' SIGINT
111 export FORCE_JHBUILD=0
113 export BUILD_EWK_UNITTESTS=0
114 export BUILD_CHROME=0
115 export BUILD_SUBDIRECTORY=Release
116 export COMPONENT_BUILD=0
117 export ENABLE_PEPPER_EXTENSIONS=0
122 while [[ $# > 0 ]]; do
125 hostBuldScriptUsage ${0}
133 source $TOPDIR/tizen_src/build/ccache_env.sh ${platform}
139 export BUILD_CHROME=1
142 export FORCE_JHBUILD=1
147 --build-ewk-unittests)
148 export BUILD_EWK_UNITTESTS=1
151 export BUILD_SUBDIRECTORY="Debug"
154 export COMPONENT_BUILD=1
156 --enable-pepper-extensions)
157 export ENABLE_PEPPER_EXTENSIONS=1
163 echo "Unknown argument: $1"
171 function hostGnChromiumEfl() {
172 if [[ $SKIP_GN != 1 ]]; then
174 local COMPONENT_ARG=""
175 local PEPPER_EXTENSIONS_ARG=""
176 if [[ $COMPONENT_BUILD == 1 ]]; then
177 COMPONENT_ARG="component=shared_library"
179 if [[ $ENABLE_PEPPER_EXTENSIONS == 1 ]]; then
180 PEPPER_EXTENSIONS_ARG="tizen_pepper_extensions=true"
182 ${TOPDIR}/tizen_src/build/gn_chromiumefl.sh \
185 $PEPPER_EXTENSIONS_ARG \
190 function hostNinja() {
192 if [[ $SKIP_NINJA == 0 ]]; then
193 if [[ $BUILD_CHROME == 1 ]]; then
194 TARGETS="content_shell chrome"
196 TARGETS="chromium-ewk efl_webprocess efl_webview_app ubrowser"
198 if [[ $BUILD_EWK_UNITTESTS == 1 ]]; then
199 TARGETS="$TARGETS ewk_unittests"
201 if [[ $BUILD_CHROMEDRIVER == 1 ]]; then
202 TARGETS="$TARGETS chromedriver"
204 export BUILD_SUBDIRECTORY=""
205 BUILDDIR=${GN_GENERATOR_OUTPUT}/${BUILD_SUBDIRECTORY}
206 ninja -C $BUILDDIR ${JOBS} ${TARGETS}
211 if [[ $RESULT != 0 ]]; then
216 function error_report() {
217 echo "Error: File:$1 Line:$2"
221 function findElementInArray() {
223 for elm in "${@:2}"; do
224 [[ "$elm" = "$1" ]] && return 0;
229 function setupAndExecuteTargetBuild() {
238 local exclusive_options=0
243 local RELEASE_BUILD=0
244 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')
316 ARGS+=(--define "_build_chrome 1")
325 ARGS+=(--define "_make_squashfs_rpm $MAKE_SQUASHFS_RPM")
327 if [ "$LOCAL_BUILD" == "1" ]; then
328 ARGS+=(--define "_local_build 1")
329 local _jobs=$((`/usr/bin/getconf _NPROCESSORS_ONLN` / 2 - `ps -ef | grep " ninja " | wc -l` -1))
330 local _smp_mflags=-j$(if ((${_jobs} > 10)); then echo ${_jobs}; else echo 10; fi)
331 ARGS+=(--define "_costomized_smp_mflags $_smp_mflags")
333 ARGS+=(--define "_clang 1")
336 if [ "$RELEASE_BUILD" == "1" ]; then
337 ARGS+=(--define "_local_build 0")
338 if [[ $platform == "tv" ]]; then
339 ARGS+=(--define "_clang 1")
341 ARGS+=(--define "_clang 0")
342 ARGS+=(--define "_no_lto 0")
346 if [ "$PROFILE" == "" ]; then
347 if [[ $platform == "tv" ]]; then
348 PROFILE=tztv_${DEFAULT_TIZEN_VERSION}_arm-pontusm
349 elif [[ $platform == "da" ]]; then
350 PROFILE=tzda_${DEFAULT_TIZEN_VERSION}_arm-kantm
351 elif [[ $platform == "riscv" ]]; then
352 PROFILE=tz_${DEFAULT_TIZEN_VERSION}_riscv
353 elif [[ $platform == "wearable" ]]; then
354 PROFILE=tzwr_5.5_arm-spin
356 echo "Cannot set default PROFILE for platform=${platform}"
361 if [ "$MIRROR" == "1" ]; then
362 PROFILE=${PROFILE}_mirror
365 echo "Set the profile : $PROFILE"
367 if [ "$ARCHITECTURE" == "" ]; then
370 echo "Set the architecture : $ARCHITECTURE"
372 if [ "$(echo "${PROFILE}" | grep -P "tz_standard")" != "" -a "$NOINIT" == 0 ]; then
373 processRpmlintOption $PROFILE $RPMLINT
375 local BRANCH=$(echo $(basename $(git symbolic-ref HEAD)))
376 if [ "$(echo $BRANCH | grep dev)" != "" ]; then
378 elif [ "$(echo $BRANCH | grep beta)" != "" ]; then
383 local CHROMIUM_VERSION=$(echo $(head -n 1 chrome/VERSION) | sed -e 's/MAJOR=//g')
386 if [ "$USE_GLOBAL_GBS_CONF" == "" ]; then
387 CONF_FLAG="--conf ${SCRIPTDIR}/gbs.conf"
388 if [ "$GBS_ROOT" == "" ]; then
389 GBS_ROOT_OPT="-B ~/GBS-ROOT-M${CHROMIUM_VERSION}-${PROFILE^^}-TIZEN_${DEFAULT_TIZEN_VERSION^^}-${BRANCH^^}"
391 GBS_ROOT_OPT="-B $GBS_ROOT"
395 processICU initialize_icu
396 gbs $CONF_FLAG build -P $PROFILE --include-all -A $ARCHITECTURE "${ARGS[@]}" $BUILD_CONF_OPTS --incremental $GBS_ROOT_OPT
399 undoReplacedGn $platform
400 processICU restore_icu
402 if [[ $RESULT != 0 ]]; then
407 function processICU() {
408 local ICU_PATH="$TOPDIR/third_party/icu/source"
409 local ICU_REPLACE_PATH="$TOPDIR/third_party/icu/source_replace"
411 if [ "$1" == "replace_icu" ]; then
412 if [ ! -e $ICU_REPLACE_PATH ] && [ -e $ICU_PATH ]; then
413 echo "** third_party/icu/source is replaced to use system icu."
414 mv $ICU_PATH $ICU_REPLACE_PATH
416 elif [ "$1" == "restore_icu" ]; then
417 if [ -e $ICU_REPLACE_PATH ] && [ ! -e $ICU_PATH ]; then
418 echo "** third_party/icu/source is restored."
419 mv $ICU_REPLACE_PATH $ICU_PATH
421 elif [ "$1" == "initialize_icu" ]; then
422 if [ -e $ICU_REPLACE_PATH ]; then
423 echo "** third_party/icu/source is initialized."
425 mv $ICU_REPLACE_PATH $ICU_PATH
430 function processRpmlintOption() {
434 export BUILD_CONF_OPTS=
436 echo "** Process rpmlint option"
438 local PREVIOUS_RPMLINT="!rpmlint"
439 if [ ! -f "$PREVIOUS_BUILD_CONF_PATH" ]; then
442 elif [ "$(grep -Po "\!rpmlint" "$PREVIOUS_BUILD_CONF_PATH" | uniq -d)" != "!rpmlint" ]; then
443 # Once built with rpmlint
444 PREVIOUS_RPMLINT="rpmlint"
448 if [ "$RPMLINT" == 0 ]; then
449 echo "** Disable rpmlint"
450 BUILD_CONF_DIR=$SCRIPTDIR/build_conf
451 rm -rf $BUILD_CONF_DIR
452 mkdir $BUILD_CONF_DIR
453 URL_TARGET=$(echo $PROFILE | sed -e 's#.*\.[0-9]*_\([-a-zA-Z0-9]*\).*#\1#;s/tz_//g')
454 # The latest version doesn't have tizen version in snapshot repository url.
455 if [ "$DEFAULT_TIZEN_VERSION" == "${LATEST_TIZEN_VERSION}" ]; then
458 URL_TIZEN_VERSION=-$DEFAULT_TIZEN_VERSION
460 REPO=http://download.tizen.org/snapshots/TIZEN/Tizen$URL_TIZEN_VERSION/Tizen$URL_TIZEN_VERSION-$platform/latest/repos/$URL_TARGET/packages/repodata/
461 echo "** Repo : $REPO"
462 wget $REPO -O $BUILD_CONF_DIR/index.html > /dev/null 2>&1
463 BUILD_CONF_GZ=$(grep "build.conf.gz" $BUILD_CONF_DIR/index.html | sed -e 's#.*\=\"\(.*\)\".*#\1#')
464 BUILD_CONF=$(basename $BUILD_CONF_GZ .gz)
465 wget $REPO$BUILD_CONF_GZ -P $BUILD_CONF_DIR > /dev/null 2>&1
466 if [ ! -f "$BUILD_CONF_DIR/$BUILD_CONF_GZ" ]; then
467 echo "It's failed to donwload build.conf. Please contact system administrator."
470 gunzip $BUILD_CONF_DIR/$BUILD_CONF_GZ
471 sed -i 's/rpmlint-mini\ rpmlint-tizen/!rpmlint-mini\ !rpmlint-tizen/g' $BUILD_CONF_DIR/$BUILD_CONF
472 if [ "$DEFAULT_TIZEN_VERSION" == "6.0" ]; then
473 sed -i 's/tizen_version_major 5/tizen_version_major 6/g' $BUILD_CONF_DIR/$BUILD_CONF
474 sed -i 's/tizen_version_minor 5/tizen_version_minor 0/g' $BUILD_CONF_DIR/$BUILD_CONF
476 BUILD_CONF_OPTS="-D $BUILD_CONF_DIR/$BUILD_CONF"
477 if [ "$PREVIOUS_RPMLINT" == "rpmlint" ]; then
478 echo "** Once built with rpmlint"
479 BUILD_CONF_OPTS+=" --clean"
481 else # Enable rpmlint
482 echo "** Enable rpmlint"
484 if [ "$PREVIOUS_RPMLINT" == "!rpmlint" ]; then
485 BUILD_CONF_OPTS="--clean"