meta-patch: fix qemu build failure
[pti/rtp.git] / scripts / build_inf_yocto / build_inf_yocto.sh
index 4689263..634f84d 100755 (executable)
@@ -78,6 +78,7 @@ SUB_LAYER_META_OE_ANACONDA="\
 "
 
 SCRIPTS_DIR=$(dirname $(dirname $(readlink -f $0)))
+SCRIPTS_NAME=$(basename $0)
 TIMESTAMP=`date +"%Y%m%d_%H%M%S"`
 
 #########################################################################
@@ -87,7 +88,7 @@ TIMESTAMP=`date +"%Y%m%d_%H%M%S"`
 help_info () {
 cat << ENDHELP
 Usage:
-$(basename $0) [-w WORKSPACE_DIR] [-b BSP] [-n] [-u] [-h] [-r Yes|No] [-e EXTRA_CONF]
+${SCRIPTS_NAME} [-w WORKSPACE_DIR] [-b BSP] [-n] [-u] [-h] [-r Yes|No] [-e EXTRA_CONF]
 where:
     -w WORKSPACE_DIR is the path for the project
     -b BPS is one of supported BSP: "${SUPPORTED_BSP}"
@@ -106,14 +107,14 @@ ENDHELP
 echo_step_start() {
     [ -n "$1" ] && msg_step=$1
     echo "#########################################################################################"
-    echo "## STEP START: ${msg_step}"
+    echo "## ${SCRIPTS_NAME} - STEP START: ${msg_step}"
     echo "#########################################################################################"
 }
 
 echo_step_end() {
     [ -n "$1" ] && msg_step=$1
     echo "#########################################################################################"
-    echo "## STEP END: ${msg_step}"
+    echo "## ${SCRIPTS_NAME} - STEP END: ${msg_step}"
     echo "#########################################################################################"
     echo
 }
@@ -210,9 +211,10 @@ DRYRUN=""
 EXTRA_CONF=""
 SKIP_UPDATE="Yes"
 RM_WORK="Yes"
+GET_SSTATE="No"
 BSP="intel-corei7-64"
 
-while getopts "w:b:e:r:unh" OPTION; do
+while getopts "w:b:e:r:unsh" OPTION; do
     case ${OPTION} in
         w)
             WORKSPACE=`readlink -f ${OPTARG}`
@@ -228,10 +230,13 @@ while getopts "w:b:e:r:unh" OPTION; do
             ;;
         u)
             SKIP_UPDATE="No"
-           ;;
+            ;;
         r)
             check_yn_rm_work ${OPTARG}
             ;;
+        s)
+            GET_SSTATE="Yes"
+           ;;
         h)
             help_info
             exit
@@ -248,6 +253,11 @@ if [ -n "${BSP_VALID}" ]; then
     BSP="${BSP_VALID}"
 fi
 
+IMG_ARCH=${BSP}
+if [ "${BSP}" == "intel-corei7-64"  ]; then
+    IMG_ARCH="x86-64"
+fi
+
 #########################################################################
 # Functions for each step
 #########################################################################
@@ -257,6 +267,7 @@ SRC_STX_DIR=${SRC_LAYER_DIR}/meta-starlingx
 PRJ_BUILD_DIR=${WORKSPACE}/prj_oran_stx
 PRJ_BUILD_DIR_ANACONDA=${WORKSPACE}/prj_oran_inf_anaconda
 PRJ_SHARED_DIR=${WORKSPACE}/prj_shared
+PRJ_OUTPUT_DIR=${WORKSPACE}/prj_output
 PRJ_SHARED_DL_DIR=${WORKSPACE}/prj_shared/downloads
 PRJ_SHARED_SS_DIR=${WORKSPACE}/prj_shared/sstate-cache
 SRC_SCRIPTS=${SRC_ORAN_DIR}/rtp/scripts/build_inf_yocto
@@ -268,12 +279,16 @@ IMG_INF=inf-image-aio-installer
 ISO_STX=${PRJ_BUILD_DIR}/tmp/deploy/images/${BSP}/${IMG_STX}-${BSP}.iso
 ISO_ANACONDA=${PRJ_BUILD_DIR_ANACONDA}/tmp-glibc/deploy/images/${BSP}/${IMG_ANACONDA}-${BSP}.iso
 ISO_INF=${PRJ_BUILD_DIR_ANACONDA}/tmp-glibc/deploy/images/${BSP}/${IMG_INF}-${BSP}.iso
