You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CMakeLists.txt 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. MACRO(_AddModulesForced MLIST)
  2. # Generate unique string for this build
  3. SET(MODULES_C "${CMAKE_CURRENT_BINARY_DIR}/modules.c")
  4. FILE(WRITE "${MODULES_C}"
  5. "#include \"rspamd.h\"\n")
  6. # Handle even old cmake
  7. LIST(LENGTH ${MLIST} MLIST_COUNT)
  8. MATH(EXPR MLIST_MAX ${MLIST_COUNT}-1)
  9. FOREACH(MOD_IDX RANGE ${MLIST_MAX})
  10. LIST(GET ${MLIST} ${MOD_IDX} MOD)
  11. FILE(APPEND "${MODULES_C}" "extern module_t ${MOD}_module;\n")
  12. ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
  13. FILE(APPEND "${MODULES_C}" "\n\nmodule_t *modules[] = {\n")
  14. FOREACH(MOD_IDX RANGE ${MLIST_MAX})
  15. LIST(GET ${MLIST} ${MOD_IDX} MOD)
  16. FILE(APPEND "${MODULES_C}" "&${MOD}_module,\n")
  17. ENDFOREACH(MOD_IDX RANGE ${MLIST_MAX})
  18. FILE(APPEND "${MODULES_C}" "NULL\n};\n")
  19. ENDMACRO(_AddModulesForced MLIST)
  20. MACRO(_AddWorkersForced WLIST)
  21. SET(WORKERS_C "${CMAKE_CURRENT_BINARY_DIR}/workers.c")
  22. FILE(WRITE "${WORKERS_C}"
  23. "#include \"rspamd.h\"\n")
  24. # Handle even old cmake
  25. LIST(LENGTH ${WLIST} WLIST_COUNT)
  26. MATH(EXPR WLIST_MAX ${WLIST_COUNT}-1)
  27. FOREACH(MOD_IDX RANGE ${WLIST_MAX})
  28. LIST(GET ${WLIST} ${MOD_IDX} WRK)
  29. FILE(APPEND "${WORKERS_C}" "extern worker_t ${WRK}_worker;\n")
  30. ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
  31. FILE(APPEND "${WORKERS_C}" "\n\nworker_t *workers[] = {\n")
  32. FOREACH(MOD_IDX RANGE ${WLIST_MAX})
  33. LIST(GET ${WLIST} ${MOD_IDX} WRK)
  34. FILE(APPEND "${WORKERS_C}" "&${WRK}_worker,\n")
  35. ENDFOREACH(MOD_IDX RANGE ${WLIST_MAX})
  36. FILE(APPEND "${WORKERS_C}" "NULL\n};\n")
  37. ENDMACRO(_AddWorkersForced WLIST)
  38. MACRO(AddModules MLIST WLIST)
  39. _AddModulesForced(${MLIST})
  40. _AddWorkersForced(${WLIST})
  41. #IF(NOT EXISTS "modules.c")
  42. # _AddModulesForced(${MLIST} ${WLIST})
  43. #ELSE(NOT EXISTS "modules.c")
  44. # FILE(STRINGS "modules.c" FILE_ID_RAW REGEX "^/.*[a-zA-Z0-9]+.*/$")
  45. # STRING(REGEX MATCH "[a-zA-Z0-9]+" FILE_ID "${FILE_ID_RAW}")
  46. # IF(NOT FILE_ID STREQUAL MODULES_ID)
  47. # MESSAGE("Regenerate modules info")
  48. # _AddModulesForced(${MLIST} ${WLIST})
  49. # ENDIF(NOT FILE_ID STREQUAL MODULES_ID)
  50. #ENDIF(NOT EXISTS "modules.c")
  51. ENDMACRO(AddModules MLIST WLIST)
  52. # Rspamd core components
  53. IF (ENABLE_CLANG_PLUGIN MATCHES "ON")
  54. SET(CMAKE_C_FLAGS
  55. "${CMAKE_C_FLAGS} -Xclang -load -Xclang ${CMAKE_CURRENT_BINARY_DIR}/../clang-plugin/librspamd-clang${CMAKE_SHARED_LIBRARY_SUFFIX} -Xclang -add-plugin -Xclang rspamd-ast")
  56. IF(CLANG_EXTRA_PLUGINS_LIBS)
  57. FOREACH(_lib ${CLANG_EXTRA_PLUGINS_LIBS})
  58. SET(CMAKE_C_FLAGS
  59. "${CMAKE_C_FLAGS} -Xclang -load -Xclang ${_lib}")
  60. SET(CMAKE_CXX_FLAGS
  61. "${CMAKE_CXX_FLAGS} -Xclang -load -Xclang ${_lib}")
  62. ENDFOREACH()
  63. ENDIF()
  64. IF(CLANG_EXTRA_PLUGINS)
  65. FOREACH(_plug ${CLANG_EXTRA_PLUGINS})
  66. SET(CMAKE_C_FLAGS
  67. "${CMAKE_C_FLAGS} -Xclang -add-plugin -Xclang ${_plug}")
  68. SET(CMAKE_CXX_FLAGS
  69. "${CMAKE_C_FLAGS} -Xclang -add-plugin -Xclang ${_plug}")
  70. ENDFOREACH()
  71. ENDIF()
  72. ENDIF ()
  73. ADD_SUBDIRECTORY(lua)
  74. ADD_SUBDIRECTORY(libcryptobox)
  75. ADD_SUBDIRECTORY(libutil)
  76. ADD_SUBDIRECTORY(libserver)
  77. ADD_SUBDIRECTORY(libmime)
  78. ADD_SUBDIRECTORY(libstat)
  79. ADD_SUBDIRECTORY(client)
  80. ADD_SUBDIRECTORY(rspamadm)
  81. SET(RSPAMDSRC controller.c
  82. fuzzy_storage.c
  83. rspamd.c
  84. worker.c
  85. rspamd_proxy.c)
  86. SET(PLUGINSSRC plugins/regexp.c
  87. plugins/chartable.cxx
  88. plugins/fuzzy_check.c
  89. plugins/dkim_check.c
  90. libserver/rspamd_control.c)
  91. SET(MODULES_LIST regexp chartable fuzzy_check dkim)
  92. SET(WORKERS_LIST normal controller fuzzy rspamd_proxy)
  93. IF (ENABLE_HYPERSCAN MATCHES "ON")
  94. LIST(APPEND WORKERS_LIST "hs_helper")
  95. LIST(APPEND RSPAMDSRC "hs_helper.c")
  96. ENDIF()
  97. AddModules(MODULES_LIST WORKERS_LIST)
  98. LIST(LENGTH PLUGINSSRC RSPAMD_MODULES_NUM)
  99. SET(RAGEL_DEPENDS "${CMAKE_SOURCE_DIR}/src/ragel/smtp_address.rl"
  100. "${CMAKE_SOURCE_DIR}/src/ragel/smtp_date.rl"
  101. "${CMAKE_SOURCE_DIR}/src/ragel/smtp_ip.rl"
  102. "${CMAKE_SOURCE_DIR}/src/ragel/smtp_base.rl"
  103. "${CMAKE_SOURCE_DIR}/src/ragel/content_disposition.rl")
  104. RAGEL_TARGET(ragel_smtp_addr
  105. INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/smtp_addr_parser.rl
  106. DEPENDS ${RAGEL_DEPENDS}
  107. COMPILE_FLAGS -T1
  108. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/smtp_addr_parser.rl.c)
  109. RAGEL_TARGET(ragel_content_disposition
  110. INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/content_disposition_parser.rl
  111. DEPENDS ${RAGEL_DEPENDS}
  112. COMPILE_FLAGS -G2
  113. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/content_disposition.rl.c)
  114. RAGEL_TARGET(ragel_rfc2047
  115. INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/rfc2047_parser.rl
  116. DEPENDS ${RAGEL_DEPENDS}
  117. COMPILE_FLAGS -G2
  118. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/rfc2047.rl.c)
  119. RAGEL_TARGET(ragel_smtp_date
  120. INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/smtp_date_parser.rl
  121. DEPENDS ${RAGEL_DEPENDS}
  122. COMPILE_FLAGS -G2
  123. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/date_parser.rl.c)
  124. RAGEL_TARGET(ragel_smtp_ip
  125. INPUTS ${CMAKE_SOURCE_DIR}/src/ragel/smtp_ip_parser.rl
  126. DEPENDS ${RAGEL_DEPENDS}
  127. COMPILE_FLAGS -G2
  128. OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ip_parser.rl.c)
  129. # Fucking cmake...
  130. FOREACH(_GEN ${LIBSERVER_GENERATED})
  131. set_source_files_properties(${_GEN} PROPERTIES GENERATED TRUE)
  132. ENDFOREACH()
  133. ######################### LINK SECTION ###############################
  134. IF(ENABLE_STATIC MATCHES "ON")
  135. ADD_LIBRARY(rspamd-server STATIC
  136. ${RSPAMD_CRYPTOBOX}
  137. ${RSPAMD_UTIL}
  138. ${RSPAMD_LUA}
  139. ${RSPAMD_SERVER}
  140. ${RSPAMD_STAT}
  141. ${RSPAMD_MIME}
  142. ${CMAKE_CURRENT_BINARY_DIR}/modules.c
  143. ${PLUGINSSRC}
  144. "${RAGEL_ragel_smtp_addr_OUTPUTS}"
  145. "${RAGEL_ragel_newlines_strip_OUTPUTS}"
  146. "${RAGEL_ragel_content_type_OUTPUTS}"
  147. "${RAGEL_ragel_content_disposition_OUTPUTS}"
  148. "${RAGEL_ragel_rfc2047_OUTPUTS}"
  149. "${RAGEL_ragel_smtp_date_OUTPUTS}"
  150. "${RAGEL_ragel_smtp_ip_OUTPUTS}"
  151. ${BACKWARD_ENABLE})
  152. ELSE()
  153. ADD_LIBRARY(rspamd-server SHARED
  154. ${RSPAMD_CRYPTOBOX}
  155. ${RSPAMD_UTIL}
  156. ${RSPAMD_SERVER}
  157. ${RSPAMD_STAT}
  158. ${RSPAMD_MIME}
  159. ${RSPAMD_LUA}
  160. ${CMAKE_CURRENT_BINARY_DIR}/modules.c
  161. ${PLUGINSSRC}
  162. "${RAGEL_ragel_smtp_addr_OUTPUTS}"
  163. "${RAGEL_ragel_newlines_strip_OUTPUTS}"
  164. "${RAGEL_ragel_content_type_OUTPUTS}"
  165. "${RAGEL_ragel_content_disposition_OUTPUTS}"
  166. "${RAGEL_ragel_rfc2047_OUTPUTS}"
  167. "${RAGEL_ragel_smtp_date_OUTPUTS}"
  168. "${RAGEL_ragel_smtp_ip_OUTPUTS}"
  169. ${BACKWARD_ENABLE})
  170. ENDIF()
  171. FOREACH(_DEP ${LIBSERVER_DEPENDS})
  172. ADD_DEPENDENCIES(rspamd-server "${_DEP}")
  173. ENDFOREACH()
  174. TARGET_LINK_LIBRARIES(rspamd-server rspamd-http-parser)
  175. TARGET_LINK_LIBRARIES(rspamd-server rspamd-fpconv)
  176. TARGET_LINK_LIBRARIES(rspamd-server rspamd-cdb)
  177. TARGET_LINK_LIBRARIES(rspamd-server rspamd-lpeg)
  178. TARGET_LINK_LIBRARIES(rspamd-server lcbtrie)
  179. IF(SYSTEM_ZSTD MATCHES "OFF")
  180. TARGET_LINK_LIBRARIES(rspamd-server rspamd-zstd)
  181. ELSE()
  182. TARGET_LINK_LIBRARIES(rspamd-server zstd)
  183. ENDIF()
  184. TARGET_LINK_LIBRARIES(rspamd-server rspamd-fastutf8)
  185. IF (ENABLE_CLANG_PLUGIN MATCHES "ON")
  186. ADD_DEPENDENCIES(rspamd-server rspamd-clang)
  187. ENDIF()
  188. IF (NOT WITH_LUAJIT)
  189. TARGET_LINK_LIBRARIES(rspamd-server rspamd-bit)
  190. ENDIF()
  191. IF (ENABLE_SNOWBALL MATCHES "ON")
  192. TARGET_LINK_LIBRARIES(rspamd-server stemmer)
  193. ENDIF()
  194. TARGET_LINK_LIBRARIES(rspamd-server rspamd-hiredis)
  195. IF (ENABLE_FANN MATCHES "ON")
  196. TARGET_LINK_LIBRARIES(rspamd-server fann)
  197. ENDIF ()
  198. IF (ENABLE_HYPERSCAN MATCHES "ON")
  199. TARGET_LINK_LIBRARIES(rspamd-server hs)
  200. ENDIF()
  201. IF(WITH_BLAS)
  202. TARGET_LINK_LIBRARIES(rspamd-server ${BLAS_REQUIRED_LIBRARIES})
  203. ENDIF()
  204. TARGET_LINK_LIBRARIES(rspamd-server ${RSPAMD_REQUIRED_LIBRARIES})
  205. ADD_BACKWARD(rspamd-server)
  206. ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${CMAKE_CURRENT_BINARY_DIR}/workers.c ${CMAKE_CURRENT_BINARY_DIR}/config.h)
  207. ADD_BACKWARD(rspamd)
  208. SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE CXX)
  209. SET_TARGET_PROPERTIES(rspamd-server PROPERTIES LINKER_LANGUAGE CXX)
  210. IF(NOT DEBIAN_BUILD)
  211. SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
  212. ENDIF(NOT DEBIAN_BUILD)
  213. #TARGET_LINK_LIBRARIES(rspamd ${RSPAMD_REQUIRED_LIBRARIES})
  214. TARGET_LINK_LIBRARIES(rspamd rspamd-server)
  215. INSTALL(TARGETS rspamd RUNTIME DESTINATION bin)
  216. INSTALL(TARGETS rspamd-server LIBRARY DESTINATION ${RSPAMD_LIBDIR})