[coreboot-gerrit] Change in coreboot[master]: tint: introduce the new tint build system with checksum verification

Mike Banon (Code Review) gerrit at coreboot.org
Fri Feb 23 18:18:26 CET 2018


Mike Banon has uploaded this change for review. ( https://review.coreboot.org/23856


Change subject: tint: introduce the new tint build system with checksum verification
......................................................................

tint: introduce the new tint build system with checksum verification

Three stages of the new tint build system:

 1) generate_core.sh extracts the core part from buildgcc script,
     most importantly the checksum calculation/verification functions

 2) tintify_core.sh adds the tint-specific footer/header to the core,
     such as the properties of current version including its checksum

 3) tint.sh - generated and "tintified" core script - builds a tint

Change-Id: I1d24f222d1b92030b81bba3951e243a2a9f37290
Signed-off-by: Mike Banon <mikebdp2 at gmail.com>
---
M payloads/external/tint/Makefile
A payloads/external/tint/generate_core.sh
R payloads/external/tint/tint-0.04+nmu1_libpayload.patch
A payloads/external/tint/tintify_core.sh
4 files changed, 215 insertions(+), 21 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/56/23856/1

diff --git a/payloads/external/tint/Makefile b/payloads/external/tint/Makefile
index 253bfea..0c0300a 100644
--- a/payloads/external/tint/Makefile
+++ b/payloads/external/tint/Makefile
@@ -1,5 +1,23 @@
-project_url=https://mirror.fsf.org/trisquel/pool/main/t/tint/tint_0.04+nmu1.tar.gz
-archive_name=tint_0.04+nmu1.tar.gz
+#
+# TINT build system
+#
+
+#
+# Properties of the current TINT version
+#
+
+TINT_VERSION=0.04+nmu1
+TINT_ARCHIVE="https://mirror.fsf.org/trisquel/pool/main/t/tint/tint_${TINT_VERSION}.tar.gz"
+TINT_DIR="tint-${TINT_VERSION}"
+TINT_CHECKSUM=7fcaa428c6d0de7096d1e4fbfd14848096ae5aad
+
+#
+# Locations of the input/output scripts
+#
+
+buildgcc="./../../../util/crossgcc/buildgcc"
+corescript="./core.sh"
+tintified="./tint.sh"
 
 unexport KCONFIG_AUTOHEADER
 unexport KCONFIG_AUTOCONFIG
@@ -10,28 +28,33 @@
 
 all: tint
 
-tint: patch
-	echo "    MAKE       TINT     "
-	$(MAKE) -C tint
+################################################################################
+#
+# Three stages of TINT build system:
+#
+# 1) generate_core.sh extracts the core part from buildgcc script,
+#     most importantly the checksum calculation/verification functions
+#
+# 2) tintify_core.sh adds the TINT-specific footer/header to the core,
+#     such as the properties of current version including its checksum
+#
+# 3) tint.sh - generated and "tintified" core script - builds a TINT
+#
+################################################################################
 
-patch: download
-	cd tint; \
-	if [ -e debian ]; then \
-		rm -rf debian typedefs.h Makefile; \
-    		touch Makefile; \
-    		patch -l -p1 < ../libpayload_tint.patch; \
-  	fi
-
-download:
-	test -d tint || { wget $(project_url); \
-		tar -xvf $(archive_name); \
-		rm $(archive_name); \
-		mv tint-0.04+nmu1 tint; }
+tint:
+	./generate_core.sh ${buildgcc} ${corescript} prepare_before_patch
+	./tintify_core.sh ${corescript} ${tintified} \
+		${TINT_VERSION} ${TINT_ARCHIVE} ${TINT_DIR} ${TINT_CHECKSUM}
+	${tintified}
+	mv ./${TINT_DIR} ./tint
 
 clean:
-	test -d tint && $(MAKE) -C tint clean || exit 0
+	test -d ./tint && $(MAKE) -C ./tint clean || exit 0
 
 distclean:
-	rm -rf tint
+	rm -rf ./tint
+	rm -f ${corescript}
+	rm -f ${tintified}
 
