mirror of
https://github.com/rspamd/rspamd.git
synced 2024-08-04 20:18:48 +02:00
![Anton Yuzhaninov](/assets/img/avatar_default.png)
llvm-config --cxxflags shows CFLAGS used to compile clang. If clang installed from package and package was build using GCC then it will contain GCC specific flags. In case of clang installed as RPM packge -specs= flags also added. There is not point to use them to compile plugin. For now hardcode flags in clang-plugin/CMakeLists.txt Add -O2 - we want plugin to work fast even if we to compiling rspamd code with -O0.
63 lines
2.8 KiB
CMake
63 lines
2.8 KiB
CMake
IF (ENABLE_CLANG_PLUGIN MATCHES "ON")
|
|
# Clang plugin for static analysis
|
|
if (NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
|
MESSAGE(FATAL_ERROR "Cannot build clang plugin when compiler is not clang")
|
|
endif ()
|
|
|
|
LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
ENABLE_LANGUAGE(CXX)
|
|
FIND_PACKAGE(LLVM REQUIRED)
|
|
MESSAGE(STATUS "Trying to find libclang for llvm version ${LLVM_PACKAGE_VERSION}")
|
|
SET(libclang_llvm_header_search_paths
|
|
# LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/
|
|
"/usr/lib/llvm-${LLVM_PACKAGE_VERSION}/include/"
|
|
# LLVM MacPorts
|
|
"/opt/local/libexec/llvm-${LLVM_PACKAGE_VERSION}/include"
|
|
# LLVM Homebrew
|
|
"/usr/local/Cellar/llvm/${LLVM_PACKAGE_VERSION}/include"
|
|
# LLVM Homebrew/versions
|
|
"/usr/local/lib/llvm-${LLVM_PACKAGE_VERSION}/include"
|
|
# FreeBSD ports versions
|
|
"/usr/local/llvm${LLVM_PACKAGE_VERSION}/include"
|
|
"${LLVM_INCLUDE_DIRS}"
|
|
)
|
|
|
|
SET(libclang_llvm_lib_search_paths
|
|
# LLVM Debian/Ubuntu nightly packages: http://llvm.org/apt/
|
|
"/usr/lib/llvm-${LLVM_PACKAGE_VERSION}/lib/"
|
|
# LLVM MacPorts
|
|
"/opt/local/libexec/llvm-${LLVM_PACKAGE_VERSION}/lib"
|
|
# LLVM Homebrew
|
|
"/usr/local/Cellar/llvm/${LLVM_PACKAGE_VERSION}/lib"
|
|
# LLVM Homebrew/versions
|
|
"/usr/local/lib/llvm-${LLVM_PACKAGE_VERSION}/lib"
|
|
# FreeBSD ports versions
|
|
"/usr/local/llvm${LLVM_PACKAGE_VERSION}/lib"
|
|
"${LLVM_LIBRARY_DIRS}"
|
|
)
|
|
|
|
find_path(LIBCLANG_INCLUDE_DIR clang-c/Index.h
|
|
PATHS ${libclang_llvm_header_search_paths}
|
|
PATH_SUFFIXES LLVM/include #Windows package from http://llvm.org/releases/
|
|
DOC "The path to the directory that contains clang-c/Index.h")
|
|
find_library(LIBCLANG_LIBRARY NAMES libclang.imp libclang clang
|
|
PATHS ${libclang_llvm_lib_search_paths}
|
|
PATH_SUFFIXES LLVM/lib #Windows package from http://llvm.org/releases/
|
|
DOC "The file that corresponds to the libclang library.")
|
|
|
|
get_filename_component(LIBCLANG_LIBRARY_DIR ${LIBCLANG_LIBRARY} PATH)
|
|
|
|
set(LIBCLANG_LIBRARIES ${LIBCLANG_LIBRARY})
|
|
set(LIBCLANG_INCLUDE_DIRS ${LIBCLANG_INCLUDE_DIR})
|
|
|
|
SET(CLANGPLUGINSRC plugin.cc printf_check.cc)
|
|
|
|
ADD_LIBRARY(rspamd-clang SHARED ${CLANGPLUGINSRC})
|
|
SET_TARGET_PROPERTIES(rspamd-clang PROPERTIES
|
|
COMPILE_FLAGS "${LLVM_CPP_FLAGS} -O2 -Wall -Wextra -Wno-unused-parameter -Werror"
|
|
INCLUDE_DIRECTORIES ${LIBCLANG_INCLUDE_DIR}
|
|
LINKER_LANGUAGE CXX)
|
|
TARGET_LINK_LIBRARIES(rspamd-clang ${LIBCLANG_LIBRARIES})
|
|
LINK_DIRECTORIES(${LLVM_LIBRARY_DIRS})
|
|
ENDIF()
|