diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/get.sh | 40 | ||||
-rw-r--r-- | include/init.sh | 15 | ||||
-rw-r--r-- | include/inject.sh | 20 | ||||
-rw-r--r-- | include/lib.sh | 36 | ||||
-rw-r--r-- | include/release.sh | 5 | ||||
-rw-r--r-- | include/rom.sh | 61 | ||||
-rw-r--r-- | include/tree.sh | 66 | ||||
-rw-r--r-- | include/vendor.sh | 51 |
8 files changed, 177 insertions, 117 deletions
diff --git a/include/get.sh b/include/get.sh index 6f1b5f1d..a3328454 100644 --- a/include/get.sh +++ b/include/get.sh @@ -5,16 +5,13 @@ eval "`setvars "" loc url bkup_url subcurl subhash subgit subgit_bkup \ depend subcurl_bkup repofail`" -tmpgit="$xbmklocal/gitclone" +tmpgit="$xbloc/gitclone" tmpgitcache="$XBMK_CACHE/tmpgit" fetch_targets() { - e "src/$project/$tree" d && return 0 - - printf "Creating %s tree %s\n" "$project" "$tree" - git_prep "$url" "$bkup_url" "$xbmkpwd/$configdir/$tree/patches" \ - "src/$project/$tree" with_submodules + [ -d "src/$project/$tree" ] || git_prep "$url" "$bkup_url" \ + "$xbmkpwd/$configdir/$tree/patches" "src/$project/$tree" submod; : } fetch_project() @@ -22,11 +19,8 @@ fetch_project() eval "`setvars "" xtree`" eval "`setcfg "config/git/$project/pkg.cfg"`" - chkvars url bkup_url - - [ -n "$xtree" ] && x_ ./mk -f coreboot "$xtree" + chkvars url bkup_url && [ -n "$xtree" ] && x_ ./mk -f coreboot "$xtree" [ -z "$depend" ] || for d in $depend ; do - printf "'%s' needs '%s'; grabbing '%s'\n" "$project" "$d" "$d" x_ ./mk -f $d done clone_project @@ -36,7 +30,6 @@ clone_project() { loc="$XBMK_CACHE/clone/$project" && singletree "$project" && \ loc="src/$project" - printf "Downloading project '%s' to '%s'\n" "$project" "$loc" e "$loc" d missing && remkdir "${tmpgit%/*}" && git_prep \ "$url" "$bkup_url" "$xbmkpwd/config/$project/patches" "$loc"; : @@ -44,11 +37,13 @@ clone_project() git_prep() { + printf "Creating code directory, src/%s/%s\n" "$project" "$tree" + _patchdir="$3" _loc="$4" # $1 and $2 are gitrepo and gitrepo_backup chkvars rev - xbmkget git "$1" "$2" "$tmpgit" "$rev" "$_patchdir" + xbget git "$1" "$2" "$tmpgit" "$rev" "$_patchdir" if singletree "$project" || [ $# -gt 4 ]; then dx_ fetch_submodule "$mdir/module.list" fi @@ -73,19 +68,19 @@ fetch_submodule() chkvars "sub${st}" "sub${st}_bkup" "subhash" [ "$st" = "git" ] && x_ rm -Rf "$tmpgit/$1" - eval xbmkget "$st" "\$sub$st" "\$sub${st}_bkup" "$tmpgit/$1" \ + eval xbget "$st" "\$sub$st" "\$sub${st}_bkup" "$tmpgit/$1" \ "$subhash" "$mdir/${1##*/}/patches" } -xbmkget() +xbget() { [ "$1" = "curl" ] || [ "$1" = "copy" ] || [ "$1" = "git" ] || \ - err "Bad dlop (arg 1): xbmkget $*" + err "Bad dlop (arg 1): xbget $*" echk="f" && [ "$1" = "git" ] && echk="d" for url in "$2" "$3"; do - [ -n "$url" ] || err "empty URL given in: xbmkget $*" + [ -n "$url" ] || err "empty URL given in: xbget $*" try_file "$url" "$@" || continue eval "[ -$echk \"$4\" ] || continue" return 0 # successful download/copy @@ -111,7 +106,8 @@ try_file() eval "[ -$echk \"$cached\" ] || return 1" if [ "$2" = "git" ]; then - [ -d "$5" ] || tmpclone "$cached" "$5" "$6" "$7" || return 1 + [ -d "$5" ] || tmpclone "$cached" "$5" "$6" "$7" || \ + err "Can't clone final repo in command: try_file $*"; : else bad_checksum "$6" "$cached" && x_ rm -f "$cached" && return 1 [ "$cached" != "$5" ] && x_ cp "$cached" "$5" @@ -130,8 +126,7 @@ try_curl() try_copy() { - [ -L "$2" ] && printf "symlink %s (trycp %s)\n" "$2" "$*" && return 1 - [ ! -f "$2" ] && printf "%s missing (trycp %s)\n" "$2" "$*" && return 1 + e "$2" f missing && return 1; : ( x_ cp "$2" "$1" ) || return 1; : } @@ -148,16 +143,15 @@ try_git() ( x_ git -C "$gitdest" remote remove backup ) || : x_ git -C "$gitdest" remote add main "$4" x_ git -C "$gitdest" remote add backup "$5" - ( x_ git -C "$gitdest" fetch --all ) || : ( x_ git -C "$gitdest" pull --all ) || :; : } bad_checksum() { - [ ! -f "$2" ] && printf "'%s' missing, %s\n" "$2" "$1" 1>&2 && return 0 + e "$2" f missing && return 0 csum="$(x_ sha512sum "$2" | awk '{print $1}')" || err "!sha512 '$2' $1" - [ "$csum" != "$1" ] && printf "BAD SHA512, '%s'; need '%s', got %s\n" \ - "$2" "$1" "$csum" 1>&2 && x_ rm -f "$2" && return 0; return 1 + [ "$csum" = "$1" ] && return 1; x_ rm -f "$2" + printf "BAD SHA512 %s, '%s'; need '%s'\n" "$csum" "$2" "$1" 1>&2 } tmpclone() diff --git a/include/init.sh b/include/init.sh index 38eb1c81..bc5a62b6 100644 --- a/include/init.sh +++ b/include/init.sh @@ -14,13 +14,13 @@ projectsite="https://libreboot.org/" export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" eval "`setvars "" _nogit board reinstall versiondate aur_notice configdir \ - datadir version xbmkpwd relname xbmkpwd xbmktmp python pyver xbmklocal \ + datadir version xbmkpwd relname xbmkpwd xbtmp python pyver xbloc \ xbmklock cvxbmk cvchk xbmkpath`" xbmk_init() { xbmkpwd="`pwd`" || err "Cannot generate PWD" - xbmklocal="$xbmkpwd/tmp" + xbloc="$xbmkpwd/tmp" xbmklock="$xbmkpwd/lock" export PWD="$xbmkpwd" @@ -71,7 +71,7 @@ xbmk_set_env() # unify all temporary files/directories in a single TMPDIR [ -z "${TMPDIR+x}" ] || [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || \ unset TMPDIR - [ -n "${TMPDIR+x}" ] && export TMPDIR="$TMPDIR" && xbmktmp="$TMPDIR" + [ -n "${TMPDIR+x}" ] && export TMPDIR="$TMPDIR" && xbtmp="$TMPDIR" [ -z "${TMPDIR+x}" ] || is_child="y" # child instance, so return if [ "$is_child" = "y" ]; then @@ -87,7 +87,7 @@ xbmk_set_env() # parent instance of xbmk, so don't return. set up TMPDIR export TMPDIR="/tmp" export TMPDIR="$(mktemp -d -t xbmk_XXXXXXXX)" - xbmktmp="$TMPDIR" + xbtmp="$TMPDIR" export XBMK_CACHE="$xbmkpwd/cache" [ -L "$XBMK_CACHE" ] && [ "$XBMK_CACHE" = "$xbmkpwd/cache" ] && \ @@ -107,8 +107,7 @@ xbmk_set_env() xbmk_set_version export LOCALVERSION="-$projectname-${version%%-*}" - remkdir "$xbmktmp" "$xbmklocal" - remkdir "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" + remkdir "$xbtmp" "$xbloc" "$XBMK_CACHE/gnupath" "$XBMK_CACHE/xbmkpath" xbmk_set_pyver } @@ -195,7 +194,7 @@ xbmk_git_init() || err "Run this first: $gitcmd \"your ${gitcmd##*.}\"" done - [ -L ".git" ] && return 1 + [ -L ".git" ] && err "'$xbmkpwd/.git' is a symlink" [ -e ".git" ] && return 0 eval "`setvars "$(date -Rud @$versiondate)" cdate _nogit`" @@ -211,7 +210,7 @@ xbmk_child_exec() { xbmk_rval=0 ( x_ ./mk "$@" ) || xbmk_rval=1 - ( x_ rm -Rf "$xbmklocal" "$xbmktmp" ) || xbmk_rval=1 + ( x_ rm -Rf "$xbloc" "$xbtmp" ) || xbmk_rval=1 ( x_ rm -f "$xbmklock" ) || xbmk_rval=1 exit $xbmk_rval } diff --git a/include/inject.sh b/include/inject.sh index 74f688a1..795b2c70 100644 --- a/include/inject.sh +++ b/include/inject.sh @@ -6,7 +6,7 @@ cbcfgsdir="config/coreboot" tmpromdel="$XBMK_CACHE/DO_NOT_FLASH" nvm="util/nvmutil/nvm" -ifdtool="elf/ifdtool/default/ifdtool" +ifdtool="elf/coreboot/default/ifdtool" cv="CONFIG_GBE_BIN_PATH" [ -n "$cvxbmk" ] && cv="$cv $cvxbmk" @@ -65,7 +65,7 @@ check_release() *.tar.xz) _stripped_prefix="${archivename#*_}" board="${_stripped_prefix%.tar.xz}" ;; *) - err "'$archive': could not detect board type" + err "'$archive': could not detect board type" ;; esac; : } @@ -77,7 +77,7 @@ check_target() eval "`setcfg "$boarddir/target.cfg"`" chkvars tree && x_ ./mk -d coreboot "$tree" - ifdtool="elf/ifdtool/$tree/ifdtool" + ifdtool="elf/coreboot/$tree/ifdtool" [ -n "$IFD_platform" ] && ifdprefix="-p $IFD_platform"; : } @@ -103,36 +103,36 @@ patch_release() readkconfig() { - x_ rm -f "$xbmktmp/cbcfg" + x_ rm -f "$xbtmp/cbcfg" fx_ scankconfig x_ find "$boarddir/config" -type f - eval "`setcfg "$xbmktmp/cbcfg" 1`" + eval "`setcfg "$xbtmp/cbcfg" 1`" setvfile "$@" || return 1; : } scankconfig() { for cbc in $cv; do - grep "$cbc" "$1" 1>>"$xbmktmp/cbcfg" 2>/dev/null || : + grep "$cbc" "$1" 1>>"$xbtmp/cbcfg" 2>/dev/null || : done } modify_mac() { - x_ cp "${CONFIG_GBE_BIN_PATH##*../}" "$xbmklocal/gbe" + x_ cp "${CONFIG_GBE_BIN_PATH##*../}" "$xbloc/gbe" [ -n "$new_mac" ] && [ "$new_mac" != "restore" ] && \ x_ make -C util/nvmutil clean && x_ make -C util/nvmutil && \ - x_ "$nvm" "$xbmklocal/gbe" setmac "$new_mac" + x_ "$nvm" "$xbloc/gbe" setmac "$new_mac" fx_ newmac x_ find "$tmpromdir" -maxdepth 1 -type f -name "*.rom" printf "\nThe following GbE NVM data will be written:\n" - x_ "$nvm" "$xbmklocal/gbe" dump | grep -v "bytes read from file" || : + x_ "$nvm" "$xbloc/gbe" dump | grep -v "bytes read from file" || : } newmac() { e "$1" f && xchanged="y" && x_ \ - "$ifdtool" $ifdprefix -i GbE:"$xbmklocal/gbe" "$1" -O "$1"; : + "$ifdtool" $ifdprefix -i GbE:"$xbloc/gbe" "$1" -O "$1"; : } remktar() diff --git a/include/lib.sh b/include/lib.sh index 7c4d71ea..6fc3bd1e 100644 --- a/include/lib.sh +++ b/include/lib.sh @@ -4,8 +4,8 @@ # Copyright (c) 2020-2025 Leah Rowe <leah@libreboot.org> # Copyright (c) 2025 Alper Nebi Yasak <alpernebiyasak@gmail.com> -cbfstool="elf/cbfstool/default/cbfstool" -rmodtool="elf/cbfstool/default/rmodtool" +cbfstool="elf/coreboot/default/cbfstool" +rmodtool="elf/coreboot/default/rmodtool" remkdir() { @@ -53,12 +53,10 @@ setvars() fi val="$1" shift 1 - while true; do - [ $# -lt 1 ] && break - _setvars="$1=\"$val\"; $_setvars" + while [ $# -gt 0 ]; do + printf "%s=\"%s\"\n" "$1" "$val" shift 1 done - printf "%s\n" "${_setvars% }" } setcfg() @@ -71,11 +69,9 @@ setcfg() chkvars() { - while true; do - [ $# -lt 1 ] && break + while [ $# -gt 0 ]; do eval "[ -n \"\${$1+x}\" ] || err \"$1 unset\"" - eval "[ -n \"\$$1\" ] || err \"$1 unset\"" - shift 1 + eval "[ -n \"\$$1\" ] || err \"$1 unset\"; shift 1; :" done; : } @@ -99,12 +95,30 @@ findpath() done } +pad_one_byte() +{ + paddedfile="`mktemp`" || err "mktemp pad_one_byte" + x_ cp "$1" "$paddedfile" + cat "$paddedfile" config/data/coreboot/0 > "$1" || err "!pad $1"; : + x_ rm "$paddedfile" +} + +unpad_one_byte() +{ + xromsize="$(expr $(stat -c '%s' "$1") - 1)" || err "!int" + [ $xromsize -lt 524288 ] && err "too small, $xromsize: $1" + + unpaddedfile="`mktemp`" || err "mktemp unpad_one_byte" + x_ dd if="$1" of="$unpaddedfile" bs=$xromsize count=1 + x_ mv "$unpaddedfile" "$1" +} + fx_() { fd="`mktemp`" && x_ rm -f "$fd" && x_ touch "$fd" xx="$1" && shift 1 "$@" 2>/dev/null | sort 1>"$fd" 2>/dev/null || err "FATAL: !sort fx_" - dx_ "$xx" "$fd" || break + dx_ "$xx" "$fd" || : x_ rm -f "$fd" } diff --git a/include/release.sh b/include/release.sh index f23ed541..912687dc 100644 --- a/include/release.sh +++ b/include/release.sh @@ -22,13 +22,12 @@ release() [ -e "$reldest" ] && \ err "already exists: \"$reldest\"" - vdir="$XBMK_CACHE/relpwd/${xbmktmp##*/}/$version" + vdir="$XBMK_CACHE/relpwd/${xbtmp##*/}/$version" rsrc="$vdir/${relname}_src" remkdir "$vdir" x_ git clone . "$rsrc" - x_ cp ".version" "$rsrc/.version" - x_ cp ".versiondate" "$rsrc/.versiondate" + update_xbmkver "$rsrc" prep_release src prep_release tarball diff --git a/include/rom.sh b/include/rom.sh index 4a3503f4..57948ec4 100644 --- a/include/rom.sh +++ b/include/rom.sh @@ -25,7 +25,7 @@ copyps1bios() remkdir "bin/playstation" x_ cp src/pcsx-redux/src/mips/openbios/openbios.bin bin/playstation - printf "MIT License\n\nCopyright (c) 2019-2024 PCSX-Redux authors\n\n" \ + printf "MIT License\n\nCopyright (c) 2019-2025 PCSX-Redux authors\n\n" \ > bin/playstation/COPYING.txt || err "!pcsx-redux copyright" cat config/snippet/mit >>bin/playstation/COPYING.txt || err "!pcsx MIT" } @@ -43,7 +43,7 @@ mkpayload_grub() "/boot/grub/grub.cfg=$grubdata/memdisk.cfg"; : } -mkvendorfiles() +corebootpremake() { [ -n "$mode" ] || [ ! -f "$srcdir/.config" ] || $dry printf \ "CONFIG_CCACHE=y\n" >> "$srcdir/.config" || err "$srcdir: !cook"; : @@ -56,10 +56,10 @@ mkvendorfiles() check_coreboot_util() { - [ "$badhash" = "y" ] && x_ rm -f "elf/$1/$tree/$1" - e "elf/$1/$tree/$1" f && return 0 + [ "$badhash" = "y" ] && x_ rm -f "elf/coreboot/$tree/$1" + e "elf/coreboot/$tree/$1" f && return 0 - utilelfdir="elf/$1/$tree" + utilelfdir="elf/coreboot/$tree" utilsrcdir="src/coreboot/$tree/util/$1" utilmode="" && [ -n "$mode" ] && utilmode="clean" @@ -74,18 +74,41 @@ check_coreboot_util() x_ cp "$utilsrcdir/rmodtool" "$utilelfdir" } +coreboot_pad_one_byte() +{ + $dry pad_one_byte "$srcdir/build/coreboot.rom" +} + mkcorebootbin() { + $dry fx_ check_coreboot_util printf "cbfstool\nifdtool\n" + + for y in "$target_dir/config"/*; do + defconfig="$y" + mkcorebootbin_real + done + + mkcoreboottar +} + +mkcorebootbin_real() +{ [ "$target" = "$tree" ] && return 0 - tmprom="$xbmktmp/coreboot.rom" - $dry x_ cp "$srcdir/build/coreboot.rom" "$tmprom" + tmprom="$xbtmp/coreboot.rom" initmode="${defconfig##*/}" displaymode="${initmode##*_}" [ "$displaymode" = "$initmode" ] && displaymode="" # "normal" config initmode="${initmode%%_*}" - cbfstool="elf/cbfstool/$tree/cbfstool" + cbfstool="elf/coreboot/$tree/cbfstool" + + elfrom="elf/coreboot/$tree/$target/$initmode" + [ -n "$displaymode" ] && elfrom="${elfrom}_$displaymode" + elfrom="$elfrom/coreboot.rom" + + $dry x_ cp "$elfrom" "$tmprom" + $dry unpad_one_byte "$tmprom" [ -z "$payload_uboot" ] || [ "$payload_uboot" = "amd64" ] || \ [ "$payload_uboot" = "i386" ] || [ "$payload_uboot" = "arm64" ] \ @@ -102,7 +125,7 @@ mkcorebootbin() [ -z "$grub_scan_disk" ] && grub_scan_disk="nvme ahci ata" [ -n "$grubtree" ] || grubtree="default" - grubelf="elf/grub/$grubtree/payload/grub.elf" + grubelf="elf/grub/$grubtree/$grubtree/payload/grub.elf" [ "$payload_memtest" = "y" ] || payload_memtest="n" [ "$(uname -m)" = "x86_64" ] || payload_memtest="n" @@ -127,7 +150,7 @@ add_seabios() [ -z "$payload_uboot" ] || [ "$payload_uboot" = "arm64" ] || \ $dry add_uboot - _seabioself="elf/seabios/default/$initmode/bios.bin.elf" + _seabioself="elf/seabios/default/default/$initmode/bios.bin.elf" _seaname="fallback/payload" && [ "$payload_grubsea" = "y" ] && \ _seaname="seabios.elf" @@ -158,8 +181,8 @@ add_grub() _grubname="fallback/payload" cbfs "$tmprom" "$grubelf" "$_grubname" printf "set grub_scan_disk=\"%s\"\n" "$grub_scan_disk" \ - > "$xbmktmp/tmpcfg" || err "$target: !insert scandisk" - cbfs "$tmprom" "$xbmktmp/tmpcfg" scan.cfg raw + > "$xbtmp/tmpcfg" || err "$target: !insert scandisk" + cbfs "$tmprom" "$xbtmp/tmpcfg" scan.cfg raw [ "$initmode" != "normal" ] && [ "$displaymode" != "txtmode" ] && \ cbfs "$tmprom" "$grubdata/background/background1280x800.png" \ "background.png" raw; : @@ -191,18 +214,21 @@ add_uboot() # aarch64 targets: ubcbfsargs="" ubpath="fallback/payload" + ubtree="default" ubtarget="$target" # override for x86/x86_64 targets: if [ -n "$payload_uboot" ] && [ "$payload_uboot" != "arm64" ]; then ubcbfsargs="-l 0x1110000 -e 0x1110000" # 64-bit and 32-bit # on 64-bit, 0x1120000 is the SPL, and stub before that ubpath="img/u-boot" # 64-bit + ubtree="x86_64" ubtarget="amd64coreboot" [ "$payload_uboot" = "i386" ] && ubpath="u-boot" # 32-bit + [ "$payload_uboot" = "i386" ] && ubtree="x86" [ "$payload_uboot" = "i386" ] && ubtarget="i386coreboot"; : fi - ubdir="elf/u-boot/$ubtarget/$uboot_config" + ubdir="elf/u-boot/$ubtree/$ubtarget/$uboot_config" # aarch64 targets: ubootelf="$ubdir/u-boot.elf" && [ ! -f "$ubootelf" ] && \ @@ -253,10 +279,7 @@ cbfs() mkcoreboottar() { - [ "$target" = "$tree" ] && return 0 - [ "$XBMK_RELEASE" = "y" ] || return 0 - [ "$release" != "n" ] || return 0 - - $dry mkrom_tarball "bin/$target" - $dry x_ ./mk inject "bin/${relname}_${target}.tar.xz" nuke; : + [ "$target" != "$tree" ] && [ "$XBMK_RELEASE" = "y" ] && \ + [ "$release" != "n" ] && $dry mkrom_tarball "bin/$target" && \ + $dry x_ ./mk inject "bin/${relname}_${target}.tar.xz" nuke; : } diff --git a/include/tree.sh b/include/tree.sh index 83887864..1f635e23 100644 --- a/include/tree.sh +++ b/include/tree.sh @@ -7,7 +7,7 @@ eval "`setvars "" xarch srcdir premake gnatdir xlang mode makeargs elfdir cmd \ project target target_dir targets xtree _f release bootstrapargs mkhelper \ autoconfargs listfile autogenargs btype rev build_depend gccdir cmakedir \ defconfig postmake mkhelpercfg dry dest_dir mdir cleanargs gccver gccfull \ - gnatver gnatfull do_make badhash tree`" + gnatver gnatfull do_make badhash badtghash tree`" trees() { @@ -58,7 +58,7 @@ trees() mkhelpercfg="$datadir/mkhelper.cfg" if e "$mkhelpercfg" f missing; then - mkhelpercfg="$xbmktmp/mkhelper.cfg" + mkhelpercfg="$xbtmp/mkhelper.cfg" x_ touch "$mkhelpercfg" fi @@ -129,7 +129,7 @@ configure_project() { eval "`setvars "" cleanargs build_depend autoconfargs xtree postmake \ makeargs btype mkhelper bootstrapargs premake release xlang xarch \ - badhash`" + badhash badtghash`" _tcfg="$1/target.cfg" [ -f "$_tcfg" ] || btype="auto" e "$datadir/mkhelper.cfg" f && eval "`setcfg "$datadir/mkhelper.cfg"`" @@ -173,17 +173,25 @@ build_dependencies() done; : } +# delete src/project/TREE and elf/project/TREE if configs +# change on the given tree, but don't check configs e.g. +# don't check x200_8mb/ files if building for x200_8mb check_project_hashes() { - old_pjhash="" && x_ mkdir -p "$XBMK_CACHE/hash" + eval "`setvars "" old_pjhash pjhash`" + x_ mkdir -p "$XBMK_CACHE/hash" + [ ! -f "$XBMK_CACHE/hash/$project$tree" ] || \ - read -r old_pjhash < "$XBMK_CACHE/hash/$project$tree" + read -r old_pjhash < "$XBMK_CACHE/hash/$project$tree" || \ + err "old_pjhash: Can't read '$XBMK_CACHE/hash/$project$tree'" fx_ "x_ sha512sum" find "$datadir" "$configdir/$tree" "$mdir" \ -type f -not -path "*/.git*/*" | awk '{print $1}' > \ - "$xbmktmp/project.hash" || err "!h $project $tree" + "$xbtmp/project.hash" || err "!h $project $tree" + + pjhash="$(x_ sha512sum "$xbtmp/project.hash" | awk '{print $1}' || \ + err)" || err "pjhash: Can't read sha512 of '$xbtmp/project.hash'" - pjhash="$(sha512sum "$xbmktmp/project.hash" | awk '{print $1}')" || : [ "$pjhash" != "$old_pjhash" ] && badhash="y" [ -f "$XBMK_CACHE/hash/$project$tree" ] || badhash="y" @@ -191,7 +199,41 @@ check_project_hashes() err "!mk $XBMK_CACHE/hash/$project$tree" [ "$badhash" != "y" ] || x_ rm -Rf "src/$project/$tree" \ - "elf/$project/$tree" "elf/$project/$target"; : + "elf/$project/$tree"; : + + singletree "$project" || check_target_hash; : +} + +# delete elf/project/TREE/TARGET on a given target, within a +# multi-tree project; this happens even if the given tree isn't +# deleted. for example, if coreboot/default doesn't change but +# the x200_8mb/ files change, delete the x200_8mb files +check_target_hash() +{ + [ -n "$target" ] || return 0 + + eval "`setvars "" old_tghash tghash`" + x_ mkdir -p "$XBMK_CACHE/tghash" + + [ ! -f "$XBMK_CACHE/tghash/$project$target" ] || \ + read -r old_tghash < "$XBMK_CACHE/tghash/$project$target" || \ + err "t: Can't read '$XBMK_CACHE/tghash/$project$target'" + + fx_ "x_ sha512sum" find "$configdir/$target" \ + -type f -not -path "*/.git*/*" | awk '{print $1}' > \ + "$xbtmp/target.hash" || err "!ht $project $target" + + tghash="$(x_ sha512sum "$xbtmp/target.hash" | awk '{print $1}' \ + || err)" || err "tghash: !read sha512 '$xbtmp/target.hash'" + + [ "$tghash" != "$old_tghash" ] && badtghash="y"; : + [ -f "$XBMK_CACHE/tghash/$project$target" ] || badtghash="y"; : + + printf "%s\n" "$tghash" > "$XBMK_CACHE/tghash/$project$target" || \ + err "!mk $XBMK_CACHE/tghash/$project$target" + + [ "$badtghash" != "y" ] || \ + x_ rm -Rf "elf/$project/$tree/$target"; : } check_cross_compiler() @@ -262,7 +304,7 @@ gnu_setver() check_defconfig() { [ -f "$defconfig" ] || $dry err "$project/$target: missing defconfig" - dest_dir="$elfdir/$target/${defconfig#"$target_dir/config/"}" + dest_dir="$elfdir/$tree/$target/${defconfig#"$target_dir/config/"}" $dry elfcheck || return 1; : # skip build if a previous one exists } @@ -279,8 +321,6 @@ handle_makefile() $dry x_ make -C "$srcdir" $cleanargs clean [ -f "$defconfig" ] && x_ cp "$defconfig" "$srcdir/.config" - [ -n "$mode" ] || [ -n "$btype" ] || $dry make -C \ - "$srcdir" silentoldconfig || make -C "$srcdir" oldconfig || : run_make_command || err "handle_makefile $srcdir: no makefile!" @@ -304,8 +344,10 @@ run_make_command() $dry x_ make -C "$srcdir" $mode -j$XBMK_THREADS $makeargs [ -n "$mode" ] || x_ $mkhelper + check_makefile "$srcdir" || return 0 [ "$mode" != "clean" ] || \ - $dry make -C "$srcdir" $cleanargs distclean || :; : + $dry make -C "$srcdir" $cleanargs distclean || \ + $dry x_ make -C "$srcdir" $cleanargs clean; : } check_cmake() diff --git a/include/vendor.sh b/include/vendor.sh index 99fc7467..55373913 100644 --- a/include/vendor.sh +++ b/include/vendor.sh @@ -26,12 +26,11 @@ cvchk="CONFIG_INCLUDE_SMSC_SCH5545_EC_FW CONFIG_HAVE_MRC CONFIG_HAVE_ME_BIN \ CONFIG_FSP_S_FILE CONFIG_KBC1126_FW1 CONFIG_KBC1126_FW2" # lbmk-specific extensions to the "cv" variable (not suitable for cbmk) -cvxbmk="CONFIG_ME_BIN_PATH CONFIG_SMSC_SCH5545_EC_FW_FILE \ - CONFIG_KBC1126_FW1_OFFSET CONFIG_KBC1126_FW2_OFFSET \ +cvxbmk="CONFIG_ME_BIN_PATH CONFIG_SMSC_SCH5545_EC_FW_FILE CONFIG_FSP_FULL_FD \ + CONFIG_KBC1126_FW1_OFFSET CONFIG_KBC1126_FW2_OFFSET CONFIG_FSP_USE_REPO \ CONFIG_VGA_BIOS_ID CONFIG_BOARD_DELL_E6400 CONFIG_FSP_S_CBFS \ CONFIG_HAVE_REFCODE_BLOB CONFIG_REFCODE_BLOB_FILE CONFIG_FSP_FD_PATH \ - CONFIG_IFD_BIN_PATH CONFIG_MRC_FILE CONFIG_FSP_M_CBFS \ - CONFIG_FSP_USE_REPO CONFIG_FSP_FULL_FD" + CONFIG_IFD_BIN_PATH CONFIG_MRC_FILE CONFIG_FSP_M_CBFS" # lbmk-specific extensions; mostly used for downloading vendor files eval "`setvars "" has_hashes EC_hash DL_hash DL_url_bkup MRC_refcode_gbe vcfg \ @@ -54,17 +53,14 @@ download() getfiles() { [ -z "$CONFIG_HAVE_ME_BIN" ] || fetch intel_me "$DL_url" \ - "$DL_url_bkup" "$DL_hash" "$CONFIG_ME_BIN_PATH" "curl" \ - "$ME_bin_hash" + "$DL_url_bkup" "$DL_hash" "$CONFIG_ME_BIN_PATH" curl "$ME_bin_hash" [ -z "$CONFIG_INCLUDE_SMSC_SCH5545_EC_FW" ] || fetch sch5545ec \ "$SCH5545EC_DL_url" "$SCH5545EC_DL_url_bkup" "$SCH5545EC_DL_hash" \ "$CONFIG_SMSC_SCH5545_EC_FW_FILE" "curl" "$SCH5545EC_bin_hash" [ -z "$CONFIG_KBC1126_FW1" ] || fetch kbc1126ec "$EC_url" \ - "$EC_url_bkup" "$EC_hash" "$CONFIG_KBC1126_FW1" "curl" \ - "$EC_FW1_hash" + "$EC_url_bkup" "$EC_hash" "$CONFIG_KBC1126_FW1" curl "$EC_FW1_hash" [ -z "$CONFIG_KBC1126_FW2" ] || fetch kbc1126ec "$EC_url" \ - "$EC_url_bkup" "$EC_hash" "$CONFIG_KBC1126_FW2" "curl" \ - "$EC_FW2_hash" + "$EC_url_bkup" "$EC_hash" "$CONFIG_KBC1126_FW2" curl "$EC_FW2_hash" [ -z "$CONFIG_VGA_BIOS_FILE" ] || fetch e6400vga "$E6400_VGA_DL_url" \ "$E6400_VGA_DL_url_bkup" "$E6400_VGA_DL_hash" \ "$CONFIG_VGA_BIOS_FILE" "curl" "$E6400_VGA_bin_hash" @@ -111,12 +107,11 @@ fetch() done; : # download the file (from the internet) to extract from - xbmkget "$dlop" "$dl" "$dl_bkup" "$_dl" "$dlsum" + xbget "$dlop" "$dl" "$dl_bkup" "$_dl" "$dlsum" x_ rm -Rf "${_dl}_extracted" # skip extraction if a cached extracted file exists - ( xbmkget copy "$_dl_bin" "$_dl_bin" "$_dest" "$binsum" 2>/dev/null ) \ - || : + ( xbget copy "$_dl_bin" "$_dl_bin" "$_dest" "$binsum" 2>/dev/null ) || : [ -f "$_dest" ] && return 0 x_ mkdir -p "${_dest%/*}" @@ -132,14 +127,8 @@ fetch() ( fx_ "eval mkdst \"$binsum\"" x_ find "${_pre_dest%/*}" -type f ) || : bad_checksum "$binsum" "$_dest" || [ ! -f "$_dest" ] || return 0 - [ -z "$binsum" ] && \ - printf "'%s', '%s': checksum undefined. Check files in '%s'\n" \ - "$board" "$_dest" "${_pre_dest%/*}" 1>&2 - e "$_dest" f not && err "missing file '$_dest', !extract_$dl_type"; : - e "$_dest" f && printf "WARNING: '%s' made with bad hash (will rm)\n" \ - "$_dest" 1>&2 - [ -L "$_dest" ] && printf "WARNING: '%s' is a link. Please delete!\n" \ - "$_dest" 1>&2 + [ -z "$binsum" ] && printf "'%s': checksum undefined\n" "$_dest" 1>&2 + [ -L "$_dest" ] && printf "WARNING: '%s' is a link!\n" "$_dest" 1>&2 [ -L "$_dest" ] || x_ rm -f "$_dest" err "Could not safely extract '$_dest', for board '$board'" } @@ -156,9 +145,9 @@ extract_intel_me() { e "$mecleaner" f not && err "$cbdir: me_cleaner missing" - _7ztest="$xbmklocal/metmp/a" - _metmp="$xbmklocal/me.bin" - x_ rm -f "$_metmp" "$xbmklocal/a" + _7ztest="$xbloc/metmp/a" + _metmp="$xbloc/me.bin" + x_ rm -f "$_metmp" "$xbloc/a" mfs="" && [ "$ME11bootguard" = "y" ] && mfs="--whitelist MFS" && \ chkvars ME11delta ME11version ME11sku ME11pch @@ -184,7 +173,7 @@ find_me() _7ztest="${_7ztest}a" && _r="-r" && [ -n "$mfs" ] && _r="" - "$mecleaner" $mfs $_r -t -O "$xbmklocal/a" -M "$_metmp" "$1" || \ + "$mecleaner" $mfs $_r -t -O "$xbloc/a" -M "$_metmp" "$1" || \ "$mecleaner" $mfs $_r -t -O "$_metmp" "$1" || "$me7updateparser" \ -O "$_metmp" "$1" || extract_archive "$1" "$_7ztest" || return 0 @@ -281,14 +270,14 @@ bootstrap() cbdir="src/coreboot/$tree" mecleaner="$xbmkpwd/$cbdir/util/me_cleaner/me_cleaner.py" kbc1126_ec_dump="$xbmkpwd/$cbdir/util/kbc1126/kbc1126_ec_dump" - cbfstool="elf/cbfstool/$tree/cbfstool" - rmodtool="elf/cbfstool/$tree/rmodtool" + cbfstool="elf/coreboot/$tree/cbfstool" + rmodtool="elf/coreboot/$tree/rmodtool" x_ ./mk -f coreboot "${cbdir##*/}" fx_ "x_ ./mk -b" printf "uefitool\nbiosutilities\nbios_extract\n" [ -d "${kbc1126_ec_dump%/*}" ] && x_ make -C "$cbdir/util/kbc1126" [ -n "$MRC_refcode_cbtree" ] && \ - cbfstoolref="elf/cbfstool/$MRC_refcode_cbtree/cbfstool" && \ + cbfstoolref="elf/coreboot/$MRC_refcode_cbtree/cbfstool" && \ x_ ./mk -d coreboot "$MRC_refcode_cbtree"; : } @@ -393,9 +382,9 @@ vfile() elif [ "$nuke" = "nuke" ]; then x_ "$cbfstool" "$rom" remove -n "$cbfsname" elif [ "$_t" = "stage" ]; then # the only stage we handle is refcode - x_ rm -f "$xbmklocal/refcode" - x_ "$rmodtool" -i "$_dest" -o "$xbmklocal/refcode" - x_ "$cbfstool" "$rom" add-stage -f "$xbmklocal/refcode" \ + x_ rm -f "$xbloc/refcode" + x_ "$rmodtool" -i "$_dest" -o "$xbloc/refcode" + x_ "$cbfstool" "$rom" add-stage -f "$xbloc/refcode" \ -n "$cbfsname" -t stage else x_ "$cbfstool" "$rom" add -f "$_dest" -n "$cbfsname" \ |