Codebase list tcmu / lintian-fixes/main CMakeLists.txt
lintian-fixes/main

Tree @lintian-fixes/main (Download .tar.gz)

CMakeLists.txt @lintian-fixes/mainraw · history · blame

cmake_minimum_required (VERSION 2.8 FATAL_ERROR)
project (tcmu-runner C)
set(VERSION 1.5.4)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wdeclaration-after-statement -std=c99")

include(GNUInstallDirs)
include(CheckIncludeFile)

set(tcmu-runner_HANDLER_PATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/tcmu-runner")

option(with-glfs "build Gluster glfs handler" true)
option(with-qcow "build qcow handler" true)
option(with-rbd "build Ceph rbd handler" true)
option(with-zbc "build zbc handler" true)
option(with-fbo "build fbo handler" true)
option(with-tcmalloc "link against tcmalloc" true)

find_library(LIBNL_LIB nl-3)
find_library(LIBNL_GENL_LIB nl-genl-3)
set(LIBNL_LIBS
  ${LIBNL_LIB}
  ${LIBNL_GENL_LIB}
  )

find_path (LIBNL_INCLUDE_DIR
  NAMES
  netlink/netlink.h
  PATH_SUFFIXES
  libnl3
  )

find_package(PkgConfig)
pkg_check_modules(GLIB REQUIRED gio-unix-2.0)
pkg_check_modules(KMOD REQUIRED libkmod)

find_library(PTHREAD pthread)
find_library(DL dl)

if (with-tcmalloc)
  find_library(TCMALLOC_LIB tcmalloc)
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
endif(with-tcmalloc)

# Stuff for building the shared library
add_library(tcmu
  SHARED
  strlcpy.c
  configfs.c
  api.c
  libtcmu.c
  libtcmu-register.c
  tcmuhandler-generated.c
  libtcmu_log.c
  libtcmu_config.c
  libtcmu_time.c
  )
set_target_properties(tcmu
  PROPERTIES
  VERSION 2.2
  SOVERSION "2"
  )
target_include_directories(tcmu
  PUBLIC ${LIBNL_INCLUDE_DIR}
  PUBLIC ${GLIB_INCLUDE_DIRS}
  PUBLIC ${PROJECT_SOURCE_DIR}/ccan
  )
target_link_libraries(tcmu
  ${LIBNL_LIB}
  ${LIBNL_GENL_LIB}
  ${GLIB_LIBRARIES}
  ${PTHREAD}
  ${TCMALLOC_LIB}
  )
install(TARGETS tcmu LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

# Stuff for building the static library
add_library(tcmu_static
  strlcpy.c
  configfs.c
  api.c
  libtcmu.c
  libtcmu-register.c
  tcmuhandler-generated.c
  libtcmu_log.c
  libtcmu_config.c
  libtcmu_time.c
  )
target_include_directories(tcmu_static
  PUBLIC ${LIBNL_INCLUDE_DIR}
  PUBLIC ${GLIB_INCLUDE_DIRS}
  PUBLIC ${PROJECT_SOURCE_DIR}/ccan
  )
target_link_libraries(tcmu_static
  ${GLIB_LIBRARIES}
  ${TCMALLOC_LIB}
  )

# Stuff for building the main binary
add_executable(tcmu-runner
  tcmur_work.c
  tcmur_cmd_handler.c
  tcmur_aio.c
  tcmur_device.c
  target.c
  alua.c
  scsi.c
  main.c
  tcmuhandler-generated.c
  )
target_link_libraries(tcmu-runner tcmu)
target_include_directories(tcmu-runner
  PUBLIC ${PROJECT_BINARY_DIR}
  PUBLIC ${GLIB_INCLUDE_DIRS}
  PUBLIC ${KMOD_INCLUDE_DIRS}
  PUBLIC ${PROJECT_SOURCE_DIR}/ccan
  )
target_link_libraries(tcmu-runner
  ${GLIB_LIBRARIES}
  ${PTHREAD}
  ${DL}
  ${KMOD_LIBRARIES}
  ${TCMALLOC_LIB}
  -Wl,--no-export-dynamic
  -Wl,--dynamic-list=${CMAKE_SOURCE_DIR}/main-syms.txt
  )
install(TARGETS tcmu-runner RUNTIME DESTINATION bin)

add_executable(tcmu-synthesizer
  scsi.c
  tcmu-synthesizer.c
  )
target_link_libraries(tcmu-synthesizer tcmu)
target_include_directories(tcmu-synthesizer
  PUBLIC ${PROJECT_BINARY_DIR}
  PUBLIC ${GLIB_INCLUDE_DIRS}
  PUBLIC ${PROJECT_SOURCE_DIR}/ccan
  )
target_link_libraries(tcmu-synthesizer
  ${GLIB_LIBRARIES}
  ${TCMALLOC_LIB}
  )

install(TARGETS RUNTIME DESTINATION bin)

add_custom_command(
  OUTPUT ${CMAKE_SOURCE_DIR}/tcmuhandler-generated.c ${CMAKE_SOURCE_DIR}/tcmuhandler-generated.h
  COMMAND gdbus-codegen ${CMAKE_SOURCE_DIR}/tcmu-handler.xml --generate-c-code ${CMAKE_SOURCE_DIR}/tcmuhandler-generated --c-generate-object-manager --interface-prefix org.kernel
  MAIN_DEPENDENCY tcmu-handler.xml
  )

add_custom_target(
  cscope
  COMMAND find -name '*.[ch]' > cscope.files
  COMMAND cscope -bq
  )
set_directory_properties(
  PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
  "cscope.files;cscope.in.out;cscope.out;cscope.po.out"
  )

# Stuff for building the file handler
add_library(handler_file
  SHARED
  file_example.c
  )
set_target_properties(handler_file
  PROPERTIES
  PREFIX ""
  )
target_include_directories(handler_file
  PUBLIC ${PROJECT_SOURCE_DIR}/ccan
  )

if (with-fbo)
  # Stuff for building the file optical handler
  add_library(handler_file_optical
    SHARED
    scsi.c
    file_optical.c
    )
  
  set_target_properties(handler_file_optical
    PROPERTIES
    PREFIX ""
    )

  target_include_directories(handler_file_optical
    PUBLIC ${PROJECT_SOURCE_DIR}/ccan
    )
  target_link_libraries(handler_file_optical ${PTHREAD} ${TCMALLOC_LIB})
  install(TARGETS handler_file_optical DESTINATION ${CMAKE_INSTALL_LIBDIR}/tcmu-runner)
endif (with-fbo)

# The minimal library consumer
add_executable(consumer
  scsi.c
  consumer.c
  )
target_link_libraries(consumer tcmu)

if (with-zbc)
  # Stuff for building the file zbc handler
  add_library(handler_file_zbc
    SHARED
    scsi.c
    file_zbc.c
    )
  set_target_properties(handler_file_zbc
    PROPERTIES
    PREFIX ""
    )
  target_include_directories(handler_file_zbc
    PUBLIC ${PROJECT_SOURCE_DIR}/ccan
    )
  target_link_libraries(handler_file_zbc ${TCMALLOC_LIB})
  install(TARGETS handler_file_zbc DESTINATION ${CMAKE_INSTALL_LIBDIR}/tcmu-runner)
endif (with-zbc)

if (with-rbd)
  find_library(LIBRBD rbd)

  # Stuff for building the rbd handler
  add_library(handler_rbd
    SHARED
    rbd.c
    )
  set_target_properties(handler_rbd
    PROPERTIES
    PREFIX ""
    )
  target_include_directories(handler_rbd
    PUBLIC ${PROJECT_SOURCE_DIR}/ccan
    )
  target_link_libraries(handler_rbd
    ${LIBRBD}
    ${TCMALLOC_LIB}
    )
  install(TARGETS handler_rbd DESTINATION ${CMAKE_INSTALL_LIBDIR}/tcmu-runner)
endif (with-rbd)

if (with-glfs)
  find_library(GFAPI gfapi)

  set(GFAPI_VERSION760 0)

  pkg_check_modules(GFAPI760 glusterfs-api>=7.6 QUIET)
  if (GFAPI760_FOUND)
    set(GFAPI_VERSION760 1)
  endif (GFAPI760_FOUND)

  set(GFAPI_VERSION766 0)

  pkg_check_modules(GFAPI766 glusterfs-api>=7.6.6 QUIET)
  if (GFAPI766_FOUND)
    set(GFAPI_VERSION766 1)
  endif (GFAPI766_FOUND)

  # Stuff for building the glfs handler
  add_library(handler_glfs
    SHARED
    glfs.c
    )
  set_target_properties(handler_glfs
    PROPERTIES
    PREFIX ""
    )
  target_include_directories(handler_glfs
    PUBLIC ${PROJECT_SOURCE_DIR}/ccan
    )
  target_link_libraries(handler_glfs
    ${GFAPI}
    ${TCMALLOC_LIB}
    )
  install(TARGETS handler_glfs DESTINATION ${CMAKE_INSTALL_LIBDIR}/tcmu-runner)
endif (with-glfs)

if (with-qcow)
  find_package(ZLIB REQUIRED)

  # Stuff for building the qcow handler
  add_library(handler_qcow
    SHARED
    qcow.c
    )
  set_target_properties(handler_qcow
    PROPERTIES
    PREFIX ""
    )
  target_include_directories(handler_qcow
    PUBLIC ${PROJECT_SOURCE_DIR}/ccan
    )

  CHECK_INCLUDE_FILE("linux/falloc.h" HAVE_LINUX_FALLOC)
  if (HAVE_LINUX_FALLOC)
    set_target_properties(handler_qcow
      PROPERTIES
      COMPILE_FLAGS "-DHAVE_LINUX_FALLOC"
      )
  endif (HAVE_LINUX_FALLOC)
  target_link_libraries(handler_qcow
    ${ZLIB_LIBRARIES}
    ${TCMALLOC_LIB}
    )
  install(TARGETS handler_qcow DESTINATION ${CMAKE_INSTALL_LIBDIR}/tcmu-runner)
endif (with-qcow)

# stamp out a header file to pass some of the CMake settings
# to the source code
configure_file (
  "${PROJECT_SOURCE_DIR}/version.h.in"
  "${PROJECT_SOURCE_DIR}/version.h"
  )

configure_file (
  "${PROJECT_SOURCE_DIR}/tcmu.conf_install.cmake.in"
  "${PROJECT_SOURCE_DIR}/tcmu.conf_install.cmake"
  )
install(SCRIPT tcmu.conf_install.cmake)

configure_file (
  "${PROJECT_SOURCE_DIR}/logrotate.conf_install.cmake.in"
  "${PROJECT_SOURCE_DIR}/logrotate.conf_install.cmake"
  )
install(SCRIPT logrotate.conf_install.cmake)

install(FILES org.kernel.TCMUService1.service
  DESTINATION /usr/share/dbus-1/system-services)
install(FILES tcmu-runner.conf DESTINATION /etc/dbus-1/system.d)
if (SUPPORT_SYSTEMD)
  install(FILES tcmu-runner.service DESTINATION /usr/lib/systemd/system/)
endif (SUPPORT_SYSTEMD)
install(FILES tcmu-runner.8 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man8)