CMakeLists.txt 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. project(subconverter LANGUAGES CXX)
  2. cmake_minimum_required(VERSION 3.4)
  3. SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
  4. INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include/")
  5. IF(NOT CMAKE_BUILD_TYPE)
  6. SET(CMAKE_BUILD_TYPE Release)
  7. ENDIF()
  8. SET(CMAKE_CXX_STANDARD 17)
  9. IF (NOT MSVC)
  10. ADD_COMPILE_OPTIONS(-Wall -Wextra -Wno-unused-parameter -Wno-unused-result)
  11. ELSE()
  12. ADD_COMPILE_OPTIONS(/W4)
  13. ENDIF()
  14. OPTION(USING_STD_REGEX "Use std::regex from C++ library instead of PCRE2." OFF)
  15. OPTION(USING_MALLOC_TRIM "Call malloc_trim after processing request to lower memory usage (Your system must support malloc_trim)." OFF)
  16. OPTION(USING_MBEDTLS "Use mbedTLS instead of OpenSSL for MD5 calculation." OFF)
  17. INCLUDE(CheckCXXSourceCompiles)
  18. CHECK_CXX_SOURCE_COMPILES(
  19. "
  20. #include<string>
  21. void main(){std::to_string(0);}
  22. " HAVE_TO_STRING)
  23. IF(APPLE)
  24. ADD_DEFINITIONS(-D_MACOS)
  25. ENDIF()
  26. IF(HAVE_TO_STRING)
  27. ADD_DEFINITIONS(-DHAVE_TO_STRING)
  28. ENDIF()
  29. IF(USING_MALLOC_TRIM)
  30. ADD_DEFINITIONS(-DMALLOC_TRIM)
  31. ENDIF()
  32. ADD_EXECUTABLE(subconverter
  33. src/interfaces.cpp
  34. src/logger.cpp
  35. src/main.cpp
  36. src/misc.cpp
  37. src/multithread.cpp
  38. src/nodemanip.cpp
  39. src/rapidjson_extra.cpp
  40. src/speedtestutil.cpp
  41. src/subexport.cpp
  42. src/webget.cpp
  43. src/webserver_libevent.cpp)
  44. INCLUDE_DIRECTORIES(src)
  45. LINK_DIRECTORIES(${CMAKE_SOURCE_DIR})
  46. FIND_PACKAGE(PkgConfig REQUIRED)
  47. SET(THREADS_PREFER_PTHREAD_FLAG ON)
  48. FIND_PACKAGE(Threads REQUIRED)
  49. TARGET_LINK_LIBRARIES(subconverter ${CMAKE_THREAD_LIBS_INIT})
  50. PKG_CHECK_MODULES(LIBEVENT libevent REQUIRED)
  51. FIND_PATH(LIBEVENT_INCLUDE_DIR NAMES event.h PATHS ${LIBEVENT_INCLUDE_DIRS})
  52. FIND_LIBRARY(LIBEVENT_LIBRARY NAMES event PATHS ${LIBEVENT_LIBRARY_DIRS})
  53. LINK_DIRECTORIES(${LIBEVENT_LIBRARY_DIRS})
  54. INCLUDE_DIRECTORIES(${LIBEVENT_INCLUDE_DIR})
  55. TARGET_LINK_LIBRARIES(subconverter ${LIBEVENT_LIBRARY})
  56. FIND_PACKAGE(CURL 7.54.0 REQUIRED)
  57. INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS})
  58. TARGET_LINK_LIBRARIES(subconverter ${CURL_LIBRARIES})
  59. ADD_DEFINITIONS(-DCURL_STATICLIB)
  60. IF(USING_MBEDTLS STREQUAL "ON")
  61. FIND_PACKAGE(MbedTLS REQUIRED)
  62. INCLUDE_DIRECTORIES(${MBEDTLS_INCLUDE_DIRS})
  63. TARGET_LINK_LIBRARIES(subconverter ${MBEDCRYPTO_LIBRARY})
  64. ADD_DEFINITIONS(-DUSE_MBEDTLS)
  65. ELSE()
  66. FIND_PACKAGE(OpenSSL 1.1.0 REQUIRED)
  67. INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
  68. TARGET_LINK_LIBRARIES(subconverter ${OPENSSL_LIBRARIES})
  69. ENDIF()
  70. FIND_PACKAGE(Rapidjson REQUIRED)
  71. INCLUDE_DIRECTORIES(${RAPIDJSON_INCLUDE_DIRS})
  72. PKG_CHECK_MODULES(YAML_CPP yaml-cpp REQUIRED)
  73. FIND_LIBRARY(YAML_CPP_LIBRARY NAMES yaml-cpp yaml-cppd PATHS ${YAML_CPP_LIBRARY_DIRS})
  74. LINK_DIRECTORIES(${YAML_CPP_LIBRARY_DIRS})
  75. INCLUDE_DIRECTORIES(${YAML_CPP_INCLUDE_DIRS})
  76. TARGET_LINK_LIBRARIES(subconverter ${YAML_CPP_LIBRARY})
  77. IF(USING_STD_REGEX STREQUAL "ON")
  78. ADD_DEFINITIONS(-DUSE_STD_REGEX)
  79. ELSE()
  80. FIND_PACKAGE(PCRE2 REQUIRED)
  81. INCLUDE_DIRECTORIES(${PCRE2_INCLUDE_DIRS})
  82. TARGET_LINK_LIBRARIES(subconverter ${PCRE2_LIBRARY})
  83. ADD_DEFINITIONS(-DPCRE2_STATIC)
  84. ENDIF()
  85. IF(WIN32)
  86. TARGET_LINK_LIBRARIES(subconverter wsock32 ws2_32)
  87. ELSE()
  88. INCLUDE(GNUInstallDirs)
  89. INSTALL(TARGETS subconverter DESTINATION ${CMAKE_INSTALL_BINDIR}/subconverter)
  90. INSTALL(DIRECTORY base/ DESTINATION ${CMAKE_INSTALL_BINDIR}/subconverter FILES_MATCHING PATTERN "*")
  91. ENDIF()