Dev User 1 ヶ月 前
コミット
b776e37a94
4 ファイル変更209 行追加17 行削除
  1. 6 0
      .gitignore
  2. 7 3
      CMakeLists.txt
  3. 0 14
      br.sh
  4. 196 0
      build.sh

+ 6 - 0
.gitignore

@@ -4,3 +4,9 @@
 
 /out/build/x64-Debug
 /.vs
+/build
+*.o
+*.a
+ngs
+data/database.db
+data/metrics.db

+ 7 - 3
CMakeLists.txt

@@ -39,6 +39,8 @@ link_directories(/usr/local/lib /usr/lib/x86_64-linux-gnu)
 
 target_link_libraries(ngs PRIVATE
     ylib
+    mysqlcppconn
+    mysqlclient
     hpsocket
     leveldb
     sqlite3
@@ -56,8 +58,10 @@ install(TARGETS ngs RUNTIME DESTINATION bin)
 add_custom_target(install-deps
     COMMAND sudo apt-get update
     COMMAND sudo DEBIAN_FRONTEND=noninteractive apt-get install -y
-            build-essential libpcre3-dev zlib1g-dev libssl-dev curl tar
-            libleveldb-dev
-    COMMENT "Install build dependencies"
+            build-essential cmake pkg-config
+            libpcre3-dev zlib1g-dev libssl-dev libsqlite3-dev
+            libleveldb-dev libmysqlcppconn-dev libmysqlclient-dev
+            curl tar
+    COMMENT "Install apt build dependencies (ylib and HPSocket must be preinstalled)"
     VERBATIM
 )

+ 0 - 14
br.sh

@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-set -euo pipefail
-
-ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-cd "$ROOT"
-
-BUILD_DIR="${BUILD_DIR:-build}"
-JOBS="${JOBS:-$(nproc 2>/dev/null || echo 4)}"
-
-rm -rf "$BUILD_DIR"
-cmake -S . -B "$BUILD_DIR"
-cmake --build "$BUILD_DIR" -j"$JOBS"
-
-exec "$BUILD_DIR/ngs" "$@"

+ 196 - 0
build.sh

@@ -0,0 +1,196 @@
+#!/usr/bin/env bash
+# NGS build helper
+# Usage: ./build.sh [command] [args...]
+set -euo pipefail
+
+ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+cd "$ROOT"
+
+BUILD_DIR="${BUILD_DIR:-build}"
+JOBS="${JOBS:-$(nproc 2>/dev/null || echo 4)}"
+BIN="$BUILD_DIR/ngs"
+
+# apt packages required to compile NGS (ylib / HPSocket are not packaged here)
+APT_DEPS=(
+    build-essential
+    cmake
+    pkg-config
+    libpcre3-dev
+    zlib1g-dev
+    libssl-dev
+    libsqlite3-dev
+    libleveldb-dev
+    libmysqlcppconn-dev
+    libmysqlclient-dev
+    curl
+    tar
+)
+
+die() { echo "error: $*" >&2; exit 1; }
+info() { echo "==> $*"; }
+
+have_cmd() { command -v "$1" >/dev/null 2>&1; }
+
+find_lib() {
+    local name="$1"
+    ldconfig -p 2>/dev/null | grep -q "lib${name}\\.so" && return 0
+    [[ -f "/usr/local/lib/lib${name}.a" || -f "/usr/local/lib/lib${name}.so" ]] && return 0
+    [[ -f "/usr/lib/x86_64-linux-gnu/lib${name}.a" || -f "/usr/lib/x86_64-linux-gnu/lib${name}.so" ]] && return 0
+    [[ -f "/usr/lib/lib${name}.a" || -f "/usr/lib/lib${name}.so" ]] && return 0
+    return 1
+}
+
+cmd_help() {
+    cat <<EOF
+NGS build script
+
+Usage:
+  ./build.sh                 Configure + build
+  ./build.sh build           Same as above
+  ./build.sh rebuild         Clean then build
+  ./build.sh clean           Remove build directory
+  ./build.sh deps            Install apt build dependencies
+  ./build.sh check           Verify toolchain and libraries
+  ./build.sh run [args...]   Build if needed, then run ngs
+  ./build.sh install         cmake --install into /usr/local (needs sudo)
+  ./build.sh help            Show this help
+
+Env:
+  BUILD_DIR   Build directory (default: build)
+  JOBS        Parallel jobs (default: nproc)
+
+Notes:
+  - Preinstall ylib headers/libs under /usr/local (libylib.a + headers).
+  - Preinstall HPSocket (libhpsocket + /usr/local/include/HPSocket).
+  - MySQL Connector/C++ (libmysqlcppconn) is required because ylib links it.
+EOF
+}
+
+cmd_deps() {
+    have_cmd apt-get || die "apt-get not found (Debian/Ubuntu required for deps)"
+    info "Installing apt packages: ${APT_DEPS[*]}"
+    sudo apt-get update
+    sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "${APT_DEPS[@]}"
+    info "Done. Ensure ylib and HPSocket are installed under /usr/local."
+}
+
+cmd_check() {
+    local ok=1
+    echo "Checking build prerequisites..."
+
+    for c in g++ cmake make; do
+        if have_cmd "$c"; then
+            echo "  [OK]   command: $c ($(command -v "$c"))"
+        else
+            echo "  [MISS] command: $c"
+            ok=0
+        fi
+    done
+
+    if [[ -d /usr/local/include/net && -d /usr/local/include/util ]]; then
+        echo "  [OK]   ylib headers: /usr/local/include/{net,util,...}"
+    else
+        echo "  [MISS] ylib headers under /usr/local/include (net/, util/, ...)"
+        ok=0
+    fi
+
+    if find_lib ylib; then
+        echo "  [OK]   library: ylib"
+    else
+        echo "  [MISS] library: ylib (expect /usr/local/lib/libylib.a)"
+        ok=0
+    fi
+
+    if [[ -d /usr/local/include/HPSocket || -d /usr/include/HPSocket ]]; then
+        echo "  [OK]   HPSocket headers"
+    else
+        echo "  [MISS] HPSocket headers"
+        ok=0
+    fi
+
+    if find_lib hpsocket; then
+        echo "  [OK]   library: hpsocket"
+    else
+        echo "  [MISS] library: hpsocket"
+        ok=0
+    fi
+
+    for lib in mysqlcppconn mysqlclient sqlite3 leveldb ssl crypto z; do
+        if find_lib "$lib"; then
+            echo "  [OK]   library: $lib"
+        else
+            echo "  [MISS] library: $lib  (try: ./build.sh deps)"
+            ok=0
+        fi
+    done
+
+    if [[ -f /usr/include/cppconn/driver.h ]]; then
+        echo "  [OK]   header: cppconn/driver.h"
+    else
+        echo "  [MISS] header: cppconn/driver.h (libmysqlcppconn-dev)"
+        ok=0
+    fi
+
+    if [[ "$ok" -eq 1 ]]; then
+        info "All checks passed"
+        return 0
+    fi
+    die "prerequisite check failed"
+}
+
+cmd_clean() {
+    info "Removing $BUILD_DIR"
+    rm -rf "$BUILD_DIR"
+}
+
+cmd_build() {
+    cmd_check
+    info "Configuring ($BUILD_DIR)"
+    cmake -S . -B "$BUILD_DIR"
+    info "Building with -j$JOBS"
+    cmake --build "$BUILD_DIR" -j"$JOBS"
+    info "Binary: $BIN"
+}
+
+cmd_rebuild() {
+    cmd_clean
+    cmd_build
+}
+
+cmd_run() {
+    if [[ ! -x "$BIN" ]]; then
+        cmd_build
+    fi
+    info "Running $BIN $*"
+    exec "$BIN" "$@"
+}
+
+cmd_install() {
+    [[ -x "$BIN" ]] || cmd_build
+    info "Installing to system prefix (sudo)"
+    sudo cmake --install "$BUILD_DIR"
+}
+
+main() {
+    local cmd="${1:-build}"
+    if [[ $# -gt 0 ]]; then
+        shift
+    fi
+
+    case "$cmd" in
+        build)    cmd_build ;;
+        rebuild)  cmd_rebuild ;;
+        clean)    cmd_clean ;;
+        deps)     cmd_deps ;;
+        check)    cmd_check ;;
+        run)      cmd_run "$@" ;;
+        install)  cmd_install ;;
+        help|-h|--help) cmd_help ;;
+        *)
+            # Unknown first arg: treat as ngs runtime args (compat with old br.sh)
+            cmd_run "$cmd" "$@"
+            ;;
+    esac
+}
+
+main "$@"