blob: ab3060549a214593cc2b597a49876a6e8ae0198e [file] [log] [blame]
cmake_minimum_required(VERSION 2.8.7)
project(iiod C)
include(FindBISON)
include(FindFLEX)
flex_target(lexer
${CMAKE_CURRENT_SOURCE_DIR}/lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.c)
bison_target(parser
${CMAKE_CURRENT_SOURCE_DIR}/parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.c)
add_flex_bison_dependency(lexer parser)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
set(IIOD_CFILES iiod.c ops.c thread-pool.c ${BISON_parser_OUTPUTS} ${FLEX_lexer_OUTPUTS})
find_library(LIBAIO_LIBRARIES aio)
find_path(LIBAIO_INCLUDE_DIR libaio.h)
if (LIBAIO_LIBRARIES AND LIBAIO_INCLUDE_DIR)
option(ENABLE_AIO "Build IIOD with async. I/O support" ON)
endif ()
include(CheckTypeSize)
set(CMAKE_EXTRA_INCLUDE_FILES linux/usb/functionfs.h)
check_type_size("struct usb_functionfs_descs_head_v2" FUNCTIONFS_V2)
set(CMAKE_EXTRA_INCLUDE_FILES)
if (HAVE_FUNCTIONFS_V2)
OPTION(WITH_IIOD_USBD "Add support for USB through FunctionFS within IIOD" ${ENABLE_AIO})
if (WITH_IIOD_USBD)
if (NOT ENABLE_AIO)
message(SEND_ERROR "USB support in IIOD requires async. I/O support")
endif (NOT ENABLE_AIO)
set(IIOD_CFILES ${IIOD_CFILES} usbd.c)
endif (WITH_IIOD_USBD)
endif (HAVE_FUNCTIONFS_V2)
include(CheckSymbolExists)
set(CMAKE_REQUIRED_LIBRARIES ${PTHREAD_LIBRARIES})
check_symbol_exists(pthread_setname_np "pthread.h" HAS_PTHREAD_SETNAME_NP)
set(CMAKE_REQUIRED_LIBRARIES)
add_executable(iiod ${IIOD_CFILES})
set_target_properties(iiod PROPERTIES
C_STANDARD 99
C_STANDARD_REQUIRED ON
C_EXTENSIONS OFF
)
target_link_libraries(iiod iio ${PTHREAD_LIBRARIES} ${AVAHI_LIBRARIES})
if (ENABLE_AIO)
add_definitions(-DWITH_AIO=1)
include_directories(${LIBAIO_INCLUDE_DIR})
target_link_libraries(iiod ${LIBAIO_LIBRARIES})
endif ()
add_definitions(-D_GNU_SOURCE=1)
if(NOT SKIP_INSTALL_ALL)
install(TARGETS iiod RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR})
endif()
if (WITH_SYSTEMD)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/init/iiod.service.cmakein ${PROJECT_BINARY_DIR}/init/iiod.service)
install(FILES ${PROJECT_BINARY_DIR}/init/iiod.service DESTINATION ${SYSTEMD_UNIT_INSTALL_DIR})
endif()
if (WITH_SYSVINIT)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/init/iiod.init.cmakein ${PROJECT_BINARY_DIR}/init/iiod)
install(FILES ${PROJECT_BINARY_DIR}/init/iiod
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
DESTINATION ${SYSVINIT_INSTALL_DIR})
endif()
if (WITH_UPSTART)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/init/iiod.conf.cmakein ${PROJECT_BINARY_DIR}/init/iiod.conf)
install(FILES ${PROJECT_BINARY_DIR}/init/iiod.conf DESTINATION ${UPSTART_CONF_INSTALL_DIR})
endif()