pytorch

Форк
0
/
c2_defs.bzl 
527 строк · 19.1 Кб
1
load("@bazel_skylib//lib:collections.bzl", "collections")
2
load("@bazel_skylib//lib:paths.bzl", "paths")
3
load("@fbcode_macros//build_defs:native_rules.bzl", "buck_genrule")
4
load("@fbsource//tools/build_defs:default_platform_defs.bzl", "compose_platform_setting_list")
5
load("@fbsource//tools/build_defs:dict_defs.bzl", "dict_defs")
6
load("@fbsource//tools/build_defs:expect.bzl", "expect")
7
load("@fbsource//tools/build_defs:fb_xplat_cxx_library.bzl", "fb_xplat_cxx_library")
8
load("@fbsource//tools/build_defs:fbsource_utils.bzl", "is_arvr_mode", "is_fbcode_mode_mac")
9
load("@fbsource//tools/build_defs:platform_defs.bzl", "ANDROID", "APPLE", "CXX", "IOS", "MACOSX", "WINDOWS")
10
load("@fbsource//tools/build_defs/apple:build_mode_defs.bzl", "is_production_build")
11
load("@fbsource//tools/build_defs/apple:config_utils_defs.bzl", "STATIC_LIBRARY_IOS_CONFIG", "STATIC_LIBRARY_MAC_CONFIG", "fbobjc_configs")
12
load("@fbsource//xplat/caffe2:buckbuild.bzl", "read_bool")
13
load("@fbsource//xplat/pfh/Msgr/Mobile/ProductInfra:DEFS.bzl", "Msgr_Mobile_ProductInfra")
14

15
def get_c2_expose_op_to_c10():
16
    c2_op_to_c10 = native.read_config("caffe2", "expose_op_to_c10", "0")
17

18
    expect(
19
        c2_op_to_c10 in ("0", "1"),
20
        c2_op_to_c10,
21
    )
22

23
    return bool(int(c2_op_to_c10))
24

25
def get_c2_mpscnn():
26
    c2_mpscnn = native.read_config("caffe2", "enable_mpscnn", "1")
27

28
    expect(
29
        c2_mpscnn in ("0", "1"),
30
        c2_mpscnn,
31
    )
32

33
    return bool(int(c2_mpscnn))
34

35
def get_c2_mpscnn_test():
36
    c2_mpscnn_test = native.read_config("caffe2", "enable_mpscnn_test", "0")
37

38
    expect(
39
        c2_mpscnn_test in ("0", "1"),
40
        c2_mpscnn_test,
41
    )
42

43
    return bool(int(c2_mpscnn_test))
44

45
def get_c2_nomnigraph():
46
    c2_nomnigraph = native.read_config("caffe2", "enable_nomnigraph", "1")
47

48
    expect(
49
        c2_nomnigraph in ("0", "1"),
50
        c2_nomnigraph,
51
    )
52

53
    return bool(int(c2_nomnigraph))
54

55
def get_c2_qpl():
56
    c2_qpl = native.read_config("caffe2", "enable_qpl", "1")
57

58
    expect(
59
        c2_qpl in ("0", "1"),
60
        c2_qpl,
61
    )
62

63
    return bool(int(c2_qpl))
64

65
def get_c2_strip_debug_info():
66
    c2_strip_debug_info = native.read_config("caffe2", "strip_debug_info", "0")
67

68
    expect(
69
        c2_strip_debug_info in ("0", "1"),
70
        c2_strip_debug_info,
71
    )
72

73
    return bool(int(c2_strip_debug_info))
74

75
def get_c2_strip_glog():
76
    c2_strip_glog = native.read_config("caffe2", "strip_glog", "1")
77

78
    expect(
79
        c2_strip_glog in ("0", "1"),
80
        c2_strip_glog,
81
    )
82

83
    return bool(int(c2_strip_glog))
84

