FindTFLite.cmake 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. SET(LIB_NAME tensorflow-microlite)
  2. IF(TF_RECACHE)
  3. MESSAGE(STATUS "Rebasing TensorFlow source")
  4. UNSET(TF_TAG CACHE)
  5. UNSET(TF_COMMIT CACHE)
  6. ENDIF()
  7. IF(NOT TF_SRC)
  8. INCLUDE(FetchContent)
  9. IF(TF_TAG)
  10. MESSAGE(STATUS "Getting TF tag '${TF_TAG}' and not master")
  11. FetchContent_Declare(
  12. tf
  13. GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
  14. GIT_PROGRESS FALSE
  15. GIT_REMOTE_UPDATE_STRATEGY REBASE_CHECKOUT
  16. GIT_TAG ${TF_TAG}
  17. QUIET
  18. )
  19. ELSEIF(TF_COMMIT)
  20. MESSAGE(STATUS "Getting TF commit '${TF_COMMIT}' and not master")
  21. FetchContent_Declare(
  22. tf
  23. GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
  24. GIT_PROGRESS FALSE
  25. GIT_REMOTE_UPDATE_STRATEGY REBASE_CHECKOUT
  26. GIT_TAG ${TF_COMMIT}
  27. QUIET
  28. )
  29. ELSE()
  30. FetchContent_Declare(
  31. tf
  32. GIT_REPOSITORY https://github.com/tensorflow/tensorflow.git
  33. GIT_PROGRESS FALSE
  34. GIT_REMOTE_UPDATE_STRATEGY REBASE_CHECKOUT
  35. QUIET
  36. )
  37. ENDIF()
  38. FetchContent_GetProperties(tf)
  39. IF(NOT tf_POPULATED)
  40. MESSAGE(STATUS "TensorFlow sources not given/populated, fetching from GH...")
  41. FetchContent_Populate(tf)
  42. ENDIF()
  43. SET(TF_SRC ${tf_SOURCE_DIR})
  44. FetchContent_Declare(
  45. flatbuffers
  46. GIT_REPOSITORY https://github.com/google/flatbuffers.git
  47. GIT_PROGRESS FALSE
  48. QUIET
  49. )
  50. FetchContent_GetProperties(flatbuffers)
  51. IF(NOT flatbuffers_POPULATED)
  52. MESSAGE(STATUS "Now getting 'flatbuffers'...")
  53. FetchContent_Populate(flatbuffers)
  54. ENDIF()
  55. LIST(APPEND TFL_INC_DIRS ${flatbuffers_SOURCE_DIR}/include)
  56. FetchContent_Declare(
  57. fixedpoint
  58. GIT_REPOSITORY https://github.com/google/gemmlowp.git
  59. GIT_PROGRESS FALSE
  60. QUIET
  61. )
  62. FetchContent_GetProperties(fixedpoint)
  63. IF(NOT fixedpoint_POPULATED)
  64. MESSAGE(STATUS "And finaly 'fixedpoint'...")
  65. FetchContent_Populate(fixedpoint)
  66. ENDIF()
  67. LIST(APPEND TFL_INC_DIRS ${fixedpoint_SOURCE_DIR})
  68. FetchContent_Declare(
  69. ruy
  70. GIT_REPOSITORY https://github.com/google/ruy.git
  71. GIT_PROGRESS FALSE
  72. QUIET
  73. )
  74. FetchContent_GetProperties(ruy)
  75. IF(NOT ruy_POPULATED)
  76. MESSAGE(STATUS "Oh we also need 'ruy'...")
  77. FetchContent_Populate(ruy)
  78. ENDIF()
  79. LIST(APPEND TFL_INC_DIRS ${ruy_SOURCE_DIR})
  80. ENDIF()
  81. SET(TFL_SRC ${TF_SRC}/tensorflow/lite)
  82. SET(TFLM_SRC ${TFL_SRC}/micro)
  83. SET(TFLD_SRC ${TFL_SRC}/tools/make/downloads)
  84. IF(EXISTS ${TFLD_SRC}/flatbuffers/include)
  85. LIST(APPEND TFL_INC_DIRS ${TFLD_SRC}/flatbuffers/include)
  86. ENDIF()
  87. IF(EXISTS ${TFLD_SRC}/gemmlowp)
  88. LIST(APPEND ${TFLD_SRC}/gemmlowp)
  89. ENDIF()
  90. LIST(APPEND TFL_INC_DIRS
  91. ${TF_SRC}
  92. )
  93. FILE(GLOB TFL_ROOT_SRCS
  94. ${TFLM_SRC}/*.cc
  95. )
  96. FILE(GLOB TFL_KERNELS_SRCS
  97. ${TFLM_SRC}/kernels/*.cc
  98. ${TFL_SRC}/kernels/internal/quantization_util.cc
  99. ${TFL_SRC}/kernels/kernel_util.cc
  100. )
  101. FILE(GLOB TFL_CORE_API_SRCS
  102. ${TFL_SRC}/core/api/*.cc
  103. )
  104. FILE(GLOB TFL_C_SRCS
  105. ${TFL_SRC}/c/common.c
  106. )
  107. FILE(GLOB TFL_MEM_PLANNER_SRCS
  108. ${TFLM_SRC}/memory_planner/*.cc
  109. )
  110. SET(TFL_SRCS
  111. ${TFL_ROOT_SRCS}
  112. ${TFL_KERNELS_SRCS}
  113. ${TFL_CORE_API_SRCS}
  114. ${TFL_C_SRCS}
  115. ${TFL_MEM_PLANNER_SRCS}
  116. )
  117. LIST(FILTER TFL_SRCS EXCLUDE REGEX "([a-z0-9_]+_test.cc)$")
  118. ADD_LIBRARY(${LIB_NAME} STATIC
  119. ${TFL_SRCS}
  120. )
  121. TARGET_INCLUDE_DIRECTORIES(${LIB_NAME} PUBLIC
  122. ${TFL_INC_DIRS}
  123. )
  124. TARGET_COMPILE_DEFINITIONS(${LIB_NAME} PUBLIC
  125. TF_LITE_USE_GLOBAL_MAX
  126. TF_LITE_USE_GLOBAL_MIN
  127. TF_LITE_USE_GLOBAL_CMATH_FUNCTIONS
  128. TF_LITE_STATIC_MEMORY
  129. TFLITE_EMULATE_FLOAT
  130. "$<$<CONFIG:RELEASE>:TF_LITE_STRIP_ERROR_STRINGS>"
  131. )
  132. SET(TFLite_INCLUDE_DIRS
  133. ${TFL_INC_DIRS}
  134. )
  135. SET(TFLite_SOURCES
  136. ${TFL_SRCS}
  137. )
  138. INCLUDE(FindPackageHandleStandardArgs)
  139. FIND_PACKAGE_HANDLE_STANDARD_ARGS(TFLite DEFAULT_MSG TFLite_INCLUDE_DIRS TFLite_SOURCES)