CMakeLists.txt 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. cmake_minimum_required(VERSION 2.6)
  2. INCLUDE(CheckIncludeFiles)
  3. PROJECT(uclient C)
  4. ADD_DEFINITIONS(-Os -Wall -Werror --std=gnu99 -g3)
  5. IF(CMAKE_C_COMPILER_VERSION VERSION_GREATER 6)
  6. ADD_DEFINITIONS(-Wextra -Werror=implicit-function-declaration)
  7. ADD_DEFINITIONS(-Wformat -Werror=format-security -Werror=format-nonliteral)
  8. ENDIF()
  9. ADD_DEFINITIONS(-Wno-unused-parameter -Wmissing-declarations)
  10. SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
  11. FIND_PATH(ubox_include_dir libubox/ustream-ssl.h)
  12. INCLUDE_DIRECTORIES(${ubox_include_dir})
  13. OPTION(BUILD_UCODE "build ucode plugin" ON)
  14. IF(BUILD_STATIC)
  15. FIND_LIBRARY(ubox_library NAMES ubox.a)
  16. ELSE(BUILD_STATIC)
  17. FIND_LIBRARY(ubox_library NAMES ubox)
  18. ENDIF(BUILD_STATIC)
  19. IF(APPLE)
  20. SET(UCODE_MODULE_LINK_OPTIONS "LINKER:-undefined,dynamic_lookup")
  21. ENDIF()
  22. SET(LIB_SOURCES uclient.c uclient-http.c uclient-utils.c)
  23. ADD_LIBRARY(uclient SHARED ${LIB_SOURCES})
  24. TARGET_LINK_LIBRARIES(uclient ${ubox_library} dl)
  25. SET(CLI_SOURCES uclient-fetch.c progress.c)
  26. ADD_EXECUTABLE(uclient-fetch ${CLI_SOURCES})
  27. TARGET_LINK_LIBRARIES(uclient-fetch uclient)
  28. IF(UNIT_TESTING)
  29. ADD_DEFINITIONS(-DUNIT_TESTING)
  30. ENABLE_TESTING()
  31. ADD_SUBDIRECTORY(tests)
  32. IF(CMAKE_C_COMPILER_ID STREQUAL "Clang")
  33. ADD_LIBRARY(uclient-san SHARED ${LIB_SOURCES})
  34. TARGET_COMPILE_OPTIONS(uclient-san PRIVATE -g -fno-omit-frame-pointer -fsanitize=undefined,address,leak -fno-sanitize-recover=all)
  35. TARGET_LINK_OPTIONS(uclient-san PRIVATE -fsanitize=undefined,address,leak)
  36. TARGET_LINK_LIBRARIES(uclient-san ${ubox_library} dl)
  37. ADD_EXECUTABLE(uclient-fetch-san ${CLI_SOURCES})
  38. TARGET_COMPILE_OPTIONS(uclient-fetch-san PRIVATE -g -fno-omit-frame-pointer -fsanitize=undefined,address,leak -fno-sanitize-recover=all)
  39. TARGET_LINK_OPTIONS(uclient-fetch-san PRIVATE -fsanitize=undefined,address,leak)
  40. TARGET_LINK_LIBRARIES(uclient-fetch-san uclient-san ${ubox_library} dl)
  41. ENDIF()
  42. ENDIF()
  43. IF(BUILD_UCODE)
  44. ADD_LIBRARY(uclient_lib MODULE ucode.c)
  45. SET_TARGET_PROPERTIES(uclient_lib PROPERTIES OUTPUT_NAME uclient PREFIX "")
  46. TARGET_LINK_OPTIONS(uclient_lib PRIVATE ${UCODE_MODULE_LINK_OPTIONS})
  47. TARGET_LINK_LIBRARIES(uclient_lib uclient)
  48. INSTALL(TARGETS uclient_lib
  49. LIBRARY DESTINATION lib/ucode
  50. )
  51. ENDIF()
  52. INSTALL(FILES uclient.h uclient-utils.h
  53. DESTINATION include/libubox
  54. )
  55. INSTALL(TARGETS uclient uclient-fetch
  56. LIBRARY DESTINATION lib
  57. RUNTIME DESTINATION bin
  58. )