diff options
-rw-r--r-- | include/init.sh | 127 | ||||
-rw-r--r-- | include/lib.sh | 132 | ||||
-rwxr-xr-x | mk | 1 |
3 files changed, 133 insertions, 127 deletions
diff --git a/include/init.sh b/include/init.sh index 55708b0f..b8c3cb35 100644 --- a/include/init.sh +++ b/include/init.sh @@ -222,131 +222,4 @@ x_() [ $# -lt 1 ] || "$@" || $err "Unhandled error for: $(echo "$@")"; : } -remkdir() -{ - rm -Rf "$1" || $err "remkdir: !rm -Rf \"$1\"" - mkdir -p "$1" || $err "remkdir: !mkdir -p \"$1\"" -} - -mkrom_tarball() -{ - printf "%s\n" "$version" > "$1/.version" || $err "$1 !version" - printf "%s\n" "$versiondate" > "$1/.versiondate" || $err "$1 !vdate" - - mktarball "$1" "${1%/*}/${relname}_${1##*/}.tar.xz" - x_ rm -Rf "$1" -} - -mktarball() -{ - [ "${2%/*}" = "$2" ] || x_ mkdir -p "${2%/*}" - x_ tar -c "$1" | xz -T$XBMK_THREADS -9e > "$2" || $err "mktarball2, $1" -} - -mksha512sum() -{ - ( - [ "${1%/*}" != "$1" ] && x_ cd "${1%/*}" - sha512sum ./"${1##*/}" >> "$2" || $err "!sha512sum \"$1\" > \"$2\"" - ) || $err "failed to create tarball checksum" -} - -rmgit() -{ - ( - cd "$1" || $err "!cd gitrepo $1" - find . -name ".git" -exec rm -Rf {} + || $err "!rm .git $1" - find . -name ".gitmodules" -exec rm -Rf {} + || $err "!rm .gitmod $1" - ) || $err "Cannot remove .git/.gitmodules in $1" -} - -# return 0 if project is single-tree, otherwise 1 -# e.g. coreboot is multi-tree, so 1 -singletree() -{ - for targetfile in "config/${1}/"*/target.cfg; do - [ -e "$targetfile" ] && [ -f "$targetfile" ] && return 1; : - done; : -} - -# can grab from the internet, or copy locally. -# if copying locally, it can only copy a file. -xbmkget() -{ - _dlop="curl" && [ $# -gt 4 ] && _dlop="$5" - cached="$XBMK_CACHE/file/$4" - dl_fail="n" # 1 url, 2 url backup, 3 destination, 4 checksum - vendor_checksum "$4" "$cached" 2>/dev/null && dl_fail="y" - [ "$dl_fail" = "n" ] && e "$3" f && return 0 - x_ mkdir -p "${3%/*}" "$XBMK_CACHE/file" - for url in "$1" "$2"; do - [ "$dl_fail" = "n" ] && break - [ -z "$url" ] && continue - rm -f "$cached" || $err "!rm -f '$cached'" - if [ "$_dlop" = "curl" ]; then - curl --location --retry 3 -A "$_ua" "$url" \ - -o "$cached" || wget --tries 3 -U "$_ua" "$url" \ - -O "$cached" || continue - elif [ "$_dlop" = "copy" ]; then - [ -L "$url" ] && \ - printf "dl %s %s %s %s: '%s' is a symlink\n" \ - "$1" "$2" "$3" "$4" "$url" 1>&2 && continue - [ ! -f "$url" ] && \ - printf "dl %s %s %s %s: '%s' not a file\n" \ - "$1" "$2" "$3" "$4" "$url" 1>&2 && continue - cp "$url" "$cached" || continue - else - $err "$1 $2 $3 $4: Unsupported dlop type: '$_dlop'" - fi - vendor_checksum "$4" "$cached" || dl_fail="n" - done - [ "$dl_fail" = "y" ] && $err "$1 $2 $3 $4: not downloaded" - [ "$cached" = "$3" ] || x_ cp "$cached" "$3"; : -} - -vendor_checksum() -{ - [ "$(sha512sum "$2" | awk '{print $1}')" != "$1" ] || return 1 - printf "Bad checksum for file: %s\n" "$2" 1>&2; rm -f "$2" || :; : -} - -e() -{ - es_t="e" && [ $# -gt 1 ] && es_t="$2" - es2="already exists" - estr="[ -$es_t \"\$1\" ] || return 1" - [ $# -gt 2 ] && estr="[ -$es_t \"\$1\" ] && return 1" && es2="missing" - - eval "$estr" - printf "%s %s\n" "$1" "$es2" 1>&2 -} - -mk() -{ - mk_flag="$1" || $err "No argument given" - shift 1 && for mk_arg in "$@"; do - x_ ./mk $mk_flag $mk_arg - done; : -} - -check_defconfig() -{ - [ -d "$1" ] || $err "Target '$1' not defined." - for x in "$1"/config/*; do - [ -f "$x" ] && printf "%s\n" "$x" && return 1 - done; : -} - -cbfs() -{ - ccmd="add-payload" && [ $# -gt 3 ] && [ $# -lt 5 ] && ccmd="add" - lzma="-c lzma" && [ $# -gt 3 ] && [ $# -lt 5 ] && lzma="-t $4" - - [ $# -gt 4 ] && [ "$5" = "0x1110000" ] && \ - ccmd="add-flat-binary" && \ - lzma="-c lzma -l 0x1110000 -e 0x1110000" - - x_ "$cbfstool" "$1" $ccmd -f "$2" -n "$3" $lzma -} - xbmk_init "$@" diff --git a/include/lib.sh b/include/lib.sh new file mode 100644 index 00000000..34d8b8b9 --- /dev/null +++ b/include/lib.sh @@ -0,0 +1,132 @@ +# SPDX-License-Identifier: GPL-3.0-only +# Copyright (c) 2022 Caleb La Grange <thonkpeasant@protonmail.com> +# Copyright (c) 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com> +# Copyright (c) 2020-2025 Leah Rowe <leah@libreboot.org> +# Copyright (c) 2025 Alper Nebi Yasak <alpernebiyasak@gmail.com> + +remkdir() +{ + rm -Rf "$1" || $err "remkdir: !rm -Rf \"$1\"" + mkdir -p "$1" || $err "remkdir: !mkdir -p \"$1\"" +} + +mkrom_tarball() +{ + printf "%s\n" "$version" > "$1/.version" || $err "$1 !version" + printf "%s\n" "$versiondate" > "$1/.versiondate" || $err "$1 !vdate" + + mktarball "$1" "${1%/*}/${relname}_${1##*/}.tar.xz" + x_ rm -Rf "$1" +} + +mktarball() +{ + [ "${2%/*}" = "$2" ] || x_ mkdir -p "${2%/*}" + x_ tar -c "$1" | xz -T$XBMK_THREADS -9e > "$2" || $err "mktarball2, $1" +} + +mksha512sum() +{ + ( + [ "${1%/*}" != "$1" ] && x_ cd "${1%/*}" + sha512sum ./"${1##*/}" >> "$2" || $err "!sha512sum \"$1\" > \"$2\"" + ) || $err "failed to create tarball checksum" +} + +rmgit() +{ + ( + cd "$1" || $err "!cd gitrepo $1" + find . -name ".git" -exec rm -Rf {} + || $err "!rm .git $1" + find . -name ".gitmodules" -exec rm -Rf {} + || $err "!rm .gitmod $1" + ) || $err "Cannot remove .git/.gitmodules in $1" +} + +# return 0 if project is single-tree, otherwise 1 +# e.g. coreboot is multi-tree, so 1 +singletree() +{ + for targetfile in "config/${1}/"*/target.cfg; do + [ -e "$targetfile" ] && [ -f "$targetfile" ] && return 1; : + done; : +} + +# can grab from the internet, or copy locally. +# if copying locally, it can only copy a file. +xbmkget() +{ + _dlop="curl" && [ $# -gt 4 ] && _dlop="$5" + cached="$XBMK_CACHE/file/$4" + dl_fail="n" # 1 url, 2 url backup, 3 destination, 4 checksum + vendor_checksum "$4" "$cached" 2>/dev/null && dl_fail="y" + [ "$dl_fail" = "n" ] && e "$3" f && return 0 + x_ mkdir -p "${3%/*}" "$XBMK_CACHE/file" + for url in "$1" "$2"; do + [ "$dl_fail" = "n" ] && break + [ -z "$url" ] && continue + rm -f "$cached" || $err "!rm -f '$cached'" + if [ "$_dlop" = "curl" ]; then + curl --location --retry 3 -A "$_ua" "$url" \ + -o "$cached" || wget --tries 3 -U "$_ua" "$url" \ + -O "$cached" || continue + elif [ "$_dlop" = "copy" ]; then + [ -L "$url" ] && \ + printf "dl %s %s %s %s: '%s' is a symlink\n" \ + "$1" "$2" "$3" "$4" "$url" 1>&2 && continue + [ ! -f "$url" ] && \ + printf "dl %s %s %s %s: '%s' not a file\n" \ + "$1" "$2" "$3" "$4" "$url" 1>&2 && continue + cp "$url" "$cached" || continue + else + $err "$1 $2 $3 $4: Unsupported dlop type: '$_dlop'" + fi + vendor_checksum "$4" "$cached" || dl_fail="n" + done + [ "$dl_fail" = "y" ] && $err "$1 $2 $3 $4: not downloaded" + [ "$cached" = "$3" ] || x_ cp "$cached" "$3"; : +} + +vendor_checksum() +{ + [ "$(sha512sum "$2" | awk '{print $1}')" != "$1" ] || return 1 + printf "Bad checksum for file: %s\n" "$2" 1>&2; rm -f "$2" || :; : +} + +e() +{ + es_t="e" && [ $# -gt 1 ] && es_t="$2" + es2="already exists" + estr="[ -$es_t \"\$1\" ] || return 1" + [ $# -gt 2 ] && estr="[ -$es_t \"\$1\" ] && return 1" && es2="missing" + + eval "$estr" + printf "%s %s\n" "$1" "$es2" 1>&2 +} + +mk() +{ + mk_flag="$1" || $err "No argument given" + shift 1 && for mk_arg in "$@"; do + x_ ./mk $mk_flag $mk_arg + done; : +} + +check_defconfig() +{ + [ -d "$1" ] || $err "Target '$1' not defined." + for x in "$1"/config/*; do + [ -f "$x" ] && printf "%s\n" "$x" && return 1 + done; : +} + +cbfs() +{ + ccmd="add-payload" && [ $# -gt 3 ] && [ $# -lt 5 ] && ccmd="add" + lzma="-c lzma" && [ $# -gt 3 ] && [ $# -lt 5 ] && lzma="-t $4" + + [ $# -gt 4 ] && [ "$5" = "0x1110000" ] && \ + ccmd="add-flat-binary" && \ + lzma="-c lzma -l 0x1110000 -e 0x1110000" + + x_ "$cbfstool" "$1" $ccmd -f "$2" -n "$3" $lzma +} @@ -13,6 +13,7 @@ if [ "./${0##*/}" != "${0}" ] || [ ! -f "mk" ] || [ -L "mk" ]; then fi . "include/init.sh" +. "include/lib.sh" . "include/vendor.sh" . "include/mrc.sh" |