From: Vsevolod Stakhov Date: Wed, 8 Jul 2015 14:51:16 +0000 (+0100) Subject: Rework cmake caching. X-Git-Tag: 1.0.0~417 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e95ca5c778fb9dd0969c842ec57389025a9db913;p=rspamd.git Rework cmake caching. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 01d5563cc..1d92132df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -224,8 +224,8 @@ MACRO(FindLua) IF(LUA_LIBRARY AND LUA_INCLUDE_DIR) SET(LUA_FOUND 1) IF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR) - SET(CACHE LUA_VERSION_MAJOR ${LUA_VERSION_MAJOR}) - SET(CACHE LUA_VERSION_MINOR ${LUA_VERSION_MINOR}) + SET(LUA_VERSION_MAJOR ${LUA_VERSION_MAJOR}) + SET(LUA_VERSION_MINOR ${LUA_VERSION_MINOR}) ENDIF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR) IF(ENABLE_LUAJIT MATCHES "ON") MESSAGE(STATUS "Found luajit ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}") @@ -293,7 +293,7 @@ MACRO(ProcessPackage PKG_NAME) IF(${PKG_NAME}_FOUND) MESSAGE(STATUS "Found package ${PKG_NAME} in pkg-config modules ${PKG_MODULES}") - SET(WITH_${PKG_NAME} 1) + SET(WITH_${PKG_NAME} 1 CACHE INTERNAL "") IF(ENABLE_STATIC MATCHES "ON") SET(_XPREFIX "${PKG_NAME}_STATIC") ELSE(ENABLE_STATIC MATCHES "ON") @@ -317,40 +317,50 @@ MACRO(ProcessPackage PKG_NAME) LIST(APPEND RSPAMD_REQUIRED_LIBRARIES "${${_XPREFIX}_LIBRARIES}") INCLUDE_DIRECTORIES(${${_XPREFIX}_INCLUDEDIR}) ELSE() - # Try some more heuristic - FIND_LIBRARY(_lib NAMES ${PKG_LIBRARY} - HINTS "${PKG_ROOT}" "${RSPAMD_SEARCH_PATH}" - PATH_SUFFIXES "${PKG_LIB_SUFFIXES}" lib64 lib - PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}) - IF(NOT _lib) - IF(OPTIONAL) - MESSAGE("Cannot find library ${PKG_LIBRARY} for package ${PKG_NAME}") - ELSE() - MESSAGE(FATAL_ERROR "Cannot find library ${PKG_LIBRARY} for package ${PKG_NAME}") - ENDIF() - ENDIF(NOT _lib) - - FIND_PATH(_incl "${PKG_INCLUDE}" + IF(NOT ${PKG_NAME}_GUESSED) + # Try some more heuristic + FIND_LIBRARY(_lib NAMES ${PKG_LIBRARY} HINTS "${PKG_ROOT}" "${RSPAMD_SEARCH_PATH}" - PATH_SUFFIXES "${PKG_INCLUDE_SUFFIXES}" "include" - PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}) - IF(NOT _incl) - IF(OPTIONAL) - MESSAGE("Cannot find header ${PKG_INCLUDE} for package ${PKG_NAME}") - ELSE() - MESSAGE(FATAL_ERROR "Cannot find header ${PKG_INCLUDE} for package ${PKG_NAME}") + PATH_SUFFIXES "${PKG_LIB_SUFFIXES}" lib64 lib + PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}) + IF(NOT _lib) + IF(OPTIONAL) + MESSAGE("Cannot find library ${PKG_LIBRARY} for package ${PKG_NAME}") + ELSE() + MESSAGE(FATAL_ERROR "Cannot find library ${PKG_LIBRARY} for package ${PKG_NAME}") + ENDIF() + ENDIF(NOT _lib) + + FIND_PATH(_incl "${PKG_INCLUDE}" + HINTS "${PKG_ROOT}" "${RSPAMD_SEARCH_PATH}" + PATH_SUFFIXES "${PKG_INCLUDE_SUFFIXES}" "include" + PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}) + IF(NOT _incl) + IF(OPTIONAL) + MESSAGE("Cannot find header ${PKG_INCLUDE} for package ${PKG_NAME}") + ELSE() + MESSAGE(FATAL_ERROR "Cannot find header ${PKG_INCLUDE} for package ${PKG_NAME}") + ENDIF() + ENDIF(NOT _incl) + + IF(_incl AND _lib) + GET_FILENAME_COMPONENT(_lib_path "${_lib}" PATH) + INCLUDE_DIRECTORIES("${_incl}") + LINK_DIRECTORIES("${_lib_path}") + LIST(APPEND RSPAMD_REQUIRED_LIBRARIES ${_lib}) + SET(${PKG_NAME}_INCLUDE "${_incl}" CACHE INTERNAL "") + SET(${PKG_NAME}_LIBRARY_PATH "${_lib_path}" CACHE INTERNAL "") + SET(${PKG_NAME}_LIBRARY "${_lib}" CACHE INTERNAL "") + SET(${PKG_NAME}_GUESSED 1 CACHE INTERNAL "") + SET(WITH_${PKG_NAME} 1 CACHE INTERNAL "") + MESSAGE(STATUS "Found package ${PKG_NAME} in '${_lib_path}' (${_lib}) and '${_incl}' (${PKG_INCLUDE}).") ENDIF() - ENDIF(NOT _incl) - IF(_incl AND _lib) - GET_FILENAME_COMPONENT(_lib_path "${_lib}" PATH) - INCLUDE_DIRECTORIES("${_incl}") - LINK_DIRECTORIES("${_lib_path}") - LIST(APPEND RSPAMD_REQUIRED_LIBRARIES ${_lib}) - SET(${PKG_NAME}_INCLUDE "${_incl}") - SET(${PKG_NAME}_LIBRARY "${_lib_path}") - SET(${PKG_NAME}_FOUND 1) - MESSAGE(STATUS "Found package ${PKG_NAME} in '${_lib_path}' (${_lib}) and '${_incl}' (${PKG_INCLUDE}).") + ELSE() + MESSAGE(STATUS "Found package ${PKG_NAME} (cached)") + INCLUDE_DIRECTORIES("${${PKG_NAME}_INCLUDE}") + LINK_DIRECTORIES("${${PKG_NAME}_LIBRARY_PATH}") + LIST(APPEND RSPAMD_REQUIRED_LIBRARIES "${${PKG_NAME}_LIBRARY}") ENDIF() ENDIF(${PKG_NAME}_FOUND) @@ -425,7 +435,7 @@ IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") # Find util library ProcessPackage(LIBUTIL LIBRARY util INCLUDE libutil.h ROOT ${LIBUTIL_ROOT_DIR} OPTIONAL) - IF(LIBUTIL_FOUND) + IF(WITH_LIBUTIL) SET(HAVE_LIBUTIL_H 1) LIST(APPEND RSPAMD_REQUIRED_LIBRARIES util) LIST(APPEND CMAKE_REQUIRED_LIBRARIES util) @@ -560,9 +570,9 @@ ProcessPackage(OPENSSL LIBRARY crypto INCLUDE opensslconf.h INCLUDE_SUFFIXES inc ROOT ${OPENSSL_ROOT_DIR} MODULES openssl) #Check for openssl (required for dkim) -IF(OPENSSL_FOUND) +IF(WITH_OPENSSL) SET(HAVE_OPENSSL 1) -ENDIF(OPENSSL_FOUND) +ENDIF(WITH_OPENSSL) IF(GMIME2_VERSION VERSION_GREATER "2.4.0" OR NOT GMIME2_VERSION) SET(GMIME24 1) @@ -578,7 +588,6 @@ ENDIF(PCRE_LIBRARY) IF(ENABLE_HIREDIS MATCHES "ON") ProcessPackage(HIREDIS LIBRARY hiredis INCLUDE hiredis.h INCLUDE_SUFFIXES include/hiredis ROOT ${HIREDIS_ROOT_DIR} MODULES hiredis libhiredis) - SET(WITH_HIREDIS 1) ENDIF(ENABLE_HIREDIS MATCHES "ON") @@ -753,7 +762,7 @@ CHECK_C_SOURCE_COMPILES( return cmkcheckweak == NULL; }" HAVE_WEAK_SYMBOLS) -IF(ICONV_FOUND) +IF(WITH_ICONV) CHECK_C_SOURCE_COMPILES(" #include int main(){ @@ -766,7 +775,7 @@ int main(){ return 0; } " ICONV_SECOND_ARGUMENT_IS_CONST) -ENDIF(ICONV_FOUND) +ENDIF(WITH_ICONV) # Check macros CHECK_SYMBOL_EXISTS(PATH_MAX limits.h HAVE_PATH_MAX) @@ -831,7 +840,7 @@ TRY_RUN(_CAN_RUN _CAN_COMPILE "${CMAKE_BINARY_DIR}" "${CMAKE_BINARY_DIR}/pthread_setpshared.c" CMAKE_FLAGS CMAKE_C_FLAGS="-pthread") IF(_CAN_RUN EQUAL 1) - SET(HAVE_PTHREAD_PROCESS_SHARED 1) + SET(HAVE_PTHREAD_PROCESS_SHARED 1 CACHE INTERNAL "") ENDIF(_CAN_RUN EQUAL 1) IF(HAVE_PTHREAD_PROCESS_SHARED) MESSAGE(STATUS "pthread_mutexattr_setpshared is supported") @@ -891,9 +900,9 @@ IF(ENABLE_URL_INCLUDE MATCHES "ON") # Try to find libcurl ProcessPackage(CURL LIBRARY curl INCLUDE curl.h INCLUDE_SUFFIXES include/curl ROOT ${CURL_ROOT}) - IF(NOT CURL_FOUND) + IF(NOT WITH_CURL) MESSAGE(WARNING "Neither libcurl nor libfetch were found, no support of URL includes in configuration") - ENDIF(NOT CURL_FOUND) + ENDIF(NOT WITH_CURL) ENDIF(LIBFETCH_LIBRARY) ENDIF(ENABLE_URL_INCLUDE MATCHES "ON") @@ -966,17 +975,9 @@ LIST(APPEND RSPAMD_REQUIRED_LIBRARIES ottery) LIST(APPEND RSPAMD_REQUIRED_LIBRARIES event) LIST(APPEND RSPAMD_REQUIRED_LIBRARIES xxhash) LIST(APPEND RSPAMD_REQUIRED_LIBRARIES blake2) -LIST(APPEND RSPAMD_REQUIRED_LIBRARIES sqlite3) -IF(OPENSSL_FOUND) - LIST(APPEND RSPAMD_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES}) -ENDIF(OPENSSL_FOUND) IF(HAVE_FETCH_H) LIST(APPEND RSPAMD_REQUIRED_LIBRARIES fetch) ENDIF(HAVE_FETCH_H) -LIST(APPEND RSPAMD_REQUIRED_LIBRARIES event) -IF(HAVE_LIBEVENT2) - LIST(APPEND RSPAMD_REQUIRED_LIBRARIES event_pthreads) -ENDIF(HAVE_LIBEVENT2) IF(WITH_DB) LIST(APPEND RSPAMD_REQUIRED_LIBRARIES db) ENDIF(WITH_DB) @@ -984,13 +985,6 @@ ENDIF(WITH_DB) LIST(APPEND RSPAMD_REQUIRED_LIBRARIES "${LUA_LIBRARY}") -IF(ENABLE_GPERF_TOOLS MATCHES "ON") - LIST(APPEND RSPAMD_REQUIRED_LIBRARIES profiler) -ENDIF(ENABLE_GPERF_TOOLS MATCHES "ON") - -IF(ENABLE_HIREDIS MATCHES "ON") - LIST(APPEND RSPAMD_REQUIRED_LIBRARIES hiredis) -ENDIF(ENABLE_HIREDIS MATCHES "ON") IF(GLIB_COMPAT) LIST(APPEND RSPAMD_REQUIRED_LIBRARIES glibadditions) ENDIF(GLIB_COMPAT) @@ -1128,4 +1122,4 @@ ADD_CUSTOM_TARGET(dist ${CMAKE_SOURCE_DIR}/dist.sh IF(NOT DEBIAN_BUILD) ADD_CUSTOM_TARGET(check DEPENDS rspamd-test) ADD_CUSTOM_TARGET(run-test DEPENDS check COMMAND test/rspamd-test) -ENDIF(NOT DEBIAN_BUILD) +ENDIF(NOT DEBIAN_BUILD) \ No newline at end of file diff --git a/src/libcryptobox/AsmOp.cmake b/src/libcryptobox/AsmOp.cmake index a0d8b1377..bcf9d996a 100644 --- a/src/libcryptobox/AsmOp.cmake +++ b/src/libcryptobox/AsmOp.cmake @@ -1,21 +1,19 @@ # Check for assembler option specified -function(asm_op output_var op description) - SET(asm_code " - ${op} - ") - file(WRITE "${CMAKE_BINARY_DIR}/asm.S" "${asm_code}") - try_compile(HAVE_OP - "${CMAKE_BINARY_DIR}" - "${CMAKE_BINARY_DIR}/asm.S" - CMAKE_FLAGS "-DCMAKE_ASM_LINK_EXECUTABLE='echo not linking now...'") - #file(REMOVE "${CMAKE_BINARY_DIR}/asm.s") - - if(HAVE_OP) - MESSAGE(STATUS "Compilation of ${description} asm set is supported") - else() - MESSAGE(STATUS "Compilation of ${description} asm set is -NOT- supported") - endif() - - set(${output_var} "${HAVE_OP}" PARENT_SCOPE) -endfunction() +MACRO(asm_op output_var description) + IF(NOT ${output_var}) + file(WRITE "${CMAKE_BINARY_DIR}/asm.S" "${ASM_CODE}") + try_compile(HAVE_OP + "${CMAKE_BINARY_DIR}" + "${CMAKE_BINARY_DIR}/asm.S" + CMAKE_FLAGS "-DCMAKE_ASM_LINK_EXECUTABLE='echo not linking now...'") + + if(HAVE_OP) + MESSAGE(STATUS "Compilation of ${description} asm set is supported") + else() + MESSAGE(STATUS "Compilation of ${description} asm set is -NOT- supported") + endif() + + set(${output_var} "${HAVE_OP}" CACHE INTERNAL "${description}") + ENDIF() +ENDMACRO() diff --git a/src/libcryptobox/CMakeLists.txt b/src/libcryptobox/CMakeLists.txt index ecd729d6a..0b591bfc1 100644 --- a/src/libcryptobox/CMakeLists.txt +++ b/src/libcryptobox/CMakeLists.txt @@ -11,26 +11,34 @@ SET(SIPHASHSRC ${CMAKE_CURRENT_SOURCE_DIR}/siphash/siphash.c # For now we support only x86_64 architecture with optimizations IF(${ARCH} STREQUAL "x86_64") - ASM_OP(HAVE_AVX2 "vpaddq %ymm0, %ymm0, %ymm0" "avx2") - ASM_OP(HAVE_AVX "vpaddq %xmm0, %xmm0, %xmm0" "avx") - ASM_OP(HAVE_SSE2 "pmuludq %xmm0, %xmm0" "sse2") - ASM_OP(HAVE_SSE3 "lddqu 0(%esi), %xmm0" "sse3") - ASM_OP(HAVE_SSSE3 "pshufb %xmm0, %xmm0" "ssse3") - ASM_OP(HAVE_SSE41 "pblendw \$0, %xmm0, %xmm0" "sse41") + SET(ASM_CODE "vpaddq %ymm0, %ymm0, %ymm0") + ASM_OP(HAVE_AVX2 "avx2") + SET(ASM_CODE "vpaddq %xmm0, %xmm0, %xmm0") + ASM_OP(HAVE_AVX "avx") + SET(ASM_CODE "pmuludq %xmm0, %xmm0") + ASM_OP(HAVE_SSE2 "sse2") + SET(ASM_CODE "lddqu 0(%esi), %xmm0") + ASM_OP(HAVE_SSE3 "sse3") + SET(ASM_CODE "pshufb %xmm0, %xmm0") + ASM_OP(HAVE_SSSE3 "ssse3") + SET(ASM_CODE "pblendw \$0, %xmm0, %xmm0") + ASM_OP(HAVE_SSE41 "sse41") - ASM_OP(HAVE_SLASHMACRO " + SET(ASM_CODE " .macro TEST1 op \\op %eax, %eax .endm TEST1 xorl - " "slash macro convention") + ") + ASM_OP(HAVE_SLASHMACRO "slash macro convention") - ASM_OP(HAVE_DOLLARMACRO " + SET(ASM_CODE " .macro TEST1 op $0 %eax, %eax .endm TEST1 xorl - " "dollar macro convention") + ") + ASM_OP(HAVE_DOLLARMACRO "dollar macro convention") SET(CURVESRC ${CMAKE_CURRENT_SOURCE_DIR}/curve25519/curve25519-donna-c64.c) SET(POLYSRC ${POLYSRC} ${CMAKE_CURRENT_SOURCE_DIR}/poly1305/ref-64.c)