build.sh 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. curl
  29. tar
  30. )
  31. echo "==> apt deps"
  32. sudo apt-get update -qq
  33. sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "${APT_DEPS[@]}"
  34. mkdir -p "$DEPS_DIR"
  35. if [[ ! -e /usr/lib/x86_64-linux-gnu/libhpsocket.a \
  36. && ! -e /usr/local/lib/libhpsocket.a \
  37. && ! -e /lib/x86_64-linux-gnu/libhpsocket.a ]]; then
  38. echo "==> install HPSocket"
  39. if [[ ! -d "$DEPS_DIR/hpsocket-linux/.git" ]]; then
  40. rm -rf "$DEPS_DIR/hpsocket-linux"
  41. git clone --depth 1 "$HPSOCKET_GIT" "$DEPS_DIR/hpsocket-linux"
  42. fi
  43. cmake -S "$DEPS_DIR/hpsocket-linux" -B "$DEPS_DIR/hpsocket-linux/build"
  44. cmake --build "$DEPS_DIR/hpsocket-linux/build" -j"$JOBS"
  45. sudo cp "$DEPS_DIR/hpsocket-linux/build/libhpsocket.a" /usr/lib/x86_64-linux-gnu/
  46. sudo rm -rf /usr/local/include/HPSocket
  47. sudo mkdir -p /usr/local/include/HPSocket
  48. sudo cp "$DEPS_DIR/hpsocket-linux"/hpsocket/* /usr/local/include/HPSocket/
  49. fi
  50. if [[ ! -e /usr/local/lib/libylib.a && ! -e /usr/lib/x86_64-linux-gnu/libylib.a ]]; then
  51. echo "==> install ylib"
  52. if [[ ! -d "$DEPS_DIR/ylib/.git" ]]; then
  53. rm -rf "$DEPS_DIR/ylib"
  54. git clone --depth 1 "$YLIB_GIT" "$DEPS_DIR/ylib"
  55. fi
  56. chmod +x "$DEPS_DIR/ylib/build.sh"
  57. (cd "$DEPS_DIR/ylib" && ./build.sh)
  58. fi
  59. do_build() {
  60. cmake -S . -B "$BUILD_DIR"
  61. cmake --build "$BUILD_DIR" -j"$JOBS"
  62. echo "==> $BIN"
  63. }
  64. case "${1:-build}" in
  65. clean)
  66. rm -rf "$BUILD_DIR"
  67. ;;
  68. rebuild)
  69. rm -rf "$BUILD_DIR"
  70. do_build
  71. ;;
  72. run)
  73. shift || true
  74. [[ -x "$BIN" ]] || do_build
  75. exec "$BIN" "$@"
  76. ;;
  77. build|"")
  78. do_build
  79. ;;
  80. *)
  81. [[ -x "$BIN" ]] || do_build
  82. exec "$BIN" "$@"
  83. ;;
  84. esac