85
def get_c2_tvm():
86
    c2_tvm = native.read_config("caffe2", "enable_tvm", "1")
87

88
    expect(
89
        c2_tvm in ("0", "1"),
90
        c2_tvm,
91
    )
92

93
    return bool(int(c2_tvm))
94

95
_C2_XPLAT_NO_HPTT_PREPROCESSOR_FLAGS = [
96
    "-Icaffe2",
97
    "-Imodules",
98
    "-DEIGEN_NO_DEBUG",
99
    "-DCAFFE2_USE_LITE_PROTO",
100
    "-DCAFFE2_USE_GOOGLE_GLOG",
101
    "-DCAFFE2_RNN_NO_TEXT_FORMAT",
102
    "-DGEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK=1",
103
    "-DCAFFE2_IS_XPLAT_BUILD",
104
    "-DSTRIP_ERROR_MESSAGES",
105
    "-DUSE_INTERNAL_PTHREADPOOL_IMPL",
106
]
107

108
def get_c2_xplat_no_hptt_preprocessor_flags():
109
    flags = []
110
    flags += _C2_XPLAT_NO_HPTT_PREPROCESSOR_FLAGS
111
    if is_arvr_mode() and get_c2_strip_glog():
112
        flags += ["-UGOOGLE_STRIP_LOG", "-DGOOGLE_STRIP_LOG=1"]
113
    if get_c2_expose_op_to_c10():
114
        flags += ["-DEXPOSE_C2_OPS", "-frtti"]
115
    return flags
116

117
C2_XPLAT_SERVER_PREPROCESSOR_FLAGS = [
118
    "-DCAFFE2_USE_EIGEN_FOR_BLAS",
119
    "-DC10_DISABLE_SIGNAL_HANDLERS",
120
    "-DCAFFE2_DISABLE_NUMA",
121
]
122

123
C2_XPLAT_HPTT_PREPROCESSOR_FLAGS = [
124
    "-DCAFFE2_USE_HPTT",
125
]
126

127
def get_c2_xplat_preprocessor_flags():
128
    flags = get_c2_xplat_no_hptt_preprocessor_flags() + C2_XPLAT_HPTT_PREPROCESSOR_FLAGS
129
    if get_c2_nomnigraph():
130
        flags.append("-DCAFFE2_OPTIMIZER")
131
    return flags
132

133
def get_c2_xplat_no_hptt_compiler_flags():
134
    return [
135
        "-Os",
136
        "-fexceptions",
137
        "-frtti",
138
        "-Wno-shadow",
139
        "-Wno-unknown-pragmas",
140
        "-Wno-unused-variable",
141
        "-Wno-sign-compare",
142
    ]
143

144
def get_c2_xplat_compiler_flags():
145
    return get_c2_xplat_no_hptt_compiler_flags() + C2_XPLAT_HPTT_PREPROCESSOR_FLAGS
146

147
def get_c2_fbobjc_xplat_compiler_flags():
148
    flags = []
149

150
    if is_production_build():
151
        flags.append("-DCAFFE2_NO_OPERATOR_SCHEMA")
152

153
    flags.append("-DCAFFE2_NO_GRADIENT_OPS")
154

155
    # For iOS production builds (and all Android builds), strip GLOG logging to
156
    # save size. We can disable by setting caffe2.strip_glog=0 in .buckconfig.local.
157
    if is_production_build() or get_c2_strip_glog():
158
        flags += ["-UGOOGLE_STRIP_LOG", "-DGOOGLE_STRIP_LOG=3"]
159
    else:
160
        flags.append("-UGOOGLE_STRIP_LOG")
161

162
    return flags
163

164
def get_c2_fbandroid_xplat_compiler_flags():
165
    flags = [
166
        "-Wno-unused-but-set-variable",
167
        "-DHAVE_MMAP",
168
    ]
169

170
    if get_c2_strip_glog():
171
        flags += ["-UGOOGLE_STRIP_LOG", "-DGOOGLE_STRIP_LOG=1"]
