build.sh 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  4. cd "$ROOT"
  5. BUILD_DIR="${BUILD_DIR:-build}"
  6. DEPS_DIR="${DEPS_DIR:-$ROOT/.deps}"
  7. JOBS="${JOBS:-$(nproc 2>/dev/null || echo 4)}"
  8. BIN="$BUILD_DIR/ngs"
  9. HPSOCKET_GIT="${HPSOCKET_GIT:-https://git.ddtalk.net/1585346868/hpsocket-linux.git}"
  10. YLIB_GIT="${YLIB_GIT:-https://git.ddtalk.net/1585346868/ylib.git}"
  11. APT_DEPS=(
  12. build-essential
  13. cmake
  14. pkg-config
  15. git
  16. libpcre3-dev
  17. zlib1g-dev
  18. libssl-dev
  19. libsqlite3-dev
  20. libleveldb-dev
  21. libmysqlcppconn-dev
  22. libmysqlclient-dev
  23. libboost-dev
  24. libmimalloc-dev
  25. unixodbc-dev
  26. libsoci-dev
  27. libx11-dev
  28. libcurl4-openssl-dev
  29. curl
  30. tar
  31. )
  32. echo "==> apt deps"
  33. sudo apt-get update -qq
  34. sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "${APT_DEPS[@]}"
  35. mkdir -p "$DEPS_DIR"
  36. if [[ ! -e /usr/lib/x86_64-linux-gnu/libhpsocket.a \
  37. && ! -e /usr/local/lib/libhpsocket.a \
  38. && ! -e /lib/x86_64-linux-gnu/libhpsocket.a ]]; then
  39. echo "==> install HPSocket"
  40. if [[ ! -d "$DEPS_DIR/hpsocket-linux/.git" ]]; then
  41. rm -rf "$DEPS_DIR/hpsocket-linux"
  42. git clone --depth 1 "$HPSOCKET_GIT" "$DEPS_DIR/hpsocket-linux"
  43. fi
  44. cmake -S "$DEPS_DIR/hpsocket-linux" -B "$DEPS_DIR/hpsocket-linux/build"
  45. cmake --build "$DEPS_DIR/hpsocket-linux/build" -j"$JOBS"
  46. sudo cp "$DEPS_DIR/hpsocket-linux/build/libhpsocket.a" /usr/lib/x86_64-linux-gnu/
  47. sudo rm -rf /usr/local/include/HPSocket
  48. sudo mkdir -p /usr/local/include/HPSocket
  49. sudo cp "$DEPS_DIR/hpsocket-linux"/hpsocket/* /usr/local/include/HPSocket/
  50. fi
  51. if [[ ! -e /usr/local/lib/libylib.a && ! -e /usr/lib/x86_64-linux-gnu/libylib.a ]]; then
  52. echo "==> install ylib"
  53. if [[ ! -d "$DEPS_DIR/ylib/.git" ]]; then
  54. rm -rf "$DEPS_DIR/ylib"
  55. git clone --depth 1 "$YLIB_GIT" "$DEPS_DIR/ylib"
  56. fi
  57. chmod +x "$DEPS_DIR/ylib/build.sh"
  58. (cd "$DEPS_DIR/ylib" && ./build.sh)
  59. fi
  60. do_build() {
  61. cmake -S . -B "$BUILD_DIR"
  62. cmake --build "$BUILD_DIR" -j"$JOBS"
  63. echo "==> $BIN"
  64. }
  65. case "${1:-build}" in
  66. clean)
  67. rm -rf "$BUILD_DIR"
  68. ;;
  69. rebuild)
  70. rm -rf "$BUILD_DIR"
  71. do_build
  72. ;;
  73. run)
  74. shift || true
  75. [[ -x "$BIN" ]] || do_build
  76. exec "$BIN" "$@"
  77. ;;
  78. build|"")
  79. do_build
  80. ;;
  81. *)
  82. [[ -x "$BIN" ]] || do_build
  83. exec "$BIN" "$@"
  84. ;;
  85. esac