#!/bin/bash
#
# helper script: generate the release archives
#
# Copyright (C) 2014, 2015 Francis Rowe <info@gluglug.org.uk>
#
# 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 <http://www.gnu.org/licenses/>.
#
# This script assumes that the current working directory when running
# it is the root directory of the libreboot git repository clone.
[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
printf "Generating the release archives\n"
arch="unknown"
if [ $(uname -i) = "i686" ] || [ $(uname -m) = "i686" ]
then
arch="i686"
echo "Running on i686. ok."
sleep 2
elif [ $(uname -i) = "x86_64" ] || [ $(uname -m) = "x86_64" ]
then
arch="x86_64"
echo "Running on x86_64. ok."
sleep 2
else
echo "This script must be run on an i686 or x86_64 host. x86_64 is recommended."
exit 1
fi
# ### Version information for this release
# ----------------------------------------------------------------------------------------------------------------------------
# create file showing the commit ID from git for this archive.
cat .git/refs/heads/master > commitid
# ### Delete old archives before continuing
# ----------------------------------------------------------------------------------------------------------------------------
printf "Deleting the old release archives\n"
rm -f libreboot_*.tar.xz
rm -f tobuild.tar.xz
rm -rf release/
rm -rf tobuild/
rm -rf libreboot_bin
rm -rf libreboot_src
rm -rf libreboot_doc
# Get manifest which will be used to copy everything
find -maxdepth 1 > releasefilelist
printf "\n\n"
# ### Prepare libreboot_src archive ready for release
# ----------------------------------------------------------------------------------------------------------------------------
printf "Copying libreboot sources to libreboot_src/\n"
mkdir libreboot_src
for resource in $(cat releasefilelist)
do
if [ "$resource" != "." ] && [ "$resource" != "./docs" ]; then
cp -r $resource libreboot_src
fi
done
cd libreboot_src/
# clean everything
./build clean all
# back to main checkout directory
cd ../
printf "\n\n"
# ### Create the release/ directory where the archives will go
# ----------------------------------------------------------------------------------------------------------------------------
# create directory for the release
mkdir release/
mkdir release/rom/
# ### Prepare libreboot_docs archive ready for release
# ----------------------------------------------------------------------------------------------------------------------------
printf "Creating libreboot_docs.tar.xz\n"
cd release/
mkdir libreboot_docs/
cp -r ../docs/ libreboot_docs/
# This file is only for the git repository
rm -f libreboot_docs/docs/tasks.html
cat ../commitid > libreboot_docs/commitid
# create lzma compressed docs archive
tar -c libreboot_docs | xz -9e >libreboot_docs.tar.xz
# the directory is no longer needed
rm -rf libreboot_docs/
cd ../
printf "\n\n"
# ### Further work in libreboot_src: delete *.git and *.svn
# ### To save space since they are not useful in the release archives
# ### Changes to these projects should be submitted upstream
# ----------------------------------------------------------------------------------------------------------------------------
echo "Deleting .git* and .svn* in the modules of libreboot_src/\n"
cd libreboot_src/
# These instructions will also work even if .git or .svn are already deleted
# because "rm -rf" won't complain if they are missing. It is still useful on
# the release archives (non-git), for example if the user re-downloads these programmes.
# remove .git for libreboot project itself
rm -rf .git*
# remove .git for bucts
cd bucts/
rm -rf .git*
cd ../
# coreboot:
# the instructions for coreboot remain in the download script
# they need to stay there, because otherwise "git diff"
# will show the blobs that were deleted (which means,
# that libreboot would be distributing blobs)
# Flashrom:
cd flashrom/
rm -rf .svn
cd ../
# GRUB:
cd grub/
rm -rf .git
rm -f .gitignore
cd ../
printf "\n\n"
cd ../
# ### Prepare ROM archives ready for release
# ----------------------------------------------------------------------------------------------------------------------------
printf "Generating ROM image archives for...\n"
cd bin/
for board in $(ls)
do
printf "...$board"
# show the libreboot commit ID in the archive
cat ../commitid > "$board"/commitid
# create lzma compressed src archive
tar -c "$board" | xz -9e >../libreboot_"$board".tar.xz
# delete. no longer needed
rm -f "$board"/commitid
# move the ROM images to the release/ directory
mv ../libreboot_"$board".tar.xz ../release/rom/
printf " OK\n"
done
cd ../
printf "\n\n"
# ### Prepare libreboot_util archive ready for release
# ----------------------------------------------------------------------------------------------------------------------------
printf "Generating libreboot_util.tar.xz\n"
mkdir libreboot_util
# --------------
# BUC.TS related
# --------------
# X60/T60: BUC.TS utility is needed to flash libreboot while Lenovo BIOS is running
# Include it statically compiled
cp -r bucts bucts_
# make it statically compile
./build module bucts static
mkdir libreboot_util/bucts/
mkdir libreboot_util/bucts/"$arch"/
mv bucts/bucts libreboot_util/bucts/"$arch"/
rm -rf bucts/
mv bucts_/ bucts/
# ----------------
# Flashrom related
# ----------------
# Flashrom is used to install libreboot on supported targets
# Include it statically compiled
cp -r flashrom flashrom_
# make it statically compile
./build module flashrom static
mkdir libreboot_util/flashrom
cd flashrom/
mkdir ../libreboot_util/flashrom/"$arch"
mv flashrom ../libreboot_util/flashrom/"$arch"
mv flashrom_lenovobios_sst ../libreboot_util/flashrom/"$arch"
mv flashrom_lenovobios_macronix ../libreboot_util/flashrom/"$arch"
cd ../
rm -rf flashrom
mv flashrom_ flashrom
# ----------------
# cbfstool related
# ----------------
# build cbfstool, compiled (statically linked) and include the binary
cd coreboot/util/
cp -r cbfstool cbfstool_
cd cbfstool/
make clean
make SHARED=0 CC='gcc -static'
mkdir ../../../libreboot_util/cbfstool
mkdir ../../../libreboot_util/cbfstool/"$arch"
mv cbfstool ../../../libreboot_util/cbfstool/"$arch"/
if [ "$arch" = "x86_64" ]
then
# Now build 32-bit binaries
make clean
make SHARED=0 CC='gcc -static -m32'
mkdir ../../../libreboot_util/cbfstool/i686
mv cbfstool ../../../libreboot_util/cbfstool/i686/
fi
# cross-compile for ARM
make clean
make SHARED=0 CC='arm-linux-gnueabi-gcc -static'
mkdir ../../../libreboot_util/cbfstool/armv7l
mv cbfstool ../../../libreboot_util/cbfstool/armv7l/
cd ../
rm -rf cbfstool
mv cbfstool_ cbfstool
cd ../../
# ----------------
# ich9deblob related
# ----------------
# build ich9deblob, compiled (statically linked) and include the binary
cd resources/utilities/
cp -r ich9deblob ich9deblob_
cd ich9deblob/
make clean
make SHARED=0 CC='gcc -static'
mkdir ../../../libreboot_util/ich9deblob
mkdir ../../../libreboot_util/ich9deblob/"$arch"
mv ich9deblob ../../../libreboot_util/ich9deblob/"$arch"/
mv ich9gen ../../../libreboot_util/ich9deblob/"$arch"/
mv demefactory ../../../libreboot_util/ich9deblob/"$arch"/
if [ "$arch" = "x86_64" ]
then
# Now build 32-bit binaries
make clean
make SHARED=0 CC='gcc -static -m32'
mkdir ../../../libreboot_util/ich9deblob/i686
mv ich9deblob ../../../libreboot_util/ich9deblob/i686/
mv ich9gen ../../../libreboot_util/ich9deblob/i686/
mv demefactory ../../../libreboot_util/ich9deblob/i686/
fi
# cross-compile for ARM
make clean
make SHARED=0 CC='arm-linux-gnueabi-gcc -static'
mkdir ../../../libreboot_util/ich9deblob/armv7l
mv ich9deblob ../../../libreboot_util/ich9deblob/armv7l/
mv ich9gen ../../../libreboot_util/ich9deblob/armv7l/
mv demefactory ../../../libreboot_util/ich9deblob/armv7l/
cd ../
rm -rf ich9deblob
mv ich9deblob_ ich9deblob
cd ../../
# -----------------
# nvramtool related
# -----------------
# build nvramtool, compiled (statically linked) and include the binary
cd coreboot/util/
cp -r nvramtool nvramtool_
cd nvramtool/
make clean
make SHARED=0 CC='gcc -static'
mkdir ../../../libreboot_util/nvramtool
mkdir ../../../libreboot_util/nvramtool/"$arch"
mv nvramtool ../../../libreboot_util/nvramtool/"$arch"/
if [ "$arch" = "x86_64" ]
then
# Now build 32-bit binaries
make clean
make SHARED=0 CC='gcc -static -m32'
mkdir ../../../libreboot_util/nvramtool/i686
mv nvramtool ../../../libreboot_util/nvramtool/i686/
fi
cd ../
rm -rf nvramtool
mv nvramtool_ nvramtool
cd ../../
# -----------------
# cbmem related
# -----------------
# build cbmem, compiled (statically linked) and include the binary
cd coreboot/util/
cp -r cbmem cbmem_
cd cbmem/
make clean
make SHARED=0 CC='gcc -static'
mkdir ../../../libreboot_util/cbmem
mkdir ../../../libreboot_util/cbmem/"$arch"
mv cbmem ../../../libreboot_util/cbmem/"$arch"/
if [ "$arch" = "x86_64" ]
then
# Now build 32-bit binaries
make clean
make SHARED=0 CC='gcc -static -m32'
mkdir ../../../libreboot_util/cbmem/i686
mv cbmem ../../../libreboot_util/cbmem/i686/
fi
cd ../
rm -rf cbmem
mv cbmem_ cbmem
cd ../../
# -------------
# Miscellaneous
# -------------
# include X60 cmos.layout file
mkdir libreboot_util/cmoslayouts/
cp coreboot/src/mainboard/apple/macbook21/cmos.layout libreboot_util/cmoslayouts/macbook21cmos.layout
cp coreboot/src/mainboard/lenovo/x60/cmos.layout libreboot_util/cmoslayouts/x60cmos.layout
cp coreboot/src/mainboard/lenovo/t60/cmos.layout libreboot_util/cmoslayouts/t60cmos.layout
cp coreboot/src/mainboard/lenovo/x200/cmos.layout libreboot_util/cmoslayouts/x200cmos.layout
# Flashing script
cp flash libreboot_util/
# for changing the GRUB background
cp resources/scripts/misc/grub-background libreboot_util/
printf "\n\n"
# ### Create the release tarballs
# ----------------------------------------------------------------------------------------------------------------------------
# Also delete the manifest
rm -f libreboot_src/releasefilelist
rm -f libreboot_util/releasefilelist
rm -f releasefilelist
# Useless files
rm -rf libreboot_src/TODO/
rm -f libreboot_src/push
# Delete the deblob scripts from libreboot_src
# Since _src doesn't distribute the download scripts,
# and already comes with a deblobbed coreboot, the
# deblobbing scripts aren't needed at all
rm -rf libreboot_src/resources/utilities/coreboot-libre/
# We don't want to encourage development
# to happen on the release archives.
# Development goes in git. These scripts are
# not needed in libreboot_src, because
# the files that they download are already included
rm -rf libreboot_src/resources/scripts/helpers/build/release
rm -f libreboot_src/download
rm -rf libreboot_src/resources/scripts/helpers/download/
# ich9deblob: there are certain files in there
# that the user most likely does not want to share
rm -f libreboot_src/resources/utilities/ich9deblob/deblobbed_descriptor.bin
rm -f libreboot_src/resources/utilities/ich9deblob/factory.rom
rm -f libreboot_src/resources/utilities/ich9deblob/libreboot.rom
rm -f libreboot_src/resources/utilities/ich9deblob/mkdescriptor.c
rm -f libreboot_src/resources/utilities/ich9deblob/mkdescriptor.h
rm -f libreboot_src/resources/utilities/ich9deblob/mkgbe.c
rm -f libreboot_src/resources/utilities/ich9deblob/mkgbe.h
rm -f libreboot_src/resources/utilities/ich9deblob/ich9fdgbe_4m.bin
rm -f libreboot_src/resources/utilities/ich9deblob/ich9fdgbe_8m.bin
rm -f libreboot_src/resources/utilities/ich9deblob/demefactory_4kdescriptor.bin
rm -f libreboot_src/mkgbe.c
rm -f libreboot_src/mkgbe.h
rm -f libreboot_src/ich9fdgbe_8m.bin
rm -f libreboot_src/ich9fdgbe_4m.bin
# delete the "tobuild"
rm -rf libreboot_src/tobuild/
rm -f libreboot_src/tobuild.tar.xz
# mention the commit ID (libreboot, git) in the release archives
cat commitid > libreboot_src/commitid
cat commitid > libreboot_util/commitid
# create lzma compressed src archive
printf "Compressing libreboot_src/ into libreboot_src.tar.xz\n"
tar -c libreboot_src | xz -9e >libreboot_src.tar.xz
printf "Compressing libreboot_util/ into libreboot_util.tar.xz\n"
# create lzma compressed util archive
tar -c libreboot_util | xz -9e >libreboot_util.tar.xz
# Move the archives to the release directory
mv libreboot_src.tar.xz release/
mv libreboot_util.tar.xz release/
# Create a symlink to the commitid file, in release/
cat commitid > release/commitid
printf "\n\n"
# ### Delete the uncompressed release directories
# ----------------------------------------------------------------------------------------------------------------------------
# The uncompressed archives are no longer needed
rm -rf libreboot_src
rm -rf libreboot_util
# For those utilities that have to be built on the target
./build external source
# Move the archive to the release directory
mv tobuild.tar.xz release/
printf "Tar archives are stored in release/.\n"
printf "NOTE: don't forget to add ARM binaries for flashrom.\n"
printf "NOTE: don't forget to add i386 binaries for flashrom/bucts.\n"
printf "The archive tobuild.tar.xz has been created with everything needed to build these utilities.\n"
printf "\n\n"
# ------------------- DONE ----------------------