172

173
    if get_c2_strip_debug_info():
174
        flags.append("-g0")
175

176
    return flags
177

178
_C2_FBOBJC_COMPILER_FLAGS = [
179
    "-Wno-missing-prototypes",
180
    "-Wno-global-constructors",
181
    "-Wno-unknown-pragmas",
182
    "-Wno-invalid-partial-specialization",
183
    "-Wno-missing-braces",
184
    "-Wno-range-loop-analysis",
185
]
186

187
def get_c2_fbobjc_compiler_flags():
188
    flags = list(_C2_FBOBJC_COMPILER_FLAGS)
189

190
    # Avoid linking Accelerate on MacOS because we have
191
    # inconsistent LAPACK headers (see problems in D19257077).
192
    flags.append("-DCAFFE2_USE_ACCELERATE" if not is_arvr_mode() else "-DCAFFE2_USE_EIGEN_FOR_BLAS")
193
    if get_c2_mpscnn():
194
        flags.append(
195
            # TODO(t19120552) - fix this. MPSCNNConvolutionDescriptor.strideInPixelsX
196
            # is marked as iOS 11+, but it's been available since iOS 10.
197
            "-Wno-unguarded-availability",
198
        )
199
    return flags
200

201
C2_FBOBJC_MACOSX_COMPILER_FLAGS = [
202
    "-msse4.2",
203
]
204

205
C2_FBOBJC_IPHONE_COMPILER_FLAGS = [
206
    "-mfpu=neon-fp16",
207
]
208

209
def get_c2_fbobjc_frameworks():
210
    frameworks = []
211
    if not is_arvr_mode():
212
        frameworks.append(
213
            # On iOS, presumably Accelerate is a faster BLAS
214
            "$SDKROOT/System/Library/Frameworks/Accelerate.framework",
215
        )
216
    return frameworks
217

218
def get_c2_fbobjc_ios_frameworks():
219
    frameworks = []
220

221
    if get_c2_mpscnn():
222
        frameworks.extend([
223
            "$SDKROOT/System/Library/Frameworks/Metal.framework",
224
            "$SDKROOT/System/Library/Frameworks/MetalPerformanceShaders.framework",
225
        ])
226

227
    return frameworks
228

229
def get_c2_fbobjc_exported_preprocessor_flags():
230
    flags = []
231

232
    if get_c2_mpscnn():
233
        flags.append("-DCAFFE2_USE_MPSCNN")
234

235
        if get_c2_mpscnn_test():
236
            flags.append("-DCAFFE2_USE_MPSCNN_TEST")
237

238
    return flags
239

240
def get_c2_fbandroid_exported_preprocessor_flags():
241
    flags = []
242

243
    BUILD_MODE_DO_NOT_USE_WITHOUT_ASKING_SERIOUSLY = native.read_config(
244
        "fbandroid",
245
        "build_mode",
246
        "dev",
247
    )
248
    if BUILD_MODE_DO_NOT_USE_WITHOUT_ASKING_SERIOUSLY == "opt":
249
        flags.append("-DCAFFE2_NO_OPERATOR_SCHEMA")
250

251
    flags.append("-DCAFFE2_NO_GRADIENT_OPS")
252

253
    return flags
254

255
C2_FBANDROID_COMPILER_FLAGS = [
256
    "-DCAFFE2_USE_EIGEN_FOR_BLAS",
257
    "-Wno-unknown-pragmas",
258
    "-Wno-deprecated-declarations",
259
    "-Wno-invalid-partial-specialization",
260
    "-Wno-missing-braces",
261
]
262

263
C2_FBANDROID_ARMV7_COMPILER_FLAGS = [
264
    "-mfpu=neon-fp16",
265
]
266

267
C2_FBANDROID_X86_COMPILER_FLAGS = [
268
    "-mssse3",
269
]
270

