From f893a29b2214e9b6ebab7640ee25add2c334b5b6 Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 20 Aug 2023 17:32:16 +0100
Subject: unify most module build scripts

Some of them weren't even used at all, such as the flashrom
build script. the bios_extract build script existed but was
never used, because we only called (from blobutil) a python
script from in there, without actually compiling anything!

resources/script/build/src/for

Usage, e.g.:

./build src for memtest86plus

It also handles fetch. This script is intended largely for
those codebases that are quite simple, requiring trivial
or no intervention besides running "make".

37 sloc reduction. Not a lot, but the audit continues! These
optimisations add up. I started at 3300 sloc in
resources/scripts and me target is 2k (2000) sloc.

Signed-off-by: Leah Rowe <leah@libreboot.org>
---
 Makefile                                     |  3 --
 resources/scripts/build/boot/roms_helper     |  4 +-
 resources/scripts/build/coreboot/utils       | 76 ++++++++++++++++++++++++++++
 resources/scripts/build/descriptors/ich9m    |  8 +--
 resources/scripts/build/module/bios_extract  | 33 ------------
 resources/scripts/build/module/cbutils       | 76 ----------------------------
 resources/scripts/build/module/flashrom      | 40 ---------------
 resources/scripts/build/module/ich9utils     | 36 -------------
 resources/scripts/build/module/memtest86plus | 37 --------------
 resources/scripts/build/module/uefitool      | 44 ----------------
 resources/scripts/build/release/roms         |  2 +-
 resources/scripts/build/src/for              | 53 +++++++++++++++++++
 resources/scripts/update/blobs/download      |  2 +-
 resources/scripts/update/blobs/inject        |  2 +-
 resources/scripts/update/blobs/mrc           |  2 +-
 15 files changed, 136 insertions(+), 282 deletions(-)
 create mode 100755 resources/scripts/build/coreboot/utils
 delete mode 100755 resources/scripts/build/module/bios_extract
 delete mode 100755 resources/scripts/build/module/cbutils
 delete mode 100755 resources/scripts/build/module/flashrom
 delete mode 100755 resources/scripts/build/module/ich9utils
 delete mode 100755 resources/scripts/build/module/memtest86plus
 delete mode 100755 resources/scripts/build/module/uefitool
 create mode 100755 resources/scripts/build/src/for

diff --git a/Makefile b/Makefile
index a0c96656..dfe8b7d9 100644
--- a/Makefile
+++ b/Makefile
@@ -33,9 +33,6 @@
 
 all: roms
 
-modules:
-	./build module all
-
 ich9m-descriptors:
 	./build descriptors ich9m
 
diff --git a/resources/scripts/build/boot/roms_helper b/resources/scripts/build/boot/roms_helper
index 8ea3ae0e..f5ea80af 100755
--- a/resources/scripts/build/boot/roms_helper
+++ b/resources/scripts/build/boot/roms_helper
@@ -159,7 +159,7 @@ cbfstool="cbutils/${tree}/cbfstool"
 corebootrom="${cbdir}/build/coreboot.rom"
 seavgabiosrom="elf/seabios/default/libgfxinit/vgabios.bin"
 
-./build module cbutils ${tree} || exit 1
+./build coreboot utils ${tree} || exit 1
 
 if [ ! -f "${seavgabiosrom}" ] \
     || [ ! -f elf/seabios/default/libgfxinit/bios.bin.elf ] \
@@ -170,7 +170,7 @@ if [ ! -f "${seavgabiosrom}" ] \
 fi
 
 [ "${payload_memtest}" = "y" ] && [ ! -f "memtest86plus/memtest" ] && \
