124a8c2d6SJoseph Chen#!/bin/bash 224a8c2d6SJoseph Chenset -e 324a8c2d6SJoseph Chen 4*f3572ad9SJoseph ChenDIFF_DOC_ALL="scripts/.diff_all.txt" 5*f3572ad9SJoseph ChenDIFF_DOC_FIXED="scripts/.diff_fixed.txt" 6*f3572ad9SJoseph Chen 7*f3572ad9SJoseph Chenfunction check_doc() 8*f3572ad9SJoseph Chen{ 9*f3572ad9SJoseph Chen local TOP_SEVERITY LANGUAGE=$1 10*f3572ad9SJoseph Chen 11*f3572ad9SJoseph Chen if [ "${LANGUAGE}" == "EN" ] ; then 12*f3572ad9SJoseph Chen SVT_CRITIAL="critical" 13*f3572ad9SJoseph Chen SVT_IMPORTANT="important" 14*f3572ad9SJoseph Chen SVT_MODERATE="moderate" 15*f3572ad9SJoseph Chen DOC=`git log -1 --name-only | sed -n "/_EN\.md/p"` 16*f3572ad9SJoseph Chen else 17*f3572ad9SJoseph Chen SVT_CRITIAL="紧急" 18*f3572ad9SJoseph Chen SVT_IMPORTANT="重要" 19*f3572ad9SJoseph Chen SVT_MODERATE="普通" 20*f3572ad9SJoseph Chen DOC=`git log -1 --name-only | sed -n "/_CN\.md/p"` 21*f3572ad9SJoseph Chen fi 22*f3572ad9SJoseph Chen 23*f3572ad9SJoseph Chen echo "Checking doc: ${DOC}" 24*f3572ad9SJoseph Chen 25*f3572ad9SJoseph Chen git show -1 ${DOC} | sed -n "/^+/p" > ${DIFF_DOC_ALL} 26*f3572ad9SJoseph Chen TITLE=`sed -n "/^+## /p" ${DIFF_DOC_ALL} | tr -d " +#"` 27*f3572ad9SJoseph Chen FILE=`sed -n "/^+| 20[0-9][0-9]-/p" ${DIFF_DOC_ALL} | tr -d " " | awk -F "|" '{ print $3 }'` 28*f3572ad9SJoseph Chen COMMIT=`sed -n "/^+| 20[0-9][0-9]-/p" ${DIFF_DOC_ALL} | tr -d " " | awk -F "|" '{ print $4 }'` 29*f3572ad9SJoseph Chen SEVERITY=`sed -n "/^+| 20[0-9][0-9]-/p" ${DIFF_DOC_ALL} | tr -d " " | awk -F "|" '{ print $5 }'` 30*f3572ad9SJoseph Chen HORIZONTAL_LINE=`sed -n "/^+------$/p" ${DIFF_DOC_ALL}` 31*f3572ad9SJoseph Chen # echo "### ${COMMIT}, ${SEVERITY}, ${TITLE}, ${FILE}" 32*f3572ad9SJoseph Chen 33*f3572ad9SJoseph Chen # check standalone file 34*f3572ad9SJoseph Chen if ! echo ${FILE} | grep -q { ; then 35*f3572ad9SJoseph Chen if ! git log -1 --name-only | grep -q ${FILE}; then 36*f3572ad9SJoseph Chen echo "ERROR: ${DOC}: '${FILE}' is not update in this patch" 37*f3572ad9SJoseph Chen exit 1 38*f3572ad9SJoseph Chen fi 39*f3572ad9SJoseph Chen fi 40*f3572ad9SJoseph Chen 41*f3572ad9SJoseph Chen # check title 42*f3572ad9SJoseph Chen if [ "${TITLE}" != "${FILE}" ]; then 43*f3572ad9SJoseph Chen echo "ERROR: ${DOC}: Title '${TITLE}' is not match with '${FILE}'" 44*f3572ad9SJoseph Chen exit 1 45*f3572ad9SJoseph Chen fi 46*f3572ad9SJoseph Chen 47*f3572ad9SJoseph Chen # check commit 48*f3572ad9SJoseph Chen COMMIT=${COMMIT//#/ } 49*f3572ad9SJoseph Chen for LIST in ${COMMIT}; do 50*f3572ad9SJoseph Chen CMT=`echo ${LIST} | cut -d : -f 2` 51*f3572ad9SJoseph Chen if ! git log -1 | grep -q ${CMT} ; then 52*f3572ad9SJoseph Chen echo "ERROR: ${DOC}: '${CMT}' is not match in commit message" 53*f3572ad9SJoseph Chen exit 1 54*f3572ad9SJoseph Chen fi 55*f3572ad9SJoseph Chen done 56*f3572ad9SJoseph Chen 57*f3572ad9SJoseph Chen # check severity 58*f3572ad9SJoseph Chen if [ "${SEVERITY}" != "${SVT_CRITIAL}" -a "${SEVERITY}" != "${SVT_IMPORTANT}" -a "${SEVERITY}" != "${SVT_MODERATE}" ]; then 59*f3572ad9SJoseph Chen echo "ERROR: ${DOC}: Unknown main severity: ${SEVERITY}" 60*f3572ad9SJoseph Chen exit 1 61*f3572ad9SJoseph Chen fi 62*f3572ad9SJoseph Chen 63*f3572ad9SJoseph Chen # check horizontal line 64*f3572ad9SJoseph Chen if [ -z "${HORIZONTAL_LINE}" ]; then 65*f3572ad9SJoseph Chen echo "ERROR: ${DOC}: No horizontal line '------' at the last" 66*f3572ad9SJoseph Chen exit 1 67*f3572ad9SJoseph Chen fi 68*f3572ad9SJoseph Chen 69*f3572ad9SJoseph Chen # check 'Fixed' content 70*f3572ad9SJoseph Chen if grep -q "^+### Fixed" ${DIFF_DOC_ALL} ; then 71*f3572ad9SJoseph Chen awk -v RS='### Fixed' 'END{printf "%s", $0}' ${DIFF_DOC_ALL} > ${DIFF_DOC_FIXED} 72*f3572ad9SJoseph Chen sed -i "/^$/d" ${DIFF_DOC_FIXED} 73*f3572ad9SJoseph Chen sed -i "/Index/d" ${DIFF_DOC_FIXED} 74*f3572ad9SJoseph Chen sed -i "/---/d" ${DIFF_DOC_FIXED} 75*f3572ad9SJoseph Chen sed -i "/^+$/d" ${DIFF_DOC_FIXED} 76*f3572ad9SJoseph Chen 77*f3572ad9SJoseph Chen while read LINE 78*f3572ad9SJoseph Chen do 79*f3572ad9SJoseph Chen EACH_SEVERITY=`echo "${LINE}" | awk -F "|" '{ print $3 }' | tr -d " "` 80*f3572ad9SJoseph Chen if [ "${EACH_SEVERITY}" != "${SVT_CRITIAL}" -a "${EACH_SEVERITY}" != "${SVT_IMPORTANT}" -a "${EACH_SEVERITY}" != "${SVT_MODERATE}" ]; then 81*f3572ad9SJoseph Chen echo "ERROR: ${DOC}: Unknown severity: ${EACH_SEVERITY}" 82*f3572ad9SJoseph Chen exit 1 83*f3572ad9SJoseph Chen fi 84*f3572ad9SJoseph Chen 85*f3572ad9SJoseph Chen # echo "## EACH: $EACH_SEVERITY" 86*f3572ad9SJoseph Chen if [ -z "${TOP_SEVERITY}" ]; then 87*f3572ad9SJoseph Chen TOP_SEVERITY="${EACH_SEVERITY}" 88*f3572ad9SJoseph Chen elif [ "${TOP_SEVERITY}" == "${SVT_MODERATE}" ]; then 89*f3572ad9SJoseph Chen if [ "${EACH_SEVERITY}" == "${SVT_CRITIAL}" -o "${EACH_SEVERITY}" == "${SVT_IMPORTANT}" ]; then 90*f3572ad9SJoseph Chen TOP_SEVERITY="${EACH_SEVERITY}" 91*f3572ad9SJoseph Chen fi 92*f3572ad9SJoseph Chen elif [ "${TOP_SEVERITY}" == "${SVT_IMPORTANT}" ]; then 93*f3572ad9SJoseph Chen if [ "${EACH_SEVERITY}" == "${SVT_CRITIAL}" ]; then 94*f3572ad9SJoseph Chen TOP_SEVERITY="${EACH_SEVERITY}" 95*f3572ad9SJoseph Chen fi 96*f3572ad9SJoseph Chen fi 97*f3572ad9SJoseph Chen done < ${DIFF_DOC_FIXED} 98*f3572ad9SJoseph Chen 99*f3572ad9SJoseph Chen if [ "${SEVERITY}" != "${TOP_SEVERITY}" ]; then 100*f3572ad9SJoseph Chen echo "ERROR: ${DOC}: Main severity should be '${TOP_SEVERITY}'" 101*f3572ad9SJoseph Chen exit 1 102*f3572ad9SJoseph Chen fi 103*f3572ad9SJoseph Chen fi 104*f3572ad9SJoseph Chen} 105*f3572ad9SJoseph Chen 106*f3572ad9SJoseph Chenfunction check_docs() 107*f3572ad9SJoseph Chen{ 108*f3572ad9SJoseph Chen if git log -1 --name-only | grep -Eq '.bin|.elf' ; then 109*f3572ad9SJoseph Chen DOC_CN=`git log -1 --name-only | sed -n "/_CN\.md/p"` 110*f3572ad9SJoseph Chen DOC_EN=`git log -1 --name-only | sed -n "/_EN\.md/p"` 111*f3572ad9SJoseph Chen if [ -z "${DOC_CN}" -o -z "${DOC_EN}" ]; then 112*f3572ad9SJoseph Chen echo "ERROR: Update CN/EN Release-Note when .bin or .elf changes" 113*f3572ad9SJoseph Chen exit 1 114*f3572ad9SJoseph Chen fi 115*f3572ad9SJoseph Chen check_doc CN 116*f3572ad9SJoseph Chen check_doc EN 117*f3572ad9SJoseph Chen fi 118*f3572ad9SJoseph Chen} 119*f3572ad9SJoseph Chen 12015aaf94fSJoseph Chenfunction pack_loader_image() 12124a8c2d6SJoseph Chen{ 12215aaf94fSJoseph Chen for FILE in `ls ./RKBOOT/*MINIALL*.ini` 12324a8c2d6SJoseph Chen do 12415aaf94fSJoseph Chen if [ "${FILE}" = "./RKBOOT/RK302AMINIALL.ini" -o \ 12515aaf94fSJoseph Chen "${FILE}" = "./RKBOOT/RK30BMINIALL.ini" -o \ 12615aaf94fSJoseph Chen "${FILE}" = "./RKBOOT/RK30MINIALL.ini" -o \ 12715aaf94fSJoseph Chen "${FILE}" = "./RKBOOT/RK310BMINIALL.ini" ]; then 12824a8c2d6SJoseph Chen continue; 12924a8c2d6SJoseph Chen fi 13024a8c2d6SJoseph Chen 13115aaf94fSJoseph Chen if grep -q '^PATH=img/' ${FILE}; then 13207c86261SJoseph Chen continue; 13307c86261SJoseph Chen fi 13407c86261SJoseph Chen 13515aaf94fSJoseph Chen echo "Pack loader: ${FILE}" 13615aaf94fSJoseph Chen ./tools/boot_merger ${FILE} 137f3822d68SJoseph Chen rm -f *loader*.bin *download*.bin *idblock*.img 13824a8c2d6SJoseph Chen echo 13924a8c2d6SJoseph Chen done 14024a8c2d6SJoseph Chen} 14124a8c2d6SJoseph Chen 14215aaf94fSJoseph Chenfunction pack_trust_image() 14324a8c2d6SJoseph Chen{ 14424a8c2d6SJoseph Chen # Pack 32-bit trust 14515aaf94fSJoseph Chen for FILE in `ls ./RKTRUST/*TOS*.ini` 14624a8c2d6SJoseph Chen do 14715aaf94fSJoseph Chen if ! test -s ${FILE}; then 148075296bdSJoseph Chen continue; 14915aaf94fSJoseph Chen elif ! grep -q 'TOS' ${FILE}; then 150d4bf7444SJoseph Chen continue; 15115aaf94fSJoseph Chen elif grep -q '^PATH=img/' ${FILE}; then 15207c86261SJoseph Chen continue; 15307c86261SJoseph Chen fi 15407c86261SJoseph Chen 15515aaf94fSJoseph Chen echo "Pack trust: ${FILE}" 15624a8c2d6SJoseph Chen # Parse orignal path 15715aaf94fSJoseph Chen TOS=`sed -n "/TOS=/s/TOS=//p" ${FILE}|tr -d '\r'` 15815aaf94fSJoseph Chen TOS_TA=`sed -n "/TOSTA=/s/TOSTA=//p" ${FILE}|tr -d '\r'` 15924a8c2d6SJoseph Chen 16024a8c2d6SJoseph Chen # replace "./tools/rk_tools/" with "./" to compatible legacy ini content of rkdevelop branch 16124a8c2d6SJoseph Chen TOS=$(echo ${TOS} | sed "s/tools\/rk_tools\//\.\//g") 16224a8c2d6SJoseph Chen TOS_TA=$(echo ${TOS_TA} | sed "s/tools\/rk_tools\//\.\//g") 16324a8c2d6SJoseph Chen 1649d00b70aSJoseph Chen if [ x${TOS_TA} != x -a x${TOS} != x ]; then 16524a8c2d6SJoseph Chen ./tools/loaderimage --pack --trustos ${TOS} ./trust.img 0x68400000 16624a8c2d6SJoseph Chen ./tools/loaderimage --pack --trustos ${TOS_TA} ./trust_with_ta.img 0x68400000 1679d00b70aSJoseph Chen elif [ ${TOS} ]; then 16824a8c2d6SJoseph Chen ./tools/loaderimage --pack --trustos ${TOS} ./trust.img 0x68400000 1699d00b70aSJoseph Chen elif [ ${TOS_TA} ]; then 17024a8c2d6SJoseph Chen ./tools/loaderimage --pack --trustos ${TOS_TA} ./trust.img 0x68400000 17124a8c2d6SJoseph Chen else 17224a8c2d6SJoseph Chen exit 1 17324a8c2d6SJoseph Chen fi 174f3822d68SJoseph Chen rm -f trust*.img 17524a8c2d6SJoseph Chen echo 17624a8c2d6SJoseph Chen done 17724a8c2d6SJoseph Chen 17824a8c2d6SJoseph Chen # Pack 64-bit trust 17915aaf94fSJoseph Chen for FILE in `ls ./RKTRUST/*TRUST*.ini` 18024a8c2d6SJoseph Chen do 18115aaf94fSJoseph Chen if grep -q '^PATH=img/' ${FILE}; then 18207c86261SJoseph Chen continue; 18307c86261SJoseph Chen fi 18407c86261SJoseph Chen 18515aaf94fSJoseph Chen echo "Pack trust: ${FILE}" 18615aaf94fSJoseph Chen ./tools/trust_merger ${FILE} 18715aaf94fSJoseph Chen rm -f trust*.img 18824a8c2d6SJoseph Chen echo 18924a8c2d6SJoseph Chen done 19024a8c2d6SJoseph Chen} 19124a8c2d6SJoseph Chen 19215aaf94fSJoseph Chenfunction check_dirty() 1937448aaf2SJoseph Chen{ 194*f3572ad9SJoseph Chen for FILE in `find -name '*spl*.bin' -o -name '*tpl*.bin' -o -name '*usbplug*.bin' -o -name '*bl31*.elf' -o -name '*bl32*.bin'`; do 195*f3572ad9SJoseph Chen echo "Checking clean: ${FILE}" 19615aaf94fSJoseph Chen if strings ${FILE} | grep '\-dirty ' ; then 19715aaf94fSJoseph Chen echo "ERROR: ${FILE} is dirty" 1987448aaf2SJoseph Chen exit 1 1997448aaf2SJoseph Chen fi 2007448aaf2SJoseph Chen done 2017448aaf2SJoseph Chen} 2027448aaf2SJoseph Chen 20315aaf94fSJoseph Chenfunction check_stripped() 204c0efc7efSJoseph Chen{ 20515aaf94fSJoseph Chen for FILE in `find -name '*bl31*.elf'`; do 20615aaf94fSJoseph Chen echo "Checking strip: ${FILE}" 20715aaf94fSJoseph Chen INFO=`file ${FILE}` 20815aaf94fSJoseph Chen if echo ${INFO} | grep -q "not stripped" ; then 20915aaf94fSJoseph Chen echo "ERROR: ${FILE} is not stripped" 210c0efc7efSJoseph Chen exit 1 211c0efc7efSJoseph Chen fi 212c0efc7efSJoseph Chen done 213c0efc7efSJoseph Chen} 214c0efc7efSJoseph Chen 215*f3572ad9SJoseph Chenfunction check_mode() 216*f3572ad9SJoseph Chen{ 217*f3572ad9SJoseph Chen echo "Checking file mode..." 218*f3572ad9SJoseph Chen if git whatchanged -1 --oneline | sed -n '/RKBOOT\//p; /RKTRUST\//p; /bin\//p; /doc\//p;' | awk '{ print $2 }' | grep -q 755 ; then 219*f3572ad9SJoseph Chen git whatchanged -1 --oneline | sed -n '/RKBOOT\//p; /RKTRUST\//p; /bin\//p; /doc\//p;' | grep 755 220*f3572ad9SJoseph Chen echo "ERROR: Set 644 permission but not 755." 221*f3572ad9SJoseph Chen exit 1 222*f3572ad9SJoseph Chen fi 223*f3572ad9SJoseph Chen} 224*f3572ad9SJoseph Chen 22515aaf94fSJoseph Chenfunction finish() 22624a8c2d6SJoseph Chen{ 227*f3572ad9SJoseph Chen rm -f ${DIFF_DOC_ALL} ${DIFF_DOC_FIXED} 228*f3572ad9SJoseph Chen echo "OK, everything is nice." 22924a8c2d6SJoseph Chen echo 23024a8c2d6SJoseph Chen} 23124a8c2d6SJoseph Chen 232*f3572ad9SJoseph Chencheck_mode 233*f3572ad9SJoseph Chencheck_docs 2347448aaf2SJoseph Chencheck_dirty 235c0efc7efSJoseph Chencheck_stripped 23624a8c2d6SJoseph Chenpack_loader_image 23724a8c2d6SJoseph Chenpack_trust_image 23824a8c2d6SJoseph Chenfinish 239