271
C2_FBANDROID_LINKER_FLAGS = []
272

273
C2_FBOBJC_EXTRA_TARGET_CONFIG = {
274
    "MTL_LANGUAGE_REVISION": "Metal12",
275
}
276

277
def get_c2_default_cxx_args():
278
    return dict(
279
        header_namespace = "",
280
        apple_sdks = (IOS, MACOSX),
281
        compiler_flags = get_c2_xplat_compiler_flags(),
282
        fbandroid_compiler_flags = C2_FBANDROID_COMPILER_FLAGS + get_c2_fbandroid_xplat_compiler_flags(),
283
        fbandroid_exported_platform_preprocessor_flags = [
284
            (
285
                "android-armv7",
286
                get_c2_fbandroid_exported_preprocessor_flags(),
287
            ),
288
        ],
289
        fbandroid_linker_flags = C2_FBANDROID_LINKER_FLAGS,
290
        fbandroid_platform_compiler_flags = [
291
            ("android-armv7", C2_FBANDROID_ARMV7_COMPILER_FLAGS),
292
            (".*x86.*", C2_FBANDROID_X86_COMPILER_FLAGS),
293
        ],
294
        fbobjc_compiler_flags = get_c2_fbobjc_compiler_flags() + get_c2_fbobjc_xplat_compiler_flags(),
295
        fbobjc_configs = fbobjc_configs(
296
            STATIC_LIBRARY_IOS_CONFIG,
297
            extra_target_config = C2_FBOBJC_EXTRA_TARGET_CONFIG,
298
        ),
299
        fbobjc_exported_platform_preprocessor_flags = [
300
            (
301
                "iphoneos",
302
                get_c2_fbobjc_exported_preprocessor_flags(),
303
            ),
304
        ],
305
        fbobjc_frameworks = get_c2_fbobjc_frameworks() + get_c2_fbobjc_ios_frameworks(),
306
        fbobjc_platform_compiler_flags = [
307
            ("iphoneos", C2_FBOBJC_IPHONE_COMPILER_FLAGS),
308
        ],
309
        macosx_compiler_flags = C2_FBOBJC_MACOSX_COMPILER_FLAGS,
310
        fbobjc_macosx_configs_override = fbobjc_configs(
311
            STATIC_LIBRARY_MAC_CONFIG,
312
        ),
313
        macosx_frameworks_override = get_c2_fbobjc_frameworks(),
314
        preprocessor_flags = [
315
            # Use the internal pthreadpool impl for all Caffe2 targets on all
316
            # platforms but do not export the preprocessor flag downstream.
317
            "-DUSE_INTERNAL_PTHREADPOOL_IMPL",
318
        ],
319
        visibility = ["PUBLIC"],
320
        windows_preferred_linkage = "static" if is_arvr_mode() else None,
321
        xcode_public_headers_symlinks = True,
322
    )
323

324
def get_c2_aten_cpu_fbobjc_macosx_deps():
325
    return select({
326
        "DEFAULT": [],
327
        "ovr_config//os:macos-x86_64": ["fbsource//xplat/deeplearning/fbgemm:fbgemm"],
328
    }) if is_arvr_mode() else []
329

330
def build_cpukernel_avx2():
331
    return read_bool("caffe2", "build_cpukernel_avx2", not is_arvr_mode())
332

333
def get_c2_aten_cpu_fbobjc_macosx_platform_deps():
334
    return compose_platform_setting_list([
335
        {
336
            "cpu": "x86_64",
337
            "flags": [
338
                "fbsource//xplat/deeplearning/fbgemm:fbgemmAppleMac",
339
            ] + ([
340
                "fbsource//xplat/caffe2:cpukernel_avx2AppleMac",
341
            ] if build_cpukernel_avx2() else []),
342
            "os": "macosx",
343
        },
344
        {
345
            "cpu": "arm64",
346
            "flags": ["fbsource//xplat/third-party/XNNPACK:XNNPACKAppleMac"],
347
            "os": "macosx",
348
        },
349
    ])
