diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/git.sh | 38 | ||||
-rw-r--r-- | include/lib.sh | 29 | ||||
-rw-r--r-- | include/rom.sh | 13 | ||||
-rw-r--r-- | include/vendor.sh | 8 |
4 files changed, 62 insertions, 26 deletions
diff --git a/include/git.sh b/include/git.sh index 58f62ef3..f8441f33 100644 --- a/include/git.sh +++ b/include/git.sh @@ -2,8 +2,8 @@ # Copyright (c) 2020-2021,2023-2024 Leah Rowe <leah@libreboot.org> # Copyright (c) 2022 Caleb La Grange <thonkpeasant@protonmail.com> -eval `setvars "" loc url bkup_url subfile mdir subhash subrepo subrepo_bkup \ - depend subfile_bkup` +eval `setvars "" loc url bkup_url subfile subhash subrepo subrepo_bkup \ + depend subfile_bkup repofail` fetch_targets() { @@ -13,7 +13,7 @@ fetch_targets() printf "Creating %s tree %s\n" "$project" "$tree" git_prep "$loc" "$loc" "$PWD/$configdir/$tree/patches" \ - "${loc%/*}/$tree" u; nuke "$project/$tree" "$project/$tree" + "src/$project/$tree" u; nuke "$project/$tree" "$project/$tree" } fetch_project() @@ -37,7 +37,8 @@ fetch_project() clone_project() { - loc="src/$project/$project" && singletree "$project" && loc="${loc%/*}" + loc="$XBMK_CACHE/repo/$project" && singletree "$project" && \ + loc="src/$project" printf "Downloading project '%s' to '%s'\n" "$project" "$loc" e "$loc" d && return 0 @@ -61,17 +62,15 @@ git_prep() [ "$project" = "coreboot" ] && [ -n "$xtree" ] && [ $# -gt 2 ] && \ [ "$xtree" != "$tree" ] && link_crossgcc "$_loc" - [ "$XBMK_RELEASE" = "y" ] && [ "$_loc" != "src/$project/$project" ] \ - && rmgit "$tmpgit" + [ "$XBMK_RELEASE" = "y" ] && \ + [ "$_loc" != "$XBMK_CACHE/repo/$project" ] && \ + rmgit "$tmpgit" move_repo "$_loc" } prep_submodules() { - mdir="$PWD/config/submodule/$project" - [ -n "$tree" ] && mdir="$mdir/$tree" - [ -f "$mdir/module.list" ] && while read -r msrcdir; do fetch_submodule "$msrcdir" done < "$mdir/module.list"; return 0 @@ -103,9 +102,28 @@ fetch_submodule() tmpclone() { - git clone $1 "$3" || git clone $2 "$3" || $err "!clone $1 $2 $3 $4 $5" + [ "$repofail" = "y" ] && \ + printf "Cached clone failed; trying online.\n" 1>&2 + repofail="n" + + [ $# -lt 6 ] || rm -Rf "$3" || $err "git retry: !rm $3 ($1)" + repodir="$XBMK_CACHE/repo/${1##*/}" && [ $# -gt 5 ] && repodir="$3" + mkdir -p "$XBMK_CACHE/repo" || $err "!rmdir $XBMK_CACHE/repo" + if [ -d "$repodir" ] && [ $# -lt 6 ]; then + git -C "$repodir" pull || sleep 3 || git -C "$repodir" pull \ + || sleep 3 || git -C "$repodir" pull || : + else + git clone $1 "$repodir" || git clone $2 "$repodir" || \ + $err "!clone $1 $2 $repodir $4 $5" + fi + ( + [ $# -gt 5 ] || git clone "$repodir" "$3" || $err "!clone $repodir $3" git -C "$3" reset --hard "$4" || $err "!reset $1 $2 $3 $4 $5" git_am_patches "$3" "$5" + ) || repofail="y" + + [ "$repofail" = "y" ] && [ $# -lt 6 ] && tmpclone $@ retry + [ "$repofail" = "y" ] && $err "!clone $1 $2 $3 $4 $5"; : } git_am_patches() diff --git a/include/lib.sh b/include/lib.sh index 2fb97c44..2cd8c0d7 100644 --- a/include/lib.sh +++ b/include/lib.sh @@ -88,6 +88,14 @@ if [ -z "${TMPDIR+x}" ]; then xbmk_parent="y" fi +# XBMK_CACHE is a directory, for caching downloads and git repositories +[ -z "${XBMK_CACHE+x}" ] && export XBMK_CACHE="$PWD/cache" +[ -z "$XBMK_CACHE" ] && export XBMK_CACHE="$PWD/cache" +[ -L "$XBMK_CACHE" ] && [ "$XBMK_CACHE" = "$PWD/cache" ] && \ + $err "cachedir is default, $PWD/cache, but it exists and is a symlink" +[ -L "$XBMK_CACHE" ] && export XBMK_CACHE="$PWD/cache" +[ -f "$XBMK_CACHE" ] && $err "cachedir '$XBMK_CACHE' exists but it's a file" + # if "y": a coreboot target won't be built if target.cfg says release="n" # (this is used to exclude certain build targets from releases) [ -z "${XBMK_RELEASE+x}" ] && export XBMK_RELEASE="n" @@ -180,18 +188,21 @@ singletree() download() { - dl_fail="y" # 1 url, 2 url backup, 3 destination, 4 checksum - vendor_checksum "$4" "$3" 2>/dev/null || dl_fail="n" + cached="$XBMK_CACHE/file/$4" + dl_fail="n" # 1 url, 2 url backup, 3 destination, 4 checksum + vendor_checksum "$4" "$cached" 2>/dev/null && dl_fail="y" [ "$dl_fail" = "n" ] && e "$3" f && return 0 - x_ mkdir -p "${3%/*}" && for url in "$1" "$2"; do + mkdir -p "${3%/*}" "$XBMK_CACHE/file" || \ + $err "!mkdir '$3' '$XBMK_CACHE/file'" + for url in "$1" "$2"; do [ "$dl_fail" = "n" ] && break [ -z "$url" ] && continue - x_ rm -f "$3" - curl --location --retry 3 -A "$_ua" "$url" -o "$3" || \ - wget --tries 3 -U "$_ua" "$url" -O "$3" || continue - vendor_checksum "$4" "$3" || dl_fail="n" - done; - [ "$dl_fail" = "y" ] && $err "$1 $2 $3 $4: not downloaded"; return 0 + rm -f "$cached" || $err "!rm -f '$cached'" + curl --location --retry 3 -A "$_ua" "$url" -o "$cached" || \ + wget --tries 3 -U "$_ua" "$url" -O "$cached" || continue + vendor_checksum "$4" "$cached" || dl_fail="n" + done; [ "$dl_fail" = "y" ] && $err "$1 $2 $3 $4: not downloaded" + [ "$cached" = "$3" ] || cp "$cached" "$3" || $err "!d cp $cached $3"; : } vendor_checksum() diff --git a/include/rom.sh b/include/rom.sh index 574b1b6c..ed3dddf2 100644 --- a/include/rom.sh +++ b/include/rom.sh @@ -53,6 +53,8 @@ mkvendorfiles() check_coreboot_utils() { for util in cbfstool ifdtool; do + [ "$badhash" = "n" ] || rm -f "elf/$util/$1/$util" || \ + $err "!rm badelf elf/$util/$1/$util" e "elf/$util/$1/$util" f && continue utilelfdir="elf/$util/$1" @@ -90,10 +92,13 @@ mkcorebootbin() [ "$payload_memtest" = "y" ] || payload_memtest="n" [ "$(uname -m)" = "x86_64" ] || payload_memtest="n" - - [ "$payload_seabios" = "y" ] && pname="seabios" && $dry add_seabios - [ "$payload_uboot" = "y" ] && pname="uboot" && $dry add_uboot - + if grep "CONFIG_PAYLOAD_NONE=y" "$defconfig"; then + [ "$payload_seabios" = "y" ] && pname="seabios" && \ + $dry add_seabios + [ "$payload_uboot" = "y" ] && pname="uboot" && $dry add_uboot + else + pname="custom" # coreboot's build system added payloads + fi newrom="bin/$target/${pname}_${target}_$initmode$displaymode.rom" $dry x_ mkdir -p "${newrom%/*}"; $dry x_ mv "$tmprom" "$newrom" diff --git a/include/vendor.sh b/include/vendor.sh index b8fef9c5..ace3f7ce 100644 --- a/include/vendor.sh +++ b/include/vendor.sh @@ -78,11 +78,12 @@ getfiles() fetch() { dl_type="$1"; dl="$2"; dl_bkup="$3"; dlsum="$4"; _dest="${5##*../}" - [ "$5" = "/dev/null" ] && return 0; _dl="$vendir/cache/$dlsum" + [ "$5" = "/dev/null" ] && return 0; _dl="$XBMK_CACHE/file/$dlsum" download "$dl" "$dl_bkup" "$_dl" "$dlsum" - x_ rm -Rf "${_dl}_extracted" + rm -Rf "${_dl}_extracted" || \ + $err "!rm -Rf ${_ul}_extracted" e "$_dest" f && return 0 mkdir -p "${_dest%/*}" || $err "mkdirs: !mkdir -p ${_dest%/*}" @@ -248,7 +249,8 @@ detect_board() path="$1" filename="$(basename "$path")" case "$filename" in - grub_*|seagrub_*) board="$(echo "$filename" | cut -d '_' -f2-3)" ;; + grub_*|seagrub_*|custom_*) + board="$(echo "$filename" | cut -d '_' -f2-3)" ;; seabios_withgrub_*) board="$(echo "$filename" | cut -d '_' -f3-4)" ;; *.tar.xz) |