xref: /aosp_15_r20/external/XNNPACK/build_defs.bzl (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1*4bdc9457SAndroid Build Coastguard Worker"""Build definitions and rules for XNNPACK."""
2*4bdc9457SAndroid Build Coastguard Worker
3*4bdc9457SAndroid Build Coastguard Workerload(":emscripten.bzl", "xnnpack_emscripten_benchmark_linkopts", "xnnpack_emscripten_deps", "xnnpack_emscripten_minimal_linkopts", "xnnpack_emscripten_test_linkopts")
4*4bdc9457SAndroid Build Coastguard Worker
5*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_visibility():
6*4bdc9457SAndroid Build Coastguard Worker    """Visibility of :XNNPACK target.
7*4bdc9457SAndroid Build Coastguard Worker
8*4bdc9457SAndroid Build Coastguard Worker    All other targets have private visibility, and can not have external
9*4bdc9457SAndroid Build Coastguard Worker    dependencies.
10*4bdc9457SAndroid Build Coastguard Worker    """
11*4bdc9457SAndroid Build Coastguard Worker    return ["//visibility:public"]
12*4bdc9457SAndroid Build Coastguard Worker
13*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_min_size_copts():
14*4bdc9457SAndroid Build Coastguard Worker    """Compiler flags for size-optimized builds."""
15*4bdc9457SAndroid Build Coastguard Worker    return ["-Os"]
16*4bdc9457SAndroid Build Coastguard Worker
17*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_gcc_std_copts():
18*4bdc9457SAndroid Build Coastguard Worker    """GCC-like compiler flags to specify language standard for C sources."""
19*4bdc9457SAndroid Build Coastguard Worker    return ["-std=c99"]
20*4bdc9457SAndroid Build Coastguard Worker
21*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_msvc_std_copts():
22*4bdc9457SAndroid Build Coastguard Worker    """MSVC compiler flags to specify language standard for C sources."""
23*4bdc9457SAndroid Build Coastguard Worker    return ["/Drestrict="]
24*4bdc9457SAndroid Build Coastguard Worker
25*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_std_cxxopts():
26*4bdc9457SAndroid Build Coastguard Worker    """Compiler flags to specify language standard for C++ sources."""
27*4bdc9457SAndroid Build Coastguard Worker    return ["-std=gnu++11"]
28*4bdc9457SAndroid Build Coastguard Worker
29*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_optional_ruy_copts():
30*4bdc9457SAndroid Build Coastguard Worker    """Compiler flags to optionally enable Ruy benchmarks."""
31*4bdc9457SAndroid Build Coastguard Worker    return []
32*4bdc9457SAndroid Build Coastguard Worker
33*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_optional_gemmlowp_copts():
34*4bdc9457SAndroid Build Coastguard Worker    """Compiler flags to optionally enable Gemmlowp benchmarks."""
35*4bdc9457SAndroid Build Coastguard Worker    return []
36*4bdc9457SAndroid Build Coastguard Worker
37*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_optional_tflite_copts():
38*4bdc9457SAndroid Build Coastguard Worker    """Compiler flags to optionally enable TensorFlow Lite benchmarks."""
39*4bdc9457SAndroid Build Coastguard Worker    return []
40*4bdc9457SAndroid Build Coastguard Worker
41*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_optional_dnnl_copts():
42*4bdc9457SAndroid Build Coastguard Worker    """Compiler flags to optionally enable Intel DNNL benchmarks."""
43*4bdc9457SAndroid Build Coastguard Worker    return []
44*4bdc9457SAndroid Build Coastguard Worker
45*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_optional_ruy_deps():
46*4bdc9457SAndroid Build Coastguard Worker    """Optional Ruy dependencies."""
47*4bdc9457SAndroid Build Coastguard Worker    return []
48*4bdc9457SAndroid Build Coastguard Worker
49*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_optional_gemmlowp_deps():
50*4bdc9457SAndroid Build Coastguard Worker    """Optional Gemmlowp dependencies."""
51*4bdc9457SAndroid Build Coastguard Worker    return []
52*4bdc9457SAndroid Build Coastguard Worker
53*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_optional_tflite_deps():
54*4bdc9457SAndroid Build Coastguard Worker    """Optional TensorFlow Lite dependencies."""
55*4bdc9457SAndroid Build Coastguard Worker    return []
56*4bdc9457SAndroid Build Coastguard Worker
57*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_optional_dnnl_deps():
58*4bdc9457SAndroid Build Coastguard Worker    """Optional Intel DNNL dependencies."""
59*4bdc9457SAndroid Build Coastguard Worker    return []
60*4bdc9457SAndroid Build Coastguard Worker
61*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_cc_library(
62*4bdc9457SAndroid Build Coastguard Worker        name,
63*4bdc9457SAndroid Build Coastguard Worker        srcs = [],
64*4bdc9457SAndroid Build Coastguard Worker        x86_srcs = [],
65*4bdc9457SAndroid Build Coastguard Worker        aarch32_srcs = [],
66*4bdc9457SAndroid Build Coastguard Worker        aarch64_srcs = [],
67*4bdc9457SAndroid Build Coastguard Worker        riscv_srcs = [],
68*4bdc9457SAndroid Build Coastguard Worker        wasm_srcs = [],
69*4bdc9457SAndroid Build Coastguard Worker        wasmsimd_srcs = [],
70*4bdc9457SAndroid Build Coastguard Worker        wasmrelaxedsimd_srcs = [],
71*4bdc9457SAndroid Build Coastguard Worker        copts = [],
72*4bdc9457SAndroid Build Coastguard Worker        gcc_copts = [],
73*4bdc9457SAndroid Build Coastguard Worker        msvc_copts = [],
74*4bdc9457SAndroid Build Coastguard Worker        mingw_copts = [],
75*4bdc9457SAndroid Build Coastguard Worker        msys_copts = [],
76*4bdc9457SAndroid Build Coastguard Worker        gcc_x86_copts = [],
77*4bdc9457SAndroid Build Coastguard Worker        msvc_x86_32_copts = [],
78*4bdc9457SAndroid Build Coastguard Worker        msvc_x86_64_copts = [],
79*4bdc9457SAndroid Build Coastguard Worker        aarch32_copts = [],
80*4bdc9457SAndroid Build Coastguard Worker        aarch64_copts = [],
81*4bdc9457SAndroid Build Coastguard Worker        riscv_copts = [],
82*4bdc9457SAndroid Build Coastguard Worker        wasm_copts = [],
83*4bdc9457SAndroid Build Coastguard Worker        wasmsimd_copts = [],
84*4bdc9457SAndroid Build Coastguard Worker        wasmrelaxedsimd_copts = [],
85*4bdc9457SAndroid Build Coastguard Worker        optimized_copts = ["-O2"],
86*4bdc9457SAndroid Build Coastguard Worker        hdrs = [],
87*4bdc9457SAndroid Build Coastguard Worker        defines = [],
88*4bdc9457SAndroid Build Coastguard Worker        includes = [],
89*4bdc9457SAndroid Build Coastguard Worker        deps = [],
90*4bdc9457SAndroid Build Coastguard Worker        visibility = [],
91*4bdc9457SAndroid Build Coastguard Worker        testonly = False):
92*4bdc9457SAndroid Build Coastguard Worker    """C/C++/assembly library with architecture-specific configuration.
93*4bdc9457SAndroid Build Coastguard Worker
94*4bdc9457SAndroid Build Coastguard Worker    Define a static library with architecture- and instruction-specific
95*4bdc9457SAndroid Build Coastguard Worker    source files and/or compiler flags.
96*4bdc9457SAndroid Build Coastguard Worker
97*4bdc9457SAndroid Build Coastguard Worker    Args:
98*4bdc9457SAndroid Build Coastguard Worker      name: The name of the library target to define.
99*4bdc9457SAndroid Build Coastguard Worker      srcs: The list of architecture-independent source files.
100*4bdc9457SAndroid Build Coastguard Worker      x86_srcs: The list of x86-specific source files.
101*4bdc9457SAndroid Build Coastguard Worker      aarch32_srcs: The list of AArch32-specific source files.
102*4bdc9457SAndroid Build Coastguard Worker      aarch64_srcs: The list of AArch64-specific source files.
103*4bdc9457SAndroid Build Coastguard Worker      riscv_srcs: The list of RISC-V-specific source files.
104*4bdc9457SAndroid Build Coastguard Worker      wasm_srcs: The list of WebAssembly 1.0-specific source files.
105*4bdc9457SAndroid Build Coastguard Worker      wasmsimd_srcs: The list of WebAssembly SIMD-specific source files.
106*4bdc9457SAndroid Build Coastguard Worker      wasmrelaxedsimd_srcs: The list of WebAssembly Relaxed SIMD-specific
107*4bdc9457SAndroid Build Coastguard Worker                            source files.
108*4bdc9457SAndroid Build Coastguard Worker      copts: The list of compiler flags to use in all builds. -I flags for
109*4bdc9457SAndroid Build Coastguard Worker             include/ and src/ directories of XNNPACK are always prepended
110*4bdc9457SAndroid Build Coastguard Worker             before these user-specified flags.
111*4bdc9457SAndroid Build Coastguard Worker      gcc_copts: The list of compiler flags to use with GCC-like compilers.
112*4bdc9457SAndroid Build Coastguard Worker      msvc_copts: The list of compiler flags to use with MSVC compiler.
113*4bdc9457SAndroid Build Coastguard Worker      mingw_copts: The list of compiler flags to use with MinGW GCC compilers.
114*4bdc9457SAndroid Build Coastguard Worker      msys_copts: The list of compiler flags to use with MSYS (Cygwin) GCC
115*4bdc9457SAndroid Build Coastguard Worker                  compilers.
116*4bdc9457SAndroid Build Coastguard Worker      gcc_x86_copts: The list of GCC-like compiler flags to use in x86 (32-bit
117*4bdc9457SAndroid Build Coastguard Worker                     and 64-bit) builds.
118*4bdc9457SAndroid Build Coastguard Worker      msvc_x86_32_copts: The list of MSVC compiler flags to use in x86 (32-bit)
119*4bdc9457SAndroid Build Coastguard Worker                         builds.
120*4bdc9457SAndroid Build Coastguard Worker      msvc_x86_64_copts: The list of MSVC compiler flags to use in x86 (64-bit)
121*4bdc9457SAndroid Build Coastguard Worker                         builds.
122*4bdc9457SAndroid Build Coastguard Worker      aarch32_copts: The list of compiler flags to use in AArch32 builds.
123*4bdc9457SAndroid Build Coastguard Worker      aarch64_copts: The list of compiler flags to use in AArch64 builds.
124*4bdc9457SAndroid Build Coastguard Worker      riscv_copts: The list of compiler flags to use in RISC-V builds.
125*4bdc9457SAndroid Build Coastguard Worker      wasm_copts: The list of compiler flags to use in WebAssembly 1.0 builds.
126*4bdc9457SAndroid Build Coastguard Worker      wasmsimd_copts: The list of compiler flags to use in WebAssembly SIMD
127*4bdc9457SAndroid Build Coastguard Worker                      builds.
128*4bdc9457SAndroid Build Coastguard Worker      wasmrelaxedsimd_copts: The list of compiler flags to use in WebAssembly
129*4bdc9457SAndroid Build Coastguard Worker                             Relaxed SIMD builds.
130*4bdc9457SAndroid Build Coastguard Worker      optimized_copts: The list of compiler flags to use in optimized builds.
131*4bdc9457SAndroid Build Coastguard Worker                       Defaults to -O2.
132*4bdc9457SAndroid Build Coastguard Worker      hdrs: The list of header files published by this library to be textually
133*4bdc9457SAndroid Build Coastguard Worker            included by sources in dependent rules.
134*4bdc9457SAndroid Build Coastguard Worker      defines: List of predefines macros to be added to the compile line.
135*4bdc9457SAndroid Build Coastguard Worker      includes: List of include dirs to be added to the compile line.
136*4bdc9457SAndroid Build Coastguard Worker      deps: The list of other libraries to be linked.
137*4bdc9457SAndroid Build Coastguard Worker      visibility: The list of packages that can depend on this target.
138*4bdc9457SAndroid Build Coastguard Worker    """
139*4bdc9457SAndroid Build Coastguard Worker    native.cc_library(
140*4bdc9457SAndroid Build Coastguard Worker        name = name,
141*4bdc9457SAndroid Build Coastguard Worker        srcs = srcs + select({
142*4bdc9457SAndroid Build Coastguard Worker            ":aarch32": aarch32_srcs,
143*4bdc9457SAndroid Build Coastguard Worker            ":aarch64": aarch64_srcs,
144*4bdc9457SAndroid Build Coastguard Worker            ":riscv": riscv_srcs,
145*4bdc9457SAndroid Build Coastguard Worker            ":x86": x86_srcs,
146*4bdc9457SAndroid Build Coastguard Worker            ":emscripten_wasm": wasm_srcs,
147*4bdc9457SAndroid Build Coastguard Worker            ":emscripten_wasmsimd": wasmsimd_srcs,
148*4bdc9457SAndroid Build Coastguard Worker            ":emscripten_wasmrelaxedsimd": wasmrelaxedsimd_srcs,
149*4bdc9457SAndroid Build Coastguard Worker            "//conditions:default": [],
150*4bdc9457SAndroid Build Coastguard Worker        }),
151*4bdc9457SAndroid Build Coastguard Worker        copts = [
152*4bdc9457SAndroid Build Coastguard Worker            "-Iinclude",
153*4bdc9457SAndroid Build Coastguard Worker            "-Isrc",
154*4bdc9457SAndroid Build Coastguard Worker        ] + copts + select({
155*4bdc9457SAndroid Build Coastguard Worker            ":linux_k8": gcc_x86_copts,
156*4bdc9457SAndroid Build Coastguard Worker            ":linux_arm": aarch32_copts,
157*4bdc9457SAndroid Build Coastguard Worker            ":linux_armeabi": aarch32_copts,
158*4bdc9457SAndroid Build Coastguard Worker            ":linux_armhf": aarch32_copts,
159*4bdc9457SAndroid Build Coastguard Worker            ":linux_armv7a": aarch32_copts,
160*4bdc9457SAndroid Build Coastguard Worker            ":linux_arm64": aarch64_copts,
161*4bdc9457SAndroid Build Coastguard Worker            ":macos_x86_64": gcc_x86_copts,
162*4bdc9457SAndroid Build Coastguard Worker            ":macos_arm64": aarch64_copts,
163*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_clang": ["/clang:" + opt for opt in gcc_x86_copts],
164*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_mingw": mingw_copts + gcc_x86_copts,
165*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_msys": msys_copts + gcc_x86_copts,
166*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64": msvc_x86_64_copts,
167*4bdc9457SAndroid Build Coastguard Worker            ":android_armv7": aarch32_copts,
168*4bdc9457SAndroid Build Coastguard Worker            ":android_arm64": aarch64_copts,
169*4bdc9457SAndroid Build Coastguard Worker            ":android_x86": gcc_x86_copts,
170*4bdc9457SAndroid Build Coastguard Worker            ":android_x86_64": gcc_x86_copts,
171*4bdc9457SAndroid Build Coastguard Worker            ":ios_arm64": aarch64_copts,
172*4bdc9457SAndroid Build Coastguard Worker            ":ios_arm64e": aarch64_copts,
173*4bdc9457SAndroid Build Coastguard Worker            ":ios_sim_arm64": aarch64_copts,
174*4bdc9457SAndroid Build Coastguard Worker            ":ios_x86_64": gcc_x86_copts,
175*4bdc9457SAndroid Build Coastguard Worker            ":watchos_arm64_32": aarch64_copts,
176*4bdc9457SAndroid Build Coastguard Worker            ":watchos_x86_64": gcc_x86_copts,
177*4bdc9457SAndroid Build Coastguard Worker            ":tvos_arm64": aarch64_copts,
178*4bdc9457SAndroid Build Coastguard Worker            ":tvos_x86_64": gcc_x86_copts,
179*4bdc9457SAndroid Build Coastguard Worker            ":emscripten_wasm": wasm_copts,
180*4bdc9457SAndroid Build Coastguard Worker            ":emscripten_wasmsimd": wasmsimd_copts,
181*4bdc9457SAndroid Build Coastguard Worker            ":emscripten_wasmrelaxedsimd": wasmrelaxedsimd_copts,
182*4bdc9457SAndroid Build Coastguard Worker            "//conditions:default": [],
183*4bdc9457SAndroid Build Coastguard Worker        }) + select({
184*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_clang": ["/clang:" + opt for opt in gcc_copts],
185*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_mingw": gcc_copts,
186*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_msys": gcc_copts,
187*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64": msvc_copts,
188*4bdc9457SAndroid Build Coastguard Worker            "//conditions:default": gcc_copts,
189*4bdc9457SAndroid Build Coastguard Worker        }) + select({
190*4bdc9457SAndroid Build Coastguard Worker            ":optimized_build": optimized_copts,
191*4bdc9457SAndroid Build Coastguard Worker            "//conditions:default": [],
192*4bdc9457SAndroid Build Coastguard Worker        }),
193*4bdc9457SAndroid Build Coastguard Worker        defines = defines,
194*4bdc9457SAndroid Build Coastguard Worker        deps = deps,
195*4bdc9457SAndroid Build Coastguard Worker        includes = ["include", "src"] + includes,
196*4bdc9457SAndroid Build Coastguard Worker        linkstatic = True,
197*4bdc9457SAndroid Build Coastguard Worker        linkopts = select({
198*4bdc9457SAndroid Build Coastguard Worker            ":linux_k8": ["-lpthread"],
199*4bdc9457SAndroid Build Coastguard Worker            ":linux_arm": ["-lpthread"],
200*4bdc9457SAndroid Build Coastguard Worker            ":linux_armeabi": ["-lpthread"],
201*4bdc9457SAndroid Build Coastguard Worker            ":linux_armhf": ["-lpthread"],
202*4bdc9457SAndroid Build Coastguard Worker            ":linux_armv7a": ["-lpthread"],
203*4bdc9457SAndroid Build Coastguard Worker            ":linux_arm64": ["-lpthread"],
204*4bdc9457SAndroid Build Coastguard Worker            ":android": ["-lm"],
205*4bdc9457SAndroid Build Coastguard Worker            "//conditions:default": [],
206*4bdc9457SAndroid Build Coastguard Worker        }),
207*4bdc9457SAndroid Build Coastguard Worker        textual_hdrs = hdrs,
208*4bdc9457SAndroid Build Coastguard Worker        visibility = visibility,
209*4bdc9457SAndroid Build Coastguard Worker        testonly = testonly,
210*4bdc9457SAndroid Build Coastguard Worker    )
211*4bdc9457SAndroid Build Coastguard Worker
212*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_aggregate_library(
213*4bdc9457SAndroid Build Coastguard Worker        name,
214*4bdc9457SAndroid Build Coastguard Worker        generic_deps = [],
215*4bdc9457SAndroid Build Coastguard Worker        x86_deps = [],
216*4bdc9457SAndroid Build Coastguard Worker        aarch32_deps = [],
217*4bdc9457SAndroid Build Coastguard Worker        aarch64_deps = [],
218*4bdc9457SAndroid Build Coastguard Worker        riscv_deps = [],
219*4bdc9457SAndroid Build Coastguard Worker        wasm_deps = [],
220*4bdc9457SAndroid Build Coastguard Worker        wasmsimd_deps = [],
221*4bdc9457SAndroid Build Coastguard Worker        wasmrelaxedsimd_deps = [],
222*4bdc9457SAndroid Build Coastguard Worker        defines = [],
223*4bdc9457SAndroid Build Coastguard Worker        compatible_with = None):
224*4bdc9457SAndroid Build Coastguard Worker    """Static library that aggregates architecture-specific dependencies.
225*4bdc9457SAndroid Build Coastguard Worker
226*4bdc9457SAndroid Build Coastguard Worker    Args:
227*4bdc9457SAndroid Build Coastguard Worker      name: The name of the library target to define.
228*4bdc9457SAndroid Build Coastguard Worker      generic_deps: The list of libraries to link on all architectures.
229*4bdc9457SAndroid Build Coastguard Worker      x86_deps: The list of libraries to link in x86 and x86-64 builds.
230*4bdc9457SAndroid Build Coastguard Worker      aarch32_deps: The list of libraries to link in AArch32 builds.
231*4bdc9457SAndroid Build Coastguard Worker      aarch64_deps: The list of libraries to link in AArch64 builds.
232*4bdc9457SAndroid Build Coastguard Worker      riscv_deps: The list of libraries to link in RISC-V builds.
233*4bdc9457SAndroid Build Coastguard Worker      wasm_deps: The list of libraries to link in WebAssembly 1.0 builds.
234*4bdc9457SAndroid Build Coastguard Worker      wasmsimd_deps: The list of libraries to link in WebAssembly SIMD builds.
235*4bdc9457SAndroid Build Coastguard Worker      wasmrelaxedsimd_deps: The list of libraries to link in WebAssembly
236*4bdc9457SAndroid Build Coastguard Worker                            Relaxed SIMD builds.
237*4bdc9457SAndroid Build Coastguard Worker      defines: List of predefines macros to be added to the compile line.
238*4bdc9457SAndroid Build Coastguard Worker      compatible_with: The list of additional environments this rule can be built for.
239*4bdc9457SAndroid Build Coastguard Worker    """
240*4bdc9457SAndroid Build Coastguard Worker
241*4bdc9457SAndroid Build Coastguard Worker    native.cc_library(
242*4bdc9457SAndroid Build Coastguard Worker        name = name,
243*4bdc9457SAndroid Build Coastguard Worker        linkstatic = True,
244*4bdc9457SAndroid Build Coastguard Worker        deps = generic_deps + select({
245*4bdc9457SAndroid Build Coastguard Worker            ":aarch32": aarch32_deps,
246*4bdc9457SAndroid Build Coastguard Worker            ":aarch64": aarch64_deps,
247*4bdc9457SAndroid Build Coastguard Worker            ":x86": x86_deps,
248*4bdc9457SAndroid Build Coastguard Worker            ":emscripten_wasm": wasm_deps,
249*4bdc9457SAndroid Build Coastguard Worker            ":emscripten_wasmsimd": wasmsimd_deps,
250*4bdc9457SAndroid Build Coastguard Worker            ":emscripten_wasmrelaxedsimd": wasmrelaxedsimd_deps,
251*4bdc9457SAndroid Build Coastguard Worker            ":riscv": riscv_deps,
252*4bdc9457SAndroid Build Coastguard Worker        }),
253*4bdc9457SAndroid Build Coastguard Worker        defines = defines,
254*4bdc9457SAndroid Build Coastguard Worker        compatible_with = compatible_with,
255*4bdc9457SAndroid Build Coastguard Worker    )
256*4bdc9457SAndroid Build Coastguard Worker
257*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_unit_test(name, srcs, copts = [], mingw_copts = [], msys_copts = [], deps = [], tags = [], automatic = True, timeout = "short", shard_count = 1):
258*4bdc9457SAndroid Build Coastguard Worker    """Unit test binary based on Google Test.
259*4bdc9457SAndroid Build Coastguard Worker
260*4bdc9457SAndroid Build Coastguard Worker    Args:
261*4bdc9457SAndroid Build Coastguard Worker      name: The name of the test target to define.
262*4bdc9457SAndroid Build Coastguard Worker      srcs: The list of source and header files.
263*4bdc9457SAndroid Build Coastguard Worker      copts: The list of additional compiler flags for the target. -I flags
264*4bdc9457SAndroid Build Coastguard Worker             for include/ and src/ directories of XNNPACK are always prepended
265*4bdc9457SAndroid Build Coastguard Worker             before these user-specified flags.
266*4bdc9457SAndroid Build Coastguard Worker      mingw_copts: The list of compiler flags to use with MinGW GCC compilers.
267*4bdc9457SAndroid Build Coastguard Worker      msys_copts: The list of compiler flags to use with MSYS (Cygwin) GCC compilers.
268*4bdc9457SAndroid Build Coastguard Worker      deps: The list of additional libraries to be linked. Google Test library
269*4bdc9457SAndroid Build Coastguard Worker            (with main() function) is always added as a dependency and does not
270*4bdc9457SAndroid Build Coastguard Worker            need to be explicitly specified.
271*4bdc9457SAndroid Build Coastguard Worker      tags: List of arbitrary text tags.
272*4bdc9457SAndroid Build Coastguard Worker      automatic: Whether to create the test or testable binary.
273*4bdc9457SAndroid Build Coastguard Worker      timeout: How long the test is expected to run before returning.
274*4bdc9457SAndroid Build Coastguard Worker      shard_count: Specifies the number of parallel shards to use to run the test.
275*4bdc9457SAndroid Build Coastguard Worker    """
276*4bdc9457SAndroid Build Coastguard Worker
277*4bdc9457SAndroid Build Coastguard Worker    if automatic:
278*4bdc9457SAndroid Build Coastguard Worker        native.cc_test(
279*4bdc9457SAndroid Build Coastguard Worker            name = name,
280*4bdc9457SAndroid Build Coastguard Worker            srcs = srcs,
281*4bdc9457SAndroid Build Coastguard Worker            copts = xnnpack_std_cxxopts() + [
282*4bdc9457SAndroid Build Coastguard Worker                "-Iinclude",
283*4bdc9457SAndroid Build Coastguard Worker                "-Isrc",
284*4bdc9457SAndroid Build Coastguard Worker            ] + select({
285*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64_mingw": mingw_copts,
286*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64_msys": msys_copts,
287*4bdc9457SAndroid Build Coastguard Worker                "//conditions:default": [],
288*4bdc9457SAndroid Build Coastguard Worker            }) + select({
289*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64_clang": ["/clang:-Wno-unused-function"],
290*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64_mingw": ["-Wno-unused-function"],
291*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64_msys": ["-Wno-unused-function"],
292*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64": [],
293*4bdc9457SAndroid Build Coastguard Worker                "//conditions:default": ["-Wno-unused-function"],
294*4bdc9457SAndroid Build Coastguard Worker            }) + copts,
295*4bdc9457SAndroid Build Coastguard Worker            linkopts = select({
296*4bdc9457SAndroid Build Coastguard Worker                ":emscripten": xnnpack_emscripten_test_linkopts(),
297*4bdc9457SAndroid Build Coastguard Worker                "//conditions:default": [],
298*4bdc9457SAndroid Build Coastguard Worker            }),
299*4bdc9457SAndroid Build Coastguard Worker            linkstatic = True,
300*4bdc9457SAndroid Build Coastguard Worker            deps = [
301*4bdc9457SAndroid Build Coastguard Worker                "@com_google_googletest//:gtest_main",
302*4bdc9457SAndroid Build Coastguard Worker            ] + deps + select({
303*4bdc9457SAndroid Build Coastguard Worker                ":emscripten": xnnpack_emscripten_deps(),
304*4bdc9457SAndroid Build Coastguard Worker                "//conditions:default": [],
305*4bdc9457SAndroid Build Coastguard Worker            }),
306*4bdc9457SAndroid Build Coastguard Worker            tags = tags,
307*4bdc9457SAndroid Build Coastguard Worker            timeout = timeout,
308*4bdc9457SAndroid Build Coastguard Worker            shard_count = shard_count,
309*4bdc9457SAndroid Build Coastguard Worker        )
310*4bdc9457SAndroid Build Coastguard Worker    else:
311*4bdc9457SAndroid Build Coastguard Worker        native.cc_binary(
312*4bdc9457SAndroid Build Coastguard Worker            name = name,
313*4bdc9457SAndroid Build Coastguard Worker            srcs = srcs,
314*4bdc9457SAndroid Build Coastguard Worker            copts = xnnpack_std_cxxopts() + [
315*4bdc9457SAndroid Build Coastguard Worker                "-Iinclude",
316*4bdc9457SAndroid Build Coastguard Worker                "-Isrc",
317*4bdc9457SAndroid Build Coastguard Worker            ] + select({
318*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64_mingw": mingw_copts,
319*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64_msys": msys_copts,
320*4bdc9457SAndroid Build Coastguard Worker                "//conditions:default": [],
321*4bdc9457SAndroid Build Coastguard Worker            }) + select({
322*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64_clang": ["/clang:-Wno-unused-function"],
323*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64_mingw": ["-Wno-unused-function"],
324*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64_msys": ["-Wno-unused-function"],
325*4bdc9457SAndroid Build Coastguard Worker                ":windows_x86_64": [],
326*4bdc9457SAndroid Build Coastguard Worker                "//conditions:default": ["-Wno-unused-function"],
327*4bdc9457SAndroid Build Coastguard Worker            }) + copts,
328*4bdc9457SAndroid Build Coastguard Worker            linkopts = select({
329*4bdc9457SAndroid Build Coastguard Worker                ":emscripten": xnnpack_emscripten_test_linkopts(),
330*4bdc9457SAndroid Build Coastguard Worker                "//conditions:default": [],
331*4bdc9457SAndroid Build Coastguard Worker            }),
332*4bdc9457SAndroid Build Coastguard Worker            linkstatic = True,
333*4bdc9457SAndroid Build Coastguard Worker            deps = [
334*4bdc9457SAndroid Build Coastguard Worker                "@com_google_googletest//:gtest_main",
335*4bdc9457SAndroid Build Coastguard Worker            ] + deps + select({
336*4bdc9457SAndroid Build Coastguard Worker                ":emscripten": xnnpack_emscripten_deps(),
337*4bdc9457SAndroid Build Coastguard Worker                "//conditions:default": [],
338*4bdc9457SAndroid Build Coastguard Worker            }),
339*4bdc9457SAndroid Build Coastguard Worker            testonly = True,
340*4bdc9457SAndroid Build Coastguard Worker            tags = tags,
341*4bdc9457SAndroid Build Coastguard Worker        )
342*4bdc9457SAndroid Build Coastguard Worker
343*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_binary(name, srcs, copts = [], deps = []):
344*4bdc9457SAndroid Build Coastguard Worker    """Minimal binary
345*4bdc9457SAndroid Build Coastguard Worker
346*4bdc9457SAndroid Build Coastguard Worker    Args:
347*4bdc9457SAndroid Build Coastguard Worker      name: The name of the binary target to define.
348*4bdc9457SAndroid Build Coastguard Worker      srcs: The list of source and header files.
349*4bdc9457SAndroid Build Coastguard Worker      copts: The list of additional compiler flags for the target. -I flags
350*4bdc9457SAndroid Build Coastguard Worker             for include/ and src/ directories of XNNPACK are always prepended
351*4bdc9457SAndroid Build Coastguard Worker             before these user-specified flags.
352*4bdc9457SAndroid Build Coastguard Worker      deps: The list of libraries to be linked.
353*4bdc9457SAndroid Build Coastguard Worker    """
354*4bdc9457SAndroid Build Coastguard Worker    native.cc_binary(
355*4bdc9457SAndroid Build Coastguard Worker        name = name,
356*4bdc9457SAndroid Build Coastguard Worker        srcs = srcs,
357*4bdc9457SAndroid Build Coastguard Worker        copts = [
358*4bdc9457SAndroid Build Coastguard Worker            "-Iinclude",
359*4bdc9457SAndroid Build Coastguard Worker            "-Isrc",
360*4bdc9457SAndroid Build Coastguard Worker        ] + copts,
361*4bdc9457SAndroid Build Coastguard Worker        linkopts = select({
362*4bdc9457SAndroid Build Coastguard Worker            ":emscripten": xnnpack_emscripten_minimal_linkopts(),
363*4bdc9457SAndroid Build Coastguard Worker            "//conditions:default": [],
364*4bdc9457SAndroid Build Coastguard Worker        }),
365*4bdc9457SAndroid Build Coastguard Worker        linkstatic = True,
366*4bdc9457SAndroid Build Coastguard Worker        deps = deps,
367*4bdc9457SAndroid Build Coastguard Worker    )
368*4bdc9457SAndroid Build Coastguard Worker
369*4bdc9457SAndroid Build Coastguard Workerdef xnnpack_benchmark(name, srcs, copts = [], deps = [], tags = []):
370*4bdc9457SAndroid Build Coastguard Worker    """Microbenchmark binary based on Google Benchmark
371*4bdc9457SAndroid Build Coastguard Worker
372*4bdc9457SAndroid Build Coastguard Worker    Args:
373*4bdc9457SAndroid Build Coastguard Worker      name: The name of the binary target to define.
374*4bdc9457SAndroid Build Coastguard Worker      srcs: The list of source and header files.
375*4bdc9457SAndroid Build Coastguard Worker      copts: The list of additional compiler flags for the target. -I flags
376*4bdc9457SAndroid Build Coastguard Worker             for include/ and src/ directories of XNNPACK are always prepended
377*4bdc9457SAndroid Build Coastguard Worker             before these user-specified flags.
378*4bdc9457SAndroid Build Coastguard Worker      deps: The list of additional libraries to be linked. Google Benchmark
379*4bdc9457SAndroid Build Coastguard Worker            library is always added as a dependency and does not need to be
380*4bdc9457SAndroid Build Coastguard Worker            explicitly specified.
381*4bdc9457SAndroid Build Coastguard Worker    """
382*4bdc9457SAndroid Build Coastguard Worker    native.cc_binary(
383*4bdc9457SAndroid Build Coastguard Worker        name = name,
384*4bdc9457SAndroid Build Coastguard Worker        srcs = srcs,
385*4bdc9457SAndroid Build Coastguard Worker        copts = xnnpack_std_cxxopts() + [
386*4bdc9457SAndroid Build Coastguard Worker            "-Iinclude",
387*4bdc9457SAndroid Build Coastguard Worker            "-Isrc",
388*4bdc9457SAndroid Build Coastguard Worker        ] + select({
389*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_clang": ["/clang:-Wno-unused-function"],
390*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_mingw": ["-Wno-unused-function"],
391*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_msys": ["-Wno-unused-function"],
392*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64": [],
393*4bdc9457SAndroid Build Coastguard Worker            "//conditions:default": ["-Wno-unused-function"],
394*4bdc9457SAndroid Build Coastguard Worker        }) + copts,
395*4bdc9457SAndroid Build Coastguard Worker        linkopts = select({
396*4bdc9457SAndroid Build Coastguard Worker            ":emscripten": xnnpack_emscripten_benchmark_linkopts(),
397*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_mingw": ["-lshlwapi"],
398*4bdc9457SAndroid Build Coastguard Worker            ":windows_x86_64_msys": ["-lshlwapi"],
399*4bdc9457SAndroid Build Coastguard Worker            "//conditions:default": [],
400*4bdc9457SAndroid Build Coastguard Worker        }),
401*4bdc9457SAndroid Build Coastguard Worker        linkstatic = True,
402*4bdc9457SAndroid Build Coastguard Worker        deps = [
403*4bdc9457SAndroid Build Coastguard Worker            "@com_google_benchmark//:benchmark",
404*4bdc9457SAndroid Build Coastguard Worker        ] + deps + select({
405*4bdc9457SAndroid Build Coastguard Worker            ":emscripten": xnnpack_emscripten_deps(),
406*4bdc9457SAndroid Build Coastguard Worker            "//conditions:default": [],
407*4bdc9457SAndroid Build Coastguard Worker        }),
408*4bdc9457SAndroid Build Coastguard Worker	tags = tags,
409*4bdc9457SAndroid Build Coastguard Worker    )
410