350

351
def using_protobuf_v3():
352
    # Consider migrating this to `read_config("protobuf", "use_v3")`
353
    # The `is_fbcode_mode_mac()` clause was added rather than changing to `read_config` to minimize changes in behavior
354
    return is_arvr_mode() or is_fbcode_mode_mac()
355

356
def get_c2_protobuf_dep():
357
    return "fbsource//third-party/protobuf:libprotobuf" if using_protobuf_v3() else "fbsource//xplat/third-party/protobuf:fb-protobuf-lite"
358

359
def c2_cxx_library(fbobjc_compiler_flags = [], **kwargs):
360
    args = get_c2_default_cxx_args()
361
    args.update(kwargs)
362
    args.setdefault("platforms", (ANDROID, APPLE, CXX, WINDOWS))
363

364
    # Make sure we don't overwrite custom `fbobjc_compiler_flags`
365
    args["fbobjc_compiler_flags"] = args.pop("fbobjc_compiler_flags", []) + fbobjc_compiler_flags
366

367
    fb_xplat_cxx_library(
368
        labels = [
369
            "supermodule:android/default/caffe2",
370
            "supermodule:ios/default/public.caffe2",
371
        ],
372
        feature = Msgr_Mobile_ProductInfra,
373
        **args
374
    )
375

376
def c2_protobuf_rule(protos):
377
    cpps = []
378
    headers = {}
379
    raw_headers = {}
380
    for p in protos:
381
        proto = paths.basename(p)
382
        protocexe = "$(exe fbsource//third-party/protobuf:protoc-host)" if is_arvr_mode() else "$(location fbsource//xplat/third-party/protobuf:protoc.Windows)"
383
        protocmd_exe = "powershell.exe -file $(location fbsource//xplat/caffe2/scripts:proto)\\proto.ps1 -Protoc {} -Unprocessed $SRCDIR/{} -Processed $SRCDIR/{} -out $OUT -srcdir $SRCDIR".format(protocexe, p, proto)
384
        protocmd = ("cp $SRCDIR/{} $SRCDIR/{} && chmod +w $SRCDIR/{} && echo \"option optimize_for = LITE_RUNTIME;\" >> $SRCDIR/{} && ".format(p, proto, proto, proto) +
385
                    "cp $SRCDIR/caffe2/proto/caffe2.proto $SRCDIR/caffe2.proto && chmod +w $SRCDIR/caffe2.proto && echo \"option optimize_for = LITE_RUNTIME;\" >> $SRCDIR/caffe2.proto && " +
386
                    "sed -i -e 's/caffe2\\/proto\\/caffe2.proto/caffe2.proto/g' $SRCDIR/{} && ".format(proto) +
387
                    ("$(exe fbsource//third-party/protobuf:protoc-host) " if using_protobuf_v3() else "$(exe fbsource//xplat/third-party/protobuf:protoc) --osx $(location fbsource//xplat/third-party/protobuf:protoc.Darwin) --linux $(location fbsource//xplat/third-party/protobuf:protoc.Linux) ") +
388
                    "-I $SRCDIR --cpp_out=$OUT $SRCDIR/{}".format(proto))
389
        buck_genrule(
390
            name = proto,
391
            srcs = sorted(collections.uniq([p, "caffe2/proto/caffe2.proto"])),
392
            cmd_exe = protocmd_exe,
393
            bash = protocmd,
394
            out = ".",
395
        )
396
        (name, _) = paths.split_extension(proto)
397
        cpp = name + ".pb.cc"
398
        h = name + ".pb.h"
