#!/bin/bash

ARCH="$(uname -m)"
pushd "$(dirname "$0")" > /dev/null 2>&1
OUT_DIR="$(pwd)/${ARCH}-linux-gnu"
popd > /dev/null 2>&1
LIB_PATH="${OUT_DIR}/lib"
BUILD_DIR=${HOME}/build
export THIRD_PARTY_ROOT="${BUILD_DIR}/third_party"
export PATH="${PATH}:${HOME}/bin"
export RUST_VERSION=1.32.0 RUSTFLAGS='--cfg hermetic'
SOURCE_DIRS=(.cargo build)
CHANGED_DURING_BUILD=("${SOURCE_DIRS[@]}" usr lib)

set -o errexit
set -x

install_packages() {
  sudo dpkg --add-architecture armhf
  sudo apt-get update
  sudo apt-get install -y \
      autoconf \
      automake \
      build-essential \
      crossbuild-essential-armhf \
      curl \
      gcc \
      g++ \
      git \
      libcap-dev \
      libdrm-dev \
      libfdt-dev \
      libegl1-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 # Needed to pacify autogen.sh for libepoxy
}

prepare_cargo() {
  cd
  rm -rf .cargo
  curl -LO "https://static.rust-lang.org/rustup/archive/1.14.0/$(uname -m)-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 target add armv7-unknown-linux-gnueabihf
  rustup component add rustfmt-preview
  rm rustup-init

  cat >>~/.cargo/config <<EOF
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
EOF
}

prepare_source() {
  mkdir -p "${THIRD_PARTY_ROOT}"
  cd "${THIRD_PARTY_ROOT}"
  # minijail does not exist in upstream linux distros.
  git clone https://android.googlesource.com/platform/external/minijail
  git clone https://android.googlesource.com/platform/external/minigbm \
    -b upstream-master
  sed 's/-Wall/-Wno-maybe-uninitialized/g' -i minigbm/Makefile
  # 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
  cd ..
  git clone https://android.googlesource.com/platform/external/virglrenderer \
    -b upstream-master
  git clone https://android.googlesource.com/platform/external/adhd \
    -b upstream-master
  mkdir -p "${BUILD_DIR}/platform"
  cd "${BUILD_DIR}/platform"
  git clone https://android.googlesource.com/platform/external/crosvm \
    -b upstream-master
}

save_source() {
  cd
  rm -rf clean-source.tgz
  tar cfvz clean-source.tgz "${SOURCE_DIRS[@]}"
}

restore_source() {
  rm -rf "${CHANGED_DURING_BUILD[@]}" "${OUT_DIR}"
  tar xfvmz clean-source.tgz
}

compile() {
  restore_source
  mkdir -p "${HOME}/lib" "${OUT_DIR}/bin" "${OUT_DIR}/lib"

  # Hack to make minigbm work
  rm -rf "${HOME}/usr"
  ln -s "${HOME}" "${HOME}/usr"

  cd "${THIRD_PARTY_ROOT}/minijail"
  make -j
  cp libminijail.so "${HOME}/lib/"
  cp libminijail.so "${LIB_PATH}/"

  cd "${THIRD_PARTY_ROOT}/minigbm"
  # The gbm used by upstream linux distros is not compatible with crosvm, which must use Chrome OS's
  # minigbm.
  local cpp_flags=()
  local make_flags=()
  local minigbm_drv=(${MINIGBM_DRV})
  for drv in "${minigbm_drv[@]}"; do
    cpp_flags+=(-D"DRV_${drv}")
    make_flags+=("DRV_${drv}"=1)
  done
  DESTDIR="${HOME}" make -j install \
    "${make_flags[@]}" \
    CPPFLAGS="${cpp_flags[*]}" \
    PKG_CONFIG=pkg-config
  cp ${HOME}/lib/libgbm.so.1 "${LIB_PATH}/"

  cd "${THIRD_PARTY_ROOT}/libepoxy"
  ./autogen.sh --prefix="${HOME}"
  make -j install
  cp "${HOME}"/lib/libepoxy.so.0 "${LIB_PATH}"/

  # Note: depends on libepoxy
  cd "${THIRD_PARTY_ROOT}/virglrenderer"
  ./autogen.sh --prefix=${HOME} PKG_CONFIG_PATH=${HOME}/lib/pkgconfig --disable-glx
  make -j install
  cp "${HOME}/lib/libvirglrenderer.so.0" "${LIB_PATH}"/

  #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

  source $HOME/.cargo/env
  cd "${BUILD_DIR}/platform/crosvm"

  RUSTFLAGS="-C link-arg=-Wl,-rpath,\$ORIGIN -C link-arg=-L${HOME}/lib" \
    cargo build --features gpu

  # Save the outputs
  cp Cargo.lock "${OUT_DIR}"
  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 build -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 | sort > "${OUT_DIR}/BUILD_INFO"
  echo Results in ${OUT_DIR}
}

primary_build() {
  rm -rf "${CHANGED_DURING_BUILD[@]}"

  install_packages

  prepare_cargo
  prepare_source
  save_source
  MINIGBM_DRV="I915 RADEON VC4" compile
}

secondary_build() {
  rm -rf "${CHANGED_DURING_BUILD[@]}"
  install_packages
  restore_source
  prepare_cargo
  save_source
  MINIGBM_DRV="RADEON VC4" compile
}

retry() {
  rm -rf "${CHANGED_DURING_BUILD[@]}"
  compile
}

if [[ $# -lt 1 ]]; then
  set primary_build
fi

case "$1" in
  primary_build) primary_build ;;
  secondary_build) secondary_build ;;
  retry) retry ;;
  *) echo usage: $0 'primary_build|secondary_build|retry' 1>&2
    exit 2
    ;;
esac
