1*da0073e9SAndroid Build Coastguard Worker# Welcome to the PyTorch setup.py. 2*da0073e9SAndroid Build Coastguard Worker# Environment variables you are probably interested in: 3*da0073e9SAndroid Build Coastguard Worker# 4*da0073e9SAndroid Build Coastguard Worker# DEBUG 5*da0073e9SAndroid Build Coastguard Worker# build with -O0 and -g (debug symbols) 6*da0073e9SAndroid Build Coastguard Worker# 7*da0073e9SAndroid Build Coastguard Worker# REL_WITH_DEB_INFO 8*da0073e9SAndroid Build Coastguard Worker# build with optimizations and -g (debug symbols) 9*da0073e9SAndroid Build Coastguard Worker# 10*da0073e9SAndroid Build Coastguard Worker# USE_CUSTOM_DEBINFO="path/to/file1.cpp;path/to/file2.cpp" 11*da0073e9SAndroid Build Coastguard Worker# build with debug info only for specified files 12*da0073e9SAndroid Build Coastguard Worker# 13*da0073e9SAndroid Build Coastguard Worker# MAX_JOBS 14*da0073e9SAndroid Build Coastguard Worker# maximum number of compile jobs we should use to compile your code 15*da0073e9SAndroid Build Coastguard Worker# 16*da0073e9SAndroid Build Coastguard Worker# USE_CUDA=0 17*da0073e9SAndroid Build Coastguard Worker# disables CUDA build 18*da0073e9SAndroid Build Coastguard Worker# 19*da0073e9SAndroid Build Coastguard Worker# CFLAGS 20*da0073e9SAndroid Build Coastguard Worker# flags to apply to both C and C++ files to be compiled (a quirk of setup.py 21*da0073e9SAndroid Build Coastguard Worker# which we have faithfully adhered to in our build system is that CFLAGS 22*da0073e9SAndroid Build Coastguard Worker# also applies to C++ files (unless CXXFLAGS is set), in contrast to the 23*da0073e9SAndroid Build Coastguard Worker# default behavior of autogoo and cmake build systems.) 24*da0073e9SAndroid Build Coastguard Worker# 25*da0073e9SAndroid Build Coastguard Worker# CC 26*da0073e9SAndroid Build Coastguard Worker# the C/C++ compiler to use 27*da0073e9SAndroid Build Coastguard Worker# 28*da0073e9SAndroid Build Coastguard Worker# Environment variables for feature toggles: 29*da0073e9SAndroid Build Coastguard Worker# 30*da0073e9SAndroid Build Coastguard Worker# DEBUG_CUDA=1 31*da0073e9SAndroid Build Coastguard Worker# if used in conjunction with DEBUG or REL_WITH_DEB_INFO, will also 32*da0073e9SAndroid Build Coastguard Worker# build CUDA kernels with -lineinfo --source-in-ptx. Note that 33*da0073e9SAndroid Build Coastguard Worker# on CUDA 12 this may cause nvcc to OOM, so this is disabled by default. 34*da0073e9SAndroid Build Coastguard Worker 35*da0073e9SAndroid Build Coastguard Worker# USE_CUDNN=0 36*da0073e9SAndroid Build Coastguard Worker# disables the cuDNN build 37*da0073e9SAndroid Build Coastguard Worker# 38*da0073e9SAndroid Build Coastguard Worker# USE_CUSPARSELT=0 39*da0073e9SAndroid Build Coastguard Worker# disables the cuSPARSELt build 40*da0073e9SAndroid Build Coastguard Worker# 41*da0073e9SAndroid Build Coastguard Worker# USE_CUDSS=0 42*da0073e9SAndroid Build Coastguard Worker# disables the cuDSS build 43*da0073e9SAndroid Build Coastguard Worker# 44*da0073e9SAndroid Build Coastguard Worker# USE_CUFILE=0 45*da0073e9SAndroid Build Coastguard Worker# disables the cuFile build 46*da0073e9SAndroid Build Coastguard Worker# 47*da0073e9SAndroid Build Coastguard Worker# USE_FBGEMM=0 48*da0073e9SAndroid Build Coastguard Worker# disables the FBGEMM build 49*da0073e9SAndroid Build Coastguard Worker# 50*da0073e9SAndroid Build Coastguard Worker# USE_KINETO=0 51*da0073e9SAndroid Build Coastguard Worker# disables usage of libkineto library for profiling 52*da0073e9SAndroid Build Coastguard Worker# 53*da0073e9SAndroid Build Coastguard Worker# USE_NUMPY=0 54*da0073e9SAndroid Build Coastguard Worker# disables the NumPy build 55*da0073e9SAndroid Build Coastguard Worker# 56*da0073e9SAndroid Build Coastguard Worker# BUILD_TEST=0 57*da0073e9SAndroid Build Coastguard Worker# disables the test build 58*da0073e9SAndroid Build Coastguard Worker# 59*da0073e9SAndroid Build Coastguard Worker# USE_MKLDNN=0 60*da0073e9SAndroid Build Coastguard Worker# disables use of MKLDNN 61*da0073e9SAndroid Build Coastguard Worker# 62*da0073e9SAndroid Build Coastguard Worker# USE_MKLDNN_ACL 63*da0073e9SAndroid Build Coastguard Worker# enables use of Compute Library backend for MKLDNN on Arm; 64*da0073e9SAndroid Build Coastguard Worker# USE_MKLDNN must be explicitly enabled. 65*da0073e9SAndroid Build Coastguard Worker# 66*da0073e9SAndroid Build Coastguard Worker# MKLDNN_CPU_RUNTIME 67*da0073e9SAndroid Build Coastguard Worker# MKL-DNN threading mode: TBB or OMP (default) 68*da0073e9SAndroid Build Coastguard Worker# 69*da0073e9SAndroid Build Coastguard Worker# USE_STATIC_MKL 70*da0073e9SAndroid Build Coastguard Worker# Prefer to link with MKL statically - Unix only 71*da0073e9SAndroid Build Coastguard Worker# USE_ITT=0 72*da0073e9SAndroid Build Coastguard Worker# disable use of Intel(R) VTune Profiler's ITT functionality 73*da0073e9SAndroid Build Coastguard Worker# 74*da0073e9SAndroid Build Coastguard Worker# USE_NNPACK=0 75*da0073e9SAndroid Build Coastguard Worker# disables NNPACK build 76*da0073e9SAndroid Build Coastguard Worker# 77*da0073e9SAndroid Build Coastguard Worker# USE_DISTRIBUTED=0 78*da0073e9SAndroid Build Coastguard Worker# disables distributed (c10d, gloo, mpi, etc.) build 79*da0073e9SAndroid Build Coastguard Worker# 80*da0073e9SAndroid Build Coastguard Worker# USE_TENSORPIPE=0 81*da0073e9SAndroid Build Coastguard Worker# disables distributed Tensorpipe backend build 82*da0073e9SAndroid Build Coastguard Worker# 83*da0073e9SAndroid Build Coastguard Worker# USE_GLOO=0 84*da0073e9SAndroid Build Coastguard Worker# disables distributed gloo backend build 85*da0073e9SAndroid Build Coastguard Worker# 86*da0073e9SAndroid Build Coastguard Worker# USE_MPI=0 87*da0073e9SAndroid Build Coastguard Worker# disables distributed MPI backend build 88*da0073e9SAndroid Build Coastguard Worker# 89*da0073e9SAndroid Build Coastguard Worker# USE_SYSTEM_NCCL=0 90*da0073e9SAndroid Build Coastguard Worker# disables use of system-wide nccl (we will use our submoduled 91*da0073e9SAndroid Build Coastguard Worker# copy in third_party/nccl) 92*da0073e9SAndroid Build Coastguard Worker# 93*da0073e9SAndroid Build Coastguard Worker# USE_OPENMP=0 94*da0073e9SAndroid Build Coastguard Worker# disables use of OpenMP for parallelization 95*da0073e9SAndroid Build Coastguard Worker# 96*da0073e9SAndroid Build Coastguard Worker# USE_FLASH_ATTENTION=0 97*da0073e9SAndroid Build Coastguard Worker# disables building flash attention for scaled dot product attention 98*da0073e9SAndroid Build Coastguard Worker# 99*da0073e9SAndroid Build Coastguard Worker# USE_MEM_EFF_ATTENTION=0 100*da0073e9SAndroid Build Coastguard Worker# disables building memory efficient attention for scaled dot product attention 101*da0073e9SAndroid Build Coastguard Worker# 102*da0073e9SAndroid Build Coastguard Worker# BUILD_BINARY 103*da0073e9SAndroid Build Coastguard Worker# enables the additional binaries/ build 104*da0073e9SAndroid Build Coastguard Worker# 105*da0073e9SAndroid Build Coastguard Worker# ATEN_AVX512_256=TRUE 106*da0073e9SAndroid Build Coastguard Worker# ATen AVX2 kernels can use 32 ymm registers, instead of the default 16. 107*da0073e9SAndroid Build Coastguard Worker# This option can be used if AVX512 doesn't perform well on a machine. 108*da0073e9SAndroid Build Coastguard Worker# The FBGEMM library also uses AVX512_256 kernels on Xeon D processors, 109*da0073e9SAndroid Build Coastguard Worker# but it also has some (optimized) assembly code. 110*da0073e9SAndroid Build Coastguard Worker# 111*da0073e9SAndroid Build Coastguard Worker# PYTORCH_BUILD_VERSION 112*da0073e9SAndroid Build Coastguard Worker# PYTORCH_BUILD_NUMBER 113*da0073e9SAndroid Build Coastguard Worker# specify the version of PyTorch, rather than the hard-coded version 114*da0073e9SAndroid Build Coastguard Worker# in this file; used when we're building binaries for distribution 115*da0073e9SAndroid Build Coastguard Worker# 116*da0073e9SAndroid Build Coastguard Worker# TORCH_CUDA_ARCH_LIST 117*da0073e9SAndroid Build Coastguard Worker# specify which CUDA architectures to build for. 118*da0073e9SAndroid Build Coastguard Worker# ie `TORCH_CUDA_ARCH_LIST="6.0;7.0"` 119*da0073e9SAndroid Build Coastguard Worker# These are not CUDA versions, instead, they specify what 120*da0073e9SAndroid Build Coastguard Worker# classes of NVIDIA hardware we should generate PTX for. 121*da0073e9SAndroid Build Coastguard Worker# 122*da0073e9SAndroid Build Coastguard Worker# PYTORCH_ROCM_ARCH 123*da0073e9SAndroid Build Coastguard Worker# specify which AMD GPU targets to build for. 124*da0073e9SAndroid Build Coastguard Worker# ie `PYTORCH_ROCM_ARCH="gfx900;gfx906"` 125*da0073e9SAndroid Build Coastguard Worker# 126*da0073e9SAndroid Build Coastguard Worker# ONNX_NAMESPACE 127*da0073e9SAndroid Build Coastguard Worker# specify a namespace for ONNX built here rather than the hard-coded 128*da0073e9SAndroid Build Coastguard Worker# one in this file; needed to build with other frameworks that share ONNX. 129*da0073e9SAndroid Build Coastguard Worker# 130*da0073e9SAndroid Build Coastguard Worker# BLAS 131*da0073e9SAndroid Build Coastguard Worker# BLAS to be used by Caffe2. Can be MKL, Eigen, ATLAS, FlexiBLAS, or OpenBLAS. If set 132*da0073e9SAndroid Build Coastguard Worker# then the build will fail if the requested BLAS is not found, otherwise 133*da0073e9SAndroid Build Coastguard Worker# the BLAS will be chosen based on what is found on your system. 134*da0073e9SAndroid Build Coastguard Worker# 135*da0073e9SAndroid Build Coastguard Worker# MKL_THREADING 136*da0073e9SAndroid Build Coastguard Worker# MKL threading mode: SEQ, TBB or OMP (default) 137*da0073e9SAndroid Build Coastguard Worker# 138*da0073e9SAndroid Build Coastguard Worker# USE_ROCM_KERNEL_ASSERT=1 139*da0073e9SAndroid Build Coastguard Worker# Enable kernel assert in ROCm platform 140*da0073e9SAndroid Build Coastguard Worker# 141*da0073e9SAndroid Build Coastguard Worker# Environment variables we respect (these environment variables are 142*da0073e9SAndroid Build Coastguard Worker# conventional and are often understood/set by other software.) 143*da0073e9SAndroid Build Coastguard Worker# 144*da0073e9SAndroid Build Coastguard Worker# CUDA_HOME (Linux/OS X) 145*da0073e9SAndroid Build Coastguard Worker# CUDA_PATH (Windows) 146*da0073e9SAndroid Build Coastguard Worker# specify where CUDA is installed; usually /usr/local/cuda or 147*da0073e9SAndroid Build Coastguard Worker# /usr/local/cuda-x.y 148*da0073e9SAndroid Build Coastguard Worker# CUDAHOSTCXX 149*da0073e9SAndroid Build Coastguard Worker# specify a different compiler than the system one to use as the CUDA 150*da0073e9SAndroid Build Coastguard Worker# host compiler for nvcc. 151*da0073e9SAndroid Build Coastguard Worker# 152*da0073e9SAndroid Build Coastguard Worker# CUDA_NVCC_EXECUTABLE 153*da0073e9SAndroid Build Coastguard Worker# Specify a NVCC to use. This is used in our CI to point to a cached nvcc 154*da0073e9SAndroid Build Coastguard Worker# 155*da0073e9SAndroid Build Coastguard Worker# CUDNN_LIB_DIR 156*da0073e9SAndroid Build Coastguard Worker# CUDNN_INCLUDE_DIR 157*da0073e9SAndroid Build Coastguard Worker# CUDNN_LIBRARY 158*da0073e9SAndroid Build Coastguard Worker# specify where cuDNN is installed 159*da0073e9SAndroid Build Coastguard Worker# 160*da0073e9SAndroid Build Coastguard Worker# MIOPEN_LIB_DIR 161*da0073e9SAndroid Build Coastguard Worker# MIOPEN_INCLUDE_DIR 162*da0073e9SAndroid Build Coastguard Worker# MIOPEN_LIBRARY 163*da0073e9SAndroid Build Coastguard Worker# specify where MIOpen is installed 164*da0073e9SAndroid Build Coastguard Worker# 165*da0073e9SAndroid Build Coastguard Worker# NCCL_ROOT 166*da0073e9SAndroid Build Coastguard Worker# NCCL_LIB_DIR 167*da0073e9SAndroid Build Coastguard Worker# NCCL_INCLUDE_DIR 168*da0073e9SAndroid Build Coastguard Worker# specify where nccl is installed 169*da0073e9SAndroid Build Coastguard Worker# 170*da0073e9SAndroid Build Coastguard Worker# ACL_ROOT_DIR 171*da0073e9SAndroid Build Coastguard Worker# specify where Compute Library is installed 172*da0073e9SAndroid Build Coastguard Worker# 173*da0073e9SAndroid Build Coastguard Worker# LIBRARY_PATH 174*da0073e9SAndroid Build Coastguard Worker# LD_LIBRARY_PATH 175*da0073e9SAndroid Build Coastguard Worker# we will search for libraries in these paths 176*da0073e9SAndroid Build Coastguard Worker# 177*da0073e9SAndroid Build Coastguard Worker# ATEN_THREADING 178*da0073e9SAndroid Build Coastguard Worker# ATen parallel backend to use for intra- and inter-op parallelism 179*da0073e9SAndroid Build Coastguard Worker# possible values: 180*da0073e9SAndroid Build Coastguard Worker# OMP - use OpenMP for intra-op and native backend for inter-op tasks 181*da0073e9SAndroid Build Coastguard Worker# NATIVE - use native thread pool for both intra- and inter-op tasks 182*da0073e9SAndroid Build Coastguard Worker# 183*da0073e9SAndroid Build Coastguard Worker# USE_SYSTEM_LIBS (work in progress) 184*da0073e9SAndroid Build Coastguard Worker# Use system-provided libraries to satisfy the build dependencies. 185*da0073e9SAndroid Build Coastguard Worker# When turned on, the following cmake variables will be toggled as well: 186*da0073e9SAndroid Build Coastguard Worker# USE_SYSTEM_CPUINFO=ON USE_SYSTEM_SLEEF=ON BUILD_CUSTOM_PROTOBUF=OFF 187*da0073e9SAndroid Build Coastguard Worker# 188*da0073e9SAndroid Build Coastguard Worker# USE_MIMALLOC 189*da0073e9SAndroid Build Coastguard Worker# Static link mimalloc into C10, and use mimalloc in alloc_cpu & alloc_free. 190*da0073e9SAndroid Build Coastguard Worker# By default, It is only enabled on Windows. 191*da0073e9SAndroid Build Coastguard Worker# 192*da0073e9SAndroid Build Coastguard Worker# USE_PRIORITIZED_TEXT_FOR_LD 193*da0073e9SAndroid Build Coastguard Worker# Uses prioritized text form cmake/prioritized_text.txt for LD 194*da0073e9SAndroid Build Coastguard Worker# 195*da0073e9SAndroid Build Coastguard Worker# BUILD_LIBTORCH_WHL 196*da0073e9SAndroid Build Coastguard Worker# Builds libtorch.so and its dependencies as a wheel 197*da0073e9SAndroid Build Coastguard Worker# 198*da0073e9SAndroid Build Coastguard Worker# BUILD_PYTHON_ONLY 199*da0073e9SAndroid Build Coastguard Worker# Builds pytorch as a wheel using libtorch.so from a seperate wheel 200*da0073e9SAndroid Build Coastguard Worker 201*da0073e9SAndroid Build Coastguard Workerimport os 202*da0073e9SAndroid Build Coastguard Workerimport sys 203*da0073e9SAndroid Build Coastguard Worker 204*da0073e9SAndroid Build Coastguard Worker 205*da0073e9SAndroid Build Coastguard Workerif sys.platform == "win32" and sys.maxsize.bit_length() == 31: 206*da0073e9SAndroid Build Coastguard Worker print( 207*da0073e9SAndroid Build Coastguard Worker "32-bit Windows Python runtime is not supported. Please switch to 64-bit Python." 208*da0073e9SAndroid Build Coastguard Worker ) 209*da0073e9SAndroid Build Coastguard Worker sys.exit(-1) 210*da0073e9SAndroid Build Coastguard Worker 211*da0073e9SAndroid Build Coastguard Workerimport platform 212*da0073e9SAndroid Build Coastguard Worker 213*da0073e9SAndroid Build Coastguard Worker 214*da0073e9SAndroid Build Coastguard WorkerBUILD_LIBTORCH_WHL = os.getenv("BUILD_LIBTORCH_WHL", "0") == "1" 215*da0073e9SAndroid Build Coastguard WorkerBUILD_PYTHON_ONLY = os.getenv("BUILD_PYTHON_ONLY", "0") == "1" 216*da0073e9SAndroid Build Coastguard Worker 217*da0073e9SAndroid Build Coastguard Workerpython_min_version = (3, 8, 0) 218*da0073e9SAndroid Build Coastguard Workerpython_min_version_str = ".".join(map(str, python_min_version)) 219*da0073e9SAndroid Build Coastguard Workerif sys.version_info < python_min_version: 220*da0073e9SAndroid Build Coastguard Worker print( 221*da0073e9SAndroid Build Coastguard Worker f"You are using Python {platform.python_version()}. Python >={python_min_version_str} is required." 222*da0073e9SAndroid Build Coastguard Worker ) 223*da0073e9SAndroid Build Coastguard Worker sys.exit(-1) 224*da0073e9SAndroid Build Coastguard Worker 225*da0073e9SAndroid Build Coastguard Workerimport filecmp 226*da0073e9SAndroid Build Coastguard Workerimport glob 227*da0073e9SAndroid Build Coastguard Workerimport importlib 228*da0073e9SAndroid Build Coastguard Workerimport importlib.util 229*da0073e9SAndroid Build Coastguard Workerimport json 230*da0073e9SAndroid Build Coastguard Workerimport shutil 231*da0073e9SAndroid Build Coastguard Workerimport subprocess 232*da0073e9SAndroid Build Coastguard Workerimport sysconfig 233*da0073e9SAndroid Build Coastguard Workerimport time 234*da0073e9SAndroid Build Coastguard Workerfrom collections import defaultdict 235*da0073e9SAndroid Build Coastguard Worker 236*da0073e9SAndroid Build Coastguard Workerimport setuptools.command.build_ext 237*da0073e9SAndroid Build Coastguard Workerimport setuptools.command.install 238*da0073e9SAndroid Build Coastguard Workerimport setuptools.command.sdist 239*da0073e9SAndroid Build Coastguard Workerfrom setuptools import Extension, find_packages, setup 240*da0073e9SAndroid Build Coastguard Workerfrom setuptools.dist import Distribution 241*da0073e9SAndroid Build Coastguard Workerfrom tools.build_pytorch_libs import build_caffe2 242*da0073e9SAndroid Build Coastguard Workerfrom tools.generate_torch_version import get_torch_version 243*da0073e9SAndroid Build Coastguard Workerfrom tools.setup_helpers.cmake import CMake 244*da0073e9SAndroid Build Coastguard Workerfrom tools.setup_helpers.env import build_type, IS_DARWIN, IS_LINUX, IS_WINDOWS 245*da0073e9SAndroid Build Coastguard Workerfrom tools.setup_helpers.generate_linker_script import gen_linker_script 246*da0073e9SAndroid Build Coastguard Worker 247*da0073e9SAndroid Build Coastguard Worker 248*da0073e9SAndroid Build Coastguard Workerdef _get_package_path(package_name): 249*da0073e9SAndroid Build Coastguard Worker spec = importlib.util.find_spec(package_name) 250*da0073e9SAndroid Build Coastguard Worker if spec: 251*da0073e9SAndroid Build Coastguard Worker # The package might be a namespace package, so get_data may fail 252*da0073e9SAndroid Build Coastguard Worker try: 253*da0073e9SAndroid Build Coastguard Worker loader = spec.loader 254*da0073e9SAndroid Build Coastguard Worker if loader is not None: 255*da0073e9SAndroid Build Coastguard Worker file_path = loader.get_filename() # type: ignore[attr-defined] 256*da0073e9SAndroid Build Coastguard Worker return os.path.dirname(file_path) 257*da0073e9SAndroid Build Coastguard Worker except AttributeError: 258*da0073e9SAndroid Build Coastguard Worker pass 259*da0073e9SAndroid Build Coastguard Worker return None 260*da0073e9SAndroid Build Coastguard Worker 261*da0073e9SAndroid Build Coastguard Worker 262*da0073e9SAndroid Build Coastguard Worker# set up appropriate env variables 263*da0073e9SAndroid Build Coastguard Workerif BUILD_LIBTORCH_WHL: 264*da0073e9SAndroid Build Coastguard Worker # Set up environment variables for ONLY building libtorch.so and not libtorch_python.so 265*da0073e9SAndroid Build Coastguard Worker # functorch is not supported without python 266*da0073e9SAndroid Build Coastguard Worker os.environ["BUILD_FUNCTORCH"] = "OFF" 267*da0073e9SAndroid Build Coastguard Worker 268*da0073e9SAndroid Build Coastguard Worker 269*da0073e9SAndroid Build Coastguard Workerif BUILD_PYTHON_ONLY: 270*da0073e9SAndroid Build Coastguard Worker os.environ["BUILD_LIBTORCHLESS"] = "ON" 271*da0073e9SAndroid Build Coastguard Worker os.environ["LIBTORCH_LIB_PATH"] = f"{_get_package_path('torch')}/lib" 272*da0073e9SAndroid Build Coastguard Worker 273*da0073e9SAndroid Build Coastguard Worker################################################################################ 274*da0073e9SAndroid Build Coastguard Worker# Parameters parsed from environment 275*da0073e9SAndroid Build Coastguard Worker################################################################################ 276*da0073e9SAndroid Build Coastguard Worker 277*da0073e9SAndroid Build Coastguard WorkerVERBOSE_SCRIPT = True 278*da0073e9SAndroid Build Coastguard WorkerRUN_BUILD_DEPS = True 279*da0073e9SAndroid Build Coastguard Worker# see if the user passed a quiet flag to setup.py arguments and respect 280*da0073e9SAndroid Build Coastguard Worker# that in our parts of the build 281*da0073e9SAndroid Build Coastguard WorkerEMIT_BUILD_WARNING = False 282*da0073e9SAndroid Build Coastguard WorkerRERUN_CMAKE = False 283*da0073e9SAndroid Build Coastguard WorkerCMAKE_ONLY = False 284*da0073e9SAndroid Build Coastguard Workerfiltered_args = [] 285*da0073e9SAndroid Build Coastguard Workerfor i, arg in enumerate(sys.argv): 286*da0073e9SAndroid Build Coastguard Worker if arg == "--cmake": 287*da0073e9SAndroid Build Coastguard Worker RERUN_CMAKE = True 288*da0073e9SAndroid Build Coastguard Worker continue 289*da0073e9SAndroid Build Coastguard Worker if arg == "--cmake-only": 290*da0073e9SAndroid Build Coastguard Worker # Stop once cmake terminates. Leave users a chance to adjust build 291*da0073e9SAndroid Build Coastguard Worker # options. 292*da0073e9SAndroid Build Coastguard Worker CMAKE_ONLY = True 293*da0073e9SAndroid Build Coastguard Worker continue 294*da0073e9SAndroid Build Coastguard Worker if arg == "rebuild" or arg == "build": 295*da0073e9SAndroid Build Coastguard Worker arg = "build" # rebuild is gone, make it build 296*da0073e9SAndroid Build Coastguard Worker EMIT_BUILD_WARNING = True 297*da0073e9SAndroid Build Coastguard Worker if arg == "--": 298*da0073e9SAndroid Build Coastguard Worker filtered_args += sys.argv[i:] 299*da0073e9SAndroid Build Coastguard Worker break 300*da0073e9SAndroid Build Coastguard Worker if arg == "-q" or arg == "--quiet": 301*da0073e9SAndroid Build Coastguard Worker VERBOSE_SCRIPT = False 302*da0073e9SAndroid Build Coastguard Worker if arg in ["clean", "egg_info", "sdist"]: 303*da0073e9SAndroid Build Coastguard Worker RUN_BUILD_DEPS = False 304*da0073e9SAndroid Build Coastguard Worker filtered_args.append(arg) 305*da0073e9SAndroid Build Coastguard Workersys.argv = filtered_args 306*da0073e9SAndroid Build Coastguard Worker 307*da0073e9SAndroid Build Coastguard Workerif VERBOSE_SCRIPT: 308*da0073e9SAndroid Build Coastguard Worker 309*da0073e9SAndroid Build Coastguard Worker def report(*args): 310*da0073e9SAndroid Build Coastguard Worker print(*args) 311*da0073e9SAndroid Build Coastguard Worker 312*da0073e9SAndroid Build Coastguard Workerelse: 313*da0073e9SAndroid Build Coastguard Worker 314*da0073e9SAndroid Build Coastguard Worker def report(*args): 315*da0073e9SAndroid Build Coastguard Worker pass 316*da0073e9SAndroid Build Coastguard Worker 317*da0073e9SAndroid Build Coastguard Worker # Make distutils respect --quiet too 318*da0073e9SAndroid Build Coastguard Worker setuptools.distutils.log.warn = report 319*da0073e9SAndroid Build Coastguard Worker 320*da0073e9SAndroid Build Coastguard Worker# Constant known variables used throughout this file 321*da0073e9SAndroid Build Coastguard Workercwd = os.path.dirname(os.path.abspath(__file__)) 322*da0073e9SAndroid Build Coastguard Workerlib_path = os.path.join(cwd, "torch", "lib") 323*da0073e9SAndroid Build Coastguard Workerthird_party_path = os.path.join(cwd, "third_party") 324*da0073e9SAndroid Build Coastguard Workercaffe2_build_dir = os.path.join(cwd, "build") 325*da0073e9SAndroid Build Coastguard Worker 326*da0073e9SAndroid Build Coastguard Worker# CMAKE: full path to python library 327*da0073e9SAndroid Build Coastguard Workerif IS_WINDOWS: 328*da0073e9SAndroid Build Coastguard Worker cmake_python_library = "{}/libs/python{}.lib".format( 329*da0073e9SAndroid Build Coastguard Worker sysconfig.get_config_var("prefix"), sysconfig.get_config_var("VERSION") 330*da0073e9SAndroid Build Coastguard Worker ) 331*da0073e9SAndroid Build Coastguard Worker # Fix virtualenv builds 332*da0073e9SAndroid Build Coastguard Worker if not os.path.exists(cmake_python_library): 333*da0073e9SAndroid Build Coastguard Worker cmake_python_library = "{}/libs/python{}.lib".format( 334*da0073e9SAndroid Build Coastguard Worker sys.base_prefix, sysconfig.get_config_var("VERSION") 335*da0073e9SAndroid Build Coastguard Worker ) 336*da0073e9SAndroid Build Coastguard Workerelse: 337*da0073e9SAndroid Build Coastguard Worker cmake_python_library = "{}/{}".format( 338*da0073e9SAndroid Build Coastguard Worker sysconfig.get_config_var("LIBDIR"), sysconfig.get_config_var("INSTSONAME") 339*da0073e9SAndroid Build Coastguard Worker ) 340*da0073e9SAndroid Build Coastguard Workercmake_python_include_dir = sysconfig.get_path("include") 341*da0073e9SAndroid Build Coastguard Worker 342*da0073e9SAndroid Build Coastguard Worker 343*da0073e9SAndroid Build Coastguard Worker################################################################################ 344*da0073e9SAndroid Build Coastguard Worker# Version, create_version_file, and package_name 345*da0073e9SAndroid Build Coastguard Worker################################################################################ 346*da0073e9SAndroid Build Coastguard Worker 347*da0073e9SAndroid Build Coastguard Workerpackage_name = os.getenv("TORCH_PACKAGE_NAME", "torch") 348*da0073e9SAndroid Build Coastguard WorkerLIBTORCH_PKG_NAME = os.getenv("LIBTORCH_PACKAGE_NAME", "torch_no_python") 349*da0073e9SAndroid Build Coastguard Workerif BUILD_LIBTORCH_WHL: 350*da0073e9SAndroid Build Coastguard Worker package_name = LIBTORCH_PKG_NAME 351*da0073e9SAndroid Build Coastguard Worker 352*da0073e9SAndroid Build Coastguard Worker 353*da0073e9SAndroid Build Coastguard Workerpackage_type = os.getenv("PACKAGE_TYPE", "wheel") 354*da0073e9SAndroid Build Coastguard Workerversion = get_torch_version() 355*da0073e9SAndroid Build Coastguard Workerreport(f"Building wheel {package_name}-{version}") 356*da0073e9SAndroid Build Coastguard Worker 357*da0073e9SAndroid Build Coastguard Workercmake = CMake() 358*da0073e9SAndroid Build Coastguard Worker 359*da0073e9SAndroid Build Coastguard Worker 360*da0073e9SAndroid Build Coastguard Workerdef get_submodule_folders(): 361*da0073e9SAndroid Build Coastguard Worker git_modules_path = os.path.join(cwd, ".gitmodules") 362*da0073e9SAndroid Build Coastguard Worker default_modules_path = [ 363*da0073e9SAndroid Build Coastguard Worker os.path.join(third_party_path, name) 364*da0073e9SAndroid Build Coastguard Worker for name in [ 365*da0073e9SAndroid Build Coastguard Worker "gloo", 366*da0073e9SAndroid Build Coastguard Worker "cpuinfo", 367*da0073e9SAndroid Build Coastguard Worker "onnx", 368*da0073e9SAndroid Build Coastguard Worker "fbgemm", 369*da0073e9SAndroid Build Coastguard Worker "cutlass", 370*da0073e9SAndroid Build Coastguard Worker ] 371*da0073e9SAndroid Build Coastguard Worker ] 372*da0073e9SAndroid Build Coastguard Worker if not os.path.exists(git_modules_path): 373*da0073e9SAndroid Build Coastguard Worker return default_modules_path 374*da0073e9SAndroid Build Coastguard Worker with open(git_modules_path) as f: 375*da0073e9SAndroid Build Coastguard Worker return [ 376*da0073e9SAndroid Build Coastguard Worker os.path.join(cwd, line.split("=", 1)[1].strip()) 377*da0073e9SAndroid Build Coastguard Worker for line in f 378*da0073e9SAndroid Build Coastguard Worker if line.strip().startswith("path") 379*da0073e9SAndroid Build Coastguard Worker ] 380*da0073e9SAndroid Build Coastguard Worker 381*da0073e9SAndroid Build Coastguard Worker 382*da0073e9SAndroid Build Coastguard Workerdef check_submodules(): 383*da0073e9SAndroid Build Coastguard Worker def check_for_files(folder, files): 384*da0073e9SAndroid Build Coastguard Worker if not any(os.path.exists(os.path.join(folder, f)) for f in files): 385*da0073e9SAndroid Build Coastguard Worker report("Could not find any of {} in {}".format(", ".join(files), folder)) 386*da0073e9SAndroid Build Coastguard Worker report("Did you run 'git submodule update --init --recursive'?") 387*da0073e9SAndroid Build Coastguard Worker sys.exit(1) 388*da0073e9SAndroid Build Coastguard Worker 389*da0073e9SAndroid Build Coastguard Worker def not_exists_or_empty(folder): 390*da0073e9SAndroid Build Coastguard Worker return not os.path.exists(folder) or ( 391*da0073e9SAndroid Build Coastguard Worker os.path.isdir(folder) and len(os.listdir(folder)) == 0 392*da0073e9SAndroid Build Coastguard Worker ) 393*da0073e9SAndroid Build Coastguard Worker 394*da0073e9SAndroid Build Coastguard Worker if bool(os.getenv("USE_SYSTEM_LIBS", False)): 395*da0073e9SAndroid Build Coastguard Worker return 396*da0073e9SAndroid Build Coastguard Worker folders = get_submodule_folders() 397*da0073e9SAndroid Build Coastguard Worker # If none of the submodule folders exists, try to initialize them 398*da0073e9SAndroid Build Coastguard Worker if all(not_exists_or_empty(folder) for folder in folders): 399*da0073e9SAndroid Build Coastguard Worker try: 400*da0073e9SAndroid Build Coastguard Worker print(" --- Trying to initialize submodules") 401*da0073e9SAndroid Build Coastguard Worker start = time.time() 402*da0073e9SAndroid Build Coastguard Worker subprocess.check_call( 403*da0073e9SAndroid Build Coastguard Worker ["git", "submodule", "update", "--init", "--recursive"], cwd=cwd 404*da0073e9SAndroid Build Coastguard Worker ) 405*da0073e9SAndroid Build Coastguard Worker end = time.time() 406*da0073e9SAndroid Build Coastguard Worker print(f" --- Submodule initialization took {end - start:.2f} sec") 407*da0073e9SAndroid Build Coastguard Worker except Exception: 408*da0073e9SAndroid Build Coastguard Worker print(" --- Submodule initalization failed") 409*da0073e9SAndroid Build Coastguard Worker print("Please run:\n\tgit submodule update --init --recursive") 410*da0073e9SAndroid Build Coastguard Worker sys.exit(1) 411*da0073e9SAndroid Build Coastguard Worker for folder in folders: 412*da0073e9SAndroid Build Coastguard Worker check_for_files( 413*da0073e9SAndroid Build Coastguard Worker folder, 414*da0073e9SAndroid Build Coastguard Worker [ 415*da0073e9SAndroid Build Coastguard Worker "CMakeLists.txt", 416*da0073e9SAndroid Build Coastguard Worker "Makefile", 417*da0073e9SAndroid Build Coastguard Worker "setup.py", 418*da0073e9SAndroid Build Coastguard Worker "LICENSE", 419*da0073e9SAndroid Build Coastguard Worker "LICENSE.md", 420*da0073e9SAndroid Build Coastguard Worker "LICENSE.txt", 421*da0073e9SAndroid Build Coastguard Worker ], 422*da0073e9SAndroid Build Coastguard Worker ) 423*da0073e9SAndroid Build Coastguard Worker check_for_files( 424*da0073e9SAndroid Build Coastguard Worker os.path.join(third_party_path, "fbgemm", "third_party", "asmjit"), 425*da0073e9SAndroid Build Coastguard Worker ["CMakeLists.txt"], 426*da0073e9SAndroid Build Coastguard Worker ) 427*da0073e9SAndroid Build Coastguard Worker check_for_files( 428*da0073e9SAndroid Build Coastguard Worker os.path.join(third_party_path, "onnx", "third_party", "benchmark"), 429*da0073e9SAndroid Build Coastguard Worker ["CMakeLists.txt"], 430*da0073e9SAndroid Build Coastguard Worker ) 431*da0073e9SAndroid Build Coastguard Worker 432*da0073e9SAndroid Build Coastguard Worker 433*da0073e9SAndroid Build Coastguard Worker# Windows has very bad support for symbolic links. 434*da0073e9SAndroid Build Coastguard Worker# Instead of using symlinks, we're going to copy files over 435*da0073e9SAndroid Build Coastguard Workerdef mirror_files_into_torchgen(): 436*da0073e9SAndroid Build Coastguard Worker # (new_path, orig_path) 437*da0073e9SAndroid Build Coastguard Worker # Directories are OK and are recursively mirrored. 438*da0073e9SAndroid Build Coastguard Worker paths = [ 439*da0073e9SAndroid Build Coastguard Worker ( 440*da0073e9SAndroid Build Coastguard Worker "torchgen/packaged/ATen/native/native_functions.yaml", 441*da0073e9SAndroid Build Coastguard Worker "aten/src/ATen/native/native_functions.yaml", 442*da0073e9SAndroid Build Coastguard Worker ), 443*da0073e9SAndroid Build Coastguard Worker ("torchgen/packaged/ATen/native/tags.yaml", "aten/src/ATen/native/tags.yaml"), 444*da0073e9SAndroid Build Coastguard Worker ("torchgen/packaged/ATen/templates", "aten/src/ATen/templates"), 445*da0073e9SAndroid Build Coastguard Worker ("torchgen/packaged/autograd", "tools/autograd"), 446*da0073e9SAndroid Build Coastguard Worker ("torchgen/packaged/autograd/templates", "tools/autograd/templates"), 447*da0073e9SAndroid Build Coastguard Worker ] 448*da0073e9SAndroid Build Coastguard Worker for new_path, orig_path in paths: 449*da0073e9SAndroid Build Coastguard Worker # Create the dirs involved in new_path if they don't exist 450*da0073e9SAndroid Build Coastguard Worker if not os.path.exists(new_path): 451*da0073e9SAndroid Build Coastguard Worker os.makedirs(os.path.dirname(new_path), exist_ok=True) 452*da0073e9SAndroid Build Coastguard Worker 453*da0073e9SAndroid Build Coastguard Worker # Copy the files from the orig location to the new location 454*da0073e9SAndroid Build Coastguard Worker if os.path.isfile(orig_path): 455*da0073e9SAndroid Build Coastguard Worker shutil.copyfile(orig_path, new_path) 456*da0073e9SAndroid Build Coastguard Worker continue 457*da0073e9SAndroid Build Coastguard Worker if os.path.isdir(orig_path): 458*da0073e9SAndroid Build Coastguard Worker if os.path.exists(new_path): 459*da0073e9SAndroid Build Coastguard Worker # copytree fails if the tree exists already, so remove it. 460*da0073e9SAndroid Build Coastguard Worker shutil.rmtree(new_path) 461*da0073e9SAndroid Build Coastguard Worker shutil.copytree(orig_path, new_path) 462*da0073e9SAndroid Build Coastguard Worker continue 463*da0073e9SAndroid Build Coastguard Worker raise RuntimeError("Check the file paths in `mirror_files_into_torchgen()`") 464*da0073e9SAndroid Build Coastguard Worker 465*da0073e9SAndroid Build Coastguard Worker 466*da0073e9SAndroid Build Coastguard Worker# all the work we need to do _before_ setup runs 467*da0073e9SAndroid Build Coastguard Workerdef build_deps(): 468*da0073e9SAndroid Build Coastguard Worker report("-- Building version " + version) 469*da0073e9SAndroid Build Coastguard Worker 470*da0073e9SAndroid Build Coastguard Worker check_submodules() 471*da0073e9SAndroid Build Coastguard Worker check_pydep("yaml", "pyyaml") 472*da0073e9SAndroid Build Coastguard Worker build_python = not BUILD_LIBTORCH_WHL 473*da0073e9SAndroid Build Coastguard Worker build_caffe2( 474*da0073e9SAndroid Build Coastguard Worker version=version, 475*da0073e9SAndroid Build Coastguard Worker cmake_python_library=cmake_python_library, 476*da0073e9SAndroid Build Coastguard Worker build_python=build_python, 477*da0073e9SAndroid Build Coastguard Worker rerun_cmake=RERUN_CMAKE, 478*da0073e9SAndroid Build Coastguard Worker cmake_only=CMAKE_ONLY, 479*da0073e9SAndroid Build Coastguard Worker cmake=cmake, 480*da0073e9SAndroid Build Coastguard Worker ) 481*da0073e9SAndroid Build Coastguard Worker 482*da0073e9SAndroid Build Coastguard Worker if CMAKE_ONLY: 483*da0073e9SAndroid Build Coastguard Worker report( 484*da0073e9SAndroid Build Coastguard Worker 'Finished running cmake. Run "ccmake build" or ' 485*da0073e9SAndroid Build Coastguard Worker '"cmake-gui build" to adjust build options and ' 486*da0073e9SAndroid Build Coastguard Worker '"python setup.py install" to build.' 487*da0073e9SAndroid Build Coastguard Worker ) 488*da0073e9SAndroid Build Coastguard Worker sys.exit() 489*da0073e9SAndroid Build Coastguard Worker 490*da0073e9SAndroid Build Coastguard Worker # Use copies instead of symbolic files. 491*da0073e9SAndroid Build Coastguard Worker # Windows has very poor support for them. 492*da0073e9SAndroid Build Coastguard Worker sym_files = [ 493*da0073e9SAndroid Build Coastguard Worker "tools/shared/_utils_internal.py", 494*da0073e9SAndroid Build Coastguard Worker "torch/utils/benchmark/utils/valgrind_wrapper/callgrind.h", 495*da0073e9SAndroid Build Coastguard Worker "torch/utils/benchmark/utils/valgrind_wrapper/valgrind.h", 496*da0073e9SAndroid Build Coastguard Worker ] 497*da0073e9SAndroid Build Coastguard Worker orig_files = [ 498*da0073e9SAndroid Build Coastguard Worker "torch/_utils_internal.py", 499*da0073e9SAndroid Build Coastguard Worker "third_party/valgrind-headers/callgrind.h", 500*da0073e9SAndroid Build Coastguard Worker "third_party/valgrind-headers/valgrind.h", 501*da0073e9SAndroid Build Coastguard Worker ] 502*da0073e9SAndroid Build Coastguard Worker for sym_file, orig_file in zip(sym_files, orig_files): 503*da0073e9SAndroid Build Coastguard Worker same = False 504*da0073e9SAndroid Build Coastguard Worker if os.path.exists(sym_file): 505*da0073e9SAndroid Build Coastguard Worker if filecmp.cmp(sym_file, orig_file): 506*da0073e9SAndroid Build Coastguard Worker same = True 507*da0073e9SAndroid Build Coastguard Worker else: 508*da0073e9SAndroid Build Coastguard Worker os.remove(sym_file) 509*da0073e9SAndroid Build Coastguard Worker if not same: 510*da0073e9SAndroid Build Coastguard Worker shutil.copyfile(orig_file, sym_file) 511*da0073e9SAndroid Build Coastguard Worker 512*da0073e9SAndroid Build Coastguard Worker 513*da0073e9SAndroid Build Coastguard Worker################################################################################ 514*da0073e9SAndroid Build Coastguard Worker# Building dependent libraries 515*da0073e9SAndroid Build Coastguard Worker################################################################################ 516*da0073e9SAndroid Build Coastguard Worker 517*da0073e9SAndroid Build Coastguard Workermissing_pydep = """ 518*da0073e9SAndroid Build Coastguard WorkerMissing build dependency: Unable to `import {importname}`. 519*da0073e9SAndroid Build Coastguard WorkerPlease install it via `conda install {module}` or `pip install {module}` 520*da0073e9SAndroid Build Coastguard Worker""".strip() 521*da0073e9SAndroid Build Coastguard Worker 522*da0073e9SAndroid Build Coastguard Worker 523*da0073e9SAndroid Build Coastguard Workerdef check_pydep(importname, module): 524*da0073e9SAndroid Build Coastguard Worker try: 525*da0073e9SAndroid Build Coastguard Worker importlib.import_module(importname) 526*da0073e9SAndroid Build Coastguard Worker except ImportError as e: 527*da0073e9SAndroid Build Coastguard Worker raise RuntimeError( 528*da0073e9SAndroid Build Coastguard Worker missing_pydep.format(importname=importname, module=module) 529*da0073e9SAndroid Build Coastguard Worker ) from e 530*da0073e9SAndroid Build Coastguard Worker 531*da0073e9SAndroid Build Coastguard Worker 532*da0073e9SAndroid Build Coastguard Workerclass build_ext(setuptools.command.build_ext.build_ext): 533*da0073e9SAndroid Build Coastguard Worker def _embed_libomp(self): 534*da0073e9SAndroid Build Coastguard Worker # Copy libiomp5.dylib/libomp.dylib inside the wheel package on MacOS 535*da0073e9SAndroid Build Coastguard Worker lib_dir = os.path.join(self.build_lib, "torch", "lib") 536*da0073e9SAndroid Build Coastguard Worker libtorch_cpu_path = os.path.join(lib_dir, "libtorch_cpu.dylib") 537*da0073e9SAndroid Build Coastguard Worker if not os.path.exists(libtorch_cpu_path): 538*da0073e9SAndroid Build Coastguard Worker return 539*da0073e9SAndroid Build Coastguard Worker # Parse libtorch_cpu load commands 540*da0073e9SAndroid Build Coastguard Worker otool_cmds = ( 541*da0073e9SAndroid Build Coastguard Worker subprocess.check_output(["otool", "-l", libtorch_cpu_path]) 542*da0073e9SAndroid Build Coastguard Worker .decode("utf-8") 543*da0073e9SAndroid Build Coastguard Worker .split("\n") 544*da0073e9SAndroid Build Coastguard Worker ) 545*da0073e9SAndroid Build Coastguard Worker rpaths, libs = [], [] 546*da0073e9SAndroid Build Coastguard Worker for idx, line in enumerate(otool_cmds): 547*da0073e9SAndroid Build Coastguard Worker if line.strip() == "cmd LC_LOAD_DYLIB": 548*da0073e9SAndroid Build Coastguard Worker lib_name = otool_cmds[idx + 2].strip() 549*da0073e9SAndroid Build Coastguard Worker assert lib_name.startswith("name ") 550*da0073e9SAndroid Build Coastguard Worker libs.append(lib_name.split(" ", 1)[1].rsplit("(", 1)[0][:-1]) 551*da0073e9SAndroid Build Coastguard Worker 552*da0073e9SAndroid Build Coastguard Worker if line.strip() == "cmd LC_RPATH": 553*da0073e9SAndroid Build Coastguard Worker rpath = otool_cmds[idx + 2].strip() 554*da0073e9SAndroid Build Coastguard Worker assert rpath.startswith("path ") 555*da0073e9SAndroid Build Coastguard Worker rpaths.append(rpath.split(" ", 1)[1].rsplit("(", 1)[0][:-1]) 556*da0073e9SAndroid Build Coastguard Worker 557*da0073e9SAndroid Build Coastguard Worker omp_lib_name = ( 558*da0073e9SAndroid Build Coastguard Worker "libomp.dylib" if os.uname().machine == "arm64" else "libiomp5.dylib" 559*da0073e9SAndroid Build Coastguard Worker ) 560*da0073e9SAndroid Build Coastguard Worker omp_rpath_lib_path = os.path.join("@rpath", omp_lib_name) 561*da0073e9SAndroid Build Coastguard Worker if omp_rpath_lib_path not in libs: 562*da0073e9SAndroid Build Coastguard Worker return 563*da0073e9SAndroid Build Coastguard Worker 564*da0073e9SAndroid Build Coastguard Worker # Copy libomp/libiomp5 from rpath locations 565*da0073e9SAndroid Build Coastguard Worker for rpath in rpaths: 566*da0073e9SAndroid Build Coastguard Worker source_lib = os.path.join(rpath, omp_lib_name) 567*da0073e9SAndroid Build Coastguard Worker if not os.path.exists(source_lib): 568*da0073e9SAndroid Build Coastguard Worker continue 569*da0073e9SAndroid Build Coastguard Worker target_lib = os.path.join(self.build_lib, "torch", "lib", omp_lib_name) 570*da0073e9SAndroid Build Coastguard Worker self.copy_file(source_lib, target_lib) 571*da0073e9SAndroid Build Coastguard Worker # Delete old rpath and add @loader_lib to the rpath 572*da0073e9SAndroid Build Coastguard Worker # This should prevent delocate from attempting to package another instance 573*da0073e9SAndroid Build Coastguard Worker # of OpenMP library in torch wheel as well as loading two libomp.dylib into 574*da0073e9SAndroid Build Coastguard Worker # the address space, as libraries are cached by their unresolved names 575*da0073e9SAndroid Build Coastguard Worker subprocess.check_call( 576*da0073e9SAndroid Build Coastguard Worker [ 577*da0073e9SAndroid Build Coastguard Worker "install_name_tool", 578*da0073e9SAndroid Build Coastguard Worker "-rpath", 579*da0073e9SAndroid Build Coastguard Worker rpath, 580*da0073e9SAndroid Build Coastguard Worker "@loader_path", 581*da0073e9SAndroid Build Coastguard Worker libtorch_cpu_path, 582*da0073e9SAndroid Build Coastguard Worker ] 583*da0073e9SAndroid Build Coastguard Worker ) 584*da0073e9SAndroid Build Coastguard Worker break 585*da0073e9SAndroid Build Coastguard Worker 586*da0073e9SAndroid Build Coastguard Worker # Copy omp.h from OpenMP_C_FLAGS and copy it into include folder 587*da0073e9SAndroid Build Coastguard Worker omp_cflags = get_cmake_cache_vars()["OpenMP_C_FLAGS"] 588*da0073e9SAndroid Build Coastguard Worker if not omp_cflags: 589*da0073e9SAndroid Build Coastguard Worker return 590*da0073e9SAndroid Build Coastguard Worker for include_dir in [f[2:] for f in omp_cflags.split(" ") if f.startswith("-I")]: 591*da0073e9SAndroid Build Coastguard Worker omp_h = os.path.join(include_dir, "omp.h") 592*da0073e9SAndroid Build Coastguard Worker if not os.path.exists(omp_h): 593*da0073e9SAndroid Build Coastguard Worker continue 594*da0073e9SAndroid Build Coastguard Worker target_omp_h = os.path.join(self.build_lib, "torch", "include", "omp.h") 595*da0073e9SAndroid Build Coastguard Worker self.copy_file(omp_h, target_omp_h) 596*da0073e9SAndroid Build Coastguard Worker break 597*da0073e9SAndroid Build Coastguard Worker 598*da0073e9SAndroid Build Coastguard Worker def run(self): 599*da0073e9SAndroid Build Coastguard Worker # Report build options. This is run after the build completes so # `CMakeCache.txt` exists and we can get an 600*da0073e9SAndroid Build Coastguard Worker # accurate report on what is used and what is not. 601*da0073e9SAndroid Build Coastguard Worker cmake_cache_vars = defaultdict(lambda: False, cmake.get_cmake_cache_variables()) 602*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_NUMPY"]: 603*da0073e9SAndroid Build Coastguard Worker report("-- Building with NumPy bindings") 604*da0073e9SAndroid Build Coastguard Worker else: 605*da0073e9SAndroid Build Coastguard Worker report("-- NumPy not found") 606*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_CUDNN"]: 607*da0073e9SAndroid Build Coastguard Worker report( 608*da0073e9SAndroid Build Coastguard Worker "-- Detected cuDNN at " 609*da0073e9SAndroid Build Coastguard Worker + cmake_cache_vars["CUDNN_LIBRARY"] 610*da0073e9SAndroid Build Coastguard Worker + ", " 611*da0073e9SAndroid Build Coastguard Worker + cmake_cache_vars["CUDNN_INCLUDE_DIR"] 612*da0073e9SAndroid Build Coastguard Worker ) 613*da0073e9SAndroid Build Coastguard Worker else: 614*da0073e9SAndroid Build Coastguard Worker report("-- Not using cuDNN") 615*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_CUDA"]: 616*da0073e9SAndroid Build Coastguard Worker report("-- Detected CUDA at " + cmake_cache_vars["CUDA_TOOLKIT_ROOT_DIR"]) 617*da0073e9SAndroid Build Coastguard Worker else: 618*da0073e9SAndroid Build Coastguard Worker report("-- Not using CUDA") 619*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_XPU"]: 620*da0073e9SAndroid Build Coastguard Worker report("-- Detected XPU runtime at " + cmake_cache_vars["SYCL_LIBRARY_DIR"]) 621*da0073e9SAndroid Build Coastguard Worker else: 622*da0073e9SAndroid Build Coastguard Worker report("-- Not using XPU") 623*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_MKLDNN"]: 624*da0073e9SAndroid Build Coastguard Worker report("-- Using MKLDNN") 625*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_MKLDNN_ACL"]: 626*da0073e9SAndroid Build Coastguard Worker report("-- Using Compute Library for the Arm architecture with MKLDNN") 627*da0073e9SAndroid Build Coastguard Worker else: 628*da0073e9SAndroid Build Coastguard Worker report( 629*da0073e9SAndroid Build Coastguard Worker "-- Not using Compute Library for the Arm architecture with MKLDNN" 630*da0073e9SAndroid Build Coastguard Worker ) 631*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_MKLDNN_CBLAS"]: 632*da0073e9SAndroid Build Coastguard Worker report("-- Using CBLAS in MKLDNN") 633*da0073e9SAndroid Build Coastguard Worker else: 634*da0073e9SAndroid Build Coastguard Worker report("-- Not using CBLAS in MKLDNN") 635*da0073e9SAndroid Build Coastguard Worker else: 636*da0073e9SAndroid Build Coastguard Worker report("-- Not using MKLDNN") 637*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_NCCL"] and cmake_cache_vars["USE_SYSTEM_NCCL"]: 638*da0073e9SAndroid Build Coastguard Worker report( 639*da0073e9SAndroid Build Coastguard Worker "-- Using system provided NCCL library at {}, {}".format( 640*da0073e9SAndroid Build Coastguard Worker cmake_cache_vars["NCCL_LIBRARIES"], 641*da0073e9SAndroid Build Coastguard Worker cmake_cache_vars["NCCL_INCLUDE_DIRS"], 642*da0073e9SAndroid Build Coastguard Worker ) 643*da0073e9SAndroid Build Coastguard Worker ) 644*da0073e9SAndroid Build Coastguard Worker elif cmake_cache_vars["USE_NCCL"]: 645*da0073e9SAndroid Build Coastguard Worker report("-- Building NCCL library") 646*da0073e9SAndroid Build Coastguard Worker else: 647*da0073e9SAndroid Build Coastguard Worker report("-- Not using NCCL") 648*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_DISTRIBUTED"]: 649*da0073e9SAndroid Build Coastguard Worker if IS_WINDOWS: 650*da0073e9SAndroid Build Coastguard Worker report("-- Building without distributed package") 651*da0073e9SAndroid Build Coastguard Worker else: 652*da0073e9SAndroid Build Coastguard Worker report("-- Building with distributed package: ") 653*da0073e9SAndroid Build Coastguard Worker report( 654*da0073e9SAndroid Build Coastguard Worker " -- USE_TENSORPIPE={}".format(cmake_cache_vars["USE_TENSORPIPE"]) 655*da0073e9SAndroid Build Coastguard Worker ) 656*da0073e9SAndroid Build Coastguard Worker report(" -- USE_GLOO={}".format(cmake_cache_vars["USE_GLOO"])) 657*da0073e9SAndroid Build Coastguard Worker report(" -- USE_MPI={}".format(cmake_cache_vars["USE_OPENMPI"])) 658*da0073e9SAndroid Build Coastguard Worker else: 659*da0073e9SAndroid Build Coastguard Worker report("-- Building without distributed package") 660*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["STATIC_DISPATCH_BACKEND"]: 661*da0073e9SAndroid Build Coastguard Worker report( 662*da0073e9SAndroid Build Coastguard Worker "-- Using static dispatch with backend {}".format( 663*da0073e9SAndroid Build Coastguard Worker cmake_cache_vars["STATIC_DISPATCH_BACKEND"] 664*da0073e9SAndroid Build Coastguard Worker ) 665*da0073e9SAndroid Build Coastguard Worker ) 666*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_LIGHTWEIGHT_DISPATCH"]: 667*da0073e9SAndroid Build Coastguard Worker report("-- Using lightweight dispatch") 668*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["BUILD_EXECUTORCH"]: 669*da0073e9SAndroid Build Coastguard Worker report("-- Building Executorch") 670*da0073e9SAndroid Build Coastguard Worker 671*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_ITT"]: 672*da0073e9SAndroid Build Coastguard Worker report("-- Using ITT") 673*da0073e9SAndroid Build Coastguard Worker else: 674*da0073e9SAndroid Build Coastguard Worker report("-- Not using ITT") 675*da0073e9SAndroid Build Coastguard Worker 676*da0073e9SAndroid Build Coastguard Worker # Do not use clang to compile extensions if `-fstack-clash-protection` is defined 677*da0073e9SAndroid Build Coastguard Worker # in system CFLAGS 678*da0073e9SAndroid Build Coastguard Worker c_flags = str(os.getenv("CFLAGS", "")) 679*da0073e9SAndroid Build Coastguard Worker if ( 680*da0073e9SAndroid Build Coastguard Worker IS_LINUX 681*da0073e9SAndroid Build Coastguard Worker and "-fstack-clash-protection" in c_flags 682*da0073e9SAndroid Build Coastguard Worker and "clang" in os.environ.get("CC", "") 683*da0073e9SAndroid Build Coastguard Worker ): 684*da0073e9SAndroid Build Coastguard Worker os.environ["CC"] = str(os.environ["CC"]) 685*da0073e9SAndroid Build Coastguard Worker 686*da0073e9SAndroid Build Coastguard Worker # It's an old-style class in Python 2.7... 687*da0073e9SAndroid Build Coastguard Worker setuptools.command.build_ext.build_ext.run(self) 688*da0073e9SAndroid Build Coastguard Worker 689*da0073e9SAndroid Build Coastguard Worker if IS_DARWIN and package_type != "conda": 690*da0073e9SAndroid Build Coastguard Worker self._embed_libomp() 691*da0073e9SAndroid Build Coastguard Worker 692*da0073e9SAndroid Build Coastguard Worker # Copy the essential export library to compile C++ extensions. 693*da0073e9SAndroid Build Coastguard Worker if IS_WINDOWS: 694*da0073e9SAndroid Build Coastguard Worker build_temp = self.build_temp 695*da0073e9SAndroid Build Coastguard Worker 696*da0073e9SAndroid Build Coastguard Worker ext_filename = self.get_ext_filename("_C") 697*da0073e9SAndroid Build Coastguard Worker lib_filename = ".".join(ext_filename.split(".")[:-1]) + ".lib" 698*da0073e9SAndroid Build Coastguard Worker 699*da0073e9SAndroid Build Coastguard Worker export_lib = os.path.join( 700*da0073e9SAndroid Build Coastguard Worker build_temp, "torch", "csrc", lib_filename 701*da0073e9SAndroid Build Coastguard Worker ).replace("\\", "/") 702*da0073e9SAndroid Build Coastguard Worker 703*da0073e9SAndroid Build Coastguard Worker build_lib = self.build_lib 704*da0073e9SAndroid Build Coastguard Worker 705*da0073e9SAndroid Build Coastguard Worker target_lib = os.path.join(build_lib, "torch", "lib", "_C.lib").replace( 706*da0073e9SAndroid Build Coastguard Worker "\\", "/" 707*da0073e9SAndroid Build Coastguard Worker ) 708*da0073e9SAndroid Build Coastguard Worker 709*da0073e9SAndroid Build Coastguard Worker # Create "torch/lib" directory if not exists. 710*da0073e9SAndroid Build Coastguard Worker # (It is not created yet in "develop" mode.) 711*da0073e9SAndroid Build Coastguard Worker target_dir = os.path.dirname(target_lib) 712*da0073e9SAndroid Build Coastguard Worker if not os.path.exists(target_dir): 713*da0073e9SAndroid Build Coastguard Worker os.makedirs(target_dir) 714*da0073e9SAndroid Build Coastguard Worker 715*da0073e9SAndroid Build Coastguard Worker self.copy_file(export_lib, target_lib) 716*da0073e9SAndroid Build Coastguard Worker 717*da0073e9SAndroid Build Coastguard Worker def build_extensions(self): 718*da0073e9SAndroid Build Coastguard Worker self.create_compile_commands() 719*da0073e9SAndroid Build Coastguard Worker # The caffe2 extensions are created in 720*da0073e9SAndroid Build Coastguard Worker # tmp_install/lib/pythonM.m/site-packages/caffe2/python/ 721*da0073e9SAndroid Build Coastguard Worker # and need to be copied to build/lib.linux.... , which will be a 722*da0073e9SAndroid Build Coastguard Worker # platform dependent build folder created by the "build" command of 723*da0073e9SAndroid Build Coastguard Worker # setuptools. Only the contents of this folder are installed in the 724*da0073e9SAndroid Build Coastguard Worker # "install" command by default. 725*da0073e9SAndroid Build Coastguard Worker # We only make this copy for Caffe2's pybind extensions 726*da0073e9SAndroid Build Coastguard Worker caffe2_pybind_exts = [ 727*da0073e9SAndroid Build Coastguard Worker "caffe2.python.caffe2_pybind11_state", 728*da0073e9SAndroid Build Coastguard Worker "caffe2.python.caffe2_pybind11_state_gpu", 729*da0073e9SAndroid Build Coastguard Worker "caffe2.python.caffe2_pybind11_state_hip", 730*da0073e9SAndroid Build Coastguard Worker ] 731*da0073e9SAndroid Build Coastguard Worker if BUILD_LIBTORCH_WHL: 732*da0073e9SAndroid Build Coastguard Worker caffe2_pybind_exts = [] 733*da0073e9SAndroid Build Coastguard Worker i = 0 734*da0073e9SAndroid Build Coastguard Worker while i < len(self.extensions): 735*da0073e9SAndroid Build Coastguard Worker ext = self.extensions[i] 736*da0073e9SAndroid Build Coastguard Worker if ext.name not in caffe2_pybind_exts: 737*da0073e9SAndroid Build Coastguard Worker i += 1 738*da0073e9SAndroid Build Coastguard Worker continue 739*da0073e9SAndroid Build Coastguard Worker fullname = self.get_ext_fullname(ext.name) 740*da0073e9SAndroid Build Coastguard Worker filename = self.get_ext_filename(fullname) 741*da0073e9SAndroid Build Coastguard Worker report(f"\nCopying extension {ext.name}") 742*da0073e9SAndroid Build Coastguard Worker 743*da0073e9SAndroid Build Coastguard Worker relative_site_packages = ( 744*da0073e9SAndroid Build Coastguard Worker sysconfig.get_path("purelib") 745*da0073e9SAndroid Build Coastguard Worker .replace(sysconfig.get_path("data"), "") 746*da0073e9SAndroid Build Coastguard Worker .lstrip(os.path.sep) 747*da0073e9SAndroid Build Coastguard Worker ) 748*da0073e9SAndroid Build Coastguard Worker src = os.path.join("torch", relative_site_packages, filename) 749*da0073e9SAndroid Build Coastguard Worker if not os.path.exists(src): 750*da0073e9SAndroid Build Coastguard Worker report(f"{src} does not exist") 751*da0073e9SAndroid Build Coastguard Worker del self.extensions[i] 752*da0073e9SAndroid Build Coastguard Worker else: 753*da0073e9SAndroid Build Coastguard Worker dst = os.path.join(os.path.realpath(self.build_lib), filename) 754*da0073e9SAndroid Build Coastguard Worker report(f"Copying {ext.name} from {src} to {dst}") 755*da0073e9SAndroid Build Coastguard Worker dst_dir = os.path.dirname(dst) 756*da0073e9SAndroid Build Coastguard Worker if not os.path.exists(dst_dir): 757*da0073e9SAndroid Build Coastguard Worker os.makedirs(dst_dir) 758*da0073e9SAndroid Build Coastguard Worker self.copy_file(src, dst) 759*da0073e9SAndroid Build Coastguard Worker i += 1 760*da0073e9SAndroid Build Coastguard Worker 761*da0073e9SAndroid Build Coastguard Worker # Copy functorch extension 762*da0073e9SAndroid Build Coastguard Worker for i, ext in enumerate(self.extensions): 763*da0073e9SAndroid Build Coastguard Worker if ext.name != "functorch._C": 764*da0073e9SAndroid Build Coastguard Worker continue 765*da0073e9SAndroid Build Coastguard Worker fullname = self.get_ext_fullname(ext.name) 766*da0073e9SAndroid Build Coastguard Worker filename = self.get_ext_filename(fullname) 767*da0073e9SAndroid Build Coastguard Worker fileext = os.path.splitext(filename)[1] 768*da0073e9SAndroid Build Coastguard Worker src = os.path.join(os.path.dirname(filename), "functorch" + fileext) 769*da0073e9SAndroid Build Coastguard Worker dst = os.path.join(os.path.realpath(self.build_lib), filename) 770*da0073e9SAndroid Build Coastguard Worker if os.path.exists(src): 771*da0073e9SAndroid Build Coastguard Worker report(f"Copying {ext.name} from {src} to {dst}") 772*da0073e9SAndroid Build Coastguard Worker dst_dir = os.path.dirname(dst) 773*da0073e9SAndroid Build Coastguard Worker if not os.path.exists(dst_dir): 774*da0073e9SAndroid Build Coastguard Worker os.makedirs(dst_dir) 775*da0073e9SAndroid Build Coastguard Worker self.copy_file(src, dst) 776*da0073e9SAndroid Build Coastguard Worker 777*da0073e9SAndroid Build Coastguard Worker setuptools.command.build_ext.build_ext.build_extensions(self) 778*da0073e9SAndroid Build Coastguard Worker 779*da0073e9SAndroid Build Coastguard Worker def get_outputs(self): 780*da0073e9SAndroid Build Coastguard Worker outputs = setuptools.command.build_ext.build_ext.get_outputs(self) 781*da0073e9SAndroid Build Coastguard Worker outputs.append(os.path.join(self.build_lib, "caffe2")) 782*da0073e9SAndroid Build Coastguard Worker report(f"setup.py::get_outputs returning {outputs}") 783*da0073e9SAndroid Build Coastguard Worker return outputs 784*da0073e9SAndroid Build Coastguard Worker 785*da0073e9SAndroid Build Coastguard Worker def create_compile_commands(self): 786*da0073e9SAndroid Build Coastguard Worker def load(filename): 787*da0073e9SAndroid Build Coastguard Worker with open(filename) as f: 788*da0073e9SAndroid Build Coastguard Worker return json.load(f) 789*da0073e9SAndroid Build Coastguard Worker 790*da0073e9SAndroid Build Coastguard Worker ninja_files = glob.glob("build/*compile_commands.json") 791*da0073e9SAndroid Build Coastguard Worker cmake_files = glob.glob("torch/lib/build/*/compile_commands.json") 792*da0073e9SAndroid Build Coastguard Worker all_commands = [entry for f in ninja_files + cmake_files for entry in load(f)] 793*da0073e9SAndroid Build Coastguard Worker 794*da0073e9SAndroid Build Coastguard Worker # cquery does not like c++ compiles that start with gcc. 795*da0073e9SAndroid Build Coastguard Worker # It forgets to include the c++ header directories. 796*da0073e9SAndroid Build Coastguard Worker # We can work around this by replacing the gcc calls that python 797*da0073e9SAndroid Build Coastguard Worker # setup.py generates with g++ calls instead 798*da0073e9SAndroid Build Coastguard Worker for command in all_commands: 799*da0073e9SAndroid Build Coastguard Worker if command["command"].startswith("gcc "): 800*da0073e9SAndroid Build Coastguard Worker command["command"] = "g++ " + command["command"][4:] 801*da0073e9SAndroid Build Coastguard Worker 802*da0073e9SAndroid Build Coastguard Worker new_contents = json.dumps(all_commands, indent=2) 803*da0073e9SAndroid Build Coastguard Worker contents = "" 804*da0073e9SAndroid Build Coastguard Worker if os.path.exists("compile_commands.json"): 805*da0073e9SAndroid Build Coastguard Worker with open("compile_commands.json") as f: 806*da0073e9SAndroid Build Coastguard Worker contents = f.read() 807*da0073e9SAndroid Build Coastguard Worker if contents != new_contents: 808*da0073e9SAndroid Build Coastguard Worker with open("compile_commands.json", "w") as f: 809*da0073e9SAndroid Build Coastguard Worker f.write(new_contents) 810*da0073e9SAndroid Build Coastguard Worker 811*da0073e9SAndroid Build Coastguard Worker 812*da0073e9SAndroid Build Coastguard Workerclass concat_license_files: 813*da0073e9SAndroid Build Coastguard Worker """Merge LICENSE and LICENSES_BUNDLED.txt as a context manager 814*da0073e9SAndroid Build Coastguard Worker 815*da0073e9SAndroid Build Coastguard Worker LICENSE is the main PyTorch license, LICENSES_BUNDLED.txt is auto-generated 816*da0073e9SAndroid Build Coastguard Worker from all the licenses found in ./third_party/. We concatenate them so there 817*da0073e9SAndroid Build Coastguard Worker is a single license file in the sdist and wheels with all of the necessary 818*da0073e9SAndroid Build Coastguard Worker licensing info. 819*da0073e9SAndroid Build Coastguard Worker """ 820*da0073e9SAndroid Build Coastguard Worker 821*da0073e9SAndroid Build Coastguard Worker def __init__(self, include_files=False): 822*da0073e9SAndroid Build Coastguard Worker self.f1 = "LICENSE" 823*da0073e9SAndroid Build Coastguard Worker self.f2 = "third_party/LICENSES_BUNDLED.txt" 824*da0073e9SAndroid Build Coastguard Worker self.include_files = include_files 825*da0073e9SAndroid Build Coastguard Worker 826*da0073e9SAndroid Build Coastguard Worker def __enter__(self): 827*da0073e9SAndroid Build Coastguard Worker """Concatenate files""" 828*da0073e9SAndroid Build Coastguard Worker 829*da0073e9SAndroid Build Coastguard Worker old_path = sys.path 830*da0073e9SAndroid Build Coastguard Worker sys.path.append(third_party_path) 831*da0073e9SAndroid Build Coastguard Worker try: 832*da0073e9SAndroid Build Coastguard Worker from build_bundled import create_bundled 833*da0073e9SAndroid Build Coastguard Worker finally: 834*da0073e9SAndroid Build Coastguard Worker sys.path = old_path 835*da0073e9SAndroid Build Coastguard Worker 836*da0073e9SAndroid Build Coastguard Worker with open(self.f1) as f1: 837*da0073e9SAndroid Build Coastguard Worker self.bsd_text = f1.read() 838*da0073e9SAndroid Build Coastguard Worker 839*da0073e9SAndroid Build Coastguard Worker with open(self.f1, "a") as f1: 840*da0073e9SAndroid Build Coastguard Worker f1.write("\n\n") 841*da0073e9SAndroid Build Coastguard Worker create_bundled( 842*da0073e9SAndroid Build Coastguard Worker os.path.relpath(third_party_path), f1, include_files=self.include_files 843*da0073e9SAndroid Build Coastguard Worker ) 844*da0073e9SAndroid Build Coastguard Worker 845*da0073e9SAndroid Build Coastguard Worker def __exit__(self, exception_type, exception_value, traceback): 846*da0073e9SAndroid Build Coastguard Worker """Restore content of f1""" 847*da0073e9SAndroid Build Coastguard Worker with open(self.f1, "w") as f: 848*da0073e9SAndroid Build Coastguard Worker f.write(self.bsd_text) 849*da0073e9SAndroid Build Coastguard Worker 850*da0073e9SAndroid Build Coastguard Worker 851*da0073e9SAndroid Build Coastguard Workertry: 852*da0073e9SAndroid Build Coastguard Worker from wheel.bdist_wheel import bdist_wheel 853*da0073e9SAndroid Build Coastguard Workerexcept ImportError: 854*da0073e9SAndroid Build Coastguard Worker # This is useful when wheel is not installed and bdist_wheel is not 855*da0073e9SAndroid Build Coastguard Worker # specified on the command line. If it _is_ specified, parsing the command 856*da0073e9SAndroid Build Coastguard Worker # line will fail before wheel_concatenate is needed 857*da0073e9SAndroid Build Coastguard Worker wheel_concatenate = None 858*da0073e9SAndroid Build Coastguard Workerelse: 859*da0073e9SAndroid Build Coastguard Worker # Need to create the proper LICENSE.txt for the wheel 860*da0073e9SAndroid Build Coastguard Worker class wheel_concatenate(bdist_wheel): 861*da0073e9SAndroid Build Coastguard Worker """check submodules on sdist to prevent incomplete tarballs""" 862*da0073e9SAndroid Build Coastguard Worker 863*da0073e9SAndroid Build Coastguard Worker def run(self): 864*da0073e9SAndroid Build Coastguard Worker with concat_license_files(include_files=True): 865*da0073e9SAndroid Build Coastguard Worker super().run() 866*da0073e9SAndroid Build Coastguard Worker 867*da0073e9SAndroid Build Coastguard Worker def write_wheelfile(self, *args, **kwargs): 868*da0073e9SAndroid Build Coastguard Worker super().write_wheelfile(*args, **kwargs) 869*da0073e9SAndroid Build Coastguard Worker 870*da0073e9SAndroid Build Coastguard Worker if BUILD_LIBTORCH_WHL: 871*da0073e9SAndroid Build Coastguard Worker # Remove extraneneous files in the libtorch wheel 872*da0073e9SAndroid Build Coastguard Worker for root, dirs, files in os.walk(self.bdist_dir): 873*da0073e9SAndroid Build Coastguard Worker for file in files: 874*da0073e9SAndroid Build Coastguard Worker if file.endswith((".a", ".so")) and os.path.isfile( 875*da0073e9SAndroid Build Coastguard Worker os.path.join(self.bdist_dir, file) 876*da0073e9SAndroid Build Coastguard Worker ): 877*da0073e9SAndroid Build Coastguard Worker os.remove(os.path.join(root, file)) 878*da0073e9SAndroid Build Coastguard Worker elif file.endswith(".py"): 879*da0073e9SAndroid Build Coastguard Worker os.remove(os.path.join(root, file)) 880*da0073e9SAndroid Build Coastguard Worker # need an __init__.py file otherwise we wouldn't have a package 881*da0073e9SAndroid Build Coastguard Worker open(os.path.join(self.bdist_dir, "torch", "__init__.py"), "w").close() 882*da0073e9SAndroid Build Coastguard Worker 883*da0073e9SAndroid Build Coastguard Worker 884*da0073e9SAndroid Build Coastguard Workerclass install(setuptools.command.install.install): 885*da0073e9SAndroid Build Coastguard Worker def run(self): 886*da0073e9SAndroid Build Coastguard Worker super().run() 887*da0073e9SAndroid Build Coastguard Worker 888*da0073e9SAndroid Build Coastguard Worker 889*da0073e9SAndroid Build Coastguard Workerclass clean(setuptools.Command): 890*da0073e9SAndroid Build Coastguard Worker user_options = [] 891*da0073e9SAndroid Build Coastguard Worker 892*da0073e9SAndroid Build Coastguard Worker def initialize_options(self): 893*da0073e9SAndroid Build Coastguard Worker pass 894*da0073e9SAndroid Build Coastguard Worker 895*da0073e9SAndroid Build Coastguard Worker def finalize_options(self): 896*da0073e9SAndroid Build Coastguard Worker pass 897*da0073e9SAndroid Build Coastguard Worker 898*da0073e9SAndroid Build Coastguard Worker def run(self): 899*da0073e9SAndroid Build Coastguard Worker import glob 900*da0073e9SAndroid Build Coastguard Worker import re 901*da0073e9SAndroid Build Coastguard Worker 902*da0073e9SAndroid Build Coastguard Worker with open(".gitignore") as f: 903*da0073e9SAndroid Build Coastguard Worker ignores = f.read() 904*da0073e9SAndroid Build Coastguard Worker pat = re.compile(r"^#( BEGIN NOT-CLEAN-FILES )?") 905*da0073e9SAndroid Build Coastguard Worker for wildcard in filter(None, ignores.split("\n")): 906*da0073e9SAndroid Build Coastguard Worker match = pat.match(wildcard) 907*da0073e9SAndroid Build Coastguard Worker if match: 908*da0073e9SAndroid Build Coastguard Worker if match.group(1): 909*da0073e9SAndroid Build Coastguard Worker # Marker is found and stop reading .gitignore. 910*da0073e9SAndroid Build Coastguard Worker break 911*da0073e9SAndroid Build Coastguard Worker # Ignore lines which begin with '#'. 912*da0073e9SAndroid Build Coastguard Worker else: 913*da0073e9SAndroid Build Coastguard Worker # Don't remove absolute paths from the system 914*da0073e9SAndroid Build Coastguard Worker wildcard = wildcard.lstrip("./") 915*da0073e9SAndroid Build Coastguard Worker 916*da0073e9SAndroid Build Coastguard Worker for filename in glob.glob(wildcard): 917*da0073e9SAndroid Build Coastguard Worker try: 918*da0073e9SAndroid Build Coastguard Worker os.remove(filename) 919*da0073e9SAndroid Build Coastguard Worker except OSError: 920*da0073e9SAndroid Build Coastguard Worker shutil.rmtree(filename, ignore_errors=True) 921*da0073e9SAndroid Build Coastguard Worker 922*da0073e9SAndroid Build Coastguard Worker 923*da0073e9SAndroid Build Coastguard Workerclass sdist(setuptools.command.sdist.sdist): 924*da0073e9SAndroid Build Coastguard Worker def run(self): 925*da0073e9SAndroid Build Coastguard Worker with concat_license_files(): 926*da0073e9SAndroid Build Coastguard Worker super().run() 927*da0073e9SAndroid Build Coastguard Worker 928*da0073e9SAndroid Build Coastguard Worker 929*da0073e9SAndroid Build Coastguard Workerdef get_cmake_cache_vars(): 930*da0073e9SAndroid Build Coastguard Worker try: 931*da0073e9SAndroid Build Coastguard Worker return defaultdict(lambda: False, cmake.get_cmake_cache_variables()) 932*da0073e9SAndroid Build Coastguard Worker except FileNotFoundError: 933*da0073e9SAndroid Build Coastguard Worker # CMakeCache.txt does not exist. Probably running "python setup.py clean" over a clean directory. 934*da0073e9SAndroid Build Coastguard Worker return defaultdict(lambda: False) 935*da0073e9SAndroid Build Coastguard Worker 936*da0073e9SAndroid Build Coastguard Worker 937*da0073e9SAndroid Build Coastguard Workerdef configure_extension_build(): 938*da0073e9SAndroid Build Coastguard Worker r"""Configures extension build options according to system environment and user's choice. 939*da0073e9SAndroid Build Coastguard Worker 940*da0073e9SAndroid Build Coastguard Worker Returns: 941*da0073e9SAndroid Build Coastguard Worker The input to parameters ext_modules, cmdclass, packages, and entry_points as required in setuptools.setup. 942*da0073e9SAndroid Build Coastguard Worker """ 943*da0073e9SAndroid Build Coastguard Worker 944*da0073e9SAndroid Build Coastguard Worker cmake_cache_vars = get_cmake_cache_vars() 945*da0073e9SAndroid Build Coastguard Worker 946*da0073e9SAndroid Build Coastguard Worker ################################################################################ 947*da0073e9SAndroid Build Coastguard Worker # Configure compile flags 948*da0073e9SAndroid Build Coastguard Worker ################################################################################ 949*da0073e9SAndroid Build Coastguard Worker 950*da0073e9SAndroid Build Coastguard Worker library_dirs = [] 951*da0073e9SAndroid Build Coastguard Worker extra_install_requires = [] 952*da0073e9SAndroid Build Coastguard Worker 953*da0073e9SAndroid Build Coastguard Worker if IS_WINDOWS: 954*da0073e9SAndroid Build Coastguard Worker # /NODEFAULTLIB makes sure we only link to DLL runtime 955*da0073e9SAndroid Build Coastguard Worker # and matches the flags set for protobuf and ONNX 956*da0073e9SAndroid Build Coastguard Worker extra_link_args = ["/NODEFAULTLIB:LIBCMT.LIB"] 957*da0073e9SAndroid Build Coastguard Worker # /MD links against DLL runtime 958*da0073e9SAndroid Build Coastguard Worker # and matches the flags set for protobuf and ONNX 959*da0073e9SAndroid Build Coastguard Worker # /EHsc is about standard C++ exception handling 960*da0073e9SAndroid Build Coastguard Worker extra_compile_args = ["/MD", "/FS", "/EHsc"] 961*da0073e9SAndroid Build Coastguard Worker else: 962*da0073e9SAndroid Build Coastguard Worker extra_link_args = [] 963*da0073e9SAndroid Build Coastguard Worker extra_compile_args = [ 964*da0073e9SAndroid Build Coastguard Worker "-Wall", 965*da0073e9SAndroid Build Coastguard Worker "-Wextra", 966*da0073e9SAndroid Build Coastguard Worker "-Wno-strict-overflow", 967*da0073e9SAndroid Build Coastguard Worker "-Wno-unused-parameter", 968*da0073e9SAndroid Build Coastguard Worker "-Wno-missing-field-initializers", 969*da0073e9SAndroid Build Coastguard Worker "-Wno-unknown-pragmas", 970*da0073e9SAndroid Build Coastguard Worker # Python 2.6 requires -fno-strict-aliasing, see 971*da0073e9SAndroid Build Coastguard Worker # http://legacy.python.org/dev/peps/pep-3123/ 972*da0073e9SAndroid Build Coastguard Worker # We also depend on it in our code (even Python 3). 973*da0073e9SAndroid Build Coastguard Worker "-fno-strict-aliasing", 974*da0073e9SAndroid Build Coastguard Worker ] 975*da0073e9SAndroid Build Coastguard Worker 976*da0073e9SAndroid Build Coastguard Worker library_dirs.append(lib_path) 977*da0073e9SAndroid Build Coastguard Worker 978*da0073e9SAndroid Build Coastguard Worker main_compile_args = [] 979*da0073e9SAndroid Build Coastguard Worker main_libraries = ["torch_python"] 980*da0073e9SAndroid Build Coastguard Worker 981*da0073e9SAndroid Build Coastguard Worker main_link_args = [] 982*da0073e9SAndroid Build Coastguard Worker main_sources = ["torch/csrc/stub.c"] 983*da0073e9SAndroid Build Coastguard Worker 984*da0073e9SAndroid Build Coastguard Worker if BUILD_LIBTORCH_WHL: 985*da0073e9SAndroid Build Coastguard Worker main_libraries = ["torch"] 986*da0073e9SAndroid Build Coastguard Worker main_sources = [] 987*da0073e9SAndroid Build Coastguard Worker 988*da0073e9SAndroid Build Coastguard Worker if build_type.is_debug(): 989*da0073e9SAndroid Build Coastguard Worker if IS_WINDOWS: 990*da0073e9SAndroid Build Coastguard Worker extra_compile_args.append("/Z7") 991*da0073e9SAndroid Build Coastguard Worker extra_link_args.append("/DEBUG:FULL") 992*da0073e9SAndroid Build Coastguard Worker else: 993*da0073e9SAndroid Build Coastguard Worker extra_compile_args += ["-O0", "-g"] 994*da0073e9SAndroid Build Coastguard Worker extra_link_args += ["-O0", "-g"] 995*da0073e9SAndroid Build Coastguard Worker 996*da0073e9SAndroid Build Coastguard Worker if build_type.is_rel_with_deb_info(): 997*da0073e9SAndroid Build Coastguard Worker if IS_WINDOWS: 998*da0073e9SAndroid Build Coastguard Worker extra_compile_args.append("/Z7") 999*da0073e9SAndroid Build Coastguard Worker extra_link_args.append("/DEBUG:FULL") 1000*da0073e9SAndroid Build Coastguard Worker else: 1001*da0073e9SAndroid Build Coastguard Worker extra_compile_args += ["-g"] 1002*da0073e9SAndroid Build Coastguard Worker extra_link_args += ["-g"] 1003*da0073e9SAndroid Build Coastguard Worker 1004*da0073e9SAndroid Build Coastguard Worker # pypi cuda package that requires installation of cuda runtime, cudnn and cublas 1005*da0073e9SAndroid Build Coastguard Worker # should be included in all wheels uploaded to pypi 1006*da0073e9SAndroid Build Coastguard Worker pytorch_extra_install_requirements = os.getenv( 1007*da0073e9SAndroid Build Coastguard Worker "PYTORCH_EXTRA_INSTALL_REQUIREMENTS", "" 1008*da0073e9SAndroid Build Coastguard Worker ) 1009*da0073e9SAndroid Build Coastguard Worker if pytorch_extra_install_requirements: 1010*da0073e9SAndroid Build Coastguard Worker report( 1011*da0073e9SAndroid Build Coastguard Worker f"pytorch_extra_install_requirements: {pytorch_extra_install_requirements}" 1012*da0073e9SAndroid Build Coastguard Worker ) 1013*da0073e9SAndroid Build Coastguard Worker extra_install_requires += pytorch_extra_install_requirements.split("|") 1014*da0073e9SAndroid Build Coastguard Worker 1015*da0073e9SAndroid Build Coastguard Worker # Cross-compile for M1 1016*da0073e9SAndroid Build Coastguard Worker if IS_DARWIN: 1017*da0073e9SAndroid Build Coastguard Worker macos_target_arch = os.getenv("CMAKE_OSX_ARCHITECTURES", "") 1018*da0073e9SAndroid Build Coastguard Worker if macos_target_arch in ["arm64", "x86_64"]: 1019*da0073e9SAndroid Build Coastguard Worker macos_sysroot_path = os.getenv("CMAKE_OSX_SYSROOT") 1020*da0073e9SAndroid Build Coastguard Worker if macos_sysroot_path is None: 1021*da0073e9SAndroid Build Coastguard Worker macos_sysroot_path = ( 1022*da0073e9SAndroid Build Coastguard Worker subprocess.check_output( 1023*da0073e9SAndroid Build Coastguard Worker ["xcrun", "--show-sdk-path", "--sdk", "macosx"] 1024*da0073e9SAndroid Build Coastguard Worker ) 1025*da0073e9SAndroid Build Coastguard Worker .decode("utf-8") 1026*da0073e9SAndroid Build Coastguard Worker .strip() 1027*da0073e9SAndroid Build Coastguard Worker ) 1028*da0073e9SAndroid Build Coastguard Worker extra_compile_args += [ 1029*da0073e9SAndroid Build Coastguard Worker "-arch", 1030*da0073e9SAndroid Build Coastguard Worker macos_target_arch, 1031*da0073e9SAndroid Build Coastguard Worker "-isysroot", 1032*da0073e9SAndroid Build Coastguard Worker macos_sysroot_path, 1033*da0073e9SAndroid Build Coastguard Worker ] 1034*da0073e9SAndroid Build Coastguard Worker extra_link_args += ["-arch", macos_target_arch] 1035*da0073e9SAndroid Build Coastguard Worker 1036*da0073e9SAndroid Build Coastguard Worker def make_relative_rpath_args(path): 1037*da0073e9SAndroid Build Coastguard Worker if IS_DARWIN: 1038*da0073e9SAndroid Build Coastguard Worker return ["-Wl,-rpath,@loader_path/" + path] 1039*da0073e9SAndroid Build Coastguard Worker elif IS_WINDOWS: 1040*da0073e9SAndroid Build Coastguard Worker return [] 1041*da0073e9SAndroid Build Coastguard Worker else: 1042*da0073e9SAndroid Build Coastguard Worker return ["-Wl,-rpath,$ORIGIN/" + path] 1043*da0073e9SAndroid Build Coastguard Worker 1044*da0073e9SAndroid Build Coastguard Worker ################################################################################ 1045*da0073e9SAndroid Build Coastguard Worker # Declare extensions and package 1046*da0073e9SAndroid Build Coastguard Worker ################################################################################ 1047*da0073e9SAndroid Build Coastguard Worker 1048*da0073e9SAndroid Build Coastguard Worker extensions = [] 1049*da0073e9SAndroid Build Coastguard Worker excludes = ["tools", "tools.*"] 1050*da0073e9SAndroid Build Coastguard Worker if not cmake_cache_vars["BUILD_CAFFE2"]: 1051*da0073e9SAndroid Build Coastguard Worker excludes.extend(["caffe2", "caffe2.*"]) 1052*da0073e9SAndroid Build Coastguard Worker if not cmake_cache_vars["BUILD_FUNCTORCH"]: 1053*da0073e9SAndroid Build Coastguard Worker excludes.extend(["functorch", "functorch.*"]) 1054*da0073e9SAndroid Build Coastguard Worker packages = find_packages(exclude=excludes) 1055*da0073e9SAndroid Build Coastguard Worker C = Extension( 1056*da0073e9SAndroid Build Coastguard Worker "torch._C", 1057*da0073e9SAndroid Build Coastguard Worker libraries=main_libraries, 1058*da0073e9SAndroid Build Coastguard Worker sources=main_sources, 1059*da0073e9SAndroid Build Coastguard Worker language="c", 1060*da0073e9SAndroid Build Coastguard Worker extra_compile_args=main_compile_args + extra_compile_args, 1061*da0073e9SAndroid Build Coastguard Worker include_dirs=[], 1062*da0073e9SAndroid Build Coastguard Worker library_dirs=library_dirs, 1063*da0073e9SAndroid Build Coastguard Worker extra_link_args=extra_link_args 1064*da0073e9SAndroid Build Coastguard Worker + main_link_args 1065*da0073e9SAndroid Build Coastguard Worker + make_relative_rpath_args("lib"), 1066*da0073e9SAndroid Build Coastguard Worker ) 1067*da0073e9SAndroid Build Coastguard Worker extensions.append(C) 1068*da0073e9SAndroid Build Coastguard Worker 1069*da0073e9SAndroid Build Coastguard Worker # These extensions are built by cmake and copied manually in build_extensions() 1070*da0073e9SAndroid Build Coastguard Worker # inside the build_ext implementation 1071*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["BUILD_CAFFE2"]: 1072*da0073e9SAndroid Build Coastguard Worker extensions.append( 1073*da0073e9SAndroid Build Coastguard Worker Extension(name="caffe2.python.caffe2_pybind11_state", sources=[]), 1074*da0073e9SAndroid Build Coastguard Worker ) 1075*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_CUDA"]: 1076*da0073e9SAndroid Build Coastguard Worker extensions.append( 1077*da0073e9SAndroid Build Coastguard Worker Extension(name="caffe2.python.caffe2_pybind11_state_gpu", sources=[]), 1078*da0073e9SAndroid Build Coastguard Worker ) 1079*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_ROCM"]: 1080*da0073e9SAndroid Build Coastguard Worker extensions.append( 1081*da0073e9SAndroid Build Coastguard Worker Extension(name="caffe2.python.caffe2_pybind11_state_hip", sources=[]), 1082*da0073e9SAndroid Build Coastguard Worker ) 1083*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["BUILD_FUNCTORCH"]: 1084*da0073e9SAndroid Build Coastguard Worker extensions.append( 1085*da0073e9SAndroid Build Coastguard Worker Extension(name="functorch._C", sources=[]), 1086*da0073e9SAndroid Build Coastguard Worker ) 1087*da0073e9SAndroid Build Coastguard Worker 1088*da0073e9SAndroid Build Coastguard Worker cmdclass = { 1089*da0073e9SAndroid Build Coastguard Worker "bdist_wheel": wheel_concatenate, 1090*da0073e9SAndroid Build Coastguard Worker "build_ext": build_ext, 1091*da0073e9SAndroid Build Coastguard Worker "clean": clean, 1092*da0073e9SAndroid Build Coastguard Worker "install": install, 1093*da0073e9SAndroid Build Coastguard Worker "sdist": sdist, 1094*da0073e9SAndroid Build Coastguard Worker } 1095*da0073e9SAndroid Build Coastguard Worker 1096*da0073e9SAndroid Build Coastguard Worker entry_points = { 1097*da0073e9SAndroid Build Coastguard Worker "console_scripts": [ 1098*da0073e9SAndroid Build Coastguard Worker "convert-caffe2-to-onnx = caffe2.python.onnx.bin.conversion:caffe2_to_onnx", 1099*da0073e9SAndroid Build Coastguard Worker "convert-onnx-to-caffe2 = caffe2.python.onnx.bin.conversion:onnx_to_caffe2", 1100*da0073e9SAndroid Build Coastguard Worker "torchrun = torch.distributed.run:main", 1101*da0073e9SAndroid Build Coastguard Worker ], 1102*da0073e9SAndroid Build Coastguard Worker "torchrun.logs_specs": [ 1103*da0073e9SAndroid Build Coastguard Worker "default = torch.distributed.elastic.multiprocessing:DefaultLogsSpecs", 1104*da0073e9SAndroid Build Coastguard Worker ], 1105*da0073e9SAndroid Build Coastguard Worker } 1106*da0073e9SAndroid Build Coastguard Worker 1107*da0073e9SAndroid Build Coastguard Worker if cmake_cache_vars["USE_DISTRIBUTED"]: 1108*da0073e9SAndroid Build Coastguard Worker # Only enable fr_trace command if distributed is enabled 1109*da0073e9SAndroid Build Coastguard Worker entry_points["console_scripts"].append( 1110*da0073e9SAndroid Build Coastguard Worker "torchfrtrace = tools.flight_recorder.fr_trace:main", 1111*da0073e9SAndroid Build Coastguard Worker ) 1112*da0073e9SAndroid Build Coastguard Worker return extensions, cmdclass, packages, entry_points, extra_install_requires 1113*da0073e9SAndroid Build Coastguard Worker 1114*da0073e9SAndroid Build Coastguard Worker 1115*da0073e9SAndroid Build Coastguard Worker# post run, warnings, printed at the end to make them more visible 1116*da0073e9SAndroid Build Coastguard Workerbuild_update_message = """ 1117*da0073e9SAndroid Build Coastguard Worker It is no longer necessary to use the 'build' or 'rebuild' targets 1118*da0073e9SAndroid Build Coastguard Worker 1119*da0073e9SAndroid Build Coastguard Worker To install: 1120*da0073e9SAndroid Build Coastguard Worker $ python setup.py install 1121*da0073e9SAndroid Build Coastguard Worker To develop locally: 1122*da0073e9SAndroid Build Coastguard Worker $ python setup.py develop 1123*da0073e9SAndroid Build Coastguard Worker To force cmake to re-generate native build files (off by default): 1124*da0073e9SAndroid Build Coastguard Worker $ python setup.py develop --cmake 1125*da0073e9SAndroid Build Coastguard Worker""" 1126*da0073e9SAndroid Build Coastguard Worker 1127*da0073e9SAndroid Build Coastguard Worker 1128*da0073e9SAndroid Build Coastguard Workerdef print_box(msg): 1129*da0073e9SAndroid Build Coastguard Worker lines = msg.split("\n") 1130*da0073e9SAndroid Build Coastguard Worker size = max(len(l) + 1 for l in lines) 1131*da0073e9SAndroid Build Coastguard Worker print("-" * (size + 2)) 1132*da0073e9SAndroid Build Coastguard Worker for l in lines: 1133*da0073e9SAndroid Build Coastguard Worker print("|{}{}|".format(l, " " * (size - len(l)))) 1134*da0073e9SAndroid Build Coastguard Worker print("-" * (size + 2)) 1135*da0073e9SAndroid Build Coastguard Worker 1136*da0073e9SAndroid Build Coastguard Worker 1137*da0073e9SAndroid Build Coastguard Workerdef main(): 1138*da0073e9SAndroid Build Coastguard Worker if BUILD_LIBTORCH_WHL and BUILD_PYTHON_ONLY: 1139*da0073e9SAndroid Build Coastguard Worker raise RuntimeError( 1140*da0073e9SAndroid Build Coastguard Worker "Conflict: 'BUILD_LIBTORCH_WHL' and 'BUILD_PYTHON_ONLY' can't both be 1. Set one to 0 and rerun." 1141*da0073e9SAndroid Build Coastguard Worker ) 1142*da0073e9SAndroid Build Coastguard Worker install_requires = [ 1143*da0073e9SAndroid Build Coastguard Worker "filelock", 1144*da0073e9SAndroid Build Coastguard Worker "typing-extensions>=4.8.0", 1145*da0073e9SAndroid Build Coastguard Worker 'setuptools ; python_version >= "3.12"', 1146*da0073e9SAndroid Build Coastguard Worker 'sympy==1.12.1 ; python_version == "3.8"', 1147*da0073e9SAndroid Build Coastguard Worker 'sympy==1.13.1 ; python_version >= "3.9"', 1148*da0073e9SAndroid Build Coastguard Worker "networkx", 1149*da0073e9SAndroid Build Coastguard Worker "jinja2", 1150*da0073e9SAndroid Build Coastguard Worker "fsspec", 1151*da0073e9SAndroid Build Coastguard Worker ] 1152*da0073e9SAndroid Build Coastguard Worker 1153*da0073e9SAndroid Build Coastguard Worker if BUILD_PYTHON_ONLY: 1154*da0073e9SAndroid Build Coastguard Worker install_requires.append(f"{LIBTORCH_PKG_NAME}=={get_torch_version()}") 1155*da0073e9SAndroid Build Coastguard Worker 1156*da0073e9SAndroid Build Coastguard Worker use_prioritized_text = str(os.getenv("USE_PRIORITIZED_TEXT_FOR_LD", "")) 1157*da0073e9SAndroid Build Coastguard Worker if ( 1158*da0073e9SAndroid Build Coastguard Worker use_prioritized_text == "" 1159*da0073e9SAndroid Build Coastguard Worker and platform.system() == "Linux" 1160*da0073e9SAndroid Build Coastguard Worker and platform.processor() == "aarch64" 1161*da0073e9SAndroid Build Coastguard Worker ): 1162*da0073e9SAndroid Build Coastguard Worker print_box( 1163*da0073e9SAndroid Build Coastguard Worker """ 1164*da0073e9SAndroid Build Coastguard Worker WARNING: we strongly recommend enabling linker script optimization for ARM + CUDA. 1165*da0073e9SAndroid Build Coastguard Worker To do so please export USE_PRIORITIZED_TEXT_FOR_LD=1 1166*da0073e9SAndroid Build Coastguard Worker """ 1167*da0073e9SAndroid Build Coastguard Worker ) 1168*da0073e9SAndroid Build Coastguard Worker if use_prioritized_text == "1" or use_prioritized_text == "True": 1169*da0073e9SAndroid Build Coastguard Worker gen_linker_script( 1170*da0073e9SAndroid Build Coastguard Worker filein="cmake/prioritized_text.txt", fout="cmake/linker_script.ld" 1171*da0073e9SAndroid Build Coastguard Worker ) 1172*da0073e9SAndroid Build Coastguard Worker linker_script_path = os.path.abspath("cmake/linker_script.ld") 1173*da0073e9SAndroid Build Coastguard Worker os.environ["LDFLAGS"] = os.getenv("LDFLAGS", "") + f" -T{linker_script_path}" 1174*da0073e9SAndroid Build Coastguard Worker os.environ["CFLAGS"] = ( 1175*da0073e9SAndroid Build Coastguard Worker os.getenv("CFLAGS", "") + " -ffunction-sections -fdata-sections" 1176*da0073e9SAndroid Build Coastguard Worker ) 1177*da0073e9SAndroid Build Coastguard Worker os.environ["CXXFLAGS"] = ( 1178*da0073e9SAndroid Build Coastguard Worker os.getenv("CXXFLAGS", "") + " -ffunction-sections -fdata-sections" 1179*da0073e9SAndroid Build Coastguard Worker ) 1180*da0073e9SAndroid Build Coastguard Worker 1181*da0073e9SAndroid Build Coastguard Worker # Parse the command line and check the arguments before we proceed with 1182*da0073e9SAndroid Build Coastguard Worker # building deps and setup. We need to set values so `--help` works. 1183*da0073e9SAndroid Build Coastguard Worker dist = Distribution() 1184*da0073e9SAndroid Build Coastguard Worker dist.script_name = os.path.basename(sys.argv[0]) 1185*da0073e9SAndroid Build Coastguard Worker dist.script_args = sys.argv[1:] 1186*da0073e9SAndroid Build Coastguard Worker try: 1187*da0073e9SAndroid Build Coastguard Worker dist.parse_command_line() 1188*da0073e9SAndroid Build Coastguard Worker except setuptools.distutils.errors.DistutilsArgError as e: 1189*da0073e9SAndroid Build Coastguard Worker print(e) 1190*da0073e9SAndroid Build Coastguard Worker sys.exit(1) 1191*da0073e9SAndroid Build Coastguard Worker 1192*da0073e9SAndroid Build Coastguard Worker mirror_files_into_torchgen() 1193*da0073e9SAndroid Build Coastguard Worker if RUN_BUILD_DEPS: 1194*da0073e9SAndroid Build Coastguard Worker build_deps() 1195*da0073e9SAndroid Build Coastguard Worker 1196*da0073e9SAndroid Build Coastguard Worker ( 1197*da0073e9SAndroid Build Coastguard Worker extensions, 1198*da0073e9SAndroid Build Coastguard Worker cmdclass, 1199*da0073e9SAndroid Build Coastguard Worker packages, 1200*da0073e9SAndroid Build Coastguard Worker entry_points, 1201*da0073e9SAndroid Build Coastguard Worker extra_install_requires, 1202*da0073e9SAndroid Build Coastguard Worker ) = configure_extension_build() 1203*da0073e9SAndroid Build Coastguard Worker install_requires += extra_install_requires 1204*da0073e9SAndroid Build Coastguard Worker 1205*da0073e9SAndroid Build Coastguard Worker extras_require = { 1206*da0073e9SAndroid Build Coastguard Worker "optree": ["optree>=0.12.0"], 1207*da0073e9SAndroid Build Coastguard Worker "opt-einsum": ["opt-einsum>=3.3"], 1208*da0073e9SAndroid Build Coastguard Worker } 1209*da0073e9SAndroid Build Coastguard Worker 1210*da0073e9SAndroid Build Coastguard Worker # Read in README.md for our long_description 1211*da0073e9SAndroid Build Coastguard Worker with open(os.path.join(cwd, "README.md"), encoding="utf-8") as f: 1212*da0073e9SAndroid Build Coastguard Worker long_description = f.read() 1213*da0073e9SAndroid Build Coastguard Worker 1214*da0073e9SAndroid Build Coastguard Worker version_range_max = max(sys.version_info[1], 12) + 1 1215*da0073e9SAndroid Build Coastguard Worker torch_package_data = [ 1216*da0073e9SAndroid Build Coastguard Worker "py.typed", 1217*da0073e9SAndroid Build Coastguard Worker "bin/*", 1218*da0073e9SAndroid Build Coastguard Worker "test/*", 1219*da0073e9SAndroid Build Coastguard Worker "*.pyi", 1220*da0073e9SAndroid Build Coastguard Worker "_C/*.pyi", 1221*da0073e9SAndroid Build Coastguard Worker "cuda/*.pyi", 1222*da0073e9SAndroid Build Coastguard Worker "fx/*.pyi", 1223*da0073e9SAndroid Build Coastguard Worker "optim/*.pyi", 1224*da0073e9SAndroid Build Coastguard Worker "autograd/*.pyi", 1225*da0073e9SAndroid Build Coastguard Worker "jit/*.pyi", 1226*da0073e9SAndroid Build Coastguard Worker "nn/*.pyi", 1227*da0073e9SAndroid Build Coastguard Worker "nn/modules/*.pyi", 1228*da0073e9SAndroid Build Coastguard Worker "nn/parallel/*.pyi", 1229*da0073e9SAndroid Build Coastguard Worker "utils/data/*.pyi", 1230*da0073e9SAndroid Build Coastguard Worker "utils/data/datapipes/*.pyi", 1231*da0073e9SAndroid Build Coastguard Worker "lib/*.pdb", 1232*da0073e9SAndroid Build Coastguard Worker "lib/*shm*", 1233*da0073e9SAndroid Build Coastguard Worker "lib/torch_shm_manager", 1234*da0073e9SAndroid Build Coastguard Worker "lib/*.h", 1235*da0073e9SAndroid Build Coastguard Worker "include/*.h", 1236*da0073e9SAndroid Build Coastguard Worker "include/ATen/*.h", 1237*da0073e9SAndroid Build Coastguard Worker "include/ATen/cpu/*.h", 1238*da0073e9SAndroid Build Coastguard Worker "include/ATen/cpu/vec/vec256/*.h", 1239*da0073e9SAndroid Build Coastguard Worker "include/ATen/cpu/vec/vec256/vsx/*.h", 1240*da0073e9SAndroid Build Coastguard Worker "include/ATen/cpu/vec/vec256/zarch/*.h", 1241*da0073e9SAndroid Build Coastguard Worker "include/ATen/cpu/vec/vec512/*.h", 1242*da0073e9SAndroid Build Coastguard Worker "include/ATen/cpu/vec/*.h", 1243*da0073e9SAndroid Build Coastguard Worker "include/ATen/core/*.h", 1244*da0073e9SAndroid Build Coastguard Worker "include/ATen/cuda/*.cuh", 1245*da0073e9SAndroid Build Coastguard Worker "include/ATen/cuda/*.h", 1246*da0073e9SAndroid Build Coastguard Worker "include/ATen/cuda/detail/*.cuh", 1247*da0073e9SAndroid Build Coastguard Worker "include/ATen/cuda/detail/*.h", 1248*da0073e9SAndroid Build Coastguard Worker "include/ATen/cuda/tunable/*.h", 1249*da0073e9SAndroid Build Coastguard Worker "include/ATen/cudnn/*.h", 1250*da0073e9SAndroid Build Coastguard Worker "include/ATen/functorch/*.h", 1251*da0073e9SAndroid Build Coastguard Worker "include/ATen/ops/*.h", 1252*da0073e9SAndroid Build Coastguard Worker "include/ATen/hip/*.cuh", 1253*da0073e9SAndroid Build Coastguard Worker "include/ATen/hip/*.h", 1254*da0073e9SAndroid Build Coastguard Worker "include/ATen/hip/detail/*.cuh", 1255*da0073e9SAndroid Build Coastguard Worker "include/ATen/hip/detail/*.h", 1256*da0073e9SAndroid Build Coastguard Worker "include/ATen/hip/impl/*.h", 1257*da0073e9SAndroid Build Coastguard Worker "include/ATen/hip/tunable/*.h", 1258*da0073e9SAndroid Build Coastguard Worker "include/ATen/mps/*.h", 1259*da0073e9SAndroid Build Coastguard Worker "include/ATen/miopen/*.h", 1260*da0073e9SAndroid Build Coastguard Worker "include/ATen/detail/*.h", 1261*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/*.h", 1262*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/cpu/*.h", 1263*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/cuda/*.h", 1264*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/cuda/*.cuh", 1265*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/hip/*.h", 1266*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/hip/*.cuh", 1267*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/mps/*.h", 1268*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/nested/*.h", 1269*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/quantized/*.h", 1270*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/quantized/cpu/*.h", 1271*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/transformers/*.h", 1272*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/sparse/*.h", 1273*da0073e9SAndroid Build Coastguard Worker "include/ATen/native/utils/*.h", 1274*da0073e9SAndroid Build Coastguard Worker "include/ATen/quantized/*.h", 1275*da0073e9SAndroid Build Coastguard Worker "include/ATen/xpu/*.h", 1276*da0073e9SAndroid Build Coastguard Worker "include/ATen/xpu/detail/*.h", 1277*da0073e9SAndroid Build Coastguard Worker "include/caffe2/serialize/*.h", 1278*da0073e9SAndroid Build Coastguard Worker "include/c10/*.h", 1279*da0073e9SAndroid Build Coastguard Worker "include/c10/macros/*.h", 1280*da0073e9SAndroid Build Coastguard Worker "include/c10/core/*.h", 1281*da0073e9SAndroid Build Coastguard Worker "include/ATen/core/boxing/*.h", 1282*da0073e9SAndroid Build Coastguard Worker "include/ATen/core/boxing/impl/*.h", 1283*da0073e9SAndroid Build Coastguard Worker "include/ATen/core/dispatch/*.h", 1284*da0073e9SAndroid Build Coastguard Worker "include/ATen/core/op_registration/*.h", 1285*da0073e9SAndroid Build Coastguard Worker "include/c10/core/impl/*.h", 1286*da0073e9SAndroid Build Coastguard Worker "include/c10/util/*.h", 1287*da0073e9SAndroid Build Coastguard Worker "include/c10/cuda/*.h", 1288*da0073e9SAndroid Build Coastguard Worker "include/c10/cuda/impl/*.h", 1289*da0073e9SAndroid Build Coastguard Worker "include/c10/hip/*.h", 1290*da0073e9SAndroid Build Coastguard Worker "include/c10/hip/impl/*.h", 1291*da0073e9SAndroid Build Coastguard Worker "include/c10/xpu/*.h", 1292*da0073e9SAndroid Build Coastguard Worker "include/c10/xpu/impl/*.h", 1293*da0073e9SAndroid Build Coastguard Worker "include/torch/*.h", 1294*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/*.h", 1295*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/*.h", 1296*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/data/*.h", 1297*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/data/dataloader/*.h", 1298*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/data/datasets/*.h", 1299*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/data/detail/*.h", 1300*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/data/samplers/*.h", 1301*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/data/transforms/*.h", 1302*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/detail/*.h", 1303*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/detail/ordered_dict.h", 1304*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/nn/*.h", 1305*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/nn/functional/*.h", 1306*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/nn/options/*.h", 1307*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/nn/modules/*.h", 1308*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/nn/modules/container/*.h", 1309*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/nn/parallel/*.h", 1310*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/nn/utils/*.h", 1311*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/optim/*.h", 1312*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/optim/schedulers/*.h", 1313*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/api/include/torch/serialize/*.h", 1314*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/autograd/*.h", 1315*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/autograd/functions/*.h", 1316*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/autograd/generated/*.h", 1317*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/autograd/utils/*.h", 1318*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/cuda/*.h", 1319*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/distributed/c10d/*.h", 1320*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/distributed/c10d/*.hpp", 1321*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/distributed/rpc/*.h", 1322*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/distributed/autograd/context/*.h", 1323*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/distributed/autograd/functions/*.h", 1324*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/distributed/autograd/rpc_messages/*.h", 1325*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/dynamo/*.h", 1326*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/inductor/*.h", 1327*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/inductor/aoti_runner/*.h", 1328*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/inductor/aoti_runtime/*.h", 1329*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/inductor/aoti_torch/*.h", 1330*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/inductor/aoti_torch/c/*.h", 1331*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/inductor/aoti_torch/generated/*.h", 1332*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/*.h", 1333*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/backends/*.h", 1334*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/generated/*.h", 1335*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/passes/*.h", 1336*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/passes/quantization/*.h", 1337*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/passes/utils/*.h", 1338*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/runtime/*.h", 1339*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/ir/*.h", 1340*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/frontend/*.h", 1341*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/api/*.h", 1342*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/serialization/*.h", 1343*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/python/*.h", 1344*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/mobile/*.h", 1345*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/testing/*.h", 1346*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/tensorexpr/*.h", 1347*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/tensorexpr/operators/*.h", 1348*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/jit/codegen/cuda/*.h", 1349*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/onnx/*.h", 1350*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/profiler/*.h", 1351*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/profiler/orchestration/*.h", 1352*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/profiler/standalone/*.h", 1353*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/profiler/stubs/*.h", 1354*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/profiler/unwind/*.h", 1355*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/profiler/python/*.h", 1356*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/utils/*.h", 1357*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/tensor/*.h", 1358*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/lazy/backend/*.h", 1359*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/lazy/core/*.h", 1360*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/lazy/core/internal_ops/*.h", 1361*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/lazy/core/ops/*.h", 1362*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/lazy/python/python_util.h", 1363*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/lazy/ts_backend/*.h", 1364*da0073e9SAndroid Build Coastguard Worker "include/torch/csrc/xpu/*.h", 1365*da0073e9SAndroid Build Coastguard Worker "include/pybind11/*.h", 1366*da0073e9SAndroid Build Coastguard Worker "include/pybind11/detail/*.h", 1367*da0073e9SAndroid Build Coastguard Worker "include/pybind11/eigen/*.h", 1368*da0073e9SAndroid Build Coastguard Worker "include/TH/*.h*", 1369*da0073e9SAndroid Build Coastguard Worker "include/TH/generic/*.h*", 1370*da0073e9SAndroid Build Coastguard Worker "include/THC/*.cuh", 1371*da0073e9SAndroid Build Coastguard Worker "include/THC/*.h*", 1372*da0073e9SAndroid Build Coastguard Worker "include/THC/generic/*.h", 1373*da0073e9SAndroid Build Coastguard Worker "include/THH/*.cuh", 1374*da0073e9SAndroid Build Coastguard Worker "include/THH/*.h*", 1375*da0073e9SAndroid Build Coastguard Worker "include/THH/generic/*.h", 1376*da0073e9SAndroid Build Coastguard Worker "include/sleef.h", 1377*da0073e9SAndroid Build Coastguard Worker "_inductor/codegen/*.h", 1378*da0073e9SAndroid Build Coastguard Worker "_inductor/codegen/aoti_runtime/*.cpp", 1379*da0073e9SAndroid Build Coastguard Worker "_export/serde/*.yaml", 1380*da0073e9SAndroid Build Coastguard Worker "share/cmake/ATen/*.cmake", 1381*da0073e9SAndroid Build Coastguard Worker "share/cmake/Caffe2/*.cmake", 1382*da0073e9SAndroid Build Coastguard Worker "share/cmake/Caffe2/public/*.cmake", 1383*da0073e9SAndroid Build Coastguard Worker "share/cmake/Caffe2/Modules_CUDA_fix/*.cmake", 1384*da0073e9SAndroid Build Coastguard Worker "share/cmake/Caffe2/Modules_CUDA_fix/upstream/*.cmake", 1385*da0073e9SAndroid Build Coastguard Worker "share/cmake/Caffe2/Modules_CUDA_fix/upstream/FindCUDA/*.cmake", 1386*da0073e9SAndroid Build Coastguard Worker "share/cmake/Gloo/*.cmake", 1387*da0073e9SAndroid Build Coastguard Worker "share/cmake/Tensorpipe/*.cmake", 1388*da0073e9SAndroid Build Coastguard Worker "share/cmake/Torch/*.cmake", 1389*da0073e9SAndroid Build Coastguard Worker "utils/benchmark/utils/*.cpp", 1390*da0073e9SAndroid Build Coastguard Worker "utils/benchmark/utils/valgrind_wrapper/*.cpp", 1391*da0073e9SAndroid Build Coastguard Worker "utils/benchmark/utils/valgrind_wrapper/*.h", 1392*da0073e9SAndroid Build Coastguard Worker "utils/model_dump/skeleton.html", 1393*da0073e9SAndroid Build Coastguard Worker "utils/model_dump/code.js", 1394*da0073e9SAndroid Build Coastguard Worker "utils/model_dump/*.mjs", 1395*da0073e9SAndroid Build Coastguard Worker ] 1396*da0073e9SAndroid Build Coastguard Worker 1397*da0073e9SAndroid Build Coastguard Worker if not BUILD_LIBTORCH_WHL: 1398*da0073e9SAndroid Build Coastguard Worker torch_package_data.extend( 1399*da0073e9SAndroid Build Coastguard Worker [ 1400*da0073e9SAndroid Build Coastguard Worker "lib/libtorch_python.so", 1401*da0073e9SAndroid Build Coastguard Worker "lib/libtorch_python.dylib", 1402*da0073e9SAndroid Build Coastguard Worker "lib/libtorch_python.dll", 1403*da0073e9SAndroid Build Coastguard Worker ] 1404*da0073e9SAndroid Build Coastguard Worker ) 1405*da0073e9SAndroid Build Coastguard Worker if not BUILD_PYTHON_ONLY: 1406*da0073e9SAndroid Build Coastguard Worker torch_package_data.extend( 1407*da0073e9SAndroid Build Coastguard Worker [ 1408*da0073e9SAndroid Build Coastguard Worker "lib/*.so*", 1409*da0073e9SAndroid Build Coastguard Worker "lib/*.dylib*", 1410*da0073e9SAndroid Build Coastguard Worker "lib/*.dll", 1411*da0073e9SAndroid Build Coastguard Worker "lib/*.lib", 1412*da0073e9SAndroid Build Coastguard Worker ] 1413*da0073e9SAndroid Build Coastguard Worker ) 1414*da0073e9SAndroid Build Coastguard Worker if get_cmake_cache_vars()["BUILD_CAFFE2"]: 1415*da0073e9SAndroid Build Coastguard Worker torch_package_data.extend( 1416*da0073e9SAndroid Build Coastguard Worker [ 1417*da0073e9SAndroid Build Coastguard Worker "include/caffe2/**/*.h", 1418*da0073e9SAndroid Build Coastguard Worker "include/caffe2/utils/*.h", 1419*da0073e9SAndroid Build Coastguard Worker "include/caffe2/utils/**/*.h", 1420*da0073e9SAndroid Build Coastguard Worker ] 1421*da0073e9SAndroid Build Coastguard Worker ) 1422*da0073e9SAndroid Build Coastguard Worker if get_cmake_cache_vars()["USE_TENSORPIPE"]: 1423*da0073e9SAndroid Build Coastguard Worker torch_package_data.extend( 1424*da0073e9SAndroid Build Coastguard Worker [ 1425*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/*.h", 1426*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/channel/*.h", 1427*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/channel/basic/*.h", 1428*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/channel/cma/*.h", 1429*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/channel/mpt/*.h", 1430*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/channel/xth/*.h", 1431*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/common/*.h", 1432*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/core/*.h", 1433*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/transport/*.h", 1434*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/transport/ibv/*.h", 1435*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/transport/shm/*.h", 1436*da0073e9SAndroid Build Coastguard Worker "include/tensorpipe/transport/uv/*.h", 1437*da0073e9SAndroid Build Coastguard Worker ] 1438*da0073e9SAndroid Build Coastguard Worker ) 1439*da0073e9SAndroid Build Coastguard Worker if get_cmake_cache_vars()["USE_KINETO"]: 1440*da0073e9SAndroid Build Coastguard Worker torch_package_data.extend( 1441*da0073e9SAndroid Build Coastguard Worker [ 1442*da0073e9SAndroid Build Coastguard Worker "include/kineto/*.h", 1443*da0073e9SAndroid Build Coastguard Worker ] 1444*da0073e9SAndroid Build Coastguard Worker ) 1445*da0073e9SAndroid Build Coastguard Worker torchgen_package_data = [ 1446*da0073e9SAndroid Build Coastguard Worker # Recursive glob doesn't work in setup.py, 1447*da0073e9SAndroid Build Coastguard Worker # https://github.com/pypa/setuptools/issues/1806 1448*da0073e9SAndroid Build Coastguard Worker # To make this robust we should replace it with some code that 1449*da0073e9SAndroid Build Coastguard Worker # returns a list of everything under packaged/ 1450*da0073e9SAndroid Build Coastguard Worker "packaged/ATen/*", 1451*da0073e9SAndroid Build Coastguard Worker "packaged/ATen/native/*", 1452*da0073e9SAndroid Build Coastguard Worker "packaged/ATen/templates/*", 1453*da0073e9SAndroid Build Coastguard Worker "packaged/autograd/*", 1454*da0073e9SAndroid Build Coastguard Worker "packaged/autograd/templates/*", 1455*da0073e9SAndroid Build Coastguard Worker ] 1456*da0073e9SAndroid Build Coastguard Worker package_data = { 1457*da0073e9SAndroid Build Coastguard Worker "torch": torch_package_data, 1458*da0073e9SAndroid Build Coastguard Worker } 1459*da0073e9SAndroid Build Coastguard Worker 1460*da0073e9SAndroid Build Coastguard Worker if not BUILD_LIBTORCH_WHL: 1461*da0073e9SAndroid Build Coastguard Worker package_data["torchgen"] = torchgen_package_data 1462*da0073e9SAndroid Build Coastguard Worker package_data["caffe2"] = [ 1463*da0073e9SAndroid Build Coastguard Worker "python/serialized_test/data/operator_test/*.zip", 1464*da0073e9SAndroid Build Coastguard Worker ] 1465*da0073e9SAndroid Build Coastguard Worker else: 1466*da0073e9SAndroid Build Coastguard Worker # no extensions in BUILD_LIBTORCH_WHL mode 1467*da0073e9SAndroid Build Coastguard Worker extensions = [] 1468*da0073e9SAndroid Build Coastguard Worker 1469*da0073e9SAndroid Build Coastguard Worker setup( 1470*da0073e9SAndroid Build Coastguard Worker name=package_name, 1471*da0073e9SAndroid Build Coastguard Worker version=version, 1472*da0073e9SAndroid Build Coastguard Worker description=( 1473*da0073e9SAndroid Build Coastguard Worker "Tensors and Dynamic neural networks in " 1474*da0073e9SAndroid Build Coastguard Worker "Python with strong GPU acceleration" 1475*da0073e9SAndroid Build Coastguard Worker ), 1476*da0073e9SAndroid Build Coastguard Worker long_description=long_description, 1477*da0073e9SAndroid Build Coastguard Worker long_description_content_type="text/markdown", 1478*da0073e9SAndroid Build Coastguard Worker ext_modules=extensions, 1479*da0073e9SAndroid Build Coastguard Worker cmdclass=cmdclass, 1480*da0073e9SAndroid Build Coastguard Worker packages=packages, 1481*da0073e9SAndroid Build Coastguard Worker entry_points=entry_points, 1482*da0073e9SAndroid Build Coastguard Worker install_requires=install_requires, 1483*da0073e9SAndroid Build Coastguard Worker extras_require=extras_require, 1484*da0073e9SAndroid Build Coastguard Worker package_data=package_data, 1485*da0073e9SAndroid Build Coastguard Worker url="https://pytorch.org/", 1486*da0073e9SAndroid Build Coastguard Worker download_url="https://github.com/pytorch/pytorch/tags", 1487*da0073e9SAndroid Build Coastguard Worker author="PyTorch Team", 1488*da0073e9SAndroid Build Coastguard Worker author_email="[email protected]", 1489*da0073e9SAndroid Build Coastguard Worker python_requires=f">={python_min_version_str}", 1490*da0073e9SAndroid Build Coastguard Worker # PyPI package information. 1491*da0073e9SAndroid Build Coastguard Worker classifiers=[ 1492*da0073e9SAndroid Build Coastguard Worker "Development Status :: 5 - Production/Stable", 1493*da0073e9SAndroid Build Coastguard Worker "Intended Audience :: Developers", 1494*da0073e9SAndroid Build Coastguard Worker "Intended Audience :: Education", 1495*da0073e9SAndroid Build Coastguard Worker "Intended Audience :: Science/Research", 1496*da0073e9SAndroid Build Coastguard Worker "License :: OSI Approved :: BSD License", 1497*da0073e9SAndroid Build Coastguard Worker "Topic :: Scientific/Engineering", 1498*da0073e9SAndroid Build Coastguard Worker "Topic :: Scientific/Engineering :: Mathematics", 1499*da0073e9SAndroid Build Coastguard Worker "Topic :: Scientific/Engineering :: Artificial Intelligence", 1500*da0073e9SAndroid Build Coastguard Worker "Topic :: Software Development", 1501*da0073e9SAndroid Build Coastguard Worker "Topic :: Software Development :: Libraries", 1502*da0073e9SAndroid Build Coastguard Worker "Topic :: Software Development :: Libraries :: Python Modules", 1503*da0073e9SAndroid Build Coastguard Worker "Programming Language :: C++", 1504*da0073e9SAndroid Build Coastguard Worker "Programming Language :: Python :: 3", 1505*da0073e9SAndroid Build Coastguard Worker ] 1506*da0073e9SAndroid Build Coastguard Worker + [ 1507*da0073e9SAndroid Build Coastguard Worker f"Programming Language :: Python :: 3.{i}" 1508*da0073e9SAndroid Build Coastguard Worker for i in range(python_min_version[1], version_range_max) 1509*da0073e9SAndroid Build Coastguard Worker ], 1510*da0073e9SAndroid Build Coastguard Worker license="BSD-3-Clause", 1511*da0073e9SAndroid Build Coastguard Worker keywords="pytorch, machine learning", 1512*da0073e9SAndroid Build Coastguard Worker ) 1513*da0073e9SAndroid Build Coastguard Worker if EMIT_BUILD_WARNING: 1514*da0073e9SAndroid Build Coastguard Worker print_box(build_update_message) 1515*da0073e9SAndroid Build Coastguard Worker 1516*da0073e9SAndroid Build Coastguard Worker 1517*da0073e9SAndroid Build Coastguard Workerif __name__ == "__main__": 1518*da0073e9SAndroid Build Coastguard Worker main() 1519