399
        buck_genrule(
400
            name = h,
401
            cmd_exe = "@powershell -Command \" & { " + "(Get-Content $(location :{})\\{}".format(proto, h) + ") -replace \\\"caffe2.pb.h\\\", \\\"caffe2/proto/caffe2.pb.h\\\" | Set-Content $OUT } \"",
402
            bash = "cp -f $(location :{})/{} $OUT  && ".format(proto, h) +
403
                   "sed -i -e 's/caffe2.pb.h/caffe2\\/proto\\/caffe2.pb.h/g' $OUT",
404
            out = h,
405
        )
406
        headers["caffe2/proto/" + h] = ":{}".format(h)
407
        raw_headers[h] = ":{}".format(h)
408
        buck_genrule(
409
            name = cpp,
410
            cmd_exe = "@powershell -Command copy $(location :{})/{} $OUT".format(proto, cpp),
411
            bash = "cp -f $(location :{})/{} $OUT".format(proto, cpp),
412
            out = cpp,
413
        )
414
        cpps.append(":{}".format(cpp))
415
    return (cpps, headers, raw_headers)
416

417
# C2 uses lite version of protobuf while torch/jit uses some method only exists
418
# in full protobuf. This is a temporary workaround to enable experiment build.
419
# DO NOT USE IT IN PRODUCTION BUILD!
420
def c2_full_protobuf_rule(protos):
421
    prefix = "full_"
422
    cpps = []
423
    headers = {}
424
    raw_headers = {}
425
    for p in protos:
426
        proto = paths.basename(p)
427
        protocexe = "$(exe fbsource//third-party/protobuf:protoc-host)" if is_arvr_mode() else "$(location fbsource//xplat/third-party/protobuf:protoc.Windows)"
428
        protocmd_exe = "powershell.exe -file $(location fbsource//xplat/caffe2/scripts:proto)\\proto.ps1 -Protoc {} -Unprocessed $SRCDIR/{} -Processed $SRCDIR/{} -out $OUT -srcdir $SRCDIR".format(protocexe, p, proto)
429
        protocmd = ("cp $SRCDIR/{} $SRCDIR/{} && ".format(p, proto) +
430
                    "cp $SRCDIR/caffe2/proto/caffe2.proto $SRCDIR/caffe2.proto && " +
431
                    "sed -i -e 's/caffe2\\/proto\\/caffe2.proto/caffe2.proto/g' $SRCDIR/{} && ".format(proto) +
432
                    ("$(exe fbsource//third-party/protobuf:protoc-host) " if using_protobuf_v3() else "$(exe fbsource//xplat/third-party/protobuf:protoc) --osx $(location fbsource//xplat/third-party/protobuf:protoc.Darwin) --linux $(location fbsource//xplat/third-party/protobuf:protoc.Linux) ") +
433
                    "-I $SRCDIR --cpp_out=$OUT $SRCDIR/{}".format(proto))
434
        buck_genrule(
435
            name = prefix + proto,
436
            srcs = sorted(collections.uniq([p, "caffe2/proto/caffe2.proto"])),
437
            cmd = protocmd,
438
            cmd_exe = protocmd_exe,
439
            out = ".",
440
        )
441
        (name, _) = paths.split_extension(proto)
442
        cpp = name + ".pb.cc"
443
        h = name + ".pb.h"
444
        buck_genrule(
445
            name = prefix + h,
446
            cmd_exe = "@powershell -Command \" & { " + "(Get-Content $(location :{})\\{}".format(prefix + proto, h) + ") -replace \\\"caffe2.pb.h\\\", \\\"caffe2/proto/caffe2.pb.h\\\" | Set-Content $OUT } \"",
447
            bash = "cp -f $(location :{})/{} $OUT  && ".format(prefix + proto, h) +
448
                   "sed -i -e 's/caffe2.pb.h/caffe2\\/proto\\/caffe2.pb.h/g' $OUT",
449
            out = h,
450
        )
451
        headers["caffe2/proto/" + h] = ":{}".format(prefix + h)
452
        raw_headers[h] = ":{}".format(prefix + h)
