CMakeLists.txt 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. cmake_minimum_required(VERSION 2.6)
  2. PROJECT(ucert C)
  3. ADD_DEFINITIONS(-Wall -Werror)
  4. IF(CMAKE_C_COMPILER_VERSION VERSION_GREATER 6)
  5. ADD_DEFINITIONS(-Wextra -Werror=implicit-function-declaration)
  6. ADD_DEFINITIONS(-Wformat -Werror=format-security -Werror=format-nonliteral)
  7. ENDIF()
  8. ADD_DEFINITIONS(-Os -std=gnu99 -ggdb -Wmissing-declarations -Wno-unused-parameter)
  9. SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
  10. FIND_PATH(ubox_include_dir NAMES libubox/usock.h)
  11. FIND_PATH(jsonc_include_dir NAMES json-c/json.h)
  12. INCLUDE_DIRECTORIES(${ubox_include_dir} ${jsonc_include_dir})
  13. FIND_LIBRARY(ubox NAMES ubox)
  14. FIND_LIBRARY(blobmsg_json NAMES blobmsg_json)
  15. FIND_LIBRARY(json NAMES json-c json)
  16. MACRO(ADD_UNIT_TEST_SAN name)
  17. ADD_EXECUTABLE(${name}-san ${name}.c)
  18. TARGET_COMPILE_OPTIONS(${name}-san PRIVATE -g -fno-omit-frame-pointer -fsanitize=undefined,address,leak -fno-sanitize-recover=all)
  19. TARGET_LINK_OPTIONS(${name}-san PRIVATE -fsanitize=undefined,address,leak)
  20. TARGET_LINK_LIBRARIES(${name}-san ucert_lib ${ubox} ${blobmsg_json} ${json})
  21. TARGET_INCLUDE_DIRECTORIES(${name}-san PRIVATE ${PROJECT_SOURCE_DIR})
  22. ENDMACRO(ADD_UNIT_TEST_SAN)
  23. IF(UCERT_HOST_BUILD)
  24. ADD_DEFINITIONS(-DUCERT_HOST_BUILD)
  25. ENDIF()
  26. IF(USE_RPATH)
  27. SET(CMAKE_INSTALL_RPATH "${USE_RPATH}")
  28. SET(CMAKE_MACOSX_RPATH 1)
  29. ENDIF()
  30. ADD_LIBRARY(ucert_lib STATIC usign-exec.c)
  31. ADD_EXECUTABLE(ucert ucert.c)
  32. IF(UCERT_FULL)
  33. ADD_DEFINITIONS(-DUCERT_FULL)
  34. TARGET_LINK_LIBRARIES(ucert ucert_lib ${ubox} ${blobmsg_json} ${json})
  35. ELSE()
  36. ADD_DEFINITIONS(-DUCERT_STRIP_MESSAGES)
  37. TARGET_LINK_LIBRARIES(ucert ucert_lib ${ubox})
  38. ENDIF()
  39. IF(UNIT_TESTING)
  40. ENABLE_TESTING()
  41. ADD_SUBDIRECTORY(tests)
  42. ADD_UNIT_TEST_SAN(ucert)
  43. ENDIF()
  44. INSTALL(TARGETS ucert RUNTIME DESTINATION bin)