diff options
author | Pierre Labatut <plabatut@google.com> | 2023-11-17 16:20:08 +0100 |
---|---|---|
committer | Pierre Labatut <plabatut@google.com> | 2023-11-17 16:26:06 +0100 |
commit | 406cc9401c2a3f006cf0095ef8df7acbb2e95198 (patch) | |
tree | 4938275507c8385f53db76bf3c3bbaf8e27ff0cb | |
parent | 72c254699fb46efa2a14d249a67a654d23245c30 (diff) | |
download | cuttlefish_vmm-406cc9401c2a3f006cf0095ef8df7acbb2e95198.tar.gz |
Automate build in a container.
The script optionnaly check out source code, builds and
updates prebuild binaries.
Bug: b/301940641
Change-Id: Idf2e61e3527d5a0bf945e825a3a04554e9fb65e2
-rwxr-xr-x | qemu/scripts/rebuild_in_container.sh | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/qemu/scripts/rebuild_in_container.sh b/qemu/scripts/rebuild_in_container.sh new file mode 100755 index 0000000..0643a11 --- /dev/null +++ b/qemu/scripts/rebuild_in_container.sh @@ -0,0 +1,70 @@ +#!/bin/sh +# Starts an isolated build in a container +set -e + +FROM_EXISTING_SOURCES=0 + +while [[ $# -gt 0 ]]; do + case $1 in + --from_existing_sources) + FROM_EXISTING_SOURCES=1 + shift + ;; + *) + echo "Build QEMU from sources in a container." + echo + echo "usage: $0 [--from_existing_sources]" + echo + echo "Options:" + echo " --from_existing_sources: Do not checkout sources with repo," + echo " and do not copy the prebuild back to the source directory." + shift + exit 1 + ;; + esac +done + +readonly SCRIPT_DIR="$(realpath "$(dirname "$0")")" +readonly GIT_ROOT="$(realpath "${SCRIPT_DIR}/../..")" +readonly WORK_DIR="/tmp/qemu-build-output" + +echo "Clear the working directory: ${WORK_DIR}" +rm -rf "${WORK_DIR}" +mkdir -p "${WORK_DIR}" + +if [ "$FROM_EXISTING_SOURCES" -eq 0 ]; then + readonly SRC_DIR="${HOME}/qemu-build-checkout" + echo "Check out sources with repo at: ${SRC_DIR}" + rm -rf "${SRC_DIR}" + mkdir -p "${SRC_DIR}" + repo init --manifest-url "${GIT_ROOT}" \ + --manifest-name=qemu/manifest.xml + + repo sync +else + echo "Reuse existing source checkout at: ${SRC_DIR}" + readonly SRC_DIR="$GIT_ROOT" +fi + +readonly COMMAND="apt-get update && \ +apt-get -qy install autoconf libtool texinfo libgbm-dev && \ +/src/qemu/third_party/python/bin/python3 /src/qemu/scripts/rebuild.py --build-dir /out" + +podman run --name qemu-build \ + --replace \ + --pids-limit=-1 \ + --volume "${SRC_DIR}:/src:O" \ + --volume "${WORK_DIR}:/out" \ + docker.io/debian:10-slim \ + bash -c "${COMMAND}" + +if [ "$FROM_EXISTING_SOURCES" -eq 0 ]; then + readonly DEST="${GIT_ROOT}/qemu/x86_64-linux-gnu" + echo "Overwrite prebuild at: ${DEST}" + rm -rf "${DEST}/*" + tar -xvf "${WORK_DIR}/qemu-portable.tar.gz" -C "${DEST}" + +fi + +echo "Binary available at: ${WORK_DIR}/qemu-portable/bin" +echo "Done."
\ No newline at end of file |