CMakeLists.txt 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. cmake_minimum_required(VERSION 2.6)
  2. project(periphery C)
  3. option(BUILD_TESTS "Build test programs" ON)
  4. if(NOT CMAKE_BUILD_TYPE)
  5. set(CMAKE_BUILD_TYPE Release)
  6. endif()
  7. # Check for Linux kernel header files for character device GPIO support
  8. include(CheckIncludeFiles)
  9. CHECK_INCLUDE_FILES(linux/gpio.h HAVE_CDEV_GPIO_HEADERS)
  10. if(NOT HAVE_CDEV_GPIO_HEADERS)
  11. message(WARNING "Linux kernel header files not found for character device GPIO support. c-periphery will be built with legacy sysfs GPIO support only.")
  12. endif()
  13. add_definitions(-DPERIPHERY_GPIO_CDEV_SUPPORT=$<BOOL:${HAVE_CDEV_GPIO_HEADERS}>)
  14. # Library version
  15. set(VERSION "2.3.1")
  16. set(SOVERSION ${VERSION})
  17. # Glob sources, headers, tests
  18. file(GLOB_RECURSE periphery_SOURCES src/*.c)
  19. file(GLOB_RECURSE periphery_HEADERS src/*.h)
  20. file(GLOB_RECURSE periphery_TESTS tests/*.c)
  21. # Expose git commit id into COMMIT_ID variable
  22. execute_process(
  23. COMMAND git --git-dir="${CMAKE_CURRENT_SOURCE_DIR}/.git" describe --abbrev --always --tags --dirty
  24. WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
  25. OUTPUT_VARIABLE COMMIT_ID
  26. ERROR_QUIET
  27. OUTPUT_STRIP_TRAILING_WHITESPACE)
  28. # Define C flags and include directories
  29. add_definitions(-DPERIPHERY_VERSION_COMMIT="${COMMIT_ID}")
  30. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -pedantic -Wall -Wextra -Wno-stringop-truncation -fPIC")
  31. set(CMAKE_C_FLAGS_DEBUG "-g")
  32. set(CMAKE_C_FLAGS_RELEASE "-O3")
  33. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
  34. # Declare library target
  35. add_library(periphery ${periphery_SOURCES} ${periphery_HEADERS})
  36. set_target_properties(periphery PROPERTIES SOVERSION ${VERSION})
  37. include(GNUInstallDirs)
  38. # Generate pkg-config pc file
  39. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/libperiphery.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libperiphery.pc @ONLY)
  40. # Declare install targets
  41. install(TARGETS periphery DESTINATION ${CMAKE_INSTALL_LIBDIR})
  42. install(FILES ${periphery_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME})
  43. install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libperiphery.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
  44. # Declare test targets if enabled
  45. if(BUILD_TESTS)
  46. foreach(TEST_SOURCE ${periphery_TESTS})
  47. get_filename_component(TEST_PROGRAM ${TEST_SOURCE} NAME_WE)
  48. add_executable(${TEST_PROGRAM} ${TEST_SOURCE})
  49. target_link_libraries(${TEST_PROGRAM} periphery pthread)
  50. set(TEST_PROGRAMS ${TEST_PROGRAMS} ${TEST_PROGRAM})
  51. endforeach()
  52. add_custom_target(tests DEPENDS periphery ${TEST_PROGRAMS})
  53. endif()