load("//tools/build_defs:glob_defs.bzl", "subdir_glob") load("//tools/build_defs:fb_xplat_genrule.bzl", "fb_xplat_genrule") load( ":build_variables.bzl", "aten_cpu_source_list", "aten_native_source_list", "core_sources_common", "jit_core_headers", "jit_core_sources", "libtorch_profiler_sources", ) load( ":pt_defs.oss.bzl", "USED_PT_BACKENDS", "build_aten_cpu", "gen_aten_files", "gen_aten_libtorch_files", "get_aten_codegen_extra_params", "get_pt_compiler_flags", "get_pt_preprocessor_flags", "pt_operator_library", "get_pt_ops_deps", "aten_ufunc_generated_all_cpu_sources", "TEMPLATE_SOURCE_LIST", ) load(":buckbuild.bzl", "define_buck_targets", ) define_buck_targets() cxx_library( name = "pthreadpool", srcs = ['caffe2/utils/threadpool/pthreadpool.cc', 'caffe2/utils/threadpool/pthreadpool_impl.cc', 'caffe2/utils/threadpool/pthreadpool-cpp.cc', 'caffe2/utils/threadpool/thread_pool_guard.cpp', 'caffe2/utils/threadpool/ThreadPool.cc'], deps = [':caffe2_headers', '//third_party:cpuinfo', '//third_party:glog', '//c10:c10', '//third_party:FXdiv'], exported_deps = ['//third_party:pthreadpool'], compiler_flags = ['-Wno-unused-function'], preferred_linkage = "static", exported_headers = subdir_glob([("", "caffe2/utils/threadpool/*.h")]), exported_preprocessor_flags = ['-DUSE_PTHREADPOOL'], header_namespace = "", headers = [], link_whole = True, platform_preprocessor_flags = [['windows', ['-D_WINDOWS', '-D_WIN32', '-DWIN32', '-DNOMINMAX', '-D_CRT_SECURE_NO_WARNINGS', '-D_USE_MATH_DEFINES']], ['windows.*64$', ['-D_WIN64']]], visibility = ['PUBLIC'], ) cxx_library( name = "caffe2_headers", deps = ['//c10:c10'], exported_headers = subdir_glob( [ ("", "caffe2/**/*.h"), ("", "binaries/**/*.h"), ("modules", "**/*.h"), ("aten/src", "ATen/core/**/*.h"), ], exclude = [ "caffe2/fb/**/*.h", "caffe2/mobile/contrib/libopencl-stub/**/*.h", "caffe2/mobile/contrib/libvulkan-stub/**/*.h", "caffe2/mobile/contrib/nnapi/**/*.h", "caffe2/mobile/fb/binary/**/*.h", "caffe2/mobile/fb/snpe_so/**/*.h", "caffe2/mobile/fb/boltnn/bolt_lib/include/**/*.h", "caffe2/mobile/contrib/snpe/**/*.h", "caffe2/mobile/fb/qpl/jni/QuickPerformanceLogger.h", "caffe2/share/fb/x3d/ldi/*.h", "**/*.pb.h", ], ), compiler_flags = ['-Os', '-fexceptions', '-frtti', '-Wno-shadow', '-Wno-unknown-pragmas', '-Wno-unused-variable', '-Wno-sign-compare', '-Icaffe2', '-Imodules', '-DEIGEN_NO_DEBUG', '-DCAFFE2_USE_LITE_PROTO', '-DCAFFE2_USE_GOOGLE_GLOG', '-DCAFFE2_RNN_NO_TEXT_FORMAT', '-DGEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK=1', '-DCAFFE2_IS_XPLAT_BUILD', '-DSTRIP_ERROR_MESSAGES', '-DUSE_INTERNAL_PTHREADPOOL_IMPL', '-DCAFFE2_USE_HPTT'], preferred_linkage = "static", platform_preprocessor_flags = [['windows', ['-D_WINDOWS', '-D_WIN32', '-DWIN32', '-DNOMINMAX', '-D_CRT_SECURE_NO_WARNINGS', '-D_USE_MATH_DEFINES']], ['windows.*64$', ['-D_WIN64']]], preprocessor_flags = ['-DUSE_INTERNAL_PTHREADPOOL_IMPL'], visibility = ['PUBLIC'], ) cxx_library( name = "common_core", srcs = ['caffe2/core/common.cc'], deps = [':caffe2_headers', '//c10:c10'], exported_deps = [], compiler_flags = ['-frtti', '-Os', '-Wno-unknown-pragmas', '-Wno-write-strings', '-Wno-unused-variable', '-Wno-unused-function', '-Wno-deprecated-declarations', '-Wno-shadow', '-Wno-global-constructors', '-Wno-missing-prototypes', '-std=gnu++17'], preferred_linkage = "static", header_namespace = "caffe2", headers = [], link_whole = True, platform_preprocessor_flags = [['windows', ['-D_WINDOWS', '-D_WIN32', '-DWIN32', '-DNOMINMAX', '-D_CRT_SECURE_NO_WARNINGS', '-D_USE_MATH_DEFINES']], ['windows.*64$', ['-D_WIN64']]], visibility = ['PUBLIC'], ) build_aten_cpu( name = "aten_cpu", srcs = jit_core_sources + aten_cpu_source_list + [ # Generated ":gen_aten[Functions.cpp]", ":gen_aten[Operators_0.cpp]", ":gen_aten[Operators_1.cpp]", ":gen_aten[Operators_2.cpp]", ":gen_aten[Operators_3.cpp]", ":gen_aten[Operators_4.cpp]", ":gen_aten[core/ATenOpList.cpp]", ":gen_aten[core/TensorMethods.cpp]", ] + [ # Needed by ATen/native/EmbeddingBag.cpp "caffe2/perfkernels/embedding_lookup_idx.cc", ], ) fb_xplat_genrule( name = "generate_aten_config", srcs = [ "aten/src/ATen/Config.h.in", ], cmd = " ".join([ "sed", "-e 's/@AT_MKLDNN_ENABLED@/ATEN_MKLDNN_ENABLED_FBXPLAT/g'", "-e 's/@AT_MKL_ENABLED@/ATEN_MKL_ENABLED_FBXPLAT/g'", "-e 's/@AT_MKL_SEQUENTIAL@/ATEN_MKL_SEQUENTIAL_FBXPLAT/g'", "-e 's/@AT_FFTW_ENABLED@/0/g'", "-e 's/@AT_POCKETFFT_ENABLED@/0/g'", "-e 's/@AT_NNPACK_ENABLED@/ATEN_NNPACK_ENABLED_FBXPLAT/g'", "-e 's/@CAFFE2_STATIC_LINK_CUDA_INT@/CAFFE2_STATIC_LINK_CUDA_FBXPLAT/g'", "-e 's/@AT_BUILD_WITH_BLAS@/USE_BLAS_FBXPLAT/g'", "-e 's/@AT_PARALLEL_OPENMP@/AT_PARALLEL_OPENMP_FBXPLAT/g'", "-e 's/@AT_PARALLEL_NATIVE@/AT_PARALLEL_NATIVE_FBXPLAT/g'", "-e 's/@AT_PARALLEL_NATIVE_TBB@/AT_PARALLEL_NATIVE_TBB_FBXPLAT/g'", "-e 's/@AT_BUILD_WITH_LAPACK@/USE_LAPACK_FBXPLAT/g'", "-e 's/@AT_BLAS_F2C@/AT_BLAS_F2C_FBXPLAT/g'", "-e 's/@AT_BLAS_USE_CBLAS_DOT@/AT_BLAS_USE_CBLAS_DOT_FBXPLAT/g'", "aten/src/ATen/Config.h.in > $OUT/Config.h", ]), outs = { "Config.h": ["Config.h"], }, default_outs = ["."], ) gen_aten_files( name = "gen_aten", extra_flags = get_aten_codegen_extra_params(USED_PT_BACKENDS), visibility = ["PUBLIC"], ) ATEN_EXPORTED_HEADERS = { "CPUFunctions.h": ":gen_aten[CPUFunctions.h]", "CPUFunctions_inl.h": ":gen_aten[CPUFunctions_inl.h]", "CompositeExplicitAutogradFunctions.h": ":gen_aten[CompositeExplicitAutogradFunctions.h]", "CompositeExplicitAutogradFunctions_inl.h": ":gen_aten[CompositeExplicitAutogradFunctions_inl.h]", "CompositeImplicitAutogradFunctions.h": ":gen_aten[CompositeImplicitAutogradFunctions.h]", "CompositeImplicitAutogradFunctions_inl.h": ":gen_aten[CompositeImplicitAutogradFunctions_inl.h]", "FunctionalInverses.h": ":gen_aten[FunctionalInverses.h]", "Functions.h": ":gen_aten[Functions.h]", "MethodOperators.h": ":gen_aten[MethodOperators.h]", "NativeFunctions.h": ":gen_aten[NativeFunctions.h]", "NativeMetaFunctions.h": ":gen_aten[NativeMetaFunctions.h]", "Operators.h": ":gen_aten[Operators.h]", "RedispatchFunctions.h": ":gen_aten[RedispatchFunctions.h]", "core/TensorBody.h": ":gen_aten[core/TensorBody.h]", "core/aten_interned_strings.h": ":gen_aten[core/aten_interned_strings.h]", } cxx_library( name = "generated_aten_headers_cpu", header_namespace = "ATen", exported_headers = ATEN_EXPORTED_HEADERS, ) gen_aten_libtorch_files(name = "gen_aten_libtorch") cxx_library( name = "torch_mobile_observer", srcs = [ "torch/csrc/jit/mobile/observer.cpp", #"torch/fb/observers/MobileObserverUtil.cpp", ], header_namespace = "", exported_headers = subdir_glob( [ ("", "torch/csrc/jit/mobile/observer.h"), #("", "torch/fb/observers/ObserverUtil.h"), #("", "torch/fb/observers/MobileObserverUtil.h"), ], ), visibility = ["PUBLIC"], deps = [ "//c10:c10", ], ) python_library( name = "aten_code_template", srcs = subdir_glob([ ("aten", "src/ATen/code_template.py"), ]), base_module = "", visibility = ["PUBLIC"], ) cxx_library( name = "torch_common", srcs = core_sources_common, compiler_flags = get_pt_compiler_flags(), exported_preprocessor_flags = get_pt_preprocessor_flags(), link_whole = True, visibility = ["PUBLIC"], deps = [ ":aten_cpu", ":generated-autograd-headers", ":torch_headers", "//third_party:glog", "//c10:c10", ], ) cxx_library( name = "torch_mobile_deserialize_common", srcs = [ "torch/csrc/jit/mobile/parse_bytecode.cpp", "torch/csrc/jit/mobile/parse_operators.cpp", "torch/csrc/jit/mobile/upgrader_mobile.cpp", "torch/csrc/jit/serialization/import_read.cpp", "torch/csrc/jit/serialization/unpickler.cpp", ], header_namespace = "", exported_headers = [ "torch/csrc/jit/serialization/import_read.h", "torch/csrc/jit/serialization/unpickler.h", ], compiler_flags = get_pt_compiler_flags(), link_whole = True, linker_flags = [ "-Wl,--no-as-needed", ], visibility = ["PUBLIC"], exported_deps = [ ":aten_cpu", ":caffe2_headers", ":caffe2_serialize", ":torch_common", ":torch_headers", ":torch_mobile_headers", ":torch_mobile_module", ":torch_mobile_observer", "//third_party:glog", "//c10:c10", ], ) cxx_library( name = "caffe2_serialize", srcs = [ "caffe2/serialize/file_adapter.cc", "caffe2/serialize/inline_container.cc", "caffe2/serialize/istream_adapter.cc", "caffe2/serialize/read_adapter_interface.cc", ], visibility = ["PUBLIC"], deps = [ ":caffe2_headers", "//third_party:glog", "//c10:c10", "//third_party:miniz", ], ) cxx_library( name = "torch_mobile_deserialize", srcs = [ "torch/csrc/jit/mobile/import.cpp", ], header_namespace = "", exported_headers = [ "torch/csrc/jit/mobile/import.h", ], compiler_flags = get_pt_compiler_flags(), link_whole = True, linker_flags = [ "-Wl,--no-as-needed", ], visibility = ["PUBLIC"], exported_deps = [ ":aten_cpu", ":caffe2_headers", ":caffe2_serialize", ":torch_common", ":torch_headers", ":torch_mobile_headers", ":torch_mobile_module", ":torch_mobile_observer", "//third_party:glog", "//c10:c10", ":torch_mobile_deserialize_common", ], ) cxx_library( name = "torch_mobile_module", srcs = [ "torch/csrc/jit/mobile/function.cpp", "torch/csrc/jit/mobile/interpreter.cpp", "torch/csrc/jit/mobile/module.cpp", ], header_namespace = "", exported_headers = [], compiler_flags = get_pt_compiler_flags(), link_whole = True, linker_flags = [ "-Wl,--no-as-needed", ], visibility = ["PUBLIC"], exported_deps = [ ":aten_cpu", ":caffe2_headers", ":torch_common", ":torch_headers", ":torch_mobile_headers", ":torch_mobile_observer", "//third_party:glog", "//c10:c10", ], ) cxx_library( name = "torch_mobile_core", srcs = [], header_namespace = "", exported_headers = [], compiler_flags = get_pt_compiler_flags(), exported_preprocessor_flags = get_pt_preprocessor_flags(), link_whole = True, linker_flags = [ "-Wl,--no-as-needed", # "-ldl", ], visibility = ["PUBLIC"], deps = [ ":generated-autograd-headers", ":torch_mobile_observer", ":torch_mobile_headers", ], exported_deps = [ ":aten_cpu", ":torch_common", ":torch_mobile_deserialize", ], ) pt_operator_library( name = "torch_mobile_ops_full_dev", check_decl = False, include_all_operators = True, ) cxx_library( name = "torch_mobile_all_ops", visibility = ["PUBLIC"], deps = get_pt_ops_deps( name = "pt_ops_full", train = False, deps = [ ":torch_mobile_ops_full_dev", ], enable_flatbuffer = False, ), ) python_library( name = "gen_oplist_lib", srcs = subdir_glob([ ("tools/code_analyzer", "gen_oplist.py"), ("tools/code_analyzer", "gen_op_registration_allowlist.py"), ]), base_module = "", deps = [ "//third_party:pyyaml", "//tools/lite_interpreter:gen_selected_mobile_ops_header", "//torchgen:torchgen", ], ) python_binary( name = "gen_oplist", main_module = "gen_oplist", visibility = ["PUBLIC"], deps = [ ":gen_oplist_lib", ], ) python_library( name = "gen_operators_yaml_lib", srcs = subdir_glob([ ("tools/code_analyzer", "gen_operators_yaml.py"), ("tools/code_analyzer", "gen_op_registration_allowlist.py"), ]), base_module = "", deps = [ "//third_party:pyyaml", "//torchgen:torchgen", ], ) python_binary( name = "gen_aten_bin", main_module = "torchgen.gen", visibility = [ "PUBLIC", ], deps = [ "//torchgen:torchgen", ], ) python_binary( name = "gen_operators_yaml", main_module = "gen_operators_yaml", visibility = ["PUBLIC"], deps = [ ":gen_operators_yaml_lib", ], ) cxx_binary( name = 'ptmobile_benchmark', srcs = [ 'binaries/speed_benchmark_torch.cc', ], compiler_flags = [ "-fexceptions", "-frtti", "-Wno-deprecated-declarations", ], preprocessor_flags = [ "-DBUILD_LITE_INTERPRETER", ], platform_linker_flags = [ ( "^linux.*$", [ "-Wl,--no-as-needed", "-ldl", "-pthread", ], ), ], deps = [ ":torch_mobile_core", ":torch_mobile_all_ops", "//c10:c10", ], ) filegroup( name = "templated_selective_build_srcs", # NB: no glob here, there are generated targets in this list! srcs = glob(TEMPLATE_SOURCE_LIST) + aten_ufunc_generated_all_cpu_sources(":gen_aten[{}]"), visibility = [ "PUBLIC", ], )