#!/bin/bash
|
|
ARCH="$(uname -m)"
|
pushd "$(dirname "$0")" > /dev/null 2>&1
|
OUT_DIR="$(pwd)/${ARCH}"
|
popd > /dev/null 2>&1
|
LIB_PATH="${OUT_DIR}/lib64/crosvm"
|
mkdir -p "${LIB_PATH}"
|
|
BUILD_DIR=${HOME}/build
|
export THIRD_PARTY_ROOT="${BUILD_DIR}/third_party"
|
export PATH="${PATH}:${HOME}/bin"
|
mkdir -p "${THIRD_PARTY_ROOT}"
|
|
set -o errexit
|
set -x
|
|
sudo apt-get update
|
sudo apt-get install -y \
|
autoconf \
|
automake \
|
curl \
|
gcc \
|
g++ \
|
git \
|
libcap-dev \
|
libdrm-dev \
|
libfdt-dev \
|
libegl1-mesa-dev \
|
libgl1-mesa-dev \
|
libgles1-mesa-dev \
|
libgles2-mesa-dev \
|
libssl1.0-dev \
|
libtool \
|
libusb-1.0-0-dev \
|
libwayland-dev \
|
make \
|
nasm \
|
ninja-build \
|
pkg-config \
|
protobuf-compiler \
|
python3 \
|
xutils-dev
|
|
export RUST_VERSION=1.32.0 RUSTFLAGS='--cfg hermetic'
|
|
curl -LO "https://static.rust-lang.org/rustup/archive/1.14.0/x86_64-unknown-linux-gnu/rustup-init"
|
echo "0077ff9c19f722e2be202698c037413099e1188c0c233c12a2297bf18e9ff6e7 *rustup-init" | sha256sum -c -
|
chmod +x rustup-init
|
./rustup-init -y --no-modify-path --default-toolchain $RUST_VERSION
|
source $HOME/.cargo/env
|
rustup component add rustfmt-preview
|
rm rustup-init
|
|
cd "${THIRD_PARTY_ROOT}"
|
# minijail does not exist in upstream linux distros.
|
git clone https://android.googlesource.com/platform/external/minijail
|
cd minijail
|
make -j
|
mkdir -p "${HOME}/lib"
|
cp libminijail.so "${HOME}/lib/"
|
cp libminijail.so "${LIB_PATH}/"
|
|
cd "${THIRD_PARTY_ROOT}"
|
# The gbm used by upstream linux distros is not compatible with crosvm, which must use Chrome OS's
|
# minigbm.
|
git clone https://android.googlesource.com/platform/external/minigbm \
|
-b upstream-master
|
cd minigbm
|
sed 's/-Wall/-Wno-maybe-uninitialized/g' -i Makefile
|
ln -s "${HOME}" "${HOME}/usr"
|
DESTDIR="${HOME}" make -j install
|
cp ${HOME}/lib/libgbm.so.1 "${LIB_PATH}/"
|
|
cd "${THIRD_PARTY_ROOT}"
|
set -x
|
# New libepoxy has EGL_KHR_DEBUG entry points needed by crosvm.
|
git clone https://android.googlesource.com/platform/external/libepoxy
|
cd libepoxy
|
git checkout 707f50e680ab4f1861b1e54ca6e2907aaca56c12
|
./autogen.sh --prefix="${HOME}"
|
make -j install
|
cp "${HOME}"/lib/libepoxy.so.0 "${LIB_PATH}"/
|
|
# Note: depends on libepoxy
|
cd "${THIRD_PARTY_ROOT}"
|
git clone https://android.googlesource.com/platform/external/virglrenderer \
|
-b upstream-master
|
cd virglrenderer
|
./autogen.sh --prefix=${HOME} PKG_CONFIG_PATH=${HOME}/lib/pkgconfig
|
make -j install
|
cp "${HOME}/lib/libvirglrenderer.so.0" "${LIB_PATH}"/
|
|
cd "${THIRD_PARTY_ROOT}"
|
git clone https://android.googlesource.com/platform/external/adhd \
|
-b upstream-master
|
|
#cd "${THIRD_PARTY_ROOT}"
|
# Install libtpm2 so that tpm2-sys/build.rs does not try to build it in place in
|
# the read-only source directory.
|
#git clone https://chromium.googlesource.com/chromiumos/third_party/tpm2 \
|
# && cd tpm2 \
|
# && git checkout 15260c8cd98eb10b4976d2161cd5cb9bc0c3adac \
|
# && make -j24
|
|
# Install librendernodehost
|
#RUN git clone https://chromium.googlesource.com/chromiumos/platform2 \
|
# && cd platform2 \
|
# && git checkout 226fc35730a430344a68c34d7fe7d613f758f417 \
|
# && cd rendernodehost \
|
# && gcc -c src.c -o src.o \
|
# && ar rcs librendernodehost.a src.o \
|
# && cp librendernodehost.a /lib
|
|
# Inform pkg-config where libraries we install are placed.
|
#COPY pkgconfig/* /usr/lib/pkgconfig
|
|
# Reduces image size and prevents accidentally using /scratch files
|
#RUN rm -r /scratch /usr/bin/meson
|
|
# The manual installation of shared objects requires an ld.so.cache refresh.
|
#RUN ldconfig
|
|
# Pull down repositories that crosvm depends on to cros checkout-like locations.
|
#ENV CROS_ROOT=/
|
#ENV THIRD_PARTY_ROOT=$CROS_ROOT/third_party
|
#RUN mkdir -p $THIRD_PARTY_ROOT
|
#ENV PLATFORM_ROOT=$CROS_ROOT/platform
|
#RUN mkdir -p $PLATFORM_ROOT
|
|
|
|
mkdir -p "${BUILD_DIR}/platform"
|
cd "${BUILD_DIR}/platform"
|
git clone https://android.googlesource.com/platform/external/crosvm \
|
-b upstream-master
|
|
cd "${BUILD_DIR}/platform/crosvm"
|
|
RUSTFLAGS="-C link-arg=-Wl,-rpath,\$ORIGIN/../lib64/crosvm -C link-arg=-L${HOME}/lib" \
|
cargo build --features gpu
|
|
# Save the outputs
|
mkdir -p "${OUT_DIR}"
|
cp Cargo.lock "${OUT_DIR}"
|
mkdir -p "${OUT_DIR}/bin/"
|
cp target/debug/crosvm "${OUT_DIR}/bin/"
|
|
|
cargo --version --verbose > "${OUT_DIR}/cargo_version.txt"
|
rustup show > "${OUT_DIR}/rustup_show.txt"
|
dpkg-query -W > "${OUT_DIR}/builder-packages.txt"
|
|
cd "${HOME}"
|
for i in $(find . -name .git -type d -print); do
|
dir="$(dirname "$i")"
|
pushd "${dir}" > /dev/null 2>&1
|
echo "${dir}" \
|
"$(git remote get-url "$(git remote show)")" \
|
"$(git rev-parse HEAD)"
|
popd > /dev/null 2>&1
|
done > "${OUT_DIR}/BUILD_INFO"
|
|
echo Results in ${OUT_DIR}
|