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