Compare commits

...

15 Commits

Author SHA1 Message Date
Leah Rowe a0951d1127 minor cleanup
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 11:06:12 +01:00
Leah Rowe f59e5d8e2b rom.sh: remove redundant check
if_build / empty mode are a given here, since this
is a premake function which only executes if
the mode string is empty and/or if_build is empty

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 10:55:19 +01:00
Leah Rowe 4530c6f2e3 rom.sh: put coreboot dry checks in mkhelper
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 10:52:52 +01:00
Leah Rowe e0714ad929 rom.sh: check grub dry build in mkhelper
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 10:46:53 +01:00
Leah Rowe 058a70a16e pcsx-redux: check dry build in mkhelper
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 10:45:16 +01:00
Leah Rowe e1c2525783 lib.sh: make build_sbase a macro
sh macros are cool

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 10:40:55 +01:00
Leah Rowe 69875b8e10 xbmk: general cleanup
note: mecleaner check removed in vendor.sh, because
it's already guaranteed to be fetched. the check will
never indicate failure, so we can just assume that
the me cleaner python script exists.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 10:33:43 +01:00
Leah Rowe 1722964f66 mk: add safety check for grep -o usage
very unlikely not to have it, but we deal in
certainty, not rm -Rf /

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 10:33:43 +01:00
Leah Rowe 63596046d1 rom.sh: simplify add_uboot
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 10:33:36 +01:00
Leah Rowe 40b120c26b remove ccache from dependencies
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 07:23:18 +01:00
Leah Rowe bf654d4c19 rom.sh: just remove the coreboot cook function
ccache isn't used at all in any of the configs

ensuring that this remains the case is much
cleaner. coreboot will never enable it by default,
precisely because of how buggy it is.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 07:20:25 +01:00
Leah Rowe 94ff1ec49a inject.sh: simplify variable init and end message
the modified/not message is pointless, because the
message indicating tarball rebuild will suffice

variable initialisation simplified (global newvar)

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 02:22:11 +01:00
Leah Rowe 08021d71c2 rom.sh: simplify add_uboot
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 02:06:00 +01:00
Leah Rowe 856551a36d mk: add forx function for shorthand loops
Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 01:53:56 +01:00
Leah Rowe 7c025e1036 release.sh: remove -m option
-m src can skip building binaries

this is pointless. i always want them.

i won't use it, and i'm the only person
who will ever use ./mk release

i'm going to add a -t option in the future
to allow e.g. ./mk -t coreboot

this would do -f but create a tarball of
the source, versioned. e.g.
coreboot-libreboot-27.05_src.tar.xz

