#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$ROOT" BUILD_DIR="${BUILD_DIR:-build}" DEPS_DIR="${DEPS_DIR:-$ROOT/.deps}" JOBS="${JOBS:-$(nproc 2>/dev/null || echo 4)}" BIN="$BUILD_DIR/ngs" HPSOCKET_GIT="${HPSOCKET_GIT:-https://git.ddtalk.net/1585346868/hpsocket-linux.git}" YLIB_GIT="${YLIB_GIT:-https://git.ddtalk.net/1585346868/ylib.git}" APT_DEPS=( build-essential cmake pkg-config git libpcre3-dev zlib1g-dev libssl-dev libsqlite3-dev libleveldb-dev libmysqlcppconn-dev libmysqlclient-dev libboost-dev libmimalloc-dev unixodbc-dev libsoci-dev libx11-dev libcurl4-openssl-dev curl tar ) echo "==> apt deps" apt-get update -qq DEBIAN_FRONTEND=noninteractive apt-get install -y "${APT_DEPS[@]}" mkdir -p "$DEPS_DIR" if [[ ! -e /usr/lib/x86_64-linux-gnu/libhpsocket.a \ && ! -e /usr/local/lib/libhpsocket.a \ && ! -e /lib/x86_64-linux-gnu/libhpsocket.a ]]; then echo "==> install HPSocket" if [[ ! -d "$DEPS_DIR/hpsocket-linux/.git" ]]; then rm -rf "$DEPS_DIR/hpsocket-linux" git clone --depth 1 "$HPSOCKET_GIT" "$DEPS_DIR/hpsocket-linux" fi cmake -S "$DEPS_DIR/hpsocket-linux" -B "$DEPS_DIR/hpsocket-linux/build" cmake --build "$DEPS_DIR/hpsocket-linux/build" -j"$JOBS" cp "$DEPS_DIR/hpsocket-linux/build/libhpsocket.a" /usr/lib/x86_64-linux-gnu/ rm -rf /usr/local/include/HPSocket mkdir -p /usr/local/include/HPSocket cp "$DEPS_DIR/hpsocket-linux"/hpsocket/* /usr/local/include/HPSocket/ fi if [[ ! -e /usr/local/lib/libylib.a && ! -e /usr/lib/x86_64-linux-gnu/libylib.a ]]; then echo "==> install ylib" if [[ ! -d "$DEPS_DIR/ylib/.git" ]]; then rm -rf "$DEPS_DIR/ylib" git clone --depth 1 "$YLIB_GIT" "$DEPS_DIR/ylib" fi chmod +x "$DEPS_DIR/ylib/build.sh" (cd "$DEPS_DIR/ylib" && ./build.sh) fi do_build() { cmake -S . -B "$BUILD_DIR" cmake --build "$BUILD_DIR" -j"$JOBS" echo "==> $BIN" } case "${1:-build}" in clean) rm -rf "$BUILD_DIR" ;; rebuild) rm -rf "$BUILD_DIR" do_build ;; run) shift || true [[ -x "$BIN" ]] || do_build exec "$BIN" "$@" ;; build|"") do_build ;; *) [[ -x "$BIN" ]] || do_build exec "$BIN" "$@" ;; esac