-.PHONY: download patch tint clean distclean
+.PHONY: tint clean distclean
diff --git a/payloads/external/tint/generate_core.sh b/payloads/external/tint/generate_core.sh
new file mode 100755
index 0000000..f891178
--- /dev/null
+++ b/payloads/external/tint/generate_core.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+#
+# generate_core.sh extracts the core part from buildgcc script,
+# most importantly the checksum calculation/verification functions
+#
+# Copyright (C) 2018 Mike Banon <mikebdp2 at gmail.com>
+#
+##############################################################################
+#
+# USAGE:
+# 	./generate_core.sh <buildgcc> <corescript> prepare_before_patch
+# where
+# 	buildgcc   - path to input buildgcc script
+# 	corescript - path to output core part script
+# 	prepare_before_patch - optional argument to insert prepare_${package}
+# 				call into the unpack_and_patch function, e.g.
+# 				for removing some files with rm command
+# 				in order to reduce the size of patch file
+#
+##############################################################################
+
+buildgcc=$1
+corescript=$2
+prepare_before_patch=$3
+
+#
+# Imports the source file fragment between start and end into the
+# destination file, optionally excluding the last line if not needed
+#
+
+import_from_file() {
+        source=$1
+        destination=$2
+	start=$3
+	end=$4
+	last_line_disabled=$5
+	if [ -z ${last_line_disabled} ]; then
+		sed -n "/^${start}/,/^${end}/{/^${start}/{p;n};{p}}" $source >> $destination
+	else
+		sed -n "/^${start}/,/^${end}/{/^${start}/{p;n};/^${end}/{q};{p}}" $source >> $destination
+	fi
+}
+
+#
+# Import the color defines together with UNAME/HALT_FOR_TOOLS variables
+#
+
+import_from_file $buildgcc $corescript "red=" "HALT_FOR_TOOLS=0" || exit "$?"
+
+#
+# Import the core functions
+#
+
+FUNCTIONS="please_install searchtool download compute_hash error_hash_mismatch verify_hash unpack_and_patch"
+
+for F in $FUNCTIONS; do
+	import_from_file $buildgcc $corescript "$F()" "}" || exit "$?"
+done
+
+#
+# Import a fragment where we find tar/patch/make and other essential tools
+#
+
+import_from_file $buildgcc $corescript "# Find all the required tools" "# Allow" last_line_disabled || exit "$?"
+
+#
+# Import a fragment with conditional exit if some required tools were not found
+#
+
+import_from_file $buildgcc $corescript "if \[ \"\$HALT_FOR_TOOLS" "fi" || exit "$?"
+
+#
+# Avoid the unnecessary subdirectories holding a single file each
+#
+
+sed -i -e "s/patches\///g" $corescript
+sed -i -e "s/sum\///g" $corescript
+sed -i -e "s/tarballs\///g" $corescript
+sed -i -e "s/cd tarballs//g" $corescript
+sed -i -e "s/cd \.\.//g" $corescript
+
+#
+# Get the known checksum without using a dedicated single-line file
+#
+
+sed -i -e "s/\tknown_hash=\"\$(get_known_hash.*/\tknown_hash=\"\$2\"/g" $corescript
+
+#
+# Update the paths printed at the error messages
+#
+
+sed -i -e "s/util\/crossgcc\///g" $corescript
+
+#
+# Insert prepare_${package} function call between the unpack and patch operations
+#
+
+if [ ! -z ${prepare_before_patch} ]; then
+	sed -i -e "/\$TAR \$FLAGS \$(basename \$archive)/a prepare_\${package} || exit \"\$?\"" $corescript
+fi
diff --git a/payloads/external/tint/libpayload_tint.patch b/payloads/external/tint/tint-0.04+nmu1_libpayload.patch
similarity index 100%
rename from payloads/external/tint/libpayload_tint.patch
rename to payloads/external/tint/tint-0.04+nmu1_libpayload.patch
diff --git a/payloads/external/tint/tintify_core.sh b/payloads/external/tint/tintify_core.sh
new file mode 100755
index 0000000..a12020d
--- /dev/null
+++ b/payloads/external/tint/tintify_core.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+#
+# tintify_core.sh adds the TINT-specific footer/header to the core,
+# such as the properties of current TINT version including its checksum
+#
+# Copyright (C) 2018 Mike Banon <mikebdp2 at gmail.com>
+#
+################################################################################
+#
+# USAGE:
+#      	./tintify_core.sh <corescript> <tintified> \
+# 			<TINT_VERSION> <TINT_ARCHIVE> <TINT_DIR> <TINT_CHECKSUM>
+# where
+#       corescript - path to input core script
+#       tintified  - path to output tint script
+#
+################################################################################
+
+corescript=$1
+tintified=$2
+
+#
+# TINT-specific header
+#
+
+#
+# Insert the properties of the current TINT version
+#
+
+echo "#!/bin/sh" > $tintified
+echo "TINT_VERSION=${3}" >> $tintified
+echo "TINT_ARCHIVE=${4}" >> $tintified
+echo "TINT_DIR=${5}" >> $tintified
+echo "TINT_CHECKSUM=${6}" >> $tintified
+
+#
+# Add the prepare_TINT() function, it will remove the unneeded debian directory
+# as well as typedefs.h and old Makefile to significantly reduce the patch size
+#
+
+echo "prepare_TINT() {" >> $tintified
+echo "if [ ! -z ./\${TINT_DIR} ] && [ -e ./\${TINT_DIR}/debian ]; then" >> $tintified
+echo "rm -rf ./\${TINT_DIR}/debian ./\${TINT_DIR}/typedefs.h ./\${TINT_DIR}/Makefile;" >> $tintified
+echo "touch ./\${TINT_DIR}/Makefile;" >> $tintified
+echo "fi" >> $tintified
+echo "}" >> $tintified
+
+#
+# Importing the core script
+#
+
+cat ${corescript} >> ${tintified}
+
+#
+# TINT-specific footer
+#
+
+echo "printf \"Downloading and verifing TINT tarball ... \\n\"" >> ${tintified}
+echo "download TINT || exit \"\$?\"" >> ${tintified}
+echo "verify_hash TINT \${TINT_CHECKSUM} || exit \"\$?\"" >> ${tintified}
+echo "printf \"Downloaded TINT tarball ... \${green}ok\${NC}\\n\"" >> ${tintified}
+
+echo "printf \"Unpacking and patching TINT... \\n\"" >> ${tintified}
+echo "unpack_and_patch TINT || exit 1" >> ${tintified}
+echo "printf \"Unpacked and patched TINT... \${green}ok\${NC}\\n\"" >> ${tintified}
+
+echo "printf \"Building TINT ... \\n\"" >> ${tintified}
+echo "make -C ./\${TINT_DIR}" >> ${tintified}
+echo "printf \"TINT built ... \${green}ok\${NC}\\n\"" >> ${tintified}
+
+chmod +x ${tintified}

-- 
To view, visit https://review.coreboot.org/23856
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1d24f222d1b92030b81bba3951e243a2a9f37290
Gerrit-Change-Number: 23856
Gerrit-PatchSet: 1
Gerrit-Owner: Mike Banon <mikebdp2 at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20180223/c86423e7/attachment-0001.html>


More information about the coreboot-gerrit mailing list