#!/bin/bash
# Copyright 2012 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

set -xe

# Default version must come first.
SSH_VERSIONS=( 10.6 8.6 )

ncpus=$(getconf _NPROCESSORS_ONLN || echo 2)

DEBUG=0
OFFICIAL_RELEASE=0

for i in $@; do
  case $i in
    "--debug")
      DEBUG=1
      ;;
    "--official-release")
      OFFICIAL_RELEASE=1
      ;;
    *)
      echo "usage: $0 [--debug]"
      exit 1
      ;;
  esac
done

cd "$(dirname "$0")"
mkdir -p output

# Build the toolchain packages.
tc_pkgs=(
  # Build tools.
  gnuconfig
  mandoc
  protobuf

  # WASM toolchain.
  binaryen
  wabt
  wasi-sdk
)
for tc_pkg in "${tc_pkgs[@]}"; do
  ./third_party/${tc_pkg}/build --toolchain build
done

# The plugin packages.
pkgs=(
  zlib
  openssl
  ldns
  $(printf 'openssh-%s ' "${SSH_VERSIONS[@]}")
)

./wassh-libc-sup/build --toolchain wasip1
for pkg in "${pkgs[@]}"; do
  ./third_party/${pkg}/build --toolchain wasip1
done

# Packages for mosh.
mosh_pkgs=(
  zlib
  openssl
  ncurses
  protobuf
  mosh
)
./wassh-libc-sup/build --toolchain wasip1-threads
for pkg in "${mosh_pkgs[@]}"; do
  ./third_party/${pkg}/build --toolchain wasip1-threads
done

# Install the WASM programs.
#
# We use -O2 as that seems to provide good enough shrinkage.  -O3/-O4 take
# much longer but don't produce singificnatly larger/smaller files.  -Os/-Oz
# also aren't that much smaller than -O2.  So use this pending more testing.
WASM_OPTS=()
if [[ ${DEBUG} == 1 ]]; then
  WASM_OPTS+=( -O0 )
else
  WASM_OPTS+=( -O2 )
fi

pushd output >/dev/null
cat <<EOF >Makefile.wasm-opt
# Only use single core because versions <102 are known to segfault, and upstream
# doesn't seem to have any idea if they actually fixed it, or if it just happens
# to mostly work now.
# https://github.com/WebAssembly/binaryen/issues/2273
#
# Also force single core because it significantly outperforms multicore runs due
# to some extreme internal threading overhead.
# https://github.com/WebAssembly/binaryen/issues/2740
export BINARYEN_CORES = 1

# Disable implicit rules we don't need.
MAKEFLAGS += --no-builtin-rules
.SUFFIXES:

WASM_OPTS = ${WASM_OPTS[*]}

WASM_OPT = ${PWD}/bin/wasm-opt

all:
EOF
emit_wasm_opt_rule() {
  local src="$1"
  local dst="$2"
  (
    echo "all: ${dst}"
    echo "${dst}: ${src}"
    printf '\t$(WASM_OPT) ${WASM_OPTS} $< -o $@\n'
  ) >>Makefile.wasm-opt
}
first="true"
for version in "${SSH_VERSIONS[@]}"; do
  if [[ "${first}" == "true" ]]; then
    first=
    dir="plugin/wasm"
  else
    dir+="-openssh-${version}"
  fi
  mkdir -p "${dir}"

  for prog in scp sftp ssh ssh-keygen; do
    emit_wasm_opt_rule \
      build/wasm32-wasip1/openssh-${version}*/work/openssh-*/${prog} \
      "${dir}/${prog}.wasm"
  done
done
emit_wasm_opt_rule \
  build/wasm32-wasip1-threads/mosh-*/work/mosh-*/src/frontend/mosh-client \
  plugin/wasm/mosh-client.wasm
make -f Makefile.wasm-opt -j${ncpus} -O
popd >/dev/null

# Generate the final artifacts.
if [[ $DEBUG == 1 ]]; then
  tarname="debug.tar"
else
  tarname="release.tar"
fi

cd output
# Only spend extra time on this on official release builders.  All other modes
# can get by with slightly larger file.
if [[ "${OFFICIAL_RELEASE}" == 1 ]]; then
  comp_level="-9"
else
  comp_level="-0"
fi
# Use reproducible options since the inputs should be reproducible too.
(
find plugin/ -type f -print0
) | \
LC_ALL=C tar \
  --numeric-owner \
  --owner=0 --group=0 \
  --mtime="1970-01-01" \
  --sort=name \
  --null --files-from - \
  -cf - \
  | xz -T0 ${comp_level} >"${tarname}.xz"
