From 2b82b7ca087cc0045c5521449338076445bd1f52 Mon Sep 17 00:00:00 2001 From: Francis Rowe Date: Mon, 14 Mar 2016 15:33:41 -0400 Subject: Add SeaBIOS payload to libreboot --- (limited to 'resources/scripts/helpers/build') diff --git a/resources/scripts/helpers/build/clean/seabios b/resources/scripts/helpers/build/clean/seabios new file mode 100755 index 0000000..8de61d4 --- /dev/null +++ b/resources/scripts/helpers/build/clean/seabios @@ -0,0 +1,36 @@ +#!/bin/bash + +# helper script: clean the dependencies that were built in seabios +# +# Copyright (C) 2015 Francis Rowe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This script assumes that the current working directory is the root +# of libreboot_src or libreboot git + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e + +# clean bucts +# -------------------------------------------------------- + +printf "Cleaning the previous build of seabios\n" + +( +cd "seabios/" +make distclean +) + diff --git a/resources/scripts/helpers/build/config/seabiosmodify b/resources/scripts/helpers/build/config/seabiosmodify new file mode 100755 index 0000000..b31ef12 --- /dev/null +++ b/resources/scripts/helpers/build/config/seabiosmodify @@ -0,0 +1,38 @@ +#!/bin/bash + +# +# helper script: update the seabios config +# +# Copyright (C) 2014, 2015 Francis Rowe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This script assumes that the working directory is the root +# of libreboot_src or git + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e + +( +cd "seabios/" + +if [ -f "../resources/seabios/config/config" ]; then + cp "../resources/seabios/config/config" ".config" +fi + +make menuconfig + +mv ".config" "../resources/seabios/config/config" +) diff --git a/resources/scripts/helpers/build/config/seabiosrommodify b/resources/scripts/helpers/build/config/seabiosrommodify new file mode 100755 index 0000000..e653429 --- /dev/null +++ b/resources/scripts/helpers/build/config/seabiosrommodify @@ -0,0 +1,72 @@ +#!/bin/bash + +# +# helper script: run "make menuconfig" on config(s) to modify them +# +# Copyright (C) 2014, 2015, 2016 Francis Rowe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This script assumes that the working directory is the root +# of libreboot_src or git + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e + +payload="seabios" +configpath="resources/libreboot/config/${payload}" + +hackconfig () { + board="${1}" + cbrevision="$(cat ${configpath}/${board}/cbrevision)" + vbootrevision="$(cat ${configpath}/${board}/vbootrevision)" +( + cd "coreboot/${cbrevision}/${cbrevision}/" + git checkout ${payload}_${board} + ( + cd "3rdparty/vboot/" + git checkout ${payload}_${board} + ) + + printf "Modifying config for %s (%s payload)\n" "${board}" "${payload}" + sleep 2 + + if [ ! -d "../../../${configpath}/${board}/" ]; then + printf "build/config/seabiosmodify WARNING: config '%s' does not exist. Skipping.\n" "${board}" + git checkout master + ( + cd "3rdparty/vboot/" + git checkout master + ) + return + fi + + mv "../../../${configpath}/${board}/config" ".config" + make menuconfig + mv ".config" "../../../${configpath}/${board}/config" + + git checkout master + ( + cd "3rdparty/vboot/" + git checkout master + ) +) +} + +if [ $# -lt 1 ]; then + for config in ${configpath}/*; do hackconfig "${config##*/}"; done +else + for config in "${@}"; do hackconfig "${config}"; done +fi diff --git a/resources/scripts/helpers/build/config/seabiosromreplace b/resources/scripts/helpers/build/config/seabiosromreplace new file mode 100755 index 0000000..ec2359b --- /dev/null +++ b/resources/scripts/helpers/build/config/seabiosromreplace @@ -0,0 +1,63 @@ +#!/bin/bash + +# +# helper script: run "make menuconfig" on config(s) to replace them +# +# Copyright (C) 2014, 2015, 2016 Francis Rowe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This script assumes that the working directory is the root +# of libreboot_src or git + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e + +payload="seabios" +configpath="resources/libreboot/config/${payload}" + +hackconfig () { + board="${1}" + cbrevision="$(cat ${configpath}/${board}/cbrevision)" + vbootrevision="$(cat ${configpath}/${board}/vbootrevision)" +( + cd "coreboot/${cbrevision}/${cbrevision}/" + git checkout ${payload}_${board} + ( + cd "3rdparty/vboot/" + git checkout ${payload}_${board} + ) + + printf "Replacing or creating new config for %s (%s payload)\n" "${board}" "${payload}" + sleep 2 + + make menuconfig + + [ ! -d "../../../${configpath}/${board}/" ] && mkdir -p "../../../${configpath}/${board}/" + mv ".config" "../../../${configpath}/${board}/config" + + git checkout master + ( + cd "3rdparty/vboot/" + git checkout master + ) +) +} + +if [ $# -lt 1 ]; then + for config in ${configpath}/*; do hackconfig "${config##*/}"; done +else + for config in "${@}"; do hackconfig "${config}"; done +fi diff --git a/resources/scripts/helpers/build/config/seabiosromupdate b/resources/scripts/helpers/build/config/seabiosromupdate new file mode 100755 index 0000000..cf090aa --- /dev/null +++ b/resources/scripts/helpers/build/config/seabiosromupdate @@ -0,0 +1,72 @@ +#!/bin/bash + +# +# helper script: run "make oldconfig" on all coreboot config files +# +# Copyright (C) 2014, 2015, 2016 Francis Rowe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This script assumes that the working directory is the root +# of libreboot_src or git + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e + +payload="seabios" +configpath="resources/libreboot/config/${payload}" + +hackconfig () { + board="${1}" + cbrevision="$(cat ${configpath}/${board}/cbrevision)" + vbootrevision="$(cat ${configpath}/${board}/vbootrevision)" +( + cd "coreboot/${cbrevision}/${cbrevision}/" + git checkout ${payload}_${board} + ( + cd "3rdparty/vboot/" + git checkout ${payload}_${board} + ) + + printf "Updating config for %s (%s payload)\n" "${board}" "${payload}" + sleep 2 + + if [ ! -d "../../../${configpath}/${board}/" ]; then + printf "build/config/seabiosupdate WARNING: config '%s' does not exist. Skipping.\n" "${board}" + git checkout master + ( + cd "3rdparty/vboot/" + git checkout master + ) + return + fi + + mv "../../../${configpath}/${board}/config" ".config" + make oldconfig + mv ".config" "../../../${configpath}/${board}/config" + + git checkout master + ( + cd "3rdparty/vboot/" + git checkout master + ) +) +} + +if [ $# -lt 1 ]; then + for config in ${configpath}/*; do hackconfig "${config##*/}"; done +else + for config in "${@}"; do hackconfig "${config}"; done +fi diff --git a/resources/scripts/helpers/build/config/seabiosupdate b/resources/scripts/helpers/build/config/seabiosupdate new file mode 100755 index 0000000..d73d665 --- /dev/null +++ b/resources/scripts/helpers/build/config/seabiosupdate @@ -0,0 +1,36 @@ +#!/bin/bash + +# +# helper script: update the seabios config +# +# Copyright (C) 2014, 2015 Francis Rowe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This script assumes that the working directory is the root +# of libreboot_src or git + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e + +( +cd seabios/ + +if [ -f ../resources/seabios/config/config ]; then + cp ../resources/seabios/config/config .config + make oldconfig + mv .config ../resources/seabios/config/config +fi +) diff --git a/resources/scripts/helpers/build/module/seabios b/resources/scripts/helpers/build/module/seabios new file mode 100755 index 0000000..d869c03 --- /dev/null +++ b/resources/scripts/helpers/build/module/seabios @@ -0,0 +1,49 @@ +#!/bin/bash + +# helper script: builds SeaBIOS source code +# +# Copyright (C) 2015 Francis Rowe +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This script assumes that the working directory is the root +# of libreboot_src or git + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e + +# Build SeaBIOS +# --------------------------------------------------------------------- + +printf "Building SeaBIOS\n" + +cd seabios/ + +cp ../resources/seabios/config/config .config + +# clean it first +[[ -f Makefile ]] && make clean + +# build SeaBIOS +make + +printf "\n\n" + +rm -f .config + +# done. go back to main directory +cd ../ + +# ------------------- DONE ---------------------- diff --git a/resources/scripts/helpers/build/release/src b/resources/scripts/helpers/build/release/src index e3cdbed..94d81d6 100755 --- a/resources/scripts/helpers/build/release/src +++ b/resources/scripts/helpers/build/release/src @@ -82,6 +82,7 @@ rm -Rf "${distdir}/bucts/".git* rm -Rf "${distdir}/flashrom/".git* rm -Rf "${distdir}/grub/".git* rm -Rf "${distdir}/depthcharge/".git* +rm -Rf "${distdir}/seabios/".git* rm -f "${distdir}"/*.vim diff --git a/resources/scripts/helpers/build/roms/withseabios b/resources/scripts/helpers/build/roms/withseabios new file mode 100755 index 0000000..dff1995 --- /dev/null +++ b/resources/scripts/helpers/build/roms/withseabios @@ -0,0 +1,55 @@ +#!/bin/bash + +# +# helper script: build ROM images with SeaBIOS and put them in ./bin/seabios/ +# +# Copyright (C) 2014, 2015, 2016 Francis Rowe +# Copyright (C) 2015 Klemens Nanni +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This script assumes that the working directory is the root +# of git or release archive + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e + +printf "Building ROM images with the SeaBIOS payload\n" + +[ -d bin ] || mkdir "bin/" + +# Build ROM images for supported boards +buildrom() { + board="$1" + if [ -f "resources/libreboot/config/seabios/${board}/config" ]; then + ./build roms withseabios_helper "${board}" + fi +} + +if [ $# -gt 0 ]; then + for board in "${@}"; do + buildrom "${board}" + done +else + for board in resources/libreboot/config/seabios/*; do + buildrom "${board##*/}" + done +fi + +# The SeaBIOS files are no longer needed +rm -f "coreboot/seabios"*.{elf,cfg} +rm -f "coreboot/"*/*/*.{elf,cfg} + +printf "\n\n" diff --git a/resources/scripts/helpers/build/roms/withseabios_helper b/resources/scripts/helpers/build/roms/withseabios_helper new file mode 100755 index 0000000..e39fc22 --- /dev/null +++ b/resources/scripts/helpers/build/roms/withseabios_helper @@ -0,0 +1,125 @@ +#!/bin/bash + +# helper script: create ROM images for a given system, with SeaBIOS +# +# Copyright (C) 2014, 2015, 2016 Francis Rowe +# Copyright (C) 2015 Klemens Nanni +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This script assumes that the working directory is the root +# of git or release archive + +[ "x${DEBUG+set}" = 'xset' ] && set -v +set -u -e +if [ -z ${NPROC+x} ]; then + cores="$(nproc)" +else + case ${NPROC} in + ''|*[!0-9]*) + printf "value '%s' for NPROC is invalid. non-numeric. Exiting.\n" "${NPROC}" + exit 1 + ;; + esac + cores="${NPROC}" +fi + +if (( $# != 1 )); then + printf "Usage: ./buildrom-withseabios boardname\n" + printf "Example: ./buildrom-withseabios x60\n" + printf "You need to specify exactly 1 argument\n" + exit 1 +fi + +boardtarget="${1}" + +if [ -f "version" ]; then + # release archive is being used + version="$(cat version)" +else + # git repo is being used + version="$(git describe --tags HEAD)" +fi + +printf "SeaBIOS Helper script: build ROM images for '%s'\n" "${boardtarget}" + +( +cbrevision="$(cat resources/libreboot/config/seabios/${boardtarget}/cbrevision)" +vbootrevision="$(cat resources/libreboot/config/seabios/${boardtarget}/vbootrevision)" +branchname="seabios_${boardtarget}" + +cd "coreboot/${cbrevision}/${cbrevision}/" +git checkout ${branchname} +( + cd "3rdparty/vboot/" + git checkout ${branchname} +) + +# Make sure to remove these first +rm -f "seabios."*{elf,cfg} + +printf 'libreboot-%s\n' "${version}" > ".coreboot-version" # needed for reproducible builds in coreboot + +# Build ROM images with text-mode and corebootfb modes. + +for romtype in txtmode vesafb +do + if [ "${boardtarget}" = "kgpe-d16" ] || [ "${boardtarget}" = "kcma-d8" ]; then + if [ "${romtype}" = "vesafb" ]; then + printf "Only text-mode is reported to work on KGPE-D16, KCMA-D8\n" + printf "TODO: get tpearson to fix it\n" + continue + fi + fi + + # Build coreboot ROM image + make clean + cp "../../../resources/seabios/config/config" ".config" + cp "../../../seabios/out/bios.bin.elf" "seabios.elf" + make -j${cores} + rm -f "seabios.elf" + mv "build/coreboot.rom" "${boardtarget}_${romtype}.rom" + + # Now add SeaVGABIOS (SeaBIOS wrapper for coreboot native video init) + ./util/cbfstool/cbfstool "${boardtarget}_${romtype}.rom" add -f ../../../seabios/out/vgabios.bin -n vgaroms/vgabios.bin -t raw + + # .config no longer needed + rm -f ".config" +done + +# Clean up and prepare bin/ containing all ROM images + +# move ROM images into the newly created directory +rm -Rf "${boardtarget:?}/" +mkdir "${boardtarget}/" +mv "${boardtarget}"*.rom "${boardtarget}/" + +# delete old ROM images +rm -Rf "../../../bin/seabios/${boardtarget}/" +# put new ROM images in ../bin/grub/ +[ -d "../../../bin/seabios/" ] || mkdir -p "../../../bin/seabios/" +mv "${boardtarget}/" "../../../bin/seabios/" + +# version info file no longer needed +rm -f ".coreboot-version" + +git checkout master +( + cd "3rdparty/vboot/" + git checkout master +) +) + +printf "\n\n" -- cgit v0.9.1