From 4dd16f5a28d0d799d450a49b759f28353bf5e07f Mon Sep 17 00:00:00 2001 From: Francis Rowe Date: Mon, 7 Mar 2016 00:59:00 +0000 Subject: copy coreboot directory per revision, not per board This will speed up the build process. The plan is to, if possible, always use 1 revision. --- resources/scripts/helpers/build/module/coreboot | 157 ++++++++++++++++++++- resources/scripts/helpers/build/release/src | 2 + .../scripts/helpers/build/roms/withdepthcharge | 55 ++++++-- resources/scripts/helpers/build/roms/withgrub | 2 +- .../scripts/helpers/build/roms/withgrub_helper | 32 +++-- resources/scripts/helpers/download/coreboot | 144 +++++-------------- 6 files changed, 265 insertions(+), 127 deletions(-) (limited to 'resources/scripts') diff --git a/resources/scripts/helpers/build/module/coreboot b/resources/scripts/helpers/build/module/coreboot index d3e86cd2..5788343a 100755 --- a/resources/scripts/helpers/build/module/coreboot +++ b/resources/scripts/helpers/build/module/coreboot @@ -30,7 +30,160 @@ set -u -e printf "Building the utilities in coreboot\n" -# clean coreboot and crossgcc (source archives preserved) +for payloads in resources/libreboot/config/*; do + + if [ ! -d "${payloads}/" ]; then + continue + fi + + payload="${payloads##*/}" + + for boardconfig in resources/libreboot/config/${payload}/*; do + + if [ ! -d "${boardconfig}/" ]; then + continue + fi + + boardname="${boardconfig##*/}" + cbrevision=$(cat "${boardconfig}/cbrevision") + vbootrevision=$(cat "${boardconfig}/vbootrevision") + + reused_coreboot_patches="resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}/reused.list" + reused_vboot_patches="resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}/reused.list" + for reused_patches in "${reused_coreboot_patches}" "${reused_vboot_patches}"; do + if [ -f "${reused_patches}" ]; then + for patch in $(cat "${reused_patches}"); do + if [ ! -f "./${patch}" ]; then + printf "%s listed in %s does not exist\n" "${patch}" "${reused_patches}" + exit 1 + fi + done + fi + done + + done +done + +# sanity check (check for invalid paths in the reused.list patch lists before proceeding) +# in ascending filename order, apply patches from a directory +apply_patches_from_directory() { + patch_directory="${1}" # directory containing the patch files + + if [ -d "${patch_directory}" ]; then + for patch in ${patch_directory}/*.patch; do + + if [ "${patch##*/}" = "*.patch" ]; then # oh so ugly + continue # ugly ugly ugly ugly ugly + fi # most hideous thing you've ever seen + + git am "${patch}" || return 1 + done + fi +} +# files listed in the file (if found) are absolute paths, relative to the root of the libreboot src directory +# the file lists patches patches that should be applied +apply_patches_from_file() { + patch_list="${1}" # file listing the paths to all the patches + libreboot_src_root="${2}" # path to the root of the libreboot_src directory + + if [ -f "${patch_list}" ]; then + for patchname in $(cat "${patch_list}"); do + git am "${libreboot_src_root}/${patchname}" || return 1 + done + fi +} + +create_branch() { + branchname="${1}" + git branch ${branchname} + git checkout ${branchname} + git checkout master +} + +# use git-init on everything +# this is so that we can then apply patche +# for these revisions of vboot and coreboot +for i in coreboot/*; do + if [ ! -d "${i}/" ]; then + continue + fi + for revision in ${i}/*; do + if [ ! -d "${revision}/" ]; then + continue + fi + ( + cd "${revision}/" + git init + git add -A . + git commit -m "coreboot revision ${revision##*/}" + cd "3rdparty/vboot/" + git init + git add -A . + git commit -m "coreboot revision ${revision##*/}" + ) + done +done + +for payloads in resources/libreboot/config/*; do + + if [ ! -d "${payloads}/" ]; then + continue + fi + + payload="${payloads##*/}" + + for boardconfig in resources/libreboot/config/${payload}/*; do + + if [ ! -d "${boardconfig}/" ]; then + continue + fi + + boardname="${boardconfig##*/}" + cbrevision=$(cat "${boardconfig}/cbrevision") + vbootrevision=$(cat "${boardconfig}/vbootrevision") + branchname="${payload}_${boardname}" + + # the same vboot revision is always used for coreboot revision, + # so we don't need to wworry about checking for that here + + # patch that version + ( + + cd "coreboot/${cbrevision}/${cbrevision}/" + create_branch ${branchname} + + git checkout ${branchname} + + # apply patches (coreboot, common to all systems using this revision) + apply_patches_from_directory "../../../resources/libreboot/patch/common/coreboot/${cbrevision}" + # apply patches re-used from other boards, before applying main patches (common patches for similar boards) + apply_patches_from_file "../../../resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}/reused.list" ../../.. + # apply patches (coreboot, machine-specific for this revision) + apply_patches_from_directory "../../../resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}" + + git checkout master + + cd "3rdparty/vboot/" + # reset to known revision (vboot) + create_branch ${branchname} + + git checkout ${branchname} + + # apply patches (vboot, common to all systems using this revision) + apply_patches_from_directory "../../../../../resources/libreboot/patch/common/vboot/${vbootrevision}" + # apply patches re-used from other boards, before applying main patches (common patches for similar boards) + apply_patches_from_file "../../../../../resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}/reused.list" ../../../../.. + # apply patches (vboot, machine-specific for this revision) + apply_patches_from_directory "../../../../../resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}" + + git checkout master + + ) + done +done + +# build coreboot utilities (in each revision) and +# create symlinks to the crossgcc archive for payload in coreboot/*; do for board in "${payload}/"*; do @@ -40,8 +193,6 @@ for payload in coreboot/*; do done # create symlink to crossgcc ( - boardconfig_path="resources/libreboot/config/${payload##*/}/${board##*/}" - cbrevision="$(cat "${boardconfig_path}/cbrevision")" cd "${board}/util/" ln -s "../../../../crossgcc/util/crossgcc/" crossgcc ) diff --git a/resources/scripts/helpers/build/release/src b/resources/scripts/helpers/build/release/src index f2f5b31b..e3cdbed2 100755 --- a/resources/scripts/helpers/build/release/src +++ b/resources/scripts/helpers/build/release/src @@ -83,6 +83,8 @@ rm -Rf "${distdir}/flashrom/".git* rm -Rf "${distdir}/grub/".git* rm -Rf "${distdir}/depthcharge/".git* +rm -f "${distdir}"/*.vim + # Delete useless files. rm -Rf "${distdir}/TODO/" rm -f "${distdir}/push" diff --git a/resources/scripts/helpers/build/roms/withdepthcharge b/resources/scripts/helpers/build/roms/withdepthcharge index 32e56238..431427a4 100755 --- a/resources/scripts/helpers/build/roms/withdepthcharge +++ b/resources/scripts/helpers/build/roms/withdepthcharge @@ -46,9 +46,16 @@ fi buildlibpayload() { family="${1}" board="${2}" + cbrevision="${3}" + vbootrevision="${4}" ( - cd "coreboot/depthcharge/${board}/payloads/libpayload/" + cd "coreboot/${cbrevision}/${cbrevision}/payloads/libpayload/" + git checkout depthcharge_${board} + ( + cd "3rdparty/vboot/" + git checkout depthcharge_${board} + ) make distclean rm -Rf "install/" @@ -56,6 +63,10 @@ buildlibpayload() { make KBUILD_DEFCONFIG="configs/config.$family" defconfig make -j"$(nproc)" make DESTDIR="install" install + + git checkout master + cd "3rdparty/vboot/" + git checkout master ) } @@ -64,17 +75,30 @@ buildlibpayload() { builddepthcharge() { board="${1}" + cbrevision="${2}" + vbootrevision="${3}" ( - cd "depthcharge/" + ( + cd "coreboot/${cbrevision}/${cbrevision}/" + git checkout depthcharge_${board} + cd "3rdparty/vboot/" + git checkout depthcharge_${board} + ) + cd "depthcharge/" make distclean - rm -f "../coreboot/depthcharge/${board:?}/depthcharge.elf" + rm -f "../coreboot/${cbrevision:?}/${cbrevision:?}/depthcharge.elf" make BOARD="${board}" defconfig - make BOARD="${board}" LIBPAYLOAD_DIR="$(pwd)/../coreboot/depthcharge/${board}/payloads/libpayload/install/libpayload" VB_SOURCE="$(pwd)/../coreboot/depthcharge/${board}/3rdparty/vboot" -j"$(nproc)" depthcharge_unified + make BOARD="${board}" LIBPAYLOAD_DIR="$(pwd)/../coreboot/${cbrevision}/${cbrevision}/payloads/libpayload/install/libpayload" VB_SOURCE="$(pwd)/../coreboot/${cbrevision}/${cbrevision}/3rdparty/vboot" -j"$(nproc)" depthcharge_unified + + cp "build/depthcharge.elf" "../coreboot/${cbrevision}/${cbrevision}/" - cp "build/depthcharge.elf" "../coreboot/depthcharge/${board}/" + cd "../coreboot/${cbrevision}/${cbrevision}/" + git checkout master + cd "3rdparty/vboot/" + git checkout master ) } @@ -83,9 +107,16 @@ builddepthcharge() { buildcoreboot() { board="${1}" + cbrevision="${2}" + vbootrevision="${3}" ( - cd "coreboot/depthcharge/${board}/" + cd "coreboot/${cbrevision}/${cbrevision}" + git checkout depthcharge_${board} + ( + cd "3rdparty/vboot/" + git checkout depthcharge_${board} + ) make distclean rm -f ".coreboot-version" @@ -123,19 +154,25 @@ buildcoreboot() { # clean this up rm -f "depthcharge.elf" rm -f *.img + + git checkout master + cd "3rdparty/vboot/" + git checkout master ) } # Build ROM images for supported boards buildrom() { board="${1}" + cbrevision="$(cat resources/libreboot/config/depthcharge/${board}/cbrevision)" + vbootrevision="$(cat resources/libreboot/config/depthcharge/${board}/vbootrevision)" if [ -f "resources/libreboot/config/depthcharge/${board}/config" ]; then family=$( echo ${board} |sed "s/_.*//g" ) - buildlibpayload "${family}" "${board}" - builddepthcharge "${board}" - buildcoreboot "${board}" + buildlibpayload "${family}" "${board}" "${cbrevision}" "${vbootrevision}" + builddepthcharge "${board}" "${cbrevision}" "${vbootrevision}" + buildcoreboot "${board}" "${cbrevision}" "${vbootrevision}" fi } diff --git a/resources/scripts/helpers/build/roms/withgrub b/resources/scripts/helpers/build/roms/withgrub index f3c0c053..3ef295a9 100755 --- a/resources/scripts/helpers/build/roms/withgrub +++ b/resources/scripts/helpers/build/roms/withgrub @@ -140,6 +140,6 @@ fi # The GRUB files are no longer needed rm -f "coreboot/grub"*.{elf,cfg} -rm -f "coreboot/"*/*/grub*.{elf,cfg} +rm -f "coreboot/"*/*/*.{elf,cfg} printf "\n\n" diff --git a/resources/scripts/helpers/build/roms/withgrub_helper b/resources/scripts/helpers/build/roms/withgrub_helper index 631b96fa..047aa763 100755 --- a/resources/scripts/helpers/build/roms/withgrub_helper +++ b/resources/scripts/helpers/build/roms/withgrub_helper @@ -34,21 +34,31 @@ 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 "GRUB Helper script: build ROM images for '%s'\n" "${boardtarget}" ( -cd "coreboot/grub/${boardtarget}/" +cbrevision="$(cat resources/libreboot/config/grub/${boardtarget}/cbrevision)" +vbootrevision="$(cat resources/libreboot/config/grub/${boardtarget}/vbootrevision)" +branchname="grub_${boardtarget}" + +cd "coreboot/${cbrevision}/${cbrevision}/" +git checkout ${branchname} +( + cd "3rdparty/vboot/" + git checkout ${branchname} +) # Make sure to remove these first rm -f "grub."*{elf,cfg} -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 'libreboot-%s\n' "${version}" > ".coreboot-version" # needed for reproducible builds in coreboot # Build ROM images with text-mode and corebootfb modes. @@ -138,6 +148,12 @@ mv "${boardtarget}/" "../../../bin/grub/" # version info file no longer needed rm -f ".coreboot-version" + +git checkout master +( + cd "3rdparty/vboot/" + git checkout master +) ) printf "\n\n" diff --git a/resources/scripts/helpers/download/coreboot b/resources/scripts/helpers/download/coreboot index 16bd1a87..cbf79c89 100755 --- a/resources/scripts/helpers/download/coreboot +++ b/resources/scripts/helpers/download/coreboot @@ -33,89 +33,36 @@ else version="libreboot-$(git describe --tags HEAD)" fi -# coreboot revisios used for crossgcc -crossgccrevision="4351ace145c4069f9c93ca7541d6dfaf8300b53b" - -# sanity check (check for invalid paths in the reused.list patch lists before proceeding) -for payloads in resources/libreboot/config/*; do - - if [ ! -d "${payloads}/" ]; then - continue - fi - - payload="${payloads##*/}" - - for boardconfig in resources/libreboot/config/${payload}/*; do - - if [ ! -d "${boardconfig}/" ]; then - continue - fi - - boardname="${boardconfig##*/}" - cbrevision=$(cat "${boardconfig}/cbrevision") - vbootrevision=$(cat "${boardconfig}/vbootrevision") - - reused_coreboot_patches="resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}/reused.list" - reused_vboot_patches="resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}/reused.list" - for reused_patches in "${reused_coreboot_patches}" "${reused_vboot_patches}"; do - if [ -f "${reused_patches}" ]; then - for patch in $(cat "${reused_patches}"); do - if [ ! -f "./${patch}" ]; then - printf "%s listed in %s does not exist\n" "${patch}" "${reused_patches}" - exit 1 - fi - done - fi - done - - done -done - -# in ascending filename order, apply patches from a directory -apply_patches_from_directory() { - patch_directory="${1}" # directory containing the patch files - - if [ -d "${patch_directory}" ]; then - for patch in ${patch_directory}/*.patch; do - - if [ "${patch##*/}" = "*.patch" ]; then # oh so ugly - continue # ugly ugly ugly ugly ugly - fi # most hideous thing you've ever seen - - git am "${patch}" || return 1 - done - fi -} -# files listed in the file (if found) are absolute paths, relative to the root of the libreboot src directory -# the file lists patches patches that should be applied -apply_patches_from_file() { - patch_list="${1}" # file listing the paths to all the patches - libreboot_src_root="${2}" # path to the root of the libreboot_src directory - - if [ -f "${patch_list}" ]; then - for patchname in $(cat "${patch_list}"); do - git am "${libreboot_src_root}/${patchname}" || return 1 - done - fi -} make_coreboot_src_directory() { - payload="${1}" - boardname="${2}" - firmwarepath="${3}" # libreboot_src/coreboot/ + payload="${1}" + cbrevision="${2}" + vbootrevision="${3}" + firmwarepath="${4}" # libreboot_src/coreboot/ ( - cd "${firmwarepath}/" - # copy coreboot directory there - rm -Rf "${payload:?}/${boardname:?}/" - if [ ! -d "${payload}/" ]; then - mkdir -p "${payload}/" - fi - cp -R "coreboot/" "${payload}/${boardname}/" + cd "${firmwarepath}/" + # copy coreboot directory there + rm -Rf "${payload:?}/${cbrevision:?}/" + if [ ! -d "${payload}/" ]; then + mkdir -p "${payload}/" + fi + cp -R "coreboot/" "${payload}/${cbrevision}/" + + # We need to reset that revision of coreboot to the specified revision + cd "${payload}/${cbrevision}/" + git reset --hard ${cbrevision} + + if [ "${vbootrevision}" != "no_vboot_revision" ]; then + # reset vboot revision. in practise, we always use the same + # vboot revision on all boards that use a given coreboot revision + cd "3rdparty/vboot/" + git reset --hard ${vbootrevision} + fi ) } -reset_at_revision() { - revision="${1}" - git reset --hard ${revision} -} + + +# coreboot revisios used for crossgcc +crossgccrevision="4351ace145c4069f9c93ca7541d6dfaf8300b53b" printf "Downloading coreboot, patching coreboot and deblobbing coreboot\n" @@ -168,43 +115,26 @@ for payloads in ../../resources/libreboot/config/*; do continue fi - boardname="${boardconfig##*/}" cbrevision=$(cat "${boardconfig}/cbrevision") vbootrevision=$(cat "${boardconfig}/vbootrevision") - make_coreboot_src_directory ${payload} ${boardname} .. - - # patch that version - ( - - cd "../${payload}/${boardname}/" - reset_at_revision ${cbrevision} + # the same vboot revision is always used for coreboot revision, + # so we don't need to wworry about checking for that here - # apply patches (coreboot, common to all systems using this revision) - apply_patches_from_directory "../../../resources/libreboot/patch/common/coreboot/${cbrevision}" - # apply patches re-used from other boards, before applying main patches (common patches for similar boards) - apply_patches_from_file "../../../resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}/reused.list" ../../.. - # apply patches (coreboot, machine-specific for this revision) - apply_patches_from_directory "../../../resources/libreboot/patch/coreboot/${cbrevision}/${payload}/${boardname}" + if [ -d "../${cbrevision}/${cbrevision}" ]; then + continue + # the directory already exists, no need to recreate it + fi - cd "3rdparty/vboot/" - # reset to known revision (vboot) - reset_at_revision ${vbootrevision} - - # apply patches (vboot, common to all systems using this revision) - apply_patches_from_directory "../../../../../resources/libreboot/patch/common/vboot/${vbootrevision}" - # apply patches re-used from other boards, before applying main patches (common patches for similar boards) - apply_patches_from_file "../../../../../resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}/reused.list" ../../../../.. - # apply patches (vboot, machine-specific for this revision) - apply_patches_from_directory "../../../../../resources/libreboot/patch/vboot/${vbootrevision}/${payload}/${boardname}" - - ) + make_coreboot_src_directory ${cbrevision} ${cbrevision} ${vbootrevision} .. done done + + # prepare directory for crossgcc rm -Rf "../../crossgcc/" -make_coreboot_src_directory crossgcc ${crossgccrevision} .. +make_coreboot_src_directory crossgcc ${crossgccrevision} "no_vboot_revision" .. ( cd "../crossgcc/${crossgccrevision}" reset_at_revision ${crossgccrevision} @@ -215,6 +145,8 @@ make_coreboot_src_directory crossgcc ${crossgccrevision} .. cd ../ mv "${crossgccrevision}/" "crossgcc/" mv "crossgcc/" ../../ + cd ../ + rm -Rf "crossgcc/" ) # go back to _src/coreboot/ (containing all coreboot directories) -- cgit v1.2.3-70-g09d2