+ISO_INF_ALIAS=${PRJ_OUTPUT_DIR}/inf-image-yocto-aio-${IMG_ARCH}.iso
+
+SSTATE_CONTAINER_IMG=infbuilder/inf-yocto-sstate:2022.05
 
 prepare_workspace () {
-    msg_step="Create workspace for the build"
+    msg_step="Create workspace for the Yocto build"
     echo_step_start
 
-    mkdir -p ${PRJ_BUILD_DIR} ${SRC_ORAN_DIR} ${PRJ_BUILD_DIR_ANACONDA} ${PRJ_SHARED_DL_DIR} ${PRJ_SHARED_SS_DIR}
+    mkdir -p ${PRJ_BUILD_DIR} ${SRC_ORAN_DIR} ${PRJ_BUILD_DIR_ANACONDA} \
+             ${PRJ_SHARED_DL_DIR} ${PRJ_SHARED_SS_DIR} ${PRJ_OUTPUT_DIR}
 
     echo_info "The following directories are created in your workspace(${WORKSPACE}):"
     echo_info "For all layers source: ${SRC_LAYER_DIR}"
@@ -283,6 +298,23 @@ prepare_workspace () {
     echo_step_end
 }
 
+# This is tend to be used for CI Jenkins build only
+get_sstate () {
+    msg_step="Get sstate cache from dockerhub image"
+    echo_step_start
+
+    for i in {1..5}; do
+        docker pull ${SSTATE_CONTAINER_IMG}-${i}
+        docker create -ti --name inf-yocto-sstate-${i} ${SSTATE_CONTAINER_IMG}-${i} sh
+        docker cp inf-yocto-sstate-${i}:/sstate${i} ${PRJ_SHARED_SS_DIR}/sstate${i}
+        docker rm inf-yocto-sstate-${i}
+    done
+    mv ${PRJ_SHARED_SS_DIR}/sstate*/* ${PRJ_SHARED_SS_DIR}
+    #rm -rf ${PRJ_SHARED_SS_DIR}/sstate*
+
+    echo_step_end
+}
+
 prepare_src () {
     msg_step="Get the source code repos"
     echo_step_start
@@ -317,25 +349,25 @@ prepare_src () {
 
     echo_step_end
 
-# Not andy meta-patch is needed for the time being, but new ones may be needed and added
+# Not any meta-patch is needed for the time being, but new ones may be needed and added
 # sometime in the future, so just leave these code commented out here.
-#    # Apply meta patches
-#    for l in $(ls -1 ${SRC_META_PATCHES}); do
-#        msg_step="Apply meta patches for ${l}"
-#        echo_step_start
-#        cd ${SRC_LAYER_DIR}/${l}
-#
-#        # backup current branch
-#        local_branch=$(git rev-parse --abbrev-ref HEAD)
-#        git branch -m "${local_branch}_${TIMESTAMP}"
-#        git checkout -b ${local_branch} ${local_branch##*-}
-#
-#        for p in $(ls -1 ${SRC_META_PATCHES}/${l}); do
-#            echo_info "Apllying patch: ${SRC_META_PATCHES}/${l}/${p}"
-#            git am ${SRC_META_PATCHES}/${l}/${p}
-#        done
-#        echo_step_end
-#    done
+    # Apply meta patches
+    for l in $(ls -1 ${SRC_META_PATCHES}); do
+        msg_step="Apply meta patches for ${l}"
+        echo_step_start
+        cd ${SRC_LAYER_DIR}/${l}
+
+        # backup current branch
+        local_branch=$(git rev-parse --abbrev-ref HEAD)
+        git branch -m "${local_branch}_${TIMESTAMP}"
+        git checkout -b ${local_branch} ${local_branch##*-}
+
+        for p in $(ls -1 ${SRC_META_PATCHES}/${l}); do
+            echo_info "Apllying patch: ${SRC_META_PATCHES}/${l}/${p}"
+            git am ${SRC_META_PATCHES}/${l}/${p}
+        done
+        echo_step_end
+    done
 }
 
 add_layer_stx_build () {
@@ -434,7 +466,7 @@ build_stx_image () {
 
     RUN_CMD="bitbake ${DRYRUN} ${IMG_STX}"
     echo_cmd "Build the ${IMG_STX} image"
-    bitbake ${DRYRUN} ${IMG_STX} 2>&1|tee logs/bitbake_${IMG_STX}_${TIMESTAMP}.log
+    bitbake -k ${DRYRUN} ${IMG_STX} 2>&1|tee logs/bitbake_${IMG_STX}_${TIMESTAMP}.log
 
     echo_step_end
 
@@ -518,15 +550,16 @@ build_anaconda_image () {
     fi
     RUN_CMD="bitbake ${DRYRUN} ${IMG_ANACONDA}"
     echo_cmd "Build the ${IMG_ANACONDA} image"
-    bitbake ${DRYRUN} ${IMG_ANACONDA} 2>&1|tee logs/bitbake_${IMG_ANACONDA}_${TIMESTAMP}.log
+    bitbake -k ${DRYRUN} ${IMG_ANACONDA} 2>&1|tee logs/bitbake_${IMG_ANACONDA}_${TIMESTAMP}.log
 
     if [ -z "${DRYRUN}" ]; then
         cp -Pf ${ISO_ANACONDA} ${ISO_INF}
+        cp -f ${ISO_ANACONDA} ${ISO_INF_ALIAS}
     fi
 
     echo_step_end
 
-    echo_info "Build succeeded, you can get the image in ${ISO_INF}"
+    echo_info "Build succeeded, you can get the image in ${ISO_INF_ALIAS}"
 }
 
 #########################################################################
@@ -534,6 +567,9 @@ build_anaconda_image () {
 #########################################################################
 
 prepare_workspace
+if [ "${GET_SSTATE}" == "Yes" ]; then
+    get_sstate
+fi
 prepare_src
 setup_stx_build
 setup_anaconda_build