trees: support -d (dry run) for custom build logic
-d does the same as -b, except for actually building anything! in effect, it does the same as -f (fetch) except that the resulting variable assignments will not be recursive (as with -f). if -d is passed, configuration is still loaded, defconfig files are still cycled through, and more importantly: helper functions are still processed. the grub, serprog and coreboot helper functions have been modified to return early (zero status) if -d is passed. example usage: ./update trees -d coreboot x230_12mb this would download the files, NOT build coreboot, and NOT build the payloads. there is one additional benefit to doing it this way: the utils command has been removed, e.g. ./update trees -b coreboot utils default the equivalent is now: ./update trees -d coreboot default the overall effect of this change is that the trees script no longer contains any project-specific logic, except for the crossgcc build logic. it does include some config/data mkhelper files at the top, for serprog and coreboot, so that those variables defined in those files can be global, but another solution to mitigate that will also be implemented in a future commit. the purpose of this and other revisions (in the final push to complete lbmk audit 6 / cbmk audit 2) is to generalise as much logic as possible, removing various ugly hacks. Signed-off-by: Leah Rowe <leah@libreboot.org>audit2
parent
2dad7b0b6f
commit
4dbce8aef0
|
@ -9,5 +9,6 @@ v="$v displaymode tmprom"
|
|||
eval `setvars "n" $pv`
|
||||
eval `setvars "" $v`
|
||||
|
||||
premake="mkvendorfiles"
|
||||
mkhelper="mkcorebootbin"
|
||||
postmake="mkcoreboottar"
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
mkserprog()
|
||||
{
|
||||
[ "$_f" = "-d" ] && return 0 # dry run
|
||||
basename -as .h "$serdir/"*.h > "$TMPDIR/ser" || $err "!mk $1 $TMPDIR"
|
||||
|
||||
while read -r sertarget; do
|
||||
|
@ -25,6 +26,7 @@ mkserprog()
|
|||
|
||||
mkpayload_grub()
|
||||
{
|
||||
[ "$_f" = "-d" ] && return 0 # dry run
|
||||
eval `setvars "" grub_modules grub_install_modules`
|
||||
eval `setcfg "$grubdata/module/$tree"`
|
||||
|
||||
|
@ -40,8 +42,33 @@ mkpayload_grub()
|
|||
$err "$tree: cannot build grub.elf"; return 0
|
||||
}
|
||||
|
||||
check_coreboot_utils()
|
||||
{
|
||||
for util in cbfstool ifdtool; do
|
||||
utilelfdir="elf/$util/$1"
|
||||
utilsrcdir="src/coreboot/$1/util/$util"
|
||||
|
||||
utilmode="" && [ -n "$mode" ] && utilmode="clean"
|
||||
x_ make -C "$utilsrcdir" $utilmode -j$XBMK_THREADS $makeargs
|
||||
[ -z "$mode" ] && [ ! -f "$utilelfdir/$util" ] && \
|
||||
x_ mkdir -p "$utilelfdir" && \
|
||||
x_ cp "$utilsrcdir/$util" "elf/$util/$1"
|
||||
[ -z "$mode" ] || x_ rm -Rf "$utilelfdir"; continue
|
||||
done; return 0
|
||||
}
|
||||
|
||||
mkvendorfiles()
|
||||
{
|
||||
if [ "$_f" = "-d" ]; then
|
||||
check_coreboot_utils "$tree"
|
||||
elif [ "$_f" = "-b" ]; then
|
||||
printf "%s\n" "${version%%-*}" > "$cdir/.coreboot-version"
|
||||
fi
|
||||
}
|
||||
|
||||
mkcorebootbin()
|
||||
{
|
||||
[ "$_f" = "-d" ] && return 0 # dry run
|
||||
[ "$target" = "$tree" ] && return 0
|
||||
|
||||
tmprom="$cdir/build/coreboot.rom"
|
||||
|
@ -64,7 +91,7 @@ mkcorebootbin()
|
|||
[ "$payload_memtest" = "y" ] || payload_memtest="n"
|
||||
[ "$(uname -m)" = "x86_64" ] || payload_memtest="n"
|
||||
|
||||
x_ ./update trees -b coreboot utils $tree
|
||||
x_ ./update trees -d coreboot $tree
|
||||
|
||||
[ "$payload_seabios" = "y" ] && pname="seabios" && add_seabios
|
||||
[ "$payload_uboot" = "y" ] && pname="uboot" && add_uboot
|
||||
|
@ -113,6 +140,7 @@ add_uboot()
|
|||
|
||||
mkcoreboottar()
|
||||
{
|
||||
[ "$_f" = "-d" ] && return 0 # dry run
|
||||
[ "$target" = "$tree" ] && return 0; [ "$XBMK_RELEASE" = "y" ] && \
|
||||
[ "$release" != "n" ] && mkrom_tarball "bin/$target"; return 0
|
||||
}
|
||||
|
|
73
script/trees
73
script/trees
|
@ -14,16 +14,17 @@ set -u -e
|
|||
. "config/data/coreboot/mkhelper.cfg"
|
||||
|
||||
eval `setvars "" xarch cdir defconfig cmakedir xlang mode makeargs elfdir cmd \
|
||||
project target target_dir targets xtree _f target1 bootstrapargs mkhelper \
|
||||
project target target_dir targets xtree _f release bootstrapargs mkhelper \
|
||||
autoconfargs listfile autogenargs btype tree rev tree_depend build_depend \
|
||||
premake release postmake`
|
||||
premake postmake`
|
||||
|
||||
main()
|
||||
{
|
||||
while getopts f:b:m:u:c:x:s:l:n: option; do
|
||||
while getopts f:b:m:u:c:x:s:l:n:d: option; do
|
||||
[ -n "$_f" ] && $err "only one flag is permitted"
|
||||
_f="$1"
|
||||
case "$1" in
|
||||
-d) mode="" ;;
|
||||
-b) mode="" ;;
|
||||
-u) mode="oldconfig" ;;
|
||||
-m) mode="menuconfig" ;;
|
||||
|
@ -58,10 +59,9 @@ main()
|
|||
cmd="build_targets" && singletree "$project" && cmd="build_project"
|
||||
$cmd $@
|
||||
|
||||
[ "$target1" = "utils" ] && [ "$project" = "coreboot" ] && return 0
|
||||
|
||||
[ -f "$listfile" ] || return 0
|
||||
[ -z "$mode" ] && printf "\n\nOK! Check %s/\n\n" "$elfdir"; return 0
|
||||
[ -z "$mode" ] && [ "$_f" = "-b" ] && \
|
||||
printf "\n\nOK! Check %s/\n\n" "$elfdir"; return 0
|
||||
}
|
||||
|
||||
build_project()
|
||||
|
@ -85,8 +85,6 @@ build_targets()
|
|||
[ -d "$cfgsdir" ] || $err "directory, $cfgsdir, does not exist"
|
||||
|
||||
# Build for all targets if no argument is given
|
||||
[ $# -gt 0 ] && target1="$1"
|
||||
[ "$target1" = "utils" ] && [ "$project" = "coreboot" ] && shift 1
|
||||
targets="$(ls -1 "$cfgsdir")" || $err "Can't get options for $cfgsdir"
|
||||
[ $# -gt 0 ] && targets=$@
|
||||
|
||||
|
@ -110,12 +108,9 @@ handle_defconfig()
|
|||
{
|
||||
handle_src_tree "$target" || return 0
|
||||
|
||||
[ "$target1" = "utils" ] && [ "$project" = "coreboot" ] && \
|
||||
eval "check_coreboot_utils \"$tree\"; return 0"
|
||||
|
||||
for y in "$target_dir/config"/*; do
|
||||
[ -f "$y" ] || continue
|
||||
defconfig="$y"
|
||||
[ "$_f" = "-d" ] || [ -f "$y" ] || continue
|
||||
[ "$_f" = "-d" ] || defconfig="$y"
|
||||
|
||||
[ -n "$mode" ] || check_defconfig || continue
|
||||
handle_makefile
|
||||
|
@ -139,8 +134,7 @@ handle_src_tree()
|
|||
fi
|
||||
x_ ./update trees -f "$project" "$target"
|
||||
|
||||
[ "$target1" = "utils" ] && [ "$project" = "coreboot" ] && return 0
|
||||
[ -z "$mode" ] && check_cross_compiler; return 0
|
||||
[ -z "$mode" ] && [ "$_f" = "-b" ] && check_cross_compiler; return 0
|
||||
}
|
||||
|
||||
configure_project()
|
||||
|
@ -156,6 +150,8 @@ configure_project()
|
|||
|
||||
printf "Loading %s config: %s\n" "$project" "$_tcfg"
|
||||
eval `setcfg "$_tcfg"`
|
||||
|
||||
[ "$_f" = "-d" ] && build_depend="" # dry run
|
||||
[ "$cmd" = "build_project" ] && break
|
||||
[ "$mode" = "fetch" ] || break
|
||||
|
||||
|
@ -166,13 +162,18 @@ configure_project()
|
|||
[ "$XBMK_RELEASE" = "y" ] && [ "$release" = "n" ] && return 1
|
||||
[ -z "$btype" ] || [ "${mode%config}" = "$mode" ] || return 1
|
||||
|
||||
[ -z "$mode" ] && for bd in $build_depend; do
|
||||
if [ "$_f" != "-d" ]; then
|
||||
:
|
||||
elif [ -z "$mode" ]; then
|
||||
for bd in $build_depend; do
|
||||
bd_project="${bd%%/*}"; bd_tree="${bd##*/}"
|
||||
[ -z "$bd_project" ] && $err "$project/$tree: bad bd: '$bd'"
|
||||
[ -z "$bd_project" ] && \
|
||||
$err "$project/$tree: bad bd: '$bd'"
|
||||
[ "${bd##*/}" = "$bd" ] && bd_tree=""
|
||||
[ -z "$bd_project" ] || ./update trees -b $bd_project \
|
||||
$bd_tree || $err "$project/$tree: !bd $bd"; continue
|
||||
$bd_tree || $err "$project/$tree: !bd $bd"
|
||||
done
|
||||
fi
|
||||
|
||||
[ "$mode" = "fetch" ] || return 0
|
||||
[ -f "CHANGELOG" ] && return 1; fetch_${cmd#build_}; return 1
|
||||
|
@ -198,23 +199,9 @@ check_cross_compiler()
|
|||
done; return 0
|
||||
}
|
||||
|
||||
check_coreboot_utils()
|
||||
{
|
||||
for util in cbfstool ifdtool; do
|
||||
utilelfdir="elf/$util/$1"
|
||||
utilsrcdir="src/coreboot/$1/util/$util"
|
||||
|
||||
utilmode="" && [ -n "$mode" ] && utilmode="clean"
|
||||
x_ make -C "$utilsrcdir" $utilmode -j$XBMK_THREADS $makeargs
|
||||
[ -z "$mode" ] && [ ! -f "$utilelfdir/$util" ] && \
|
||||
x_ mkdir -p "$utilelfdir" && \
|
||||
x_ cp "$utilsrcdir/$util" "elf/$util/$1"
|
||||
[ -z "$mode" ] || x_ rm -Rf "$utilelfdir"
|
||||
done; return 0
|
||||
}
|
||||
|
||||
check_defconfig()
|
||||
{
|
||||
[ "$_f" = "-d" ] && return 0
|
||||
[ -f "$defconfig" ] || $err "$project/$target: missing defconfig"
|
||||
|
||||
dest_dir="$elfdir/$target/${defconfig#"$target_dir/config/"}"
|
||||
|
@ -225,6 +212,8 @@ check_defconfig()
|
|||
|
||||
elfcheck()
|
||||
{
|
||||
[ "$_f" = "-d" ] && return 0 # dry run. assume a build exists.
|
||||
|
||||
# TODO: very hacky check. do it properly (based on build.list)
|
||||
for elftest in "$dest_dir"/*; do
|
||||
[ -e "$elftest" ] && e "$elftest" f && return 1
|
||||
|
@ -234,11 +223,12 @@ elfcheck()
|
|||
handle_makefile()
|
||||
{
|
||||
check_makefile "$cdir" && x_ make clean -C "$cdir"
|
||||
x_ cp "$defconfig" "$cdir/.config"
|
||||
[ -n "$mode" ] || [ -n "$btype" ] || make -C "$cdir" \
|
||||
silentoldconfig || make -C "$cdir" oldconfig || :
|
||||
[ -f "$defconfig" ] && x_ cp "$defconfig" "$cdir/.config"
|
||||
[ "$_f" = "-d" ] || [ -n "$mode" ] || [ -n "$btype" ] || make -C \
|
||||
"$cdir" silentoldconfig || make -C "$cdir" oldconfig || :
|
||||
|
||||
run_make_command || $err "handle_makefile $cdir: no makefile!"
|
||||
[ "$_f" = "-d" ] && return 0
|
||||
|
||||
_copy=".config" && [ "$mode" = "savedefconfig" ] && _copy="defconfig"
|
||||
[ "${mode%config}" = "$mode" ] || x_ cp "$cdir/$_copy" "$defconfig"
|
||||
|
@ -254,17 +244,17 @@ run_make_command()
|
|||
check_cmake "$cdir" && [ -z "$mode" ] && check_autoconf "$cdir"
|
||||
check_makefile "$cdir" || return 1
|
||||
|
||||
[ "$project" = "coreboot" ] && [ -z "$mode" ] && x_ \
|
||||
printf "%s\n" "${version%%-*}" > "$cdir/.coreboot-version"
|
||||
|
||||
make -C "$cdir" $mode -j$XBMK_THREADS $makeargs || $err "$cdir mk$mode"
|
||||
[ "$_f" = "-d" ] || make -C "$cdir" $mode -j$XBMK_THREADS $makeargs \
|
||||
|| $err "$cdir mk$mode"
|
||||
[ -z "$mkhelper" ] || [ -n "$mode" ] || $mkhelper || $err "!$mkhelper"
|
||||
|
||||
[ "$_f" = "-d" ] && return 0
|
||||
[ "$mode" = "clean" ] && make -C "$cdir" distclean || :; return 0
|
||||
}
|
||||
|
||||
check_cmake()
|
||||
{
|
||||
[ "$_f" = "-d" ] && return 0 # dry run
|
||||
[ -z "$cmakedir" ] || check_makefile "$1" || cmake -B "$1" \
|
||||
"$1/$cmakedir" || check_makefile "$1" || $err "$1: !cmk $cmakedir"
|
||||
[ -z "$cmakedir" ] || check_makefile "$1" || \
|
||||
|
@ -273,6 +263,7 @@ check_cmake()
|
|||
|
||||
check_autoconf()
|
||||
{
|
||||
[ "$_f" = "-d" ] && return 0 # dry run
|
||||
(
|
||||
cd "$1" || $err "!cd $1"
|
||||
[ -f "bootstrap" ] && x_ ./bootstrap $bootstrapargs
|
||||
|
@ -283,12 +274,14 @@ check_autoconf()
|
|||
|
||||
check_makefile()
|
||||
{
|
||||
[ "$_f" = "-d" ] && return 0 # dry run
|
||||
[ -f "$1/Makefile" ] || [ -f "$1/makefile" ] || \
|
||||
[ -f "$1/GNUmakefile" ] || return 1; return 0
|
||||
}
|
||||
|
||||
copy_elf()
|
||||
{
|
||||
[ "$_f" = "-d" ] && return 0 # dry run
|
||||
[ -f "$listfile" ] && x_ mkdir -p "$dest_dir" && while read -r f; do
|
||||
[ -f "$cdir/$f" ] && x_ cp "$cdir/$f" "$dest_dir"
|
||||
done < "$listfile"; x_ make clean -C "$cdir"
|
||||
|
|
Loading…
Reference in New Issue