diff options
Diffstat (limited to 'include')
-rw-r--r--[-rwxr-xr-x] | include/git.sh | 40 | ||||
-rw-r--r--[-rwxr-xr-x] | include/lib.sh | 31 | ||||
-rw-r--r--[-rwxr-xr-x] | include/mrc.sh | 0 | ||||
-rw-r--r-- | include/rom.sh | 66 | ||||
-rw-r--r--[-rwxr-xr-x] | include/vendor.sh | 12 |
5 files changed, 105 insertions, 44 deletions
diff --git a/include/git.sh b/include/git.sh index b0acd7dc..f8441f33 100755..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() { @@ -12,8 +12,8 @@ fetch_targets() e "src/$project/$tree" d && return 0 printf "Creating %s tree %s\n" "$project" "$tree" - git_prep "$loc" "$loc" "$PWD/$cfgsdir/$tree/patches" \ - "${loc%/*}/$tree" u; nuke "$project/$tree" "$project/$tree" + git_prep "$loc" "$loc" "$PWD/$configdir/$tree/patches" \ + "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 52187734..2cd8c0d7 100755..100644 --- a/include/lib.sh +++ b/include/lib.sh @@ -37,7 +37,7 @@ chkvars() } eval `setvars "" _nogit board xbmk_parent versiondate projectsite projectname \ - aur_notice cfgsdir datadir version relname` + aur_notice configdir datadir version relname` for fv in projectname projectsite version versiondate; do eval "[ ! -f "$fv" ] || read -r $fv < \"$fv\" || :" @@ -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/mrc.sh b/include/mrc.sh index 2e00d9f9..2e00d9f9 100755..100644 --- a/include/mrc.sh +++ b/include/mrc.sh diff --git a/include/rom.sh b/include/rom.sh index 7ffd685d..ed3dddf2 100644 --- a/include/rom.sh +++ b/include/rom.sh @@ -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 @@ -26,25 +27,53 @@ mkserprog() mkpayload_grub() { eval `setvars "" grub_modules grub_install_modules` - eval `setcfg "$grubdata/module/$tree"` + $dry eval `setcfg "$grubdata/module/$tree"` - x_ rm -f "$cdir/grub.elf" + $dry x_ rm -f "$srcdir/grub.elf" - "${cdir}/grub-mkstandalone" --grub-mkimage="${cdir}/grub-mkimage" \ - -O i386-coreboot -o "${cdir}/grub.elf" -d "${cdir}/grub-core/" \ + $dry "$srcdir/grub-mkstandalone" --grub-mkimage="$srcdir/grub-mkimage" \ + -O i386-coreboot -o "$srcdir/grub.elf" -d "${srcdir}/grub-core/" \ --fonts= --themes= --locales= --modules="$grub_modules" \ --install-modules="$grub_install_modules" \ - "/boot/grub/grub_default.cfg=${cdir}/.config" \ + "/boot/grub/grub_default.cfg=${srcdir}/.config" \ "/boot/grub/grub.cfg=$grubdata/memdisk.cfg" \ "/background.png=$grubdata/background/background1280x800.png" || \ $err "$tree: cannot build grub.elf"; return 0 } +mkvendorfiles() +{ + check_coreboot_utils "$tree" + printf "%s\n" "${version%%-*}" > "$srcdir/.coreboot-version" || \ + $err "!mk $srcdir .coreboot-version" + [ -z "$mode" ] && [ "$target" != "$tree" ] && \ + x_ ./vendor download $target; return 0 +} + +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" + 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 +} + mkcorebootbin() { [ "$target" = "$tree" ] && return 0 - tmprom="$cdir/build/coreboot.rom" + tmprom="$srcdir/build/coreboot.rom" initmode="${defconfig##*/}"; displaymode="${initmode##*_}" initmode="${initmode%%_*}" [ -n "$displaymode" ] && displaymode="_$displaymode" @@ -54,7 +83,7 @@ mkcorebootbin() [ "$payload_uboot" = "y" ] || payload_seabios="y" [ "$payload_grub" = "y" ] && payload_seabios="y" [ "$payload_seabios" = "y" ] && [ "$payload_uboot" = "y" ] && \ - $err "$target: U-Boot and SeaBIOS/GRUB are both enabled." + $dry $err "$target: U-Boot and SeaBIOS/GRUB are both enabled." [ -z "$grub_scan_disk" ] && grub_scan_disk="nvme ahci ata" @@ -63,18 +92,19 @@ mkcorebootbin() [ "$payload_memtest" = "y" ] || payload_memtest="n" [ "$(uname -m)" = "x86_64" ] || payload_memtest="n" - - x_ ./update trees -b coreboot utils $tree - - [ "$payload_seabios" = "y" ] && pname="seabios" && add_seabios - [ "$payload_uboot" = "y" ] && pname="uboot" && 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" - x_ mkdir -p "${newrom%/*}"; x_ mv "$tmprom" "$newrom" + $dry x_ mkdir -p "${newrom%/*}"; $dry x_ mv "$tmprom" "$newrom" [ "$XBMK_RELEASE" = "y" ] || return 0 - mksha512sum "$newrom" "vendorhashes" - ./vendor inject -r "$newrom" -b "$target" -n nuke || $err "!n $newrom" + $dry mksha512sum "$newrom" "vendorhashes"; $dry ./vendor inject \ + -r "$newrom" -b "$target" -n nuke || $err "!nuke $newrom" } add_seabios() @@ -117,6 +147,6 @@ add_uboot() mkcoreboottar() { - [ "$target" = "$tree" ] && return 0 - [ "$XBMK_RELEASE" = "y" ] && mkrom_tarball "bin/$target"; return 0 + [ "$target" = "$tree" ] && return 0; [ "$XBMK_RELEASE" = "y" ] && \ + [ "$release" != "n" ] && $dry mkrom_tarball "bin/$target"; return 0 } diff --git a/include/vendor.sh b/include/vendor.sh index 75f7e051..ace3f7ce 100755..100644 --- a/include/vendor.sh +++ b/include/vendor.sh @@ -56,7 +56,7 @@ bootstrap() [ -d "${kbc1126_ec_dump%/*}" ] && x_ make -C "$cbdir/util/kbc1126" [ -n "$MRC_refcode_cbtree" ] && \ cbfstoolref="elf/cbfstool/$MRC_refcode_cbtree/cbfstool" && \ - x_ ./update trees -b coreboot utils $MRC_refcode_cbtree; return 0 + x_ ./update trees -d coreboot $MRC_refcode_cbtree; return 0 } getfiles() @@ -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) @@ -275,7 +277,7 @@ readcfg() cbfstool="elf/cbfstool/$tree/cbfstool" ifdtool="elf/ifdtool/$tree/ifdtool" - x_ ./update trees -b coreboot utils $tree + x_ ./update trees -d coreboot $tree } patch_release_roms() |