xref: /aosp_15_r20/external/pytorch/buckbuild.bzl (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker# NOTE: This file is shared by internal and OSS BUCK build.
2*da0073e9SAndroid Build Coastguard Worker# These load paths point to different files in internal and OSS environment
3*da0073e9SAndroid Build Coastguard Worker
4*da0073e9SAndroid Build Coastguard Workerload("@bazel_skylib//lib:paths.bzl", "paths")
5*da0073e9SAndroid Build Coastguard Workerload("//tools/build_defs:fb_native_wrapper.bzl", "fb_native")
6*da0073e9SAndroid Build Coastguard Workerload("//tools/build_defs:fb_xplat_cxx_library.bzl", "fb_xplat_cxx_library")
7*da0073e9SAndroid Build Coastguard Workerload("//tools/build_defs:fb_xplat_genrule.bzl", "fb_xplat_genrule")
8*da0073e9SAndroid Build Coastguard Workerload("//tools/build_defs:fbsource_utils.bzl", "is_arvr_mode")
9*da0073e9SAndroid Build Coastguard Workerload("//tools/build_defs:glob_defs.bzl", "subdir_glob")
10*da0073e9SAndroid Build Coastguard Workerload("//tools/build_defs:platform_defs.bzl", "APPLETVOS", "IOS", "MACOSX")
11*da0073e9SAndroid Build Coastguard Workerload("//tools/build_defs:type_defs.bzl", "is_list", "is_string")
12*da0073e9SAndroid Build Coastguard Workerload("//tools/build_defs/android:build_mode_defs.bzl", is_production_build_android = "is_production_build")
13*da0073e9SAndroid Build Coastguard Workerload("//tools/build_defs/apple:build_mode_defs.bzl", is_production_build_ios = "is_production_build")
14*da0073e9SAndroid Build Coastguard Workerload("//tools/build_defs/windows:windows_flag_map.bzl", "windows_convert_gcc_clang_flags")
15*da0073e9SAndroid Build Coastguard Workerload(
16*da0073e9SAndroid Build Coastguard Worker    ":build_variables.bzl",
17*da0073e9SAndroid Build Coastguard Worker    "aten_cpu_source_list",
18*da0073e9SAndroid Build Coastguard Worker    "aten_native_source_list",
19*da0073e9SAndroid Build Coastguard Worker    "core_sources_common",
20*da0073e9SAndroid Build Coastguard Worker    "core_sources_full_mobile_no_backend_interface_xplat",
21*da0073e9SAndroid Build Coastguard Worker    "core_trainer_sources",
22*da0073e9SAndroid Build Coastguard Worker    "jit_core_headers",
23*da0073e9SAndroid Build Coastguard Worker    "jit_core_sources",
24*da0073e9SAndroid Build Coastguard Worker    "libtorch_profiler_sources",
25*da0073e9SAndroid Build Coastguard Worker    "torch_cpp_srcs",
26*da0073e9SAndroid Build Coastguard Worker    "torch_mobile_tracer_sources",
27*da0073e9SAndroid Build Coastguard Worker)
28*da0073e9SAndroid Build Coastguard Workerload(
29*da0073e9SAndroid Build Coastguard Worker    ":pt_ops.bzl",
30*da0073e9SAndroid Build Coastguard Worker    "USED_PT_BACKENDS",
31*da0073e9SAndroid Build Coastguard Worker)
32*da0073e9SAndroid Build Coastguard Workerload(
33*da0073e9SAndroid Build Coastguard Worker    ":pt_template_srcs.bzl",
34*da0073e9SAndroid Build Coastguard Worker    "METAL_MASKRCNN_SOURCE_LIST",
35*da0073e9SAndroid Build Coastguard Worker    "METAL_SOURCE_LIST",
36*da0073e9SAndroid Build Coastguard Worker    "TEMPLATE_MASKRCNN_SOURCE_LIST",
37*da0073e9SAndroid Build Coastguard Worker    "TEMPLATE_SOURCE_LIST",
38*da0073e9SAndroid Build Coastguard Worker    "aten_ufunc_generated_all_cpu_sources",
39*da0073e9SAndroid Build Coastguard Worker    "get_gen_oplist_outs",
40*da0073e9SAndroid Build Coastguard Worker    "get_generate_code_bin_outs",
41*da0073e9SAndroid Build Coastguard Worker    "get_metal_registration_files_outs",
42*da0073e9SAndroid Build Coastguard Worker    "get_metal_registration_files_outs_windows",
43*da0073e9SAndroid Build Coastguard Worker    "get_metal_source_dict",
44*da0073e9SAndroid Build Coastguard Worker    "get_template_registration_file_rules",
45*da0073e9SAndroid Build Coastguard Worker    "get_template_registration_files_outs",
46*da0073e9SAndroid Build Coastguard Worker    "get_template_source_dict",
47*da0073e9SAndroid Build Coastguard Worker)
48*da0073e9SAndroid Build Coastguard Workerload(
49*da0073e9SAndroid Build Coastguard Worker    ":ufunc_defs.bzl",
50*da0073e9SAndroid Build Coastguard Worker    "aten_ufunc_generated_cpu_kernel_sources",
51*da0073e9SAndroid Build Coastguard Worker    "aten_ufunc_generated_cpu_sources",
52*da0073e9SAndroid Build Coastguard Worker    "aten_ufunc_generated_cuda_sources",
53*da0073e9SAndroid Build Coastguard Worker)
54*da0073e9SAndroid Build Coastguard Worker
55*da0073e9SAndroid Build Coastguard Workerdef read_bool(section, field, default, required = True):
56*da0073e9SAndroid Build Coastguard Worker    val = read_config(section, field)
57*da0073e9SAndroid Build Coastguard Worker    if val != None:
58*da0073e9SAndroid Build Coastguard Worker        if val in ["true", "True", "1"]:
59*da0073e9SAndroid Build Coastguard Worker            return True
60*da0073e9SAndroid Build Coastguard Worker        elif val in ["false", "False", "0"]:
61*da0073e9SAndroid Build Coastguard Worker            return False
62*da0073e9SAndroid Build Coastguard Worker        else:
63*da0073e9SAndroid Build Coastguard Worker            fail(
64*da0073e9SAndroid Build Coastguard Worker                "`{}:{}`: must be one of (0, 1, true, false, True, False), but was {}".format(section, field, val),
65*da0073e9SAndroid Build Coastguard Worker            )
66*da0073e9SAndroid Build Coastguard Worker    elif default != None:
67*da0073e9SAndroid Build Coastguard Worker        return default
68*da0073e9SAndroid Build Coastguard Worker    elif not required:
69*da0073e9SAndroid Build Coastguard Worker        return None
70*da0073e9SAndroid Build Coastguard Worker    else:
71*da0073e9SAndroid Build Coastguard Worker        fail("`{}:{}`: no value set".format(section, field))
72*da0073e9SAndroid Build Coastguard Worker
73*da0073e9SAndroid Build Coastguard Workerdef _is_build_mode_dev():
74*da0073e9SAndroid Build Coastguard Worker    if is_production_build_android():
75*da0073e9SAndroid Build Coastguard Worker        # Android Prod builds
76*da0073e9SAndroid Build Coastguard Worker        return False
77*da0073e9SAndroid Build Coastguard Worker    if is_production_build_ios():
78*da0073e9SAndroid Build Coastguard Worker        # iOS Prod builds
79*da0073e9SAndroid Build Coastguard Worker        return False
80*da0073e9SAndroid Build Coastguard Worker
81*da0073e9SAndroid Build Coastguard Worker    return True
82*da0073e9SAndroid Build Coastguard Worker
83*da0073e9SAndroid Build Coastguard Workerdef _get_enable_lightweight_dispatch():
84*da0073e9SAndroid Build Coastguard Worker    return read_bool("pt", "enable_lightweight_dispatch", False)
85*da0073e9SAndroid Build Coastguard Worker
86*da0073e9SAndroid Build Coastguard Workerdef _get_enable_record_kernel_dtype():
87*da0073e9SAndroid Build Coastguard Worker    return read_bool("pt", "enable_record_kernel_dtype", False)
88*da0073e9SAndroid Build Coastguard Worker
89*da0073e9SAndroid Build Coastguard Workerdef get_enable_mobile_dispatch_keys_trimming():
90*da0073e9SAndroid Build Coastguard Worker    return read_bool("pt", "enable_mobile_dispatch_keys_trimming", False)
91*da0073e9SAndroid Build Coastguard Worker
92*da0073e9SAndroid Build Coastguard Workerdef get_disable_per_op_profiling():
93*da0073e9SAndroid Build Coastguard Worker    return read_bool("pt", "disable_per_op_profiling", True)
94*da0073e9SAndroid Build Coastguard Worker
95*da0073e9SAndroid Build Coastguard Workerdef get_strip_error_messages():
96*da0073e9SAndroid Build Coastguard Worker    if IS_OSS:
97*da0073e9SAndroid Build Coastguard Worker        return True  # always strip in OSS CI to expose potential issues
98*da0073e9SAndroid Build Coastguard Worker    return read_bool("pt", "strip_error_messages", not _is_build_mode_dev())
99*da0073e9SAndroid Build Coastguard Worker
100*da0073e9SAndroid Build Coastguard Workerdef get_disable_warn():
101*da0073e9SAndroid Build Coastguard Worker    return read_bool("pt", "disable_warn", False)
102*da0073e9SAndroid Build Coastguard Worker
103*da0073e9SAndroid Build Coastguard Workerdef get_enable_eager_symbolication():
104*da0073e9SAndroid Build Coastguard Worker    return read_bool("pt", "enable_eager_symbolication", default = False, required = False)
105*da0073e9SAndroid Build Coastguard Worker
106*da0073e9SAndroid Build Coastguard Workerdef get_static_dispatch_backend():
107*da0073e9SAndroid Build Coastguard Worker    static_dispatch_backend = native.read_config("pt", "static_dispatch_backend", None)
108*da0073e9SAndroid Build Coastguard Worker    if static_dispatch_backend == None:
109*da0073e9SAndroid Build Coastguard Worker        return []
110*da0073e9SAndroid Build Coastguard Worker    return static_dispatch_backend.split(";")
111*da0073e9SAndroid Build Coastguard Worker
112*da0073e9SAndroid Build Coastguard Workerdef get_glsl_image_format():
113*da0073e9SAndroid Build Coastguard Worker    if read_config("pt", "vulkan_full_precision", "0") == "0":
114*da0073e9SAndroid Build Coastguard Worker        return "rgba16f"
115*da0073e9SAndroid Build Coastguard Worker    return "rgba32f"
116*da0073e9SAndroid Build Coastguard Worker
117*da0073e9SAndroid Build Coastguard Workerdef get_glsl_paths():
118*da0073e9SAndroid Build Coastguard Worker    paths = [
119*da0073e9SAndroid Build Coastguard Worker        "//xplat/caffe2:aten_vulkan_glsl_src_path",
120*da0073e9SAndroid Build Coastguard Worker        "aten/src/ATen/native/vulkan/glsl",
121*da0073e9SAndroid Build Coastguard Worker    ] + [
122*da0073e9SAndroid Build Coastguard Worker        p
123*da0073e9SAndroid Build Coastguard Worker        for p in read_config("gen_vulkan_spv", "additional_glsl_paths", "").split(" ")
124*da0073e9SAndroid Build Coastguard Worker        if p
125*da0073e9SAndroid Build Coastguard Worker    ]
126*da0073e9SAndroid Build Coastguard Worker
127*da0073e9SAndroid Build Coastguard Worker    if len(paths) % 2 != 0:
128*da0073e9SAndroid Build Coastguard Worker        fail(
129*da0073e9SAndroid Build Coastguard Worker            "gen_vulkan_spv.additional_glsl_paths must contain an even number of elements",
130*da0073e9SAndroid Build Coastguard Worker        )
131*da0073e9SAndroid Build Coastguard Worker
132*da0073e9SAndroid Build Coastguard Worker    return " ".join(
133*da0073e9SAndroid Build Coastguard Worker        [
134*da0073e9SAndroid Build Coastguard Worker            "$(location {})/{}".format(
135*da0073e9SAndroid Build Coastguard Worker                paths[i],
136*da0073e9SAndroid Build Coastguard Worker                paths[i + 1],
137*da0073e9SAndroid Build Coastguard Worker            )
138*da0073e9SAndroid Build Coastguard Worker            for i in range(
139*da0073e9SAndroid Build Coastguard Worker                0,
140*da0073e9SAndroid Build Coastguard Worker                len(paths),
141*da0073e9SAndroid Build Coastguard Worker                2,
142*da0073e9SAndroid Build Coastguard Worker            )
143*da0073e9SAndroid Build Coastguard Worker        ],
144*da0073e9SAndroid Build Coastguard Worker    )
145*da0073e9SAndroid Build Coastguard Worker
146*da0073e9SAndroid Build Coastguard Workerdef spv_shader_library():
147*da0073e9SAndroid Build Coastguard Worker    pass
148*da0073e9SAndroid Build Coastguard Worker
149*da0073e9SAndroid Build Coastguard WorkerIS_OSS = read_config("pt", "is_oss", "0") == "1"  # True for OSS BUCK build, and False for internal BUCK build
150*da0073e9SAndroid Build Coastguard Worker
151*da0073e9SAndroid Build Coastguard WorkerNOT_OSS = not IS_OSS
152*da0073e9SAndroid Build Coastguard Worker
153*da0073e9SAndroid Build Coastguard Worker# for targets in caffe2 root path
154*da0073e9SAndroid Build Coastguard WorkerROOT = "//" if IS_OSS else "//xplat/caffe2"
155*da0073e9SAndroid Build Coastguard Worker
156*da0073e9SAndroid Build Coastguard Worker# for targets in subfolders
157*da0073e9SAndroid Build Coastguard WorkerROOT_PATH = "//" if IS_OSS else "//xplat/caffe2/"
158*da0073e9SAndroid Build Coastguard Worker
159*da0073e9SAndroid Build Coastguard WorkerC10 = "//c10:c10" if IS_OSS else "//xplat/caffe2/c10:c10"
160*da0073e9SAndroid Build Coastguard Worker
161*da0073e9SAndroid Build Coastguard Worker# a dictionary maps third party library name to fbsource and oss target
162*da0073e9SAndroid Build Coastguard WorkerTHIRD_PARTY_LIBS = {
163*da0073e9SAndroid Build Coastguard Worker    "FP16": ["//xplat/third-party/FP16:FP16", "//third_party:FP16"],
164*da0073e9SAndroid Build Coastguard Worker    "FXdiv": ["//xplat/third-party/FXdiv:FXdiv", "//third_party:FXdiv"],
165*da0073e9SAndroid Build Coastguard Worker    "XNNPACK": ["//xplat/third-party/XNNPACK:XNNPACK", "//third_party:XNNPACK"],
166*da0073e9SAndroid Build Coastguard Worker    "clog": ["//xplat/third-party/clog:clog", "//third_party:clog"],
167*da0073e9SAndroid Build Coastguard Worker    "cpuinfo": ["//third-party/cpuinfo:cpuinfo", "//third_party:cpuinfo"],
168*da0073e9SAndroid Build Coastguard Worker    "flatbuffers-api": ["//third-party/flatbuffers/fbsource_namespace:flatbuffers-api", "//third_party:flatbuffers-api"],
169*da0073e9SAndroid Build Coastguard Worker    "flatc": ["//third-party/flatbuffers/fbsource_namespace:flatc", "//third_party:flatc"],
170*da0073e9SAndroid Build Coastguard Worker    "fmt": ["//third-party/fmt:fmt", "//third_party:fmt"],
171*da0073e9SAndroid Build Coastguard Worker    "glog": ["//third-party/glog:glog", "//third_party:glog"],
172*da0073e9SAndroid Build Coastguard Worker    "gmock": ["//third-party/googletest:gmock_main", "//third_party:gmock"],
173*da0073e9SAndroid Build Coastguard Worker    "gtest": ["//third-party/googletest:gtest_main", "//third_party:gtest"],
174*da0073e9SAndroid Build Coastguard Worker    "kineto": ["//xplat/kineto/libkineto:libkineto", "//third_party:libkineto"],
175*da0073e9SAndroid Build Coastguard Worker    "libkineto_headers": ["//xplat/kineto/libkineto:libkineto_headers", "//third_party:libkineto_headers"],
176*da0073e9SAndroid Build Coastguard Worker    "omp": ["//xplat/third-party/linker_lib:omp", "//third_party:no-op"],
177*da0073e9SAndroid Build Coastguard Worker    "pocketfft": ["//third-party/pocket_fft:pocketfft", "//third_party:pocketfft_header"],
178*da0073e9SAndroid Build Coastguard Worker    "psimd": ["//xplat/third-party/psimd:psimd", "//third_party:psimd"],
179*da0073e9SAndroid Build Coastguard Worker    "pthreadpool": ["//xplat/third-party/pthreadpool:pthreadpool", "//third_party:pthreadpool"],
180*da0073e9SAndroid Build Coastguard Worker    "pthreadpool_header": ["//xplat/third-party/pthreadpool:pthreadpool_header", "//third_party:pthreadpool_header"],
181*da0073e9SAndroid Build Coastguard Worker    "pyyaml": ["//third-party/pyyaml:pyyaml", "//third_party:pyyaml"],
182*da0073e9SAndroid Build Coastguard Worker    "rt": ["//xplat/third-party/linker_lib:rt", "//third_party:rt"],
183*da0073e9SAndroid Build Coastguard Worker    "ruy": ["//third-party/ruy:ruy_xplat_lib", "//third_party:ruy_lib"],
184*da0073e9SAndroid Build Coastguard Worker    "sleef_arm": ["//third-party/sleef:sleef_arm", "//third_party:sleef_arm"],
185*da0073e9SAndroid Build Coastguard Worker    "typing-extensions": ["//third-party/typing-extensions:typing-extensions", "//third_party:typing-extensions"],
186*da0073e9SAndroid Build Coastguard Worker}
187*da0073e9SAndroid Build Coastguard Worker
188*da0073e9SAndroid Build Coastguard Workerdef third_party(name):
189*da0073e9SAndroid Build Coastguard Worker    if name not in THIRD_PARTY_LIBS:
190*da0073e9SAndroid Build Coastguard Worker        fail("Cannot find third party library " + name + ", please register it in THIRD_PARTY_LIBS first!")
191*da0073e9SAndroid Build Coastguard Worker    return THIRD_PARTY_LIBS[name][1] if IS_OSS else THIRD_PARTY_LIBS[name][0]
192*da0073e9SAndroid Build Coastguard Worker
193*da0073e9SAndroid Build Coastguard Workerdef get_pt_compiler_flags():
194*da0073e9SAndroid Build Coastguard Worker    return select({
195*da0073e9SAndroid Build Coastguard Worker        "DEFAULT": _PT_COMPILER_FLAGS,
196*da0073e9SAndroid Build Coastguard Worker        "ovr_config//compiler:cl": windows_convert_gcc_clang_flags(_PT_COMPILER_FLAGS),
197*da0073e9SAndroid Build Coastguard Worker    })
198*da0073e9SAndroid Build Coastguard Worker
199*da0073e9SAndroid Build Coastguard Worker_PT_COMPILER_FLAGS = [
200*da0073e9SAndroid Build Coastguard Worker    "-fexceptions",
201*da0073e9SAndroid Build Coastguard Worker    "-frtti",
202*da0073e9SAndroid Build Coastguard Worker    "-Os",
203*da0073e9SAndroid Build Coastguard Worker    "-Wno-unknown-pragmas",
204*da0073e9SAndroid Build Coastguard Worker    "-Wno-write-strings",
205*da0073e9SAndroid Build Coastguard Worker    "-Wno-unused-variable",
206*da0073e9SAndroid Build Coastguard Worker    "-Wno-unused-function",
207*da0073e9SAndroid Build Coastguard Worker    "-Wno-deprecated-declarations",
208*da0073e9SAndroid Build Coastguard Worker    "-Wno-shadow",
209*da0073e9SAndroid Build Coastguard Worker    "-Wno-global-constructors",
210*da0073e9SAndroid Build Coastguard Worker    "-Wno-missing-prototypes",
211*da0073e9SAndroid Build Coastguard Worker]
212*da0073e9SAndroid Build Coastguard Worker
213*da0073e9SAndroid Build Coastguard WorkerATEN_COMPILER_FLAGS = [
214*da0073e9SAndroid Build Coastguard Worker    "-fexceptions",
215*da0073e9SAndroid Build Coastguard Worker    "-frtti",
216*da0073e9SAndroid Build Coastguard Worker    "-fPIC",
217*da0073e9SAndroid Build Coastguard Worker    "-Os",
218*da0073e9SAndroid Build Coastguard Worker    "-Wno-absolute-value",
219*da0073e9SAndroid Build Coastguard Worker    "-Wno-deprecated-declarations",
220*da0073e9SAndroid Build Coastguard Worker    "-Wno-macro-redefined",
221*da0073e9SAndroid Build Coastguard Worker    "-Wno-tautological-constant-out-of-range-compare",
222*da0073e9SAndroid Build Coastguard Worker    "-Wno-unknown-pragmas",
223*da0073e9SAndroid Build Coastguard Worker    "-Wno-unknown-warning-option",
224*da0073e9SAndroid Build Coastguard Worker    "-Wno-unused-function",
225*da0073e9SAndroid Build Coastguard Worker    "-Wno-unused-variable",
226*da0073e9SAndroid Build Coastguard Worker    "-Wno-pass-failed",
227*da0073e9SAndroid Build Coastguard Worker    "-Wno-shadow",
228*da0073e9SAndroid Build Coastguard Worker]
229*da0073e9SAndroid Build Coastguard Worker
230*da0073e9SAndroid Build Coastguard Workerdef get_aten_compiler_flags():
231*da0073e9SAndroid Build Coastguard Worker    return ATEN_COMPILER_FLAGS
232*da0073e9SAndroid Build Coastguard Worker
233*da0073e9SAndroid Build Coastguard Worker_COMMON_PREPROCESSOR_FLAGS = [
234*da0073e9SAndroid Build Coastguard Worker    "-DC10_MOBILE",
235*da0073e9SAndroid Build Coastguard Worker    "-DNO_EXPORT",
236*da0073e9SAndroid Build Coastguard Worker] + (
237*da0073e9SAndroid Build Coastguard Worker    ["-DC10_MOBILE_TRIM_DISPATCH_KEYS"] if get_enable_mobile_dispatch_keys_trimming() else []
238*da0073e9SAndroid Build Coastguard Worker) + (
239*da0073e9SAndroid Build Coastguard Worker    ["-DSTRIP_ERROR_MESSAGES"] if get_strip_error_messages() else []
240*da0073e9SAndroid Build Coastguard Worker) + (
241*da0073e9SAndroid Build Coastguard Worker    ["-DDISABLE_WARN"] if get_disable_warn() else []
242*da0073e9SAndroid Build Coastguard Worker)
243*da0073e9SAndroid Build Coastguard Worker
244*da0073e9SAndroid Build Coastguard Workerdef get_aten_preprocessor_flags():
245*da0073e9SAndroid Build Coastguard Worker    # read_config is not allowed outside of function in Starlark
246*da0073e9SAndroid Build Coastguard Worker    ATEN_PREPROCESSOR_FLAGS = _COMMON_PREPROCESSOR_FLAGS + [
247*da0073e9SAndroid Build Coastguard Worker        "-DCPU_CAPABILITY_DEFAULT",
248*da0073e9SAndroid Build Coastguard Worker        "-DCPU_CAPABILITY=DEFAULT",
249*da0073e9SAndroid Build Coastguard Worker        "-DCAFFE2_USE_LITE_PROTO",
250*da0073e9SAndroid Build Coastguard Worker        "-DATEN_CUDNN_ENABLED_FBXPLAT=0",
251*da0073e9SAndroid Build Coastguard Worker        "-DATEN_MKLDNN_ENABLED_FBXPLAT=0",
252*da0073e9SAndroid Build Coastguard Worker        "-DATEN_MKLDNN_ACL_ENABLED_FBXPLAT=0",
253*da0073e9SAndroid Build Coastguard Worker        "-DATEN_NNPACK_ENABLED_FBXPLAT=0",
254*da0073e9SAndroid Build Coastguard Worker        "-DATEN_MKL_ENABLED_FBXPLAT=0",
255*da0073e9SAndroid Build Coastguard Worker        "-DATEN_MKL_SEQUENTIAL_FBXPLAT=0",
256*da0073e9SAndroid Build Coastguard Worker        "-DUSE_PYTORCH_METAL",
257*da0073e9SAndroid Build Coastguard Worker        "-DUSE_PYTORCH_QNNPACK",
258*da0073e9SAndroid Build Coastguard Worker        "-DUSE_XNNPACK",
259*da0073e9SAndroid Build Coastguard Worker        "-DPYTORCH_QNNPACK_RUNTIME_QUANTIZATION",
260*da0073e9SAndroid Build Coastguard Worker        "-DAT_PARALLEL_OPENMP_FBXPLAT=0",
261*da0073e9SAndroid Build Coastguard Worker        "-DAT_PARALLEL_NATIVE_FBXPLAT=1",
262*da0073e9SAndroid Build Coastguard Worker        "-DUSE_LAPACK_FBXPLAT=0",
263*da0073e9SAndroid Build Coastguard Worker        "-DAT_BLAS_F2C_FBXPLAT=0",
264*da0073e9SAndroid Build Coastguard Worker        "-DAT_BLAS_USE_CBLAS_DOT_FBXPLAT=0",
265*da0073e9SAndroid Build Coastguard Worker        "-DUSE_RUY_QMATMUL",
266*da0073e9SAndroid Build Coastguard Worker    ]
267*da0073e9SAndroid Build Coastguard Worker    if get_disable_per_op_profiling():
268*da0073e9SAndroid Build Coastguard Worker        ATEN_PREPROCESSOR_FLAGS.append("-DPYTORCH_DISABLE_PER_OP_PROFILING")
269*da0073e9SAndroid Build Coastguard Worker    if _get_enable_record_kernel_dtype():
270*da0073e9SAndroid Build Coastguard Worker        ATEN_PREPROCESSOR_FLAGS.append("-DENABLE_RECORD_KERNEL_FUNCTION_DTYPE")
271*da0073e9SAndroid Build Coastguard Worker    return ATEN_PREPROCESSOR_FLAGS
272*da0073e9SAndroid Build Coastguard Worker
273*da0073e9SAndroid Build Coastguard Workerdef get_pt_preprocessor_flags():
274*da0073e9SAndroid Build Coastguard Worker    # read_config is not allowed outside of function in Starlark
275*da0073e9SAndroid Build Coastguard Worker    PT_PREPROCESSOR_FLAGS = _COMMON_PREPROCESSOR_FLAGS + [
276*da0073e9SAndroid Build Coastguard Worker        "-D_THP_CORE",
277*da0073e9SAndroid Build Coastguard Worker        "-DUSE_SCALARS",
278*da0073e9SAndroid Build Coastguard Worker        "-DNO_CUDNN_DESTROY_HANDLE",
279*da0073e9SAndroid Build Coastguard Worker    ]
280*da0073e9SAndroid Build Coastguard Worker
281*da0073e9SAndroid Build Coastguard Worker    if _is_build_mode_dev():
282*da0073e9SAndroid Build Coastguard Worker        PT_PREPROCESSOR_FLAGS.append("-DENABLE_PYTORCH_NON_PRODUCTION_BUILDS")
283*da0073e9SAndroid Build Coastguard Worker    return PT_PREPROCESSOR_FLAGS
284*da0073e9SAndroid Build Coastguard Worker
285*da0073e9SAndroid Build Coastguard Worker# This needs to be kept in sync with https://github.com/pytorch/pytorch/blob/release/1.9/torchgen/gen.py#L892
286*da0073e9SAndroid Build Coastguard WorkerPT_BACKEND_HEADERS = [
287*da0073e9SAndroid Build Coastguard Worker    "CPU",
288*da0073e9SAndroid Build Coastguard Worker    "CUDA",
289*da0073e9SAndroid Build Coastguard Worker    "CompositeExplicitAutograd",
290*da0073e9SAndroid Build Coastguard Worker    "CompositeExplicitAutogradNonFunctional",
291*da0073e9SAndroid Build Coastguard Worker    "CompositeImplicitAutograd",
292*da0073e9SAndroid Build Coastguard Worker    "CompositeImplicitAutogradNestedTensor",
293*da0073e9SAndroid Build Coastguard Worker    "Meta",
294*da0073e9SAndroid Build Coastguard Worker]
295*da0073e9SAndroid Build Coastguard Worker
296*da0073e9SAndroid Build Coastguard Workerdef get_aten_static_dispatch_backend_headers(existing_headers):
297*da0073e9SAndroid Build Coastguard Worker    static_backends = get_static_dispatch_backend()
298*da0073e9SAndroid Build Coastguard Worker    for backend in static_backends:
299*da0073e9SAndroid Build Coastguard Worker        if backend != "CPU":
300*da0073e9SAndroid Build Coastguard Worker            existing_headers["{}Functions.h".format(backend)] = ":gen_aten[{}Functions.h]".format(backend)
301*da0073e9SAndroid Build Coastguard Worker            existing_headers["{}Functions_inl.h".format(backend)] = ":gen_aten[{}Functions_inl.h]".format(backend)
302*da0073e9SAndroid Build Coastguard Worker    return existing_headers
303*da0073e9SAndroid Build Coastguard Worker
304*da0073e9SAndroid Build Coastguard Workerdef get_aten_codegen_extra_params(backends):
305*da0073e9SAndroid Build Coastguard Worker    extra_params = {
306*da0073e9SAndroid Build Coastguard Worker        "force_schema_registration": True,
307*da0073e9SAndroid Build Coastguard Worker    }
308*da0073e9SAndroid Build Coastguard Worker    static_backends = get_static_dispatch_backend()
309*da0073e9SAndroid Build Coastguard Worker    if static_backends:
310*da0073e9SAndroid Build Coastguard Worker        extra_params["static_dispatch_backend"] = static_backends
311*da0073e9SAndroid Build Coastguard Worker        extra_params["enabled_backends"] = static_backends
312*da0073e9SAndroid Build Coastguard Worker    else:
313*da0073e9SAndroid Build Coastguard Worker        extra_params["enabled_backends"] = backends
314*da0073e9SAndroid Build Coastguard Worker    return extra_params
315*da0073e9SAndroid Build Coastguard Worker
316*da0073e9SAndroid Build Coastguard Workerdef get_jit_codegen_params():
317*da0073e9SAndroid Build Coastguard Worker    return []
318*da0073e9SAndroid Build Coastguard Worker
319*da0073e9SAndroid Build Coastguard Workerdef get_unboxing_generated_files():
320*da0073e9SAndroid Build Coastguard Worker    srcs = []
321*da0073e9SAndroid Build Coastguard Worker    if _get_enable_lightweight_dispatch():
322*da0073e9SAndroid Build Coastguard Worker        srcs = [
323*da0073e9SAndroid Build Coastguard Worker            "UnboxingFunctions.h",
324*da0073e9SAndroid Build Coastguard Worker            "UnboxingFunctions_0.cpp",
325*da0073e9SAndroid Build Coastguard Worker            "UnboxingFunctions_1.cpp",
326*da0073e9SAndroid Build Coastguard Worker            "UnboxingFunctions_2.cpp",
327*da0073e9SAndroid Build Coastguard Worker            "UnboxingFunctions_3.cpp",
328*da0073e9SAndroid Build Coastguard Worker            "UnboxingFunctions_4.cpp",
329*da0073e9SAndroid Build Coastguard Worker            "RegisterCodegenUnboxedKernels_0.cpp",
330*da0073e9SAndroid Build Coastguard Worker            "RegisterCodegenUnboxedKernels_1.cpp",
331*da0073e9SAndroid Build Coastguard Worker            "RegisterCodegenUnboxedKernels_2.cpp",
332*da0073e9SAndroid Build Coastguard Worker            "RegisterCodegenUnboxedKernels_3.cpp",
333*da0073e9SAndroid Build Coastguard Worker            "RegisterCodegenUnboxedKernels_4.cpp",
334*da0073e9SAndroid Build Coastguard Worker            "RegisterCodegenUnboxedKernels_5.cpp",
335*da0073e9SAndroid Build Coastguard Worker            "RegisterCodegenUnboxedKernels_6.cpp",
336*da0073e9SAndroid Build Coastguard Worker            "RegisterCodegenUnboxedKernels_7.cpp",
337*da0073e9SAndroid Build Coastguard Worker            "RegisterCodegenUnboxedKernels_8.cpp",
338*da0073e9SAndroid Build Coastguard Worker            "RegisterCodegenUnboxedKernels_9.cpp",
339*da0073e9SAndroid Build Coastguard Worker        ]
340*da0073e9SAndroid Build Coastguard Worker    res = {}
341*da0073e9SAndroid Build Coastguard Worker    for file_name in srcs:
342*da0073e9SAndroid Build Coastguard Worker        res[file_name] = [file_name]
343*da0073e9SAndroid Build Coastguard Worker    return res
344*da0073e9SAndroid Build Coastguard Worker
345*da0073e9SAndroid Build Coastguard Workerdef get_aten_generated_files(enabled_backends):
346*da0073e9SAndroid Build Coastguard Worker    # NB: RegisterMeta counts as an optionally enabled backend,
347*da0073e9SAndroid Build Coastguard Worker    # and is intentionally omitted from here
348*da0073e9SAndroid Build Coastguard Worker    src_files = [
349*da0073e9SAndroid Build Coastguard Worker        "RegisterBackendSelect.cpp",
350*da0073e9SAndroid Build Coastguard Worker        "RegisterCompositeImplicitAutograd.cpp",
351*da0073e9SAndroid Build Coastguard Worker        "RegisterCompositeImplicitAutogradNestedTensor.cpp",
352*da0073e9SAndroid Build Coastguard Worker        "RegisterCompositeExplicitAutograd.cpp",
353*da0073e9SAndroid Build Coastguard Worker        "RegisterCompositeExplicitAutogradNonFunctional.cpp",
354*da0073e9SAndroid Build Coastguard Worker        "CompositeViewCopyKernels.cpp",
355*da0073e9SAndroid Build Coastguard Worker        "RegisterSchema.cpp",
356*da0073e9SAndroid Build Coastguard Worker        "Declarations.yaml",
357*da0073e9SAndroid Build Coastguard Worker        "Functions.cpp",
358*da0073e9SAndroid Build Coastguard Worker        "Functions.h",
359*da0073e9SAndroid Build Coastguard Worker        "RedispatchFunctions.h",
360*da0073e9SAndroid Build Coastguard Worker        "NativeFunctions.h",
361*da0073e9SAndroid Build Coastguard Worker        "NativeMetaFunctions.h",
362*da0073e9SAndroid Build Coastguard Worker        "MethodOperators.h",
363*da0073e9SAndroid Build Coastguard Worker        "FunctionalInverses.h",
364*da0073e9SAndroid Build Coastguard Worker        "Operators.h",
365*da0073e9SAndroid Build Coastguard Worker        "Operators_0.cpp",
366*da0073e9SAndroid Build Coastguard Worker        "Operators_1.cpp",
367*da0073e9SAndroid Build Coastguard Worker        "Operators_2.cpp",
368*da0073e9SAndroid Build Coastguard Worker        "Operators_3.cpp",
369*da0073e9SAndroid Build Coastguard Worker        "Operators_4.cpp",
370*da0073e9SAndroid Build Coastguard Worker        "CompositeImplicitAutogradFunctions.h",
371*da0073e9SAndroid Build Coastguard Worker        "CompositeImplicitAutogradFunctions_inl.h",
372*da0073e9SAndroid Build Coastguard Worker        "CompositeImplicitAutogradNestedTensorFunctions.h",
373*da0073e9SAndroid Build Coastguard Worker        "CompositeImplicitAutogradNestedTensorFunctions_inl.h",
374*da0073e9SAndroid Build Coastguard Worker        "CompositeExplicitAutogradFunctions.h",
375*da0073e9SAndroid Build Coastguard Worker        "CompositeExplicitAutogradFunctions_inl.h",
376*da0073e9SAndroid Build Coastguard Worker        "CompositeExplicitAutogradNonFunctionalFunctions.h",
377*da0073e9SAndroid Build Coastguard Worker        "CompositeExplicitAutogradNonFunctionalFunctions_inl.h",
378*da0073e9SAndroid Build Coastguard Worker        "VmapGeneratedPlumbing.h",
379*da0073e9SAndroid Build Coastguard Worker        "core/ATenOpList.cpp",
380*da0073e9SAndroid Build Coastguard Worker        "core/TensorBody.h",
381*da0073e9SAndroid Build Coastguard Worker        "core/TensorMethods.cpp",
382*da0073e9SAndroid Build Coastguard Worker        "core/aten_interned_strings.h",
383*da0073e9SAndroid Build Coastguard Worker        "core/enum_tag.h",
384*da0073e9SAndroid Build Coastguard Worker        "torch/csrc/inductor/aoti_torch/generated/c_shim_cpu.cpp",
385*da0073e9SAndroid Build Coastguard Worker    ] + get_aten_derived_type_srcs(enabled_backends)
386*da0073e9SAndroid Build Coastguard Worker
387*da0073e9SAndroid Build Coastguard Worker    # This is tiresome.  A better strategy would be to unconditionally
388*da0073e9SAndroid Build Coastguard Worker    # generate these files, and then only actually COMPILE them depended
389*da0073e9SAndroid Build Coastguard Worker    # on the generated set.  C'est la vie...
390*da0073e9SAndroid Build Coastguard Worker    if "CPU" in enabled_backends:
391*da0073e9SAndroid Build Coastguard Worker        src_files.extend(aten_ufunc_generated_cpu_sources())
392*da0073e9SAndroid Build Coastguard Worker        src_files.extend(aten_ufunc_generated_cpu_kernel_sources())
393*da0073e9SAndroid Build Coastguard Worker    if "CUDA" in enabled_backends:
394*da0073e9SAndroid Build Coastguard Worker        # Cannot unconditionally include this, because in the Edge selective
395*da0073e9SAndroid Build Coastguard Worker        # build CUDA is not enabled and thus the ufunc codegen for CUDA gets
396*da0073e9SAndroid Build Coastguard Worker        # skipped
397*da0073e9SAndroid Build Coastguard Worker        src_files.extend(aten_ufunc_generated_cuda_sources())
398*da0073e9SAndroid Build Coastguard Worker
399*da0073e9SAndroid Build Coastguard Worker    res = {}
400*da0073e9SAndroid Build Coastguard Worker    for file_name in src_files:
401*da0073e9SAndroid Build Coastguard Worker        res[file_name] = [file_name]
402*da0073e9SAndroid Build Coastguard Worker    return res
403*da0073e9SAndroid Build Coastguard Worker
404*da0073e9SAndroid Build Coastguard Workerdef get_aten_derived_type_src_rules(aten_rule_name, enabled_backends):
405*da0073e9SAndroid Build Coastguard Worker    return [
406*da0073e9SAndroid Build Coastguard Worker        ":{}[{}]".format(aten_rule_name, "Register" + backend + ".cpp")
407*da0073e9SAndroid Build Coastguard Worker        for backend in enabled_backends
408*da0073e9SAndroid Build Coastguard Worker    ]
409*da0073e9SAndroid Build Coastguard Worker
410*da0073e9SAndroid Build Coastguard Workerdef get_aten_selective_cpp_rules(aten_rule_name, enabled_backends):
411*da0073e9SAndroid Build Coastguard Worker    return [
412*da0073e9SAndroid Build Coastguard Worker        ":{}[{}]".format(aten_rule_name, f)
413*da0073e9SAndroid Build Coastguard Worker        for f in ["RegisterCompositeImplicitAutograd.cpp", "RegisterCompositeImplicitAutogradNestedTensor.cpp", "RegisterCompositeExplicitAutograd.cpp", "RegisterCompositeExplicitAutogradNonFunctional.cpp", "RegisterSchema.cpp", "RegisterBackendSelect.cpp", "CompositeViewCopyKernels.cpp"]
414*da0073e9SAndroid Build Coastguard Worker    ] + get_aten_derived_type_src_rules(aten_rule_name, enabled_backends)
415*da0073e9SAndroid Build Coastguard Worker
416*da0073e9SAndroid Build Coastguard Workerdef get_aten_derived_type_srcs(enabled_backends):
417*da0073e9SAndroid Build Coastguard Worker    return [
418*da0073e9SAndroid Build Coastguard Worker        "Register" + derived_type + ".cpp"
419*da0073e9SAndroid Build Coastguard Worker        for derived_type in enabled_backends
420*da0073e9SAndroid Build Coastguard Worker    ] + [
421*da0073e9SAndroid Build Coastguard Worker        derived_type + "Functions.h"
422*da0073e9SAndroid Build Coastguard Worker        for derived_type in enabled_backends
423*da0073e9SAndroid Build Coastguard Worker        if derived_type in PT_BACKEND_HEADERS or derived_type in get_static_dispatch_backend()
424*da0073e9SAndroid Build Coastguard Worker    ] + [
425*da0073e9SAndroid Build Coastguard Worker        derived_type + "Functions_inl.h"
426*da0073e9SAndroid Build Coastguard Worker        for derived_type in enabled_backends
427*da0073e9SAndroid Build Coastguard Worker        if derived_type in PT_BACKEND_HEADERS or derived_type in get_static_dispatch_backend()
428*da0073e9SAndroid Build Coastguard Worker    ]
429*da0073e9SAndroid Build Coastguard Worker
430*da0073e9SAndroid Build Coastguard Workerdef gen_aten_files(
431*da0073e9SAndroid Build Coastguard Worker        name,
432*da0073e9SAndroid Build Coastguard Worker        extra_flags = {},
433*da0073e9SAndroid Build Coastguard Worker        visibility = [],
434*da0073e9SAndroid Build Coastguard Worker        compatible_with = [],
435*da0073e9SAndroid Build Coastguard Worker        apple_sdks = None):
436*da0073e9SAndroid Build Coastguard Worker    extra_params = []
437*da0073e9SAndroid Build Coastguard Worker    force_schema_registration = extra_flags.get("force_schema_registration", False)
438*da0073e9SAndroid Build Coastguard Worker    op_registration_allowlist = extra_flags.get("op_registration_allowlist", None)
439*da0073e9SAndroid Build Coastguard Worker    op_selection_yaml_path = extra_flags.get("op_selection_yaml_path", None)
440*da0073e9SAndroid Build Coastguard Worker    enabled_backends = extra_flags.get("enabled_backends", None)
441*da0073e9SAndroid Build Coastguard Worker    static_dispatch_backend = extra_flags.get("static_dispatch_backend", None)
442*da0073e9SAndroid Build Coastguard Worker
443*da0073e9SAndroid Build Coastguard Worker    if force_schema_registration:
444*da0073e9SAndroid Build Coastguard Worker        extra_params.append("--force_schema_registration")
445*da0073e9SAndroid Build Coastguard Worker    if op_registration_allowlist != None and is_string(op_registration_allowlist):
446*da0073e9SAndroid Build Coastguard Worker        extra_params.append("--op_registration_whitelist")
447*da0073e9SAndroid Build Coastguard Worker        extra_params.append(op_registration_allowlist)
448*da0073e9SAndroid Build Coastguard Worker    if op_selection_yaml_path != None and is_string(op_selection_yaml_path):
449*da0073e9SAndroid Build Coastguard Worker        extra_params.append("--op_selection_yaml_path")
450*da0073e9SAndroid Build Coastguard Worker        extra_params.append(op_selection_yaml_path)
451*da0073e9SAndroid Build Coastguard Worker    if enabled_backends != None and is_list(enabled_backends):
452*da0073e9SAndroid Build Coastguard Worker        extra_params.append("--backend_whitelist")
453*da0073e9SAndroid Build Coastguard Worker        extra_params.extend(enabled_backends)
454*da0073e9SAndroid Build Coastguard Worker    if _get_enable_lightweight_dispatch():
455*da0073e9SAndroid Build Coastguard Worker        extra_params.append("--skip_dispatcher_op_registration")
456*da0073e9SAndroid Build Coastguard Worker    if static_dispatch_backend:
457*da0073e9SAndroid Build Coastguard Worker        extra_params.append("--static_dispatch_backend")
458*da0073e9SAndroid Build Coastguard Worker        extra_params.extend(static_dispatch_backend)
459*da0073e9SAndroid Build Coastguard Worker        backends = static_dispatch_backend
460*da0073e9SAndroid Build Coastguard Worker    else:
461*da0073e9SAndroid Build Coastguard Worker        backends = enabled_backends
462*da0073e9SAndroid Build Coastguard Worker    fb_xplat_genrule(
463*da0073e9SAndroid Build Coastguard Worker        name = name,
464*da0073e9SAndroid Build Coastguard Worker        default_outs = ["."],
465*da0073e9SAndroid Build Coastguard Worker        outs = get_aten_generated_files(backends),
466*da0073e9SAndroid Build Coastguard Worker        cmd = "$(exe {}torchgen:gen) ".format(ROOT_PATH) + " ".join([
467*da0073e9SAndroid Build Coastguard Worker            "--source-path $(location {}:aten_src_path)/aten/src/ATen".format(ROOT),
468*da0073e9SAndroid Build Coastguard Worker            "--install_dir $OUT",
469*da0073e9SAndroid Build Coastguard Worker            "--aoti_install_dir $OUT/torch/csrc/inductor/aoti_torch/generated"
470*da0073e9SAndroid Build Coastguard Worker        ] + extra_params),
471*da0073e9SAndroid Build Coastguard Worker        visibility = visibility,
472*da0073e9SAndroid Build Coastguard Worker        compatible_with = compatible_with,
473*da0073e9SAndroid Build Coastguard Worker        apple_sdks = apple_sdks,
474*da0073e9SAndroid Build Coastguard Worker    )
475*da0073e9SAndroid Build Coastguard Worker
476*da0073e9SAndroid Build Coastguard Workerdef gen_aten_unboxing_files(
477*da0073e9SAndroid Build Coastguard Worker        genrule_name,
478*da0073e9SAndroid Build Coastguard Worker        extra_flags = {}):
479*da0073e9SAndroid Build Coastguard Worker    extra_params = []
480*da0073e9SAndroid Build Coastguard Worker    op_selection_yaml_path = extra_flags.get("op_selection_yaml_path", None)
481*da0073e9SAndroid Build Coastguard Worker    op_registration_allowlist = extra_flags.get("op_registration_allowlist", None)
482*da0073e9SAndroid Build Coastguard Worker    if op_selection_yaml_path != None and is_string(op_selection_yaml_path):
483*da0073e9SAndroid Build Coastguard Worker        extra_params.append("--op_selection_yaml_path")
484*da0073e9SAndroid Build Coastguard Worker        extra_params.append(op_selection_yaml_path)
485*da0073e9SAndroid Build Coastguard Worker    if op_registration_allowlist != None and is_string(op_registration_allowlist):
486*da0073e9SAndroid Build Coastguard Worker        extra_params.append("--op_registration_allowlist")
487*da0073e9SAndroid Build Coastguard Worker        extra_params.append(op_registration_allowlist)
488*da0073e9SAndroid Build Coastguard Worker
489*da0073e9SAndroid Build Coastguard Worker    fb_xplat_genrule(
490*da0073e9SAndroid Build Coastguard Worker        name = genrule_name,
491*da0073e9SAndroid Build Coastguard Worker        default_outs = ["."],
492*da0073e9SAndroid Build Coastguard Worker        outs = get_unboxing_generated_files(),
493*da0073e9SAndroid Build Coastguard Worker        cmd = "$(exe {}tools:gen_unboxing_bin) ".format(ROOT_PATH) + " ".join([
494*da0073e9SAndroid Build Coastguard Worker            "--source-path $(location {}:aten_src_path)/aten/src/ATen".format(ROOT),
495*da0073e9SAndroid Build Coastguard Worker            "--install_dir $OUT",
496*da0073e9SAndroid Build Coastguard Worker        ] + extra_params),
497*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
498*da0073e9SAndroid Build Coastguard Worker    )
499*da0073e9SAndroid Build Coastguard Worker
500*da0073e9SAndroid Build Coastguard Workerdef copy_template_registration_files(name, apple_sdks = None):
501*da0073e9SAndroid Build Coastguard Worker    cmd = []
502*da0073e9SAndroid Build Coastguard Worker    cmd_exe = []
503*da0073e9SAndroid Build Coastguard Worker
504*da0073e9SAndroid Build Coastguard Worker    template_source_dict = get_template_source_dict()
505*da0073e9SAndroid Build Coastguard Worker
506*da0073e9SAndroid Build Coastguard Worker    # Ideally, we would run one copy command for a single source directory along
507*da0073e9SAndroid Build Coastguard Worker    # with all its child directories, but it's somewhat hard to know if a directory
508*da0073e9SAndroid Build Coastguard Worker    # is a child of another just bu looking at the metadata (directory relative
509*da0073e9SAndroid Build Coastguard Worker    # path) that we currently have since 1 directory could look like a parent of
510*da0073e9SAndroid Build Coastguard Worker    # another and yet come from a different filegroup() rule.
511*da0073e9SAndroid Build Coastguard Worker    #
512*da0073e9SAndroid Build Coastguard Worker    for (path_prefix, file_paths) in template_source_dict.items():
513*da0073e9SAndroid Build Coastguard Worker        cmd.append("mkdir -p $OUT/{}".format(path_prefix))
514*da0073e9SAndroid Build Coastguard Worker        cmd_exe.append("md $OUT/{}".format(path_prefix))
515*da0073e9SAndroid Build Coastguard Worker
516*da0073e9SAndroid Build Coastguard Worker        # Adding *.cpp is a workaround to prevent cp from thrown an error when it
517*da0073e9SAndroid Build Coastguard Worker        # encounters a directory (since -r was not specified). If files with an
518*da0073e9SAndroid Build Coastguard Worker        # extension other than .cpp need to be copied, then the command below
519*da0073e9SAndroid Build Coastguard Worker        # will not work and will need to be updated.
520*da0073e9SAndroid Build Coastguard Worker        #
521*da0073e9SAndroid Build Coastguard Worker        cmd.append("cp -f $(location {0}:templated_selective_build_srcs)/{1}/*.cpp $OUT/{1}/".format(ROOT, path_prefix))
522*da0073e9SAndroid Build Coastguard Worker        cmd_exe.append("robocopy /E $(location {0}:templated_selective_build_srcs)/{1} $OUT/{1}".format(ROOT, path_prefix))
523*da0073e9SAndroid Build Coastguard Worker
524*da0073e9SAndroid Build Coastguard Worker    if NOT_OSS:
525*da0073e9SAndroid Build Coastguard Worker        for file_path in TEMPLATE_MASKRCNN_SOURCE_LIST:
526*da0073e9SAndroid Build Coastguard Worker            maskrcnn_file = "$(location //xplat/caffe2/fb/custom_ops/maskrcnn:templated_selective_build_srcs)/" + file_path
527*da0073e9SAndroid Build Coastguard Worker            cmd.append("cp -f " + maskrcnn_file + " $OUT")
528*da0073e9SAndroid Build Coastguard Worker            cmd_exe.append("copy " + maskrcnn_file + " $OUT")
529*da0073e9SAndroid Build Coastguard Worker
530*da0073e9SAndroid Build Coastguard Worker    cmd.append("mkdir -p $OUT/aten/src/ATen")
531*da0073e9SAndroid Build Coastguard Worker    cmd_exe.append("md $OUT/aten/src/ATen")
532*da0073e9SAndroid Build Coastguard Worker
533*da0073e9SAndroid Build Coastguard Worker    # NB: CUDA is skipped here because this is selective build and CUDA is not
534*da0073e9SAndroid Build Coastguard Worker    # supported for selective build
535*da0073e9SAndroid Build Coastguard Worker    for ufunc_file in aten_ufunc_generated_all_cpu_sources("$(location " + ROOT + ":gen_aten[{}])"):
536*da0073e9SAndroid Build Coastguard Worker        cmd.append("cp -f " + ufunc_file + " $OUT/aten/src/ATen")
537*da0073e9SAndroid Build Coastguard Worker        cmd_exe.append("copy " + ufunc_file + " $OUT/aten/src/ATen")
538*da0073e9SAndroid Build Coastguard Worker
539*da0073e9SAndroid Build Coastguard Worker    if NOT_OSS:
540*da0073e9SAndroid Build Coastguard Worker        pvd_batch_box_cox_file = "$(location //xplat/caffe2/fb/custom_ops/batch_box_cox:templated_selective_build_srcs)/register_batch_box_cox_ops.cpp"
541*da0073e9SAndroid Build Coastguard Worker        cmd.append("cp -f " + pvd_batch_box_cox_file + " $OUT")
542*da0073e9SAndroid Build Coastguard Worker        cmd_exe.append("copy " + pvd_batch_box_cox_file + " $OUT")
543*da0073e9SAndroid Build Coastguard Worker
544*da0073e9SAndroid Build Coastguard Worker    fb_xplat_genrule(
545*da0073e9SAndroid Build Coastguard Worker        name = name,
546*da0073e9SAndroid Build Coastguard Worker        cmd = " && ".join(cmd),
547*da0073e9SAndroid Build Coastguard Worker        cmd_exe = "@powershell -Command " + ("; ".join(cmd_exe)),
548*da0073e9SAndroid Build Coastguard Worker        outs = get_template_registration_files_outs(IS_OSS),
549*da0073e9SAndroid Build Coastguard Worker        default_outs = ["."],
550*da0073e9SAndroid Build Coastguard Worker        apple_sdks = apple_sdks,
551*da0073e9SAndroid Build Coastguard Worker    )
552*da0073e9SAndroid Build Coastguard Worker
553*da0073e9SAndroid Build Coastguard Workerdef get_feature_tracer_source_list():
554*da0073e9SAndroid Build Coastguard Worker    """
555*da0073e9SAndroid Build Coastguard Worker    Return just the Feature specific handlers used in the model tracer.
556*da0073e9SAndroid Build Coastguard Worker    """
557*da0073e9SAndroid Build Coastguard Worker    sources = []
558*da0073e9SAndroid Build Coastguard Worker    for s in torch_mobile_tracer_sources:
559*da0073e9SAndroid Build Coastguard Worker        if s.endswith("Tracer.cpp"):
560*da0073e9SAndroid Build Coastguard Worker            sources.append(s)
561*da0073e9SAndroid Build Coastguard Worker    return sources
562*da0073e9SAndroid Build Coastguard Worker
563*da0073e9SAndroid Build Coastguard Workerdef pt_operator_query_codegen(
564*da0073e9SAndroid Build Coastguard Worker        name,
565*da0073e9SAndroid Build Coastguard Worker        deps = [],
566*da0073e9SAndroid Build Coastguard Worker        train = False,
567*da0073e9SAndroid Build Coastguard Worker        enforce_traced_op_list = False,
568*da0073e9SAndroid Build Coastguard Worker        pt_allow_forced_schema_registration = True,
569*da0073e9SAndroid Build Coastguard Worker        compatible_with = [],
570*da0073e9SAndroid Build Coastguard Worker        apple_sdks = None):
571*da0073e9SAndroid Build Coastguard Worker    oplist_dir_name = name + "_pt_oplist"
572*da0073e9SAndroid Build Coastguard Worker
573*da0073e9SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT
574*da0073e9SAndroid Build Coastguard Worker    fb_native.genrule(
575*da0073e9SAndroid Build Coastguard Worker        name = oplist_dir_name,
576*da0073e9SAndroid Build Coastguard Worker        cmd = ("$(exe {}tools:gen_oplist) ".format(ROOT_PATH) +
577*da0073e9SAndroid Build Coastguard Worker               "--model_file_list_path $(@query_outputs 'attrfilter(labels, pt_operator_library, deps(set({deps})))') " +
578*da0073e9SAndroid Build Coastguard Worker               ("" if enforce_traced_op_list else "--allow_include_all_overloads ") +
579*da0073e9SAndroid Build Coastguard Worker               "--output_dir $OUT ").format(deps = " ".join(["\"{}\"".format(d) for d in deps])),
580*da0073e9SAndroid Build Coastguard Worker        outs = get_gen_oplist_outs(),
581*da0073e9SAndroid Build Coastguard Worker        default_outs = ["."],
582*da0073e9SAndroid Build Coastguard Worker        compatible_with = compatible_with,
583*da0073e9SAndroid Build Coastguard Worker    )
584*da0073e9SAndroid Build Coastguard Worker
585*da0073e9SAndroid Build Coastguard Worker    # Aten files
586*da0073e9SAndroid Build Coastguard Worker    aten_genrule = name + "_aten"
587*da0073e9SAndroid Build Coastguard Worker    extra_flags = {
588*da0073e9SAndroid Build Coastguard Worker        "enabled_backends": USED_PT_BACKENDS,
589*da0073e9SAndroid Build Coastguard Worker        "op_selection_yaml_path": "$(location :{}[selected_operators.yaml])".format(oplist_dir_name),
590*da0073e9SAndroid Build Coastguard Worker    }
591*da0073e9SAndroid Build Coastguard Worker
592*da0073e9SAndroid Build Coastguard Worker    if train and pt_allow_forced_schema_registration:
593*da0073e9SAndroid Build Coastguard Worker        extra_flags["force_schema_registration"] = True
594*da0073e9SAndroid Build Coastguard Worker
595*da0073e9SAndroid Build Coastguard Worker    unboxing_genrule = name + "_unboxing"
596*da0073e9SAndroid Build Coastguard Worker    if _get_enable_lightweight_dispatch():
597*da0073e9SAndroid Build Coastguard Worker        gen_aten_unboxing_files(
598*da0073e9SAndroid Build Coastguard Worker            unboxing_genrule,
599*da0073e9SAndroid Build Coastguard Worker            extra_flags = extra_flags,
600*da0073e9SAndroid Build Coastguard Worker        )
601*da0073e9SAndroid Build Coastguard Worker
602*da0073e9SAndroid Build Coastguard Worker    static_dispatch_backend = get_static_dispatch_backend()
603*da0073e9SAndroid Build Coastguard Worker    if static_dispatch_backend:
604*da0073e9SAndroid Build Coastguard Worker        extra_flags["static_dispatch_backend"] = static_dispatch_backend
605*da0073e9SAndroid Build Coastguard Worker
606*da0073e9SAndroid Build Coastguard Worker    gen_aten_files(
607*da0073e9SAndroid Build Coastguard Worker        aten_genrule,
608*da0073e9SAndroid Build Coastguard Worker        extra_flags = extra_flags,
609*da0073e9SAndroid Build Coastguard Worker        compatible_with = compatible_with,
610*da0073e9SAndroid Build Coastguard Worker        apple_sdks = apple_sdks,
611*da0073e9SAndroid Build Coastguard Worker    )
612*da0073e9SAndroid Build Coastguard Worker
613*da0073e9SAndroid Build Coastguard Worker    # unboxing_wrappers files
614*da0073e9SAndroid Build Coastguard Worker    extra_params = [
615*da0073e9SAndroid Build Coastguard Worker        "--operators_yaml_path",
616*da0073e9SAndroid Build Coastguard Worker        "$(location :" + oplist_dir_name + "[selected_operators.yaml])",
617*da0073e9SAndroid Build Coastguard Worker    ]
618*da0073e9SAndroid Build Coastguard Worker    unboxing_and_autograd_genrule = name + "_unboxing_and_autograd"
619*da0073e9SAndroid Build Coastguard Worker    gen_aten_libtorch_files(
620*da0073e9SAndroid Build Coastguard Worker        unboxing_and_autograd_genrule,
621*da0073e9SAndroid Build Coastguard Worker        extra_params,
622*da0073e9SAndroid Build Coastguard Worker        compatible_with,
623*da0073e9SAndroid Build Coastguard Worker        apple_sdks = apple_sdks,
624*da0073e9SAndroid Build Coastguard Worker    )
625*da0073e9SAndroid Build Coastguard Worker
626*da0073e9SAndroid Build Coastguard Worker    # Template runtime files (prim ops, etc)
627*da0073e9SAndroid Build Coastguard Worker    template_registration_genrule = name + "_template_registration"
628*da0073e9SAndroid Build Coastguard Worker    copy_template_registration_files(template_registration_genrule, apple_sdks = apple_sdks)
629*da0073e9SAndroid Build Coastguard Worker
630*da0073e9SAndroid Build Coastguard Worker    # Files needed for metal
631*da0073e9SAndroid Build Coastguard Worker    if NOT_OSS:
632*da0073e9SAndroid Build Coastguard Worker        metal_genrule = name + "_metal"
633*da0073e9SAndroid Build Coastguard Worker        copy_metal(metal_genrule, apple_sdks = apple_sdks)
634*da0073e9SAndroid Build Coastguard Worker
635*da0073e9SAndroid Build Coastguard Worker    srcs = get_aten_selective_cpp_rules(
636*da0073e9SAndroid Build Coastguard Worker        aten_genrule,
637*da0073e9SAndroid Build Coastguard Worker        static_dispatch_backend if static_dispatch_backend else USED_PT_BACKENDS,
638*da0073e9SAndroid Build Coastguard Worker    ) + get_template_registration_file_rules(template_registration_genrule, IS_OSS) + ([
639*da0073e9SAndroid Build Coastguard Worker        ":{}[autograd/generated/VariableType_0.cpp]".format(unboxing_and_autograd_genrule),
640*da0073e9SAndroid Build Coastguard Worker        ":{}[autograd/generated/VariableType_1.cpp]".format(unboxing_and_autograd_genrule),
641*da0073e9SAndroid Build Coastguard Worker        ":{}[autograd/generated/VariableType_2.cpp]".format(unboxing_and_autograd_genrule),
642*da0073e9SAndroid Build Coastguard Worker        ":{}[autograd/generated/VariableType_3.cpp]".format(unboxing_and_autograd_genrule),
643*da0073e9SAndroid Build Coastguard Worker        ":{}[autograd/generated/VariableType_4.cpp]".format(unboxing_and_autograd_genrule),
644*da0073e9SAndroid Build Coastguard Worker        ":{}[autograd/generated/ADInplaceOrViewType_0.cpp]".format(unboxing_and_autograd_genrule),
645*da0073e9SAndroid Build Coastguard Worker        ":{}[autograd/generated/ADInplaceOrViewType_1.cpp]".format(unboxing_and_autograd_genrule),
646*da0073e9SAndroid Build Coastguard Worker    ] if train else []) + ([
647*da0073e9SAndroid Build Coastguard Worker        ":{}[SupportedMobileModelsRegistration.cpp]".format(oplist_dir_name),
648*da0073e9SAndroid Build Coastguard Worker    ] if NOT_OSS else [])
649*da0073e9SAndroid Build Coastguard Worker
650*da0073e9SAndroid Build Coastguard Worker    headers = {
651*da0073e9SAndroid Build Coastguard Worker        "selected_mobile_ops.h": ":{}[selected_mobile_ops.h]".format(oplist_dir_name),
652*da0073e9SAndroid Build Coastguard Worker    }
653*da0073e9SAndroid Build Coastguard Worker
654*da0073e9SAndroid Build Coastguard Worker    if _get_enable_lightweight_dispatch():
655*da0073e9SAndroid Build Coastguard Worker        srcs.extend([
656*da0073e9SAndroid Build Coastguard Worker            ":{}[UnboxingFunctions_0.cpp]".format(unboxing_genrule),
657*da0073e9SAndroid Build Coastguard Worker            ":{}[UnboxingFunctions_1.cpp]".format(unboxing_genrule),
658*da0073e9SAndroid Build Coastguard Worker            ":{}[UnboxingFunctions_2.cpp]".format(unboxing_genrule),
659*da0073e9SAndroid Build Coastguard Worker            ":{}[UnboxingFunctions_3.cpp]".format(unboxing_genrule),
660*da0073e9SAndroid Build Coastguard Worker            ":{}[UnboxingFunctions_4.cpp]".format(unboxing_genrule),
661*da0073e9SAndroid Build Coastguard Worker            ":{}[RegisterCodegenUnboxedKernels_0.cpp]".format(unboxing_genrule),
662*da0073e9SAndroid Build Coastguard Worker            ":{}[RegisterCodegenUnboxedKernels_1.cpp]".format(unboxing_genrule),
663*da0073e9SAndroid Build Coastguard Worker            ":{}[RegisterCodegenUnboxedKernels_2.cpp]".format(unboxing_genrule),
664*da0073e9SAndroid Build Coastguard Worker            ":{}[RegisterCodegenUnboxedKernels_3.cpp]".format(unboxing_genrule),
665*da0073e9SAndroid Build Coastguard Worker            ":{}[RegisterCodegenUnboxedKernels_4.cpp]".format(unboxing_genrule),
666*da0073e9SAndroid Build Coastguard Worker            ":{}[RegisterCodegenUnboxedKernels_5.cpp]".format(unboxing_genrule),
667*da0073e9SAndroid Build Coastguard Worker            ":{}[RegisterCodegenUnboxedKernels_6.cpp]".format(unboxing_genrule),
668*da0073e9SAndroid Build Coastguard Worker            ":{}[RegisterCodegenUnboxedKernels_7.cpp]".format(unboxing_genrule),
669*da0073e9SAndroid Build Coastguard Worker            ":{}[RegisterCodegenUnboxedKernels_8.cpp]".format(unboxing_genrule),
670*da0073e9SAndroid Build Coastguard Worker            ":{}[RegisterCodegenUnboxedKernels_9.cpp]".format(unboxing_genrule),
671*da0073e9SAndroid Build Coastguard Worker        ])
672*da0073e9SAndroid Build Coastguard Worker        headers["UnboxingFunctions.h"] = ":{}[UnboxingFunctions.h]".format(unboxing_genrule)
673*da0073e9SAndroid Build Coastguard Worker    return {"headers": headers, "srcs": srcs}
674*da0073e9SAndroid Build Coastguard Worker
675*da0073e9SAndroid Build Coastguard Workerdef gen_aten_libtorch_files(name, extra_params = [], compatible_with = [], apple_sdks = None):
676*da0073e9SAndroid Build Coastguard Worker    fb_xplat_genrule(
677*da0073e9SAndroid Build Coastguard Worker        name = name,
678*da0073e9SAndroid Build Coastguard Worker        outs = get_generate_code_bin_outs(),
679*da0073e9SAndroid Build Coastguard Worker        default_outs = ["."],
680*da0073e9SAndroid Build Coastguard Worker        bash = "mkdir -p tools && " +
681*da0073e9SAndroid Build Coastguard Worker               "$(exe {}tools:generate_code_bin) ".format(ROOT_PATH) + " ".join(
682*da0073e9SAndroid Build Coastguard Worker            # Mobile build only needs libtorch - skip python bindings for now, except
683*da0073e9SAndroid Build Coastguard Worker            # for ovrsource, which needs Python bindings.
684*da0073e9SAndroid Build Coastguard Worker            (["--subset libtorch"] if not is_arvr_mode() else []) + [
685*da0073e9SAndroid Build Coastguard Worker                "--native-functions-path $(location {}:aten_src_path)/aten/src/ATen/native/native_functions.yaml".format(ROOT),
686*da0073e9SAndroid Build Coastguard Worker                "--tags-path $(location {}:aten_src_path)/aten/src/ATen/native/tags.yaml".format(ROOT),
687*da0073e9SAndroid Build Coastguard Worker                "--install_dir $OUT",
688*da0073e9SAndroid Build Coastguard Worker            ] + extra_params,
689*da0073e9SAndroid Build Coastguard Worker        ),
690*da0073e9SAndroid Build Coastguard Worker        cmd_exe = "@powershell -Command New-Item -Path tools -ItemType Directory -Force; " +
691*da0073e9SAndroid Build Coastguard Worker                  "$(exe {}tools:generate_code_bin) ".format(ROOT_PATH) + " ".join(
692*da0073e9SAndroid Build Coastguard Worker            # Mobile build only needs libtorch - skip python bindings for now, except
693*da0073e9SAndroid Build Coastguard Worker            # for ovrsource, which needs Python bindings.
694*da0073e9SAndroid Build Coastguard Worker            (["--subset libtorch"] if not is_arvr_mode() else []) + [
695*da0073e9SAndroid Build Coastguard Worker                "--native-functions-path $(location {}:aten_src_path)/aten/src/ATen/native/native_functions.yaml".format(ROOT),
696*da0073e9SAndroid Build Coastguard Worker                "--tags-path $(location {}:aten_src_path)/aten/src/ATen/native/tags.yaml".format(ROOT),
697*da0073e9SAndroid Build Coastguard Worker                "--install_dir $OUT",
698*da0073e9SAndroid Build Coastguard Worker            ] + extra_params,
699*da0073e9SAndroid Build Coastguard Worker        ),
700*da0073e9SAndroid Build Coastguard Worker        compatible_with = compatible_with,
701*da0073e9SAndroid Build Coastguard Worker        apple_sdks = apple_sdks,
702*da0073e9SAndroid Build Coastguard Worker    )
703*da0073e9SAndroid Build Coastguard Worker
704*da0073e9SAndroid Build Coastguard Workerdef vulkan_spv_shader_library(name, spv_filegroup):
705*da0073e9SAndroid Build Coastguard Worker    genrule_cmd = [
706*da0073e9SAndroid Build Coastguard Worker        "$(exe //xplat/caffe2/tools:gen_aten_vulkan_spv_bin)",
707*da0073e9SAndroid Build Coastguard Worker        "--glsl-paths $(location {})".format(spv_filegroup),
708*da0073e9SAndroid Build Coastguard Worker        "--output-path $OUT --env FLOAT_IMAGE_FORMAT={}".format(get_glsl_image_format()),
709*da0073e9SAndroid Build Coastguard Worker        "--glslc-path=$(exe //xplat/caffe2/fb/vulkan/dotslash:glslc)",
710*da0073e9SAndroid Build Coastguard Worker        "--tmp-dir-path=$TMP",
711*da0073e9SAndroid Build Coastguard Worker    ]
712*da0073e9SAndroid Build Coastguard Worker
713*da0073e9SAndroid Build Coastguard Worker    genrule_name = "gen_{}_cpp".format(name)
714*da0073e9SAndroid Build Coastguard Worker    fb_xplat_genrule(
715*da0073e9SAndroid Build Coastguard Worker        name = "gen_{}_cpp".format(name),
716*da0073e9SAndroid Build Coastguard Worker        outs = {
717*da0073e9SAndroid Build Coastguard Worker            "{}.cpp".format(name): ["spv.cpp"],
718*da0073e9SAndroid Build Coastguard Worker        },
719*da0073e9SAndroid Build Coastguard Worker        cmd = " ".join(genrule_cmd),
720*da0073e9SAndroid Build Coastguard Worker        default_outs = ["."],
721*da0073e9SAndroid Build Coastguard Worker        labels = ["uses_dotslash"],
722*da0073e9SAndroid Build Coastguard Worker    )
723*da0073e9SAndroid Build Coastguard Worker
724*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
725*da0073e9SAndroid Build Coastguard Worker        name = name,
726*da0073e9SAndroid Build Coastguard Worker        srcs = [
727*da0073e9SAndroid Build Coastguard Worker            ":{}[{}.cpp]".format(genrule_name, name),
728*da0073e9SAndroid Build Coastguard Worker        ],
729*da0073e9SAndroid Build Coastguard Worker        # Static initialization is used to register shaders to the global shader registry,
730*da0073e9SAndroid Build Coastguard Worker        # therefore link_whole must be True to make sure unused symbols are not discarded.
731*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT: Avoid `link_whole=True`
732*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
733*da0073e9SAndroid Build Coastguard Worker        # Define a soname that can be used for dynamic loading in Java, Python, etc.
734*da0073e9SAndroid Build Coastguard Worker        soname = "lib{}.$(ext)".format(name),
735*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
736*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
737*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2:torch_vulkan_api",
738*da0073e9SAndroid Build Coastguard Worker        ],
739*da0073e9SAndroid Build Coastguard Worker    )
740*da0073e9SAndroid Build Coastguard Worker
741*da0073e9SAndroid Build Coastguard Workerdef copy_metal(name, apple_sdks = None):
742*da0073e9SAndroid Build Coastguard Worker    cmd = []
743*da0073e9SAndroid Build Coastguard Worker    cmd_exe = []
744*da0073e9SAndroid Build Coastguard Worker    metal_source_dict = get_metal_source_dict()
745*da0073e9SAndroid Build Coastguard Worker
746*da0073e9SAndroid Build Coastguard Worker    # Copy all source files over to bring them into the per app build
747*da0073e9SAndroid Build Coastguard Worker    for path_prefix in sorted(metal_source_dict.keys()):
748*da0073e9SAndroid Build Coastguard Worker        cmd.append("mkdir -p $OUT/{}".format(path_prefix))
749*da0073e9SAndroid Build Coastguard Worker        cmd_exe.append("mkdir -Force $OUT/{0}".format(path_prefix))
750*da0073e9SAndroid Build Coastguard Worker
751*da0073e9SAndroid Build Coastguard Worker        # Not every directory has a mm or cpp file so '2>/dev/null || :' are tricks to suppress the error messages and codes.
752*da0073e9SAndroid Build Coastguard Worker        cmd.append("cp -f {0}/{1}/*.mm $OUT/{1}/ 2>/dev/null || :".format("$(location //xplat/caffe2:metal_build_srcs)", path_prefix))
753*da0073e9SAndroid Build Coastguard Worker        cmd.append("cp -f {0}/{1}/*.cpp $OUT/{1}/ 2>/dev/null || :".format("$(location //xplat/caffe2:metal_build_srcs)", path_prefix))
754*da0073e9SAndroid Build Coastguard Worker
755*da0073e9SAndroid Build Coastguard Worker        # Robocopy has a default success code of 1 which buck treats as failure so the echo masks that problem
756*da0073e9SAndroid Build Coastguard Worker        cmd_exe.append("(robocopy /E /NFL /NDL /NJH /NJS {0}/{1} $OUT/{1}) || ECHO robocopy failed".format("$(location //xplat/caffe2:metal_build_srcs)", path_prefix))
757*da0073e9SAndroid Build Coastguard Worker
758*da0073e9SAndroid Build Coastguard Worker    # Metal custom ops currently have to be brought into selective build because they directly reference metal ops instead of
759*da0073e9SAndroid Build Coastguard Worker    # going through the dispatcher. There is some weird issues with the genrule and these files locations on windows though, so
760*da0073e9SAndroid Build Coastguard Worker    # for now we simply skip building them for windows where they very likely arent needed anyway.
761*da0073e9SAndroid Build Coastguard Worker    # Metal MaskRCNN custom op
762*da0073e9SAndroid Build Coastguard Worker    for full_path in METAL_MASKRCNN_SOURCE_LIST:
763*da0073e9SAndroid Build Coastguard Worker        path_prefix = paths.dirname(full_path)
764*da0073e9SAndroid Build Coastguard Worker        cmd.append("mkdir -p $OUT/{}".format(path_prefix))
765*da0073e9SAndroid Build Coastguard Worker        cmd.append("cp -f {0}/{1}/*.mm $OUT/{1}/ 2>/dev/null || :".format("$(location //xplat/caffe2/fb/metal:metal_maskrcnn_sources)", path_prefix))
766*da0073e9SAndroid Build Coastguard Worker
767*da0073e9SAndroid Build Coastguard Worker    # Unet Metal Prepack Custom op
768*da0073e9SAndroid Build Coastguard Worker    unet_metal_prepack_file = "$(location //xplat/caffe2/fb/custom_ops/unet_metal_prepack:unet_metal_prepack_sources)"
769*da0073e9SAndroid Build Coastguard Worker    cmd.append("cp -f " + unet_metal_prepack_file + "/unet_metal_prepack.cpp" + " $OUT")
770*da0073e9SAndroid Build Coastguard Worker    cmd.append("cp -f " + unet_metal_prepack_file + "/unet_metal_prepack.mm" + " $OUT")
771*da0073e9SAndroid Build Coastguard Worker
772*da0073e9SAndroid Build Coastguard Worker    fb_xplat_genrule(
773*da0073e9SAndroid Build Coastguard Worker        name = name,
774*da0073e9SAndroid Build Coastguard Worker        cmd = " && ".join(cmd),
775*da0073e9SAndroid Build Coastguard Worker        cmd_exe = "@powershell -Command " + ("; ".join(cmd_exe)),
776*da0073e9SAndroid Build Coastguard Worker        # due to an obscure bug certain custom ops werent being copied correctly on windows. ARVR also sometimes builds android targets on windows,
777*da0073e9SAndroid Build Coastguard Worker        # so we just exclude those targets from being copied for those platforms (They end up uncompiled anyway).
778*da0073e9SAndroid Build Coastguard Worker        outs = select({
779*da0073e9SAndroid Build Coastguard Worker            "DEFAULT": get_metal_registration_files_outs(),
780*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:android": get_metal_registration_files_outs_windows(),
781*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:windows": get_metal_registration_files_outs_windows(),
782*da0073e9SAndroid Build Coastguard Worker        }),
783*da0073e9SAndroid Build Coastguard Worker        default_outs = ["."],
784*da0073e9SAndroid Build Coastguard Worker        apple_sdks = apple_sdks,
785*da0073e9SAndroid Build Coastguard Worker    )
786*da0073e9SAndroid Build Coastguard Worker
787*da0073e9SAndroid Build Coastguard Workerdef get_pt_operator_registry_dict(
788*da0073e9SAndroid Build Coastguard Worker        name,
789*da0073e9SAndroid Build Coastguard Worker        deps = [],
790*da0073e9SAndroid Build Coastguard Worker        train = False,
791*da0073e9SAndroid Build Coastguard Worker        labels = [],
792*da0073e9SAndroid Build Coastguard Worker        env = [],
793*da0073e9SAndroid Build Coastguard Worker        template_select = True,
794*da0073e9SAndroid Build Coastguard Worker        enforce_traced_op_list = False,
795*da0073e9SAndroid Build Coastguard Worker        pt_allow_forced_schema_registration = True,
796*da0073e9SAndroid Build Coastguard Worker        enable_flatbuffer = False,
797*da0073e9SAndroid Build Coastguard Worker        **kwargs):
798*da0073e9SAndroid Build Coastguard Worker    code_gen_files = pt_operator_query_codegen(
799*da0073e9SAndroid Build Coastguard Worker        name,
800*da0073e9SAndroid Build Coastguard Worker        deps = deps,
801*da0073e9SAndroid Build Coastguard Worker        train = train,
802*da0073e9SAndroid Build Coastguard Worker        enforce_traced_op_list = enforce_traced_op_list,
803*da0073e9SAndroid Build Coastguard Worker        pt_allow_forced_schema_registration = pt_allow_forced_schema_registration,
804*da0073e9SAndroid Build Coastguard Worker        compatible_with = kwargs.get("compatible_with", []),
805*da0073e9SAndroid Build Coastguard Worker        apple_sdks = kwargs.get("apple_sdks"),
806*da0073e9SAndroid Build Coastguard Worker    )
807*da0073e9SAndroid Build Coastguard Worker
808*da0073e9SAndroid Build Coastguard Worker    return dict(
809*da0073e9SAndroid Build Coastguard Worker        srcs = code_gen_files["srcs"],
810*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
811*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
812*da0073e9SAndroid Build Coastguard Worker        ],
813*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
814*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
815*da0073e9SAndroid Build Coastguard Worker        soname = "libtorch-code-gen.$(ext)",
816*da0073e9SAndroid Build Coastguard Worker        header_namespace = "ATen",
817*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_aten_compiler_flags(),
818*da0073e9SAndroid Build Coastguard Worker        exported_headers = code_gen_files["headers"],
819*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_aten_preprocessor_flags() + (["-DTEMPLATE_SELECTIVE_BUILD"] if template_select else []),
820*da0073e9SAndroid Build Coastguard Worker        headers = kwargs.pop("headers", []),
821*da0073e9SAndroid Build Coastguard Worker        labels = kwargs.pop("labels", []) + [
822*da0073e9SAndroid Build Coastguard Worker            # This library has multiple sources with the same file name
823*da0073e9SAndroid Build Coastguard Worker            # and does not work with Buck filegroup used in bad practices.
824*da0073e9SAndroid Build Coastguard Worker            # Opt out of the bad practices check with the below label.
825*da0073e9SAndroid Build Coastguard Worker            "bad_practices_ignore_override",
826*da0073e9SAndroid Build Coastguard Worker            "pt_operator_registry",
827*da0073e9SAndroid Build Coastguard Worker        ],
828*da0073e9SAndroid Build Coastguard Worker        deps = [
829*da0073e9SAndroid Build Coastguard Worker            # need absolute path here
830*da0073e9SAndroid Build Coastguard Worker            ROOT + ":torch_mobile_core",
831*da0073e9SAndroid Build Coastguard Worker            ROOT + ":aten_cpu",
832*da0073e9SAndroid Build Coastguard Worker            ROOT + ":aten_metal_prepack_header",
833*da0073e9SAndroid Build Coastguard Worker            third_party("glog"),
834*da0073e9SAndroid Build Coastguard Worker            C10,
835*da0073e9SAndroid Build Coastguard Worker        ] + ([ROOT + ":torch_mobile_train"] if train else []),
836*da0073e9SAndroid Build Coastguard Worker        **kwargs
837*da0073e9SAndroid Build Coastguard Worker    )
838*da0073e9SAndroid Build Coastguard Worker
839*da0073e9SAndroid Build Coastguard Worker# these targets are shared by internal and OSS BUCK
840*da0073e9SAndroid Build Coastguard Workerdef define_buck_targets(
841*da0073e9SAndroid Build Coastguard Worker        aten_default_args = dict(),
842*da0073e9SAndroid Build Coastguard Worker        pt_xplat_cxx_library = fb_xplat_cxx_library,
843*da0073e9SAndroid Build Coastguard Worker        c2_fbandroid_xplat_compiler_flags = [],
844*da0073e9SAndroid Build Coastguard Worker        labels = []):
845*da0073e9SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT
846*da0073e9SAndroid Build Coastguard Worker    fb_native.filegroup(
847*da0073e9SAndroid Build Coastguard Worker        name = "metal_build_srcs",
848*da0073e9SAndroid Build Coastguard Worker        srcs = glob(METAL_SOURCE_LIST),
849*da0073e9SAndroid Build Coastguard Worker        visibility = [
850*da0073e9SAndroid Build Coastguard Worker            "PUBLIC",
851*da0073e9SAndroid Build Coastguard Worker        ],
852*da0073e9SAndroid Build Coastguard Worker    )
853*da0073e9SAndroid Build Coastguard Worker
854*da0073e9SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT
855*da0073e9SAndroid Build Coastguard Worker    fb_native.filegroup(
856*da0073e9SAndroid Build Coastguard Worker        name = "templated_selective_build_srcs",
857*da0073e9SAndroid Build Coastguard Worker        # NB: no glob here, there are generated targets in this list!
858*da0073e9SAndroid Build Coastguard Worker        srcs = glob(TEMPLATE_SOURCE_LIST) + aten_ufunc_generated_all_cpu_sources(":gen_aten[{}]"),
859*da0073e9SAndroid Build Coastguard Worker        visibility = [
860*da0073e9SAndroid Build Coastguard Worker            "PUBLIC",
861*da0073e9SAndroid Build Coastguard Worker        ],
862*da0073e9SAndroid Build Coastguard Worker    )
863*da0073e9SAndroid Build Coastguard Worker
864*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
865*da0073e9SAndroid Build Coastguard Worker        name = "aten_header",
866*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
867*da0073e9SAndroid Build Coastguard Worker        exported_headers = subdir_glob([
868*da0073e9SAndroid Build Coastguard Worker            # ATen Core
869*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/core/**/*.h"),
870*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/ops/*.h"),
871*da0073e9SAndroid Build Coastguard Worker            # ATen Base
872*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/*.h"),
873*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/cpu/**/*.h"),
874*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/detail/*.h"),
875*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/functorch/**/*.h"),
876*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/quantized/*.h"),
877*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/vulkan/*.h"),
878*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/metal/*.h"),
879*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/nnapi/*.h"),
880*da0073e9SAndroid Build Coastguard Worker            # ATen Native
881*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/*.h"),
882*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/ao_sparse/quantized/cpu/*.h"),
883*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/cpu/**/*.h"),
884*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/sparse/*.h"),
885*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/nested/*.h"),
886*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/quantized/*.h"),
887*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/quantized/cpu/*.h"),
888*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/transformers/*.h"),
889*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/ufunc/*.h"),
890*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/utils/*.h"),
891*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/vulkan/ops/*.h"),
892*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/xnnpack/*.h"),
893*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/mps/*.h"),
894*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/mps/*.h"),
895*da0073e9SAndroid Build Coastguard Worker            # Remove the following after modifying codegen for mobile.
896*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/mkl/*.h"),
897*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/mkl/*.h"),
898*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/mkldnn/*.h"),
899*da0073e9SAndroid Build Coastguard Worker        ]),
900*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
901*da0073e9SAndroid Build Coastguard Worker        labels = labels,
902*da0073e9SAndroid Build Coastguard Worker    )
903*da0073e9SAndroid Build Coastguard Worker
904*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
905*da0073e9SAndroid Build Coastguard Worker        name = "aten_vulkan_header",
906*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
907*da0073e9SAndroid Build Coastguard Worker        exported_headers = subdir_glob([
908*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/vulkan/*.h"),
909*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/vulkan/ops/*.h"),
910*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/vulkan/*.h"),
911*da0073e9SAndroid Build Coastguard Worker        ]),
912*da0073e9SAndroid Build Coastguard Worker        labels = labels,
913*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
914*da0073e9SAndroid Build Coastguard Worker    )
915*da0073e9SAndroid Build Coastguard Worker
916*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
917*da0073e9SAndroid Build Coastguard Worker        name = "jit_core_headers",
918*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
919*da0073e9SAndroid Build Coastguard Worker        exported_headers = subdir_glob([("", x) for x in jit_core_headers]),
920*da0073e9SAndroid Build Coastguard Worker        labels = labels,
921*da0073e9SAndroid Build Coastguard Worker    )
922*da0073e9SAndroid Build Coastguard Worker
923*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
924*da0073e9SAndroid Build Coastguard Worker        name = "torch_headers",
925*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
926*da0073e9SAndroid Build Coastguard Worker        exported_headers = subdir_glob(
927*da0073e9SAndroid Build Coastguard Worker            [
928*da0073e9SAndroid Build Coastguard Worker                ("torch/csrc/api/include", "torch/**/*.h"),
929*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/**/*.h"),
930*da0073e9SAndroid Build Coastguard Worker                ("", "torch/script.h"),
931*da0073e9SAndroid Build Coastguard Worker                ("", "torch/library.h"),
932*da0073e9SAndroid Build Coastguard Worker                ("", "torch/custom_class.h"),
933*da0073e9SAndroid Build Coastguard Worker                ("", "torch/custom_class_detail.h"),
934*da0073e9SAndroid Build Coastguard Worker                # Add again due to namespace difference from aten_header.
935*da0073e9SAndroid Build Coastguard Worker                ("", "aten/src/ATen/*.h"),
936*da0073e9SAndroid Build Coastguard Worker                ("", "aten/src/ATen/functorch/**/*.h"),
937*da0073e9SAndroid Build Coastguard Worker                ("", "aten/src/ATen/quantized/*.h"),
938*da0073e9SAndroid Build Coastguard Worker            ],
939*da0073e9SAndroid Build Coastguard Worker            exclude = [
940*da0073e9SAndroid Build Coastguard Worker                # Don't need on mobile.
941*da0073e9SAndroid Build Coastguard Worker                "torch/csrc/Exceptions.h",
942*da0073e9SAndroid Build Coastguard Worker                "torch/csrc/python_headers.h",
943*da0073e9SAndroid Build Coastguard Worker                "torch/csrc/jit/serialization/mobile_bytecode_generated.h",
944*da0073e9SAndroid Build Coastguard Worker            ],
945*da0073e9SAndroid Build Coastguard Worker        ),
946*da0073e9SAndroid Build Coastguard Worker        labels = labels,
947*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
948*da0073e9SAndroid Build Coastguard Worker        deps = [
949*da0073e9SAndroid Build Coastguard Worker            ":generated-version-header",
950*da0073e9SAndroid Build Coastguard Worker        ],
951*da0073e9SAndroid Build Coastguard Worker    )
952*da0073e9SAndroid Build Coastguard Worker
953*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
954*da0073e9SAndroid Build Coastguard Worker        name = "aten_test_header",
955*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
956*da0073e9SAndroid Build Coastguard Worker        exported_headers = subdir_glob([
957*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/test/*.h"),
958*da0073e9SAndroid Build Coastguard Worker        ]),
959*da0073e9SAndroid Build Coastguard Worker    )
960*da0073e9SAndroid Build Coastguard Worker
961*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
962*da0073e9SAndroid Build Coastguard Worker        name = "aten_metal_prepack_header",
963*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
964*da0073e9SAndroid Build Coastguard Worker        exported_headers = subdir_glob([
965*da0073e9SAndroid Build Coastguard Worker            ("aten/src", "ATen/native/metal/MetalPrepackOpContext.h"),
966*da0073e9SAndroid Build Coastguard Worker        ]),
967*da0073e9SAndroid Build Coastguard Worker        labels = labels,
968*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
969*da0073e9SAndroid Build Coastguard Worker    )
970*da0073e9SAndroid Build Coastguard Worker
971*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
972*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_headers",
973*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
974*da0073e9SAndroid Build Coastguard Worker        exported_headers = subdir_glob(
975*da0073e9SAndroid Build Coastguard Worker            [
976*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/mobile/*.h"),
977*da0073e9SAndroid Build Coastguard Worker            ],
978*da0073e9SAndroid Build Coastguard Worker        ),
979*da0073e9SAndroid Build Coastguard Worker        labels = labels,
980*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
981*da0073e9SAndroid Build Coastguard Worker    )
982*da0073e9SAndroid Build Coastguard Worker
983*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
984*da0073e9SAndroid Build Coastguard Worker        name = "generated_aten_config_header",
985*da0073e9SAndroid Build Coastguard Worker        header_namespace = "ATen",
986*da0073e9SAndroid Build Coastguard Worker        exported_headers = {
987*da0073e9SAndroid Build Coastguard Worker            "Config.h": ":generate_aten_config[Config.h]",
988*da0073e9SAndroid Build Coastguard Worker        },
989*da0073e9SAndroid Build Coastguard Worker        labels = labels,
990*da0073e9SAndroid Build Coastguard Worker    )
991*da0073e9SAndroid Build Coastguard Worker
992*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
993*da0073e9SAndroid Build Coastguard Worker        name = "generated-autograd-headers",
994*da0073e9SAndroid Build Coastguard Worker        header_namespace = "torch/csrc/autograd/generated",
995*da0073e9SAndroid Build Coastguard Worker        exported_headers = {
996*da0073e9SAndroid Build Coastguard Worker            "Functions.h": ":gen_aten_libtorch[autograd/generated/Functions.h]",
997*da0073e9SAndroid Build Coastguard Worker            "VariableType.h": ":gen_aten_libtorch[autograd/generated/VariableType.h]",
998*da0073e9SAndroid Build Coastguard Worker            "variable_factories.h": ":gen_aten_libtorch[autograd/generated/variable_factories.h]",
999*da0073e9SAndroid Build Coastguard Worker            "ViewFuncs.h": ":gen_aten_libtorch[autograd/generated/ViewFuncs.h]",
1000*da0073e9SAndroid Build Coastguard Worker            # Don't build python bindings on mobile.
1001*da0073e9SAndroid Build Coastguard Worker            #"python_functions.h",
1002*da0073e9SAndroid Build Coastguard Worker        },
1003*da0073e9SAndroid Build Coastguard Worker        labels = labels,
1004*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1005*da0073e9SAndroid Build Coastguard Worker    )
1006*da0073e9SAndroid Build Coastguard Worker
1007*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1008*da0073e9SAndroid Build Coastguard Worker        name = "generated-version-header",
1009*da0073e9SAndroid Build Coastguard Worker        header_namespace = "torch",
1010*da0073e9SAndroid Build Coastguard Worker        exported_headers = {
1011*da0073e9SAndroid Build Coastguard Worker            "version.h": ":generate-version-header[version.h]",
1012*da0073e9SAndroid Build Coastguard Worker        },
1013*da0073e9SAndroid Build Coastguard Worker        labels = labels,
1014*da0073e9SAndroid Build Coastguard Worker    )
1015*da0073e9SAndroid Build Coastguard Worker
1016*da0073e9SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT
1017*da0073e9SAndroid Build Coastguard Worker    fb_native.genrule(
1018*da0073e9SAndroid Build Coastguard Worker        name = "generate-version-header",
1019*da0073e9SAndroid Build Coastguard Worker        srcs = [
1020*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/api/include/torch/version.h.in",
1021*da0073e9SAndroid Build Coastguard Worker            "version.txt",
1022*da0073e9SAndroid Build Coastguard Worker        ],
1023*da0073e9SAndroid Build Coastguard Worker        cmd = "$(exe {}tools:gen-version-header) ".format(ROOT_PATH) + " ".join([
1024*da0073e9SAndroid Build Coastguard Worker            "--template-path",
1025*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/api/include/torch/version.h.in",
1026*da0073e9SAndroid Build Coastguard Worker            "--version-path",
1027*da0073e9SAndroid Build Coastguard Worker            "version.txt",
1028*da0073e9SAndroid Build Coastguard Worker            "--output-path",
1029*da0073e9SAndroid Build Coastguard Worker            "$OUT/version.h",
1030*da0073e9SAndroid Build Coastguard Worker        ]),
1031*da0073e9SAndroid Build Coastguard Worker        outs = {
1032*da0073e9SAndroid Build Coastguard Worker            "version.h": ["version.h"],
1033*da0073e9SAndroid Build Coastguard Worker        },
1034*da0073e9SAndroid Build Coastguard Worker        default_outs = ["."],
1035*da0073e9SAndroid Build Coastguard Worker    )
1036*da0073e9SAndroid Build Coastguard Worker
1037*da0073e9SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT
1038*da0073e9SAndroid Build Coastguard Worker    fb_native.filegroup(
1039*da0073e9SAndroid Build Coastguard Worker        name = "aten_src_path",
1040*da0073e9SAndroid Build Coastguard Worker        srcs = [
1041*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/native/native_functions.yaml",
1042*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/native/tags.yaml",
1043*da0073e9SAndroid Build Coastguard Worker        ] + glob(["aten/src/ATen/templates/*"]),
1044*da0073e9SAndroid Build Coastguard Worker        visibility = [
1045*da0073e9SAndroid Build Coastguard Worker            "PUBLIC",
1046*da0073e9SAndroid Build Coastguard Worker        ],
1047*da0073e9SAndroid Build Coastguard Worker    )
1048*da0073e9SAndroid Build Coastguard Worker
1049*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1050*da0073e9SAndroid Build Coastguard Worker        name = "common_core",
1051*da0073e9SAndroid Build Coastguard Worker        srcs = [
1052*da0073e9SAndroid Build Coastguard Worker            "caffe2/core/common.cc",
1053*da0073e9SAndroid Build Coastguard Worker        ],
1054*da0073e9SAndroid Build Coastguard Worker        apple_sdks = (IOS, MACOSX, APPLETVOS),
1055*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1056*da0073e9SAndroid Build Coastguard Worker        labels = labels,
1057*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1058*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1059*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1060*da0073e9SAndroid Build Coastguard Worker        windows_preferred_linkage = "static" if is_arvr_mode() else None,
1061*da0073e9SAndroid Build Coastguard Worker        deps = [
1062*da0073e9SAndroid Build Coastguard Worker            ":caffe2_headers",
1063*da0073e9SAndroid Build Coastguard Worker            C10,
1064*da0073e9SAndroid Build Coastguard Worker        ],
1065*da0073e9SAndroid Build Coastguard Worker    )
1066*da0073e9SAndroid Build Coastguard Worker
1067*da0073e9SAndroid Build Coastguard Worker    # @lint-ignore BUCKLINT
1068*da0073e9SAndroid Build Coastguard Worker    fb_native.genrule(
1069*da0073e9SAndroid Build Coastguard Worker        name = "generate_aten_config",
1070*da0073e9SAndroid Build Coastguard Worker        srcs = [
1071*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/Config.h.in",
1072*da0073e9SAndroid Build Coastguard Worker        ],
1073*da0073e9SAndroid Build Coastguard Worker        cmd = "$(exe {}tools:substitute) ".format(ROOT_PATH) + " ".join([
1074*da0073e9SAndroid Build Coastguard Worker            "--install_dir",
1075*da0073e9SAndroid Build Coastguard Worker            "$OUT",
1076*da0073e9SAndroid Build Coastguard Worker            "--input-file",
1077*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/Config.h.in",
1078*da0073e9SAndroid Build Coastguard Worker            "--output-file",
1079*da0073e9SAndroid Build Coastguard Worker            "Config.h",
1080*da0073e9SAndroid Build Coastguard Worker            "--replace",
1081*da0073e9SAndroid Build Coastguard Worker            "@AT_MKLDNN_ENABLED@",
1082*da0073e9SAndroid Build Coastguard Worker            "ATEN_MKLDNN_ENABLED_FBXPLAT",
1083*da0073e9SAndroid Build Coastguard Worker            "--replace",
1084*da0073e9SAndroid Build Coastguard Worker            "@AT_MKLDNN_ACL_ENABLED@",
1085*da0073e9SAndroid Build Coastguard Worker            "ATEN_MKLDNN_ACL_ENABLED_FBXPLAT",
1086*da0073e9SAndroid Build Coastguard Worker            "--replace",
1087*da0073e9SAndroid Build Coastguard Worker            "@AT_MKL_ENABLED@",
1088*da0073e9SAndroid Build Coastguard Worker            "ATEN_MKL_ENABLED_FBXPLAT",
1089*da0073e9SAndroid Build Coastguard Worker            "--replace",
1090*da0073e9SAndroid Build Coastguard Worker            "@AT_MKL_SEQUENTIAL@",
1091*da0073e9SAndroid Build Coastguard Worker            "ATEN_MKL_SEQUENTIAL_FBXPLAT",
1092*da0073e9SAndroid Build Coastguard Worker            "--replace",
1093*da0073e9SAndroid Build Coastguard Worker            "@AT_POCKETFFT_ENABLED@",
1094*da0073e9SAndroid Build Coastguard Worker            "1",
1095*da0073e9SAndroid Build Coastguard Worker            "--replace",
1096*da0073e9SAndroid Build Coastguard Worker            "@AT_NNPACK_ENABLED@",
1097*da0073e9SAndroid Build Coastguard Worker            "ATEN_NNPACK_ENABLED_FBXPLAT",
1098*da0073e9SAndroid Build Coastguard Worker            "--replace",
1099*da0073e9SAndroid Build Coastguard Worker            "@CAFFE2_STATIC_LINK_CUDA_INT@",
1100*da0073e9SAndroid Build Coastguard Worker            "CAFFE2_STATIC_LINK_CUDA_FBXPLAT",
1101*da0073e9SAndroid Build Coastguard Worker            "--replace",
1102*da0073e9SAndroid Build Coastguard Worker            "@AT_BUILD_WITH_BLAS@",
1103*da0073e9SAndroid Build Coastguard Worker            "USE_BLAS_FBXPLAT",
1104*da0073e9SAndroid Build Coastguard Worker            "--replace",
1105*da0073e9SAndroid Build Coastguard Worker            "@AT_PARALLEL_OPENMP@",
1106*da0073e9SAndroid Build Coastguard Worker            "AT_PARALLEL_OPENMP_FBXPLAT",
1107*da0073e9SAndroid Build Coastguard Worker            "--replace",
1108*da0073e9SAndroid Build Coastguard Worker            "@AT_PARALLEL_NATIVE@",
1109*da0073e9SAndroid Build Coastguard Worker            "AT_PARALLEL_NATIVE_FBXPLAT",
1110*da0073e9SAndroid Build Coastguard Worker            "--replace",
1111*da0073e9SAndroid Build Coastguard Worker            "@AT_BUILD_WITH_LAPACK@",
1112*da0073e9SAndroid Build Coastguard Worker            "USE_LAPACK_FBXPLAT",
1113*da0073e9SAndroid Build Coastguard Worker            "--replace",
1114*da0073e9SAndroid Build Coastguard Worker            "@AT_BLAS_F2C@",
1115*da0073e9SAndroid Build Coastguard Worker            "AT_BLAS_F2C_FBXPLAT",
1116*da0073e9SAndroid Build Coastguard Worker            "--replace",
1117*da0073e9SAndroid Build Coastguard Worker            "@AT_BLAS_USE_CBLAS_DOT@",
1118*da0073e9SAndroid Build Coastguard Worker            "AT_BLAS_USE_CBLAS_DOT_FBXPLAT",
1119*da0073e9SAndroid Build Coastguard Worker        ]),
1120*da0073e9SAndroid Build Coastguard Worker        outs = {
1121*da0073e9SAndroid Build Coastguard Worker            "Config.h": ["Config.h"],
1122*da0073e9SAndroid Build Coastguard Worker        },
1123*da0073e9SAndroid Build Coastguard Worker        default_outs = ["."],
1124*da0073e9SAndroid Build Coastguard Worker    )
1125*da0073e9SAndroid Build Coastguard Worker
1126*da0073e9SAndroid Build Coastguard Worker    gen_aten_files(
1127*da0073e9SAndroid Build Coastguard Worker        name = "gen_aten",
1128*da0073e9SAndroid Build Coastguard Worker        extra_flags = get_aten_codegen_extra_params(USED_PT_BACKENDS),
1129*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1130*da0073e9SAndroid Build Coastguard Worker    )
1131*da0073e9SAndroid Build Coastguard Worker
1132*da0073e9SAndroid Build Coastguard Worker    gen_aten_libtorch_files(name = "gen_aten_libtorch")
1133*da0073e9SAndroid Build Coastguard Worker
1134*da0073e9SAndroid Build Coastguard Worker    gen_aten_libtorch_files(
1135*da0073e9SAndroid Build Coastguard Worker        name = "gen_aten_libtorch_lite",
1136*da0073e9SAndroid Build Coastguard Worker        extra_params = get_jit_codegen_params(),
1137*da0073e9SAndroid Build Coastguard Worker    )
1138*da0073e9SAndroid Build Coastguard Worker
1139*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1140*da0073e9SAndroid Build Coastguard Worker        name = "generated_aten_headers_cpu",
1141*da0073e9SAndroid Build Coastguard Worker        header_namespace = "ATen",
1142*da0073e9SAndroid Build Coastguard Worker        exported_headers = get_aten_static_dispatch_backend_headers({
1143*da0073e9SAndroid Build Coastguard Worker            "CPUFunctions.h": ":gen_aten[CPUFunctions.h]",
1144*da0073e9SAndroid Build Coastguard Worker            "CPUFunctions_inl.h": ":gen_aten[CPUFunctions_inl.h]",
1145*da0073e9SAndroid Build Coastguard Worker            "CompositeExplicitAutogradFunctions.h": ":gen_aten[CompositeExplicitAutogradFunctions.h]",
1146*da0073e9SAndroid Build Coastguard Worker            "CompositeExplicitAutogradFunctions_inl.h": ":gen_aten[CompositeExplicitAutogradFunctions_inl.h]",
1147*da0073e9SAndroid Build Coastguard Worker            "CompositeExplicitAutogradNonFunctionalFunctions.h": ":gen_aten[CompositeExplicitAutogradNonFunctionalFunctions.h]",
1148*da0073e9SAndroid Build Coastguard Worker            "CompositeExplicitAutogradNonFunctionalFunctions_inl.h": ":gen_aten[CompositeExplicitAutogradNonFunctionalFunctions_inl.h]",
1149*da0073e9SAndroid Build Coastguard Worker            "CompositeImplicitAutogradFunctions.h": ":gen_aten[CompositeImplicitAutogradFunctions.h]",
1150*da0073e9SAndroid Build Coastguard Worker            "CompositeImplicitAutogradFunctions_inl.h": ":gen_aten[CompositeImplicitAutogradFunctions_inl.h]",
1151*da0073e9SAndroid Build Coastguard Worker            "CompositeImplicitAutogradNestedTensorFunctions.h": ":gen_aten[CompositeImplicitAutogradNestedTensorFunctions.h]",
1152*da0073e9SAndroid Build Coastguard Worker            "CompositeImplicitAutogradNestedTensorFunctions_inl.h": ":gen_aten[CompositeImplicitAutogradNestedTensorFunctions_inl.h]",
1153*da0073e9SAndroid Build Coastguard Worker            "FunctionalInverses.h": ":gen_aten[FunctionalInverses.h]",
1154*da0073e9SAndroid Build Coastguard Worker            "Functions.h": ":gen_aten[Functions.h]",
1155*da0073e9SAndroid Build Coastguard Worker            "MethodOperators.h": ":gen_aten[MethodOperators.h]",
1156*da0073e9SAndroid Build Coastguard Worker            "NativeFunctions.h": ":gen_aten[NativeFunctions.h]",
1157*da0073e9SAndroid Build Coastguard Worker            "NativeMetaFunctions.h": ":gen_aten[NativeMetaFunctions.h]",
1158*da0073e9SAndroid Build Coastguard Worker            "Operators.h": ":gen_aten[Operators.h]",
1159*da0073e9SAndroid Build Coastguard Worker            "RedispatchFunctions.h": ":gen_aten[RedispatchFunctions.h]",
1160*da0073e9SAndroid Build Coastguard Worker            "core/TensorBody.h": ":gen_aten[core/TensorBody.h]",
1161*da0073e9SAndroid Build Coastguard Worker            "core/aten_interned_strings.h": ":gen_aten[core/aten_interned_strings.h]",
1162*da0073e9SAndroid Build Coastguard Worker            "core/enum_tag.h": ":gen_aten[core/enum_tag.h]",
1163*da0073e9SAndroid Build Coastguard Worker        }),
1164*da0073e9SAndroid Build Coastguard Worker        labels = labels,
1165*da0073e9SAndroid Build Coastguard Worker    )
1166*da0073e9SAndroid Build Coastguard Worker
1167*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1168*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_observer",
1169*da0073e9SAndroid Build Coastguard Worker        srcs = [
1170*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/observer.cpp",
1171*da0073e9SAndroid Build Coastguard Worker        ] + ([] if IS_OSS else ["torch/fb/observers/MobileObserverUtil.cpp"]),
1172*da0073e9SAndroid Build Coastguard Worker        compiler_flags = ["-fexceptions"],
1173*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1174*da0073e9SAndroid Build Coastguard Worker        exported_headers = subdir_glob(
1175*da0073e9SAndroid Build Coastguard Worker            [
1176*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/mobile/observer.h"),
1177*da0073e9SAndroid Build Coastguard Worker            ] + ([] if IS_OSS else [
1178*da0073e9SAndroid Build Coastguard Worker                ("", "torch/fb/observers/ObserverUtil.h"),
1179*da0073e9SAndroid Build Coastguard Worker                ("", "torch/fb/observers/MobileObserverUtil.h"),
1180*da0073e9SAndroid Build Coastguard Worker            ]),
1181*da0073e9SAndroid Build Coastguard Worker        ),
1182*da0073e9SAndroid Build Coastguard Worker        fbobjc_compiler_flags = [
1183*da0073e9SAndroid Build Coastguard Worker            "-Wno-missing-prototypes",
1184*da0073e9SAndroid Build Coastguard Worker        ],
1185*da0073e9SAndroid Build Coastguard Worker        labels = labels,
1186*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1187*da0073e9SAndroid Build Coastguard Worker        deps = [
1188*da0073e9SAndroid Build Coastguard Worker            C10,
1189*da0073e9SAndroid Build Coastguard Worker        ],
1190*da0073e9SAndroid Build Coastguard Worker    )
1191*da0073e9SAndroid Build Coastguard Worker
1192*da0073e9SAndroid Build Coastguard Worker    # Base library shared by lite-interpreter and full-jit.
1193*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1194*da0073e9SAndroid Build Coastguard Worker        name = "torch_common",
1195*da0073e9SAndroid Build Coastguard Worker        srcs = core_sources_common,
1196*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1197*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags(),
1198*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1199*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1200*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1201*da0073e9SAndroid Build Coastguard Worker        deps = [
1202*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1203*da0073e9SAndroid Build Coastguard Worker            ":generated-autograd-headers",
1204*da0073e9SAndroid Build Coastguard Worker            ":torch_headers",
1205*da0073e9SAndroid Build Coastguard Worker            C10,
1206*da0073e9SAndroid Build Coastguard Worker            third_party("libkineto_headers"),
1207*da0073e9SAndroid Build Coastguard Worker        ],
1208*da0073e9SAndroid Build Coastguard Worker    )
1209*da0073e9SAndroid Build Coastguard Worker
1210*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1211*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_deserialize_common",
1212*da0073e9SAndroid Build Coastguard Worker        srcs = [
1213*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/parse_bytecode.cpp",
1214*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/parse_operators.cpp",
1215*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/upgrader_mobile.cpp",
1216*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/import_read.cpp",
1217*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/unpickler.cpp",
1218*da0073e9SAndroid Build Coastguard Worker        ],
1219*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1220*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
1221*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/import_read.h",
1222*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/unpickler.h",
1223*da0073e9SAndroid Build Coastguard Worker        ],
1224*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1225*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags(),
1226*da0073e9SAndroid Build Coastguard Worker        extra_flags = {
1227*da0073e9SAndroid Build Coastguard Worker            "fbandroid_compiler_flags": ["-frtti"],
1228*da0073e9SAndroid Build Coastguard Worker        },
1229*da0073e9SAndroid Build Coastguard Worker        # torch_mobile_deserialize brings in sources neccessary to read a module
1230*da0073e9SAndroid Build Coastguard Worker        # which depends on mobile module definition
1231*da0073e9SAndroid Build Coastguard Worker        # link_whole is enable so that all symbols neccessary for mobile module are compiled
1232*da0073e9SAndroid Build Coastguard Worker        # instead of only symbols used while loading; this prevents symbol
1233*da0073e9SAndroid Build Coastguard Worker        # found definied in runtime
1234*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1235*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1236*da0073e9SAndroid Build Coastguard Worker        linker_flags = ["-Wl,--no-as-needed"],
1237*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1238*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1239*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1240*da0073e9SAndroid Build Coastguard Worker            ":caffe2_headers",
1241*da0073e9SAndroid Build Coastguard Worker            ":caffe2_serialize",
1242*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1243*da0073e9SAndroid Build Coastguard Worker            ":torch_headers",
1244*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_headers",
1245*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_module",
1246*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_observer",
1247*da0073e9SAndroid Build Coastguard Worker            C10,
1248*da0073e9SAndroid Build Coastguard Worker        ],
1249*da0073e9SAndroid Build Coastguard Worker    )
1250*da0073e9SAndroid Build Coastguard Worker
1251*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1252*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_module",
1253*da0073e9SAndroid Build Coastguard Worker        srcs = [
1254*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/function.cpp",
1255*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/interpreter.cpp",
1256*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/module.cpp",
1257*da0073e9SAndroid Build Coastguard Worker        ],
1258*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1259*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
1260*da0073e9SAndroid Build Coastguard Worker        ],
1261*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1262*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + (["-DSYMBOLICATE_MOBILE_DEBUG_HANDLE"] if get_enable_eager_symbolication() else []),
1263*da0073e9SAndroid Build Coastguard Worker        extra_flags = {
1264*da0073e9SAndroid Build Coastguard Worker            "fbandroid_compiler_flags": ["-frtti"],
1265*da0073e9SAndroid Build Coastguard Worker        },
1266*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1267*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1268*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1269*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1270*da0073e9SAndroid Build Coastguard Worker        ],
1271*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1272*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1273*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1274*da0073e9SAndroid Build Coastguard Worker            ":caffe2_headers",
1275*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1276*da0073e9SAndroid Build Coastguard Worker            ":torch_headers",
1277*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_headers",
1278*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_observer",
1279*da0073e9SAndroid Build Coastguard Worker            C10,
1280*da0073e9SAndroid Build Coastguard Worker        ],
1281*da0073e9SAndroid Build Coastguard Worker    )
1282*da0073e9SAndroid Build Coastguard Worker
1283*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1284*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_debug_symbolication",
1285*da0073e9SAndroid Build Coastguard Worker        srcs = [
1286*da0073e9SAndroid Build Coastguard Worker            # included in aten_cpu "torch/csrc/jit/frontend/source_range.cpp",
1287*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/ir/scope.cpp",
1288*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/debug_info.cpp",
1289*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/callstack_debug_info_serialization.cpp",
1290*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/source_range_serialization.cpp",
1291*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/pickle.cpp",
1292*da0073e9SAndroid Build Coastguard Worker            # pickler.cpp doesn't seem to be needed.
1293*da0073e9SAndroid Build Coastguard Worker            # "torch/csrc/jit/serialization/pickler.cpp",
1294*da0073e9SAndroid Build Coastguard Worker            # included in core_sources_common "torch/csrc/jit/serialization/unpickler.cpp",
1295*da0073e9SAndroid Build Coastguard Worker        ],
1296*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1297*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags(),
1298*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1299*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1300*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1301*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1302*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1303*da0073e9SAndroid Build Coastguard Worker        ],
1304*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1305*da0073e9SAndroid Build Coastguard Worker        deps = [
1306*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_deserialize",
1307*da0073e9SAndroid Build Coastguard Worker        ],
1308*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1309*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1310*da0073e9SAndroid Build Coastguard Worker        ],
1311*da0073e9SAndroid Build Coastguard Worker    )
1312*da0073e9SAndroid Build Coastguard Worker
1313*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1314*da0073e9SAndroid Build Coastguard Worker        name = "torch_model_tracer",
1315*da0073e9SAndroid Build Coastguard Worker        srcs = [
1316*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/model_tracer/TracerRunner.cpp",
1317*da0073e9SAndroid Build Coastguard Worker        ] + get_feature_tracer_source_list(),
1318*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1319*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1320*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + (["-DSYMBOLICATE_MOBILE_DEBUG_HANDLE"] if get_enable_eager_symbolication() else []),
1321*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1322*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1323*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1324*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1325*da0073e9SAndroid Build Coastguard Worker        ],
1326*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1327*da0073e9SAndroid Build Coastguard Worker        deps = [
1328*da0073e9SAndroid Build Coastguard Worker            ":generated-autograd-headers",
1329*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_deserialize",
1330*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_headers",
1331*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_observer",
1332*da0073e9SAndroid Build Coastguard Worker        ] + ([] if IS_OSS else ["//xplat/folly:molly"]),
1333*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1334*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1335*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1336*da0073e9SAndroid Build Coastguard Worker        ] + ([] if IS_OSS else [
1337*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/custom_ops/batch_box_cox:batch_box_cox",
1338*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/custom_ops/maskrcnn:maskrcnn",
1339*da0073e9SAndroid Build Coastguard Worker        ]),
1340*da0073e9SAndroid Build Coastguard Worker    )
1341*da0073e9SAndroid Build Coastguard Worker
1342*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1343*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_deserialize",
1344*da0073e9SAndroid Build Coastguard Worker        srcs = [
1345*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/import.cpp",
1346*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/flatbuffer_loader.cpp",
1347*da0073e9SAndroid Build Coastguard Worker        ],
1348*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1349*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + (["-DFB_XPLAT_BUILD"] if not IS_OSS else []),
1350*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1351*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
1352*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/import.h",
1353*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/flatbuffer_loader.h",
1354*da0073e9SAndroid Build Coastguard Worker        ],
1355*da0073e9SAndroid Build Coastguard Worker        # torch_mobile_deserialize brings in sources neccessary to read a module
1356*da0073e9SAndroid Build Coastguard Worker        # which depends on mobile module definition
1357*da0073e9SAndroid Build Coastguard Worker        # link_whole is enable so that all symbols neccessary for mobile module are compiled
1358*da0073e9SAndroid Build Coastguard Worker        # instead of only symbols used while loading; this prevents symbol
1359*da0073e9SAndroid Build Coastguard Worker        # found definied in runtime
1360*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1361*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1362*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1363*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1364*da0073e9SAndroid Build Coastguard Worker        ],
1365*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1366*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1367*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1368*da0073e9SAndroid Build Coastguard Worker            ":caffe2_headers",
1369*da0073e9SAndroid Build Coastguard Worker            ":caffe2_serialize",
1370*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1371*da0073e9SAndroid Build Coastguard Worker            ":torch_headers",
1372*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_headers",
1373*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_module",
1374*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_observer",
1375*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_deserialize_common",
1376*da0073e9SAndroid Build Coastguard Worker            ":mobile_bytecode",
1377*da0073e9SAndroid Build Coastguard Worker            C10,
1378*da0073e9SAndroid Build Coastguard Worker        ],
1379*da0073e9SAndroid Build Coastguard Worker    )
1380*da0073e9SAndroid Build Coastguard Worker
1381*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1382*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_core",
1383*da0073e9SAndroid Build Coastguard Worker        srcs = [],
1384*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1385*da0073e9SAndroid Build Coastguard Worker        exported_headers = [],
1386*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1387*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + (["-DSYMBOLICATE_MOBILE_DEBUG_HANDLE"] if get_enable_eager_symbolication() else []),
1388*da0073e9SAndroid Build Coastguard Worker        # torch_mobile_core brings in sources neccessary to read and run a module
1389*da0073e9SAndroid Build Coastguard Worker        # link_whole is enabled so that all symbols linked
1390*da0073e9SAndroid Build Coastguard Worker        # operators, registerations and other few symbols are need in runtime
1391*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1392*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1393*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1394*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1395*da0073e9SAndroid Build Coastguard Worker        ],
1396*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1397*da0073e9SAndroid Build Coastguard Worker        deps = [
1398*da0073e9SAndroid Build Coastguard Worker            ":generated-autograd-headers",
1399*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_headers",
1400*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_observer",
1401*da0073e9SAndroid Build Coastguard Worker        ],
1402*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1403*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1404*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1405*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_deserialize",
1406*da0073e9SAndroid Build Coastguard Worker            ":torch_supported_mobile_models",
1407*da0073e9SAndroid Build Coastguard Worker        ],
1408*da0073e9SAndroid Build Coastguard Worker    )
1409*da0073e9SAndroid Build Coastguard Worker
1410*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1411*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_core_pickle_and_flatbuffer",
1412*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1413*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags(),
1414*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1415*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1416*da0073e9SAndroid Build Coastguard Worker            ":flatbuffers_mobile",
1417*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_core",
1418*da0073e9SAndroid Build Coastguard Worker        ],
1419*da0073e9SAndroid Build Coastguard Worker    )
1420*da0073e9SAndroid Build Coastguard Worker
1421*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1422*da0073e9SAndroid Build Coastguard Worker        name = "torch_cpp_cpu",
1423*da0073e9SAndroid Build Coastguard Worker        srcs = torch_cpp_srcs,
1424*da0073e9SAndroid Build Coastguard Worker        headers = native.glob(["torch/csrc/api/include/**/*.h"]) + ["torch/script.h"],
1425*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1426*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags(),
1427*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1428*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1429*da0073e9SAndroid Build Coastguard Worker            ":torch",
1430*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_deserialize_common",  # for torch/csrc/api/src/serialize/input-archive.cpp
1431*da0073e9SAndroid Build Coastguard Worker        ],
1432*da0073e9SAndroid Build Coastguard Worker    )
1433*da0073e9SAndroid Build Coastguard Worker
1434*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1435*da0073e9SAndroid Build Coastguard Worker        name = "torch_core",
1436*da0073e9SAndroid Build Coastguard Worker        srcs = core_sources_full_mobile_no_backend_interface_xplat,
1437*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1438*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags(),
1439*da0073e9SAndroid Build Coastguard Worker        visibility = [
1440*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/android/...",
1441*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/...",
1442*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/model_tracer/...",
1443*da0073e9SAndroid Build Coastguard Worker        ],
1444*da0073e9SAndroid Build Coastguard Worker        deps = [
1445*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1446*da0073e9SAndroid Build Coastguard Worker            ":backend_interface_lib",
1447*da0073e9SAndroid Build Coastguard Worker            ":generated-autograd-headers",
1448*da0073e9SAndroid Build Coastguard Worker            ":torch_headers",
1449*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_deserialize",
1450*da0073e9SAndroid Build Coastguard Worker            third_party("glog"),
1451*da0073e9SAndroid Build Coastguard Worker            third_party("rt"),
1452*da0073e9SAndroid Build Coastguard Worker            C10,
1453*da0073e9SAndroid Build Coastguard Worker        ] + ([] if IS_OSS else [
1454*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/custom_ops/batch_box_cox:batch_box_cox",
1455*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/custom_ops/maskrcnn:maskrcnn",
1456*da0073e9SAndroid Build Coastguard Worker        ]),
1457*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1458*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1459*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_train",
1460*da0073e9SAndroid Build Coastguard Worker        ],
1461*da0073e9SAndroid Build Coastguard Worker    )
1462*da0073e9SAndroid Build Coastguard Worker
1463*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1464*da0073e9SAndroid Build Coastguard Worker        name = "torch_train",
1465*da0073e9SAndroid Build Coastguard Worker        srcs = [
1466*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/api/src/data/samplers/random.cpp",
1467*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/api/src/data/samplers/sequential.cpp",
1468*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/api/src/optim/optimizer.cpp",
1469*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/api/src/optim/serialize.cpp",
1470*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/api/src/optim/sgd.cpp",
1471*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/api/src/serialize/input-archive.cpp",
1472*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/api/src/serialize/output-archive.cpp",
1473*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/api/module_save.cpp",
1474*da0073e9SAndroid Build Coastguard Worker        ],
1475*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1476*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags(),
1477*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1478*da0073e9SAndroid Build Coastguard Worker        deps = [
1479*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1480*da0073e9SAndroid Build Coastguard Worker            ":torch_headers",
1481*da0073e9SAndroid Build Coastguard Worker            ":torch",
1482*da0073e9SAndroid Build Coastguard Worker            ":torch_core",
1483*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_deserialize",
1484*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_train",
1485*da0073e9SAndroid Build Coastguard Worker            ":jit_module_saving",
1486*da0073e9SAndroid Build Coastguard Worker            C10,
1487*da0073e9SAndroid Build Coastguard Worker        ],
1488*da0073e9SAndroid Build Coastguard Worker    )
1489*da0073e9SAndroid Build Coastguard Worker
1490*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1491*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_train",
1492*da0073e9SAndroid Build Coastguard Worker        srcs = core_trainer_sources + [
1493*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/autograd/VariableTypeManual.cpp",
1494*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/autograd/FunctionsManual.cpp",
1495*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/api/src/data/datasets/mnist.cpp",
1496*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/quantization.cpp",
1497*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/train/export_data.cpp",
1498*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/train/optim/sgd.cpp",
1499*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/train/random.cpp",
1500*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/train/sequential.cpp",
1501*da0073e9SAndroid Build Coastguard Worker            ":gen_aten_libtorch[autograd/generated/Functions.cpp]",
1502*da0073e9SAndroid Build Coastguard Worker            ":gen_aten_libtorch[autograd/generated/ViewFuncs.cpp]",
1503*da0073e9SAndroid Build Coastguard Worker        ],
1504*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1505*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + ["-DUSE_MOBILE_CLASSTYPE"],
1506*da0073e9SAndroid Build Coastguard Worker        # torch_mobile_train brings in sources neccessary to read and run a mobile
1507*da0073e9SAndroid Build Coastguard Worker        # and save and load mobile params along with autograd
1508*da0073e9SAndroid Build Coastguard Worker        # link_whole is enabled so that all symbols linked
1509*da0073e9SAndroid Build Coastguard Worker        # operators, registerations and autograd related symbols are need in runtime
1510*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1511*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1512*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1513*da0073e9SAndroid Build Coastguard Worker        deps = [
1514*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1515*da0073e9SAndroid Build Coastguard Worker            ":generated-autograd-headers",
1516*da0073e9SAndroid Build Coastguard Worker            ":torch_headers",
1517*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_deserialize",
1518*da0073e9SAndroid Build Coastguard Worker            ":flatbuffers_serializer_mobile",
1519*da0073e9SAndroid Build Coastguard Worker            C10,
1520*da0073e9SAndroid Build Coastguard Worker        ],
1521*da0073e9SAndroid Build Coastguard Worker    )
1522*da0073e9SAndroid Build Coastguard Worker
1523*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1524*da0073e9SAndroid Build Coastguard Worker        name = "torch",
1525*da0073e9SAndroid Build Coastguard Worker        srcs = [
1526*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/register_c10_ops.cpp",
1527*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/register_prim_ops_fulljit.cpp",
1528*da0073e9SAndroid Build Coastguard Worker        ],
1529*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1530*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags(),
1531*da0073e9SAndroid Build Coastguard Worker        # torch brings in all sources neccessary to read and run a mobile module/jit module
1532*da0073e9SAndroid Build Coastguard Worker        # link_whole is enabled so that all symbols linked
1533*da0073e9SAndroid Build Coastguard Worker        # operators, registerations and other few symbols are need in runtime
1534*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1535*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1536*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1537*da0073e9SAndroid Build Coastguard Worker        deps = [
1538*da0073e9SAndroid Build Coastguard Worker            # This is to have autograd profiler available
1539*da0073e9SAndroid Build Coastguard Worker            # in xplat/caffe2:torch which some builds are using
1540*da0073e9SAndroid Build Coastguard Worker            # notable xplate/facegen:testsAndroid
1541*da0073e9SAndroid Build Coastguard Worker            ":torch_headers",
1542*da0073e9SAndroid Build Coastguard Worker            ":torch_kineto_profiling",
1543*da0073e9SAndroid Build Coastguard Worker        ],
1544*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1545*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1546*da0073e9SAndroid Build Coastguard Worker            ":torch_core",
1547*da0073e9SAndroid Build Coastguard Worker            C10,
1548*da0073e9SAndroid Build Coastguard Worker        ],
1549*da0073e9SAndroid Build Coastguard Worker    )
1550*da0073e9SAndroid Build Coastguard Worker
1551*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1552*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_train_import_data",
1553*da0073e9SAndroid Build Coastguard Worker        srcs = [
1554*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/import_data.cpp",
1555*da0073e9SAndroid Build Coastguard Worker        ],
1556*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1557*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + ["-DUSE_MOBILE_CLASSTYPE"],
1558*da0073e9SAndroid Build Coastguard Worker        # torch_mobile_train_import_data brings in sources neccessary to read a mobile module
1559*da0073e9SAndroid Build Coastguard Worker        # link_whole is enabled so that all symbols linked
1560*da0073e9SAndroid Build Coastguard Worker        # operators other few symbols are need in runtime
1561*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1562*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1563*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1564*da0073e9SAndroid Build Coastguard Worker        deps = [
1565*da0073e9SAndroid Build Coastguard Worker            ":torch_headers",
1566*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_observer",
1567*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_core",
1568*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_train",
1569*da0073e9SAndroid Build Coastguard Worker        ],
1570*da0073e9SAndroid Build Coastguard Worker    )
1571*da0073e9SAndroid Build Coastguard Worker
1572*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1573*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_compatibility",
1574*da0073e9SAndroid Build Coastguard Worker        srcs = [
1575*da0073e9SAndroid Build Coastguard Worker            # These .cpp brought in through core_sources_common
1576*da0073e9SAndroid Build Coastguard Worker            # "torch/csrc/jit/mobile/compatibility/runtime_compatibility.cpp",
1577*da0073e9SAndroid Build Coastguard Worker            # "torch/csrc/jit/serialization/unpickler.cpp",
1578*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/compatibility/model_compatibility.cpp",
1579*da0073e9SAndroid Build Coastguard Worker        ],
1580*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1581*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
1582*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/compatibility/backport.h",
1583*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/compatibility/backport_manager.h",
1584*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/compatibility/model_compatibility.h",
1585*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/compatibility/runtime_compatibility.h",
1586*da0073e9SAndroid Build Coastguard Worker        ],
1587*da0073e9SAndroid Build Coastguard Worker        compiler_flags = [
1588*da0073e9SAndroid Build Coastguard Worker            "-fexceptions",
1589*da0073e9SAndroid Build Coastguard Worker            "-frtti",
1590*da0073e9SAndroid Build Coastguard Worker            "-Wno-deprecated-declarations",
1591*da0073e9SAndroid Build Coastguard Worker            "-Wno-global-constructors",
1592*da0073e9SAndroid Build Coastguard Worker        ],
1593*da0073e9SAndroid Build Coastguard Worker        labels = labels,
1594*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1595*da0073e9SAndroid Build Coastguard Worker        deps = [
1596*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_deserialize",
1597*da0073e9SAndroid Build Coastguard Worker        ],
1598*da0073e9SAndroid Build Coastguard Worker    )
1599*da0073e9SAndroid Build Coastguard Worker
1600*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1601*da0073e9SAndroid Build Coastguard Worker        name = "jit_module_saving",
1602*da0073e9SAndroid Build Coastguard Worker        srcs = [
1603*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/api/module_save.cpp",
1604*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/export_bytecode.cpp",
1605*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/export_module.cpp",
1606*da0073e9SAndroid Build Coastguard Worker        ],
1607*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1608*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() +
1609*da0073e9SAndroid Build Coastguard Worker                                      (["-DFB_XPLAT_BUILD"] if not IS_OSS else []),
1610*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
1611*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/export.h",
1612*da0073e9SAndroid Build Coastguard Worker        ],
1613*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1614*da0073e9SAndroid Build Coastguard Worker        deps = [
1615*da0073e9SAndroid Build Coastguard Worker            ":torch",
1616*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_core",
1617*da0073e9SAndroid Build Coastguard Worker            ":flatbuffers_serializer_mobile",
1618*da0073e9SAndroid Build Coastguard Worker        ],
1619*da0073e9SAndroid Build Coastguard Worker    )
1620*da0073e9SAndroid Build Coastguard Worker
1621*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1622*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_model_tracer",
1623*da0073e9SAndroid Build Coastguard Worker        srcs = [
1624*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/model_tracer/MobileModelRunner.cpp",
1625*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/model_tracer/TensorUtils.cpp",
1626*da0073e9SAndroid Build Coastguard Worker        ],
1627*da0073e9SAndroid Build Coastguard Worker        headers = [
1628*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/model_tracer/MobileModelRunner.h",
1629*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/model_tracer/TensorUtils.h",
1630*da0073e9SAndroid Build Coastguard Worker        ],
1631*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1632*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
1633*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/model_tracer/MobileModelRunner.h",
1634*da0073e9SAndroid Build Coastguard Worker        ],
1635*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1636*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + (["-DSYMBOLICATE_MOBILE_DEBUG_HANDLE"] if get_enable_eager_symbolication() else []),
1637*da0073e9SAndroid Build Coastguard Worker        # torch_mobile_model_tracer brings in sources neccessary to read and run a jit module
1638*da0073e9SAndroid Build Coastguard Worker        # and trace the ops
1639*da0073e9SAndroid Build Coastguard Worker        # link_whole is enabled so that all symbols linked
1640*da0073e9SAndroid Build Coastguard Worker        # operators, registerations and other few symbols are need in runtime
1641*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1642*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1643*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1644*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1645*da0073e9SAndroid Build Coastguard Worker        ],
1646*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1647*da0073e9SAndroid Build Coastguard Worker        deps = [
1648*da0073e9SAndroid Build Coastguard Worker            ":caffe2_serialize",
1649*da0073e9SAndroid Build Coastguard Worker            ":generated-autograd-headers",
1650*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_headers",
1651*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_observer",
1652*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_core",
1653*da0073e9SAndroid Build Coastguard Worker        ] + ([] if IS_OSS else ["//xplat/folly:molly"]),
1654*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1655*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1656*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1657*da0073e9SAndroid Build Coastguard Worker        ] + ([] if IS_OSS else [
1658*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/custom_ops/batch_box_cox:batch_box_cox",
1659*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/custom_ops/maskrcnn:maskrcnn",
1660*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/custom_ops/sparsenn:sparsenn-all",
1661*da0073e9SAndroid Build Coastguard Worker        ]),
1662*da0073e9SAndroid Build Coastguard Worker    )
1663*da0073e9SAndroid Build Coastguard Worker
1664*da0073e9SAndroid Build Coastguard Worker    #TODO(qihan) delete
1665*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1666*da0073e9SAndroid Build Coastguard Worker        name = "torch_mobile_core_flatbuffer",
1667*da0073e9SAndroid Build Coastguard Worker        srcs = [],
1668*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1669*da0073e9SAndroid Build Coastguard Worker        exported_headers = [],
1670*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1671*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + (["-DSYMBOLICATE_MOBILE_DEBUG_HANDLE"] if get_enable_eager_symbolication() else []),
1672*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1673*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1674*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1675*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1676*da0073e9SAndroid Build Coastguard Worker        ],
1677*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1678*da0073e9SAndroid Build Coastguard Worker        deps = [
1679*da0073e9SAndroid Build Coastguard Worker            ":generated-autograd-headers",
1680*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_headers",
1681*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_observer",
1682*da0073e9SAndroid Build Coastguard Worker        ],
1683*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1684*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1685*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1686*da0073e9SAndroid Build Coastguard Worker        ],
1687*da0073e9SAndroid Build Coastguard Worker    )
1688*da0073e9SAndroid Build Coastguard Worker
1689*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1690*da0073e9SAndroid Build Coastguard Worker        name = "backend_interface_lib",
1691*da0073e9SAndroid Build Coastguard Worker        srcs = [
1692*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/backends/backend_debug_info.cpp",
1693*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/backends/backend_interface.cpp",
1694*da0073e9SAndroid Build Coastguard Worker        ],
1695*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags(),
1696*da0073e9SAndroid Build Coastguard Worker        fbandroid_compiler_flags = c2_fbandroid_xplat_compiler_flags,
1697*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1698*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1699*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1700*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1701*da0073e9SAndroid Build Coastguard Worker        ],
1702*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1703*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1704*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1705*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1706*da0073e9SAndroid Build Coastguard Worker        ],
1707*da0073e9SAndroid Build Coastguard Worker    )
1708*da0073e9SAndroid Build Coastguard Worker
1709*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1710*da0073e9SAndroid Build Coastguard Worker        name = "torch_kineto_profiling",
1711*da0073e9SAndroid Build Coastguard Worker        srcs = libtorch_profiler_sources,
1712*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags() + ["-Wno-error"],
1713*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + [
1714*da0073e9SAndroid Build Coastguard Worker            "-DUSE_KINETO",
1715*da0073e9SAndroid Build Coastguard Worker            # Need this otherwise USE_KINETO is undefed
1716*da0073e9SAndroid Build Coastguard Worker            # for mobile
1717*da0073e9SAndroid Build Coastguard Worker            "-DEDGE_PROFILER_USE_KINETO",
1718*da0073e9SAndroid Build Coastguard Worker        ],
1719*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1720*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1721*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1722*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1723*da0073e9SAndroid Build Coastguard Worker        ],
1724*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1725*da0073e9SAndroid Build Coastguard Worker        deps = [
1726*da0073e9SAndroid Build Coastguard Worker            third_party("glog"),
1727*da0073e9SAndroid Build Coastguard Worker            third_party("kineto"),
1728*da0073e9SAndroid Build Coastguard Worker        ],
1729*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1730*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1731*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1732*da0073e9SAndroid Build Coastguard Worker        ],
1733*da0073e9SAndroid Build Coastguard Worker    )
1734*da0073e9SAndroid Build Coastguard Worker
1735*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1736*da0073e9SAndroid Build Coastguard Worker        name = "torch_edge_profiling",
1737*da0073e9SAndroid Build Coastguard Worker        srcs = ["torch/csrc/jit/mobile/profiler_edge.cpp"],
1738*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags() + ["-Wno-error"],
1739*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + [
1740*da0073e9SAndroid Build Coastguard Worker            "-DUSE_KINETO",
1741*da0073e9SAndroid Build Coastguard Worker            "-DEDGE_PROFILER_USE_KINETO",
1742*da0073e9SAndroid Build Coastguard Worker        ],
1743*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1744*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1745*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1746*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1747*da0073e9SAndroid Build Coastguard Worker        ],
1748*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1749*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1750*da0073e9SAndroid Build Coastguard Worker            ":torch_common",
1751*da0073e9SAndroid Build Coastguard Worker            ":torch_kineto_profiling",
1752*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_core",
1753*da0073e9SAndroid Build Coastguard Worker        ],
1754*da0073e9SAndroid Build Coastguard Worker    )
1755*da0073e9SAndroid Build Coastguard Worker
1756*da0073e9SAndroid Build Coastguard Worker    fb_xplat_genrule(
1757*da0073e9SAndroid Build Coastguard Worker        name = "mobile_bytecode_header",
1758*da0073e9SAndroid Build Coastguard Worker        srcs = [
1759*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/mobile_bytecode.fbs",
1760*da0073e9SAndroid Build Coastguard Worker        ],
1761*da0073e9SAndroid Build Coastguard Worker        outs = {
1762*da0073e9SAndroid Build Coastguard Worker            "mobile_bytecode_generated_fbsource.h": ["mobile_bytecode_generated.h"],
1763*da0073e9SAndroid Build Coastguard Worker        },
1764*da0073e9SAndroid Build Coastguard Worker        cmd = "$(exe {})".format(third_party("flatc")) +
1765*da0073e9SAndroid Build Coastguard Worker              " --cpp --gen-mutable --scoped-enums -o ${OUT} ${SRCS}",
1766*da0073e9SAndroid Build Coastguard Worker        default_outs = ["."],
1767*da0073e9SAndroid Build Coastguard Worker        visibility = [
1768*da0073e9SAndroid Build Coastguard Worker            "{}:mobile_bytecode".format(ROOT),
1769*da0073e9SAndroid Build Coastguard Worker        ],
1770*da0073e9SAndroid Build Coastguard Worker    )
1771*da0073e9SAndroid Build Coastguard Worker
1772*da0073e9SAndroid Build Coastguard Worker    # Users of this target will need to add third_party("flatbuffers-api") as a
1773*da0073e9SAndroid Build Coastguard Worker    # dep.
1774*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1775*da0073e9SAndroid Build Coastguard Worker        name = "mobile_bytecode",
1776*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1777*da0073e9SAndroid Build Coastguard Worker        exported_headers = {
1778*da0073e9SAndroid Build Coastguard Worker            ("torch/csrc/jit/serialization/mobile_bytecode_generated.h" if IS_OSS else "torch/csrc/jit/serialization/mobile_bytecode_generated_fbsource.h"): ":mobile_bytecode_header[mobile_bytecode_generated_fbsource.h]",
1779*da0073e9SAndroid Build Coastguard Worker        },
1780*da0073e9SAndroid Build Coastguard Worker        # Avoid leaking implementation details by only exposing this header to
1781*da0073e9SAndroid Build Coastguard Worker        # the internals of the loader/serializer layer.
1782*da0073e9SAndroid Build Coastguard Worker        visibility = [
1783*da0073e9SAndroid Build Coastguard Worker            "{}:flatbuffer_loader".format(ROOT),
1784*da0073e9SAndroid Build Coastguard Worker            "{}:flatbuffers_serializer_mobile".format(ROOT),
1785*da0073e9SAndroid Build Coastguard Worker        ],
1786*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1787*da0073e9SAndroid Build Coastguard Worker            third_party("flatbuffers-api"),
1788*da0073e9SAndroid Build Coastguard Worker        ],
1789*da0073e9SAndroid Build Coastguard Worker    )
1790*da0073e9SAndroid Build Coastguard Worker
1791*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1792*da0073e9SAndroid Build Coastguard Worker        name = "flatbuffers_serializer_mobile",
1793*da0073e9SAndroid Build Coastguard Worker        srcs = ["torch/csrc/jit/serialization/flatbuffer_serializer.cpp"],
1794*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
1795*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/flatbuffer_serializer.h",
1796*da0073e9SAndroid Build Coastguard Worker        ],
1797*da0073e9SAndroid Build Coastguard Worker        compiler_flags = [
1798*da0073e9SAndroid Build Coastguard Worker            "-g0",
1799*da0073e9SAndroid Build Coastguard Worker            "-O3",
1800*da0073e9SAndroid Build Coastguard Worker            "-fexceptions",
1801*da0073e9SAndroid Build Coastguard Worker            "-frtti",
1802*da0073e9SAndroid Build Coastguard Worker            "-Wno-deprecated-declarations",
1803*da0073e9SAndroid Build Coastguard Worker        ] + (["-DFB_XPLAT_BUILD"] if not IS_OSS else []),
1804*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1805*da0073e9SAndroid Build Coastguard Worker        deps = [
1806*da0073e9SAndroid Build Coastguard Worker            ":mobile_bytecode",
1807*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_module",
1808*da0073e9SAndroid Build Coastguard Worker            C10,
1809*da0073e9SAndroid Build Coastguard Worker        ],
1810*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1811*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_deserialize",
1812*da0073e9SAndroid Build Coastguard Worker            ":mobile_bytecode",
1813*da0073e9SAndroid Build Coastguard Worker        ],
1814*da0073e9SAndroid Build Coastguard Worker    )
1815*da0073e9SAndroid Build Coastguard Worker
1816*da0073e9SAndroid Build Coastguard Worker    # TODO (qihan) delete
1817*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1818*da0073e9SAndroid Build Coastguard Worker        name = "flatbuffer_loader",
1819*da0073e9SAndroid Build Coastguard Worker        srcs = [
1820*da0073e9SAndroid Build Coastguard Worker        ],
1821*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
1822*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/flatbuffer_loader.h",
1823*da0073e9SAndroid Build Coastguard Worker        ],
1824*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags() + ["-Wno-error"],
1825*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + [
1826*da0073e9SAndroid Build Coastguard Worker            "-DUSE_KINETO",
1827*da0073e9SAndroid Build Coastguard Worker            # Need this otherwise USE_KINETO is undefed
1828*da0073e9SAndroid Build Coastguard Worker            # for mobile
1829*da0073e9SAndroid Build Coastguard Worker            "-DEDGE_PROFILER_USE_KINETO",
1830*da0073e9SAndroid Build Coastguard Worker        ] + (["-DFB_XPLAT_BUILD"] if not IS_OSS else []),
1831*da0073e9SAndroid Build Coastguard Worker        extra_flags = {
1832*da0073e9SAndroid Build Coastguard Worker            "fbandroid_compiler_flags": ["-frtti"],
1833*da0073e9SAndroid Build Coastguard Worker        },
1834*da0073e9SAndroid Build Coastguard Worker        # torch_mobile_deserialize brings in sources neccessary to read a module
1835*da0073e9SAndroid Build Coastguard Worker        # which depends on mobile module definition
1836*da0073e9SAndroid Build Coastguard Worker        # link_whole is enable so that all symbols neccessary for mobile module are compiled
1837*da0073e9SAndroid Build Coastguard Worker        # instead of only symbols used while loading; this prevents symbol
1838*da0073e9SAndroid Build Coastguard Worker        # found definied in runtime
1839*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1840*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1841*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1842*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1843*da0073e9SAndroid Build Coastguard Worker        ],
1844*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1845*da0073e9SAndroid Build Coastguard Worker        deps = [
1846*da0073e9SAndroid Build Coastguard Worker            ":mobile_bytecode",
1847*da0073e9SAndroid Build Coastguard Worker        ],
1848*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1849*da0073e9SAndroid Build Coastguard Worker            C10,
1850*da0073e9SAndroid Build Coastguard Worker        ],
1851*da0073e9SAndroid Build Coastguard Worker    )
1852*da0073e9SAndroid Build Coastguard Worker
1853*da0073e9SAndroid Build Coastguard Worker    # TODO(qihan) delete
1854*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1855*da0073e9SAndroid Build Coastguard Worker        name = "flatbuffers_serializer_jit",
1856*da0073e9SAndroid Build Coastguard Worker        compiler_flags = [
1857*da0073e9SAndroid Build Coastguard Worker            "-g0",
1858*da0073e9SAndroid Build Coastguard Worker            "-O3",
1859*da0073e9SAndroid Build Coastguard Worker            "-fexceptions",
1860*da0073e9SAndroid Build Coastguard Worker            "-frtti",
1861*da0073e9SAndroid Build Coastguard Worker            "-Wno-deprecated-declarations",
1862*da0073e9SAndroid Build Coastguard Worker        ],
1863*da0073e9SAndroid Build Coastguard Worker        headers = [
1864*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/flatbuffer_serializer_jit.h",
1865*da0073e9SAndroid Build Coastguard Worker        ],
1866*da0073e9SAndroid Build Coastguard Worker        srcs = [
1867*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/flatbuffer_serializer_jit.cpp",
1868*da0073e9SAndroid Build Coastguard Worker        ],
1869*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1870*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1871*da0073e9SAndroid Build Coastguard Worker        ],
1872*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1873*da0073e9SAndroid Build Coastguard Worker        deps = [
1874*da0073e9SAndroid Build Coastguard Worker            ":flatbuffer_loader",
1875*da0073e9SAndroid Build Coastguard Worker            ":flatbuffers_serializer_mobile",
1876*da0073e9SAndroid Build Coastguard Worker            ":torch_core",
1877*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_module",
1878*da0073e9SAndroid Build Coastguard Worker            C10,
1879*da0073e9SAndroid Build Coastguard Worker        ],
1880*da0073e9SAndroid Build Coastguard Worker    )
1881*da0073e9SAndroid Build Coastguard Worker
1882*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1883*da0073e9SAndroid Build Coastguard Worker        name = "flatbuffers_jit",
1884*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1885*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1886*da0073e9SAndroid Build Coastguard Worker            ":flatbuffer_loader",
1887*da0073e9SAndroid Build Coastguard Worker            ":flatbuffers_serializer_mobile",
1888*da0073e9SAndroid Build Coastguard Worker            ":flatbuffers_serializer_jit",
1889*da0073e9SAndroid Build Coastguard Worker        ],
1890*da0073e9SAndroid Build Coastguard Worker    )
1891*da0073e9SAndroid Build Coastguard Worker
1892*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1893*da0073e9SAndroid Build Coastguard Worker        name = "flatbuffers_mobile",
1894*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1895*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1896*da0073e9SAndroid Build Coastguard Worker            ":flatbuffer_loader",
1897*da0073e9SAndroid Build Coastguard Worker            ":flatbuffers_serializer_mobile",
1898*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_train",
1899*da0073e9SAndroid Build Coastguard Worker        ],
1900*da0073e9SAndroid Build Coastguard Worker    )
1901*da0073e9SAndroid Build Coastguard Worker
1902*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
1903*da0073e9SAndroid Build Coastguard Worker        name = "torch_supported_mobile_models",
1904*da0073e9SAndroid Build Coastguard Worker        srcs = [
1905*da0073e9SAndroid Build Coastguard Worker            "fb/supported_mobile_models/SupportedMobileModels.cpp",
1906*da0073e9SAndroid Build Coastguard Worker        ] if NOT_OSS else [],
1907*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
1908*da0073e9SAndroid Build Coastguard Worker        exported_headers = ["fb/supported_mobile_models/SupportedMobileModels.h"] if NOT_OSS else [],
1909*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags() + ["-Wno-error"],
1910*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + (["-DSYMBOLICATE_MOBILE_DEBUG_HANDLE"] if get_enable_eager_symbolication() else []),
1911*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1912*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1913*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
1914*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
1915*da0073e9SAndroid Build Coastguard Worker        ],
1916*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1917*da0073e9SAndroid Build Coastguard Worker        deps = [],
1918*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
1919*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/custom_ops/batch_box_cox:batch_box_cox",
1920*da0073e9SAndroid Build Coastguard Worker            "//xplat/caffe2/fb/custom_ops/maskrcnn:maskrcnn",
1921*da0073e9SAndroid Build Coastguard Worker        ] if NOT_OSS else [],
1922*da0073e9SAndroid Build Coastguard Worker    )
1923*da0073e9SAndroid Build Coastguard Worker
1924*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
1925*da0073e9SAndroid Build Coastguard Worker        name = "static_runtime",
1926*da0073e9SAndroid Build Coastguard Worker        srcs = [
1927*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/static/fusion.cpp",
1928*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/static/generated_ops.cpp",
1929*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/static/impl.cpp",
1930*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/static/memory_planner.cpp",
1931*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/static/native_ops.cpp",
1932*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/static/ops.cpp",
1933*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/static/passes.cpp",
1934*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/static/te_wrapper.cpp",
1935*da0073e9SAndroid Build Coastguard Worker        ],
1936*da0073e9SAndroid Build Coastguard Worker        compiler_flags = ["-fexceptions"],
1937*da0073e9SAndroid Build Coastguard Worker        labels = labels,
1938*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
1939*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
1940*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
1941*da0073e9SAndroid Build Coastguard Worker        windows_preferred_linkage = "static" if is_arvr_mode() else None,
1942*da0073e9SAndroid Build Coastguard Worker        deps = [
1943*da0073e9SAndroid Build Coastguard Worker            ":aten_cpu",
1944*da0073e9SAndroid Build Coastguard Worker            ":caffe2_headers",
1945*da0073e9SAndroid Build Coastguard Worker            ":torch_core",
1946*da0073e9SAndroid Build Coastguard Worker            C10,
1947*da0073e9SAndroid Build Coastguard Worker        ],
1948*da0073e9SAndroid Build Coastguard Worker    )
1949*da0073e9SAndroid Build Coastguard Worker
1950*da0073e9SAndroid Build Coastguard Worker    # aten_cpu and aten_native_cpu
1951*da0073e9SAndroid Build Coastguard Worker    for name, srcs in [
1952*da0073e9SAndroid Build Coastguard Worker        ("aten_cpu", jit_core_sources + aten_cpu_source_list + [
1953*da0073e9SAndroid Build Coastguard Worker            # Generated
1954*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Functions.cpp]",
1955*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Operators_0.cpp]",
1956*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Operators_1.cpp]",
1957*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Operators_2.cpp]",
1958*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Operators_3.cpp]",
1959*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Operators_4.cpp]",
1960*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[core/ATenOpList.cpp]",
1961*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[core/TensorMethods.cpp]",
1962*da0073e9SAndroid Build Coastguard Worker            # Needed by ATen/native/EmbeddingBag.cpp
1963*da0073e9SAndroid Build Coastguard Worker            "caffe2/perfkernels/embedding_lookup_idx.cc",
1964*da0073e9SAndroid Build Coastguard Worker        ]),
1965*da0073e9SAndroid Build Coastguard Worker        ("aten_native_cpu", aten_native_source_list),
1966*da0073e9SAndroid Build Coastguard Worker    ]:
1967*da0073e9SAndroid Build Coastguard Worker        fb_xplat_cxx_library(
1968*da0073e9SAndroid Build Coastguard Worker            name = name,
1969*da0073e9SAndroid Build Coastguard Worker            srcs = srcs,
1970*da0073e9SAndroid Build Coastguard Worker            header_namespace = "",
1971*da0073e9SAndroid Build Coastguard Worker            # @lint-ignore BUCKLINT
1972*da0073e9SAndroid Build Coastguard Worker            link_whole = True,
1973*da0073e9SAndroid Build Coastguard Worker            visibility = ["PUBLIC"],
1974*da0073e9SAndroid Build Coastguard Worker            deps = [
1975*da0073e9SAndroid Build Coastguard Worker                third_party("omp"),
1976*da0073e9SAndroid Build Coastguard Worker                third_party("cpuinfo"),
1977*da0073e9SAndroid Build Coastguard Worker                third_party("glog"),
1978*da0073e9SAndroid Build Coastguard Worker                third_party("XNNPACK"),
1979*da0073e9SAndroid Build Coastguard Worker                third_party("pocketfft"),
1980*da0073e9SAndroid Build Coastguard Worker            ] + select({
1981*da0073e9SAndroid Build Coastguard Worker                "DEFAULT": [],
1982*da0073e9SAndroid Build Coastguard Worker                "ovr_config//runtime:fbcode-arm64": [
1983*da0073e9SAndroid Build Coastguard Worker                    third_party("sleef_arm"),
1984*da0073e9SAndroid Build Coastguard Worker                ],
1985*da0073e9SAndroid Build Coastguard Worker            }),
1986*da0073e9SAndroid Build Coastguard Worker            compiler_flags = get_aten_compiler_flags(),
1987*da0073e9SAndroid Build Coastguard Worker            exported_preprocessor_flags = get_aten_preprocessor_flags(),
1988*da0073e9SAndroid Build Coastguard Worker            exported_deps = [
1989*da0073e9SAndroid Build Coastguard Worker                ":aten_header",
1990*da0073e9SAndroid Build Coastguard Worker                ":caffe2_headers",
1991*da0073e9SAndroid Build Coastguard Worker                ":common_core",
1992*da0073e9SAndroid Build Coastguard Worker                ":generated_aten_config_header",
1993*da0073e9SAndroid Build Coastguard Worker                ":generated_aten_headers_cpu",
1994*da0073e9SAndroid Build Coastguard Worker                ":jit_core_headers",
1995*da0073e9SAndroid Build Coastguard Worker                ":pthreadpool",
1996*da0073e9SAndroid Build Coastguard Worker                third_party("fmt"),
1997*da0073e9SAndroid Build Coastguard Worker                third_party("ruy"),
1998*da0073e9SAndroid Build Coastguard Worker                C10,
1999*da0073e9SAndroid Build Coastguard Worker                ROOT_PATH + "aten/src/ATen/native/quantized/cpu/qnnpack:pytorch_qnnpack",
2000*da0073e9SAndroid Build Coastguard Worker            ],
2001*da0073e9SAndroid Build Coastguard Worker            labels = labels,
2002*da0073e9SAndroid Build Coastguard Worker            **aten_default_args
2003*da0073e9SAndroid Build Coastguard Worker        )
2004*da0073e9SAndroid Build Coastguard Worker
2005*da0073e9SAndroid Build Coastguard Worker    fb_xplat_cxx_library(
2006*da0073e9SAndroid Build Coastguard Worker        name = "lean_runtime_with_flatbuffer",
2007*da0073e9SAndroid Build Coastguard Worker        srcs = [
2008*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/DeprecatedTypePropertiesRegistry.cpp",
2009*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/import.cpp",
2010*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/module.cpp",
2011*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/observer.cpp",
2012*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/import_read.cpp",
2013*da0073e9SAndroid Build Coastguard Worker        ],
2014*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
2015*da0073e9SAndroid Build Coastguard Worker        exported_headers = subdir_glob(
2016*da0073e9SAndroid Build Coastguard Worker            [
2017*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/ir/*.h"),
2018*da0073e9SAndroid Build Coastguard Worker                ("", "caffe2/serialize/*.h"),
2019*da0073e9SAndroid Build Coastguard Worker                ("", "caffe2/utils/*.h"),
2020*da0073e9SAndroid Build Coastguard Worker                ("", "caffe2/core/*.h"),
2021*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/*.h"),
2022*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/api/include/torch/*.h"),
2023*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/autograd/*.h"),
2024*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/autograd/*/*.h"),
2025*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/api/*.h"),
2026*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/backends/*.h"),
2027*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/mobile/*.h"),
2028*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/runtime/*.h"),
2029*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/passes/*.h"),
2030*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/python/*.h"),
2031*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/frontend/*.h"),
2032*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/jit/serialization/*.h"),
2033*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/profiler/**/*.h"),
2034*da0073e9SAndroid Build Coastguard Worker                ("", "torch/csrc/utils/*.h"),
2035*da0073e9SAndroid Build Coastguard Worker                ("", "aten/src/ATen/quantized/*.h"),
2036*da0073e9SAndroid Build Coastguard Worker            ] + ([
2037*da0073e9SAndroid Build Coastguard Worker                ("third_party/miniz-2.1.0", "*.h"),
2038*da0073e9SAndroid Build Coastguard Worker            ] if NOT_OSS else []),
2039*da0073e9SAndroid Build Coastguard Worker            exclude = [
2040*da0073e9SAndroid Build Coastguard Worker                "torch/csrc/jit/serialization/mobile_bytecode_generated.h",
2041*da0073e9SAndroid Build Coastguard Worker            ],
2042*da0073e9SAndroid Build Coastguard Worker        ),
2043*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags() + select({
2044*da0073e9SAndroid Build Coastguard Worker            "DEFAULT": [],
2045*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:xtensa-xos": [
2046*da0073e9SAndroid Build Coastguard Worker                "-fdata-sections",
2047*da0073e9SAndroid Build Coastguard Worker                "-ffunction-sections",
2048*da0073e9SAndroid Build Coastguard Worker            ],
2049*da0073e9SAndroid Build Coastguard Worker        }),
2050*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + [
2051*da0073e9SAndroid Build Coastguard Worker            "-DMIN_EDGE_RUNTIME",
2052*da0073e9SAndroid Build Coastguard Worker        ],
2053*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
2054*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
2055*da0073e9SAndroid Build Coastguard Worker        ] + select({
2056*da0073e9SAndroid Build Coastguard Worker            "DEFAULT": [],
2057*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:macos": [
2058*da0073e9SAndroid Build Coastguard Worker                "-dead_strip",
2059*da0073e9SAndroid Build Coastguard Worker            ],
2060*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:xtensa-xos": [
2061*da0073e9SAndroid Build Coastguard Worker                "-Wl,--gc-sections",
2062*da0073e9SAndroid Build Coastguard Worker            ],
2063*da0073e9SAndroid Build Coastguard Worker        }),
2064*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
2065*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
2066*da0073e9SAndroid Build Coastguard Worker            ":lean_runtime_with_tensor",
2067*da0073e9SAndroid Build Coastguard Worker        ],
2068*da0073e9SAndroid Build Coastguard Worker    )
2069*da0073e9SAndroid Build Coastguard Worker
2070*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
2071*da0073e9SAndroid Build Coastguard Worker        name = "lean_runtime_with_tensor",
2072*da0073e9SAndroid Build Coastguard Worker        srcs = [
2073*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/Context.cpp",
2074*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/EmptyTensor.cpp",
2075*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/Utils.cpp",
2076*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/detail/CUDAHooksInterface.cpp",
2077*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/detail/PrivateUse1HooksInterface.cpp",
2078*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Operators_0.cpp]",
2079*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Operators_1.cpp]",
2080*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Operators_2.cpp]",
2081*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Operators_3.cpp]",
2082*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[Operators_4.cpp]",
2083*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[core/TensorMethods.cpp]",
2084*da0073e9SAndroid Build Coastguard Worker        ],
2085*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
2086*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
2087*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/custom_operator.h",
2088*da0073e9SAndroid Build Coastguard Worker            ":gen_aten[core/TensorBody.h]",
2089*da0073e9SAndroid Build Coastguard Worker        ],
2090*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags() + select({
2091*da0073e9SAndroid Build Coastguard Worker            "DEFAULT": [],
2092*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:xtensa-xos": [
2093*da0073e9SAndroid Build Coastguard Worker                "-fdata-sections",
2094*da0073e9SAndroid Build Coastguard Worker                "-ffunction-sections",
2095*da0073e9SAndroid Build Coastguard Worker            ],
2096*da0073e9SAndroid Build Coastguard Worker        }),
2097*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + ["-DMIN_EDGE_RUNTIME"] + select({
2098*da0073e9SAndroid Build Coastguard Worker            "DEFAULT": [],
2099*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:xtensa-xos": [
2100*da0073e9SAndroid Build Coastguard Worker                "-Dthread_local=",
2101*da0073e9SAndroid Build Coastguard Worker            ],
2102*da0073e9SAndroid Build Coastguard Worker        }),
2103*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
2104*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
2105*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
2106*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
2107*da0073e9SAndroid Build Coastguard Worker        ],
2108*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
2109*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
2110*da0073e9SAndroid Build Coastguard Worker            ":generated_aten_config_header",
2111*da0073e9SAndroid Build Coastguard Worker            ":lean_runtime_with_op",
2112*da0073e9SAndroid Build Coastguard Worker            ":aten_header",
2113*da0073e9SAndroid Build Coastguard Worker            C10,
2114*da0073e9SAndroid Build Coastguard Worker        ] + (["//xplat/caffe2/fb/embedded:experimental"] if NOT_OSS else []),
2115*da0073e9SAndroid Build Coastguard Worker    )
2116*da0073e9SAndroid Build Coastguard Worker
2117*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
2118*da0073e9SAndroid Build Coastguard Worker        name = "lean_runtime_with_op",
2119*da0073e9SAndroid Build Coastguard Worker        srcs = [
2120*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/SequenceNumber.cpp",
2121*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/boxing/KernelFunction.cpp",
2122*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/custom_class.cpp",
2123*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/dispatch/DispatchKeyExtractor.cpp",
2124*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/dispatch/Dispatcher.cpp",
2125*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/dispatch/ObservedOperators.cpp",
2126*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/dispatch/OperatorEntry.cpp",
2127*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/PythonOpRegistrationTrampoline.cpp",
2128*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/interned_strings.cpp",
2129*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/library.cpp",
2130*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/op_registration/infer_schema.cpp",
2131*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/function_schema.cpp",
2132*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/operator_name.cpp",
2133*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/register_symbols.cpp",
2134*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/tensor_type.cpp",
2135*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/union_type.cpp",
2136*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/record_function.cpp",
2137*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/frontend/edit_distance.cpp",
2138*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/frontend/error_report.cpp",
2139*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/frontend/function_schema_parser.cpp",
2140*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/frontend/lexer.cpp",
2141*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/frontend/schema_type_parser.cpp",
2142*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/frontend/source_range.cpp",
2143*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/frontend/strtod.cpp",
2144*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/parse_operators.cpp",
2145*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/prim_ops_registery.cpp",
2146*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/operator.cpp",
2147*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/slice_indices_adjust.cpp",
2148*da0073e9SAndroid Build Coastguard Worker        ],
2149*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
2150*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
2151*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/frontend/edit_distance.h",
2152*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/slice_indices_adjust.h",
2153*da0073e9SAndroid Build Coastguard Worker        ],
2154*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags() + select({
2155*da0073e9SAndroid Build Coastguard Worker            "DEFAULT": [],
2156*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:xtensa-xos": [
2157*da0073e9SAndroid Build Coastguard Worker                "-fdata-sections",
2158*da0073e9SAndroid Build Coastguard Worker                "-ffunction-sections",
2159*da0073e9SAndroid Build Coastguard Worker            ],
2160*da0073e9SAndroid Build Coastguard Worker        }),
2161*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + ["-DMIN_EDGE_RUNTIME"] + select({
2162*da0073e9SAndroid Build Coastguard Worker            "DEFAULT": [],
2163*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:xtensa-xos": [
2164*da0073e9SAndroid Build Coastguard Worker                "-Dthread_local=",
2165*da0073e9SAndroid Build Coastguard Worker            ],
2166*da0073e9SAndroid Build Coastguard Worker        }),
2167*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
2168*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
2169*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
2170*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
2171*da0073e9SAndroid Build Coastguard Worker        ],
2172*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
2173*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
2174*da0073e9SAndroid Build Coastguard Worker            ":min_runtime_lib",
2175*da0073e9SAndroid Build Coastguard Worker            C10,
2176*da0073e9SAndroid Build Coastguard Worker        ],
2177*da0073e9SAndroid Build Coastguard Worker    )
2178*da0073e9SAndroid Build Coastguard Worker
2179*da0073e9SAndroid Build Coastguard Worker    pt_xplat_cxx_library(
2180*da0073e9SAndroid Build Coastguard Worker        name = "min_runtime_lib",
2181*da0073e9SAndroid Build Coastguard Worker        srcs = [
2182*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/ScalarOps.cpp",
2183*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/Dict.cpp",
2184*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/List.cpp",
2185*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/class_type.cpp",
2186*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/dynamic_type.cpp",
2187*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/ivalue.cpp",
2188*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/type.cpp",
2189*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/core/type_factory.cpp",
2190*da0073e9SAndroid Build Coastguard Worker            "aten/src/ATen/native/prim_native_functions.cpp",
2191*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/function.cpp",
2192*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/interpreter.cpp",
2193*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/parse_bytecode.cpp",
2194*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/promoted_prim_ops.cpp",
2195*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/register_ops_common_utils.cpp",
2196*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/type_parser.cpp",
2197*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/instruction.cpp",
2198*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/jit_exception.cpp",
2199*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/vararg_functions.cpp",
2200*da0073e9SAndroid Build Coastguard Worker        ],
2201*da0073e9SAndroid Build Coastguard Worker        header_namespace = "",
2202*da0073e9SAndroid Build Coastguard Worker        exported_headers = [
2203*da0073e9SAndroid Build Coastguard Worker            "caffe2/serialize/versions.h",
2204*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/backends/backend_exception.h",
2205*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/mobile/register_ops_common_utils.h",
2206*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/instruction.h",
2207*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/jit_exception.h",
2208*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/operator.h",
2209*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/operator_options.h",
2210*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/runtime/vararg_functions.h",
2211*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/import_export_constants.h",
2212*da0073e9SAndroid Build Coastguard Worker            "torch/csrc/jit/serialization/import_export_functions.h",
2213*da0073e9SAndroid Build Coastguard Worker        ],
2214*da0073e9SAndroid Build Coastguard Worker        compiler_flags = get_pt_compiler_flags() + select({
2215*da0073e9SAndroid Build Coastguard Worker            "DEFAULT": [],
2216*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:xtensa-xos": [
2217*da0073e9SAndroid Build Coastguard Worker                "-fexceptions",
2218*da0073e9SAndroid Build Coastguard Worker                "-fdata-sections",
2219*da0073e9SAndroid Build Coastguard Worker                "-ffunction-sections",
2220*da0073e9SAndroid Build Coastguard Worker            ],
2221*da0073e9SAndroid Build Coastguard Worker        }),
2222*da0073e9SAndroid Build Coastguard Worker        exported_preprocessor_flags = get_pt_preprocessor_flags() + ["-DMIN_EDGE_RUNTIME"] + select({
2223*da0073e9SAndroid Build Coastguard Worker            "DEFAULT": [],
2224*da0073e9SAndroid Build Coastguard Worker            "ovr_config//os:xtensa-xos": [
2225*da0073e9SAndroid Build Coastguard Worker                "-Dthread_local=",
2226*da0073e9SAndroid Build Coastguard Worker            ],
2227*da0073e9SAndroid Build Coastguard Worker        }),
2228*da0073e9SAndroid Build Coastguard Worker        # @lint-ignore BUCKLINT link_whole
2229*da0073e9SAndroid Build Coastguard Worker        link_whole = True,
2230*da0073e9SAndroid Build Coastguard Worker        linker_flags = [
2231*da0073e9SAndroid Build Coastguard Worker            "-Wl,--no-as-needed",
2232*da0073e9SAndroid Build Coastguard Worker        ],
2233*da0073e9SAndroid Build Coastguard Worker        visibility = ["PUBLIC"],
2234*da0073e9SAndroid Build Coastguard Worker        exported_deps = [
2235*da0073e9SAndroid Build Coastguard Worker            ":aten_header",
2236*da0073e9SAndroid Build Coastguard Worker            ":generated_aten_headers_cpu",
2237*da0073e9SAndroid Build Coastguard Worker            ":jit_core_headers",
2238*da0073e9SAndroid Build Coastguard Worker            ":torch_mobile_headers",
2239*da0073e9SAndroid Build Coastguard Worker            C10,
2240*da0073e9SAndroid Build Coastguard Worker        ],
2241*da0073e9SAndroid Build Coastguard Worker    )
2242