CMakeLists.txt 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. idf_build_get_property(idf_target IDF_TARGET)
  2. if(${idf_target} STREQUAL "linux")
  3. return() # This component is not supported by the POSIX/Linux simulator
  4. endif()
  5. if(CONFIG_OPENTHREAD_ENABLED OR CONFIG_IDF_DOC_BUILD)
  6. set(public_include_dirs
  7. "include"
  8. "openthread/include")
  9. endif()
  10. if(CONFIG_OPENTHREAD_ENABLED)
  11. set(private_include_dirs
  12. "openthread/examples/platforms"
  13. "openthread/include/openthread"
  14. "openthread/src"
  15. "openthread/src/core"
  16. "openthread/src/lib/hdlc"
  17. "openthread/src/lib/spinel"
  18. "openthread/src/ncp"
  19. "private_include")
  20. set(src_dirs
  21. "src"
  22. "src/port"
  23. "openthread/examples/platforms/utils"
  24. "openthread/src/core/api"
  25. "openthread/src/core/common"
  26. "openthread/src/core/crypto"
  27. "openthread/src/core/diags"
  28. "openthread/src/core/mac"
  29. "openthread/src/core/radio"
  30. "openthread/src/core/thread"
  31. "openthread/src/core/utils"
  32. "openthread/src/lib/hdlc"
  33. "openthread/src/lib/spinel")
  34. set(exclude_srcs
  35. "openthread/examples/platforms/utils/logging_rtt.c"
  36. "openthread/examples/platforms/utils/soft_source_match_table.c"
  37. "openthread/src/core/common/extension_example.cpp")
  38. if(CONFIG_OPENTHREAD_FTD OR CONFIG_OPENTHREAD_MTD)
  39. list(APPEND src_dirs
  40. "openthread/src/core/backbone_router"
  41. "openthread/src/core/coap"
  42. "openthread/src/core/meshcop"
  43. "openthread/src/core/net"
  44. "openthread/src/lib/platform")
  45. if(CONFIG_OPENTHREAD_CLI)
  46. list(APPEND src_dirs
  47. "openthread/examples/apps/cli"
  48. "openthread/src/cli")
  49. list(APPEND exclude_srcs
  50. "openthread/examples/apps/cli/main.c")
  51. endif()
  52. elseif(CONFIG_OPENTHREAD_RADIO)
  53. list(APPEND src_dirs
  54. "openthread/src/ncp"
  55. "openthread/examples/apps/ncp")
  56. list(APPEND exclude_srcs
  57. "src/port/esp_openthread_state.c"
  58. "openthread/examples/apps/ncp/main.c"
  59. "openthread/src/core/api/backbone_router_api.cpp"
  60. "openthread/src/core/api/child_supervision_api.cpp"
  61. "openthread/src/core/api/dataset_api.cpp"
  62. "openthread/src/core/api/dns_api.cpp"
  63. "openthread/src/core/api/entropy_api.cpp"
  64. "openthread/src/core/api/heap_api.cpp"
  65. "openthread/src/core/api/icmp6_api.cpp"
  66. "openthread/src/core/api/ip6_api.cpp"
  67. "openthread/src/core/api/link_api.cpp"
  68. "openthread/src/core/api/link_metrics_api.cpp"
  69. "openthread/src/core/api/message_api.cpp"
  70. "openthread/src/core/api/nat64_api.cpp"
  71. "openthread/src/core/api/netdata_api.cpp"
  72. "openthread/src/core/api/netdiag_api.cpp"
  73. "openthread/src/core/api/random_crypto_api.cpp"
  74. "openthread/src/core/api/tcp_api.cpp"
  75. "openthread/src/core/api/udp_api.cpp"
  76. "openthread/src/core/common/heap.cpp"
  77. "openthread/src/core/common/heap_string.cpp"
  78. "openthread/src/core/common/notifier.cpp"
  79. "openthread/src/core/common/settings.cpp"
  80. "openthread/src/core/common/time_ticker.cpp"
  81. "openthread/src/core/mac/channel_mask.cpp"
  82. "openthread/src/core/mac/data_poll_handler.cpp"
  83. "openthread/src/core/mac/data_poll_sender.cpp"
  84. "openthread/src/core/mac/mac.cpp"
  85. "openthread/src/core/mac/mac_filter.cpp"
  86. "openthread/src/core/mac/mac_links.cpp"
  87. "openthread/src/core/thread/announce_begin_server.cpp"
  88. "openthread/src/core/thread/announce_sender.cpp"
  89. "openthread/src/core/thread/address_resolver.cpp"
  90. "openthread/src/core/thread/child_supervision.cpp"
  91. "openthread/src/core/thread/discover_scanner.cpp"
  92. "openthread/src/core/thread/energy_scan_server.cpp"
  93. "openthread/src/core/thread/key_manager.cpp"
  94. "openthread/src/core/thread/link_metrics.cpp"
  95. "openthread/src/core/thread/lowpan.cpp"
  96. "openthread/src/core/thread/mesh_forwarder.cpp"
  97. "openthread/src/core/thread/mesh_forwarder_ftd.cpp"
  98. "openthread/src/core/thread/mesh_forwarder_mtd.cpp"
  99. "openthread/src/core/thread/mle.cpp"
  100. "openthread/src/core/thread/mle_types.cpp"
  101. "openthread/src/core/thread/neighbor_table.cpp"
  102. "openthread/src/core/thread/network_data.cpp"
  103. "openthread/src/core/thread/network_data_leader.cpp"
  104. "openthread/src/core/thread/network_data_leader_ftd.cpp"
  105. "openthread/src/core/thread/network_data_types.cpp"
  106. "openthread/src/core/thread/network_data_service.cpp"
  107. "openthread/src/core/thread/network_diagnostic.cpp"
  108. "openthread/src/core/thread/panid_query_server.cpp"
  109. "openthread/src/core/thread/thread_netif.cpp"
  110. "openthread/src/core/thread/tmf.cpp"
  111. "openthread/src/core/thread/topology.cpp"
  112. "openthread/src/core/utils/child_supervision.cpp")
  113. endif()
  114. if(CONFIG_OPENTHREAD_RADIO_NATIVE)
  115. list(APPEND exclude_srcs
  116. "src/port/esp_openthread_radio_spinel.cpp"
  117. "src/port/esp_spi_spinel_interface.cpp"
  118. "src/port/esp_uart_spinel_interface.cpp"
  119. )
  120. elseif(CONFIG_OPENTHREAD_RADIO_SPINEL_UART OR CONFIG_OPENTHREAD_RADIO_SPINEL_SPI)
  121. list(APPEND exclude_srcs
  122. "src/port/esp_openthread_radio.c"
  123. "src/port/esp_openthread_sleep.c")
  124. endif()
  125. if(CONFIG_OPENTHREAD_BORDER_ROUTER)
  126. list(APPEND src_dirs
  127. "openthread/src/core/border_router")
  128. endif()
  129. if(CONFIG_OPENTHREAD_FTD)
  130. set_source_files_properties("openthread/src/core/net/srp_server.cpp"
  131. PROPERTIES COMPILE_FLAGS
  132. -Wno-maybe-uninitialized)
  133. endif()
  134. if(NOT CONFIG_OPENTHREAD_DNS64_CLIENT)
  135. list(APPEND exclude_srcs
  136. "src/esp_openthread_dns64.c")
  137. endif()
  138. if(NOT CONFIG_FREERTOS_USE_TICKLESS_IDLE)
  139. list(APPEND exclude_srcs
  140. "src/port/esp_openthread_sleep.c")
  141. endif()
  142. if(NOT CONFIG_OPENTHREAD_PLATFORM_MSGPOOL_MANAGEMENT)
  143. list(APPEND exclude_srcs
  144. "src/port/esp_openthread_messagepool.c")
  145. endif()
  146. if(CONFIG_OPENTHREAD_FTD)
  147. set(device_type "OPENTHREAD_FTD=1")
  148. elseif(CONFIG_OPENTHREAD_MTD)
  149. set(device_type "OPENTHREAD_MTD=1")
  150. elseif(CONFIG_OPENTHREAD_RADIO)
  151. set(device_type "OPENTHREAD_RADIO=1")
  152. endif()
  153. endif()
  154. execute_process(
  155. COMMAND git rev-parse --short HEAD
  156. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  157. OUTPUT_VARIABLE IDF_VERSION_FOR_OPENTHREAD_PACKAGE OUTPUT_STRIP_TRAILING_WHITESPACE
  158. )
  159. execute_process(
  160. COMMAND git rev-parse --short HEAD
  161. WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/openthread
  162. OUTPUT_VARIABLE OPENTHREAD_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE
  163. )
  164. string(TIMESTAMP OT_BUILD_TIMESTAMP " %Y-%m-%d %H:%M:%S UTC" UTC)
  165. string(CONCAT OT_FULL_VERSION_STRING
  166. "openthread-esp32/"
  167. "${IDF_VERSION_FOR_OPENTHREAD_PACKAGE}-${OPENTHREAD_VERSION}\; "
  168. "${CONFIG_IDF_TARGET}\; ${OT_BUILD_TIMESTAMP}")
  169. idf_component_register(SRC_DIRS "${src_dirs}"
  170. EXCLUDE_SRCS "${exclude_srcs}"
  171. INCLUDE_DIRS "${public_include_dirs}"
  172. PRIV_INCLUDE_DIRS "${private_include_dirs}"
  173. REQUIRES esp_netif lwip driver
  174. LDFRAGMENTS linker.lf
  175. PRIV_REQUIRES console esp_event esp_partition esp_timer
  176. ieee802154 mbedtls nvs_flash)
  177. if(CONFIG_OPENTHREAD_ENABLED)
  178. if(CONFIG_OPENTHREAD_RADIO)
  179. set(CONFIG_FILE_TYPE "radio")
  180. elseif(CONFIG_OPENTHREAD_FTD)
  181. set(CONFIG_FILE_TYPE "ftd")
  182. elseif(CONFIG_OPENTHREAD_MTD)
  183. set(CONFIG_FILE_TYPE "mtd")
  184. endif()
  185. target_compile_definitions(
  186. ${COMPONENT_LIB}
  187. PUBLIC
  188. "OPENTHREAD_CONFIG_FILE=\"openthread-core-esp32x-${CONFIG_FILE_TYPE}-config.h\""
  189. "${device_type}"
  190. PRIVATE
  191. "PACKAGE_VERSION=\"${IDF_VERSION_FOR_OPENTHREAD_PACKAGE}-${OPENTHREAD_VERSION}\""
  192. "OPENTHREAD_BUILD_DATETIME=\"${OT_BUILD_TIMESTAMP}\""
  193. )
  194. if(CONFIG_OPENTHREAD_RADIO)
  195. file(WRITE ${CMAKE_BINARY_DIR}/rcp_version ${OT_FULL_VERSION_STRING})
  196. endif()
  197. if(CONFIG_OPENTHREAD_BORDER_ROUTER)
  198. if($ENV{OPENTHREAD_ESP_BR_LIB_FROM_INTERNAL_SRC})
  199. idf_component_get_property(openthread_br_lib openthread_br COMPONENT_LIB)
  200. target_link_libraries(${COMPONENT_LIB} PUBLIC $<TARGET_FILE:${openthread_br_lib}>)
  201. else()
  202. add_prebuilt_library(openthread_br "${CMAKE_CURRENT_SOURCE_DIR}/lib/${idf_target}/libopenthread_br.a"
  203. REQUIRES openthread)
  204. target_link_libraries(${COMPONENT_LIB} INTERFACE openthread_br)
  205. endif()
  206. endif()
  207. endif()