CMakeLists.txt 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #*******************************************************************************
  2. # Copyright (c) 2015, 2018 logi.cals GmbH and others
  3. #
  4. # All rights reserved. This program and the accompanying materials
  5. # are made available under the terms of the Eclipse Public License v1.0
  6. # and Eclipse Distribution License v1.0 which accompany this distribution.
  7. #
  8. # The Eclipse Public License is available at
  9. # http://www.eclipse.org/legal/epl-v10.html
  10. # and the Eclipse Distribution License is available at
  11. # http://www.eclipse.org/org/documents/edl-v10.php.
  12. #
  13. # Contributors:
  14. # Rainer Poisel - initial version
  15. # Ian Craggs (IBM Corp.) - merge master
  16. # Ian Craggs - update for MQTTV5 support
  17. #*******************************************************************************/
  18. # Note: on OS X you should install XCode and the associated command-line tools
  19. ## compilation/linkage settings
  20. INCLUDE_DIRECTORIES(
  21. .
  22. ${CMAKE_BINARY_DIR}
  23. )
  24. CONFIGURE_FILE(VersionInfo.h.in
  25. ${CMAKE_BINARY_DIR}/VersionInfo.h
  26. @ONLY
  27. )
  28. SET(common_src
  29. MQTTProtocolClient.c
  30. Clients.c
  31. utf-8.c
  32. StackTrace.c
  33. MQTTPacket.c
  34. MQTTPacketOut.c
  35. Messages.c
  36. Tree.c
  37. Socket.c
  38. Log.c
  39. MQTTPersistence.c
  40. Thread.c
  41. MQTTProtocolOut.c
  42. MQTTPersistenceDefault.c
  43. SocketBuffer.c
  44. Heap.c
  45. LinkedList.c
  46. MQTTProperties.c
  47. MQTTReasonCodes.c
  48. Base64.c
  49. SHA1.c
  50. WebSocket.c
  51. )
  52. IF (WIN32)
  53. SET(LIBS_SYSTEM ws2_32)
  54. ELSEIF (UNIX)
  55. IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
  56. SET(LIBS_SYSTEM c dl pthread)
  57. ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Android")
  58. SET(LIBS_SYSTEM c dl)
  59. ELSEIF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
  60. SET(LIBS_SYSTEM compat pthread)
  61. ELSE()
  62. SET(LIBS_SYSTEM c pthread)
  63. ENDIF()
  64. ENDIF()
  65. ## common compilation for libpaho-mqtt3c and libpaho-mqtt3a
  66. ADD_LIBRARY(common_obj OBJECT ${common_src})
  67. SET_PROPERTY(TARGET common_obj PROPERTY POSITION_INDEPENDENT_CODE ON)
  68. ADD_EXECUTABLE(MQTTVersion MQTTVersion.c)
  69. ADD_LIBRARY(paho-mqtt3c SHARED $<TARGET_OBJECTS:common_obj> MQTTClient.c)
  70. ADD_LIBRARY(paho-mqtt3a SHARED $<TARGET_OBJECTS:common_obj> MQTTAsync.c)
  71. TARGET_LINK_LIBRARIES(paho-mqtt3c ${LIBS_SYSTEM})
  72. TARGET_LINK_LIBRARIES(paho-mqtt3a ${LIBS_SYSTEM})
  73. TARGET_LINK_LIBRARIES(MQTTVersion paho-mqtt3a paho-mqtt3c ${LIBS_SYSTEM})
  74. SET_TARGET_PROPERTIES(
  75. paho-mqtt3c paho-mqtt3a PROPERTIES
  76. VERSION ${CLIENT_VERSION}
  77. SOVERSION ${PAHO_VERSION_MAJOR})
  78. INSTALL(TARGETS paho-mqtt3c paho-mqtt3a
  79. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  80. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  81. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
  82. INSTALL(TARGETS MQTTVersion
  83. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
  84. IF (PAHO_BUILD_STATIC)
  85. ADD_LIBRARY(paho-mqtt3c-static STATIC $<TARGET_OBJECTS:common_obj> MQTTClient.c)
  86. ADD_LIBRARY(paho-mqtt3a-static STATIC $<TARGET_OBJECTS:common_obj> MQTTAsync.c)
  87. TARGET_LINK_LIBRARIES(paho-mqtt3c-static ${LIBS_SYSTEM})
  88. TARGET_LINK_LIBRARIES(paho-mqtt3a-static ${LIBS_SYSTEM})
  89. SET_TARGET_PROPERTIES(paho-mqtt3c-static PROPERTIES OUTPUT_NAME paho-mqtt3c)
  90. SET_TARGET_PROPERTIES(paho-mqtt3a-static PROPERTIES OUTPUT_NAME paho-mqtt3a)
  91. INSTALL(TARGETS paho-mqtt3c-static paho-mqtt3a-static
  92. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
  93. ENDIF()
  94. INSTALL(FILES MQTTAsync.h MQTTClient.h MQTTClientPersistence.h MQTTProperties.h MQTTReasonCodes.h MQTTSubscribeOpts.h
  95. DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
  96. IF (PAHO_WITH_SSL)
  97. SET(OPENSSL_SEARCH_PATH "" CACHE PATH "Directory containing OpenSSL libraries and includes")
  98. IF (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
  99. SET(OPENSSL_SEARCH_PATH "/usr/local/opt/openssl")
  100. ENDIF (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
  101. IF (WIN32)
  102. SET(OPENSSL_SEARCH_PATH "C:/OpenSSL-Win64")
  103. SET(OPENSSL_SEARCH_LIB_PATH "${OPENSSL_SEARCH_PATH}/lib64")
  104. IF (DEFINED ENV{PAHO_WINDOWS_BUILD_BIT})
  105. IF ($ENV{PAHO_WINDOWS_BUILD_BIT} STREQUAL "x86")
  106. SET(OPENSSL_SEARCH_PATH "C:/OpenSSL-Win32")
  107. SET(OPENSSL_SEARCH_LIB_PATH "${OPENSSL_SEARCH_PATH}/lib32")
  108. ENDIF ()
  109. ENDIF ()
  110. ELSE()
  111. SET(OPENSSL_SEARCH_LIB_PATH "${OPENSSL_SEARCH_PATH}/lib64")
  112. ENDIF ()
  113. FIND_PATH(OPENSSL_INCLUDE_DIR openssl/ssl.h
  114. HINTS ${OPENSSL_SEARCH_PATH}/include)
  115. FIND_LIBRARY(OPENSSL_LIB NAMES ssl libssl ssleay32
  116. HINTS ${OPENSSL_SEARCH_PATH}/lib ${OPENSSL_SEARCH_LIB_PATH})
  117. FIND_LIBRARY(OPENSSLCRYPTO_LIB NAMES crypto libcrypto libeay32
  118. HINTS ${OPENSSL_SEARCH_PATH}/lib ${OPENSSL_SEARCH_LIB_PATH})
  119. MESSAGE(STATUS "OpenSSL hints: ${OPENSSL_SEARCH_PATH}")
  120. MESSAGE(STATUS "OpenSSL headers found at ${OPENSSL_INCLUDE_DIR}")
  121. MESSAGE(STATUS "OpenSSL library found at ${OPENSSL_LIB}")
  122. MESSAGE(STATUS "OpenSSL Crypto library found at ${OPENSSLCRYPTO_LIB}")
  123. INCLUDE_DIRECTORIES(
  124. ${OPENSSL_INCLUDE_DIR}
  125. )
  126. ## common compilation for libpaho-mqtt3cs and libpaho-mqtt3as
  127. ## Note: SSL libraries must be recompiled due ifdefs
  128. ADD_LIBRARY(common_ssl_obj OBJECT ${common_src})
  129. SET_PROPERTY(TARGET common_ssl_obj PROPERTY POSITION_INDEPENDENT_CODE ON)
  130. SET_PROPERTY(TARGET common_ssl_obj PROPERTY COMPILE_DEFINITIONS "OPENSSL=1")
  131. ADD_LIBRARY(paho-mqtt3cs SHARED $<TARGET_OBJECTS:common_ssl_obj> MQTTClient.c SSLSocket.c)
  132. ADD_LIBRARY(paho-mqtt3as SHARED $<TARGET_OBJECTS:common_ssl_obj> MQTTAsync.c SSLSocket.c)
  133. TARGET_LINK_LIBRARIES(paho-mqtt3cs ${OPENSSL_LIB} ${OPENSSLCRYPTO_LIB} ${LIBS_SYSTEM})
  134. TARGET_LINK_LIBRARIES(paho-mqtt3as ${OPENSSL_LIB} ${OPENSSLCRYPTO_LIB} ${LIBS_SYSTEM})
  135. SET_TARGET_PROPERTIES(
  136. paho-mqtt3cs paho-mqtt3as PROPERTIES
  137. VERSION ${CLIENT_VERSION}
  138. SOVERSION ${PAHO_VERSION_MAJOR}
  139. COMPILE_DEFINITIONS "OPENSSL=1")
  140. INSTALL(TARGETS paho-mqtt3cs paho-mqtt3as
  141. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  142. LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  143. RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
  144. IF (PAHO_BUILD_STATIC)
  145. ADD_LIBRARY(paho-mqtt3cs-static STATIC $<TARGET_OBJECTS:common_ssl_obj> MQTTClient.c SSLSocket.c)
  146. ADD_LIBRARY(paho-mqtt3as-static STATIC $<TARGET_OBJECTS:common_ssl_obj> MQTTAsync.c SSLSocket.c)
  147. TARGET_LINK_LIBRARIES(paho-mqtt3cs-static ${OPENSSL_LIBRARIES} ${LIBS_SYSTEM})
  148. TARGET_LINK_LIBRARIES(paho-mqtt3as-static ${OPENSSL_LIBRARIES} ${LIBS_SYSTEM})
  149. SET_TARGET_PROPERTIES(
  150. paho-mqtt3cs-static paho-mqtt3as-static PROPERTIES
  151. VERSION ${CLIENT_VERSION}
  152. SOVERSION ${PAHO_VERSION_MAJOR}
  153. COMPILE_DEFINITIONS "OPENSSL=1")
  154. SET_TARGET_PROPERTIES(paho-mqtt3cs-static PROPERTIES OUTPUT_NAME paho-mqtt3cs)
  155. SET_TARGET_PROPERTIES(paho-mqtt3as-static PROPERTIES OUTPUT_NAME paho-mqtt3as)
  156. INSTALL(TARGETS paho-mqtt3cs-static paho-mqtt3as-static
  157. ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
  158. ENDIF()
  159. ENDIF()
  160. # Base64 test
  161. ADD_EXECUTABLE( Base64Test EXCLUDE_FROM_ALL Base64.c Base64.h )
  162. TARGET_COMPILE_DEFINITIONS( Base64Test PUBLIC "-DBASE64_TEST" )
  163. IF (PAHO_WITH_SSL)
  164. ADD_EXECUTABLE( Base64TestOpenSSL EXCLUDE_FROM_ALL Base64.c Base64.h )
  165. TARGET_LINK_LIBRARIES( Base64TestOpenSSL ${OPENSSL_LIB} ${OPENSSLCRYPTO_LIB} )
  166. TARGET_COMPILE_DEFINITIONS( Base64TestOpenSSL PUBLIC "-DBASE64_TEST -DOPENSSL=1" )
  167. ENDIF (PAHO_WITH_SSL)
  168. # SHA1 test
  169. ADD_EXECUTABLE( Sha1Test EXCLUDE_FROM_ALL SHA1.c SHA1.h )
  170. TARGET_COMPILE_DEFINITIONS( Sha1Test PUBLIC "-DSHA1_TEST" )
  171. IF (PAHO_WITH_SSL)
  172. ADD_EXECUTABLE( Sha1TestOpenSSL EXCLUDE_FROM_ALL SHA1.c SHA1.h )
  173. TARGET_LINK_LIBRARIES( Sha1TestOpenSSL ${OPENSSL_LIB} ${OPENSSLCRYPTO_LIB} )
  174. TARGET_COMPILE_DEFINITIONS( Sha1TestOpenSSL PUBLIC "-DSHA1_TEST -DOPENSSL=1" )
  175. ENDIF (PAHO_WITH_SSL)