123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #!/usr/bin/env bash
- set -e
- interactive_pkgs=libsdl2-dev
- gem5=false
- qemu=true
- submodules='buildroot linux'
- y=
- while getopts gpqt OPT; do
- case "$OPT" in
- g)
- gem5=true
- ;;
- p)
- submodules="$submodules parsec-benchmark/parsec-benchmark"
- ;;
- q)
- qemu=false
- ;;
- t)
- interactive_pkgs=
- y=-y
- ;;
- esac
- done
- shift $(($OPTIND - 1))
- ## apt-get
- pkgs="\
- automake \
- bc \
- build-essential \
- coreutils \
- cpio \
- expect \
- git \
- moreutils \
- tmux \
- unzip \
- vinagre \
- wget \
- "
- if "$gem5"; then
- pkgs="$pkgs \
- ccache \
- gcc-aarch64-linux-gnu \
- gcc-arm-linux-gnueabi \
- libgoogle-perftools-dev \
- protobuf-compiler \
- python-dev \
- python-pip \
- scons \
- "
- fi
- command -v apt-get >/dev/null 2>&1 || {
- cat <<EOF
- apt-get not found. You're on your own for installing dependencies.
- On Ubuntu they are:
- $pkgs
- EOF
- exit 0
- }
- # Without this started failing in kernel 4.15 with:
- # Makefile:932: *** "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel". Stop.
- pkgs="$pkgs libelf-dev"
- # https://stackoverflow.com/questions/20010199/determining-if-a-process-runs-inside-lxc-docker
- if [ -f /.dockerenv ]; then
- # --jobs is not available in git 2.7.4 from Ubuntu 16.04.
- gitjobs=
- mysudo=
- # https://askubuntu.com/questions/496549/error-you-must-put-some-source-uris-in-your-sources-list
- sed -Ei 's/^# deb-src/deb-src/' /etc/apt/sources.list
- y=-y
- else
- gitjobs="--jobs $(nproc)"
- mysudo=sudo
- fi
- $mysudo apt-get update $y
- # Building SDL for QEMU in Buildroot was rejected upstream because it adds many dependencies:
- # https://patchwork.ozlabs.org/patch/770684/
- # We are just using the host SDL for now, if it causes too much problems we might remove it.
- # libsdl2-dev needs to be installed separatedly from sudo apt-get build-dep qemu
- # because Ubuntu 16.04's QEMU uses SDL 1.
- $mysudo apt-get install $y \
- $pkgs \
- $interactive_pkgs \
- ;
- if "$qemu"; then
- $mysudo apt-get build-dep $y qemu
- fi
- if "$gem5"; then
- # Generate graphs of config.ini under m5out.
- pip install --user pydot
- fi
- ## Submodules
- if "$qemu"; then
- submodules="$submodules qemu"
- fi
- if "$gem5"; then
- submodules="$submodules gem5/gem5"
- fi
- (
- set -e
- # Shallow cloning saves a considerable amount of time, specially because of the linux kernel.
- # However, git submodules are buggy as usual, and this is the best way I've found to get it done:
- # https://stackoverflow.com/questions/2144406/git-shallow-submodules/47374702#47374702
- # In particular:
- # - `shallow = true` on the submodule has no effect for the non default educational branches of our submodules
- # - QEMU's submodules point to commits that are neither under branches nor tags, and so `--shallow-submodules` fails
- git submodule update --depth 1 $gitjobs --init -- $submodules
- if "$qemu"; then
- cd qemu
- git submodule update --init --recursive
- fi
- ) &
- # https://unix.stackexchange.com/questions/65532/why-does-set-e-not-work-inside-subshells-with-parenthesis-followed-by-an-or
- wait $! || git submodule update --init --recursive -- $submodules
|