CMakeLists.txt 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. PROJECT(subconverter LANGUAGES CXX)
  2. SET(BUILD_TARGET_NAME ${PROJECT_NAME})
  3. CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
  4. SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
  5. INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include/")
  6. IF(NOT CMAKE_BUILD_TYPE)
  7. SET(CMAKE_BUILD_TYPE Release)
  8. ENDIF()
  9. SET(CMAKE_CXX_STANDARD 20)
  10. IF(NOT MSVC)
  11. ADD_COMPILE_OPTIONS(-Wall -Wextra -Wno-unused-parameter -Wno-unused-result)
  12. ELSE()
  13. ADD_COMPILE_OPTIONS(/W4)
  14. ENDIF()
  15. #remove std::regex support since it is not compatible with group modifiers and slow
  16. #OPTION(USING_STD_REGEX "Use std::regex from C++ library instead of PCRE2." OFF)
  17. OPTION(USING_MALLOC_TRIM "Call malloc_trim after processing request to lower memory usage (Your system must support malloc_trim)." OFF)
  18. #now using internal MD5 calculation
  19. #OPTION(USING_MBEDTLS "Use mbedTLS instead of OpenSSL for MD5 calculation." OFF)
  20. OPTION(BUILD_STATIC_LIBRARY "Build a static library containing only the essential part." OFF)
  21. INCLUDE(CheckCXXSourceCompiles)
  22. CHECK_CXX_SOURCE_COMPILES(
  23. "
  24. #include<string>
  25. int main(){std::to_string(0);}
  26. " HAVE_TO_STRING)
  27. IF(NOT BUILD_STATIC_LIBRARY)
  28. ADD_EXECUTABLE(${BUILD_TARGET_NAME}
  29. src/generator/config/nodemanip.cpp
  30. src/generator/config/ruleconvert.cpp
  31. src/generator/config/subexport.cpp
  32. src/generator/template/templates.cpp
  33. src/handler/interfaces.cpp
  34. src/handler/multithread.cpp
  35. src/handler/upload.cpp
  36. src/handler/webget.cpp
  37. src/handler/settings.cpp
  38. src/main.cpp
  39. src/parser/infoparser.cpp
  40. src/parser/subparser.cpp
  41. src/script/cron.cpp
  42. src/script/script_quickjs.cpp
  43. # src/server/webserver_libevent.cpp
  44. src/server/webserver_httplib.cpp
  45. src/utils/base64/base64.cpp
  46. src/utils/codepage.cpp
  47. src/utils/file.cpp
  48. src/utils/logger.cpp
  49. src/utils/md5/md5.cpp
  50. src/utils/network.cpp
  51. src/utils/regexp.cpp
  52. src/utils/string.cpp
  53. src/utils/system.cpp
  54. src/utils/urlencode.cpp)
  55. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE src)
  56. TARGET_LINK_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${CMAKE_SOURCE_DIR})
  57. FIND_PACKAGE(PkgConfig REQUIRED)
  58. SET(THREADS_PREFER_PTHREAD_FLAG ON)
  59. FIND_PACKAGE(Threads REQUIRED)
  60. TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} ${CMAKE_THREAD_LIBS_INIT})
  61. #PKG_CHECK_MODULES(LIBEVENT libevent>=2.1.10 REQUIRED)
  62. #FIND_PATH(LIBEVENT_INCLUDE_DIR NAMES event.h PATHS ${LIBEVENT_INCLUDE_DIRS})
  63. #FIND_LIBRARY(LIBEVENT_LIBRARY NAMES event PATHS ${LIBEVENT_LIBRARY_DIRS})
  64. #TARGET_LINK_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${LIBEVENT_LIBRARY_DIRS})
  65. #TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${LIBEVENT_INCLUDE_DIR})
  66. #TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} ${LIBEVENT_LIBRARY})
  67. FIND_PACKAGE(CURL 7.54.0 REQUIRED)
  68. TARGET_LINK_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${CURL_LIBRARY_DIRS})
  69. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${CURL_INCLUDE_DIRS})
  70. TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} CURL::libcurl)
  71. TARGET_COMPILE_DEFINITIONS(${BUILD_TARGET_NAME} PRIVATE -DCURL_STATICLIB)
  72. FIND_PACKAGE(Rapidjson REQUIRED)
  73. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${RAPIDJSON_INCLUDE_DIRS})
  74. FIND_PACKAGE(toml11 REQUIRED)
  75. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${TOML11_INCLUDE_DIRS})
  76. PKG_CHECK_MODULES(YAML_CPP yaml-cpp>=0.6.3 REQUIRED)
  77. FIND_LIBRARY(YAML_CPP_LIBRARY NAMES yaml-cpp yaml-cppd PATHS ${YAML_CPP_LIBRARY_DIRS})
  78. TARGET_LINK_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${YAML_CPP_LIBRARY_DIRS})
  79. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${YAML_CPP_INCLUDE_DIRS})
  80. TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} ${YAML_CPP_LIBRARY})
  81. TARGET_COMPILE_DEFINITIONS(${BUILD_TARGET_NAME} PRIVATE -DYAML_CPP_STATIC_DEFINE)
  82. FIND_PACKAGE(PCRE2 REQUIRED)
  83. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${PCRE2_INCLUDE_DIRS})
  84. TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} ${PCRE2_LIBRARY})
  85. TARGET_COMPILE_DEFINITIONS(${BUILD_TARGET_NAME} PRIVATE -DPCRE2_STATIC)
  86. FIND_PACKAGE(QuickJS REQUIRED)
  87. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${QUICKJS_INCLUDE_DIRS})
  88. TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} ${QUICKJS_LIBRARIES})
  89. FIND_PACKAGE(LibCron REQUIRED)
  90. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${LIBCRON_INCLUDE_DIRS})
  91. TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} ${LIBCRON_LIBRARIES})
  92. IF(WIN32)
  93. TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} wsock32 ws2_32)
  94. ELSE()
  95. INCLUDE(GNUInstallDirs)
  96. INSTALL(TARGETS ${BUILD_TARGET_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}/${BUILD_TARGET_NAME})
  97. INSTALL(DIRECTORY base/ DESTINATION ${CMAKE_INSTALL_BINDIR}/${BUILD_TARGET_NAME} FILES_MATCHING PATTERN "*")
  98. ENDIF()
  99. ELSE() #BUILD_STATIC_LIBRARY
  100. ADD_LIBRARY(${BUILD_TARGET_NAME} STATIC
  101. src/generator/config/ruleconvert.cpp
  102. src/generator/config/subexport.cpp
  103. src/generator/template/templates.cpp
  104. src/lib/wrapper.cpp
  105. src/parser/subparser.cpp
  106. src/utils/base64/base64.cpp
  107. src/utils/codepage.cpp
  108. src/utils/logger.cpp
  109. src/utils/md5/md5.cpp
  110. src/utils/network.cpp
  111. src/utils/regexp.cpp
  112. src/utils/string.cpp
  113. src/utils/urlencode.cpp)
  114. TARGET_COMPILE_DEFINITIONS(${BUILD_TARGET_NAME} PRIVATE -DNO_JS_RUNTIME -DNO_WEBGET)
  115. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PUBLIC src)
  116. FIND_PACKAGE(Rapidjson REQUIRED)
  117. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${RAPIDJSON_INCLUDE_DIRS})
  118. FIND_PACKAGE(PkgConfig REQUIRED)
  119. PKG_CHECK_MODULES(YAML_CPP yaml-cpp>=0.6.3 REQUIRED)
  120. FIND_LIBRARY(YAML_CPP_LIBRARY NAMES yaml-cpp yaml-cppd PATHS ${YAML_CPP_LIBRARY_DIRS})
  121. TARGET_LINK_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${YAML_CPP_LIBRARY_DIRS})
  122. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${YAML_CPP_INCLUDE_DIRS})
  123. TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} PRIVATE ${YAML_CPP_LIBRARY})
  124. TARGET_COMPILE_DEFINITIONS(${BUILD_TARGET_NAME} PRIVATE -DYAML_CPP_STATIC_DEFINE)
  125. FIND_PACKAGE(PCRE2 REQUIRED)
  126. TARGET_INCLUDE_DIRECTORIES(${BUILD_TARGET_NAME} PRIVATE ${PCRE2_INCLUDE_DIRS})
  127. TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} PRIVATE ${PCRE2_LIBRARY})
  128. TARGET_COMPILE_DEFINITIONS(${BUILD_TARGET_NAME} PRIVATE -DPCRE2_STATIC)
  129. IF(WIN32)
  130. TARGET_LINK_LIBRARIES(${BUILD_TARGET_NAME} PRIVATE ws2_32)
  131. ENDIF()
  132. ENDIF() #BUILD_STATIC_LIBRARY
  133. IF(HAVE_TO_STRING)
  134. TARGET_COMPILE_DEFINITIONS(${BUILD_TARGET_NAME} PRIVATE -DHAVE_TO_STRING)
  135. ENDIF()
  136. IF(USING_MALLOC_TRIM)
  137. TARGET_COMPILE_DEFINITIONS(${BUILD_TARGET_NAME} PRIVATE -DMALLOC_TRIM)
  138. ENDIF()