|
|
@@ -5,13 +5,18 @@ 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
|
|
|
@@ -19,53 +24,71 @@ APT_DEPS=(
|
|
|
libleveldb-dev
|
|
|
libmysqlcppconn-dev
|
|
|
libmysqlclient-dev
|
|
|
+ libboost-dev
|
|
|
+ libmimalloc-dev
|
|
|
+ unixodbc-dev
|
|
|
+ libsoci-dev
|
|
|
+ libx11-dev
|
|
|
curl
|
|
|
tar
|
|
|
)
|
|
|
|
|
|
-need_apt=0
|
|
|
-for c in g++ cmake make; do
|
|
|
- command -v "$c" >/dev/null 2>&1 || need_apt=1
|
|
|
-done
|
|
|
-for pkg in "${APT_DEPS[@]}"; do
|
|
|
- dpkg -s "$pkg" >/dev/null 2>&1 || need_apt=1
|
|
|
-done
|
|
|
+echo "==> apt deps"
|
|
|
+sudo apt-get update -qq
|
|
|
+sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "${APT_DEPS[@]}"
|
|
|
+
|
|
|
+mkdir -p "$DEPS_DIR"
|
|
|
|
|
|
-if [[ "$need_apt" -eq 1 ]]; then
|
|
|
- echo "==> installing build deps"
|
|
|
- sudo apt-get update
|
|
|
- sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "${APT_DEPS[@]}"
|
|
|
+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"
|
|
|
+ sudo cp "$DEPS_DIR/hpsocket-linux/build/libhpsocket.a" /usr/lib/x86_64-linux-gnu/
|
|
|
+ sudo rm -rf /usr/local/include/HPSocket
|
|
|
+ sudo mkdir -p /usr/local/include/HPSocket
|
|
|
+ sudo 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"
|
|
|
- cmake -S . -B "$BUILD_DIR"
|
|
|
- cmake --build "$BUILD_DIR" -j"$JOBS"
|
|
|
- echo "==> $BIN"
|
|
|
+ do_build
|
|
|
;;
|
|
|
run)
|
|
|
shift || true
|
|
|
- if [[ ! -x "$BIN" ]]; then
|
|
|
- cmake -S . -B "$BUILD_DIR"
|
|
|
- cmake --build "$BUILD_DIR" -j"$JOBS"
|
|
|
- fi
|
|
|
+ [[ -x "$BIN" ]] || do_build
|
|
|
exec "$BIN" "$@"
|
|
|
;;
|
|
|
build|"")
|
|
|
- cmake -S . -B "$BUILD_DIR"
|
|
|
- cmake --build "$BUILD_DIR" -j"$JOBS"
|
|
|
- echo "==> $BIN"
|
|
|
+ do_build
|
|
|
;;
|
|
|
*)
|
|
|
- # treat as ngs args: build if needed, then run
|
|
|
- if [[ ! -x "$BIN" ]]; then
|
|
|
- cmake -S . -B "$BUILD_DIR"
|
|
|
- cmake --build "$BUILD_DIR" -j"$JOBS"
|
|
|
- fi
|
|
|
+ [[ -x "$BIN" ]] || do_build
|
|
|
exec "$BIN" "$@"
|
|
|
;;
|
|
|
esac
|