blob: 2442bed1f8f542bf1fc95e29b8e7c58f0afd191b [file] [log] [blame]
Marat Dukhan08c4a432019-10-03 09:29:21 -07001"""Build definitions and rules for XNNPACK."""
2
3load(":emscripten.bzl", "xnnpack_emscripten_benchmark_linkopts", "xnnpack_emscripten_deps", "xnnpack_emscripten_minimal_linkopts", "xnnpack_emscripten_test_linkopts")
4
5def xnnpack_visibility():
6 """Visibility of :XNNPACK target.
7
8 All other targets have private visibility, and can not have external
9 dependencies.
10 """
Marat Dukhan9d056a42019-10-03 12:13:35 -070011 return ["//visibility:public"]
Marat Dukhan08c4a432019-10-03 09:29:21 -070012
13def xnnpack_min_size_copts():
14 """Compiler flags for size-optimized builds."""
15 return ["-Os"]
16
Marat Dukhan10a38082020-04-17 03:58:35 -070017def xnnpack_gcc_std_copts():
18 """GCC-like compiler flags to specify language standard for C sources."""
Marat Dukhan08c4a432019-10-03 09:29:21 -070019 return ["-std=c99"]
20
Marat Dukhan10a38082020-04-17 03:58:35 -070021def xnnpack_msvc_std_copts():
22 """MSVC compiler flags to specify language standard for C sources."""
23 return ["/Drestrict="]
24
Marat Dukhan08c4a432019-10-03 09:29:21 -070025def xnnpack_std_cxxopts():
26 """Compiler flags to specify language standard for C++ sources."""
27 return ["-std=gnu++11"]
28
29def xnnpack_optional_ruy_copts():
30 """Compiler flags to optionally enable Ruy benchmarks."""
31 return []
32
33def xnnpack_optional_gemmlowp_copts():
34 """Compiler flags to optionally enable Gemmlowp benchmarks."""
35 return []
36
37def xnnpack_optional_tflite_copts():
38 """Compiler flags to optionally enable TensorFlow Lite benchmarks."""
39 return []
40
41def xnnpack_optional_armcl_copts():
42 """Compiler flags to optionally enable ARM ComputeLibrary benchmarks."""
43 return []
44
Marat Dukhan8d3c6932020-03-06 20:27:27 -080045def xnnpack_optional_dnnl_copts():
46 """Compiler flags to optionally enable Intel DNNL benchmarks."""
47 return []
48
Marat Dukhan08c4a432019-10-03 09:29:21 -070049def xnnpack_optional_ruy_deps():
50 """Optional Ruy dependencies."""
51 return []
52
53def xnnpack_optional_gemmlowp_deps():
54 """Optional Gemmlowp dependencies."""
55 return []
56
57def xnnpack_optional_tflite_deps():
58 """Optional TensorFlow Lite dependencies."""
59 return []
60
61def xnnpack_optional_armcl_deps():
62 """Optional ARM ComputeLibrary dependencies."""
63 return []
64
Marat Dukhan8d3c6932020-03-06 20:27:27 -080065def xnnpack_optional_dnnl_deps():
66 """Optional Intel DNNL dependencies."""
67 return []
68
Marat Dukhan08c4a432019-10-03 09:29:21 -070069def xnnpack_cc_library(
70 name,
71 srcs = [],
72 x86_srcs = [],
73 aarch32_srcs = [],
74 aarch64_srcs = [],
Marat Dukhancf056b22019-10-07 10:26:29 -070075 wasm_srcs = [],
76 wasmsimd_srcs = [],
Marat Dukhan08c4a432019-10-03 09:29:21 -070077 copts = [],
Marat Dukhan10a38082020-04-17 03:58:35 -070078 gcc_copts = [],
79 msvc_copts = [],
80 mingw_copts = [],
81 msys_copts = [],
82 gcc_x86_copts = [],
83 msvc_x86_32_copts = [],
84 msvc_x86_64_copts = [],
Marat Dukhanbc69ed62020-06-09 21:34:56 -070085 apple_aarch32_copts = [],
Marat Dukhan08c4a432019-10-03 09:29:21 -070086 aarch32_copts = [],
87 aarch64_copts = [],
Marat Dukhancf056b22019-10-07 10:26:29 -070088 wasm_copts = [],
89 wasmsimd_copts = [],
Marat Dukhan08c4a432019-10-03 09:29:21 -070090 optimized_copts = ["-O2"],
91 hdrs = [],
Marat Dukhan10a38082020-04-17 03:58:35 -070092 defines = [],
93 includes = [],
94 deps = [],
95 visibility = []):
Marat Dukhancf056b22019-10-07 10:26:29 -070096 """C/C++/assembly library with architecture-specific configuration.
Marat Dukhan08c4a432019-10-03 09:29:21 -070097
98 Define a static library with architecture- and instruction-specific
Marat Dukhancf056b22019-10-07 10:26:29 -070099 source files and/or compiler flags.
Marat Dukhan08c4a432019-10-03 09:29:21 -0700100
101 Args:
102 name: The name of the library target to define.
103 srcs: The list of architecture-independent source files.
104 x86_srcs: The list of x86-specific source files.
105 aarch32_srcs: The list of AArch32-specific source files.
106 aarch64_srcs: The list of AArch64-specific source files.
Marat Dukhancf056b22019-10-07 10:26:29 -0700107 wasm_srcs: The list of WebAssembly/MVP-specific source files.
108 wasmsimd_srcs: The list of WebAssembly/SIMD-specific source files.
Marat Dukhan08c4a432019-10-03 09:29:21 -0700109 copts: The list of compiler flags to use in all builds. -I flags for
110 include/ and src/ directories of XNNPACK are always prepended
111 before these user-specified flags.
Marat Dukhan10a38082020-04-17 03:58:35 -0700112 gcc_copts: The list of compiler flags to use with GCC-like compilers.
113 msvc_copts: The list of compiler flags to use with MSVC compiler.
114 mingw_copts: The list of compiler flags to use with MinGW GCC compilers.
Marat Dukhanbc69ed62020-06-09 21:34:56 -0700115 msys_copts: The list of compiler flags to use with MSYS (Cygwin) GCC
116 compilers.
117 gcc_x86_copts: The list of GCC-like compiler flags to use in x86 (32-bit
118 and 64-bit) builds.
119 msvc_x86_32_copts: The list of MSVC compiler flags to use in x86 (32-bit)
120 builds.
121 msvc_x86_64_copts: The list of MSVC compiler flags to use in x86 (64-bit)
122 builds.
123 apple_aarch32_copts: The list of compiler flags to use in AArch32 builds
124 with Apple Clang.
Marat Dukhan08c4a432019-10-03 09:29:21 -0700125 aarch32_copts: The list of compiler flags to use in AArch32 builds.
126 aarch64_copts: The list of compiler flags to use in AArch64 builds.
Marat Dukhancf056b22019-10-07 10:26:29 -0700127 wasm_copts: The list of compiler flags to use in WebAssembly/MVP builds.
128 wasmsimd_copts: The list of compiler flags to use in WebAssembly/SIMD
129 builds.
Marat Dukhan08c4a432019-10-03 09:29:21 -0700130 optimized_copts: The list of compiler flags to use in optimized builds.
131 Defaults to -O2.
132 hdrs: The list of header files published by this library to be textually
133 included by sources in dependent rules.
Marat Dukhan10a38082020-04-17 03:58:35 -0700134 defines: List of predefines macros to be added to the compile line.
135 includes: List of include dirs to be added to the compile line.
Marat Dukhan08c4a432019-10-03 09:29:21 -0700136 deps: The list of other libraries to be linked.
Marat Dukhan10a38082020-04-17 03:58:35 -0700137 visibility: The list of packages that can depend on this target.
Marat Dukhan08c4a432019-10-03 09:29:21 -0700138 """
139 native.cc_library(
140 name = name,
141 srcs = srcs + select({
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800142 ":linux_k8": x86_srcs,
143 ":linux_arm": aarch32_srcs,
144 ":linux_armeabi": aarch32_srcs,
145 ":linux_armhf": aarch32_srcs,
146 ":linux_armv7a": aarch32_srcs,
Marat Dukhan52e44432021-08-20 11:58:11 -0700147 ":linux_arm64": aarch64_srcs,
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800148 ":macos_x86_64": x86_srcs,
Simon Maurer3b403c22021-03-03 14:24:02 +0100149 ":macos_arm64": aarch64_srcs,
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800150 ":windows_x86_64_clang": x86_srcs,
151 ":windows_x86_64_mingw": x86_srcs,
152 ":windows_x86_64_msys": x86_srcs,
Marat Dukhan10a38082020-04-17 03:58:35 -0700153 ":windows_x86_64": x86_srcs,
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800154 ":android_armv7": aarch32_srcs,
155 ":android_arm64": aarch64_srcs,
156 ":android_x86": x86_srcs,
157 ":android_x86_64": x86_srcs,
158 ":ios_armv7": aarch32_srcs,
159 ":ios_arm64": aarch64_srcs,
160 ":ios_arm64e": aarch64_srcs,
161 ":ios_x86": x86_srcs,
162 ":ios_x86_64": x86_srcs,
163 ":watchos_armv7k": aarch32_srcs,
164 ":watchos_arm64_32": aarch64_srcs,
165 ":watchos_x86": x86_srcs,
166 ":watchos_x86_64": x86_srcs,
167 ":tvos_arm64": aarch64_srcs,
168 ":tvos_x86_64": x86_srcs,
Marat Dukhancf056b22019-10-07 10:26:29 -0700169 ":emscripten_wasm": wasm_srcs,
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800170 ":emscripten_wasmsimd": wasmsimd_srcs,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700171 "//conditions:default": [],
172 }),
173 copts = [
174 "-Iinclude",
175 "-Isrc",
176 ] + copts + select({
Marat Dukhan10a38082020-04-17 03:58:35 -0700177 ":linux_k8": gcc_x86_copts,
Marat Dukhan582094e2020-04-30 17:21:25 -0700178 ":linux_arm": aarch32_copts,
Marat Dukhanf0bd4de2020-06-15 15:53:19 -0700179 ":linux_armeabi": aarch32_copts,
Terry Heo68eef3f2020-04-13 22:53:52 -0700180 ":linux_armhf": aarch32_copts,
Marat Dukhan24567892020-06-10 13:15:48 -0700181 ":linux_armv7a": aarch32_copts,
Marat Dukhan52e44432021-08-20 11:58:11 -0700182 ":linux_arm64": aarch64_copts,
Marat Dukhan10a38082020-04-17 03:58:35 -0700183 ":macos_x86_64": gcc_x86_copts,
Simon Maurer3b403c22021-03-03 14:24:02 +0100184 ":macos_arm64": aarch64_copts,
Marat Dukhan10a38082020-04-17 03:58:35 -0700185 ":windows_x86_64_clang": ["/clang:" + opt for opt in gcc_x86_copts],
186 ":windows_x86_64_mingw": mingw_copts + gcc_x86_copts,
187 ":windows_x86_64_msys": msys_copts + gcc_x86_copts,
188 ":windows_x86_64": msvc_x86_64_copts,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700189 ":android_armv7": aarch32_copts,
190 ":android_arm64": aarch64_copts,
Marat Dukhan10a38082020-04-17 03:58:35 -0700191 ":android_x86": gcc_x86_copts,
192 ":android_x86_64": gcc_x86_copts,
Marat Dukhanbc69ed62020-06-09 21:34:56 -0700193 ":ios_armv7": apple_aarch32_copts,
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800194 ":ios_arm64": aarch64_copts,
195 ":ios_arm64e": aarch64_copts,
Marat Dukhan10a38082020-04-17 03:58:35 -0700196 ":ios_x86": gcc_x86_copts,
197 ":ios_x86_64": gcc_x86_copts,
Marat Dukhanbc69ed62020-06-09 21:34:56 -0700198 ":watchos_armv7k": apple_aarch32_copts,
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800199 ":watchos_arm64_32": aarch64_copts,
Marat Dukhan10a38082020-04-17 03:58:35 -0700200 ":watchos_x86": gcc_x86_copts,
201 ":watchos_x86_64": gcc_x86_copts,
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800202 ":tvos_arm64": aarch64_copts,
Marat Dukhan10a38082020-04-17 03:58:35 -0700203 ":tvos_x86_64": gcc_x86_copts,
Marat Dukhancf056b22019-10-07 10:26:29 -0700204 ":emscripten_wasm": wasm_copts,
205 ":emscripten_wasmsimd": wasmsimd_copts,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700206 "//conditions:default": [],
207 }) + select({
Marat Dukhan10a38082020-04-17 03:58:35 -0700208 ":windows_x86_64_clang": ["/clang:" + opt for opt in gcc_copts],
209 ":windows_x86_64_mingw": gcc_copts,
210 ":windows_x86_64_msys": gcc_copts,
211 ":windows_x86_64": msvc_copts,
212 "//conditions:default": gcc_copts,
213 }) + select({
Marat Dukhan08c4a432019-10-03 09:29:21 -0700214 ":optimized_build": optimized_copts,
215 "//conditions:default": [],
216 }),
Marat Dukhan10a38082020-04-17 03:58:35 -0700217 defines = defines,
218 deps = deps,
219 includes = ["include", "src"] + includes,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700220 linkstatic = True,
221 linkopts = select({
222 ":linux_k8": ["-lpthread"],
Marat Dukhan582094e2020-04-30 17:21:25 -0700223 ":linux_arm": ["-lpthread"],
Marat Dukhanf0bd4de2020-06-15 15:53:19 -0700224 ":linux_armeabi": ["-lpthread"],
Terry Heo68eef3f2020-04-13 22:53:52 -0700225 ":linux_armhf": ["-lpthread"],
Marat Dukhan24567892020-06-10 13:15:48 -0700226 ":linux_armv7a": ["-lpthread"],
Marat Dukhan52e44432021-08-20 11:58:11 -0700227 ":linux_arm64": ["-lpthread"],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700228 ":android": ["-lm"],
229 "//conditions:default": [],
230 }),
231 textual_hdrs = hdrs,
Marat Dukhan10a38082020-04-17 03:58:35 -0700232 visibility = visibility,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700233 )
234
235def xnnpack_aggregate_library(
236 name,
237 generic_deps = [],
238 x86_deps = [],
Marat Dukhan6e8c0ce2021-04-13 14:35:08 -0700239 aarch32_ios_deps = [],
240 aarch32_nonios_deps = [],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700241 aarch64_deps = [],
242 wasm_deps = [],
243 wasmsimd_deps = []):
244 """Static library that aggregates architecture-specific dependencies.
245
246 Args:
247 name: The name of the library target to define.
248 generic_deps: The list of libraries to link on all architectures.
249 x86_deps: The list of libraries to link in x86 and x86-64 builds.
Marat Dukhan6e8c0ce2021-04-13 14:35:08 -0700250 aarch32_ios_deps: The list of libraries to link in AArch32 iOS (incl WatchOS) builds.
251 aarch32_nonios_deps: The list of libraries to link in AArch32 non-iOS builds.
Marat Dukhan08c4a432019-10-03 09:29:21 -0700252 aarch64_deps: The list of libraries to link in AArch32 builds.
253 wasm_deps: The list of libraries to link in WebAssembly (MVP) builds.
254 wasmsimd_deps: The list of libraries to link in WebAssembly SIMD builds.
255 """
256
257 native.cc_library(
258 name = name,
259 linkstatic = True,
260 deps = generic_deps + select({
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800261 ":linux_k8": x86_deps,
Marat Dukhan6e8c0ce2021-04-13 14:35:08 -0700262 ":linux_arm": aarch32_nonios_deps,
263 ":linux_armeabi": aarch32_nonios_deps,
264 ":linux_armhf": aarch32_nonios_deps,
265 ":linux_armv7a": aarch32_nonios_deps,
Marat Dukhan52e44432021-08-20 11:58:11 -0700266 ":linux_arm64": aarch64_deps,
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800267 ":macos_x86_64": x86_deps,
Simon Maurer3b403c22021-03-03 14:24:02 +0100268 ":macos_arm64": aarch64_deps,
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800269 ":windows_x86_64_clang": x86_deps,
270 ":windows_x86_64_mingw": x86_deps,
271 ":windows_x86_64_msys": x86_deps,
Marat Dukhan10a38082020-04-17 03:58:35 -0700272 ":windows_x86_64": x86_deps,
Marat Dukhan6e8c0ce2021-04-13 14:35:08 -0700273 ":android_armv7": aarch32_nonios_deps,
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800274 ":android_arm64": aarch64_deps,
275 ":android_x86": x86_deps,
276 ":android_x86_64": x86_deps,
Marat Dukhan6e8c0ce2021-04-13 14:35:08 -0700277 ":ios_armv7": aarch32_ios_deps,
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800278 ":ios_arm64": aarch64_deps,
279 ":ios_arm64e": aarch64_deps,
280 ":ios_x86": x86_deps,
281 ":ios_x86_64": x86_deps,
Marat Dukhan6e8c0ce2021-04-13 14:35:08 -0700282 ":watchos_armv7k": aarch32_ios_deps,
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800283 ":watchos_arm64_32": aarch64_deps,
284 ":watchos_x86": x86_deps,
285 ":watchos_x86_64": x86_deps,
286 ":tvos_arm64": aarch64_deps,
287 ":tvos_x86_64": x86_deps,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700288 ":emscripten_wasm": wasm_deps,
Marat Dukhan3de5dfa2020-12-10 11:19:47 -0800289 ":emscripten_wasmsimd": wasmsimd_deps,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700290 }),
291 )
292
Artsiom Ablavatskic1aa2972020-12-08 11:23:34 -0800293def xnnpack_unit_test(name, srcs, copts = [], mingw_copts = [], msys_copts = [], deps = [], tags = [], automatic = True, timeout = "short"):
Marat Dukhan08c4a432019-10-03 09:29:21 -0700294 """Unit test binary based on Google Test.
295
296 Args:
297 name: The name of the test target to define.
298 srcs: The list of source and header files.
299 copts: The list of additional compiler flags for the target. -I flags
300 for include/ and src/ directories of XNNPACK are always prepended
301 before these user-specified flags.
Marat Dukhan10a38082020-04-17 03:58:35 -0700302 mingw_copts: The list of compiler flags to use with MinGW GCC compilers.
303 msys_copts: The list of compiler flags to use with MSYS (Cygwin) GCC compilers.
Marat Dukhan08c4a432019-10-03 09:29:21 -0700304 deps: The list of additional libraries to be linked. Google Test library
305 (with main() function) is always added as a dependency and does not
306 need to be explicitly specified.
Artsiom Ablavatskic1aa2972020-12-08 11:23:34 -0800307 tags: List of arbitrary text tags.
308 automatic: Whether to create the test or testable binary.
309 timeout: How long the test is expected to run before returning.
Marat Dukhan08c4a432019-10-03 09:29:21 -0700310 """
311
Marat Dukhan22eed3d2020-05-11 20:13:37 -0700312 if automatic:
313 native.cc_test(
314 name = name,
315 srcs = srcs,
316 copts = xnnpack_std_cxxopts() + [
317 "-Iinclude",
318 "-Isrc",
319 ] + select({
320 ":windows_x86_64_mingw": mingw_copts,
321 ":windows_x86_64_msys": msys_copts,
322 "//conditions:default": [],
323 }) + select({
324 ":windows_x86_64_clang": ["/clang:-Wno-unused-function"],
325 ":windows_x86_64_mingw": ["-Wno-unused-function"],
326 ":windows_x86_64_msys": ["-Wno-unused-function"],
327 ":windows_x86_64": [],
328 "//conditions:default": ["-Wno-unused-function"],
329 }) + copts,
330 linkopts = select({
331 ":emscripten": xnnpack_emscripten_test_linkopts(),
332 "//conditions:default": [],
333 }),
334 linkstatic = True,
335 deps = [
336 "@com_google_googletest//:gtest_main",
337 ] + deps + select({
338 ":emscripten": xnnpack_emscripten_deps(),
339 "//conditions:default": [],
340 }),
341 tags = tags,
Artsiom Ablavatskic1aa2972020-12-08 11:23:34 -0800342 timeout = timeout,
Marat Dukhan22eed3d2020-05-11 20:13:37 -0700343 )
344 else:
345 native.cc_binary(
346 name = name,
347 srcs = srcs,
348 copts = xnnpack_std_cxxopts() + [
349 "-Iinclude",
350 "-Isrc",
351 ] + select({
352 ":windows_x86_64_mingw": mingw_copts,
353 ":windows_x86_64_msys": msys_copts,
354 "//conditions:default": [],
355 }) + select({
356 ":windows_x86_64_clang": ["/clang:-Wno-unused-function"],
357 ":windows_x86_64_mingw": ["-Wno-unused-function"],
358 ":windows_x86_64_msys": ["-Wno-unused-function"],
359 ":windows_x86_64": [],
360 "//conditions:default": ["-Wno-unused-function"],
361 }) + copts,
362 linkopts = select({
363 ":emscripten": xnnpack_emscripten_test_linkopts(),
364 "//conditions:default": [],
365 }),
366 linkstatic = True,
367 deps = [
368 "@com_google_googletest//:gtest_main",
369 ] + deps + select({
370 ":emscripten": xnnpack_emscripten_deps(),
371 "//conditions:default": [],
372 }),
373 testonly = True,
374 tags = tags,
375 )
Marat Dukhan08c4a432019-10-03 09:29:21 -0700376
377def xnnpack_binary(name, srcs, copts = [], deps = []):
378 """Minimal binary
379
380 Args:
381 name: The name of the binary target to define.
382 srcs: The list of source and header files.
383 copts: The list of additional compiler flags for the target. -I flags
384 for include/ and src/ directories of XNNPACK are always prepended
385 before these user-specified flags.
386 deps: The list of libraries to be linked.
387 """
388 native.cc_binary(
389 name = name,
390 srcs = srcs,
391 copts = [
392 "-Iinclude",
393 "-Isrc",
394 ] + copts,
395 linkopts = select({
396 ":emscripten": xnnpack_emscripten_minimal_linkopts(),
397 "//conditions:default": [],
398 }),
399 linkstatic = True,
400 deps = deps,
401 )
402
Marat Dukhana98efa12020-05-04 17:07:49 -0700403def xnnpack_benchmark(name, srcs, copts = [], deps = [], tags = []):
Marat Dukhan08c4a432019-10-03 09:29:21 -0700404 """Microbenchmark binary based on Google Benchmark
405
406 Args:
407 name: The name of the binary target to define.
408 srcs: The list of source and header files.
409 copts: The list of additional compiler flags for the target. -I flags
410 for include/ and src/ directories of XNNPACK are always prepended
411 before these user-specified flags.
412 deps: The list of additional libraries to be linked. Google Benchmark
413 library is always added as a dependency and does not need to be
414 explicitly specified.
415 """
416 native.cc_binary(
417 name = name,
418 srcs = srcs,
419 copts = xnnpack_std_cxxopts() + [
420 "-Iinclude",
421 "-Isrc",
Marat Dukhana98efa12020-05-04 17:07:49 -0700422 ] + select({
423 ":windows_x86_64_clang": ["/clang:-Wno-unused-function"],
424 ":windows_x86_64_mingw": ["-Wno-unused-function"],
425 ":windows_x86_64_msys": ["-Wno-unused-function"],
426 ":windows_x86_64": [],
427 "//conditions:default": ["-Wno-unused-function"],
428 }) + copts,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700429 linkopts = select({
430 ":emscripten": xnnpack_emscripten_benchmark_linkopts(),
Marat Dukhan10a38082020-04-17 03:58:35 -0700431 ":windows_x86_64_mingw": ["-lshlwapi"],
432 ":windows_x86_64_msys": ["-lshlwapi"],
Marat Dukhan08c4a432019-10-03 09:29:21 -0700433 "//conditions:default": [],
434 }),
435 linkstatic = True,
436 deps = [
437 "@com_google_benchmark//:benchmark",
438 ] + deps + select({
439 ":emscripten": xnnpack_emscripten_deps(),
440 "//conditions:default": [],
441 }),
Marat Dukhan8ea0b072020-04-23 16:12:18 -0700442 tags = tags,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700443 )