453
        buck_genrule(
454
            name = prefix + cpp,
455
            cmd_exe = "@powershell -Command copy $(location :{})/{} $OUT".format(prefix + proto, cpp),
456
            bash = "cp -f $(location :{})/{} $OUT".format(prefix + proto, cpp),
457
            out = cpp,
458
        )
459
        cpps.append(":{}".format(prefix + cpp))
460
    return (cpps, headers, raw_headers)
461

462
def libcaffe2_cxx_library(name, use_hptt, **kwargs):
463
    c2_cxx_library(
464
        name = name,
465
        exported_deps = [
466
            "fbsource//xplat/caffe2/c10:c10",
467
            get_c2_protobuf_dep(),
468
            ":caffe2_protobuf_headers",
469
            ":pthreadpool",
470
            ":common_core",
471
            ":caffe2_proto_types",
472
        ],
473
        compiler_flags = get_c2_xplat_compiler_flags() if use_hptt else get_c2_xplat_no_hptt_compiler_flags(),
474
        exported_preprocessor_flags = get_c2_xplat_preprocessor_flags() if use_hptt else get_c2_xplat_no_hptt_preprocessor_flags(),
475
        cxx_preprocessor_flags = C2_XPLAT_SERVER_PREPROCESSOR_FLAGS,
476
        fbandroid_exported_preprocessor_flags = get_c2_fbandroid_xplat_compiler_flags(),
477
        fbobjc_exported_preprocessor_flags = get_c2_fbobjc_xplat_compiler_flags(),
478
        # Hack to work around lack of platform_srcs support in Xcode project generation.
479
        macosx_extra_xcode_sources_override = [],
480
        link_whole = True,
481
        **kwargs
482
    )
483

484
def c2_operator_library(name, **kwargs):
485
    dict_defs.key_extend(
486
        kwargs,
487
        "deps",
488
        [
489
            "fbsource//xplat/folly:molly",
490
            "fbsource//third-party/glog:glog",
491
            ":caffe2",
492
        ] + ([":aten_cpu"] if get_c2_expose_op_to_c10() else []),
493
    )
494

495
    # NOTE: Currently operators can "depend" on other operators, which is used
496
    # so that loading one will implicitly load the dependencies.  So, make sure
497
    # that no `--as-needed` flags pulled in from dependencies cause these
498
    # operator deps to get dropped.
499
    linker_flags = [] if (read_config("caffe2", "link_as_needed", "0") == "1") else ["-Wl,--no-as-needed"]
500
    c2_cxx_library(
501
        name = name,
502
        soname = "lib" + name + ".$(ext)",
503
        fbandroid_compiler_flags = get_c2_default_cxx_args()["fbandroid_compiler_flags"] + ["-Os"],
504
        fbobjc_compiler_flags = get_c2_default_cxx_args()["fbobjc_compiler_flags"] + ["-Oz", "-DCOMPILING_FOR_MIN_SIZE=1"],
505
        link_whole = True,
506
        cxx_exported_linker_flags = linker_flags,
507
        fbandroid_exported_linker_flags = linker_flags,
508
        exported_deps = [
509
            ":caffe2",
510
        ],
511
        **kwargs
512
    )
513

514
def c2_genrule(genrule, genfiles, prefix = "", src_path = "", header_namespace = ""):
515
    headers = {}
516
    srcs = []
517
    for generated_filename in genfiles:
518
        buck_genrule(
519
            name = prefix + generated_filename,
520
            bash = "cp -f $(location :{})/{} $OUT".format(genrule, src_path + generated_filename),
521
            cmd_exe = "@powershell -Command copy $(location :{})/{} $OUT".format(genrule, src_path + generated_filename),
522
            out = generated_filename,
523
        )
524
        rule = ":{}{}".format(prefix, generated_filename)
525
        headers[header_namespace + generated_filename] = rule
526
        srcs.append(rule)
527
    return {"headers": headers, "srcs": srcs}
528

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.