[M73 Migration][Product TV] Enable tizen 5.5 musem build by default
[platform/framework/web/chromium-efl.git] / tizen_src / build / common.sh
old mode 100644 (file)
new mode 100755 (executable)
index cd221be..b1cf646
@@ -1,25 +1,20 @@
 #!/bin/bash
 
-pushd `dirname ${BASH_SOURCE[0]}` > /dev/null
-SCRIPT_PATH=`pwd -L`
-popd > /dev/null
-
-PROJECT_ROOT_PATH="${SCRIPT_PATH}/.."
-if [[ -z "${CHROME_SRC}" ]]; then
-  # If $CHROME_SRC was not set, assume src subfolder in project directory is CHROME_SRC.
-  export CHROME_SRC="${PROJECT_ROOT_PATH}/src"
-fi
+export SCRIPTDIR=$(readlink -e $(dirname $0))
+export TOPDIR=$(readlink -f "${SCRIPTDIR}/../..")
+export CHROME_SRC="${TOPDIR}"
+# Please set DEFAULT_TIZEN_VERSION to 'latest' for the latest tizen version
+# or set DEFAULT_TIZEN_VERSION to current tizen version for the others.
+export DEFAULT_TIZEN_VERSION=latest
 
-function applyPatch {
-  directory=$1
-  shift
-  patchfile=$1
-  shift
-  echo Applying $patchfile in $directory
-  pushd "$directory" > /dev/null
-  patch -p1 $@ < "$patchfile"
-  popd > /dev/null
-}
+if [ "$(echo "$@" | grep -e "--tizen")" != "" ]; then
+  tizen_version=$(echo $@ | sed -e 's#.*--tizen_\([0-9.]*\).*#\1#')
+  if $(echo $tizen_version | grep -qe "^[-\?[0-9]\+\.\?[0-9]*$" && echo true || echo false); then
+    DEFAULT_TIZEN_VERSION=$tizen_version
+  else
+    DEFAULT_TIZEN_VERSION=latest
+  fi
+fi
 
 function getHostOs() {
   echo $(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')
@@ -27,9 +22,376 @@ function getHostOs() {
 
 function getHostArch() {
   echo $(uname -m | sed -e \
-        's/i.86/ia32/;s/x86_64/x64/;s/amd64/x64/;s/arm.*/arm/;s/i86pc/ia32/')
+        's/i.86/ia32/;s/x86_64/x64/;s/amd64/x64/;s/arm.*/arm/;s/i86pc/ia32/;s/aarch64/arm64/')
 }
 
 function getPythonVersion() {
   echo $(python --version  2>&1 | sed -e 's/Python \([0-9]\+\.[0-9]\+\)\.[0-9]\+/\1/')
 }
+
+function setIfUndef() {
+    eval original=\$$1
+    new=$2
+    if [ -n "$original" ]; then
+        echo $original
+    else
+        echo $new
+    fi
+}
+
+
+function hostBuldScriptUsage() {
+cat << EOF
+usage: $1 [OPTIONS]
+
+Build non gbs version of chromium-efl
+
+OPTIONS:
+   -h, --help            Show this message
+   --build-ewk-unittests Build ewk unittests
+   --ccache              Configure ccache installed in your system
+   --clang               Use chromium's clang compiler to build the sources
+   --no-content-shell    Don't build content_shell application
+   --debug               Build debug version of chromium-efl (out.${host_arch}/Debug instead of out.${host_arch}/Release)
+   -jN                   Set number of jobs, just like with make or ninja
+   --skip-ninja          Skip ninja step
+
+examples:
+$0 --ccache
+$0 --skip-ninja
+EOF
+  exit
+}
+
+function parseHostBuildScriptParams() {
+
+  export USE_CCACHE=0
+  export USE_CLANG=1
+  export FORCE_JHBUILD=0
+  export SKIP_NINJA=0
+  export BUILD_EWK_UNITTESTS=0
+  export BUILD_CONTENT_SHELL=1
+  export BUILD_SUBDIRECTORY=Release
+  export COMPONENT_BUILD=0
+
+  local platform="$1"
+  shift
+
+  while [[ $# > 0 ]]; do
+    case "$1" in
+      -h|--help)
+        hostBuldScriptUsage ${0}
+        ;;
+      --skip-gn)
+        export SKIP_GN=1
+        ;;
+      --ccache)
+        echo using ccache
+        export USE_CCACHE=1
+        source $TOPDIR/tizen_src/build/ccache_env.sh ${platform}
+        ;;
+      --gcc)
+        export USE_CLANG=0
+        ;;
+      --no-content-shell)
+        export BUILD_CONTENT_SHELL=0
+        ;;
+      --force-jhbuild)
+        export FORCE_JHBUILD=1
+        ;;
+      --skip-ninja)
+        export SKIP_NINJA=1
+        ;;
+      --build-ewk-unittests)
+        export BUILD_EWK_UNITTESTS=1
+        ;;
+      --debug)
+        export BUILD_SUBDIRECTORY="Debug"
+        ;;
+      --component-build)
+        export COMPONENT_BUILD=1
+        ;;
+      -j*)
+        export JOBS="$1"
+        ;;
+      *)
+        echo "Unknown argument: $1"
+        exit 1
+        ;;
+    esac
+    shift;
+  done
+}
+
+function hostGnChromiumEfl() {
+  if [[ $SKIP_GN != 1 ]]; then
+    local XWALK_ARG=""
+    local COMPONENT_ARG=""
+    if [[ $COMPONENT_BUILD == 1 ]]; then
+      COMPONENT_ARG="component=shared_library"
+    fi
+    ${TOPDIR}/tizen_src/build/gn_chromiumefl.sh \
+      $XWALK_ARG \
+      $COMPONENT_ARG \
+      $@
+  fi
+}
+
+function hostNinja() {
+  if [[ $SKIP_NINJA == 0 ]]; then
+    TARGETS="chromium-ewk efl_webprocess efl_webview_app ubrowser"
+    if [[ $BUILD_EWK_UNITTESTS == 1 ]]; then
+      TARGETS="$TARGETS ewk_unittests"
+    fi
+    if [[ $BUILD_CONTENT_SHELL == 1 ]]; then
+      TARGETS="$TARGETS content_shell dump_syms minidump_stackwalk"
+    fi
+    if [[ $BUILD_CHROMEDRIVER == 1 ]]; then
+      TARGETS="$TARGETS chromedriver"
+    fi
+    export BUILD_SUBDIRECTORY=""
+    BUILDDIR=${GN_GENERATOR_OUTPUT}/${BUILD_SUBDIRECTORY}
+    ninja -C $BUILDDIR ${JOBS} ${TARGETS}
+  fi
+}
+
+function error_report() {
+  echo "Error: File:$1 Line:$2"
+  exit 1
+}
+
+function findElementInArray() {
+  local elm
+  for elm in "${@:2}"; do
+    [[ "$elm" = "$1" ]] && return 0;
+  done
+  return 1;
+}
+
+function setupAndExecuteTargetBuild() {
+  local platform="$1"
+  shift
+
+  local PROFILE
+  local ARCHITECTURE
+  local CONF_FLAG
+  local -a ARGS
+
+  local count=0
+  local exclusive_options=0
+  local RPMLINT=0
+  local NOINIT=0
+  local MIRROR=0
+
+  # "|| :" means "or always succeeding built-in command"
+  PROFILE=$(echo "$@" | grep -Po "(?<=\-P\s)[^\s]*" | head -1 || :)
+  ARCHITECTURE=$(echo "$@" | grep -Po "(?<=\-A\s)[^\s]*" | head -1 || :)
+  GBS_ROOT=$(echo "$@" | grep -Po "(?<=\-B\s)[^\s]*" | head -1 || :)
+
+  while [[ $# > 0 ]]; do
+    count=$(( $count + 1 ))
+    case "$1" in
+    --debug)
+        ARGS[$count]=--define
+        count=$(( $count + 1 ))
+        ARGS[$count]="_debug_mode 1"
+    ;;
+    --skip-ninja)
+        ARGS[$count]=--define
+        count=$(( $count + 1 ))
+        ARGS[$count]="_skip_ninja 1"
+    ;;
+    --skip-gn)
+        ARGS[$count]=--define
+        count=$(( $count + 1 ))
+        ARGS[$count]="_skip_gn 1"
+    ;;
+    --component-build)
+        ARGS[$count]=--define
+        count=$(( $count + 1 ))
+        ARGS[$count]="component_build 1"
+    ;;
+    --gbs-debug)
+        ARGS[$count]=--debug
+    ;;
+    --rpmlint)
+        RPMLINT=1
+        count=$(( $count + 1 ))
+    ;;
+    --nodebug)
+        ARGS[$count]=--define
+        count=$(( $count + 1 ))
+        ARGS[$count]="_nodebug 1"
+    ;;
+    --noinit)
+        NOINIT=1
+        ARGS[$count]="$1"
+        count=$(( $count + 1 ))
+    ;;
+    --mirror)
+        MIRROR=1
+    ;;
+    --gcc)
+        ARGS[$count]=--define
+        count=$(( $count + 1 ))
+        ARGS[$count]="_gcc 1"
+    ;;
+    --clang)
+        ARGS[$count]=--define
+        count=$(( $count + 1 ))
+        ARGS[$count]="_clang 1"
+    ;;
+    --standard*)
+        if [ "$DEFAULT_TIZEN_VERSION" == "latest" ]; then
+          echo $1
+          PROFILE=tz_$(echo $1 | sed 's/--//g')
+        elif [ "$DEFAULT_TIZEN_VERSION" == "4.0" ]; then
+          PROFILE=tz_${DEFAULT_TIZEN_VERSION}_$(echo $1 | sed 's/--//g')_$(echo $ARCHITECTURE | grep "i586" -q && echo "ia32" || echo $ARCHITECTURE)
+        else
+          PROFILE=tz_${DEFAULT_TIZEN_VERSION}_$(echo $1 | sed 's/--//g')
+        fi
+    ;;
+    --emulator*)
+        if [ "$DEFAULT_TIZEN_VERSION" == "latest" ]; then
+          PROFILE=tz_$(echo $1 | sed 's/--//g')
+        elif [ "$DEFAULT_TIZEN_VERSION" == "4.0" ]; then
+          PROFILE=tz_${DEFAULT_TIZEN_VERSION}_$(echo $1 | sed 's/--//g')_$(echo $ARCHITECTURE | grep "i586" -q && echo "ia32" || echo $ARCHITECTURE)
+        else
+          PROFILE=tz_${DEFAULT_TIZEN_VERSION}_$(echo $1 | sed 's/--//g')
+        fi
+    ;;
+    --tizen*)
+    ;;
+    *)
+      ARGS[$count]="$1"
+    ;;
+    esac
+    shift;
+  done
+
+  if [ "$PROFILE" == "" ]; then
+    if [[ $platform == "mobile" ]]; then
+      PROFILE=tzmb_3.0_target-TM1
+    elif [[ $platform == "tv" ]]; then
+      if [ "$DEFAULT_TIZEN_VERSION" == "latest" ]; then
+        PROFILE=tztv_5.5_arm-musem
+      elif [ "$DEFAULT_TIZEN_VERSION" == "4.0" ]; then
+        PROFILE=tztv_4.0_arm-kantm
+      else
+        PROFILE=tztv_arm-musem
+      fi
+    elif [[ $platform == "da" ]]; then
+      if [ "$DEFAULT_TIZEN_VERSION" == "latest" ]; then
+        PROFILE=tzda_arm-kantm
+      else
+        PROFILE=tzda_${DEFAULT_TIZEN_VERSION}_arm-kantm
+      fi
+    else
+      echo "Cannot set default PROFILE for platform=${platform}"
+      exit 1
+    fi
+  fi
+
+  if [ "$MIRROR" == "1" ]; then
+    PROFILE=${PROFILE}_mirror
+  fi
+
+  echo "Set the profile : $PROFILE"
+
+  if [ "$ARCHITECTURE" == "" ]; then
+    if [[ $platform == "mobile" ]]; then
+      ARCHITECTURE=armv7l
+    elif [[ $platform == "mobile_emulator" ]]; then
+      ARCHITECTURE=i586
+    elif [[ $platform == "tv" ]]; then
+      ARCHITECTURE=armv7l
+    elif [[ $platform == "tv_emulator" ]]; then
+      ARCHITECTURE=i586
+    else
+      echo "Cannot set default ARCHITECTURE for platform=${platform}"
+      exit 1
+    fi
+  fi
+  echo "Set the architecture : $ARCHITECTURE"
+
+  if [ "$(echo "${PROFILE}" | grep -P "muse|kant|jazz|hawk|product")" == "" -a "$NOINIT" == 0 ]; then
+    processRpmlintOption $PROFILE $RPMLINT
+  fi
+  local BRANCH=$(echo $(basename $(git symbolic-ref HEAD)))
+  if [ "$(echo $BRANCH | grep dev)" != "" ]; then
+    BRANCH=dev
+  elif [ "$(echo $BRANCH | grep beta)" != "" ]; then
+    BRANCH=beta
+  else
+    BRANCH=release
+  fi
+  local CHROMIUM_VERSION=$(echo $(head -n 1 chrome/VERSION) | sed -e 's/MAJOR=//g')
+
+  local GBS_ROOT_OPT=
+  if [ "$USE_GLOBAL_GBS_CONF" == "" ]; then
+    CONF_FLAG="--conf ${SCRIPTDIR}/gbs.conf"
+    if [ "$GBS_ROOT" == "" ]; then
+      GBS_ROOT_OPT="-B ~/GBS-ROOT-M${CHROMIUM_VERSION}-${PROFILE^^}-TIZEN_${DEFAULT_TIZEN_VERSION^^}-${BRANCH^^}"
+    else
+      GBS_ROOT_OPT="-B $GBS_ROOT"
+    fi
+  fi
+
+  gbs $CONF_FLAG build -P $PROFILE --include-all -A $ARCHITECTURE "${ARGS[@]}" $BUILD_CONF_OPTS --incremental $GBS_ROOT_OPT
+}
+
+function processRpmlintOption() {
+  local PROFILE=$1
+  local RPMLINT=$2
+  local URL_TARGET=
+  export BUILD_CONF_OPTS=
+
+  echo "** Process rpmlint option"
+
+  local PREVIOUS_RPMLINT="!rpmlint"
+  if [ ! -f "$PREVIOUS_BUILD_CONF_PATH" ]; then
+    # Never built before
+    PREVIOUS_RPMLINT=""
+  elif [ "$(grep -Po "\!rpmlint" "$PREVIOUS_BUILD_CONF_PATH" | uniq -d)" != "!rpmlint" ]; then
+    # Once built with rpmlint
+    PREVIOUS_RPMLINT="rpmlint"
+  fi
+
+  # Disable rpmlint
+  if [ "$RPMLINT" == 0 ]; then
+    echo "** Disable rpmlint"
+    BUILD_CONF_DIR=$SCRIPTDIR/build_conf
+    rm -rf $BUILD_CONF_DIR
+    mkdir $BUILD_CONF_DIR
+    URL_TARGET=$(echo $PROFILE | sed -e 's#.*\.[0-9]*_\([-a-zA-Z0-9]*\).*#\1#;s/tz_//g')
+    # The latest version doesn't have tizen version in snapshot repository url.
+    if [ "$(echo $DEFAULT_TIZEN_VERSION)" == "latest" ]; then
+      URL_TIZEN_VERSION=
+    else
+      URL_TIZEN_VERSION=$DEFAULT_TIZEN_VERSION-
+    fi
+    REPO=http://download.tizen.org/snapshots/tizen/$URL_TIZEN_VERSION$platform/latest/repos/$URL_TARGET/packages/repodata/
+    echo "** Repo : $REPO"
+    wget $REPO -O $BUILD_CONF_DIR/index.html > /dev/null 2>&1
+    BUILD_CONF_GZ=$(grep "build.conf.gz" $BUILD_CONF_DIR/index.html | sed -e 's#.*\=\"\(.*\)\".*#\1#')
+    BUILD_CONF=$(basename $BUILD_CONF_GZ .gz)
+    wget $REPO$BUILD_CONF_GZ -P $BUILD_CONF_DIR > /dev/null 2>&1
+    if [ ! -f "$BUILD_CONF_DIR/$BUILD_CONF_GZ" ]; then
+      echo "It's failed to donwload build.conf. Please contact system administrator."
+      exit 1
+    fi
+    gunzip $BUILD_CONF_DIR/$BUILD_CONF_GZ
+    sed -i 's/rpmlint-mini\ rpmlint-tizen/!rpmlint-mini\ !rpmlint-tizen/g' $BUILD_CONF_DIR/$BUILD_CONF
+    BUILD_CONF_OPTS="-D $BUILD_CONF_DIR/$BUILD_CONF"
+    if [ "$PREVIOUS_RPMLINT" == "rpmlint" ]; then
+      echo "** Once built with rpmlint"
+      BUILD_CONF_OPTS+=" --clean"
+    fi
+  else # Enable rpmlint
+    echo "** Enable rpmlint"
+    BUILD_CONF_OPTS=""
+    if [ "$PREVIOUS_RPMLINT" == "!rpmlint" ]; then
+      BUILD_CONF_OPTS="--clean"
+    fi
+  fi
+}