mirror of
https://github.com/qemu/qemu.git
synced 2025-08-24 20:31:11 +00:00

In commitbd0da3a3d4
we changed make-release so that instead of cloning every git submodule of EDK2 we only cloned a fixed list. The original motivation for this was that one of the submodules: * was from a non-github repo * that repo had a "SSL certificate expired" failure * wasn't actually needed for the set of EDK2 binaries we build and at the time we were trying to build the EDK2 binaries in one of our CI jobs. Unfortunately this change meant that we were exposed to bugs where EDK2 adds a new submodule and the sources we ship in the release tarball won't build any more. In particular, in EDK2 commit c6bb7d54beb05 the MipiSysTLib submodule was added, causing failure of the ROM build in our tarball starting from QEMU release 8.2.0: /tmp/qemu-10.0.0/roms/edk2/MdePkg/MdePkg.dec(32): error 000E: File/directory not found in workspace Library/MipiSysTLib/mipisyst/library/include is not found in packages path: /tmp/qemu-10.0.0/roms/. /tmp/qemu-10.0.0/roms/edk2 (Building from a QEMU git checkout works fine.) In the intervening time EDK2 moved the submodule that had a problem to be one they mirrored themselves (and at time of writing all their submodules are hosted on github), and we stopped trying to build EDK2 binaries in our own CI jobs with commit690ceb7193
. Go back to cloning every EDK2 submodule, so we don't have an untested explicit list of submodules which will break without our noticing it. This increases the size of the QEMU tarball .tar.xz file from 133M to 139M in my testing. Cc: qemu-stable@nongnu.org Resolves: https://gitlab.com/qemu-project/qemu/-/issues/3041 Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Michael Tokarev <mjt@tls.msk.ru> Message-ID: <20250721153341.2910800-1-peter.maydell@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
85 lines
2.6 KiB
Bash
Executable File
85 lines
2.6 KiB
Bash
Executable File
#!/bin/bash -e
|
|
#
|
|
# QEMU Release Script
|
|
#
|
|
# Copyright IBM, Corp. 2012
|
|
#
|
|
# Authors:
|
|
# Anthony Liguori <aliguori@us.ibm.com>
|
|
#
|
|
# This work is licensed under the terms of the GNU GPLv2 or later.
|
|
# See the COPYING file in the top-level directory.
|
|
|
|
function subproject_dir() {
|
|
if test ! -f "$src/subprojects/$1.wrap"; then
|
|
echo "scripts/archive-source.sh should only process wrap subprojects"
|
|
exit 1
|
|
fi
|
|
|
|
# Print the directory key of the wrap file, defaulting to the
|
|
# subproject name. The wrap file is in ini format and should
|
|
# have a single section only. There should be only one section
|
|
# named "[wrap-*]", which helps keeping the script simple.
|
|
local dir
|
|
dir=$(sed -n \
|
|
-e '/^\[wrap-[a-z][a-z]*\]$/,/^\[/{' \
|
|
-e '/^directory *= */!b' \
|
|
-e 's///p' \
|
|
-e 'q' \
|
|
-e '}' \
|
|
"$src/subprojects/$1.wrap")
|
|
|
|
echo "${dir:-$1}"
|
|
}
|
|
|
|
if [ $# -ne 2 ]; then
|
|
echo "Usage:"
|
|
echo " $0 gitrepo version"
|
|
exit 0
|
|
fi
|
|
|
|
# Only include wraps that are invoked with subproject()
|
|
SUBPROJECTS="libvfio-user keycodemapdb berkeley-softfloat-3
|
|
berkeley-testfloat-3 anyhow-1-rs arbitrary-int-1-rs bilge-0.2-rs
|
|
bilge-impl-0.2-rs either-1-rs foreign-0.3-rs itertools-0.11-rs
|
|
libc-0.2-rs proc-macro2-1-rs
|
|
proc-macro-error-1-rs proc-macro-error-attr-1-rs quote-1-rs
|
|
syn-2-rs unicode-ident-1-rs"
|
|
|
|
src="$1"
|
|
version="$2"
|
|
destination=qemu-${version}
|
|
|
|
git clone --single-branch -b "v${version}" -c advice.detachedHead=false \
|
|
"${src}" ${destination}
|
|
|
|
pushd ${destination}
|
|
|
|
git submodule update --init --single-branch
|
|
meson subprojects download $SUBPROJECTS
|
|
|
|
(cd roms/seabios && git describe --tags --long --dirty > .version)
|
|
(cd roms/skiboot && ./make_version.sh > .version)
|
|
# Fetch edk2 submodule's submodules, since it won't have access to them via
|
|
# the tarball later.
|
|
|
|
# As recommended by the EDK2 readme, we don't use --recursive here.
|
|
# EDK2 won't use any code or feature from a submodule of a submodule,
|
|
# so we don't need to add them to the tarball.
|
|
# Although we don't necessarily need all of the submodules that EDK2
|
|
# has, we clone them all, to avoid running into problems where EDK2
|
|
# adds a new submodule or changes its use of an existing one and
|
|
# the sources we ship in the tarball then fail to build.
|
|
(cd roms/edk2 && git submodule update --init --depth 1)
|
|
popd
|
|
|
|
exclude=(--exclude=.git)
|
|
# include the tarballs in subprojects/packagecache but not their expansion
|
|
for sp in $SUBPROJECTS; do
|
|
if grep -xqF "[wrap-file]" $src/subprojects/$sp.wrap; then
|
|
exclude+=(--exclude=subprojects/"$(subproject_dir $sp)")
|
|
fi
|
|
done
|
|
tar "${exclude[@]}" -cJf ${destination}.tar.xz ${destination}
|
|
rm -rf ${destination}
|