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 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. IF (ENABLE_CLANG_PLUGIN MATCHES "ON")
  2. # Clang plugin for static analysis
  3. if (NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
  4. MESSAGE(FATAL_ERROR "Cannot build clang plugin when compiler is not clang")
  5. endif ()
  6. LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
  7. ENABLE_LANGUAGE(CXX)
  8. FIND_PACKAGE(LLVM REQUIRED)
  9. MESSAGE(STATUS "Trying to find libclang for llvm version ${LLVM_PACKAGE_VERSION}")
  10. SET(libclang_llvm_header_search_paths
  11. # LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/
  12. "/usr/lib/llvm-${LLVM_PACKAGE_VERSION}/include/"
  13. # LLVM MacPorts
  14. "/opt/local/libexec/llvm-${LLVM_PACKAGE_VERSION}/include"
  15. # LLVM Homebrew
  16. "/usr/local/Cellar/llvm/${LLVM_PACKAGE_VERSION}/include"
  17. # LLVM Homebrew/versions
  18. "/usr/local/lib/llvm-${LLVM_PACKAGE_VERSION}/include"
  19. # FreeBSD ports versions
  20. "/usr/local/llvm${LLVM_PACKAGE_VERSION}/include"
  21. "${LLVM_INCLUDE_DIRS}"
  22. )
  23. SET(libclang_llvm_lib_search_paths
  24. # LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/
  25. "/usr/lib/llvm-${LLVM_PACKAGE_VERSION}/lib/"
  26. # LLVM MacPorts
  27. "/opt/local/libexec/llvm-${LLVM_PACKAGE_VERSION}/lib"
  28. # LLVM Homebrew
  29. "/usr/local/Cellar/llvm/${LLVM_PACKAGE_VERSION}/lib"
  30. # LLVM Homebrew/versions
  31. "/usr/local/lib/llvm-${LLVM_PACKAGE_VERSION}/lib"
  32. # FreeBSD ports versions
  33. "/usr/local/llvm${LLVM_PACKAGE_VERSION}/lib"
  34. "${LLVM_LIBRARY_DIRS}"
  35. )
  36. find_path(LIBCLANG_INCLUDE_DIR clang-c/Index.h
  37. PATHS ${libclang_llvm_header_search_paths}
  38. PATH_SUFFIXES LLVM/include #Windows package from http://llvm.org/releases/
  39. DOC "The path to the directory that contains clang-c/Index.h")
  40. find_library(LIBCLANG_LIBRARY NAMES libclang.imp libclang clang
  41. PATHS ${libclang_llvm_lib_search_paths}
  42. PATH_SUFFIXES LLVM/lib #Windows package from http://llvm.org/releases/
  43. DOC "The file that corresponds to the libclang library.")
  44. get_filename_component(LIBCLANG_LIBRARY_DIR ${LIBCLANG_LIBRARY} PATH)
  45. set(LIBCLANG_LIBRARIES ${LIBCLANG_LIBRARY})
  46. set(LIBCLANG_INCLUDE_DIRS ${LIBCLANG_INCLUDE_DIR})
  47. SET(CLANGPLUGINSRC plugin.cc printf_check.cc)
  48. ADD_LIBRARY(rspamd-clang SHARED ${CLANGPLUGINSRC})
  49. SET_TARGET_PROPERTIES(rspamd-clang PROPERTIES
  50. COMPILE_FLAGS "${LLVM_CPP_FLAGS} -O2 -Wall -Wextra -Wno-unused-parameter -Werror"
  51. INCLUDE_DIRECTORIES ${LIBCLANG_INCLUDE_DIR}
  52. LINKER_LANGUAGE CXX)
  53. TARGET_LINK_LIBRARIES(rspamd-clang ${LIBCLANG_LIBRARIES})
  54. LINK_DIRECTORIES(${LLVM_LIBRARY_DIRS})
  55. ENDIF()