or something like that. this would allow
more granular control, if you just want to
get sources.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 01:13:36 +01:00
22 changed files with 160 additions and 331 deletions
+2 -2
View File
@@ -24,5 +24,5 @@ payload_uboot=""
cbfscfg="" cbfscfg=""
premake="corebootpremake" premake="corebootpremake"
mkhelper="coreboot_pad_one_byte" mkhelper="$if_not_dry_build coreboot_pad_one_byte"
postmake="mkcorebootbin" postmake="$if_not_dry_build mkcorebootbin"
+1 -1
View File
@@ -4,4 +4,4 @@ bootstrapargs="--gnulib-srcdir=gnulib/ --no-git"
configureargs="--with-platform=coreboot --disable-werror" configureargs="--with-platform=coreboot --disable-werror"
makeargs="FS_PAYLOAD_MODULES=\"\"" makeargs="FS_PAYLOAD_MODULES=\"\""
buildtype="autohell" buildtype="autohell"
mkhelper="mkpayload_grub" mkhelper="$if_not_dry_build mkpayload_grub"
+2 -1
View File
@@ -1,3 +1,4 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
postmake="copyps1bios" mkhelper="$if_not_dry_build copyps1bios"
postmake="$if_not_dry_build copyps1bios"
+1 -1
View File
@@ -6,7 +6,7 @@ acpica arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-newlib \
autogen base-devel bison cdrtools cmake curl device-mapper doxygen \ autogen base-devel bison cdrtools cmake curl device-mapper doxygen \
dtc e2fsprogs flex freetype2 fuse2 gawk gcc-ada gdb gettext git \ dtc e2fsprogs flex freetype2 fuse2 gawk gcc-ada gdb gettext git \
help2man innoextract libftdi libgpiod libjaylink libpciaccess libusb nasm \ help2man innoextract libftdi libgpiod libjaylink libpciaccess libusb nasm \
ncurses openssl 7zip ccache less libx86 \ ncurses openssl 7zip less libx86 \
pandoc parted pciutils perl perl-libwww python python-setuptools rsync \ pandoc parted pciutils perl perl-libwww python python-setuptools rsync \
sharutils subversion swig texinfo ttf-dejavu unarchiver unzip wget xz zlib mtools \ sharutils subversion swig texinfo ttf-dejavu unarchiver unzip wget xz zlib mtools \
" "
+1 -1
View File
@@ -13,6 +13,6 @@ libsdl2-dev libselinux1-dev libssl-dev libtool libusb-1.0-0 libusb-1.0-0-dev \
libusb-dev lz4 lzma lzma-alone m4 nasm openssl 7zip parted pciutils \ libusb-dev lz4 lzma lzma-alone m4 nasm openssl 7zip parted pciutils \
perl pkg-config python3 python3-distutils-extra python3-pkg-resources python3-pycryptodome \ perl pkg-config python3 python3-distutils-extra python3-pkg-resources python3-pycryptodome \
python3-pyelftools python3-setuptools python-is-python3 sharutils swig unar \ python3-pyelftools python3-setuptools python-is-python3 sharutils swig unar \
unifont unifont-bin unzip uuid-dev wget xfonts-unifont zlib1g-dev ccache \ unifont unifont-bin unzip uuid-dev wget xfonts-unifont zlib1g-dev \
g++-mipsel-linux-gnu make genisoimage mtools libx86-1 libx86-dev libstdc++-arm-none-eabi-newlib autoconf-archive \ g++-mipsel-linux-gnu make genisoimage mtools libx86-1 libx86-dev libstdc++-arm-none-eabi-newlib autoconf-archive \
" "
+1 -1
View File
@@ -10,5 +10,5 @@ innoextract intltool libftdi-devel libselinux-devel libusb1 libusb1-devel \
nasm ncurses-devel openssl-devel p7zip p7zip-plugins pandoc parted \ nasm ncurses-devel openssl-devel p7zip p7zip-plugins pandoc parted \
pciutils-devel perl perl-libwww-perl python-unversioned-command python3 \ pciutils-devel perl perl-libwww-perl python-unversioned-command python3 \
python3-setuptools rsync sharutils subversion texinfo unar unifont \ python3-setuptools rsync sharutils subversion texinfo unar unifont \
unifont-fonts unifont-ttf-fonts unzip wget xz zlib-devel ccache swig \ unifont-fonts unifont-ttf-fonts unzip wget xz zlib-devel swig \
" "
+1 -1
View File
@@ -11,5 +11,5 @@ libselinux-devel libusb1 libusb1-devel nasm ncurses-devel openssl-devel \
p7zip p7zip-plugins pandoc parted pciutils-devel perl perl-libwww-perl \ p7zip p7zip-plugins pandoc parted pciutils-devel perl perl-libwww-perl \
python-unversioned-command python3 python3-setuptools rsync sharutils \ python-unversioned-command python3 python3-setuptools rsync sharutils \
subversion systemd-devel texinfo unar unifont unifont-fonts \ subversion systemd-devel texinfo unar unifont unifont-fonts \
unifont-ttf-fonts unzip wget xz zlib-devel ccache swig python3-devel \ unifont-ttf-fonts unzip wget xz zlib-devel swig python3-devel \
" "
+1 -1
View File
@@ -11,6 +11,6 @@ libselinux-devel libusb1 libusb1-devel nasm ncurses-devel openssl-devel openssl-
p7zip p7zip-plugins pandoc parted pciutils-devel perl perl-libwww-perl \ p7zip p7zip-plugins pandoc parted pciutils-devel perl perl-libwww-perl \
python-unversioned-command python3 python3-setuptools rsync sharutils \ python-unversioned-command python3 python3-setuptools rsync sharutils \
subversion systemd-devel texinfo unar unifont unifont-fonts uuid-devel \ subversion systemd-devel texinfo unar unifont unifont-fonts uuid-devel \
unifont-ttf-fonts unzip wget xz zlib-devel ccache swig python3-devel \ unifont-ttf-fonts unzip wget xz zlib-devel swig python3-devel \
libuuid-devel gnutls-devel \ libuuid-devel gnutls-devel \
" "
+1 -1
View File
@@ -11,6 +11,6 @@ libselinux-devel libusb1 libusb1-devel nasm ncurses-devel openssl-devel openssl-
p7zip p7zip-plugins pandoc parted pciutils-devel perl perl-libwww-perl \ p7zip p7zip-plugins pandoc parted pciutils-devel perl perl-libwww-perl \
python-unversioned-command python3 python3-setuptools rsync sharutils \ python-unversioned-command python3 python3-setuptools rsync sharutils \
subversion systemd-devel texinfo unifont unifont-fonts uuid-devel \ subversion systemd-devel texinfo unifont unifont-fonts uuid-devel \
unifont-ttf-fonts unzip wget xz zlib-devel ccache swig python3-devel \ unifont-ttf-fonts unzip wget xz zlib-devel swig python3-devel \
libuuid-devel gnutls-devel tar unar libtool \ libuuid-devel gnutls-devel tar unar libtool \
" "
+1 -1
View File
@@ -11,6 +11,6 @@ libselinux-devel libusb1 libusb1-devel nasm ncurses-devel openssl-devel openssl-
p7zip p7zip-plugins pandoc parted pciutils-devel perl perl-libwww-perl \ p7zip p7zip-plugins pandoc parted pciutils-devel perl perl-libwww-perl \
python-unversioned-command python3 python3-setuptools rsync sharutils \ python-unversioned-command python3 python3-setuptools rsync sharutils \
subversion systemd-devel texinfo unifont unifont-fonts uuid-devel \ subversion systemd-devel texinfo unifont unifont-fonts uuid-devel \
unifont-ttf-fonts unzip wget xz zlib-devel ccache swig python3-devel \ unifont-ttf-fonts unzip wget xz zlib-devel swig python3-devel \
libuuid-devel gnutls-devel tar unar libtool \ libuuid-devel gnutls-devel tar unar libtool \
" "
+1 -1
View File
@@ -11,7 +11,7 @@ dev-libs/libgpiod app-arch/sharutils dev-libs/libtomcrypt sys-devel/autogen \
media-libs/freetype sys-fs/e2fsprogs sys-fs/lvm2 dev-libs/libusb \ media-libs/freetype sys-fs/e2fsprogs sys-fs/lvm2 dev-libs/libusb \
sys-block/parted sys-fs/mtools app-arch/lz4 dev-libs/leancrypto sys-fs/fuse \ sys-block/parted sys-fs/mtools app-arch/lz4 dev-libs/leancrypto sys-fs/fuse \
sys-apps/dtc net-libs/gnutls net-misc/curl dev-build/cmake dev-vcs/git \ sys-apps/dtc net-libs/gnutls net-misc/curl dev-build/cmake dev-vcs/git \
dev-util/ccache dev-embedded/libftdi app-arch/innoextract sys-devel/gcc \ dev-embedded/libftdi app-arch/innoextract sys-devel/gcc \
sys-apps/pciutils app-crypt/efitools gnustep-base/gnustep-make gnustep-base/gnustep-base \ sys-apps/pciutils app-crypt/efitools gnustep-base/gnustep-make gnustep-base/gnustep-base \
app-arch/unar app-arch/7zip dev-lang/python dev-python/setuptools dev-python/ply \ app-arch/unar app-arch/7zip dev-lang/python dev-python/setuptools dev-python/ply \
sys-libs/libselinux dev-python/pyelftools dev-python/pycparser dev-python/cffi \ sys-libs/libselinux dev-python/pyelftools dev-python/pycparser dev-python/cffi \
+1 -1
View File
@@ -12,6 +12,6 @@ libpython3-dev libsdl2-dev libselinux1-dev libssl-dev libtool libusb-1.0-0 \
libusb-1.0-0-dev lz4 lzma lzma-alone m4 nasm openssl p7zip p7zip-full parted \ libusb-1.0-0-dev lz4 lzma lzma-alone m4 nasm openssl p7zip p7zip-full parted \
pciutils perl pkg-config python3 python3-pkg-resources python3-pycryptodome \ pciutils perl pkg-config python3 python3-pkg-resources python3-pycryptodome \
python3-pyelftools python3-setuptools python-is-python3 sharutils swig \ python3-pyelftools python3-setuptools python-is-python3 sharutils swig \
fonts-unifont unar unifont unzip uuid-dev wget zlib1g-dev ccache \ fonts-unifont unar unifont unzip uuid-dev wget zlib1g-dev \
g++-mipsel-linux-gnu make genisoimage mtools \ g++-mipsel-linux-gnu make genisoimage mtools \
" "
+1 -1
View File
@@ -8,5 +8,5 @@ freetype freetype-devel fuse gawk gcc-ada gdb gettext gettext-devel git \
gnutls-devel help2man innoextract libftdi1 libpciaccess libusb libuuid-devel \ gnutls-devel help2man innoextract libftdi1 libpciaccess libusb libuuid-devel \
nasm ncurses ncurses-devel openssl openssl-devel 7zip parted pciutils perl \ nasm ncurses ncurses-devel openssl openssl-devel 7zip parted pciutils perl \
perl-LWP python python3 python3-devel python3-setuptools rsync sharutils \ perl-LWP python python3 python3-devel python3-setuptools rsync sharutils \
subversion swig texinfo unar unzip wget xz zlib ccache \ subversion swig texinfo unar unzip wget xz zlib \
" "
-1
View File
@@ -2,4 +2,3 @@
makeargs="-f lbmkbofhmakefile" makeargs="-f lbmkbofhmakefile"
cleanargs="-f lbmkbofhmakefile" cleanargs="-f lbmkbofhmakefile"
mkhelper="copyps1bios"
+14 -31
View File
@@ -11,8 +11,7 @@ tmpgitcache="$xbtmp/tmpgit"
multi_tree_fetch() multi_tree_fetch()
{ {
[ -d "src/$project/$tree" ] && \ [ -d "src/$project/$tree" ] && return 0
return 0
git_prep "$url" "$bkup_url" "$xbmkpwd/$configdir/$tree/patches" \ git_prep "$url" "$bkup_url" "$xbmkpwd/$configdir/$tree/patches" \
"src/$project/$tree" "submod" "src/$project/$tree" "submod"
@@ -39,17 +38,14 @@ single_tree_fetch()
x_ "$mk" -f $d x_ "$mk" -f $d
done done
clone_project $if_single_tree \
clone_project; :
} }
clone_project() clone_project()
{ {
singletree "$project" || \
return 0
loc="src/$project" loc="src/$project"
[ -d "$loc" ] && \ [ -d "$loc" ] && return 0
return 0
remkdir "${tmpgit%/*}" remkdir "${tmpgit%/*}"
git_prep "$url" "$bkup_url" "$xbmkpwd/config/$project/patches" "$loc" git_prep "$url" "$bkup_url" "$xbmkpwd/config/$project/patches" "$loc"
@@ -81,9 +77,7 @@ fetch_submodule()
mcfgdir="$mdir/${1##*/}" mcfgdir="$mdir/${1##*/}"
eval "`newvar st subcurl subcurl_bkup subgit subgit_bkup subhash`" eval "`newvar st subcurl subcurl_bkup subgit subgit_bkup subhash`"
if e "$mcfgdir/module.cfg" f missing; then e "$mcfgdir/module.cfg" f missing && return 0
return 0
fi
. "$mcfgdir/module.cfg" || \ . "$mcfgdir/module.cfg" || \
err "Can't read '$mcfgdir/module.cfg'" "fetch_submodules" "$@" err "Can't read '$mcfgdir/module.cfg'" "fetch_submodules" "$@"
@@ -119,8 +113,7 @@ xbget()
err "empty URL given in" "xbget" "$@" err "empty URL given in" "xbget" "$@"
try_fetch_$1 "$url" "$@" || \ try_fetch_$1 "$url" "$@" || \
continue continue
[ -e "$4" ] && \ [ -e "$4" ] && return 0; : # successful download/copy
return 0; : # successful download/copy
done done
err "failed to download file/repository" "xbget" "$@"; : err "failed to download file/repository" "xbget" "$@"; :
@@ -174,10 +167,8 @@ try_fetch_curl()
try_$2 "$cached" "$@" || \ try_$2 "$cached" "$@" || \
return 1 return 1
[ -f "$5" ] && \ [ -f "$5" ] && bad_checksum "$6" "$5" 2>/dev/null && \
if bad_checksum "$6" "$5" 2>/dev/null; then x_ cp "$cached" "$5"
x_ cp "$cached" "$5"
fi
if [ ! -f "$cached" ]; then if [ ! -f "$cached" ]; then
return 1 return 1
@@ -202,8 +193,7 @@ try_curl()
ua="Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0" ua="Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0"
( x_ curl --location --retry 3 -A "$ua" "$2" -o "$1" ) \ ( x_ curl --location --retry 3 -A "$ua" "$2" -o "$1" ) \
|| ( x_ wget --tries 3 -U "$ua" "$2" -O "$1" ) \ || ( x_ wget --tries 3 -U "$ua" "$2" -O "$1" ) || return 1; :
|| return 1; :
} }
try_copy() try_copy()
@@ -230,15 +220,9 @@ try_git()
x_ mv "$tmpgitcache" "$gitdest" x_ mv "$tmpgitcache" "$gitdest"
fi fi
if git -C "$gitdest" show "$7" 1>/dev/null 2>/dev/null && \ git -C "$gitdest" show "$7" 1>/dev/null 2>/dev/null && \
[ "$forcepull" != "y" ]; then [ "$forcepull" != "y" ] && \
# don't try to pull the latest changes if the given target return 0 # don't pull changes if target rev exists locally
# revision already exists locally. this saves a lot of time
# during release builds, and reduces the chance that we will
# interact with grub.git or gnulib.git overall during runtime
return 0
fi
if [ "$XBMK_CACHE_MIRROR" = "y" ]; then if [ "$XBMK_CACHE_MIRROR" = "y" ]; then
( x_ git -C "$gitdest" fetch ) || :; : ( x_ git -C "$gitdest" fetch ) || :; :
@@ -250,11 +234,10 @@ try_git()
bad_checksum() bad_checksum()
{ {
if e "$2" f missing; then e "$2" f missing && \
return 0 return 0
fi
build_sbase eval "$build_sbase"
csum="$(x_ "$sha512sum" "$2" | awk '{print $1}')" || \ csum="$(x_ "$sha512sum" "$2" | awk '{print $1}')" || \
err "!sha512 '$2' $1" bad_checksum "$@" err "!sha512 '$2' $1" bad_checksum "$@"
+2 -4
View File
@@ -165,13 +165,11 @@ xbmk_parent_set_env()
x_ chmod -w "$xbmklock" x_ chmod -w "$xbmklock"
xbmk_parent_set_export forx 'xbmk_%s' parent_set_export set_version
xbmk_set_version
remkdir "$xbtmp" "$xbtmp/xbmkpath" remkdir "$xbtmp" "$xbtmp/xbmkpath"
xbmk_set_pyver forx 'xbmk_set_%s' pyver mirror
xbmk_set_mirror
} }
xbmk_parent_check_tmp() xbmk_parent_check_tmp()
+13 -34
View File
@@ -12,21 +12,17 @@ ifdtool="elf/coreboot/default/ifdtool"
checkvars="CONFIG_GBE_BIN_PATH ${checkvarsxbmk-} ${checkvarschk-}" checkvars="CONFIG_GBE_BIN_PATH ${checkvarsxbmk-} ${checkvarschk-}"
eval "`newvar archive board boarddir IFD_platform ifdprefix \ eval "`newvar archive board boarddir IFD_platform ifdprefix \
new_mac tmpromdir tree xchanged $checkvars`" new_mac nuke tmpromdir tree xchanged $checkvars`"
inject() inject()
{ {
remkdir "$tmpromdel" remkdir "$tmpromdel"
[ $# -lt 1 ] && \ [ $# -lt 1 ] && err "No options specified" "inject" "$@"
err "No options specified" "inject" "$@"
archive="$1"; archive="$1";
new_mac="xx:xx:xx:xx:xx:xx" new_mac="xx:xx:xx:xx:xx:xx"
nuke=""
xchanged=""
[ $# -gt 1 ] && case "$2" in [ $# -gt 1 ] && case "$2" in
nuke) nuke)
new_mac="" new_mac=""
@@ -48,18 +44,11 @@ inject()
check_release check_release
if check_target; then if check_target; then
patch_release || \ patch_release || return 0
return 0; :
fi fi
[ "$xchanged" = "y" ] && \ [ "$xchanged" = "y" ] && \
remktar remktar
if [ "$xchanged" = "y" ]; then
printf "\n'%s' was modified\n" "$archive" 1>&2
else
printf "\n'%s' was NOT modified\n" "$archive" 1>&2
fi
x_ rm -Rf "$tmpromdel" x_ rm -Rf "$tmpromdel"
} }
@@ -67,9 +56,8 @@ check_release()
{ {
[ -L "$archive" ] && \ [ -L "$archive" ] && \
err "'$archive' is a symlink" "check_release" "$@" err "'$archive' is a symlink" "check_release" "$@"
if e "$archive" f missing; then e "$archive" f missing && \
err "'$archive' missing" "check_release" "$@" err "'$archive' missing" "check_release" "$@"
fi
archivename="`basename "$archive" || err "Can't get '$archive' name"`" \ archivename="`basename "$archive" || err "Can't get '$archive' name"`" \
|| err "can't get '$archive' name" "check_release" "$@" || err "can't get '$archive' name" "check_release" "$@"
@@ -95,8 +83,7 @@ check_release()
check_target() check_target()
{ {
[ "$board" != "${board#serprog_}" ] && \ [ "$board" = "${board#serprog_}" ] || return 1
return 1
boarddir="$cbcfgsdir/$board" boarddir="$cbcfgsdir/$board"
@@ -109,7 +96,6 @@ check_target()
x_ "$mk" -d coreboot "$tree" x_ "$mk" -d coreboot "$tree"
ifdtool="elf/coreboot/$tree/ifdtool" ifdtool="elf/coreboot/$tree/ifdtool"
[ -n "$IFD_platform" ] && \ [ -n "$IFD_platform" ] && \
ifdprefix="-p $IFD_platform"; : ifdprefix="-p $IFD_platform"; :
} }
@@ -134,8 +120,7 @@ patch_release()
fi fi
done done
readkconfig || \ readkconfig || return 1
return 1
[ -n "$new_mac" ] && [ -n "$CONFIG_GBE_BIN_PATH" ] && \ [ -n "$new_mac" ] && [ -n "$CONFIG_GBE_BIN_PATH" ] && \
modify_mac; : modify_mac; :
@@ -146,15 +131,13 @@ readkconfig()
x_ rm -f "$xbtmp/cbcfg" x_ rm -f "$xbtmp/cbcfg"
fx_ scankconfig x_ find "$boarddir/config" -type f fx_ scankconfig x_ find "$boarddir/config" -type f
if e "$xbtmp/cbcfg" f missing; then e "$xbtmp/cbcfg" f missing && \
return 1 return 1
fi
. "$xbtmp/cbcfg" || \ . "$xbtmp/cbcfg" || \
err "Can't read '$xbtmp/cbcfg'" "readkconfig" "$@" err "Can't read '$xbtmp/cbcfg'" "readkconfig" "$@"
setvfile "$@" || \ setvfile "$@" || return 1; :
return 1; :
} }
scankconfig() scankconfig()
@@ -169,9 +152,7 @@ modify_mac()
x_ cp "${CONFIG_GBE_BIN_PATH##*../}" "$xbtmp/gbe" x_ cp "${CONFIG_GBE_BIN_PATH##*../}" "$xbtmp/gbe"
if [ -n "$new_mac" ] && [ "$new_mac" != "restore" ]; then if [ -n "$new_mac" ] && [ "$new_mac" != "restore" ]; then
x_ make -C util/nvmutil clean forx 'x_ make -C util/nvmutil %s' clean nvmutil
x_ make -C util/nvmutil
x_ "$nvmutil" "$xbtmp/gbe" setmac "$new_mac" x_ "$nvmutil" "$xbtmp/gbe" setmac "$new_mac"
fi fi
@@ -184,10 +165,9 @@ modify_mac()
newmac() newmac()
{ {
if e "$1" f; then e "$1" f || return 0
xchanged="y" xchanged="y"
x_ "$ifdtool" $ifdprefix -i GbE:"$xbtmp/gbe" "$1" -O "$1" x_ "$ifdtool" $ifdprefix -i GbE:"$xbtmp/gbe" "$1" -O "$1"
fi
} }
remktar() remktar()
@@ -201,6 +181,5 @@ remktar()
) || err "Cannot re-generate '$archive'" "remktar" "$@" ) || err "Cannot re-generate '$archive'" "remktar" "$@"
mv "${tmpromdir%"/bin/$board"}/bin/${relname}_${board}.tar.xz" \ mv "${tmpromdir%"/bin/$board"}/bin/${relname}_${board}.tar.xz" \
"$archive" || \ "$archive" || err "'$archive' -> Can't overwrite" "remktar" "$@"; :
err "'$archive' -> Can't overwrite" "remktar" "$@"; :
} }
+26 -91
View File
@@ -25,9 +25,6 @@ buildser()
copyps1bios() copyps1bios()
{ {
$if_dry_build \
return 0
remkdir "bin/playstation" remkdir "bin/playstation"
x_ cp src/pcsx-redux/src/mips/openbios/openbios.bin bin/playstation x_ cp src/pcsx-redux/src/mips/openbios/openbios.bin bin/playstation
@@ -43,9 +40,6 @@ mkpayload_grub()
{ {
eval "`newvar grub_modules grub_install_modules`" eval "`newvar grub_modules grub_install_modules`"
$if_dry_build \
return 0
. "$grubdata/module/$tree" || \ . "$grubdata/module/$tree" || \
err "Can't read '$grubdata/module/$tree'" "mkpayload_grub" "$@" err "Can't read '$grubdata/module/$tree'" "mkpayload_grub" "$@"
@@ -65,33 +59,21 @@ corebootpremake()
[ "$XBMK_RELEASE" = "y" ] && [ "$release" = "n" ] && \ [ "$XBMK_RELEASE" = "y" ] && [ "$release" = "n" ] && \
return 0 return 0
$if_not_dry_build \
cook_coreboot_config
fx_ check_coreboot_util printf "cbfstool\nifdtool\n" fx_ check_coreboot_util printf "cbfstool\nifdtool\n"
printf "%s\n" "${version%%-*}" > "$srcdir/.coreboot-version" || \ printf "%s\n" "${version%%-*}" > "$srcdir/.coreboot-version" || \
err "!mk $srcdir .coreboot-version" "corebootpremake" "$@" err "!mk $srcdir .coreboot-version" "corebootpremake" "$@"
[ -z "$mode" ] && [ "$target" != "$tree" ] && \ [ "$target" != "$tree" ] && \
x_ "$mk" download "$target"; : x_ "$mk" download "$target"; :
} }
cook_coreboot_config()
{
if [ -z "$mode" ] && [ -f "$srcdir/.config" ]; then
printf "CONFIG_CCACHE=n\n" >> "$srcdir/.config" || \
err "can't cook '$srcdir'" "cook_coreboot_config" "$@"
fi
}
check_coreboot_util() check_coreboot_util()
{ {
[ "$badhash" = "y" ] && \ [ "$badhash" = "y" ] && \
x_ rm -f "elf/coreboot/$tree/$1" x_ rm -f "elf/coreboot/$tree/$1"
if e "elf/coreboot/$tree/$1" f; then e "elf/coreboot/$tree/$1" f && \
return 0 return 0
fi
utilelfdir="elf/coreboot/$tree" utilelfdir="elf/coreboot/$tree"
utilsrcdir="src/coreboot/$tree/util/$1" utilsrcdir="src/coreboot/$tree/util/$1"
@@ -121,8 +103,7 @@ coreboot_pad_one_byte()
[ "$XBMK_RELEASE" = "y" ] && [ "$release" = "n" ] && \ [ "$XBMK_RELEASE" = "y" ] && [ "$release" = "n" ] && \
return 0 return 0
$if_not_dry_build \ pad_one_byte "$srcdir/build/coreboot.rom"
pad_one_byte "$srcdir/build/coreboot.rom"
} }
mkcorebootbin() mkcorebootbin()
@@ -130,11 +111,7 @@ mkcorebootbin()
[ "$XBMK_RELEASE" = "y" ] && [ "$release" = "n" ] && \ [ "$XBMK_RELEASE" = "y" ] && [ "$release" = "n" ] && \
return 0 return 0
$if_not_dry_build \ forx 'check_coreboot_util %s' cbfstool ifdtool
check_coreboot_util cbfstool
$if_not_dry_build \
check_coreboot_util ifdtool
for y in "$target_dir/config"/*; do for y in "$target_dir/config"/*; do
defconfig="$y" defconfig="$y"
@@ -146,8 +123,7 @@ mkcorebootbin()
mkcorebootbin_real() mkcorebootbin_real()
{ {
[ "$target" = "$tree" ] && \ [ "$target" = "$tree" ] && return 0
return 0
tmprom="$xbtmp/coreboot.rom" tmprom="$xbtmp/coreboot.rom"
@@ -169,11 +145,8 @@ mkcorebootbin_real()
elfrom="${elfrom}_$displaymode" elfrom="${elfrom}_$displaymode"
elfrom="$elfrom/coreboot.rom" elfrom="$elfrom/coreboot.rom"
$if_not_dry_build \ x_ cp "$elfrom" "$tmprom"
x_ cp "$elfrom" "$tmprom" unpad_one_byte "$tmprom"
$if_not_dry_build \
unpad_one_byte "$tmprom"
[ -n "$payload_uboot" ] && [ "$payload_uboot" != "amd64" ] && \ [ -n "$payload_uboot" ] && [ "$payload_uboot" != "amd64" ] && \
[ "$payload_uboot" != "i386" ] && [ "$payload_uboot" != "arm64" ] \ [ "$payload_uboot" != "i386" ] && [ "$payload_uboot" != "arm64" ] \
@@ -188,9 +161,8 @@ mkcorebootbin_real()
[ "$payload_grub" = "y" ] && \ [ "$payload_grub" = "y" ] && \
payload_seabios="y" payload_seabios="y"
[ "$payload_seabios" = "y" ] && [ "$payload_uboot" = "arm64" ] && \ [ "$payload_seabios" = "y" ] && [ "$payload_uboot" = "arm64" ] && \
$if_not_dry_build \ err "$target: U-Boot arm / SeaBIOS/GRUB both enabled" \
err "$target: U-Boot arm / SeaBIOS/GRUB both enabled" \ "mkcorebootbin_real" "$@"
"mkcorebootbin_real" "$@"
[ -z "$grub_scan_disk" ] && \ [ -z "$grub_scan_disk" ] && \
grub_scan_disk="nvme ahci ata" grub_scan_disk="nvme ahci ata"
@@ -208,9 +180,6 @@ mkcorebootbin_real()
[ "$payload_grub" != "y" ] && \ [ "$payload_grub" != "y" ] && \
payload_grubsea="n" payload_grubsea="n"
$if_dry_build \
return 0
[ -f "$cbfscfg" ] && \ [ -f "$cbfscfg" ] && \
dx_ add_cbfs_option "$cbfscfg" dx_ add_cbfs_option "$cbfscfg"
@@ -221,7 +190,8 @@ mkcorebootbin_real()
fi fi
if [ "$payload_uboot" = "arm64" ]; then if [ "$payload_uboot" = "arm64" ]; then
pname="uboot" pname="uboot"
add_uboot add_uboot "" fallback/payload default \
"$target" u-boot.elf
fi fi
else else
pname="custom" pname="custom"
@@ -256,8 +226,8 @@ add_cbfs_option()
add_seabios() add_seabios()
{ {
[ -n "$payload_uboot" ] && [ "$payload_uboot" != "arm64" ] && \ [ -n "$payload_uboot" ] && [ "$payload_uboot" != "arm64" ] && \
$if_not_dry_build \ [ "$displaymode" != "txtmode" ] && [ "$initmode" != "normal" ] && \
add_uboot # add u-boot first, due to fixed cbfs offset add_uboot_x86 # u-boot first, due to fixed cbfs offset
_seabioself="elf/seabios/default/default/$initmode/bios.bin.elf" _seabioself="elf/seabios/default/default/$initmode/bios.bin.elf"
[ "$initmode" = "fspgop" ] && \ [ "$initmode" = "fspgop" ] && \
@@ -337,60 +307,28 @@ mkseagrub()
fx_ cprom x_ find "$grubdata/keymap" -type f -name "*.gkb" fx_ cprom x_ find "$grubdata/keymap" -type f -name "*.gkb"
} }
add_uboot_x86()
{
[ "$payload_uboot" = "amd64" ] && \
add_uboot "-l 0x1110000 -e 0x1110000" "img/u-boot" \
"x86_64" "amd64coreboot" "u-boot-x86-with-spl.bin"
[ "$payload_uboot" = "i386" ] && \
add_uboot "-l 0x1110000 -e 0x1110000" "u-boot" "x86" \
"i386coreboot" "u-boot-dtb.bin"; :
}
add_uboot() add_uboot()
{ {
if [ "$displaymode" = "txtmode" ]; then ubootelf="elf/u-boot/$3/$4/$uboot_config/$5"
printf "cb/%s: Can't use U-Boot in text mode\n" "$target" 1>&2
return 0
elif [ "$initmode" = "normal" ]; then
printf "cb/%s: Can't use U-Boot in normal initmode\n" \
"$target" 1>&2
return 0
fi
# TODO: re-work to allow each coreboot target to say which ub tree
# instead of hardcoding as in the current logic below:
# 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, with a stub that
# loads it, located at 0x1110000
ubpath="img/u-boot" # 64-bit
ubtree="x86_64"
ubtarget="amd64coreboot"
if [ "$payload_uboot" = "i386" ]; then
ubpath="u-boot" # 32-bit
ubtree="x86"
ubtarget="i386coreboot"; :
fi
fi
ubdir="elf/u-boot/$ubtree/$ubtarget/$uboot_config"
ubootelf="$ubdir/u-boot.elf" # aarch64
[ ! -f "$ubootelf" ] && \ [ ! -f "$ubootelf" ] && \
ubootelf="$ubdir/u-boot" # aarch64 (fallback) ubootelf="${ubootelf%.elf}" # hack (fix arm64 build)
[ "$payload_uboot" = "i386" ] && \
ubootelf="$ubdir/u-boot-dtb.bin" # x86 override
[ "$payload_uboot" = "amd64" ] && \
ubootelf="$ubdir/u-boot-x86-with-spl.bin" # x86_64 override
cbfs "$tmprom" "$ubootelf" "$ubpath" $ubcbfsargs cbfs "$tmprom" "$ubootelf" "$2" $1
[ "$payload_seabios" != "y" ] && \ [ "$payload_seabios" != "y" ] && \
cprom; : cprom; :
} }
# prepare the final image in bin/ for user installation: # prepare the final image in bin/ for user installation:
cprom() cprom()
{ {
cpcmd="cp" cpcmd="cp"
@@ -446,9 +384,6 @@ cbfs()
mkcoreboottar() mkcoreboottar()
{ {
$if_dry_build \
return 0
if [ "$target" = "$tree" ] || [ "$XBMK_RELEASE" != "y" ] || \ if [ "$target" = "$tree" ] || [ "$XBMK_RELEASE" != "y" ] || \
[ "$release" = "n" ]; then [ "$release" = "n" ]; then
return 0 return 0
+24 -54
View File
@@ -51,14 +51,12 @@ eval "`newvar DL_hash DL_url DL_url_bkup E6400_VGA_bin_hash E6400_VGA_DL_hash \
download() download()
{ {
[ $# -lt 1 ] && \ [ $# -lt 1 ] && err "No argument given" "download" "$@"
err "No argument given" "download" "$@"
export PATH="$PATH:/sbin" export PATH="$PATH:/sbin"
board="$1" board="$1"
check_target || return 0 check_target && readkconfig download; :
readkconfig download
} }
getfiles() getfiles()
@@ -108,14 +106,12 @@ fetch()
dlop="$6" dlop="$6"
binsum="$7" binsum="$7"
[ -z "$binsum" ] && \ [ -z "$binsum" ] && err "binsum is empty (no checksum)" "fetch" "$@"
err "binsum is empty (no checksum)" "fetch" "$@"
_dl="$XBMK_CACHE/file/$dlsum" # internet file to extract from e.g. .exe _dl="$XBMK_CACHE/file/$dlsum" # internet file to extract from e.g. .exe
_dl_bin="$XBMK_CACHE/file/$binsum" # extracted file e.g. me.bin _dl_bin="$XBMK_CACHE/file/$binsum" # extracted file e.g. me.bin
[ "$5" = "/dev/null" ] && \ [ "$5" = "/dev/null" ] && return 0 # fetch/extract disabled
return 0
# an extracted vendor file will be placed in pre_dest first, for # an extracted vendor file will be placed in pre_dest first, for
# verifying its checksum. if it matches, it is later moved to _dest # verifying its checksum. if it matches, it is later moved to _dest
@@ -157,35 +153,26 @@ fetch()
( fx_ "mkdst $binsum" x_ find "${_pre_dest%/*}" -type f ) || : ( fx_ "mkdst $binsum" x_ find "${_pre_dest%/*}" -type f ) || :
bad_checksum "$binsum" "$_dest" || \ bad_checksum "$binsum" "$_dest" || \
[ ! -f "$_dest" ] || \ [ ! -f "$_dest" ] || return 0; :
return 0; :
[ -z "$binsum" ] && \
printf "WARNING: %s: checksum undefined\n" "$_dest" 1>&2
x_ rm -f "$_dest" x_ rm -f "$_dest"
[ -z "$binsum" ] && printf "WARNING: %s: no checksum\n" "$_dest" 1>&2
err "Can't safely extract '$_dest', for board '$board'" "fetch" "$@" err "Can't safely extract '$_dest', for board '$board'" "fetch" "$@"
} }
mkdst() mkdst()
{ {
if bad_checksum "$1" "$2" 2>/dev/null; then if ! bad_checksum "$1" "$2" 2>/dev/null; then
x_ rm -f "$2"
else
x_ mv "$2" "$_dl_bin" x_ mv "$2" "$_dl_bin"
x_ cp "$_dl_bin" "$_dest" x_ cp "$_dl_bin" "$_dest"
exit 1 exit 1
fi fi
x_ rm -f "$2"
} }
extract_intel_me() extract_intel_me()
{ {
if e "$mecleaner" f missing; then
err "$cbdir: me_cleaner missing" "extract_intel_me" "$@"
fi
mfs="" mfs=""
_7ztest="$xbtmp/metmp/a" _7ztest="$xbtmp/metmp/a"
_metmp="$xbtmp/me.bin" _metmp="$xbtmp/me.bin"
@@ -228,10 +215,8 @@ extract_intel_me()
# must be called inside a subshell. # must be called inside a subshell.
find_me() find_me()
{ {
[ -f "$_metmp" ] && \ [ -f "$_metmp" ] && exit 1 # me.bin found
exit 1 # me.bin found [ -L "$1" ] && return 0 # symlinks disabled for security reasons
[ -L "$1" ] && \
return 0 # symlinks disabled for security reasons
_7ztest="${_7ztest}a" _7ztest="${_7ztest}a"
@@ -268,8 +253,7 @@ find_me()
return 0 # can't extract, so try the next file return 0 # can't extract, so try the next file
fi fi
[ -f "$_metmp" ] && \ [ -f "$_metmp" ] && exit 1 # me.bin found
exit 1 # me.bin found
( fx_ find_me x_ find "$_7ztest" -type f ) || exit 1; : # 1==me found ( fx_ find_me x_ find "$_7ztest" -type f ) || exit 1; : # 1==me found
} }
@@ -318,8 +302,7 @@ extract_kbc1126ec_dump()
unar -D 68*.CAB Rom.bin || \ unar -D 68*.CAB Rom.bin || \
err "!kbc1126 unar" "extract_kbc1126ec" "$@" err "!kbc1126 unar" "extract_kbc1126ec" "$@"
[ ! -f "ec.bin" ] && \ [ -f "ec.bin" ] || x_ mv Rom.bin ec.bin
x_ mv Rom.bin ec.bin
x_ e ec.bin f x_ e ec.bin f
x_ "$kbc1126_ec_dump" ec.bin x_ "$kbc1126_ec_dump" ec.bin
@@ -365,8 +348,7 @@ extract_sch5545ec()
# https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/thinkpad-t-series-laptops/thinkpad-t480-type-20l5-20l6/20l5/solutions/ht508988 # https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/thinkpad-t-series-laptops/thinkpad-t480-type-20l5-20l6/20l5/solutions/ht508988
extract_tbfw() extract_tbfw()
{ {
[ -z "$TBFW_size" ] && \ [ -z "$TBFW_size" ] && err "$board: TBFW_size unset" extract_tbfw "$@"
err "$board: TBFW_size unset" "extract_tbfw" "$@"
fx_ copytb x_ find "$appdir" -type f -name "TBT.bin" fx_ copytb x_ find "$appdir" -type f -name "TBT.bin"
} }
@@ -397,17 +379,15 @@ setvfile()
eval "$vcmd && do_getvfile=\"y\"" eval "$vcmd && do_getvfile=\"y\""
[ "$do_getvfile" = "y" ] && \ [ "$do_getvfile" = "y" ] && \
if getvfile "$@"; then getvfile "$@" && \
return 0 return 0; :
fi; :
done && return 1; : done && return 1; :
} }
getvfile() getvfile()
{ {
if e "config/vendor/$vcfg/pkg.cfg" f missing; then e "config/vendor/$vcfg/pkg.cfg" f missing && \
return 1 return 1
fi
. "config/vendor/$vcfg/pkg.cfg" || \ . "config/vendor/$vcfg/pkg.cfg" || \
err "Can't read 'config/vendor/$vcfg/pkg.cfg'" "getvfile" "$@" err "Can't read 'config/vendor/$vcfg/pkg.cfg'" "getvfile" "$@"
@@ -415,12 +395,8 @@ getvfile()
bootstrap bootstrap
if [ $# -gt 0 ]; then if [ $# -gt 0 ]; then
# download vendor files getfiles # ./mk download
else # ./mk inject
getfiles
else
# inject vendor files
fx_ prep x_ find "$tmpromdir" -mindepth 1 -maxdepth 1 \ fx_ prep x_ find "$tmpromdir" -mindepth 1 -maxdepth 1 \
-type f -name "*.rom" -type f -name "*.rom"
( check_vendor_hashes ) || \ ( check_vendor_hashes ) || \
@@ -443,10 +419,7 @@ bootstrap()
x_ "$mk" -f coreboot "${cbdir##*/}" x_ "$mk" -f coreboot "${cbdir##*/}"
x_ "$mk" -f me_cleaner x_ "$mk" -f me_cleaner
x_ "$mk" -b bios_extract forx 'x_ \"$mk\" -b %s' bios_extract biosutilities uefitool libarchive
x_ "$mk" -b biosutilities
x_ "$mk" -b uefitool
x_ "$mk" -b libarchive # for bsdtar and bsdunzip
[ -d "${kbc1126_ec_dump%/*}" ] && \ [ -d "${kbc1126_ec_dump%/*}" ] && \
x_ make -C "$cbdir/util/kbc1126" x_ make -C "$cbdir/util/kbc1126"
@@ -466,9 +439,8 @@ prep()
[ "$nuke" = "nuke" ] && \ [ "$nuke" = "nuke" ] && \
_xromnew="${_xrom%/*}/$vfix${_xrom##*/}" _xromnew="${_xrom%/*}/$vfix${_xrom##*/}"
if e "$_xrom" f missing; then e "$_xrom" f missing && \
return 0 return 0
fi
[ -z "${_xromname#"$vfix"}" ] && \ [ -z "${_xromname#"$vfix"}" ] && \
err "$_xromname / $vfix: name match" "prep" "$@" err "$_xromname / $vfix: name match" "prep" "$@"
@@ -487,8 +459,7 @@ prep()
( mksha512 "$_xrom" "vendorhashes" ) || err; : ( mksha512 "$_xrom" "vendorhashes" ) || err; :
fi fi
add_vfiles "$_xrom" || \ add_vfiles "$_xrom" || return 1 # no need to insert files
return 1 # no need to insert files
if [ "$nuke" = "nuke" ]; then if [ "$nuke" = "nuke" ]; then
pad_one_byte "$_xrom" pad_one_byte "$_xrom"
@@ -498,7 +469,7 @@ prep()
mksha512() mksha512()
{ {
build_sbase eval "$build_sbase"
[ "${1%/*}" != "$1" ] && \ [ "${1%/*}" != "$1" ] && \
x_ cd "${1%/*}" x_ cd "${1%/*}"
@@ -551,8 +522,7 @@ add_vfiles()
vfile() vfile()
{ {
[ "$2" = "/dev/null" ] && \ [ "$2" = "/dev/null" ] && return 0
return 0
cbfsname="$1" cbfsname="$1"
_dest="${2##*../}" _dest="${2##*../}"
@@ -597,7 +567,7 @@ vfile()
# must be called from a subshell # must be called from a subshell
check_vendor_hashes() check_vendor_hashes()
{ {
build_sbase eval "$build_sbase"
x_ cd "$tmpromdir" x_ cd "$tmpromdir"
+3 -10
View File
@@ -8,6 +8,8 @@
cbfstool="elf/coreboot/default/cbfstool" cbfstool="elf/coreboot/default/cbfstool"
rmodtool="elf/coreboot/default/rmodtool" rmodtool="elf/coreboot/default/rmodtool"
build_sbase="[ ! -f \"\$sha512sum\" ] && x_ make -C util/sbase"
newvar() newvar()
{ {
printf "%s\n" "$*" | \ printf "%s\n" "$*" | \
@@ -80,8 +82,6 @@ e()
printf "%s %s\n" "$1" "$es2" 1>&2 printf "%s %s\n" "$1" "$es2" 1>&2
} }
# return 0 if project is single-tree, otherwise 1
# e.g. coreboot is multi-tree, so 1
singletree() singletree()
{ {
( fx_ "eval exit 1 && err" find "config/$1/"*/ -type f \ ( fx_ "eval exit 1 && err" find "config/$1/"*/ -type f \
@@ -114,12 +114,6 @@ unpad_one_byte()
x_ mv "$unpaddedfile" "$1" x_ mv "$unpaddedfile" "$1"
} }
build_sbase()
{
[ ! -f "$sha512sum" ] && \
x_ make -C "$xbmkpwd/util/sbase"; :
}
remkdir() remkdir()
{ {
x_ rm -Rf "$@" x_ rm -Rf "$@"
@@ -150,8 +144,7 @@ dx_()
{ {
xchk dx_ "$@" xchk dx_ "$@"
[ ! -f "$2" ] && \ [ ! -f "$2" ] && return 0
return 0
while read -r fx; do while read -r fx; do
$1 "$fx" || return 1; : $1 "$fx" || return 1; :
+4 -21
View File
@@ -2,23 +2,13 @@
# Copyright (c) 2023-2026 Leah Rowe <leah@libreboot.org> # Copyright (c) 2023-2026 Leah Rowe <leah@libreboot.org>
eval "`newvar reldest reldir relmode rsrc vdir`" eval "`newvar reldest reldir rsrc vdir`"
release() release()
{ {
export XBMK_RELEASE="y" export XBMK_RELEASE="y"
reldir="release" reldir="release"
while getopts m: option
do
[ -z "$OPTARG" ] && \
err "empty argument not allowed" "release" "$@"
[ "$option" != "m" ] && \
err "invalid option '-$option'" "release" "$@"
relmode="$OPTARG"
done
reldest="$reldir/$version" reldest="$reldir/$version"
[ -e "$reldest" ] && \ [ -e "$reldest" ] && \
err "already exists: \"$reldest\"" "release" "$@" err "already exists: \"$reldest\"" "release" "$@"
@@ -32,10 +22,7 @@ release()
x_ git clone . "$rsrc" x_ git clone . "$rsrc"
update_xbmkver "$rsrc" update_xbmkver "$rsrc"
prep_release src forx 'prep_release %s' src tarball bin
prep_release tarball
[ "$relmode" != "src" ] && \
prep_release bin
x_ rm -Rf "$rsrc" x_ rm -Rf "$rsrc"
@@ -66,8 +53,7 @@ prep_release_src()
x_ ./mk -f x_ ./mk -f
fx_ "x_ rm -Rf" x_ find . -name ".git" forx 'fx_ \"x_ rm -Rf\" x_ find . -name \".%s\"' git gitmodules
fx_ "x_ rm -Rf" x_ find . -name ".gitmodules"
( fx_ nuke x_ find config -type f -name "nuke.list" ) || \ ( fx_ nuke x_ find config -type f -name "nuke.list" ) || \
err "can't prune project files" "prep_release_src" "$@"; : err "can't prune project files" "prep_release_src" "$@"; :
@@ -104,10 +90,7 @@ prep_release_bin()
{ {
x_ ./mk -d coreboot x_ ./mk -d coreboot
x_ ./mk -b coreboot forx 'x_ ./mk -b' coreboot pico-serprog stm32-vserprog pcsx-redux
x_ ./mk -b pico-serprog
x_ ./mk -b stm32-vserprog
x_ ./mk -b pcsx-redux
fx_ mkrom_tarball x_ find bin -mindepth 1 -maxdepth 1 \ fx_ mkrom_tarball x_ find bin -mindepth 1 -maxdepth 1 \
-type d -name "serprog_*" -type d -name "serprog_*"
+59 -71
View File
@@ -9,15 +9,25 @@
set -u -e set -u -e
eval "`printf "LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE \
LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE \
LC_MEASUREMENT LC_IDENTIFICATION LC_ALL\n" | \
awk '{ for (i=1; i<=NF; i++) $i = "export " $i "=C.UTF-8;"; print }'`"
findpath() findpath()
{ {
eval "$(printf '%s\n' "$@" | awk '{printf "readlink -f \"%s\" \ forx 'readlink -f \"%s\" 2>/dev/null || \
2>/dev/null || realpath \"%s\" 2>/dev/null || return 1;",$0,$0}')" x_ realpath \"%s\" 2>/dev/null' "$@"
}
printf "%s\n" "%s" | grep -o "%s" 1>/dev/null || exit 1 # safety (-o check)
forx()
{
awkarg="{printf \"${1-};\""
shift 1 2>/dev/null || :
scount="$(printf "%s\n" "$awkarg" | grep -o "%s" | wc -l)"
while [ $scount -gt 0 ]; do
awkarg="$awkarg,\$0"
scount="$(expr $scount - 1 || :)"
done
eval "$(printf '%s\n' "$@" | awk "$awkarg}")"
} }
x_() x_()
@@ -33,6 +43,10 @@ err()
exit 1 exit 1
} }
forx 'export %s=\"C.UTF-8\"' LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME \
LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS \
LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION LC_ALL
( (
mk="$0" mk="$0"
[ "${mk##*/}" != "$mk" ] || \ [ "${mk##*/}" != "$mk" ] || \
@@ -62,25 +76,17 @@ shift 1 2>/dev/null || :
eval "$(printf "version release download inject\n" | awk '{ for (i=1; i<=NF; \ eval "$(printf "version release download inject\n" | awk '{ for (i=1; i<=NF; \
i++) $i = "[ \""$i"\" = \"$_f\" ] && x_ "$i" \"$@\" && exit 0;"; print }')" i++) $i = "[ \""$i"\" = \"$_f\" ] && x_ "$i" \"$@\" && exit 0;"; print }')"
# flag e.g. "$mk" -b <-- mkflag would be "b"
flag=""
# macros, overridden depending on the flag # macros, overridden depending on the flag
# : means false if_not_do_make=":" # : means false
if_do_make=""
if_not_do_make=":"
if_make_config=":" if_make_config=":"
if_not_make_config=""
if_build=":" # can be false even if make is true if_build=":" # can be false even if make is true
if_not_build=""
if_dry_build=":" if_dry_build=":"
if_not_dry_build=""
if_single_tree=":" if_single_tree=":"
eval "`newvar if_do_make if_not_make_config if_not_build if_not_dry_build`"
eval "`newvar configureargs autogenargs badhash badtghash bootstrapargs \ eval "`newvar configureargs autogenargs badhash badtghash bootstrapargs \
build_depend buildtype cleanargs cmakedir cmd defconfig dest_dir elfdir \ build_depend buildtype cleanargs cmakedir cmd defconfig dest_dir elfdir \
forcepull listfile makeargs mdir mkhelper mkhelpercfg mode postmake \ flag forcepull listfile makeargs mdir mkhelper mkhelpercfg mode postmake \
premake project release rev srcdir target target_dir tree xarch xgcctree \ premake project release rev srcdir target target_dir tree xarch xgcctree \
xlang`" xlang`"
@@ -105,9 +111,8 @@ main()
if_not_dry_build=":" if_not_dry_build=":"
;; ;;
-f|-F) # download source code for a project -f|-F) # download source code for a project
eval "`newvar if_not_do_make if_dry_build`"
if_do_make=":" if_do_make=":"
if_not_do_make=""
if_dry_build=""
if_not_dry_build=":" if_not_dry_build=":"
[ "$flag" = "-F" ] && \ [ "$flag" = "-F" ] && \
forcepull="y"; : # never skip git fetch/pull forcepull="y"; : # never skip git fetch/pull
@@ -166,10 +171,10 @@ main()
fi fi
if singletree "$project"; then if singletree "$project"; then
cmd="single_tree_build" cmd="mk_single_tree"
if_single_tree="" if_single_tree=""
else else
cmd="multi_tree_build" cmd="mk_multi_tree"
fi fi
remkdir "${tmpgit%/*}" remkdir "${tmpgit%/*}"
@@ -179,27 +184,24 @@ main()
$cmd "$@" $cmd "$@"
} }
single_tree_build() mk_single_tree()
{ {
configure_project "$configdir" || \ configure_project "$configdir" || \
return 0 return 0
[ ! -f "$listfile" ] || \ [ ! -f "$listfile" ] || $if_not_dry_build \
$if_not_dry_build elfcheck || \ elfcheck || return 0
return 0
run_make_command && \ run_make_command && $if_build $if_not_dry_build \
$if_build $if_not_dry_build \
copy_elf; : copy_elf; :
} }
multi_tree_build() mk_multi_tree()
{ {
[ ! -d "$configdir" ] && \ [ ! -d "$configdir" ] && err "missing '$configdir'" mk_multi_tree "$@"
err "dir '$configdir' doesn't exist" multi_tree_build "$@" [ $# -lt 1 ] && fx_ mk_multi_tree find "$configdir" \
[ $# -lt 1 ] && \
fx_ multi_tree_build find "$configdir" \
-mindepth 1 -maxdepth 1 -type d -mindepth 1 -maxdepth 1 -type d
[ $# -gt 0 ] && for x in "$@" [ $# -gt 0 ] && for x in "$@"
do do
unset CROSS_COMPILE unset CROSS_COMPILE
@@ -231,8 +233,7 @@ handle_defconfig()
configure_project "$target_dir" || \ configure_project "$target_dir" || \
return 0 return 0
[ -z "$tree" ] && \ [ -z "$tree" ] && err "$configdir: 'tree' unset" handle_defconfig "$@"
err "$configdir: 'tree' not set" "handle_defconfig" "$@"
srcdir="src/$project/$tree" srcdir="src/$project/$tree"
@@ -242,18 +243,16 @@ handle_defconfig()
$if_not_dry_build \ $if_not_dry_build \
continue continue
$if_not_dry_build \ $if_not_dry_build eval \
eval defconfig="$y" defconfig="$y"
$if_build \ $if_build \
prep_multi_tree_build || \ prep_mk_multi_tree || continue
continue
handle_makefile handle_makefile
$if_build \ $if_build $if_not_dry_build \
$if_not_dry_build \ copy_elf; :
copy_elf; :
done; : done; :
} }
@@ -265,8 +264,7 @@ configure_project()
build_depend buildtype cleanargs makeargs mkhelper postmake \ build_depend buildtype cleanargs makeargs mkhelper postmake \
premake release xarch xgcctree xlang`" premake release xarch xgcctree xlang`"
[ ! -f "$_tcfg" ] && \ [ ! -f "$_tcfg" ] && buildtype="auto"
buildtype="auto"
# globally initialise all variables for a source tree / target: # globally initialise all variables for a source tree / target:
if e "$datadir/mkhelper.cfg" f; then if e "$datadir/mkhelper.cfg" f; then
@@ -276,16 +274,15 @@ configure_project()
fi fi
# override target/tree specific variables from per-target config: # override target/tree specific variables from per-target config:
while e "$_tcfg" f || [ "$cmd" != "single_tree_build" ] while e "$_tcfg" f || [ "$cmd" != "mk_single_tree" ]
do do
printf "Loading %s config: %s\n" "$project" "$_tcfg" printf "Loading %s config: %s\n" "$project" "$_tcfg"
eval "`newvar rev tree`" eval "`newvar rev tree`"
. "$_tcfg" || \ . "$_tcfg" || err "Can't read '$_tcfg'" configure_project "$@"
err "Can't read '$_tcfg'" "configure_project" "$@"
$if_dry_build \ $if_dry_build eval \
eval build_depend="" build_depend=""
$if_single_tree \ $if_single_tree \
break break
@@ -299,22 +296,19 @@ configure_project()
[ "$XBMK_RELEASE" = "y" ] && [ "$release" = "n" ] && \ [ "$XBMK_RELEASE" = "y" ] && [ "$release" = "n" ] && \
return 1 return 1
[ -n "$buildtype" ] && \ [ -n "$buildtype" ] && $if_make_config \
$if_make_config \ return 1
return 1
$if_build \ $if_build $if_not_dry_build \
$if_not_dry_build \ build_dependencies
build_dependencies
mdir="$xbmkpwd/config/submodule/$project" mdir="$xbmkpwd/config/submodule/$project"
[ -n "$tree" ] && \ [ -n "$tree" ] && mdir="$mdir/$tree"
mdir="$mdir/$tree"
if [ ! -f "CHANGELOG" ]; then if [ ! -f "CHANGELOG" ]; then
delete_old_project_files delete_old_project_files
$if_not_do_make \ $if_not_do_make \
${cmd%_build}_fetch ${cmd#mk_}_fetch
fi fi
$if_not_do_make \ $if_not_do_make \
return 1 return 1
@@ -398,7 +392,7 @@ project_up_to_date()
"$@" "$@"
fi fi
build_sbase eval "$build_sbase"
fx_ "x_ util/sbase/sha512sum" find "$@" -type f -not -path \ fx_ "x_ util/sbase/sha512sum" find "$@" -type f -not -path \
"*/.git*/*" | awk '{print $1}' > "$xbtmp/tmp.hash" || \ "*/.git*/*" | awk '{print $1}' > "$xbtmp/tmp.hash" || \
err "!h $project $hashdir" \ err "!h $project $hashdir" \
@@ -420,7 +414,7 @@ project_up_to_date()
eval "[ \"\$$badhashvar\" = \"y\" ] && return 1"; : eval "[ \"\$$badhashvar\" = \"y\" ] && return 1"; :
} }
prep_multi_tree_build() prep_mk_multi_tree()
{ {
dest_dir="$elfdir/$tree/$target/${defconfig#"$target_dir/config/"}" dest_dir="$elfdir/$tree/$target/${defconfig#"$target_dir/config/"}"
@@ -441,8 +435,7 @@ check_xgcc()
cbelfdir="elf${cbdir#src}" cbelfdir="elf${cbdir#src}"
xfix="${1%-*}" xfix="${1%-*}"
[ "$xfix" = "x86_64" ] && \ [ "$xfix" = "x86_64" ] && xfix="x64"
xfix="x64"
xgccfile="$cbelfdir/xgcc_${xfix}_was_compiled" xgccfile="$cbelfdir/xgcc_${xfix}_was_compiled"
xgccargs="crossgcc-$xfix UPDATED_SUBMODULES=1 CPUS=$XBMK_THREADS" xgccargs="crossgcc-$xfix UPDATED_SUBMODULES=1 CPUS=$XBMK_THREADS"
@@ -458,10 +451,8 @@ check_xgcc()
[ -n "$xlang" ] && \ [ -n "$xlang" ] && \
export BUILD_LANGUAGES="$xlang" export BUILD_LANGUAGES="$xlang"
[ -f "$xgccfile" ] && \ [ -f "$xgccfile" ] && return 0 # skip (build already exists)
return 0 # build exists already, so skip building
# it sometimes fails for like, no reason
make -C "$cbdir" $xgccargs || x_ make -C "$cbdir" $xgccargs make -C "$cbdir" $xgccargs || x_ make -C "$cbdir" $xgccargs
x_ touch "$xgccfile" # prevent unnecessary re-build operations x_ touch "$xgccfile" # prevent unnecessary re-build operations
@@ -470,15 +461,13 @@ check_xgcc()
elfcheck() elfcheck()
{ {
# TODO: *STILL* very hacky check. do it properly (based on build.list) # TODO: *STILL* very hacky check. do it properly (based on build.list)
( fx_ "eval exit 1 && err" find "$dest_dir" -type f ) || return 1; : ( fx_ "eval exit 1 && err" find "$dest_dir" -type f ) || return 1; :
} }
handle_makefile() handle_makefile()
{ {
check_makefile "$srcdir" && \ check_makefile "$srcdir" && $if_not_dry_build \
$if_not_dry_build \ x_ make -C "$srcdir" clean $cleanargs
x_ make -C "$srcdir" clean $cleanargs
[ -f "$defconfig" ] && \ [ -f "$defconfig" ] && \
x_ cp "$defconfig" "$srcdir/.config" x_ cp "$defconfig" "$srcdir/.config"
@@ -532,8 +521,7 @@ check_autoconf()
check_makefile() check_makefile()
{ {
[ ! -f "$1/Makefile" ] && [ ! -f "$1/makefile" ] && \ [ ! -f "$1/Makefile" ] && [ ! -f "$1/makefile" ] && \
[ ! -f "$1/GNUmakefile" ] && \ [ ! -f "$1/GNUmakefile" ] && return 1; :
return 1; :
} }
copy_elf() copy_elf()