Dev User hai 1 mes
pai
achega
02b6432057
Modificáronse 2 ficheiros con 50 adicións e 26 borrados
  1. 1 0
      .gitignore
  2. 49 26
      build.sh

+ 1 - 0
.gitignore

@@ -5,6 +5,7 @@
 /out/build/x64-Debug
 /.vs
 /build
+/.deps
 data/database.db
 data/metrics.db
 data/log

+ 49 - 26
build.sh

@@ -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