cmake_minimum_required(VERSION 2.8.12) project(vitastor) include(GNUInstallDirs) include(CTest) include(CheckIncludeFile) find_package(PkgConfig) set(WITH_QEMU false CACHE BOOL "Build QEMU driver inside Vitastor source tree") set(WITH_FIO true CACHE BOOL "Build FIO driver") set(QEMU_PLUGINDIR qemu CACHE STRING "QEMU plugin directory suffix (qemu-kvm on RHEL)") set(WITH_ASAN false CACHE BOOL "Build with AddressSanitizer") if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/local/?$") if(EXISTS "/etc/debian_version") set(CMAKE_INSTALL_LIBDIR "lib/${CMAKE_LIBRARY_ARCHITECTURE}") endif() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") endif() add_definitions(-DVITASTOR_VERSION="1.9.3") add_definitions(-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wno-sign-compare -Wno-comment -Wno-parentheses -Wno-pointer-arith -fdiagnostics-color=always -fno-omit-frame-pointer -I ${CMAKE_SOURCE_DIR}/src) add_link_options(-fno-omit-frame-pointer) if (${WITH_ASAN}) add_definitions(-fsanitize=address) add_link_options(-fsanitize=address -fno-omit-frame-pointer) endif (${WITH_ASAN}) set(CMAKE_BUILD_TYPE RelWithDebInfo) string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}") string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}") string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") string(REGEX REPLACE "([\\/\\-]O)[^ \t\r\n]*" "\\13" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") macro(install_symlink filepath sympath) install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${filepath} \$ENV{DESTDIR}${sympath})") install(CODE "message(\"-- Created symlink: ${sympath} -> ${filepath}\")") endmacro(install_symlink) check_include_file("linux/nbd-netlink.h" HAVE_NBD_NETLINK_H) find_package(PkgConfig) pkg_check_modules(LIBURING REQUIRED liburing) if (${WITH_QEMU}) pkg_check_modules(GLIB REQUIRED glib-2.0) endif (${WITH_QEMU}) pkg_check_modules(IBVERBS libibverbs) if (IBVERBS_LIBRARIES) add_definitions(-DWITH_RDMA) endif (IBVERBS_LIBRARIES) pkg_check_modules(ISAL libisal) if (ISAL_LIBRARIES) add_definitions(-DWITH_ISAL) endif (ISAL_LIBRARIES) add_custom_target(build_tests) add_custom_target(test COMMAND echo leak:tcmalloc > ${CMAKE_CURRENT_BINARY_DIR}/lsan-suppress.txt && env LSAN_OPTIONS=suppressions=${CMAKE_CURRENT_BINARY_DIR}/lsan-suppress.txt ${CMAKE_CTEST_COMMAND} ) add_dependencies(test build_tests) include_directories( ../ ${CMAKE_SOURCE_DIR}/src/blockstore ${CMAKE_SOURCE_DIR}/src/cmd ${CMAKE_SOURCE_DIR}/src/client ${CMAKE_SOURCE_DIR}/src/disk_tool ${CMAKE_SOURCE_DIR}/src/kv ${CMAKE_SOURCE_DIR}/src/nfs ${CMAKE_SOURCE_DIR}/src/osd ${CMAKE_SOURCE_DIR}/src/test ${CMAKE_SOURCE_DIR}/src/util /usr/include/jerasure ${LIBURING_INCLUDE_DIRS} ${IBVERBS_INCLUDE_DIRS} ) add_subdirectory(blockstore) add_subdirectory(cmd) add_subdirectory(client) add_subdirectory(disk_tool) add_subdirectory(kv) add_subdirectory(nfs) add_subdirectory(osd) add_subdirectory(test) ### Install install(TARGETS vitastor-osd vitastor-disk vitastor-nbd vitastor-nfs vitastor-cli vitastor-kv vitastor-kv-stress RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install_symlink(vitastor-disk ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/vitastor-dump-journal) install_symlink(vitastor-cli ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/vitastor-rm) install_symlink(vitastor-cli ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/vita) install( TARGETS vitastor_blk vitastor_client vitastor_kv LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/client/vitastor.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) if (${WITH_FIO}) install(TARGETS fio_vitastor fio_vitastor_blk fio_vitastor_sec LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif (${WITH_FIO}) if (${WITH_QEMU}) install(TARGETS qemu_vitastor LIBRARY DESTINATION /usr/${CMAKE_INSTALL_LIBDIR}/${QEMU_PLUGINDIR}) endif (${WITH_QEMU})