CMakeLists.txt 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. cmake_minimum_required(VERSION 3.16)
  2. project(ngs LANGUAGES CXX)
  3. set(CMAKE_CXX_STANDARD 17)
  4. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  5. set(CMAKE_CXX_EXTENSIONS OFF)
  6. add_definitions(-DHPSOCKET_STATIC_LIB)
  7. add_executable(ngs
  8. src/main.cpp
  9. src/utils.cpp
  10. src/api/api_server.cpp
  11. src/store/store.cpp
  12. src/system/metrics.cpp
  13. src/system/metrics_history.cpp
  14. src/system/process.cpp
  15. src/system/shell.cpp
  16. src/files/files.cpp
  17. src/tasks/tasks.cpp
  18. src/schedule/schedule.cpp
  19. src/software/software.cpp
  20. src/software/nginx/nginx.cpp
  21. src/software/fastweb/fastweb.cpp
  22. src/software/mysql/mysql.cpp
  23. src/software/redis/redis.cpp
  24. src/website/website.cpp
  25. src/ssl/acme.cpp
  26. src/auth/auth.cpp
  27. src/weblog/weblog.cpp
  28. src/selfupdate/selfupdate.cpp
  29. )
  30. target_include_directories(ngs PRIVATE
  31. ${CMAKE_CURRENT_SOURCE_DIR}/src
  32. /usr/local/include
  33. )
  34. target_compile_options(ngs PRIVATE -Wall -Wextra)
  35. target_compile_definitions(ngs PRIVATE
  36. NGS_SOURCE_DIR="${CMAKE_SOURCE_DIR}"
  37. NGS_BINARY_DIR="${CMAKE_BINARY_DIR}"
  38. )
  39. list(APPEND CMAKE_LIBRARY_PATH /usr/local/lib /usr/lib/x86_64-linux-gnu /usr/lib)
  40. # Prefer shared mysqlcppconn so we do not require linkable libmysqlclient at build time
  41. # (libmysqlcppconn.so already DT_NEEDED libmysqlclient.so.*).
  42. set(_ngs_saved_suffixes "${CMAKE_FIND_LIBRARY_SUFFIXES}")
  43. set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
  44. find_library(MYSQLCPPCONN_LIB NAMES mysqlcppconn)
  45. set(CMAKE_FIND_LIBRARY_SUFFIXES "${_ngs_saved_suffixes}")
  46. if(NOT MYSQLCPPCONN_LIB)
  47. find_library(MYSQLCPPCONN_LIB NAMES mysqlcppconn REQUIRED)
  48. endif()
  49. find_library(MYSQLCLIENT_LIB NAMES mysqlclient)
  50. find_library(YLIB_LIB NAMES ylib REQUIRED)
  51. find_library(HPSOCKET_LIB NAMES hpsocket REQUIRED)
  52. find_library(LEVELDB_LIB NAMES leveldb REQUIRED)
  53. find_library(SQLITE3_LIB NAMES sqlite3 REQUIRED)
  54. find_library(SSL_LIB NAMES ssl REQUIRED)
  55. find_library(CRYPTO_LIB NAMES crypto REQUIRED)
  56. find_library(Z_LIB NAMES z REQUIRED)
  57. find_library(X11_LIB NAMES X11 REQUIRED)
  58. find_library(CURL_LIB NAMES curl REQUIRED)
  59. set(NGS_LIBS
  60. ${YLIB_LIB}
  61. ${MYSQLCPPCONN_LIB}
  62. ${HPSOCKET_LIB}
  63. ${LEVELDB_LIB}
  64. ${SQLITE3_LIB}
  65. ${SSL_LIB}
  66. ${CRYPTO_LIB}
  67. ${Z_LIB}
  68. ${X11_LIB}
  69. ${CURL_LIB}
  70. pthread
  71. dl
  72. rt
  73. util
  74. stdc++fs
  75. )
  76. # Needed when linking a static libmysqlcppconn; optional for the shared .so case.
  77. if(MYSQLCLIENT_LIB)
  78. list(APPEND NGS_LIBS ${MYSQLCLIENT_LIB})
  79. elseif(MYSQLCPPCONN_LIB MATCHES "\\.(a)$")
  80. message(FATAL_ERROR
  81. "libmysqlcppconn is static but libmysqlclient was not found. "
  82. "Install libmysqlclient-dev (or ./build.sh deps).")
  83. endif()
  84. target_link_libraries(ngs PRIVATE ${NGS_LIBS})
  85. message(STATUS "mysqlcppconn: ${MYSQLCPPCONN_LIB}")
  86. if(MYSQLCLIENT_LIB)
  87. message(STATUS "mysqlclient: ${MYSQLCLIENT_LIB}")
  88. else()
  89. message(STATUS "mysqlclient: (not found, using shared mysqlcppconn runtime dep)")
  90. endif()
  91. install(TARGETS ngs RUNTIME DESTINATION bin)
  92. add_custom_target(install-deps
  93. COMMAND sudo apt-get update
  94. COMMAND sudo DEBIAN_FRONTEND=noninteractive apt-get install -y
  95. build-essential cmake pkg-config
  96. libpcre3-dev zlib1g-dev libssl-dev libsqlite3-dev
  97. libleveldb-dev libmysqlcppconn-dev libmysqlclient-dev
  98. libcurl4-openssl-dev curl tar
  99. COMMENT "Install apt build dependencies (ylib and HPSocket must be preinstalled)"
  100. VERBATIM
  101. )