diff options
Diffstat (limited to 'include')
-rw-r--r--[-rwxr-xr-x] | include/git.sh | 11 | ||||
-rw-r--r--[-rwxr-xr-x] | include/lib.sh | 3 | ||||
-rw-r--r--[-rwxr-xr-x] | include/mrc.sh | 0 | ||||
-rw-r--r-- | include/rom.sh | 147 | ||||
-rw-r--r--[-rwxr-xr-x] | include/vendor.sh | 24 |
5 files changed, 163 insertions, 22 deletions
diff --git a/include/git.sh b/include/git.sh index 70ec087c..58f62ef3 100755..100644 --- a/include/git.sh +++ b/include/git.sh @@ -12,7 +12,7 @@ fetch_targets() e "src/$project/$tree" d && return 0 printf "Creating %s tree %s\n" "$project" "$tree" - git_prep "$loc" "$loc" "$PWD/$cfgsdir/$tree/patches" \ + git_prep "$loc" "$loc" "$PWD/$configdir/$tree/patches" \ "${loc%/*}/$tree" u; nuke "$project/$tree" "$project/$tree" } @@ -110,11 +110,10 @@ tmpclone() git_am_patches() { - for _patch in "$2/"*; do - [ -L "$_patch" ] || [ ! -f "$_patch" ] || git -C "$1" am \ - "$_patch" || $err "$1 $2: !git am $_patch" - [ -L "$_patch" ] || [ ! -d "$_patch" ] || \ - git_am_patches "$1" "$_patch"; continue + for p in "$2/"*; do + [ -L "$p" ] && continue; [ -e "$p" ] || continue + [ -d "$p" ] && git_am_patches "$1" "$p" && continue + [ ! -f "$p" ] || git -C "$1" am "$p" || $err "$1 $2: !am $p" done; return 0 } diff --git a/include/lib.sh b/include/lib.sh index e6a998d2..2fb97c44 100755..100644 --- a/include/lib.sh +++ b/include/lib.sh @@ -10,7 +10,6 @@ _ua="Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0" kbnotice="Insert a .gkb file from config/data/grub/keymap/ as keymap.gkb \ if you want a custom keymap in GRUB; use cbfstool from elf/cbfstool." -cbelfdir="elf/.coreboot_nopayload_DO_NOT_FLASH" ifdtool="elf/ifdtool/default/ifdtool" cbfstool="elf/cbfstool/default/cbfstool" tmpgit="$PWD/tmp/gitclone" @@ -38,7 +37,7 @@ chkvars() } eval `setvars "" _nogit board xbmk_parent versiondate projectsite projectname \ - aur_notice cfgsdir datadir version relname` + aur_notice configdir datadir version relname` for fv in projectname projectsite version versiondate; do eval "[ ! -f "$fv" ] || read -r $fv < \"$fv\" || :" diff --git a/include/mrc.sh b/include/mrc.sh index 2e00d9f9..2e00d9f9 100755..100644 --- a/include/mrc.sh +++ b/include/mrc.sh diff --git a/include/rom.sh b/include/rom.sh new file mode 100644 index 00000000..574b1b6c --- /dev/null +++ b/include/rom.sh @@ -0,0 +1,147 @@ +#!/usr/bin/env sh +# SPDX-License-Identifier: GPL-3.0-or-later +# Copyright (c) 2014-2016,2020-2021,2023-2024 Leah Rowe <leah@libreboot.org> +# Copyright (c) 2021-2022 Ferass El Hafidi <vitali64pmemail@protonmail.com> +# Copyright (c) 2022 Caleb La Grange <thonkpeasant@protonmail.com> +# Copyright (c) 2022-2023 Alper Nebi Yasak <alpernebiyasak@gmail.com> +# Copyright (c) 2023 Riku Viitanen <riku.viitanen@protonmail.com> + +mkserprog() +{ + [ "$_f" = "-d" ] && return 0 # dry run + basename -as .h "$serdir/"*.h > "$TMPDIR/ser" || $err "!mk $1 $TMPDIR" + + while read -r sertarget; do + [ "$1" = "rp2040" ] && x_ cmake -DPICO_BOARD="$sertarget" \ + -DPICO_SDK_PATH="$picosdk" -B "$sersrc/build" "$sersrc" \ + && x_ cmake --build "$sersrc/build" + [ "$1" = "stm32" ] && x_ make -C "$sersrc" \ + libopencm3-just-make BOARD=$sertarget && x_ make -C \ + "$sersrc" BOARD=$sertarget; x_ mkdir -p "bin/serprog_$1" + x_ mv "$serx" "bin/serprog_$1/serprog_$sertarget.${serx##*.}" + done < "$TMPDIR/ser" + + [ "$XBMK_RELEASE" = "y" ] && mkrom_tarball "bin/serprog_$1"; return 0 +} + +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" \ + -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" \ + "/background.png=$grubdata/background/background1280x800.png" || \ + $err "$tree: cannot build grub.elf"; return 0 +} + +mkvendorfiles() +{ + check_coreboot_utils "$tree" + printf "%s\n" "${version%%-*}" > "$srcdir/.coreboot-version" || \ + $err "!mk $srcdir .coreboot-version" + [ -z "$mode" ] && [ "$target" != "$tree" ] && \ + x_ ./vendor download $target; return 0 +} + +check_coreboot_utils() +{ + for util in cbfstool ifdtool; do + e "elf/$util/$1/$util" f && continue + + utilelfdir="elf/$util/$1" + utilsrcdir="src/coreboot/$1/util/$util" + + utilmode="" && [ -n "$mode" ] && utilmode="clean" + x_ make -C "$utilsrcdir" $utilmode -j$XBMK_THREADS $makeargs + [ -z "$mode" ] && [ ! -f "$utilelfdir/$util" ] && \ + x_ mkdir -p "$utilelfdir" && \ + x_ cp "$utilsrcdir/$util" "elf/$util/$1" + [ -z "$mode" ] || x_ rm -Rf "$utilelfdir"; continue + done; return 0 +} + +mkcorebootbin() +{ + [ "$target" = "$tree" ] && return 0 + + tmprom="$srcdir/build/coreboot.rom" + initmode="${defconfig##*/}"; displaymode="${initmode##*_}" + initmode="${initmode%%_*}" + [ -n "$displaymode" ] && displaymode="_$displaymode" + cbfstool="elf/cbfstool/$tree/cbfstool" + + [ -n "$uboot_config" ] || uboot_config="default" + [ "$payload_uboot" = "y" ] || payload_seabios="y" + [ "$payload_grub" = "y" ] && payload_seabios="y" + [ "$payload_seabios" = "y" ] && [ "$payload_uboot" = "y" ] && \ + $dry $err "$target: U-Boot and SeaBIOS/GRUB are both enabled." + + [ -z "$grub_scan_disk" ] && grub_scan_disk="nvme ahci ata" + + [ -n "$grubtree" ] || grubtree="default" + grubelf="elf/grub/$grubtree/payload/grub.elf" + + [ "$payload_memtest" = "y" ] || payload_memtest="n" + [ "$(uname -m)" = "x86_64" ] || payload_memtest="n" + + [ "$payload_seabios" = "y" ] && pname="seabios" && $dry add_seabios + [ "$payload_uboot" = "y" ] && pname="uboot" && $dry add_uboot + + newrom="bin/$target/${pname}_${target}_$initmode$displaymode.rom" + $dry x_ mkdir -p "${newrom%/*}"; $dry x_ mv "$tmprom" "$newrom" + + [ "$XBMK_RELEASE" = "y" ] || return 0 + $dry mksha512sum "$newrom" "vendorhashes"; $dry ./vendor inject \ + -r "$newrom" -b "$target" -n nuke || $err "!nuke $newrom" +} + +add_seabios() +{ + _seabioself="elf/seabios/default/$initmode/bios.bin.elf" + + cbfs "$tmprom" "$_seabioself" "fallback/payload" + x_ "$cbfstool" "$tmprom" add-int -i 3000 -n etc/ps2-keyboard-spinup + + _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" ] && \ + cbfs "$tmprom" "$seavgabiosrom" vgaroms/seavgabios.bin raw + + [ "$payload_memtest" = "y" ] && cbfs "$tmprom" \ + "elf/memtest86plus/memtest.bin" img/memtest + + [ "$payload_grub" = "y" ] && pname="seagrub" && add_grub; return 0 +} + +add_grub() +{ + cbfs "$tmprom" "$grubelf" "img/grub2" + printf "set grub_scan_disk=\"%s\"\n" "$grub_scan_disk" \ + > "$TMPDIR/tmpcfg" || $err "$target: !insert scandisk" + cbfs "$tmprom" "$TMPDIR/tmpcfg" scan.cfg raw + cbfs "$tmprom" "$grubdata/bootorder" bootorder raw +} + +add_uboot() +{ + ubdir="elf/u-boot/$target/$uboot_config" + ubootelf="$ubdir/u-boot.elf" && [ ! -f "$ubootelf" ] && \ + ubootelf="$ubdir/u-boot" + [ -f "$ubootelf" ] || $err "cb/$target: Can't find u-boot" + + cbfs "$tmprom" "$ubootelf" "fallback/payload" +} + +mkcoreboottar() +{ + [ "$target" = "$tree" ] && return 0; [ "$XBMK_RELEASE" = "y" ] && \ + [ "$release" != "n" ] && $dry mkrom_tarball "bin/$target"; return 0 +} diff --git a/include/vendor.sh b/include/vendor.sh index 2c5f7c74..b8fef9c5 100755..100644 --- a/include/vendor.sh +++ b/include/vendor.sh @@ -56,7 +56,7 @@ bootstrap() [ -d "${kbc1126_ec_dump%/*}" ] && x_ make -C "$cbdir/util/kbc1126" [ -n "$MRC_refcode_cbtree" ] && \ cbfstoolref="elf/cbfstool/$MRC_refcode_cbtree/cbfstool" && \ - x_ ./update trees -b coreboot utils $MRC_refcode_cbtree; return 0 + x_ ./update trees -d coreboot $MRC_refcode_cbtree; return 0 } getfiles() @@ -83,23 +83,19 @@ fetch() download "$dl" "$dl_bkup" "$_dl" "$dlsum" x_ rm -Rf "${_dl}_extracted" - mkdirs "$_dest" "extract_$dl_type" || return 0 + e "$_dest" f && return 0 + + mkdir -p "${_dest%/*}" || $err "mkdirs: !mkdir -p ${_dest%/*}" + remkdir "$appdir" + extract_archive "$_dl" "$appdir" || [ "$dl_type" = "e6400vga" ] || \ + $err "mkdirs $_dest $dl_type: !extract" + eval "extract_$dl_type" set -u -e e "$_dest" f missing && $err "!extract_$dl_type"; return 0 } -mkdirs() -{ - e "$1" f && return 1 - - mkdir -p "${1%/*}" || $err "mkdirs: !mkdir -p ${1%/*}" - remkdir "$appdir" - extract_archive "$_dl" "$appdir" || [ "$2" = "extract_e6400vga" ] || \ - $err "mkdirs $1 $2: !extract"; return 0 -} - extract_intel_me() { e "$mecleaner" f not && $err "$cbdir: me_cleaner missing" @@ -252,7 +248,7 @@ detect_board() path="$1" filename="$(basename "$path")" case "$filename" in - grub_*) board="$(echo "$filename" | cut -d '_' -f2-3)" ;; + grub_*|seagrub_*) board="$(echo "$filename" | cut -d '_' -f2-3)" ;; seabios_withgrub_*) board="$(echo "$filename" | cut -d '_' -f3-4)" ;; *.tar.xz) @@ -279,7 +275,7 @@ readcfg() cbfstool="elf/cbfstool/$tree/cbfstool" ifdtool="elf/ifdtool/$tree/ifdtool" - x_ ./update trees -b coreboot utils $tree + x_ ./update trees -d coreboot $tree } patch_release_roms() |