-	./build module memtest86plus
+	./build src for memtest86plus
 
 [ -d "${romdir}/" ] || mkdir -p "${romdir}/"
 rm -f "${romdir}"/*
diff --git a/resources/scripts/build/coreboot/utils b/resources/scripts/build/coreboot/utils
new file mode 100755
index 00000000..45739e95
--- /dev/null
+++ b/resources/scripts/build/coreboot/utils
@@ -0,0 +1,76 @@
+#!/usr/bin/env sh
+
+#  helper script: build various coreboot utilities
+#
+#	Copyright (C) 2014-2016,2020,2021,2023 Leah Rowe <info@minifree.org>
+#
+#	This program is free software: you can redistribute it and/or modify
+#	it under the terms of the GNU General Public License as published by
+#	the Free Software Foundation, either version 3 of the License, or
+#	(at your option) any later version.
+#
+#	This program is distributed in the hope that it will be useful,
+#	but WITHOUT ANY WARRANTY; without even the implied warranty of
+#	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#	GNU General Public License for more details.
+#
+#	You should have received a copy of the GNU General Public License
+#	along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+[ "x${DEBUG+set}" = 'xset' ] && set -v
+set -u -e
+
+printf "Building coreboot utils\n"
+
+main()
+{
+	if [ $# -gt 0 ]; then
+		for board in "${@}"; do
+			build_for_mainboard ${board} || exit 1
+		done
+	else
+		for boarddir in resources/coreboot/*; do
+			[ ! -d "${boarddir}" ] && continue
+			build_for_mainboard ${boarddir##*/} || exit 1
+		done
+	fi
+}
+
+build_for_mainboard() {
+	board="${1}"
+	[ ! -d "resources/coreboot/${board}" ] && \
+		continue
+	[ ! -f "resources/coreboot/${board}/target.cfg" ] && \
+		continue
+	tree="undefined"
+	. "resources/coreboot/${board}/target.cfg" # source
+	if [ "${tree}" = "undefined" ]; then
+		printf "build/cbutils: improper tree definition for '%s'" \
+				"${board}"
+		return 1
+	fi
+	buildutils "${tree}" || return 1
+}
+
+buildutils() {
+	tree="${1}"
+	if [ ! -d "coreboot/${tree}/" ]; then
+		./fetch_trees coreboot $tree || return 1
+	fi
+	for util in cbfstool ifdtool; do
+		[ -f "cbutils/${tree}/${util}" ] \
+			&& continue
+		if [ ! -d "cbutils/${tree}" ]; then
+			mkdir -p "cbutils/${tree}" || return 1
+		fi
+
+		utildir="coreboot/${tree}/util/${util}"
+		make distclean -C "${utildir}" || return 1
+		make -j$(nproc) -C "${utildir}" || return 1
+		mv "${utildir}/${util}" "cbutils/${tree}" || return 1
+		make distclean -C "${utildir}" || return 1
+	done
+}
+
+main $@
diff --git a/resources/scripts/build/descriptors/ich9m b/resources/scripts/build/descriptors/ich9m
index b9a077d9..d7db1b07 100755
--- a/resources/scripts/build/descriptors/ich9m
+++ b/resources/scripts/build/descriptors/ich9m
@@ -23,13 +23,7 @@ ich9gen="util/ich9utils/ich9gen"
 
 main()
 {
-	if [ ! -f "${ich9gen}" ]; then
-		(
-		cd util/ich9utils/ || err "cd"
-		make clean || err "make-clean"
-		make -j$(nproc) || err "make"
-		)
-	fi
+	[ -f "${ich9gen}" ] || ./build src for ich9utils || err "ich9utils make"
 	[ ! -f "${ich9gen}" ] && \
 		err "ich9gen doesn't exist"
 
diff --git a/resources/scripts/build/module/bios_extract b/resources/scripts/build/module/bios_extract
deleted file mode 100755
index 8a40b5a0..00000000
--- a/resources/scripts/build/module/bios_extract
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env sh
-
-#  helper script: builds bios_extract source code
-#
-#	Copyright (C) 2023 Leah Rowe <info@minifree.org>
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-
-[ "x${DEBUG+set}" = 'xset' ] && set -v
-set -u -e
-
-# Build "flashrom" (utility for flashing/dumping ROMs)
-# --------------------------------------------------------------------
-
-if [ ! -d "bios_extract/" ]; then
-    ./fetch bios_extract
-fi
-
-printf "Building bios_extract\n"
-
-make -BC bios_extract
diff --git a/resources/scripts/build/module/cbutils b/resources/scripts/build/module/cbutils
deleted file mode 100755
index 45739e95..00000000
--- a/resources/scripts/build/module/cbutils
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env sh
-
-#  helper script: build various coreboot utilities
-#
-#	Copyright (C) 2014-2016,2020,2021,2023 Leah Rowe <info@minifree.org>
-#
-#	This program is free software: you can redistribute it and/or modify
-#	it under the terms of the GNU General Public License as published by
-#	the Free Software Foundation, either version 3 of the License, or
-#	(at your option) any later version.
-#
-#	This program is distributed in the hope that it will be useful,
-#	but WITHOUT ANY WARRANTY; without even the implied warranty of
-#	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#	GNU General Public License for more details.
-#
-#	You should have received a copy of the GNU General Public License
-#	along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-
-[ "x${DEBUG+set}" = 'xset' ] && set -v
-set -u -e
-
-printf "Building coreboot utils\n"
-
-main()
-{
-	if [ $# -gt 0 ]; then
-		for board in "${@}"; do
-			build_for_mainboard ${board} || exit 1
-		done
-	else
-		for boarddir in resources/coreboot/*; do
-			[ ! -d "${boarddir}" ] && continue
-			build_for_mainboard ${boarddir##*/} || exit 1
-		done
-	fi
-}
-
-build_for_mainboard() {
-	board="${1}"
-	[ ! -d "resources/coreboot/${board}" ] && \
-		continue
-	[ ! -f "resources/coreboot/${board}/target.cfg" ] && \
-		continue
-	tree="undefined"
-	. "resources/coreboot/${board}/target.cfg" # source
-	if [ "${tree}" = "undefined" ]; then
-		printf "build/cbutils: improper tree definition for '%s'" \
-				"${board}"
-		return 1
-	fi
-	buildutils "${tree}" || return 1
-}
-
-buildutils() {
-	tree="${1}"
-	if [ ! -d "coreboot/${tree}/" ]; then
-		./fetch_trees coreboot $tree || return 1
-	fi
-	for util in cbfstool ifdtool; do
-		[ -f "cbutils/${tree}/${util}" ] \
-			&& continue
-		if [ ! -d "cbutils/${tree}" ]; then
-			mkdir -p "cbutils/${tree}" || return 1
-		fi
-
-		utildir="coreboot/${tree}/util/${util}"
-		make distclean -C "${utildir}" || return 1
-		make -j$(nproc) -C "${utildir}" || return 1
-		mv "${utildir}/${util}" "cbutils/${tree}" || return 1
-		make distclean -C "${utildir}" || return 1
-	done
-}
-
-main $@
diff --git a/resources/scripts/build/module/flashrom b/resources/scripts/build/module/flashrom
deleted file mode 100755
index a4dbe35d..00000000
--- a/resources/scripts/build/module/flashrom
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env sh
-
-#  helper script: builds flashrom source code
-#
-#	Copyright (C) 2014, 2015 <info@minifree.org>
-#	Copyright (C) 2015 Klemens Nanni <contact@autoboot.org>
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-
-# This script assumes that the working directory is the root
-# of git or release archive
-
-[ "x${DEBUG+set}" = 'xset' ] && set -v
-set -u -e
-
-# Build "flashrom" (utility for flashing/dumping ROMs)
-# --------------------------------------------------------------------
-
-if [ ! -d "flashrom/" ]; then
-    ./fetch flashrom
-fi
-
-printf "Building flashrom\n"
-(
-cd "flashrom/"
-make clean
-make WARNERROR=no -j$(nproc)
-)
diff --git a/resources/scripts/build/module/ich9utils b/resources/scripts/build/module/ich9utils
deleted file mode 100755
index 5473a513..00000000
--- a/resources/scripts/build/module/ich9utils
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env sh
-
-#  helper script: build ich9utils
-#
-#	Copyright (C) 2014, 2015, 2020, 2023 Leah Rowe <info@minifree.org>
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-
-[ "x${DEBUG+set}" = 'xset' ] && set -v
-set -u -e
-
-main()
-{
-	printf "Build ich9utils\n"
-	make -j$(nproc) -C "util/ich9utils" || err "make"
-}
-
-err()
-{
-	printf "%s: %s\n" $0 $1
-	exit 1
-}
-
-main $@
diff --git a/resources/scripts/build/module/memtest86plus b/resources/scripts/build/module/memtest86plus
deleted file mode 100755
index 45727b77..00000000
--- a/resources/scripts/build/module/memtest86plus
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env sh
-
-#  helper script: builds memtest86+ source code
-#
-#	Copyright (C) 2014, 2015, 2020 Leah Rowe <info@minifree.org>
-#	Copyright (C) 2015 Klemens Nanni <contact@autoboot.org>
-#
-#	This program is free software: you can redistribute it and/or modify
-#	it under the terms of the GNU General Public License as published by
-#	the Free Software Foundation, either version 3 of the License, or
-#	(at your option) any later version.
-#
-#	This program is distributed in the hope that it will be useful,
-#	but WITHOUT ANY WARRANTY; without even the implied warranty of
-#	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#	GNU General Public License for more details.
-#
-#	You should have received a copy of the GNU General Public License
-#	along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-
-# This script assumes that the working directory is the root
-# of git or release archive
-
-[ "x${DEBUG+set}" = 'xset' ] && set -v
-set -u -e
-
-# Build MemTest86+ payload
-# --------------------------------------------------------------------
-
-printf "Building MemTest86+\n"
-
-if [ ! -d "memtest86plus/" ]; then
-	./fetch memtest86plus
-fi
-
-make -j$(nproc) -BC memtest86plus
diff --git a/resources/scripts/build/module/uefitool b/resources/scripts/build/module/uefitool
deleted file mode 100755
index 891d8bf8..00000000
--- a/resources/scripts/build/module/uefitool
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env sh
-
-#  helper script: builds bios_extract source code
-#
-#	Copyright (C) 2023 Leah Rowe <info@minifree.org>
-#
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-
-[ "x${DEBUG+set}" = 'xset' ] && set -v
-set -u -e
-
-main()
-{
-	if [ ! -d "uefitool" ]; then
-		./fetch uefitool || fail "cannot download uefitool"
-	fi
-
-	printf "Building uefitool (UEFIExtract)\n"
-
-	(
-	cd uefitool || fail "uefitool not downloaded"
-	cmake UEFIExtract/ || fail "cannot cmake UEFIExtract"
-	make || fail "error compiling UEFIExtract"
-	)
-}
-
-fail()
-{
-	printf "(uefitool build) %s\n" $1 1>&2
-}
-
-main $@
diff --git a/resources/scripts/build/release/roms b/resources/scripts/build/release/roms
index faf07af0..b9d2487e 100755
--- a/resources/scripts/build/release/roms
+++ b/resources/scripts/build/release/roms
@@ -121,7 +121,7 @@ strip_archive()
 	if [ ! -d coreboot/${tree} ]; then
 		./fetch_trees coreboot ${tree} || exit 1
 	fi
-	./build module cbutils ${tree} || exit 1
+	./build coreboot utils ${tree} || exit 1
 
 	rm -Rf "${romdir}_tmp" # dirty hack, to reduce disk io later
 	# rather than using /tmp, which might not be tmpfs
diff --git a/resources/scripts/build/src/for b/resources/scripts/build/src/for
new file mode 100755
index 00000000..b3e9ff8e
--- /dev/null
+++ b/resources/scripts/build/src/for
@@ -0,0 +1,53 @@
+#!/usr/bin/env sh
+
+#  helper script: build utils used by lbmk
+#
+#	Copyright (C) 2023 Leah Rowe <info@minifree.org>
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+[ "x${DEBUG+set}" = 'xset' ] && set -v
+set -u -e
+
+project=""
+
+main()
+{
+	[ $# -lt 1 ] && err "project name not specified"
+	project="${1}"
+	shift 1
+
+	[ "${project}" = "ich9utils" ] && project="util/ich9utils"
+
+	[ -d "${project}" ] || ./fetch "${project}" \
+	    || err "Cannot download project, ${project}"
+	[ -d "${project}" ] || err "Project, ${project}, not downloaded"
+
+	if [ "${project}" = "uefitool" ]; then
+		(
+		cd uefitool || err "cannot cd to uefitool/"
+		cmake UEFIExtract/ || err "cannot cmake UEFIExtract"
+		)
+	fi
+	make -C "${project}" || err "Cannot build project, ${project}"
+}
+
+err()
+{
+	printf "ERROR: build/src: %s\n" "${1}" 1>&2
+	exit 1
+}
+
+main $@
diff --git a/resources/scripts/update/blobs/download b/resources/scripts/update/blobs/download
index a79fbad5..49f3fa4c 100755
--- a/resources/scripts/update/blobs/download
+++ b/resources/scripts/update/blobs/download
@@ -207,7 +207,7 @@ build_dependencies()
 				|| fail "could not download uefitool"
 	fi
 	if [ ! -f uefitool/uefiextract ]; then
-		./build module uefitool \
+		./build src for uefitool \
 				|| fail "could not build uefitool"
 	fi
 	if [ ! -f ${cbdir}/util/kbc1126/kbc1126_ec_dump ]; then
diff --git a/resources/scripts/update/blobs/inject b/resources/scripts/update/blobs/inject
index 0c38c5ed..649b865d 100755
--- a/resources/scripts/update/blobs/inject
+++ b/resources/scripts/update/blobs/inject
@@ -149,7 +149,7 @@ build_dependencies()
 		./fetch_trees coreboot default
 	fi
 
-	./build module cbutils default || fail "could not build cbutils"
+	./build coreboot utils default || fail "could not build cbutils"
 
 	./update blobs download ${board} || \
 			fail "Could not download blobs for ${board}"
diff --git a/resources/scripts/update/blobs/mrc b/resources/scripts/update/blobs/mrc
index 84e79f62..8213e6c1 100755
--- a/resources/scripts/update/blobs/mrc
+++ b/resources/scripts/update/blobs/mrc
@@ -76,7 +76,7 @@ build_dependencies()
 	if [ ! -d "${cbdir}/" ]; then
 	    ./fetch_trees coreboot default || return 1
 	fi
-	./build module cbutils default || return 1
+	./build coreboot utils default || return 1
 	return 0
 }
 
-- 
cgit v1.2.1