diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/git.sh | 52 | ||||
-rw-r--r-- | include/lib.sh | 56 | ||||
-rw-r--r-- | include/mrc.sh | 4 | ||||
-rw-r--r-- | include/rom.sh | 28 | ||||
-rw-r--r-- | include/vendor.sh | 216 |
5 files changed, 123 insertions, 233 deletions
diff --git a/include/git.sh b/include/git.sh index 30f9729a..4fa904ba 100644 --- a/include/git.sh +++ b/include/git.sh @@ -15,7 +15,7 @@ fetch_targets() printf "Creating %s tree %s\n" "$project" "$tree" git_prep "$loc" "$loc" "$xbmkpwd/$configdir/$tree/patches" \ - "src/$project/$tree" u + "src/$project/$tree" with_submodules nuke "$project/$tree" "$project/$tree" } @@ -34,8 +34,8 @@ fetch_project() clone_project for x in config/git/*; do - [ -d "$x" ] && nuke "${x##*/}" "src/${x##*/}" 2>/dev/null - done; return 0 + [ -d "$x" ] && nuke "${x##*/}" "src/${x##*/}" 2>/dev/null; : + done; : } clone_project() @@ -56,30 +56,28 @@ git_prep() chkvars rev tmpclone "$1" "$2" "$tmpgit" "$rev" "$_patchdir" if singletree "$project" || [ $# -gt 4 ]; then - prep_submodules "$_loc" + [ -f "$mdir/module.list" ] && while read -r msrcdir; do + fetch_submodule "$msrcdir" + done < "$mdir/module.list"; : fi - [ "$project" = "coreboot" ] && [ -n "$xtree" ] && [ $# -gt 2 ] && \ - [ "$xtree" != "$tree" ] && link_crossgcc "$_loc" - [ "$XBMK_RELEASE" = "y" ] && \ - [ "$_loc" != "$XBMK_CACHE/repo/$project" ] && \ - rmgit "$tmpgit" + if [ "$project" = "coreboot" ] && [ -n "$xtree" ] && [ $# -gt 2 ] && \ + [ "$xtree" != "$tree" ]; then ( + x_ cd "$tmpgit/util" && x_ rm -Rf crossgcc + x_ ln -s "../../$xtree/util/crossgcc" crossgcc + ) || $err "$_loc: !xgcc link"; fi - move_repo "$_loc" -} + [ "$_loc" != "$XBMK_CACHE/repo/$project" ] && \ + [ "$XBMK_RELEASE" = "y" ] && rmgit "$tmpgit" -prep_submodules() -{ - [ -f "$mdir/module.list" ] && while read -r msrcdir; do - fetch_submodule "$msrcdir" - done < "$mdir/module.list"; : + [ "$_loc" = "${_loc%/*}" ] || x_ mkdir -p "${_loc%/*}" + mv "$tmpgit" "$_loc" || $err "git_prep: !mv $tmpgit $_loc" } fetch_submodule() { - mcfgdir="$mdir/${1##*/}" - eval "`setvars "" subhash subrepo subrepo_bkup subfile subfile_bkup \ - st`" + mcfgdir="$mdir/${1##*/}"; eval \ + "`setvars "" subhash subrepo subrepo_bkup subfile subfile_bkup st`" [ ! -f "$mcfgdir/module.cfg" ] || . "$mcfgdir/module.cfg" || \ $err "! . $mcfgdir/module.cfg" @@ -137,22 +135,6 @@ git_am_patches() done; : } -link_crossgcc() -{ - ( - x_ cd "$tmpgit/util" && x_ rm -Rf crossgcc - ln -s "../../$xtree/util/crossgcc" crossgcc || $err "$1: !xgcc link" - ) || $err "$1: !xgcc link"; : -} - -move_repo() -{ - [ "$1" = "${1%/*}" ] || x_ mkdir -p "${1%/*}" - mv "$tmpgit" "$1" || $err "git_prep: !mv $tmpgit $1" -} - -# can delete from multi- and single-tree projects. -# called from script/trees when downloading sources. nuke() { e "config/${1%/}/nuke.list" f missing || while read -r nukefile; do diff --git a/include/lib.sh b/include/lib.sh index ac0003f0..21066ecc 100644 --- a/include/lib.sh +++ b/include/lib.sh @@ -30,9 +30,6 @@ x_() { [ $# -lt 1 ] || "$@" || $err "Unhandled error for: $(echo "$@")"; : } -xbmkpwd="`pwd`" || $err "Cannot generate PWD" -export PWD="$xbmkpwd" - setvars() { _setvars="" && [ $# -lt 2 ] && $err "setvars: too few arguments" @@ -49,13 +46,6 @@ chkvars() done; : } -eval "`setvars "" _nogit board reinstall versiondate aur_notice configdir \ - datadir version relname xbmk_parent`" - -for fv in version versiondate; do - eval "[ ! -f \".$fv\" ] || read -r $fv < \".$fv\" || :" -done - setcfg() { [ $# -gt 1 ] && printf "e \"%s\" f missing && return %s;\n" "$1" "$2" @@ -88,11 +78,25 @@ install_packages() [ -n "$aur_notice" ] && \ printf "You need AUR packages: %s\n" "$aur_notice" 1>&2; : } + +eval "`setvars "" _nogit board reinstall versiondate aur_notice configdir \ + datadir version relname xbmktmp`" + if [ $# -gt 0 ] && [ "$1" = "dependencies" ]; then install_packages "$@" || exit 1 exit 0 fi +id -u 1>/dev/null 2>/dev/null || $err "suid check failed (id -u)" +[ "$(id -u)" != "0" ] || $err "this command as root is not permitted" + +xbmkpwd="`pwd`" || $err "Cannot generate PWD" +export PWD="$xbmkpwd" + +for fv in version versiondate; do + eval "[ ! -f \".$fv\" ] || read -r $fv < \".$fv\" || :" +done + pyver="2" python="python3" command -v python3 1>/dev/null || python="python" @@ -109,9 +113,6 @@ if [ "${pyver%%.*}" != "3" ]; then exit 1 fi -id -u 1>/dev/null 2>/dev/null || $err "suid check failed (id -u)" -[ "$(id -u)" != "0" ] || $err "this command as root is not permitted" - # XBMK_CACHE is a directory, for caching downloads and git repositories [ -z "${XBMK_CACHE+x}" ] && export XBMK_CACHE="$xbmkpwd/cache" [ -z "$XBMK_CACHE" ] && export XBMK_CACHE="$xbmkpwd/cache" @@ -127,21 +128,25 @@ if [ -z "${TMPDIR+x}" ]; then [ -f "lock" ] && $err "$xbmkpwd/lock exists. Is a build running?" export TMPDIR="/tmp" export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" + xbmktmp="$TMPDIR" touch lock || $err "cannot create 'lock' file" - rm -Rf "$XBMK_CACHE/xbmkpath" "$XBMK_CACHE/gnupath" || \ - $err "cannot remove xbmkpath" - mkdir -p "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" || \ - $err "cannot create gnupath" - export PATH="$XBMK_CACHE/xbmkpath:$XBMK_CACHE/gnupath:$PATH" || \ - $err "Can't create gnupath/xbmkpath" + x_ rm -Rf "$XBMK_CACHE/xbmkpath" "$XBMK_CACHE/gnupath" + x_ mkdir -p "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" + export PATH="$XBMK_CACHE/xbmkpath:$XBMK_CACHE/gnupath:$PATH" ( # set up python v3.x in PATH, in case it's not set up correctly. # see code above that detected the correct python3 command. cd "$XBMK_CACHE/xbmkpath" || $err "can't cd $XBMK_CACHE/xbmkpath" x_ ln -s "`command -v "$python"`" python ) || $err "Can't set up python symlink in $XBMK_CACHE/xbmkpath" - xbmk_parent="y" + + xbmk_rval=0 + ./mk "$@" || xbmk_rval=1 + rm -Rf "$xbmktmp" || xbmk_rval=1 + rm -f lock || xbmk_rval=1 + exit $xbmk_rval fi +xbmktmp="$TMPDIR" # 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) @@ -165,7 +170,7 @@ versiondate_="$versiondate" --pretty='%ct' HEAD)" || versiondate="$versiondate_" for p in version versiondate; do chkvars "$p" - eval "x_ printf \"%s\\n\" \"\$$p\" > .$p" + eval "printf \"%s\\n\" \"\$$p\" > .$p || $err \"can't save $p\"" done relname="$projectname-$version" export LOCALVERSION="-$projectname-${version%%-*}" @@ -195,10 +200,8 @@ mkrom_tarball() mktarball() { - if [ "${2%/*}" != "$2" ]; then - mkdir -p "${2%/*}" || $err "mk, !mkdir -p \"${2%/*}\"" - fi - tar -c "$1" | xz -T$XBMK_THREADS -9e > "$2" || $err "mktarball 2, $1" + [ "${2%/*}" = "$2" ] || x_ mkdir -p "${2%/*}" + x_ tar -c "$1" | xz -T$XBMK_THREADS -9e > "$2" || $err "mktarball2, $1" } mksha512sum() @@ -236,8 +239,7 @@ download() 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 - mkdir -p "${3%/*}" "$XBMK_CACHE/file" || \ - $err "!mkdir '$3' '$XBMK_CACHE/file'" + x_ mkdir -p "${3%/*}" "$XBMK_CACHE/file" for url in "$1" "$2"; do [ "$dl_fail" = "n" ] && break [ -z "$url" ] && continue diff --git a/include/mrc.sh b/include/mrc.sh index a5f1b37c..6e00292b 100644 --- a/include/mrc.sh +++ b/include/mrc.sh @@ -35,8 +35,8 @@ extract_partition() dd if="${1%.zip}" of="root-a.ext2" bs=1024 skip=$(( $START / 1024 )) \ count=$(( $SIZE / 1024 )) || $err "ex dd ${1%.zip}, root-a.ext2" - printf "cd /usr/sbin\ndump chromeos-firmwareupdate $SHELLBALL\nquit" \ - | debugfs "root-a.ext2" || $err "can't extract shellball" + printf "cd /usr/sbin\ndump chromeos-firmwareupdate %s\nquit" \ + "$SHELLBALL" | debugfs "root-a.ext2" || $err "!extract shellball" } extract_refcode() diff --git a/include/rom.sh b/include/rom.sh index f2609bba..710df853 100644 --- a/include/rom.sh +++ b/include/rom.sh @@ -12,7 +12,8 @@ mkserprog() [ "$1" = "pico" ] && mkpicotool - basename -as .h "$serdir/"*.h > "$TMPDIR/ser" || $err "!mk $1 $TMPDIR" + basename -as .h "$serdir/"*.h > "$xbmktmp/ser" || \ + $err "!mk $1 $xbmktmp" while read -r sertarget; do [ "$1" = "pico" ] && @@ -31,7 +32,7 @@ mkserprog() "$sersrc" BOARD=$sertarget x_ mkdir -p "bin/serprog_$1" x_ mv "$serx" "bin/serprog_$1/serprog_$sertarget.${serx##*.}" - done < "$TMPDIR/ser" + done < "$xbmktmp/ser" [ "$XBMK_RELEASE" = "y" ] && mkrom_tarball "bin/serprog_$1"; : } @@ -43,7 +44,7 @@ mkpicotool() x_ cd src/picotool x_ cmake -DCMAKE_INSTALL_PREFIX=xbmkbin -DPICOTOOL_FLAT_INSTALL=1 \ -DPICO_SDK_PATH=../pico-sdk - make install || $err "Can't build picotool"; : + x_ make install ) || $err "Can't build picotool"; : } @@ -63,13 +64,12 @@ mkpayload_grub() eval "`setvars "" grub_modules grub_install_modules`" $dry eval "`setcfg "$grubdata/module/$tree"`" $dry x_ rm -f "$srcdir/grub.elf"; $dry \ - "$srcdir/grub-mkstandalone" --grub-mkimage="$srcdir/grub-mkimage" \ + x_ "$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=${srcdir}/.config" \ - "/boot/grub/grub.cfg=$grubdata/memdisk.cfg" || \ - $err "$tree: cannot build grub.elf"; : + "/boot/grub/grub.cfg=$grubdata/memdisk.cfg"; : } mkvendorfiles() @@ -116,7 +116,7 @@ mkcorebootbin() { [ "$target" = "$tree" ] && return 0 - tmprom="$TMPDIR/coreboot.rom" + tmprom="$xbmktmp/coreboot.rom" $dry x_ cp "$srcdir/build/coreboot.rom" "$tmprom" initmode="${defconfig##*/}" @@ -172,14 +172,13 @@ add_seabios() fi _seabioself="elf/seabios/default/$initmode/bios.bin.elf" - _seaname="fallback/payload" && [ "$payload_grubsea" = "y" ] && \ _seaname="seabios.elf" + cbfs "$tmprom" "$_seabioself" "$_seaname" x_ "$cbfstool" "$tmprom" add-int -i 3000 -n etc/ps2-keyboard-spinup - _z="2" - [ "$initmode" = "vgarom" ] && _z="0" + _z="2" && [ "$initmode" = "vgarom" ] && _z="0" x_ "$cbfstool" "$tmprom" add-int -i $_z -n etc/pci-optionrom-exec x_ "$cbfstool" "$tmprom" add-int -i 0 -n etc/optionroms-checksum [ "$initmode" = "libgfxinit" ] && \ @@ -203,8 +202,8 @@ add_grub() _grubname="fallback/payload" cbfs "$tmprom" "$grubelf" "$_grubname" printf "set grub_scan_disk=\"%s\"\n" "$grub_scan_disk" \ - > "$TMPDIR/tmpcfg" || $err "$target: !insert scandisk" - cbfs "$tmprom" "$TMPDIR/tmpcfg" scan.cfg raw + > "$xbmktmp/tmpcfg" || $err "$target: !insert scandisk" + cbfs "$tmprom" "$xbmktmp/tmpcfg" scan.cfg raw [ "$initmode" != "normal" ] && [ "$displaymode" != "txtmode" ] && \ cbfs "$tmprom" "$grubdata/background/background1280x800.png" \ "background.png" raw; : @@ -260,7 +259,6 @@ add_uboot() [ "$payload_uboot_amd64" = "y" ] && \ ubootelf="$ubdir/u-boot-x86-with-spl.bin" # EFI-compatible - [ -f "$ubootelf" ] || $err "cb/$ubtarget: Can't find u-boot" cbfs "$tmprom" "$ubootelf" "$ubpath" $ubcbfsargs [ "$payload_seabios" = "y" ] || cprom; : } @@ -284,7 +282,7 @@ mkcoreboottar() [ "$target" = "$tree" ] && return 0 [ "$XBMK_RELEASE" = "y" ] || return 0 [ "$release" != "n" ] || return 0 + $dry mkrom_tarball "bin/$target" - $dry ./mk inject "bin/${relname}_${target}.tar.xz" nuke || \ - $err "Can't nuke vendorfiles in 'bin/${relname}_$target.tar.xz'"; : + $dry x_ ./mk inject "bin/${relname}_${target}.tar.xz" nuke; : } diff --git a/include/vendor.sh b/include/vendor.sh index d98bde7e..c4e57069 100644 --- a/include/vendor.sh +++ b/include/vendor.sh @@ -42,17 +42,16 @@ vendor_download() { [ $# -gt 0 ] || $err "No argument given" export PATH="$PATH:/sbin" - board="$1" - readcfg && readkconfig && bootstrap && getfiles; : + board="$1" && readcfg && readkconfig && bootstrap && getfiles; : } readkconfig() { - x_ rm -f "$TMPDIR/cbcfg" + x_ rm -f "$xbmktmp/cbcfg" cbcfg="`check_defconfig "$boarddir"`" || for cbc in $cv; do - grep "$cbc" "$cbcfg" 1>>"$TMPDIR/cbcfg" 2>/dev/null || : + grep "$cbc" "$cbcfg" 1>>"$xbmktmp/cbcfg" 2>/dev/null || : done - eval "`setcfg "$TMPDIR/cbcfg" 1`" + eval "`setcfg "$xbmktmp/cbcfg" 1`" for c in $cvchk; do eval "[ \"\${$c}\" = \"/dev/null\" ] && continue" @@ -124,12 +123,10 @@ fetch() rm -Rf "${_dl}_extracted" || $err "!rm ${_ul}_extracted. $dontflash" e "$_dest" f && return 0 - mkdir -p "${_dest%/*}" || \ - $err "mkdirs: !mkdir -p ${_dest%/*} - $dontflash" + x_ mkdir -p "${_dest%/*}" remkdir "$appdir" extract_archive "$_dl" "$appdir" "$dl_type" || \ - [ "$dl_type" = "e6400vga" ] || \ - $err "mkd $_dest $dl_type: !extract. $dontflash" + [ "$dl_type" = "e6400vga" ] || $err "$_dest $dl_type: !extract" eval "extract_$dl_type" set -u -e @@ -161,19 +158,17 @@ extract_intel_me() extract_intel_me_bruteforce() { [ $# -gt 0 ] && cdir="$1" - e "$_metmp" f && return 0 [ -z "$sdir" ] && sdir="$(mktemp -d)" - mkdir -p "$sdir" || \ - $err "extract_intel_me: !mkdir -p \"$sdir\" - $dontflash" + x_ mkdir -p "$sdir" set +u +e ( [ "${cdir#/a}" != "$cdir" ] && cdir="${cdir#/}" cd "$cdir" || $err "extract_intel_me: !cd \"$cdir\" - $dontflash" for i in *; do - [ -f "$_metmp" ] && break + e "$_metmp" f && break [ -L "$i" ] && continue if [ -f "$i" ]; then _r="-r" && [ -n "$mfs" ] && _r="" @@ -192,7 +187,7 @@ extract_intel_me_bruteforce() cdir="$1"; [ "${cdir#/a}" != "$cdir" ] && cdir="${cdir#/}" cd "$cdir" || : done - ) + ) || : rm -Rf "$sdir" || $err "extract_intel_me: !rm -Rf $sdir - $dontflash" } @@ -200,11 +195,10 @@ apply_me11_deguard_mod() { ( x_ cd src/deguard/ - ./finalimage.py --delta "data/delta/$ME11delta" \ + x_ ./finalimage.py --delta "data/delta/$ME11delta" \ --version "$ME11version" \ --pch "$ME11pch" --sku "$ME11sku" --fake-fpfs data/fpfs/zero \ - --input "$_metmp" --output "$_me" || \ - $err "Error running deguard for $_me - $dontflash" + --input "$_metmp" --output "$_me" ) || $err "Error running deguard for $_me - $dontflash" } @@ -230,33 +224,24 @@ decat_fspfd() _fspdir="$2" _fspsplit="$cbdir/3rdparty/fsp/Tools/SplitFspBin.py" - $python "$_fspsplit" split -f "$_fspfd" -o "$_fspdir" -n "Fsp.fd" || \ - $err "decat_fspfd '$1' '$2': Can't de-concatenate; $dontflash"; : + x_ $python "$_fspsplit" split -f "$_fspfd" -o "$_fspdir" -n "Fsp.fd" } extract_kbc1126ec() { - e "$kbc1126_ec_dump" f missing && \ - $err "$cbdir: kbc1126 util missing - $dontflash" + x_ e "$kbc1126_ec_dump" f ( x_ cd "$appdir/" mv Rompaq/68*.BIN ec.bin || : if [ ! -f "ec.bin" ]; then unar -D ROM.CAB Rom.bin || unar -D Rom.CAB Rom.bin || \ - unar -D 68*.CAB Rom.bin || \ - $err "can't extract Rom.bin - $dontflash" + unar -D 68*.CAB Rom.bin || $err "kbc1126 unar failed" x_ mv Rom.bin ec.bin fi - [ -f ec.bin ] || \ - $err "extract_kbc1126_ec $board: can't extract - $dontflash" - "$kbc1126_ec_dump" ec.bin || \ - $err "!1126ec $board extract ecfw - $dontflash" - ) || $err "can't extract kbc1126 ec firmware - $dontflash" + x_ e ec.bin f && x_ "$kbc1126_ec_dump" ec.bin + ) || $err "$board: can't extract kbc1126 ec firmware - $dontflash" - e "$appdir/ec.bin.fw1" f not && \ - $err "$board: kbc1126ec fetch failed - $dontflash" - e "$appdir/ec.bin.fw2" f not && \ - $err "$board: kbc1126ec fetch failed - $dontflash" + x_ e "$appdir/ec.bin.fw1" f && x_ e "$appdir/ec.bin.fw2" f cp "$appdir/"ec.bin.fw* "${_dest%/*}/" || \ $err "!cp 1126ec $_dest - $dontflash"; : @@ -269,12 +254,10 @@ extract_e6400vga() tail -c +$E6400_VGA_offset "$_dl" | gunzip > "$appdir/bios.bin" || : ( x_ cd "$appdir" - [ -f "bios.bin" ] || \ - $err "extract_e6400vga: can't extract bios.bin - $dontflash" + x_ e "bios.bin" f "$e6400_unpack" bios.bin || printf "TODO: fix dell extract util\n" ) || $err "can't extract e6400 vga rom - $dontflosh" - cp "$appdir/$E6400_VGA_romname" "$_dest" || \ - $err "extract_e6400vga $board: can't cp $_dest - $dontflash"; : + x_ cp "$appdir/$E6400_VGA_romname" "$_dest" } extract_sch5545ec() @@ -287,8 +270,7 @@ extract_sch5545ec() _sch5545ec_fw="$_sch5545ec_fw/0 Raw section/body.bin" # <-- this! "$uefiextract" "$_bios" || $err "sch5545 !extract - $dontflash" - cp "$_sch5545ec_fw" "$_dest" || \ - $err "$_dest: !sch5545 copy - $dontflash"; : + x_ cp "$_sch5545ec_fw" "$_dest" } # Lenovo ThunderBolt firmware updates: @@ -303,14 +285,11 @@ extract_tbfw() while read -r f; do [ -f "$f" ] || continue [ -L "$f" ] && continue - cp "$f" "tmp/tb.bin" || \ - $err "extract_tbfw $_dest: Can't copy TBT.bin - $dontflash" + x_ cp "$f" "tmp/tb.bin" break done < "tmp/tb.txt" - dd if=/dev/null of=tmp/tb.bin bs=1 seek=$TBFW_size || \ - $err "extract_tbfw $_dest: Can't pad TBT.bin - $dontflash" - cp "tmp/tb.bin" "$_dest" || \ - $err "extract_tbfw $_dest: copy error - $dontflash "; : + x_ dd if=/dev/null of=tmp/tb.bin bs=1 seek=$TBFW_size + x_ cp "tmp/tb.bin" "$_dest" } extract_fspm() @@ -326,8 +305,7 @@ extract_fsps() # this copies the fsp s/m; re-base is handled by ./mk inject copy_fsp() { - cp "$appdir/Fsp_$1.fd" "$_dest" || \ - $err "copy_fsp: Can't copy $1 to $_dest - $dontflash"; : + x_ cp "$appdir/Fsp_$1.fd" "$_dest" } fail_inject() @@ -337,13 +315,12 @@ fail_inject() printf "\n\n%s\n\n" "$dontflash" 1>&2 printf "WARNING: File '%s' was NOT modified.\n\n" "$archive" 1>&2 printf "Please MAKE SURE vendor files are inserted before flashing\n\n" - fail "$1" + err_ "$1" } vendor_inject() { need_files="n" - _olderr="$err" err="fail_inject" remkdir "$tmpromdel" @@ -363,64 +340,29 @@ vendor_inject() [ -z "$new_mac" ] && $err "Empty MAC address specified" ;; *) $err "Unrecognised inject mode: '$2'" esac - [ "$new_mac" = "keep" ] && new_mac="" - check_release "$archive" || \ - $err "You must run this script on a release archive. - $dontflash" - - [ "$new_mac" = "restore" ] && \ - printf "Restoring default GbE for '$archive', board '$board'\n" + check_release "$archive" || $err "'$archive' is not a release archive" readcfg && need_files="y" if [ "$need_files" = "y" ] || [ -n "$new_mac" ]; then - [ "$nukemode" = "nuke" ] || x_ ./mk download "$board" + [ "$nukemode" != "nuke" ] && [ "$need_files" = "y" ] && \ + x_ ./mk download "$board" patch_release_roms fi - [ "$need_files" != "y" ] && printf \ - "\nTarball '%s' (board '%s) doesn't need vendorfiles.\n" \ - "$archive" "$board" 1>&2 xtype="patched" && [ "$nukemode" = "nuke" ] && xtype="nuked" - [ "$xchanged" != "y" ] && \ - printf "\nRelease archive '%s' was *NOT* modified.\n" \ - "$archive" && [ "$has_hashes" = "y" ] && \ - printf "WARNING: '%s' contains '%s'. DO NOT FLASH!\n" \ - "$archive" "$hashfile" 1>&2 && \ - printf "(vendorfiles may be needed and aren't there)\n" \ - 1>&2 - [ "$xchanged" = "y" ] && \ - printf "\nRelease archive '%s' successfully %s.\n" \ - "$archive" "$xtype" && [ "$nukemode" != "nuke" ] && \ - printf "You may now extract '%s' and flash images from it.\n" \ - "$archive" - [ "$xchanged" = "y" ] && [ "$nukemode" = "nuke" ] && \ - printf "WARNING! Vendorfiles *removed*. DO NOT FLASH.\n" 1>&2 \ - && printf "DO NOT flash images from '%s'\n" \ - "$archive" 1>&2 - - [ "$need_files" = "n" ] && printf \ - "Board '%s' doesn't use vendorfiles, so none were inserted.\n" \ - "$board" - - if [ "$xchanged" != "y" ] && [ "$need_files" = "y" ] && \ - [ "$nukemode" = "nuke" ] && [ "$has_hashes" != "y" ]; then - printf "FAILED NUKE: tarball '$archive', board '$board'\n" 1>&2 - $err "Unhandled vendorfile deletion: DO NOT RELEASE TO RSYNC" - fi - - err="$_olderr"; : + [ "$xchanged" != "y" ] && printf "\n'%s' *NOT* modified.\n" "$archive" + [ "$xchanged" = "y" ] && printf "\n'%s' %s.\n" "$archive" "$xtype"; : } check_release() { - [ -L "$archive" ] && \ - $err "'$archive' is a symlink, not a file - $dontflash" + [ -L "$archive" ] && $err "'$archive' is a symlink. $dontflash" e "$archive" f missing && return 1 archivename="`basename "$archive"`" - [ -z "$archivename" ] && \ - $err "Cannot determine archive file name - $dontflash" + [ -z "$archivename" ] && $err "Can't determine archive name. $dontflash" case "$archivename" in *_src.tar.xz) @@ -442,8 +384,7 @@ readcfg() boarddir="$cbcfgsdir/$board" eval "`setcfg "$boarddir/target.cfg"`" - chkvars tree - x_ ./mk -d coreboot "$tree" # even if vendorfiles not used, see: setmac + chkvars tree && x_ ./mk -d coreboot "$tree" [ -z "$vcfg" ] && return 1 @@ -464,21 +405,19 @@ readcfg() patch_release_roms() { has_hashes="n" - tmpromdir="tmp/DO_NOT_FLASH/bin/$board" + remkdir "${tmpromdir%"/bin/$board"}" x_ tar -xf "$archive" -C "${tmpromdir%"/bin/$board"}" for _hashes in $hashfiles; do + [ "$need_files" = "y" ] || break e "$tmpromdir/$_hashes" f && has_hashes="y" && \ hashfile="$_hashes" && break; : done - x_ mkdir -p "tmp" - [ -L "tmp/rom.list" ] && \ + x_ mkdir -p "tmp" && [ -L "tmp/rom.list" ] && \ $err "'$archive' -> tmp/rom.list is a symlink - $dontflash" - x_ rm -f "tmp/rom.list" "tmp/zero.1b" - x_ dd if=/dev/zero of=tmp/zero.1b bs=1 count=1 find "$tmpromdir" -maxdepth 1 -type f -name "*.rom" > "tmp/rom.list" \ || $err "'$archive' -> Can't make tmp/rom.list - $dontflash" @@ -487,35 +426,33 @@ patch_release_roms() while read -r _xrom ; do process_release_rom "$_xrom" || break done < "tmp/rom.list" - rm -f "$tmpromdir/README.md" || : [ "$nukemode" != "nuke" ] || \ - printf "Make sure you inserted vendor files: %s\n" \ - "$vguide" > "$tmpromdir/README.md" || : + printf "Make sure you inserted vendor files: %s\n" \ + "$vguide" > "$tmpromdir/README.md" || : else printf "Skipping vendorfiles on '%s'\n" "$archive" 1>&2 + need_files="n" fi ( + [ "$need_files" = "y" ] || exit 0 cd "$tmpromdir" || $err "patch '$archive': can't cd $tmpromdir" # NOTE: For compatibility with older rom releases, defer to sha1 if [ "$has_hashes" = "y" ] && [ "$nukemode" != "nuke" ]; then sha512sum --status -c "$hashfile" || \ - sha1sum --status -c "$hashfile" || \ - $err "'$archive' -> Can't verify vendor hashes. $dontflash" - rm -f "$hashfile" || \ - $err "$archive: Can't rm hashfile. $dontflash" + x_ sha1sum --status -c "$hashfile" + x_ rm -f "$hashfile" fi ) || $err "'$archive' -> Can't verify vendor hashes. $dontflash" - [ -z "$new_mac" ] || modify_mac_addresses || printf \ - "\nNo GbE region defined for '%s'\n" "$board" 1>&2 + [ -z "$new_mac" ] || modify_mac || printf "\nGbE not defined\n" 1>&2 [ "$xchanged" = "y" ] || rm -Rf "$tmpromdel" || : [ "$xchanged" = "y" ] || return 0 + ( - cd "${tmpromdir%"/bin/$board"}" || \ - $err "Can't cd '${tmpromdir%"/bin/$board"}'; $dontflash" - mkrom_tarball "bin/$board" + x_ cd "${tmpromdir%"/bin/$board"}" + mkrom_tarball "bin/$board" ) || $err "Cannot re-generate '$archive' - $dontflash" mv "${tmpromdir%"/bin/$board"}/bin/${relname}_${board}.tar.xz" \ @@ -526,48 +463,32 @@ process_release_rom() { _xrom="$1" _xromname="${1##*/}" + _xromnew="${_xrom%/*}/${_xromname#"$vfix"}" + [ "$nukemode" = "nuke" ] && _xromnew="${_xrom%/*}/$vfix${_xrom##*/}" e "$_xrom" f missing && return 0 - - [ -z "${_xromname#"$vfix"}" ] && \ - $err "'$_xromname'->'"${_xromname#"$vfix"}"' empty. $dontflash" + [ -z "${_xromname#"$vfix"}" ] && $err "$_xromname / $vfix: name match" # Remove the prefix and 1-byte pad if [ "$nukemode" != "nuke" ] && \ [ "${_xromname#"$vfix"}" != "$_xromname" ]; then - _xromnew="${_xrom%/*}/${_xromname#"$vfix"}" - - stat -c '%s' "$_xrom" > "tmp/rom.size" || \ - $err "$_xrom: Can't get rom size. $dontflash" - read -r xromsize < "tmp/rom.size" || \ - $err "$_xrom: Can't read rom size. $dontflash" - - expr "X$xromsize" : "X-\{0,1\}[0123456789][0123456789]*$" \ - 1>/dev/null 2>/dev/null || $err "$_xrom size non-integer" - [ $xromsize -lt 2 ] && $err \ - "$_xrom: Will not create empty file. $dontflash" + xromsize="$(expr $(stat -c '%s' "$_xrom") - 1)" || $err "!int" + [ $xromsize -lt 524288 ] && $err "too small, $xromsize: $_xrom" - xromsize="`expr $xromsize - 1`" - [ $xromsize -lt 524288 ] && \ - $err "$_xrom size too small; likely not a rom. $dontflash" - - dd if="$_xrom" of="$_xromnew" bs=$xromsize count=1 || \ - $err "$_xrom: Can't resize. $dontflash" + x_ dd if="$_xrom" of="$_xromnew" bs=$xromsize count=1 rm -f "$_xrom" || $err "Can't rm $_xrom - $dontflash" _xrom="$_xromnew" fi - [ "$nukemode" = "nuke" ] && \ - mksha512sum "$_xrom" "vendorhashes" + [ "$nukemode" = "nuke" ] && mksha512sum "$_xrom" "vendorhashes" patch_rom "$_xrom" || return 1 # if break return, can still change MAC [ "$nukemode" != "nuke" ] && return 0 # Rename the file, prefixing a warning saying not to flash - cat "$_xrom" tmp/zero.1b > "${_xrom%/*}/$vfix${_xrom##*/}" || \ - $err "'$archive' -> can't pad/rename '$_xrom'. $dontflash" - rm -f "$_xrom" || $err "'$archive' -> can't rm '$_xrom'. $dontflash" + cat "$_xrom" config/data/coreboot/0 > "$_xromnew" || $err "!pad $_xrom" + x_ rm -f "$_xrom" } patch_rom() @@ -575,12 +496,10 @@ patch_rom() rom="$1" if [ "$has_hashes" != "y" ] && [ "$nukemode" != "nuke" ]; then - printf "inject: '%s' has no hash file. Skipping.\n" \ - "$archive" 1>&2 + printf "'%s' has no hash file. Skipping.\n" "$archive" 1>&2 return 1 elif [ "$has_hashes" = "y" ] && [ "$nukemode" = "nuke" ]; then - printf "inject nuke: '%s' has a hash file. Skipping nuke.\n" \ - "$archive" 1>&2 + printf "'%s' has a hash file. Skipping nuke.\n" "$archive" 1>&2 return 1 fi @@ -610,7 +529,6 @@ patch_rom() inject() { - [ $# -lt 3 ] && $err "bad command: $*, $rom" [ "$2" = "/dev/null" ] && return 0 cbfsname="$1" @@ -634,13 +552,8 @@ inject() $err "failed: inject '$_t' '$_dest' on '$rom'" [ "$nukemode" != "nuke" ] || "$ifdtool" $ifdprefix --nuke $_t \ "$rom" -O "$rom" || $err "$rom: !nuke IFD/$_t" - xchanged="y" - return 0 elif [ "$nukemode" = "nuke" ]; then - "$cbfstool" "$rom" remove -n "$cbfsname" || \ - $err "inject $rom: can't remove $cbfsname" - xchanged="y" - return 0 + x_ "$cbfstool" "$rom" remove -n "$cbfsname" elif [ "$_t" = "stage" ]; then # the only stage we handle is refcode x_ mkdir -p tmp x_ rm -f "tmp/refcode" @@ -654,18 +567,13 @@ inject() xchanged="y"; : } -modify_mac_addresses() +modify_mac() { [ -n "$CONFIG_GBE_BIN_PATH" ] || return 1 - x_ mkdir -p tmp - e tmp/gbe && x_ e tmp/gbe f - x_ cp "${CONFIG_GBE_BIN_PATH##*../}" tmp/gbe - - if [ "$new_mac" != "restore" ]; then - x_ make -C util/nvmutil - x_ "$nvm" tmp/gbe setmac "$new_mac" - fi + x_ mkdir -p tmp && x_ cp "${CONFIG_GBE_BIN_PATH##*../}" tmp/gbe + [ "$new_mac" != "restore" ] && x_ make -C util/nvmutil && \ + x_ "$nvm" tmp/gbe setmac "$new_mac" find "$tmpromdir" -maxdepth 1 -type f -name "*.rom" > "tmp/rom.list" \ || $err "'$archive' -> Can't make tmp/rom.list - $dontflash" |