1*da0073e9SAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.18 FATAL_ERROR) 2*da0073e9SAndroid Build Coastguard Worker# cmake_policy(SET CMP0022 NEW) cmake_policy(SET CMP0023 NEW) 3*da0073e9SAndroid Build Coastguard Worker 4*da0073e9SAndroid Build Coastguard Worker# Use compiler ID "AppleClang" instead of "Clang" for XCode. Not setting this 5*da0073e9SAndroid Build Coastguard Worker# sometimes makes XCode C compiler gets detected as "Clang", even when the C++ 6*da0073e9SAndroid Build Coastguard Worker# one is detected as "AppleClang". 7*da0073e9SAndroid Build Coastguard Workercmake_policy(SET CMP0010 NEW) 8*da0073e9SAndroid Build Coastguard Workercmake_policy(SET CMP0025 NEW) 9*da0073e9SAndroid Build Coastguard Worker 10*da0073e9SAndroid Build Coastguard Worker# Enables CMake to set LTO on compilers other than Intel. 11*da0073e9SAndroid Build Coastguard Workercmake_policy(SET CMP0069 NEW) 12*da0073e9SAndroid Build Coastguard Worker# Enable the policy for CMake subprojects. protobuf currently causes issues 13*da0073e9SAndroid Build Coastguard Worker# set(CMAKE_POLICY_DEFAULT_CMP0069 NEW) 14*da0073e9SAndroid Build Coastguard Worker 15*da0073e9SAndroid Build Coastguard Worker# Suppress warning flags in default MSVC configuration. It's not mandatory that 16*da0073e9SAndroid Build Coastguard Worker# we do this (and we don't if cmake is old), but it's nice when it's possible, 17*da0073e9SAndroid Build Coastguard Worker# and it's possible on our Windows configs. 18*da0073e9SAndroid Build Coastguard Workercmake_policy(SET CMP0092 NEW) 19*da0073e9SAndroid Build Coastguard Worker 20*da0073e9SAndroid Build Coastguard Worker# Prohibit in-source builds 21*da0073e9SAndroid Build Coastguard Workerif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) 22*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "In-source build are not supported") 23*da0073e9SAndroid Build Coastguard Workerendif() 24*da0073e9SAndroid Build Coastguard Worker 25*da0073e9SAndroid Build Coastguard Worker# ---[ Project and semantic versioning. 26*da0073e9SAndroid Build Coastguard Workerproject(Torch CXX C) 27*da0073e9SAndroid Build Coastguard Worker 28*da0073e9SAndroid Build Coastguard Workerif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") 29*da0073e9SAndroid Build Coastguard Worker set(LINUX TRUE) 30*da0073e9SAndroid Build Coastguard Workerelse() 31*da0073e9SAndroid Build Coastguard Worker set(LINUX FALSE) 32*da0073e9SAndroid Build Coastguard Workerendif() 33*da0073e9SAndroid Build Coastguard Worker 34*da0073e9SAndroid Build Coastguard Workerset(CMAKE_INSTALL_MESSAGE NEVER) 35*da0073e9SAndroid Build Coastguard Worker 36*da0073e9SAndroid Build Coastguard Worker# check and set CMAKE_CXX_STANDARD 37*da0073e9SAndroid Build Coastguard Workerstring(FIND "${CMAKE_CXX_FLAGS}" "-std=c++" env_cxx_standard) 38*da0073e9SAndroid Build Coastguard Workerif(env_cxx_standard GREATER -1) 39*da0073e9SAndroid Build Coastguard Worker message( 40*da0073e9SAndroid Build Coastguard Worker WARNING 41*da0073e9SAndroid Build Coastguard Worker "C++ standard version definition detected in environment variable." 42*da0073e9SAndroid Build Coastguard Worker "PyTorch requires -std=c++17. Please remove -std=c++ settings in your environment." 43*da0073e9SAndroid Build Coastguard Worker ) 44*da0073e9SAndroid Build Coastguard Workerendif() 45*da0073e9SAndroid Build Coastguard Workerset(CMAKE_CXX_STANDARD 46*da0073e9SAndroid Build Coastguard Worker 17 47*da0073e9SAndroid Build Coastguard Worker CACHE STRING 48*da0073e9SAndroid Build Coastguard Worker "The C++ standard whose features are requested to build this target.") 49*da0073e9SAndroid Build Coastguard Workerset(CMAKE_C_STANDARD 50*da0073e9SAndroid Build Coastguard Worker 11 51*da0073e9SAndroid Build Coastguard Worker CACHE STRING 52*da0073e9SAndroid Build Coastguard Worker "The C standard whose features are requested to build this target.") 53*da0073e9SAndroid Build Coastguard Worker 54*da0073e9SAndroid Build Coastguard Worker# ---[ Utils 55*da0073e9SAndroid Build Coastguard Workerinclude(cmake/public/utils.cmake) 56*da0073e9SAndroid Build Coastguard Worker 57*da0073e9SAndroid Build Coastguard Worker# --- [ Check that minimal gcc version is 9.3+ 58*da0073e9SAndroid Build Coastguard Workerif(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.3) 59*da0073e9SAndroid Build Coastguard Worker message( 60*da0073e9SAndroid Build Coastguard Worker FATAL_ERROR 61*da0073e9SAndroid Build Coastguard Worker "GCC-9.3 or newer is required to compile PyTorch, but found ${CMAKE_CXX_COMPILER_VERSION}" 62*da0073e9SAndroid Build Coastguard Worker ) 63*da0073e9SAndroid Build Coastguard Workerendif() 64*da0073e9SAndroid Build Coastguard Worker 65*da0073e9SAndroid Build Coastguard Worker# This define is needed to preserve behavior given anticpated changes to 66*da0073e9SAndroid Build Coastguard Worker# cccl/thrust 67*da0073e9SAndroid Build Coastguard Worker# https://nvidia.github.io/libcudacxx/standard_api/numerics_library/complex.html 68*da0073e9SAndroid Build Coastguard Workerstring(APPEND CMAKE_CUDA_FLAGS 69*da0073e9SAndroid Build Coastguard Worker " -DLIBCUDACXX_ENABLE_SIMPLIFIED_COMPLEX_OPERATIONS") 70*da0073e9SAndroid Build Coastguard Worker 71*da0073e9SAndroid Build Coastguard Workerif(LINUX) 72*da0073e9SAndroid Build Coastguard Worker include(cmake/CheckAbi.cmake) 73*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS 74*da0073e9SAndroid Build Coastguard Worker " -D_GLIBCXX_USE_CXX11_ABI=${GLIBCXX_USE_CXX11_ABI}") 75*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS 76*da0073e9SAndroid Build Coastguard Worker " -D_GLIBCXX_USE_CXX11_ABI=${GLIBCXX_USE_CXX11_ABI}") 77*da0073e9SAndroid Build Coastguard Worker if(${GLIBCXX_USE_CXX11_ABI} EQUAL 1) 78*da0073e9SAndroid Build Coastguard Worker set(CXX_STANDARD_REQUIRED ON) 79*da0073e9SAndroid Build Coastguard Worker else() 80*da0073e9SAndroid Build Coastguard Worker # Please note this is required in order to ensure compatibility between gcc 81*da0073e9SAndroid Build Coastguard Worker # 9 and gcc 7 This could be removed when all Linux PyTorch binary builds are 82*da0073e9SAndroid Build Coastguard Worker # compiled by the same toolchain again 83*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-fabi-version=11" CMAKE_CXX_FLAGS) 84*da0073e9SAndroid Build Coastguard Worker endif() 85*da0073e9SAndroid Build Coastguard Workerendif() 86*da0073e9SAndroid Build Coastguard Worker 87*da0073e9SAndroid Build Coastguard Workerset(CMAKE_EXPORT_COMPILE_COMMANDS ON) 88*da0073e9SAndroid Build Coastguard Workerset(CMAKE_LINK_WHAT_YOU_USE TRUE) 89*da0073e9SAndroid Build Coastguard Worker 90*da0073e9SAndroid Build Coastguard Worker# One variable that determines whether the current cmake process is being run 91*da0073e9SAndroid Build Coastguard Worker# with the main Caffe2 library. This is useful for building modules - if modules 92*da0073e9SAndroid Build Coastguard Worker# are built with the main Caffe2 library then one does not need to do find 93*da0073e9SAndroid Build Coastguard Worker# caffe2 in the cmake script. One can usually guard it in some way like if(NOT 94*da0073e9SAndroid Build Coastguard Worker# CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO) find_package(Caffe2 REQUIRED) endif() 95*da0073e9SAndroid Build Coastguard Workerset(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO ON) 96*da0073e9SAndroid Build Coastguard Worker 97*da0073e9SAndroid Build Coastguard Worker# Googletest's cmake files are going to set it on once they are processed. Let's 98*da0073e9SAndroid Build Coastguard Worker# set it at the very beginning so that the entire build is deterministic. 99*da0073e9SAndroid Build Coastguard Workerset(THREADS_PREFER_PTHREAD_FLAG ON) 100*da0073e9SAndroid Build Coastguard Worker 101*da0073e9SAndroid Build Coastguard Workerif(NOT DEFINED BLAS_SET_BY_USER) 102*da0073e9SAndroid Build Coastguard Worker if(DEFINED BLAS) 103*da0073e9SAndroid Build Coastguard Worker set(BLAS_SET_BY_USER TRUE) 104*da0073e9SAndroid Build Coastguard Worker else() 105*da0073e9SAndroid Build Coastguard Worker message(STATUS "Not forcing any particular BLAS to be found") 106*da0073e9SAndroid Build Coastguard Worker set(BLAS_SET_BY_USER FALSE) 107*da0073e9SAndroid Build Coastguard Worker endif() 108*da0073e9SAndroid Build Coastguard Worker set(BLAS_SET_BY_USER 109*da0073e9SAndroid Build Coastguard Worker ${BLAS_SET_BY_USER} 110*da0073e9SAndroid Build Coastguard Worker CACHE STRING 111*da0073e9SAndroid Build Coastguard Worker "Marks whether BLAS was manually set by user or auto-detected") 112*da0073e9SAndroid Build Coastguard Workerendif() 113*da0073e9SAndroid Build Coastguard Worker 114*da0073e9SAndroid Build Coastguard Worker# Apple specific 115*da0073e9SAndroid Build Coastguard Workerif(APPLE) 116*da0073e9SAndroid Build Coastguard Worker # These lines are an attempt to make find_package(cuda) pick up libcuda.dylib, 117*da0073e9SAndroid Build Coastguard Worker # and not cuda.framework. It doesn't work all the time, but it seems to help 118*da0073e9SAndroid Build Coastguard Worker # for some users. TODO: replace this with a more robust fix 119*da0073e9SAndroid Build Coastguard Worker set(CMAKE_FIND_FRAMEWORK LAST) 120*da0073e9SAndroid Build Coastguard Worker set(CMAKE_FIND_APPBUNDLE LAST) 121*da0073e9SAndroid Build Coastguard Worker 122*da0073e9SAndroid Build Coastguard Worker # Get clang version on macOS 123*da0073e9SAndroid Build Coastguard Worker execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version 124*da0073e9SAndroid Build Coastguard Worker OUTPUT_VARIABLE clang_full_version_string) 125*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "Apple (.*) version ([0-9]+\\.[0-9]+).*" "\\2" 126*da0073e9SAndroid Build Coastguard Worker CLANG_VERSION_STRING ${clang_full_version_string}) 127*da0073e9SAndroid Build Coastguard Worker message(STATUS "CLANG_VERSION_STRING: " ${CLANG_VERSION_STRING}) 128*da0073e9SAndroid Build Coastguard Worker 129*da0073e9SAndroid Build Coastguard Worker # RPATH stuff 130*da0073e9SAndroid Build Coastguard Worker set(CMAKE_MACOSX_RPATH ON) 131*da0073e9SAndroid Build Coastguard Worker if(NOT IOS) 132*da0073e9SAndroid Build Coastguard Worker # Determine if we can link against MPSGraph 133*da0073e9SAndroid Build Coastguard Worker set(MPS_FOUND OFF) 134*da0073e9SAndroid Build Coastguard Worker execute_process( 135*da0073e9SAndroid Build Coastguard Worker COMMAND bash -c "xcrun --sdk macosx --show-sdk-version" 136*da0073e9SAndroid Build Coastguard Worker RESULT_VARIABLE _exit_code 137*da0073e9SAndroid Build Coastguard Worker OUTPUT_VARIABLE _macosx_sdk_version 138*da0073e9SAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE) 139*da0073e9SAndroid Build Coastguard Worker if(_exit_code EQUAL 0) 140*da0073e9SAndroid Build Coastguard Worker set(_MPS_supported_os_version OFF) 141*da0073e9SAndroid Build Coastguard Worker if(_macosx_sdk_version VERSION_GREATER_EQUAL 12.3) 142*da0073e9SAndroid Build Coastguard Worker set(_MPS_supported_os_version ON) 143*da0073e9SAndroid Build Coastguard Worker endif() 144*da0073e9SAndroid Build Coastguard Worker message( 145*da0073e9SAndroid Build Coastguard Worker STATUS 146*da0073e9SAndroid Build Coastguard Worker "sdk version: ${_macosx_sdk_version}, mps supported: ${_MPS_supported_os_version}" 147*da0073e9SAndroid Build Coastguard Worker ) 148*da0073e9SAndroid Build Coastguard Worker execute_process( 149*da0073e9SAndroid Build Coastguard Worker COMMAND bash -c "xcrun --sdk macosx --show-sdk-path" 150*da0073e9SAndroid Build Coastguard Worker OUTPUT_VARIABLE _macosx_sdk_path 151*da0073e9SAndroid Build Coastguard Worker OUTPUT_STRIP_TRAILING_WHITESPACE) 152*da0073e9SAndroid Build Coastguard Worker set(_SDK_SEARCH_PATH "${_macosx_sdk_path}/System/Library/Frameworks/") 153*da0073e9SAndroid Build Coastguard Worker set(_FRAMEWORK_SEARCH_PATH "/System/Library/Frameworks/") 154*da0073e9SAndroid Build Coastguard Worker 155*da0073e9SAndroid Build Coastguard Worker find_library( 156*da0073e9SAndroid Build Coastguard Worker _MPS_fwrk_path_ 157*da0073e9SAndroid Build Coastguard Worker NAMES MetalPerformanceShadersGraph MetalPerformanceShaders 158*da0073e9SAndroid Build Coastguard Worker PATHS ${_FRAMEWORK_SEARCH_PATH} 159*da0073e9SAndroid Build Coastguard Worker NO_DEFAULT_PATH) 160*da0073e9SAndroid Build Coastguard Worker find_library( 161*da0073e9SAndroid Build Coastguard Worker _MPS_sdk_path_ 162*da0073e9SAndroid Build Coastguard Worker NAMES MetalPerformanceShadersGraph MetalPerformanceShaders 163*da0073e9SAndroid Build Coastguard Worker PATHS ${_SDK_SEARCH_PATH} 164*da0073e9SAndroid Build Coastguard Worker NO_DEFAULT_PATH) 165*da0073e9SAndroid Build Coastguard Worker 166*da0073e9SAndroid Build Coastguard Worker if(_MPS_supported_os_version 167*da0073e9SAndroid Build Coastguard Worker AND _MPS_fwrk_path_ 168*da0073e9SAndroid Build Coastguard Worker AND _MPS_sdk_path_) 169*da0073e9SAndroid Build Coastguard Worker set(MPS_FOUND ON) 170*da0073e9SAndroid Build Coastguard Worker message(STATUS "MPSGraph framework found") 171*da0073e9SAndroid Build Coastguard Worker else() 172*da0073e9SAndroid Build Coastguard Worker message(STATUS "MPSGraph framework not found") 173*da0073e9SAndroid Build Coastguard Worker endif() 174*da0073e9SAndroid Build Coastguard Worker else() 175*da0073e9SAndroid Build Coastguard Worker message(STATUS "MPS: unable to get MacOS sdk version") 176*da0073e9SAndroid Build Coastguard Worker message(STATUS "MPSGraph framework not found") 177*da0073e9SAndroid Build Coastguard Worker endif() 178*da0073e9SAndroid Build Coastguard Worker endif() 179*da0073e9SAndroid Build Coastguard Workerendif() 180*da0073e9SAndroid Build Coastguard Worker 181*da0073e9SAndroid Build Coastguard Workerset(CPU_AARCH64 OFF) 182*da0073e9SAndroid Build Coastguard Workerset(CPU_INTEL OFF) 183*da0073e9SAndroid Build Coastguard Worker 184*da0073e9SAndroid Build Coastguard Workerif(CMAKE_SYSTEM_PROCESSOR MATCHES "(AMD64|x86_64)") 185*da0073e9SAndroid Build Coastguard Worker set(CPU_INTEL ON) 186*da0073e9SAndroid Build Coastguard Workerelseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64)") 187*da0073e9SAndroid Build Coastguard Worker set(CPU_AARCH64 ON) 188*da0073e9SAndroid Build Coastguard Workerendif() 189*da0073e9SAndroid Build Coastguard Worker 190*da0073e9SAndroid Build Coastguard Worker# For non-supported platforms, turn USE_DISTRIBUTED off by default. It is not 191*da0073e9SAndroid Build Coastguard Worker# tested and likely won't work without additional changes. 192*da0073e9SAndroid Build Coastguard Workerif(NOT LINUX AND NOT WIN32) 193*da0073e9SAndroid Build Coastguard Worker set(USE_DISTRIBUTED 194*da0073e9SAndroid Build Coastguard Worker OFF 195*da0073e9SAndroid Build Coastguard Worker CACHE STRING "Use distributed") 196*da0073e9SAndroid Build Coastguard Worker # On macOS, if USE_DISTRIBUTED is enabled (specified by the user), then make 197*da0073e9SAndroid Build Coastguard Worker # Gloo build with the libuv transport. 198*da0073e9SAndroid Build Coastguard Worker if(APPLE AND USE_DISTRIBUTED) 199*da0073e9SAndroid Build Coastguard Worker set(USE_LIBUV 200*da0073e9SAndroid Build Coastguard Worker ON 201*da0073e9SAndroid Build Coastguard Worker CACHE STRING "") 202*da0073e9SAndroid Build Coastguard Worker endif() 203*da0073e9SAndroid Build Coastguard Workerendif() 204*da0073e9SAndroid Build Coastguard Worker 205*da0073e9SAndroid Build Coastguard Worker# ---[ Options. Note to developers: if you add an option below, make sure you 206*da0073e9SAndroid Build Coastguard Worker# also add it to cmake/Summary.cmake so that the summary prints out the option 207*da0073e9SAndroid Build Coastguard Worker# values. 208*da0073e9SAndroid Build Coastguard Workerinclude(CMakeDependentOption) 209*da0073e9SAndroid Build Coastguard Workeroption(ATEN_NO_TEST "Do not build ATen test binaries" OFF) 210*da0073e9SAndroid Build Coastguard Workeroption(BUILD_BINARY "Build C++ binaries" OFF) 211*da0073e9SAndroid Build Coastguard Workeroption(BUILD_CUSTOM_PROTOBUF 212*da0073e9SAndroid Build Coastguard Worker "Build and use Caffe2's own protobuf under third_party" ON) 213*da0073e9SAndroid Build Coastguard Workeroption(BUILD_PYTHON "Build Python binaries" ON) 214*da0073e9SAndroid Build Coastguard Workeroption(BUILD_LITE_INTERPRETER "Master flag to build Lite Interpreter" OFF) 215*da0073e9SAndroid Build Coastguard Workeroption(BUILD_SHARED_LIBS "Build libcaffe2.so" ON) 216*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 217*da0073e9SAndroid Build Coastguard Worker CAFFE2_LINK_LOCAL_PROTOBUF "If set, build protobuf inside libcaffe2.so." ON 218*da0073e9SAndroid Build Coastguard Worker "BUILD_SHARED_LIBS AND BUILD_CUSTOM_PROTOBUF" OFF) 219*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 220*da0073e9SAndroid Build Coastguard Worker CAFFE2_USE_MSVC_STATIC_RUNTIME "Using MSVC static runtime libraries" ON 221*da0073e9SAndroid Build Coastguard Worker "NOT BUILD_SHARED_LIBS" OFF) 222*da0073e9SAndroid Build Coastguard Workeroption(BUILD_TEST "Build C++ test binaries (need gtest and gbenchmark)" OFF) 223*da0073e9SAndroid Build Coastguard Workeroption(BUILD_AOT_INDUCTOR_TEST "Build C++ test binaries for aot-inductor" OFF) 224*da0073e9SAndroid Build Coastguard Workeroption(BUILD_STATIC_RUNTIME_BENCHMARK 225*da0073e9SAndroid Build Coastguard Worker "Build C++ binaries for static runtime benchmarks (need gbenchmark)" OFF) 226*da0073e9SAndroid Build Coastguard Workeroption( 227*da0073e9SAndroid Build Coastguard Worker BUILD_MOBILE_BENCHMARK 228*da0073e9SAndroid Build Coastguard Worker "Build C++ test binaries for mobile (ARM) targets(need gtest and gbenchmark)" 229*da0073e9SAndroid Build Coastguard Worker OFF) 230*da0073e9SAndroid Build Coastguard Workeroption( 231*da0073e9SAndroid Build Coastguard Worker BUILD_MOBILE_TEST 232*da0073e9SAndroid Build Coastguard Worker "Build C++ test binaries for mobile (ARM) targets(need gtest and gbenchmark)" 233*da0073e9SAndroid Build Coastguard Worker OFF) 234*da0073e9SAndroid Build Coastguard Workeroption(BUILD_JNI "Build JNI bindings" OFF) 235*da0073e9SAndroid Build Coastguard Workeroption(BUILD_MOBILE_AUTOGRAD 236*da0073e9SAndroid Build Coastguard Worker "Build autograd function in mobile build (in development)" OFF) 237*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(INSTALL_TEST "Install test binaries if BUILD_TEST is on" 238*da0073e9SAndroid Build Coastguard Worker ON "BUILD_TEST" OFF) 239*da0073e9SAndroid Build Coastguard Workeroption(USE_CPP_CODE_COVERAGE "Compile C/C++ with code coverage flags" OFF) 240*da0073e9SAndroid Build Coastguard Workeroption(USE_COLORIZE_OUTPUT "Colorize output during compilation" ON) 241*da0073e9SAndroid Build Coastguard Workeroption(USE_ASAN "Use Address+Undefined Sanitizers" OFF) 242*da0073e9SAndroid Build Coastguard Workeroption(USE_TSAN "Use Thread Sanitizer" OFF) 243*da0073e9SAndroid Build Coastguard Workeroption(USE_CUDA "Use CUDA" ON) 244*da0073e9SAndroid Build Coastguard Workeroption(USE_XPU "Use XPU" ON) 245*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 246*da0073e9SAndroid Build Coastguard Worker BUILD_LAZY_CUDA_LINALG "Build cuda linalg ops as separate library" ON 247*da0073e9SAndroid Build Coastguard Worker "USE_CUDA AND LINUX AND BUILD_PYTHON" OFF) 248*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_ROCM "Use ROCm" ON "LINUX" OFF) 249*da0073e9SAndroid Build Coastguard Workeroption(CAFFE2_STATIC_LINK_CUDA "Statically link CUDA libraries" OFF) 250*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_CUDNN "Use cuDNN" ON "USE_CUDA" OFF) 251*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_STATIC_CUDNN "Use cuDNN static libraries" OFF 252*da0073e9SAndroid Build Coastguard Worker "USE_CUDNN" OFF) 253*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_CUSPARSELT "Use cuSPARSELt" ON "USE_CUDA" OFF) 254*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_CUDSS "Use cuDSS" ON "USE_CUDA" OFF) 255*da0073e9SAndroid Build Coastguard Worker# Binary builds will fail for cufile due to https://github.com/pytorch/builder/issues/1924 256*da0073e9SAndroid Build Coastguard Worker# Using TH_BINARY_BUILD to check whether is binary build. 257*da0073e9SAndroid Build Coastguard Worker# USE_ROCM is guarded against in Dependencies.cmake because USE_ROCM is not properly defined here 258*da0073e9SAndroid Build Coastguard Workerif(DEFINED ENV{TH_BINARY_BUILD}) 259*da0073e9SAndroid Build Coastguard Worker cmake_dependent_option(USE_CUFILE "Use cuFile" OFF 260*da0073e9SAndroid Build Coastguard Worker "USE_CUDA AND NOT $ENV{TH_BINARY_BUILD} AND NOT WIN32" OFF) 261*da0073e9SAndroid Build Coastguard Workerelse() 262*da0073e9SAndroid Build Coastguard Worker cmake_dependent_option(USE_CUFILE "Use cuFile" OFF "USE_CUDA AND NOT WIN32" OFF) 263*da0073e9SAndroid Build Coastguard Workerendif() 264*da0073e9SAndroid Build Coastguard Workeroption(USE_FBGEMM "Use FBGEMM (quantized 8-bit server operators)" ON) 265*da0073e9SAndroid Build Coastguard Workeroption(USE_KINETO "Use Kineto profiling library" ON) 266*da0073e9SAndroid Build Coastguard Workeroption(USE_CUPTI_SO "Use CUPTI as a shared library" ON) 267*da0073e9SAndroid Build Coastguard Workeroption(USE_FAKELOWP "Use FakeLowp operators" OFF) 268*da0073e9SAndroid Build Coastguard Workeroption(USE_GFLAGS "Use GFLAGS" OFF) 269*da0073e9SAndroid Build Coastguard Workeroption(USE_GLOG "Use GLOG" OFF) 270*da0073e9SAndroid Build Coastguard Workeroption(USE_LITE_PROTO "Use lite protobuf instead of full." OFF) 271*da0073e9SAndroid Build Coastguard Workeroption(USE_MAGMA "Use MAGMA" ON) 272*da0073e9SAndroid Build Coastguard Workeroption(USE_PYTORCH_METAL "Use Metal for PyTorch iOS build" OFF) 273*da0073e9SAndroid Build Coastguard Workeroption(USE_PYTORCH_METAL_EXPORT "Export Metal models on MacOSX desktop" OFF) 274*da0073e9SAndroid Build Coastguard Workeroption(USE_NATIVE_ARCH "Use -march=native" OFF) 275*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_MPS "Use MPS for macOS build" ON "MPS_FOUND" OFF) 276*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_NCCL "Use NCCL" ON 277*da0073e9SAndroid Build Coastguard Worker "USE_CUDA OR USE_ROCM;UNIX;NOT APPLE" OFF) 278*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_RCCL "Use RCCL" ON USE_NCCL OFF) 279*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_STATIC_NCCL "Use static NCCL" OFF "USE_NCCL" OFF) 280*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_SYSTEM_NCCL "Use system-wide NCCL" OFF "USE_NCCL" 281*da0073e9SAndroid Build Coastguard Worker OFF) 282*da0073e9SAndroid Build Coastguard Workeroption(USE_NNAPI "Use NNAPI" OFF) 283*da0073e9SAndroid Build Coastguard Workeroption(USE_NNPACK "Use NNPACK" ON) 284*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_NUMA "Use NUMA. Only available on Linux." ON "LINUX" 285*da0073e9SAndroid Build Coastguard Worker OFF) 286*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_NVRTC "Use NVRTC. Only available if USE_CUDA is on." 287*da0073e9SAndroid Build Coastguard Worker OFF "USE_CUDA" OFF) 288*da0073e9SAndroid Build Coastguard Workeroption(USE_NUMPY "Use NumPy" ON) 289*da0073e9SAndroid Build Coastguard Workeroption(USE_OBSERVERS "Use observers module." OFF) 290*da0073e9SAndroid Build Coastguard Workeroption(USE_OPENCL "Use OpenCL" OFF) 291*da0073e9SAndroid Build Coastguard Workeroption(USE_OPENMP "Use OpenMP for parallel code" ON) 292*da0073e9SAndroid Build Coastguard Workeroption(USE_PRECOMPILED_HEADERS "Use pre-compiled headers to accelerate build." 293*da0073e9SAndroid Build Coastguard Worker OFF) 294*da0073e9SAndroid Build Coastguard Worker 295*da0073e9SAndroid Build Coastguard Workeroption(USE_PROF "Use profiling" OFF) 296*da0073e9SAndroid Build Coastguard Workeroption(USE_PYTORCH_QNNPACK "Use ATen/QNNPACK (quantized 8-bit operators)" ON) 297*da0073e9SAndroid Build Coastguard Workeroption(USE_SNPE "Use Qualcomm's SNPE library" OFF) 298*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_EIGEN_INSTALL 299*da0073e9SAndroid Build Coastguard Worker "Use system Eigen instead of the one under third_party" OFF) 300*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 301*da0073e9SAndroid Build Coastguard Worker USE_VALGRIND "Use Valgrind. Only available on Linux." ON 302*da0073e9SAndroid Build Coastguard Worker "LINUX" OFF) 303*da0073e9SAndroid Build Coastguard Worker 304*da0073e9SAndroid Build Coastguard Workerif(NOT DEFINED USE_VULKAN) 305*da0073e9SAndroid Build Coastguard Worker cmake_dependent_option(USE_VULKAN "Use Vulkan GPU backend" ON "ANDROID" OFF) 306*da0073e9SAndroid Build Coastguard Workerendif() 307*da0073e9SAndroid Build Coastguard Worker 308*da0073e9SAndroid Build Coastguard Workeroption(USE_SLEEF_FOR_ARM_VEC256 "Use sleef for arm" OFF) 309*da0073e9SAndroid Build Coastguard Workeroption(USE_SOURCE_DEBUG_ON_MOBILE "Enable" ON) 310*da0073e9SAndroid Build Coastguard Workeroption(USE_LITE_INTERPRETER_PROFILER "Enable" ON) 311*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 312*da0073e9SAndroid Build Coastguard Worker USE_LITE_AOTI "Include AOTI sources" OFF 313*da0073e9SAndroid Build Coastguard Worker "BUILD_LITE_INTERPRETER" OFF) 314*da0073e9SAndroid Build Coastguard Workeroption(USE_VULKAN_FP16_INFERENCE "Vulkan - Use fp16 inference" OFF) 315*da0073e9SAndroid Build Coastguard Workeroption(USE_VULKAN_RELAXED_PRECISION 316*da0073e9SAndroid Build Coastguard Worker "Vulkan - Use relaxed precision math in the kernels (mediump)" OFF) 317*da0073e9SAndroid Build Coastguard Worker# option USE_XNNPACK: try to enable xnnpack by default. 318*da0073e9SAndroid Build Coastguard Workeroption(USE_XNNPACK "Use XNNPACK" ON) 319*da0073e9SAndroid Build Coastguard Workeroption(USE_ROCM_KERNEL_ASSERT "Use Kernel Assert for ROCm" OFF) 320*da0073e9SAndroid Build Coastguard Worker# Ensure that an ITT build is the default for x86 CPUs 321*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_ITT "Use Intel(R) VTune Profiler ITT functionality" 322*da0073e9SAndroid Build Coastguard Worker ON "CPU_INTEL" OFF) 323*da0073e9SAndroid Build Coastguard Worker# Ensure that an MKLDNN build is the default for x86 CPUs but optional for 324*da0073e9SAndroid Build Coastguard Worker# AArch64 (dependent on -DUSE_MKLDNN). 325*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 326*da0073e9SAndroid Build Coastguard Worker USE_MKLDNN "Use MKLDNN. Only available on x86, x86_64, and AArch64." 327*da0073e9SAndroid Build Coastguard Worker "${CPU_INTEL}" "CPU_INTEL OR CPU_AARCH64" OFF) 328*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 329*da0073e9SAndroid Build Coastguard Worker USE_MKLDNN_ACL "Use Compute Library for the Arm architecture." OFF 330*da0073e9SAndroid Build Coastguard Worker "USE_MKLDNN AND CPU_AARCH64" OFF) 331*da0073e9SAndroid Build Coastguard Workerset(MKLDNN_ENABLE_CONCURRENT_EXEC ${USE_MKLDNN}) 332*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_MKLDNN_CBLAS "Use CBLAS in MKLDNN" OFF "USE_MKLDNN" 333*da0073e9SAndroid Build Coastguard Worker OFF) 334*da0073e9SAndroid Build Coastguard Workeroption(USE_STATIC_MKL "Prefer to link with MKL statically (Unix only)" OFF) 335*da0073e9SAndroid Build Coastguard Workeroption(USE_DISTRIBUTED "Use distributed" ON) 336*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 337*da0073e9SAndroid Build Coastguard Worker USE_MPI "Use MPI for Caffe2. Only available if USE_DISTRIBUTED is on." ON 338*da0073e9SAndroid Build Coastguard Worker "USE_DISTRIBUTED" OFF) 339*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 340*da0073e9SAndroid Build Coastguard Worker USE_UCC "Use UCC. Only available if USE_DISTRIBUTED is on." OFF 341*da0073e9SAndroid Build Coastguard Worker "USE_DISTRIBUTED" OFF) 342*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_SYSTEM_UCC "Use system-wide UCC" OFF "USE_UCC" OFF) 343*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_C10D_UCC "USE C10D UCC" ON "USE_DISTRIBUTED;USE_UCC" 344*da0073e9SAndroid Build Coastguard Worker OFF) 345*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 346*da0073e9SAndroid Build Coastguard Worker USE_GLOO "Use Gloo. Only available if USE_DISTRIBUTED is on." ON 347*da0073e9SAndroid Build Coastguard Worker "USE_DISTRIBUTED" OFF) 348*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 349*da0073e9SAndroid Build Coastguard Worker USE_GLOO_WITH_OPENSSL 350*da0073e9SAndroid Build Coastguard Worker "Use Gloo with OpenSSL. Only available if USE_GLOO is on." OFF 351*da0073e9SAndroid Build Coastguard Worker "USE_GLOO AND LINUX AND NOT INTERN_BUILD_MOBILE" OFF) 352*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_C10D_GLOO "USE C10D GLOO" ON 353*da0073e9SAndroid Build Coastguard Worker "USE_DISTRIBUTED;USE_GLOO" OFF) 354*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_C10D_NCCL "USE C10D NCCL" ON 355*da0073e9SAndroid Build Coastguard Worker "USE_DISTRIBUTED;USE_NCCL" OFF) 356*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(USE_C10D_MPI "USE C10D MPI" ON "USE_DISTRIBUTED;USE_MPI" 357*da0073e9SAndroid Build Coastguard Worker OFF) 358*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 359*da0073e9SAndroid Build Coastguard Worker USE_GLOO "Use Gloo. Only available if USE_DISTRIBUTED is on." ON 360*da0073e9SAndroid Build Coastguard Worker "USE_DISTRIBUTED" OFF) 361*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 362*da0073e9SAndroid Build Coastguard Worker USE_GLOO_WITH_OPENSSL "Use Gloo with OpenSSL. Only available if USE_GLOO is on." OFF 363*da0073e9SAndroid Build Coastguard Worker "USE_GLOO AND LINUX AND NOT INTERN_BUILD_MOBILE" OFF) 364*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 365*da0073e9SAndroid Build Coastguard Worker USE_C10D_GLOO "USE C10D GLOO" ON "USE_DISTRIBUTED;USE_GLOO" OFF) 366*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 367*da0073e9SAndroid Build Coastguard Worker USE_C10D_NCCL "USE C10D NCCL" ON "USE_DISTRIBUTED;USE_NCCL" OFF) 368*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 369*da0073e9SAndroid Build Coastguard Worker USE_C10D_MPI "USE C10D MPI" ON "USE_DISTRIBUTED;USE_MPI" OFF) 370*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 371*da0073e9SAndroid Build Coastguard Worker USE_TENSORPIPE "Use TensorPipe. Only available if USE_DISTRIBUTED is on." ON 372*da0073e9SAndroid Build Coastguard Worker "USE_DISTRIBUTED" OFF) 373*da0073e9SAndroid Build Coastguard Workeroption(ONNX_ML "Enable traditional ONNX ML API." ON) 374*da0073e9SAndroid Build Coastguard Workeroption(HAVE_SOVERSION "Whether to add SOVERSION to the shared objects" OFF) 375*da0073e9SAndroid Build Coastguard Workeroption(BUILD_LIBTORCH_CPU_WITH_DEBUG 376*da0073e9SAndroid Build Coastguard Worker "Enable RelWithDebInfo for libtorch_cpu target only" OFF) 377*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 378*da0073e9SAndroid Build Coastguard Worker USE_CCACHE "Attempt using CCache to wrap the compilation" ON "UNIX" OFF) 379*da0073e9SAndroid Build Coastguard Workeroption(WERROR "Build with -Werror supported by the compiler" OFF) 380*da0073e9SAndroid Build Coastguard Workeroption( 381*da0073e9SAndroid Build Coastguard Worker DEBUG_CUDA 382*da0073e9SAndroid Build Coastguard Worker "When compiling DEBUG, also attempt to compile CUDA with debug flags (may cause nvcc to OOM)" 383*da0073e9SAndroid Build Coastguard Worker OFF) 384*da0073e9SAndroid Build Coastguard Workeroption(USE_COREML_DELEGATE "Use the CoreML backend through delegate APIs" OFF) 385*da0073e9SAndroid Build Coastguard Workeroption(USE_PER_OPERATOR_HEADERS 386*da0073e9SAndroid Build Coastguard Worker "Whether ATen should generate separate headers for each operator" ON) 387*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 388*da0073e9SAndroid Build Coastguard Worker BUILD_LAZY_TS_BACKEND 389*da0073e9SAndroid Build Coastguard Worker "Build the lazy Torchscript backend, not compatible with mobile builds" ON 390*da0073e9SAndroid Build Coastguard Worker "NOT INTERN_BUILD_MOBILE" OFF) 391*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(BUILD_FUNCTORCH "Build Functorch" ON "BUILD_PYTHON" OFF) 392*da0073e9SAndroid Build Coastguard Workercmake_dependent_option(BUILD_BUNDLE_PTXAS "Bundle PTX into torch/bin fodler" 393*da0073e9SAndroid Build Coastguard Worker OFF "USE_CUDA" OFF) 394*da0073e9SAndroid Build Coastguard Worker 395*da0073e9SAndroid Build Coastguard Workeroption(USE_MIMALLOC "Use mimalloc" OFF) 396*da0073e9SAndroid Build Coastguard Worker# Enable third party mimalloc library to improve memory allocation performance 397*da0073e9SAndroid Build Coastguard Worker# on Windows. 398*da0073e9SAndroid Build Coastguard Workerif(WIN32) 399*da0073e9SAndroid Build Coastguard Worker set(USE_MIMALLOC ON) 400*da0073e9SAndroid Build Coastguard Workerendif() 401*da0073e9SAndroid Build Coastguard Worker 402*da0073e9SAndroid Build Coastguard Workerif(USE_CCACHE) 403*da0073e9SAndroid Build Coastguard Worker find_program(CCACHE_PROGRAM ccache) 404*da0073e9SAndroid Build Coastguard Worker if(CCACHE_PROGRAM) 405*da0073e9SAndroid Build Coastguard Worker set(CMAKE_C_COMPILER_LAUNCHER 406*da0073e9SAndroid Build Coastguard Worker "${CCACHE_PROGRAM}" 407*da0073e9SAndroid Build Coastguard Worker CACHE STRING "C compiler launcher") 408*da0073e9SAndroid Build Coastguard Worker set(CMAKE_CXX_COMPILER_LAUNCHER 409*da0073e9SAndroid Build Coastguard Worker "${CCACHE_PROGRAM}" 410*da0073e9SAndroid Build Coastguard Worker CACHE STRING "CXX compiler launcher") 411*da0073e9SAndroid Build Coastguard Worker set(CMAKE_CUDA_COMPILER_LAUNCHER 412*da0073e9SAndroid Build Coastguard Worker "${CCACHE_PROGRAM}" 413*da0073e9SAndroid Build Coastguard Worker CACHE STRING "CUDA compiler launcher") 414*da0073e9SAndroid Build Coastguard Worker else() 415*da0073e9SAndroid Build Coastguard Worker message( 416*da0073e9SAndroid Build Coastguard Worker STATUS 417*da0073e9SAndroid Build Coastguard Worker "Could not find ccache. Consider installing ccache to speed up compilation." 418*da0073e9SAndroid Build Coastguard Worker ) 419*da0073e9SAndroid Build Coastguard Worker endif() 420*da0073e9SAndroid Build Coastguard Workerendif() 421*da0073e9SAndroid Build Coastguard Worker 422*da0073e9SAndroid Build Coastguard Worker# Since TensorPipe does not support Windows, set it to OFF when WIN32 detected 423*da0073e9SAndroid Build Coastguard Worker# On Windows platform, if user does not install libuv in build conda env and 424*da0073e9SAndroid Build Coastguard Worker# does not set libuv_ROOT environment variable. Set USE_DISTRIBUTED to OFF. 425*da0073e9SAndroid Build Coastguard Workerif(WIN32) 426*da0073e9SAndroid Build Coastguard Worker set(USE_TENSORPIPE OFF) 427*da0073e9SAndroid Build Coastguard Worker message(WARNING "TensorPipe cannot be used on Windows. Set it to OFF") 428*da0073e9SAndroid Build Coastguard Worker 429*da0073e9SAndroid Build Coastguard Worker if(USE_DISTRIBUTED AND NOT DEFINED ENV{libuv_ROOT}) 430*da0073e9SAndroid Build Coastguard Worker find_library( 431*da0073e9SAndroid Build Coastguard Worker libuv_tmp_LIBRARY 432*da0073e9SAndroid Build Coastguard Worker NAMES uv libuv 433*da0073e9SAndroid Build Coastguard Worker HINTS $ENV{CONDA_PREFIX}\\Library $ENV{PREFIX}\\Library 434*da0073e9SAndroid Build Coastguard Worker PATH_SUFFIXES lib 435*da0073e9SAndroid Build Coastguard Worker NO_DEFAULT_PATH) 436*da0073e9SAndroid Build Coastguard Worker if(NOT libuv_tmp_LIBRARY) 437*da0073e9SAndroid Build Coastguard Worker set(USE_DISTRIBUTED OFF) 438*da0073e9SAndroid Build Coastguard Worker set(USE_GLOO OFF) 439*da0073e9SAndroid Build Coastguard Worker message( 440*da0073e9SAndroid Build Coastguard Worker WARNING 441*da0073e9SAndroid Build Coastguard Worker "Libuv is not installed in current conda env. Set USE_DISTRIBUTED to OFF. " 442*da0073e9SAndroid Build Coastguard Worker "Please run command 'conda install -c conda-forge libuv=1.39' to install libuv." 443*da0073e9SAndroid Build Coastguard Worker ) 444*da0073e9SAndroid Build Coastguard Worker else() 445*da0073e9SAndroid Build Coastguard Worker set(ENV{libuv_ROOT} ${libuv_tmp_LIBRARY}/../../) 446*da0073e9SAndroid Build Coastguard Worker endif() 447*da0073e9SAndroid Build Coastguard Worker endif() 448*da0073e9SAndroid Build Coastguard Workerendif() 449*da0073e9SAndroid Build Coastguard Worker 450*da0073e9SAndroid Build Coastguard Workerif(USE_GLOO_WITH_OPENSSL) 451*da0073e9SAndroid Build Coastguard Worker set(USE_TCP_OPENSSL_LOAD 452*da0073e9SAndroid Build Coastguard Worker ON 453*da0073e9SAndroid Build Coastguard Worker CACHE STRING "") 454*da0073e9SAndroid Build Coastguard Workerendif() 455*da0073e9SAndroid Build Coastguard Worker 456*da0073e9SAndroid Build Coastguard Worker# Linux distributions do not want too many embedded sources, in that sense we 457*da0073e9SAndroid Build Coastguard Worker# need to be able to build pytorch with an (almost) empty third_party directory. 458*da0073e9SAndroid Build Coastguard Worker# USE_SYSTEM_LIBS is a shortcut variable to toggle all the # USE_SYSTEM_* 459*da0073e9SAndroid Build Coastguard Worker# variables on. Individual USE_SYSTEM_* variables can be toggled with 460*da0073e9SAndroid Build Coastguard Worker# USE_SYSTEM_LIBS being "OFF". 461*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_LIBS "Use all available system-provided libraries." OFF) 462*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_CPUINFO "Use system-provided cpuinfo." OFF) 463*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_SLEEF "Use system-provided sleef." OFF) 464*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_GLOO "Use system-provided gloo." OFF) 465*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_FP16 "Use system-provided fp16." OFF) 466*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_PYBIND11 "Use system-provided PyBind11." OFF) 467*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_PTHREADPOOL "Use system-provided pthreadpool." OFF) 468*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_PSIMD "Use system-provided psimd." OFF) 469*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_FXDIV "Use system-provided fxdiv." OFF) 470*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_BENCHMARK "Use system-provided google benchmark." OFF) 471*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_ONNX "Use system-provided onnx." OFF) 472*da0073e9SAndroid Build Coastguard Workeroption(USE_SYSTEM_XNNPACK "Use system-provided xnnpack." OFF) 473*da0073e9SAndroid Build Coastguard Workeroption(USE_GOLD_LINKER "Use ld.gold to link" OFF) 474*da0073e9SAndroid Build Coastguard Workerif(USE_SYSTEM_LIBS) 475*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_CPUINFO ON) 476*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_SLEEF ON) 477*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_GLOO ON) 478*da0073e9SAndroid Build Coastguard Worker set(BUILD_CUSTOM_PROTOBUF OFF) 479*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_EIGEN_INSTALL ON) 480*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_FP16 ON) 481*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_PTHREADPOOL ON) 482*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_PSIMD ON) 483*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_FXDIV ON) 484*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_BENCHMARK ON) 485*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_ONNX ON) 486*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_XNNPACK ON) 487*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_PYBIND11 ON) 488*da0073e9SAndroid Build Coastguard Worker if(USE_NCCL) 489*da0073e9SAndroid Build Coastguard Worker set(USE_SYSTEM_NCCL ON) 490*da0073e9SAndroid Build Coastguard Worker endif() 491*da0073e9SAndroid Build Coastguard Workerendif() 492*da0073e9SAndroid Build Coastguard Worker 493*da0073e9SAndroid Build Coastguard Worker# /Z7 override option When generating debug symbols, CMake default to use the 494*da0073e9SAndroid Build Coastguard Worker# flag /Zi. However, it is not compatible with sccache. So we rewrite it off. 495*da0073e9SAndroid Build Coastguard Worker# But some users don't use sccache; this override is for them. 496*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 497*da0073e9SAndroid Build Coastguard Worker MSVC_Z7_OVERRIDE 498*da0073e9SAndroid Build Coastguard Worker "Work around sccache bug by replacing /Zi and /ZI with /Z7 when using MSVC (if you are not using sccache, you can turn this OFF)" 499*da0073e9SAndroid Build Coastguard Worker ON 500*da0073e9SAndroid Build Coastguard Worker "MSVC" 501*da0073e9SAndroid Build Coastguard Worker OFF) 502*da0073e9SAndroid Build Coastguard Worker 503*da0073e9SAndroid Build Coastguard Workerif(NOT USE_SYSTEM_ONNX) 504*da0073e9SAndroid Build Coastguard Worker set(ONNX_NAMESPACE 505*da0073e9SAndroid Build Coastguard Worker "onnx_torch" 506*da0073e9SAndroid Build Coastguard Worker CACHE 507*da0073e9SAndroid Build Coastguard Worker STRING 508*da0073e9SAndroid Build Coastguard Worker "A namespace for ONNX; needed to build with other frameworks that share ONNX." 509*da0073e9SAndroid Build Coastguard Worker ) 510*da0073e9SAndroid Build Coastguard Workerelse() 511*da0073e9SAndroid Build Coastguard Worker set(ONNX_NAMESPACE 512*da0073e9SAndroid Build Coastguard Worker "onnx" 513*da0073e9SAndroid Build Coastguard Worker CACHE 514*da0073e9SAndroid Build Coastguard Worker STRING 515*da0073e9SAndroid Build Coastguard Worker "A namespace for ONNX; needed to build with other frameworks that share ONNX." 516*da0073e9SAndroid Build Coastguard Worker ) 517*da0073e9SAndroid Build Coastguard Workerendif() 518*da0073e9SAndroid Build Coastguard Workerset(SELECTED_OP_LIST 519*da0073e9SAndroid Build Coastguard Worker "" 520*da0073e9SAndroid Build Coastguard Worker CACHE 521*da0073e9SAndroid Build Coastguard Worker STRING 522*da0073e9SAndroid Build Coastguard Worker "Path to the yaml file that contains the list of operators to include for custom build. Include all operators by default." 523*da0073e9SAndroid Build Coastguard Worker) 524*da0073e9SAndroid Build Coastguard Workeroption( 525*da0073e9SAndroid Build Coastguard Worker STATIC_DISPATCH_BACKEND 526*da0073e9SAndroid Build Coastguard Worker "Name of the backend for which static dispatch code is generated, e.g.: CPU." 527*da0073e9SAndroid Build Coastguard Worker "") 528*da0073e9SAndroid Build Coastguard Workeroption( 529*da0073e9SAndroid Build Coastguard Worker USE_LIGHTWEIGHT_DISPATCH 530*da0073e9SAndroid Build Coastguard Worker "Enable codegen unboxing for ATen ops, need to work with static dispatch in order to work properly." 531*da0073e9SAndroid Build Coastguard Worker OFF) 532*da0073e9SAndroid Build Coastguard Workerif(USE_LIGHTWEIGHT_DISPATCH AND NOT STATIC_DISPATCH_BACKEND) 533*da0073e9SAndroid Build Coastguard Worker message( 534*da0073e9SAndroid Build Coastguard Worker FATAL_ERROR 535*da0073e9SAndroid Build Coastguard Worker "Need to enable static dispatch after enabling USE_LIGHTWEIGHT_DISPATCH.") 536*da0073e9SAndroid Build Coastguard Workerendif() 537*da0073e9SAndroid Build Coastguard Workeroption(TRACING_BASED 538*da0073e9SAndroid Build Coastguard Worker "Master flag to build Lite Interpreter with tracing build option" OFF) 539*da0073e9SAndroid Build Coastguard Workeroption(BUILD_EXECUTORCH "Master flag to build Executorch" ON) 540*da0073e9SAndroid Build Coastguard Worker# This is a fix for a rare build issue on Ubuntu: symbol lookup error: 541*da0073e9SAndroid Build Coastguard Worker# miniconda3/envs/pytorch-py3.7/lib/libmkl_intel_lp64.so: undefined symbol: 542*da0073e9SAndroid Build Coastguard Worker# mkl_blas_dsyrk 543*da0073e9SAndroid Build Coastguard Worker# https://software.intel.com/en-us/articles/symbol-lookup-error-when-linking-intel-mkl-with-gcc-on-ubuntu 544*da0073e9SAndroid Build Coastguard Workerif(LINUX) 545*da0073e9SAndroid Build Coastguard Worker set(CMAKE_SHARED_LINKER_FLAGS 546*da0073e9SAndroid Build Coastguard Worker "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-as-needed") 547*da0073e9SAndroid Build Coastguard Worker 548*da0073e9SAndroid Build Coastguard Worker set(ENV_LDFLAGS "$ENV{LDFLAGS}") 549*da0073e9SAndroid Build Coastguard Worker string(STRIP "${ENV_LDFLAGS}" ENV_LDFLAGS) 550*da0073e9SAndroid Build Coastguard Worker # Do not append linker flags passed via env var if they already there 551*da0073e9SAndroid Build Coastguard Worker if(NOT ${CMAKE_SHARED_LINKER_FLAGS} MATCHES "${ENV_LDFLAGS}") 552*da0073e9SAndroid Build Coastguard Worker set(CMAKE_SHARED_LINKER_FLAGS 553*da0073e9SAndroid Build Coastguard Worker "${CMAKE_SHARED_LINKER_FLAGS} ${ENV_LDFLAGS}") 554*da0073e9SAndroid Build Coastguard Worker endif() 555*da0073e9SAndroid Build Coastguard Workerendif() 556*da0073e9SAndroid Build Coastguard Worker 557*da0073e9SAndroid Build Coastguard Workerif(MSVC) 558*da0073e9SAndroid Build Coastguard Worker # MSVC by default does not apply the correct __cplusplus version as specified 559*da0073e9SAndroid Build Coastguard Worker # by the C++ standard because MSVC is not a completely compliant 560*da0073e9SAndroid Build Coastguard Worker # implementation. This option forces MSVC to use the appropriate value given 561*da0073e9SAndroid Build Coastguard Worker # the requested --std option. This fixes a compilation issue mismatch between 562*da0073e9SAndroid Build Coastguard Worker # GCC/Clang and MSVC. 563*da0073e9SAndroid Build Coastguard Worker # 564*da0073e9SAndroid Build Coastguard Worker # See: * 565*da0073e9SAndroid Build Coastguard Worker # https://learn.microsoft.com/en-us/cpp/build/reference/zc-cplusplus?view=msvc-170 566*da0073e9SAndroid Build Coastguard Worker # * https://en.cppreference.com/w/cpp/preprocessor/replace#Predefined_macros 567*da0073e9SAndroid Build Coastguard Worker set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus") 568*da0073e9SAndroid Build Coastguard Worker set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler /Zc:__cplusplus") 569*da0073e9SAndroid Build Coastguard Worker 570*da0073e9SAndroid Build Coastguard Worker set(CMAKE_NINJA_CMCLDEPS_RC OFF) 571*da0073e9SAndroid Build Coastguard Worker foreach( 572*da0073e9SAndroid Build Coastguard Worker flag_var 573*da0073e9SAndroid Build Coastguard Worker CMAKE_C_FLAGS 574*da0073e9SAndroid Build Coastguard Worker CMAKE_C_FLAGS_DEBUG 575*da0073e9SAndroid Build Coastguard Worker CMAKE_C_FLAGS_RELEASE 576*da0073e9SAndroid Build Coastguard Worker CMAKE_C_FLAGS_MINSIZEREL 577*da0073e9SAndroid Build Coastguard Worker CMAKE_C_FLAGS_RELWITHDEBINFO 578*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS 579*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS_DEBUG 580*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS_RELEASE 581*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS_MINSIZEREL 582*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS_RELWITHDEBINFO) 583*da0073e9SAndroid Build Coastguard Worker # Replace /Zi and /ZI with /Z7 584*da0073e9SAndroid Build Coastguard Worker if(MSVC_Z7_OVERRIDE) 585*da0073e9SAndroid Build Coastguard Worker if(${flag_var} MATCHES "/Z[iI]") 586*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "/Z[iI]" "/Z7" ${flag_var} "${${flag_var}}") 587*da0073e9SAndroid Build Coastguard Worker endif(${flag_var} MATCHES "/Z[iI]") 588*da0073e9SAndroid Build Coastguard Worker endif(MSVC_Z7_OVERRIDE) 589*da0073e9SAndroid Build Coastguard Worker 590*da0073e9SAndroid Build Coastguard Worker if(${CAFFE2_USE_MSVC_STATIC_RUNTIME}) 591*da0073e9SAndroid Build Coastguard Worker if(${flag_var} MATCHES "/MD") 592*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") 593*da0073e9SAndroid Build Coastguard Worker endif(${flag_var} MATCHES "/MD") 594*da0073e9SAndroid Build Coastguard Worker else() 595*da0073e9SAndroid Build Coastguard Worker if(${flag_var} MATCHES "/MT") 596*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}") 597*da0073e9SAndroid Build Coastguard Worker endif() 598*da0073e9SAndroid Build Coastguard Worker endif() 599*da0073e9SAndroid Build Coastguard Worker 600*da0073e9SAndroid Build Coastguard Worker # /bigobj increases number of sections in .obj file, which is needed to link 601*da0073e9SAndroid Build Coastguard Worker # against libraries in Python 2.7 under Windows For Visual Studio 602*da0073e9SAndroid Build Coastguard Worker # generators, if /MP is not added, then we may need to add /MP to the flags. 603*da0073e9SAndroid Build Coastguard Worker # For other generators like ninja, we don't need to add /MP because it is 604*da0073e9SAndroid Build Coastguard Worker # already handled by the generator itself. 605*da0073e9SAndroid Build Coastguard Worker if(CMAKE_GENERATOR MATCHES "Visual Studio" AND NOT ${flag_var} MATCHES 606*da0073e9SAndroid Build Coastguard Worker "/MP") 607*da0073e9SAndroid Build Coastguard Worker set(${flag_var} "${${flag_var}} /MP /bigobj") 608*da0073e9SAndroid Build Coastguard Worker else() 609*da0073e9SAndroid Build Coastguard Worker set(${flag_var} "${${flag_var}} /bigobj") 610*da0073e9SAndroid Build Coastguard Worker endif() 611*da0073e9SAndroid Build Coastguard Worker endforeach(flag_var) 612*da0073e9SAndroid Build Coastguard Worker 613*da0073e9SAndroid Build Coastguard Worker foreach(flag_var 614*da0073e9SAndroid Build Coastguard Worker CMAKE_C_FLAGS CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL 615*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL) 616*da0073e9SAndroid Build Coastguard Worker if(${flag_var} MATCHES "/Z[iI7]") 617*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "/Z[iI7]" "" ${flag_var} "${${flag_var}}") 618*da0073e9SAndroid Build Coastguard Worker endif() 619*da0073e9SAndroid Build Coastguard Worker endforeach(flag_var) 620*da0073e9SAndroid Build Coastguard Worker 621*da0073e9SAndroid Build Coastguard Worker foreach( 622*da0073e9SAndroid Build Coastguard Worker flag_var 623*da0073e9SAndroid Build Coastguard Worker CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO 624*da0073e9SAndroid Build Coastguard Worker CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO 625*da0073e9SAndroid Build Coastguard Worker CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO 626*da0073e9SAndroid Build Coastguard Worker CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO 627*da0073e9SAndroid Build Coastguard Worker CMAKE_SHARED_LINKER_FLAGS_DEBUG 628*da0073e9SAndroid Build Coastguard Worker CMAKE_STATIC_LINKER_FLAGS_DEBUG 629*da0073e9SAndroid Build Coastguard Worker CMAKE_EXE_LINKER_FLAGS_DEBUG 630*da0073e9SAndroid Build Coastguard Worker CMAKE_MODULE_LINKER_FLAGS_DEBUG) 631*da0073e9SAndroid Build Coastguard Worker # Switch off incremental linking in debug/relwithdebinfo builds 632*da0073e9SAndroid Build Coastguard Worker if(${flag_var} MATCHES "/INCREMENTAL" AND NOT ${flag_var} MATCHES 633*da0073e9SAndroid Build Coastguard Worker "/INCREMENTAL:NO") 634*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "/INCREMENTAL" "/INCREMENTAL:NO" ${flag_var} 635*da0073e9SAndroid Build Coastguard Worker "${${flag_var}}") 636*da0073e9SAndroid Build Coastguard Worker endif() 637*da0073e9SAndroid Build Coastguard Worker endforeach(flag_var) 638*da0073e9SAndroid Build Coastguard Worker 639*da0073e9SAndroid Build Coastguard Worker foreach(flag_var CMAKE_SHARED_LINKER_FLAGS CMAKE_STATIC_LINKER_FLAGS 640*da0073e9SAndroid Build Coastguard Worker CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS) 641*da0073e9SAndroid Build Coastguard Worker string(APPEND ${flag_var} " /ignore:4049 /ignore:4217 /ignore:4099") 642*da0073e9SAndroid Build Coastguard Worker endforeach(flag_var) 643*da0073e9SAndroid Build Coastguard Worker 644*da0073e9SAndroid Build Coastguard Worker foreach(flag_var CMAKE_SHARED_LINKER_FLAGS) 645*da0073e9SAndroid Build Coastguard Worker # https://github.com/pytorch/pytorch/issues/91933: Don't set the manifest 646*da0073e9SAndroid Build Coastguard Worker # filename explicitly helps fix the linker error when linking 647*da0073e9SAndroid Build Coastguard Worker # torch_python.dll. The manifest file would still be there in the correct 648*da0073e9SAndroid Build Coastguard Worker # format torch_python.dll.manifest 649*da0073e9SAndroid Build Coastguard Worker if(${flag_var} MATCHES "/MANIFESTFILE:.*\\.manifest") 650*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "/MANIFESTFILE:.*\\.manifest" "" ${flag_var} 651*da0073e9SAndroid Build Coastguard Worker "${${flag_var}}") 652*da0073e9SAndroid Build Coastguard Worker endif() 653*da0073e9SAndroid Build Coastguard Worker endforeach(flag_var) 654*da0073e9SAndroid Build Coastguard Worker 655*da0073e9SAndroid Build Coastguard Worker # Try harder 656*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS " -Xcompiler /w -w") 657*da0073e9SAndroid Build Coastguard Worker 658*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " /FS") 659*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS " -Xcompiler /FS") 660*da0073e9SAndroid Build Coastguard Workerendif(MSVC) 661*da0073e9SAndroid Build Coastguard Worker 662*da0073e9SAndroid Build Coastguard Workerstring(APPEND CMAKE_CUDA_FLAGS " -Xfatbin -compress-all") 663*da0073e9SAndroid Build Coastguard Worker 664*da0073e9SAndroid Build Coastguard Worker# Set INTERN_BUILD_MOBILE for all mobile builds. Components that are not 665*da0073e9SAndroid Build Coastguard Worker# applicable to mobile are disabled by this variable. Setting 666*da0073e9SAndroid Build Coastguard Worker# `BUILD_PYTORCH_MOBILE_WITH_HOST_TOOLCHAIN` environment variable can force it 667*da0073e9SAndroid Build Coastguard Worker# to do mobile build with host toolchain - which is useful for testing purpose. 668*da0073e9SAndroid Build Coastguard Workerif(ANDROID 669*da0073e9SAndroid Build Coastguard Worker OR IOS 670*da0073e9SAndroid Build Coastguard Worker OR DEFINED ENV{BUILD_PYTORCH_MOBILE_WITH_HOST_TOOLCHAIN}) 671*da0073e9SAndroid Build Coastguard Worker set(INTERN_BUILD_MOBILE ON) 672*da0073e9SAndroid Build Coastguard Worker message(WARNING "INTERN_BUILD_MOBILE is on, disabling BUILD_LAZY_TS_BACKEND") 673*da0073e9SAndroid Build Coastguard Worker set(BUILD_LAZY_TS_BACKEND OFF) 674*da0073e9SAndroid Build Coastguard Worker 675*da0073e9SAndroid Build Coastguard Worker # Set -ffunction-sections and -fdata-sections so that each method has its own 676*da0073e9SAndroid Build Coastguard Worker # text section. This allows the linker to remove unused section when the flag 677*da0073e9SAndroid Build Coastguard Worker # -Wl,-gc-sections is provided at link time. 678*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -ffunction-sections") 679*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_C_FLAGS " -ffunction-sections") 680*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -fdata-sections") 681*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_C_FLAGS " -fdata-sections") 682*da0073e9SAndroid Build Coastguard Worker 683*da0073e9SAndroid Build Coastguard Worker # Please note that the use of the following flags is required when linking 684*da0073e9SAndroid Build Coastguard Worker # against libtorch_cpu.a for mobile builds. -Wl,--whole-archive -ltorch_cpu 685*da0073e9SAndroid Build Coastguard Worker # -Wl,--no-whole-archive 686*da0073e9SAndroid Build Coastguard Worker # 687*da0073e9SAndroid Build Coastguard Worker # This allows global constructors to be included and run. Global constructors 688*da0073e9SAndroid Build Coastguard Worker # are used for operator/kernel registration with the PyTorch Dispatcher. 689*da0073e9SAndroid Build Coastguard Worker 690*da0073e9SAndroid Build Coastguard Worker if(DEFINED ENV{BUILD_PYTORCH_MOBILE_WITH_HOST_TOOLCHAIN}) 691*da0073e9SAndroid Build Coastguard Worker # C10_MOBILE is derived from Android/iOS toolchain macros in 692*da0073e9SAndroid Build Coastguard Worker # c10/macros/Macros.h, so it needs to be explicitly set here. 693*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DC10_MOBILE") 694*da0073e9SAndroid Build Coastguard Worker endif() 695*da0073e9SAndroid Build Coastguard Worker 696*da0073e9SAndroid Build Coastguard Worker if(DEFINED ENV{PYTORCH_MOBILE_TRIM_DISPATCH_KEY_SET}) 697*da0073e9SAndroid Build Coastguard Worker # If PYTORCH_MOBILE_TRIM_DISPATCH_KEY_SET is defined (env var), then define 698*da0073e9SAndroid Build Coastguard Worker # C10_MOBILE_TRIM_DISPATCH_KEYS, which limits the number of dispatch keys in 699*da0073e9SAndroid Build Coastguard Worker # OperatorEntry::dispatchTable_ to reduce peak memory during library 700*da0073e9SAndroid Build Coastguard Worker # initialization. 701*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DC10_MOBILE_TRIM_DISPATCH_KEYS") 702*da0073e9SAndroid Build Coastguard Worker endif() 703*da0073e9SAndroid Build Coastguard Workerendif() 704*da0073e9SAndroid Build Coastguard Worker 705*da0073e9SAndroid Build Coastguard Worker# INTERN_BUILD_ATEN_OPS is used to control whether to build ATen/TH operators. 706*da0073e9SAndroid Build Coastguard Workerset(INTERN_BUILD_ATEN_OPS ON) 707*da0073e9SAndroid Build Coastguard Worker 708*da0073e9SAndroid Build Coastguard Workerif(NOT DEFINED USE_BLAS) 709*da0073e9SAndroid Build Coastguard Worker set(USE_BLAS ON) 710*da0073e9SAndroid Build Coastguard Workerendif() 711*da0073e9SAndroid Build Coastguard Worker 712*da0073e9SAndroid Build Coastguard Worker# Build libtorch mobile library, which contains ATen/TH ops and native support 713*da0073e9SAndroid Build Coastguard Worker# for TorchScript model, but doesn't contain not-yet-unified caffe2 ops; 714*da0073e9SAndroid Build Coastguard Workerif(INTERN_BUILD_MOBILE) 715*da0073e9SAndroid Build Coastguard Worker if(NOT BUILD_SHARED_LIBS AND NOT "${SELECTED_OP_LIST}" STREQUAL "") 716*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DNO_EXPORT") 717*da0073e9SAndroid Build Coastguard Worker endif() 718*da0073e9SAndroid Build Coastguard Worker if(BUILD_MOBILE_AUTOGRAD) 719*da0073e9SAndroid Build Coastguard Worker set(INTERN_DISABLE_AUTOGRAD OFF) 720*da0073e9SAndroid Build Coastguard Worker else() 721*da0073e9SAndroid Build Coastguard Worker set(INTERN_DISABLE_AUTOGRAD ON) 722*da0073e9SAndroid Build Coastguard Worker endif() 723*da0073e9SAndroid Build Coastguard Worker set(BUILD_PYTHON OFF) 724*da0073e9SAndroid Build Coastguard Worker set(BUILD_FUNCTORCH OFF) 725*da0073e9SAndroid Build Coastguard Worker set(USE_DISTRIBUTED OFF) 726*da0073e9SAndroid Build Coastguard Worker set(NO_API ON) 727*da0073e9SAndroid Build Coastguard Worker set(USE_FBGEMM OFF) 728*da0073e9SAndroid Build Coastguard Worker set(INTERN_DISABLE_ONNX ON) 729*da0073e9SAndroid Build Coastguard Worker if(USE_BLAS) 730*da0073e9SAndroid Build Coastguard Worker set(INTERN_USE_EIGEN_BLAS ON) 731*da0073e9SAndroid Build Coastguard Worker else() 732*da0073e9SAndroid Build Coastguard Worker set(INTERN_USE_EIGEN_BLAS OFF) 733*da0073e9SAndroid Build Coastguard Worker endif() 734*da0073e9SAndroid Build Coastguard Worker # Disable developing mobile interpreter for actual mobile build. Enable it 735*da0073e9SAndroid Build Coastguard Worker # elsewhere to capture build error. 736*da0073e9SAndroid Build Coastguard Worker set(INTERN_DISABLE_MOBILE_INTERP ON) 737*da0073e9SAndroid Build Coastguard Workerendif() 738*da0073e9SAndroid Build Coastguard Worker 739*da0073e9SAndroid Build Coastguard Worker# ---[ Version numbers for generated libraries 740*da0073e9SAndroid Build Coastguard Workerfile(READ version.txt TORCH_DEFAULT_VERSION) 741*da0073e9SAndroid Build Coastguard Worker# Strip trailing newline 742*da0073e9SAndroid Build Coastguard Workerstring(REGEX REPLACE "\n$" "" TORCH_DEFAULT_VERSION "${TORCH_DEFAULT_VERSION}") 743*da0073e9SAndroid Build Coastguard Workerif("${TORCH_DEFAULT_VERSION} " STREQUAL " ") 744*da0073e9SAndroid Build Coastguard Worker message(WARNING "Could not get version from base 'version.txt'") 745*da0073e9SAndroid Build Coastguard Worker # If we can't get the version from the version file we should probably set it 746*da0073e9SAndroid Build Coastguard Worker # to something non-sensical like 0.0.0 747*da0073e9SAndroid Build Coastguard Worker set(TORCH_DEFAULT_VERSION, "0.0.0") 748*da0073e9SAndroid Build Coastguard Workerendif() 749*da0073e9SAndroid Build Coastguard Workerset(TORCH_BUILD_VERSION 750*da0073e9SAndroid Build Coastguard Worker "${TORCH_DEFAULT_VERSION}" 751*da0073e9SAndroid Build Coastguard Worker CACHE STRING "Torch build version") 752*da0073e9SAndroid Build Coastguard Workerif(DEFINED ENV{PYTORCH_BUILD_VERSION}) 753*da0073e9SAndroid Build Coastguard Worker set(TORCH_BUILD_VERSION 754*da0073e9SAndroid Build Coastguard Worker "$ENV{PYTORCH_BUILD_VERSION}" 755*da0073e9SAndroid Build Coastguard Worker CACHE STRING "Torch build version" FORCE) 756*da0073e9SAndroid Build Coastguard Workerendif() 757*da0073e9SAndroid Build Coastguard Workerif(NOT TORCH_BUILD_VERSION) 758*da0073e9SAndroid Build Coastguard Worker # An empty string was specified so force version to the default 759*da0073e9SAndroid Build Coastguard Worker set(TORCH_BUILD_VERSION 760*da0073e9SAndroid Build Coastguard Worker "${TORCH_DEFAULT_VERSION}" 761*da0073e9SAndroid Build Coastguard Worker CACHE STRING "Torch build version" FORCE) 762*da0073e9SAndroid Build Coastguard Workerendif() 763*da0073e9SAndroid Build Coastguard Workercaffe2_parse_version_str(TORCH ${TORCH_BUILD_VERSION}) 764*da0073e9SAndroid Build Coastguard Workerset(TORCH_SOVERSION "${TORCH_VERSION_MAJOR}.${TORCH_VERSION_MINOR}") 765*da0073e9SAndroid Build Coastguard Worker 766*da0073e9SAndroid Build Coastguard Worker# ---[ CMake scripts + modules 767*da0073e9SAndroid Build Coastguard Workerlist(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules) 768*da0073e9SAndroid Build Coastguard Worker 769*da0073e9SAndroid Build Coastguard Worker# ---[ CMake build directories 770*da0073e9SAndroid Build Coastguard Workerset(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 771*da0073e9SAndroid Build Coastguard Workerset(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 772*da0073e9SAndroid Build Coastguard Workerset(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 773*da0073e9SAndroid Build Coastguard Worker 774*da0073e9SAndroid Build Coastguard Workerenable_testing() 775*da0073e9SAndroid Build Coastguard Worker 776*da0073e9SAndroid Build Coastguard Worker# ---[ Build variables set within the cmake tree 777*da0073e9SAndroid Build Coastguard Workerinclude(cmake/BuildVariables.cmake) 778*da0073e9SAndroid Build Coastguard Workerset(CAFFE2_ALLOWLIST 779*da0073e9SAndroid Build Coastguard Worker "" 780*da0073e9SAndroid Build Coastguard Worker CACHE STRING "A allowlist file of files that one should build.") 781*da0073e9SAndroid Build Coastguard Worker 782*da0073e9SAndroid Build Coastguard Worker# Set default build type 783*da0073e9SAndroid Build Coastguard Workerif(NOT CMAKE_BUILD_TYPE) 784*da0073e9SAndroid Build Coastguard Worker message(STATUS "Build type not set - defaulting to Release") 785*da0073e9SAndroid Build Coastguard Worker set(CMAKE_BUILD_TYPE 786*da0073e9SAndroid Build Coastguard Worker "Release" 787*da0073e9SAndroid Build Coastguard Worker CACHE 788*da0073e9SAndroid Build Coastguard Worker STRING 789*da0073e9SAndroid Build Coastguard Worker "Choose the type of build from: Debug Release RelWithDebInfo MinSizeRel Coverage." 790*da0073e9SAndroid Build Coastguard Worker FORCE) 791*da0073e9SAndroid Build Coastguard Workerendif() 792*da0073e9SAndroid Build Coastguard Worker 793*da0073e9SAndroid Build Coastguard Worker# The below means we are cross compiling for arm64 or x86_64 on MacOSX 794*da0073e9SAndroid Build Coastguard Workerif(NOT IOS 795*da0073e9SAndroid Build Coastguard Worker AND CMAKE_SYSTEM_NAME STREQUAL "Darwin" 796*da0073e9SAndroid Build Coastguard Worker AND CMAKE_OSX_ARCHITECTURES MATCHES "^(x86_64|arm64)$") 797*da0073e9SAndroid Build Coastguard Worker set(CROSS_COMPILING_MACOSX TRUE) 798*da0073e9SAndroid Build Coastguard Worker # We need to compile a universal protoc to not fail protobuf build We set 799*da0073e9SAndroid Build Coastguard Worker # CMAKE_TRY_COMPILE_TARGET_TYPE to STATIC_LIBRARY (vs executable) to succeed 800*da0073e9SAndroid Build Coastguard Worker # the cmake compiler check for cross-compiling 801*da0073e9SAndroid Build Coastguard Worker set(protoc_build_command 802*da0073e9SAndroid Build Coastguard Worker "./scripts/build_host_protoc.sh --other-flags -DCMAKE_OSX_ARCHITECTURES=\"x86_64;arm64\" -DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY -DCMAKE_C_COMPILER_WORKS=1 -DCMAKE_CXX_COMPILER_WORKS=1" 803*da0073e9SAndroid Build Coastguard Worker ) 804*da0073e9SAndroid Build Coastguard Worker # We write to a temp scriptfile because CMake COMMAND dislikes double quotes 805*da0073e9SAndroid Build Coastguard Worker # in commands 806*da0073e9SAndroid Build Coastguard Worker file(WRITE ${PROJECT_SOURCE_DIR}/tmp_protoc_script.sh 807*da0073e9SAndroid Build Coastguard Worker "#!/bin/bash\n${protoc_build_command}") 808*da0073e9SAndroid Build Coastguard Worker file( 809*da0073e9SAndroid Build Coastguard Worker COPY ${PROJECT_SOURCE_DIR}/tmp_protoc_script.sh 810*da0073e9SAndroid Build Coastguard Worker DESTINATION ${PROJECT_SOURCE_DIR}/scripts/ 811*da0073e9SAndroid Build Coastguard Worker FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ) 812*da0073e9SAndroid Build Coastguard Worker execute_process( 813*da0073e9SAndroid Build Coastguard Worker COMMAND ./scripts/tmp_protoc_script.sh 814*da0073e9SAndroid Build Coastguard Worker WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} 815*da0073e9SAndroid Build Coastguard Worker RESULT_VARIABLE BUILD_HOST_PROTOC_RESULT) 816*da0073e9SAndroid Build Coastguard Worker file(REMOVE ${PROJECT_SOURCE_DIR}/tmp_protoc_script.sh 817*da0073e9SAndroid Build Coastguard Worker ${PROJECT_SOURCE_DIR}/scripts/tmp_protoc_script.sh) 818*da0073e9SAndroid Build Coastguard Worker if(NOT BUILD_HOST_PROTOC_RESULT EQUAL "0") 819*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Could not compile universal protoc.") 820*da0073e9SAndroid Build Coastguard Worker endif() 821*da0073e9SAndroid Build Coastguard Worker set(PROTOBUF_PROTOC_EXECUTABLE 822*da0073e9SAndroid Build Coastguard Worker "${PROJECT_SOURCE_DIR}/build_host_protoc/bin/protoc") 823*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_CUSTOM_PROTOC_EXECUTABLE 824*da0073e9SAndroid Build Coastguard Worker "${PROJECT_SOURCE_DIR}/build_host_protoc/bin/protoc") 825*da0073e9SAndroid Build Coastguard Workerendif() 826*da0073e9SAndroid Build Coastguard Worker 827*da0073e9SAndroid Build Coastguard Worker# ---[ Misc checks to cope with various compiler modes 828*da0073e9SAndroid Build Coastguard Workerinclude(cmake/MiscCheck.cmake) 829*da0073e9SAndroid Build Coastguard Worker 830*da0073e9SAndroid Build Coastguard Worker# External projects 831*da0073e9SAndroid Build Coastguard Workerinclude(ExternalProject) 832*da0073e9SAndroid Build Coastguard Worker 833*da0073e9SAndroid Build Coastguard Worker# ---[ Dependencies ---[ FBGEMM doesn't work on x86 32bit and 834*da0073e9SAndroid Build Coastguard Worker# CMAKE_SYSTEM_PROCESSOR thinks its 64bit 835*da0073e9SAndroid Build Coastguard Workerif(USE_FBGEMM 836*da0073e9SAndroid Build Coastguard Worker AND((CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND CMAKE_SIZEOF_VOID_P EQUAL 837*da0073e9SAndroid Build Coastguard Worker 4) 838*da0073e9SAndroid Build Coastguard Worker OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86")) 839*da0073e9SAndroid Build Coastguard Worker set(USE_FBGEMM OFF) 840*da0073e9SAndroid Build Coastguard Workerendif() 841*da0073e9SAndroid Build Coastguard Worker 842*da0073e9SAndroid Build Coastguard Workerset(BUILD_ONEDNN_GRAPH OFF) 843*da0073e9SAndroid Build Coastguard Worker 844*da0073e9SAndroid Build Coastguard Workerif(MSVC) 845*da0073e9SAndroid Build Coastguard Worker # The source code is in utf-8 encoding 846*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("/utf-8" CMAKE_CXX_FLAGS) 847*da0073e9SAndroid Build Coastguard Workerendif() 848*da0073e9SAndroid Build Coastguard Worker 849*da0073e9SAndroid Build Coastguard Worker# Note for ROCM platform: 1. USE_ROCM is always ON until 850*da0073e9SAndroid Build Coastguard Worker# include(cmake/Dependencies.cmake) 2. USE_CUDA will become OFF during 851*da0073e9SAndroid Build Coastguard Worker# re-configuration Truth Table: CUDA 1st pass: USE_CUDA=True;USE_ROCM=True, 852*da0073e9SAndroid Build Coastguard Worker# FLASH evaluates to ON by default CUDA 2nd pass: USE_CUDA=True;USE_ROCM=False, 853*da0073e9SAndroid Build Coastguard Worker# FLASH evaluates to ON by default ROCM 1st pass: USE_CUDA=True;USE_ROCM=True, 854*da0073e9SAndroid Build Coastguard Worker# FLASH evaluates to ON by default ROCM 2nd pass: USE_CUDA=False;USE_ROCM=True, 855*da0073e9SAndroid Build Coastguard Worker# FLASH evaluates to ON by default CPU 1st pass: USE_CUDA=False(Cmd 856*da0073e9SAndroid Build Coastguard Worker# Option);USE_ROCM=True, FLASH evaluates to OFF by default CPU 2nd pass: 857*da0073e9SAndroid Build Coastguard Worker# USE_CUDA=False(Cmd Option);USE_ROCM=False, FLASH evaluates to OFF by default 858*da0073e9SAndroid Build Coastguard Worker# Thus we cannot tell ROCM 2nd pass and CPU 1st pass 859*da0073e9SAndroid Build Coastguard Worker# 860*da0073e9SAndroid Build Coastguard Worker# The only solution is to include(cmake/Dependencies.cmake), and defer the 861*da0073e9SAndroid Build Coastguard Worker# aotriton build decision later. 862*da0073e9SAndroid Build Coastguard Worker 863*da0073e9SAndroid Build Coastguard Workerinclude(cmake/Dependencies.cmake) 864*da0073e9SAndroid Build Coastguard Worker 865*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 866*da0073e9SAndroid Build Coastguard Worker USE_FLASH_ATTENTION 867*da0073e9SAndroid Build Coastguard Worker "Whether to build the flash_attention kernel for scaled dot product attention.\ 868*da0073e9SAndroid Build Coastguard Worker Will be disabled if not supported by the platform" 869*da0073e9SAndroid Build Coastguard Worker ON 870*da0073e9SAndroid Build Coastguard Worker "USE_CUDA OR USE_ROCM;NOT MSVC" 871*da0073e9SAndroid Build Coastguard Worker OFF) 872*da0073e9SAndroid Build Coastguard Worker 873*da0073e9SAndroid Build Coastguard Worker# We are currenlty not using alibi attention for Flash So we disable this 874*da0073e9SAndroid Build Coastguard Worker# feature by default We dont currently document this feature because we don't 875*da0073e9SAndroid Build Coastguard Worker# Suspect users building from source will need this 876*da0073e9SAndroid Build Coastguard Workeradd_definitions(-DFLASHATTENTION_DISABLE_ALIBI) 877*da0073e9SAndroid Build Coastguard Worker 878*da0073e9SAndroid Build Coastguard Worker# CAVEAT: Again, Flash Attention2 will error while building for sm52 while Mem 879*da0073e9SAndroid Build Coastguard Worker# Eff Attention won't 880*da0073e9SAndroid Build Coastguard Workercmake_dependent_option( 881*da0073e9SAndroid Build Coastguard Worker USE_MEM_EFF_ATTENTION 882*da0073e9SAndroid Build Coastguard Worker "Enable memory-efficient attention for scaled dot product attention.\ 883*da0073e9SAndroid Build Coastguard Worker Will be disabled if not supported by the platform" ON 884*da0073e9SAndroid Build Coastguard Worker "USE_CUDA OR USE_ROCM" OFF) 885*da0073e9SAndroid Build Coastguard Worker 886*da0073e9SAndroid Build Coastguard Worker# 887*da0073e9SAndroid Build Coastguard Worker# Cannot be put into Dependencies.cmake due circular dependency: 888*da0073e9SAndroid Build Coastguard Worker# USE_FLASH_ATTENTION -> USE_ROCM -> Dependencies.cmake -> aotriton.cmake 889*da0073e9SAndroid Build Coastguard Worker# 890*da0073e9SAndroid Build Coastguard Workerif(USE_ROCM) 891*da0073e9SAndroid Build Coastguard Worker if(USE_FLASH_ATTENTION OR USE_MEM_EFF_ATTENTION) 892*da0073e9SAndroid Build Coastguard Worker include(cmake/External/aotriton.cmake) 893*da0073e9SAndroid Build Coastguard Worker endif() 894*da0073e9SAndroid Build Coastguard Workerendif() 895*da0073e9SAndroid Build Coastguard Worker 896*da0073e9SAndroid Build Coastguard Workerif(DEBUG_CUDA) 897*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS_DEBUG " -lineinfo") 898*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS_RELWITHDEBINFO " -lineinfo") 899*da0073e9SAndroid Build Coastguard Worker # CUDA-12.1 crashes when trying to compile with --source-in-ptx See 900*da0073e9SAndroid Build Coastguard Worker # https://github.com/pytorch/pytorch/issues/102372#issuecomment-1572526893 901*da0073e9SAndroid Build Coastguard Worker if(CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 12.1) 902*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS_DEBUG " --source-in-ptx") 903*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS_RELWITHDEBINFO " --source-in-ptx") 904*da0073e9SAndroid Build Coastguard Worker endif() 905*da0073e9SAndroid Build Coastguard Workerendif(DEBUG_CUDA) 906*da0073e9SAndroid Build Coastguard Worker 907*da0073e9SAndroid Build Coastguard Workerif(USE_FBGEMM) 908*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_FBGEMM") 909*da0073e9SAndroid Build Coastguard Workerendif() 910*da0073e9SAndroid Build Coastguard Worker 911*da0073e9SAndroid Build Coastguard Workerif(USE_PYTORCH_QNNPACK) 912*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_PYTORCH_QNNPACK") 913*da0073e9SAndroid Build Coastguard Workerendif() 914*da0073e9SAndroid Build Coastguard Worker 915*da0073e9SAndroid Build Coastguard Workerif(USE_SLEEF_FOR_ARM_VEC256) 916*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DAT_BUILD_ARM_VEC256_WITH_SLEEF") 917*da0073e9SAndroid Build Coastguard Worker add_definitions(-DAT_BUILD_ARM_VEC256_WITH_SLEEF) 918*da0073e9SAndroid Build Coastguard Workerendif() 919*da0073e9SAndroid Build Coastguard Worker 920*da0073e9SAndroid Build Coastguard Worker# Enable sleef on macOS with Apple silicon by default 921*da0073e9SAndroid Build Coastguard Workerif((${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") AND ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm64")) 922*da0073e9SAndroid Build Coastguard Worker message(STATUS "Running on macOS with Apple silicon") 923*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DAT_BUILD_ARM_VEC256_WITH_SLEEF") 924*da0073e9SAndroid Build Coastguard Worker add_definitions(-DAT_BUILD_ARM_VEC256_WITH_SLEEF) 925*da0073e9SAndroid Build Coastguard Workerendif() 926*da0073e9SAndroid Build Coastguard Worker 927*da0073e9SAndroid Build Coastguard Workerif(USE_XNNPACK) 928*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_XNNPACK") 929*da0073e9SAndroid Build Coastguard Workerendif() 930*da0073e9SAndroid Build Coastguard Worker 931*da0073e9SAndroid Build Coastguard Workerif(USE_VULKAN) 932*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_VULKAN") 933*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_VULKAN_API") 934*da0073e9SAndroid Build Coastguard Worker 935*da0073e9SAndroid Build Coastguard Worker if(USE_VULKAN_FP16_INFERENCE) 936*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_VULKAN_FP16_INFERENCE") 937*da0073e9SAndroid Build Coastguard Worker endif() 938*da0073e9SAndroid Build Coastguard Worker 939*da0073e9SAndroid Build Coastguard Worker if(USE_VULKAN_RELAXED_PRECISION) 940*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_VULKAN_RELAXED_PRECISION") 941*da0073e9SAndroid Build Coastguard Worker endif() 942*da0073e9SAndroid Build Coastguard Worker 943*da0073e9SAndroid Build Coastguard Workerendif() 944*da0073e9SAndroid Build Coastguard Worker 945*da0073e9SAndroid Build Coastguard Workerif(BUILD_LITE_INTERPRETER) 946*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DBUILD_LITE_INTERPRETER") 947*da0073e9SAndroid Build Coastguard Workerendif() 948*da0073e9SAndroid Build Coastguard Worker 949*da0073e9SAndroid Build Coastguard Workerif(TRACING_BASED) 950*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DTRACING_BASED") 951*da0073e9SAndroid Build Coastguard Workerendif() 952*da0073e9SAndroid Build Coastguard Worker 953*da0073e9SAndroid Build Coastguard Workerif(USE_PYTORCH_METAL) 954*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_PYTORCH_METAL") 955*da0073e9SAndroid Build Coastguard Workerendif() 956*da0073e9SAndroid Build Coastguard Worker 957*da0073e9SAndroid Build Coastguard Workerif(USE_PYTORCH_METAL_EXPORT) 958*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_PYTORCH_METAL_EXPORT") 959*da0073e9SAndroid Build Coastguard Workerendif() 960*da0073e9SAndroid Build Coastguard Worker 961*da0073e9SAndroid Build Coastguard Workerif(USE_SOURCE_DEBUG_ON_MOBILE) 962*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DSYMBOLICATE_MOBILE_DEBUG_HANDLE") 963*da0073e9SAndroid Build Coastguard Workerendif() 964*da0073e9SAndroid Build Coastguard Worker 965*da0073e9SAndroid Build Coastguard Workerif(BUILD_LITE_INTERPRETER AND USE_LITE_INTERPRETER_PROFILER) 966*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DEDGE_PROFILER_USE_KINETO") 967*da0073e9SAndroid Build Coastguard Workerendif() 968*da0073e9SAndroid Build Coastguard Worker 969*da0073e9SAndroid Build Coastguard Workerif(USE_COREML_DELEGATE) 970*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_COREML_DELEGATE") 971*da0073e9SAndroid Build Coastguard Workerendif() 972*da0073e9SAndroid Build Coastguard Worker 973*da0073e9SAndroid Build Coastguard Worker# ---[ Allowlist file if allowlist is specified 974*da0073e9SAndroid Build Coastguard Workerinclude(cmake/Allowlist.cmake) 975*da0073e9SAndroid Build Coastguard Worker 976*da0073e9SAndroid Build Coastguard Worker# ---[ Set link flag, handle additional deps for gcc 4.8 and above 977*da0073e9SAndroid Build Coastguard Workerif(CMAKE_COMPILER_IS_GNUCXX AND NOT ANDROID) 978*da0073e9SAndroid Build Coastguard Worker message( 979*da0073e9SAndroid Build Coastguard Worker STATUS 980*da0073e9SAndroid Build Coastguard Worker "GCC ${CMAKE_CXX_COMPILER_VERSION}: Adding gcc and gcc_s libs to link line" 981*da0073e9SAndroid Build Coastguard Worker ) 982*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS gcc_s gcc) 983*da0073e9SAndroid Build Coastguard Workerendif() 984*da0073e9SAndroid Build Coastguard Worker 985*da0073e9SAndroid Build Coastguard Worker# ---[ Build flags Re-include to override append_cxx_flag_if_supported from 986*da0073e9SAndroid Build Coastguard Worker# third_party/FBGEMM 987*da0073e9SAndroid Build Coastguard Workerinclude(cmake/public/utils.cmake) 988*da0073e9SAndroid Build Coastguard Workerif(NOT MSVC) 989*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -O2 -fPIC") 990*da0073e9SAndroid Build Coastguard Worker # Eigen fails to build with some versions, so convert this to a warning 991*da0073e9SAndroid Build Coastguard Worker # Details at http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1459 992*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -Wall") 993*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -Wextra") 994*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Werror=return-type" CMAKE_CXX_FLAGS) 995*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Werror=non-virtual-dtor" CMAKE_CXX_FLAGS) 996*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Werror=braced-scalar-init" CMAKE_CXX_FLAGS) 997*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Werror=range-loop-construct" CMAKE_CXX_FLAGS) 998*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Werror=bool-operation" CMAKE_CXX_FLAGS) 999*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wnarrowing" CMAKE_CXX_FLAGS) 1000*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-missing-field-initializers" 1001*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS) 1002*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-type-limits" CMAKE_CXX_FLAGS) 1003*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-array-bounds" CMAKE_CXX_FLAGS) 1004*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-unknown-pragmas" CMAKE_CXX_FLAGS) 1005*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-unused-parameter" CMAKE_CXX_FLAGS) 1006*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-strict-overflow" CMAKE_CXX_FLAGS) 1007*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-strict-aliasing" CMAKE_CXX_FLAGS) 1008*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-stringop-overflow" CMAKE_CXX_FLAGS) 1009*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wvla-extension" CMAKE_CXX_FLAGS) 1010*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wsuggest-override" CMAKE_CXX_FLAGS) 1011*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wnewline-eof" CMAKE_CXX_FLAGS) 1012*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Winconsistent-missing-override" 1013*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS) 1014*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Winconsistent-missing-destructor-override" 1015*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS) 1016*da0073e9SAndroid Build Coastguard Worker if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") 1017*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -Wno-pass-failed") 1018*da0073e9SAndroid Build Coastguard Worker endif() 1019*da0073e9SAndroid Build Coastguard Worker if(CMAKE_COMPILER_IS_GNUCXX) 1020*da0073e9SAndroid Build Coastguard Worker # Suppress "The ABI for passing parameters with 64-byte alignment has 1021*da0073e9SAndroid Build Coastguard Worker # changed in GCC 4.6" 1022*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -Wno-psabi") 1023*da0073e9SAndroid Build Coastguard Worker endif() 1024*da0073e9SAndroid Build Coastguard Worker 1025*da0073e9SAndroid Build Coastguard Worker # Use ld.gold if available, fall back to ld.bfd (the default ld) if not 1026*da0073e9SAndroid Build Coastguard Worker if(USE_GOLD_LINKER) 1027*da0073e9SAndroid Build Coastguard Worker if(USE_DISTRIBUTED AND USE_MPI) 1028*da0073e9SAndroid Build Coastguard Worker # Same issue as here with default MPI on Ubuntu 1029*da0073e9SAndroid Build Coastguard Worker # https://bugs.launchpad.net/ubuntu/+source/deal.ii/+bug/1841577 1030*da0073e9SAndroid Build Coastguard Worker message(WARNING "Refusing to use gold when USE_MPI=1") 1031*da0073e9SAndroid Build Coastguard Worker else() 1032*da0073e9SAndroid Build Coastguard Worker execute_process( 1033*da0073e9SAndroid Build Coastguard Worker COMMAND "${CMAKE_C_COMPILER}" -fuse-ld=gold -Wl,--version 1034*da0073e9SAndroid Build Coastguard Worker ERROR_QUIET 1035*da0073e9SAndroid Build Coastguard Worker OUTPUT_VARIABLE LD_VERSION) 1036*da0073e9SAndroid Build Coastguard Worker if(NOT "${LD_VERSION}" MATCHES "GNU gold") 1037*da0073e9SAndroid Build Coastguard Worker message( 1038*da0073e9SAndroid Build Coastguard Worker WARNING 1039*da0073e9SAndroid Build Coastguard Worker "USE_GOLD_LINKER was set but ld.gold isn't available, turning it off" 1040*da0073e9SAndroid Build Coastguard Worker ) 1041*da0073e9SAndroid Build Coastguard Worker set(USE_GOLD_LINKER OFF) 1042*da0073e9SAndroid Build Coastguard Worker else() 1043*da0073e9SAndroid Build Coastguard Worker message(STATUS "ld.gold is available, using it to link") 1044*da0073e9SAndroid Build Coastguard Worker set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold") 1045*da0073e9SAndroid Build Coastguard Worker set(CMAKE_SHARED_LINKER_FLAGS 1046*da0073e9SAndroid Build Coastguard Worker "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold") 1047*da0073e9SAndroid Build Coastguard Worker set(CMAKE_MODULE_LINKER_FLAGS 1048*da0073e9SAndroid Build Coastguard Worker "${CMAKE_MODULE_LINKER_FLAGS} -fuse-ld=gold") 1049*da0073e9SAndroid Build Coastguard Worker endif() 1050*da0073e9SAndroid Build Coastguard Worker endif() 1051*da0073e9SAndroid Build Coastguard Worker endif() 1052*da0073e9SAndroid Build Coastguard Worker 1053*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-error=old-style-cast" CMAKE_CXX_FLAGS) 1054*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wconstant-conversion" CMAKE_CXX_FLAGS) 1055*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-aligned-allocation-unavailable" 1056*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS) 1057*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-missing-braces" CMAKE_CXX_FLAGS) 1058*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Qunused-arguments" CMAKE_CXX_FLAGS) 1059*da0073e9SAndroid Build Coastguard Worker 1060*da0073e9SAndroid Build Coastguard Worker if(${USE_COLORIZE_OUTPUT}) 1061*da0073e9SAndroid Build Coastguard Worker # Why compiler checks are necessary even when `try_compile` is used Because 1062*da0073e9SAndroid Build Coastguard Worker # of the bug in ccache that can incorrectly identify `-fcolor-diagnostics` 1063*da0073e9SAndroid Build Coastguard Worker # As supported by GCC, see https://github.com/ccache/ccache/issues/740 (for 1064*da0073e9SAndroid Build Coastguard Worker # older ccache) and https://github.com/ccache/ccache/issues/1275 (for newer 1065*da0073e9SAndroid Build Coastguard Worker # ones) 1066*da0073e9SAndroid Build Coastguard Worker if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 1067*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-fdiagnostics-color=always" CMAKE_CXX_FLAGS) 1068*da0073e9SAndroid Build Coastguard Worker else() 1069*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-fcolor-diagnostics" CMAKE_CXX_FLAGS) 1070*da0073e9SAndroid Build Coastguard Worker endif() 1071*da0073e9SAndroid Build Coastguard Worker endif() 1072*da0073e9SAndroid Build Coastguard Worker 1073*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-faligned-new" CMAKE_CXX_FLAGS) 1074*da0073e9SAndroid Build Coastguard Worker 1075*da0073e9SAndroid Build Coastguard Worker if(WERROR) 1076*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Werror" CMAKE_CXX_FLAGS) 1077*da0073e9SAndroid Build Coastguard Worker if(NOT COMPILER_SUPPORT_WERROR) 1078*da0073e9SAndroid Build Coastguard Worker set(WERROR FALSE) 1079*da0073e9SAndroid Build Coastguard Worker endif() 1080*da0073e9SAndroid Build Coastguard Worker endif() 1081*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-unused-but-set-variable" CMAKE_CXX_FLAGS) 1082*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-maybe-uninitialized" CMAKE_CXX_FLAGS) 1083*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-fstandalone-debug" CMAKE_CXX_FLAGS_DEBUG) 1084*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS_DEBUG " -fno-omit-frame-pointer -O0") 1085*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_LINKER_FLAGS_DEBUG " -fno-omit-frame-pointer -O0") 1086*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-fno-math-errno" CMAKE_CXX_FLAGS) 1087*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-fno-trapping-math" CMAKE_CXX_FLAGS) 1088*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Werror=format" CMAKE_CXX_FLAGS) 1089*da0073e9SAndroid Build Coastguard Workerelse() 1090*da0073e9SAndroid Build Coastguard Worker # skip unwanted includes from windows.h 1091*da0073e9SAndroid Build Coastguard Worker add_compile_definitions(WIN32_LEAN_AND_MEAN) 1092*da0073e9SAndroid Build Coastguard Worker # Windows SDK broke compatibility since version 25131, but introduced this 1093*da0073e9SAndroid Build Coastguard Worker # define for backward compatibility. 1094*da0073e9SAndroid Build Coastguard Worker add_compile_definitions(_UCRT_LEGACY_INFINITY) 1095*da0073e9SAndroid Build Coastguard Worker # disable min/max macros 1096*da0073e9SAndroid Build Coastguard Worker add_compile_definitions(NOMINMAX) 1097*da0073e9SAndroid Build Coastguard Worker # Turn off these warnings on Windows. destructor was implicitly defined as 1098*da0073e9SAndroid Build Coastguard Worker # delete 1099*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("/wd4624" CMAKE_CXX_FLAGS) 1100*da0073e9SAndroid Build Coastguard Worker # unknown pragma 1101*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("/wd4068" CMAKE_CXX_FLAGS) 1102*da0073e9SAndroid Build Coastguard Worker # unexpected tokens following preprocessor directive - expected a newline 1103*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("/wd4067" CMAKE_CXX_FLAGS) 1104*da0073e9SAndroid Build Coastguard Worker # conversion from 'size_t' to 'unsigned int', possible loss of data 1105*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("/wd4267" CMAKE_CXX_FLAGS) 1106*da0073e9SAndroid Build Coastguard Worker # no suitable definition provided for explicit template instantiation request 1107*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("/wd4661" CMAKE_CXX_FLAGS) 1108*da0073e9SAndroid Build Coastguard Worker # recursive on all control paths, function will cause runtime stack overflow 1109*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("/wd4717" CMAKE_CXX_FLAGS) 1110*da0073e9SAndroid Build Coastguard Worker # conversion from '_Ty' to '_Ty', possible loss of data 1111*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("/wd4244" CMAKE_CXX_FLAGS) 1112*da0073e9SAndroid Build Coastguard Worker # unsafe use of type 'bool' in operation 1113*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("/wd4804" CMAKE_CXX_FLAGS) 1114*da0073e9SAndroid Build Coastguard Worker # inconsistent dll linkage 1115*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("/wd4273" CMAKE_CXX_FLAGS) 1116*da0073e9SAndroid Build Coastguard Workerendif() 1117*da0073e9SAndroid Build Coastguard Worker 1118*da0073e9SAndroid Build Coastguard Workerif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") 1119*da0073e9SAndroid Build Coastguard Worker include(CheckCSourceCompiles) 1120*da0073e9SAndroid Build Coastguard Worker check_c_source_compiles( 1121*da0073e9SAndroid Build Coastguard Worker "#include <arm_neon.h> 1122*da0073e9SAndroid Build Coastguard Workerint main() { 1123*da0073e9SAndroid Build Coastguard Worker float a[] = {1.0, 1.0}; 1124*da0073e9SAndroid Build Coastguard Worker float32x4x2_t v; 1125*da0073e9SAndroid Build Coastguard Worker v.val[0] = vcombine_f32 (vcreate_f32 (0UL), vcreate_f32 (0UL)); 1126*da0073e9SAndroid Build Coastguard Worker v.val[1] = vcombine_f32 (vcreate_f32 (0UL), vcreate_f32 (0UL)); 1127*da0073e9SAndroid Build Coastguard Worker vst1q_f32_x2(a, v); 1128*da0073e9SAndroid Build Coastguard Worker return 0; 1129*da0073e9SAndroid Build Coastguard Worker}" 1130*da0073e9SAndroid Build Coastguard Worker HAS_VST1) 1131*da0073e9SAndroid Build Coastguard Worker 1132*da0073e9SAndroid Build Coastguard Worker if(NOT HAS_VST1) 1133*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DMISSING_ARM_VST1") 1134*da0073e9SAndroid Build Coastguard Worker endif() 1135*da0073e9SAndroid Build Coastguard Workerendif() 1136*da0073e9SAndroid Build Coastguard Worker 1137*da0073e9SAndroid Build Coastguard Workerif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") 1138*da0073e9SAndroid Build Coastguard Worker include(CheckCSourceCompiles) 1139*da0073e9SAndroid Build Coastguard Worker check_c_source_compiles( 1140*da0073e9SAndroid Build Coastguard Worker "#include <arm_neon.h> 1141*da0073e9SAndroid Build Coastguard Workerint main() { 1142*da0073e9SAndroid Build Coastguard Worker float a[] = {1.0, 1.0}; 1143*da0073e9SAndroid Build Coastguard Worker vld1q_f32_x2(a); 1144*da0073e9SAndroid Build Coastguard Worker return 0; 1145*da0073e9SAndroid Build Coastguard Worker}" 1146*da0073e9SAndroid Build Coastguard Worker HAS_VLD1) 1147*da0073e9SAndroid Build Coastguard Worker 1148*da0073e9SAndroid Build Coastguard Worker if(NOT HAS_VLD1) 1149*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DMISSING_ARM_VLD1") 1150*da0073e9SAndroid Build Coastguard Worker endif() 1151*da0073e9SAndroid Build Coastguard Workerendif() 1152*da0073e9SAndroid Build Coastguard Worker 1153*da0073e9SAndroid Build Coastguard Worker# Add code coverage flags to supported compilers 1154*da0073e9SAndroid Build Coastguard Workerif(USE_CPP_CODE_COVERAGE) 1155*da0073e9SAndroid Build Coastguard Worker if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 1156*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_C_FLAGS " --coverage -fprofile-abs-path") 1157*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " --coverage -fprofile-abs-path") 1158*da0073e9SAndroid Build Coastguard Worker elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") 1159*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_C_FLAGS " -fprofile-instr-generate -fcoverage-mapping") 1160*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS 1161*da0073e9SAndroid Build Coastguard Worker " -fprofile-instr-generate -fcoverage-mapping") 1162*da0073e9SAndroid Build Coastguard Worker else() 1163*da0073e9SAndroid Build Coastguard Worker message( 1164*da0073e9SAndroid Build Coastguard Worker ERROR 1165*da0073e9SAndroid Build Coastguard Worker "Code coverage for compiler ${CMAKE_CXX_COMPILER_ID} is unsupported") 1166*da0073e9SAndroid Build Coastguard Worker endif() 1167*da0073e9SAndroid Build Coastguard Worker 1168*da0073e9SAndroid Build Coastguard Workerendif() 1169*da0073e9SAndroid Build Coastguard Worker 1170*da0073e9SAndroid Build Coastguard Workerif(APPLE) 1171*da0073e9SAndroid Build Coastguard Worker if(USE_MPS) 1172*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_OBJCXX_FLAGS " -DUSE_MPS -fno-objc-arc") 1173*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_MPS") 1174*da0073e9SAndroid Build Coastguard Worker string( 1175*da0073e9SAndroid Build Coastguard Worker APPEND 1176*da0073e9SAndroid Build Coastguard Worker CMAKE_SHARED_LINKER_FLAGS 1177*da0073e9SAndroid Build Coastguard Worker " -weak_framework Foundation -weak_framework MetalPerformanceShaders -weak_framework MetalPerformanceShadersGraph -weak_framework Metal" 1178*da0073e9SAndroid Build Coastguard Worker ) 1179*da0073e9SAndroid Build Coastguard Worker # To suppress MPSGraph availability warnings 1180*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-unguarded-availability-new" 1181*da0073e9SAndroid Build Coastguard Worker CMAKE_OBJCXX_FLAGS) 1182*da0073e9SAndroid Build Coastguard Worker endif() 1183*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-unused-private-field" CMAKE_CXX_FLAGS) 1184*da0073e9SAndroid Build Coastguard Worker append_cxx_flag_if_supported("-Wno-missing-braces" CMAKE_CXX_FLAGS) 1185*da0073e9SAndroid Build Coastguard Workerendif() 1186*da0073e9SAndroid Build Coastguard Worker 1187*da0073e9SAndroid Build Coastguard Workerif(USE_XPU) 1188*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_XPU") 1189*da0073e9SAndroid Build Coastguard Workerendif() 1190*da0073e9SAndroid Build Coastguard Worker 1191*da0073e9SAndroid Build Coastguard Workerif(EMSCRIPTEN) 1192*da0073e9SAndroid Build Coastguard Worker string( 1193*da0073e9SAndroid Build Coastguard Worker APPEND 1194*da0073e9SAndroid Build Coastguard Worker CMAKE_CXX_FLAGS 1195*da0073e9SAndroid Build Coastguard Worker " -Wno-implicit-function-declaration -DEMSCRIPTEN -s DISABLE_EXCEPTION_CATCHING=0" 1196*da0073e9SAndroid Build Coastguard Worker ) 1197*da0073e9SAndroid Build Coastguard Workerendif() 1198*da0073e9SAndroid Build Coastguard Worker 1199*da0073e9SAndroid Build Coastguard Workerappend_cxx_flag_if_supported("-Wno-stringop-overflow" CMAKE_CXX_FLAGS) 1200*da0073e9SAndroid Build Coastguard Worker 1201*da0073e9SAndroid Build Coastguard Workerif(ANDROID AND (NOT ANDROID_DEBUG_SYMBOLS)) 1202*da0073e9SAndroid Build Coastguard Worker if(CMAKE_COMPILER_IS_GNUCXX) 1203*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -s") 1204*da0073e9SAndroid Build Coastguard Worker elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") 1205*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -g0") 1206*da0073e9SAndroid Build Coastguard Worker else() 1207*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_EXE_LINKER_FLAGS " -s") 1208*da0073e9SAndroid Build Coastguard Worker endif() 1209*da0073e9SAndroid Build Coastguard Workerendif() 1210*da0073e9SAndroid Build Coastguard Worker 1211*da0073e9SAndroid Build Coastguard Workerif(NOT APPLE AND UNIX) 1212*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS dl) 1213*da0073e9SAndroid Build Coastguard Workerendif() 1214*da0073e9SAndroid Build Coastguard Worker 1215*da0073e9SAndroid Build Coastguard Worker# Prefix path to Caffe2 headers. If a directory containing installed Caffe2 1216*da0073e9SAndroid Build Coastguard Worker# headers was inadvertently added to the list of include directories, prefixing 1217*da0073e9SAndroid Build Coastguard Worker# PROJECT_SOURCE_DIR means this source tree always takes precedence. 1218*da0073e9SAndroid Build Coastguard Workerinclude_directories(BEFORE ${PROJECT_SOURCE_DIR}) 1219*da0073e9SAndroid Build Coastguard Worker 1220*da0073e9SAndroid Build Coastguard Worker# Prefix path to generated Caffe2 headers. These need to take precedence over 1221*da0073e9SAndroid Build Coastguard Worker# their empty counterparts located in PROJECT_SOURCE_DIR. 1222*da0073e9SAndroid Build Coastguard Workerinclude_directories(BEFORE ${PROJECT_BINARY_DIR}) 1223*da0073e9SAndroid Build Coastguard Worker 1224*da0073e9SAndroid Build Coastguard Workerinclude_directories(BEFORE ${PROJECT_SOURCE_DIR}/aten/src/) 1225*da0073e9SAndroid Build Coastguard Workerinclude_directories(BEFORE ${CMAKE_BINARY_DIR}/aten/src/) 1226*da0073e9SAndroid Build Coastguard Worker 1227*da0073e9SAndroid Build Coastguard Workerif(USE_MIMALLOC) 1228*da0073e9SAndroid Build Coastguard Worker set(MI_OVERRIDE OFF) 1229*da0073e9SAndroid Build Coastguard Worker set(MI_BUILD_SHARED OFF) 1230*da0073e9SAndroid Build Coastguard Worker set(MI_BUILD_OBJECT OFF) 1231*da0073e9SAndroid Build Coastguard Worker set(MI_BUILD_TESTS OFF) 1232*da0073e9SAndroid Build Coastguard Worker add_definitions(-DUSE_MIMALLOC) 1233*da0073e9SAndroid Build Coastguard Worker add_subdirectory(third_party/mimalloc) 1234*da0073e9SAndroid Build Coastguard Worker include_directories(third_party/mimalloc/include) 1235*da0073e9SAndroid Build Coastguard Workerendif() 1236*da0073e9SAndroid Build Coastguard Worker 1237*da0073e9SAndroid Build Coastguard Worker# ---[ Main build 1238*da0073e9SAndroid Build Coastguard Workeradd_subdirectory(c10) 1239*da0073e9SAndroid Build Coastguard Workeradd_subdirectory(caffe2) 1240*da0073e9SAndroid Build Coastguard Worker 1241*da0073e9SAndroid Build Coastguard Worker# ---[ CMake related files Uninistall option. 1242*da0073e9SAndroid Build Coastguard Workerif(NOT TARGET caffe2_uninstall) 1243*da0073e9SAndroid Build Coastguard Worker configure_file( 1244*da0073e9SAndroid Build Coastguard Worker ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in 1245*da0073e9SAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake IMMEDIATE @ONLY) 1246*da0073e9SAndroid Build Coastguard Worker 1247*da0073e9SAndroid Build Coastguard Worker add_custom_target( 1248*da0073e9SAndroid Build Coastguard Worker caffe2_uninstall COMMAND ${CMAKE_COMMAND} -P 1249*da0073e9SAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) 1250*da0073e9SAndroid Build Coastguard Workerendif() 1251*da0073e9SAndroid Build Coastguard Worker 1252*da0073e9SAndroid Build Coastguard Worker# ---[ Make configuration files for cmake to allow dependent libraries easier 1253*da0073e9SAndroid Build Coastguard Worker# access to Caffe2. 1254*da0073e9SAndroid Build Coastguard Worker 1255*da0073e9SAndroid Build Coastguard Workerif((NOT USE_GLOG) 1256*da0073e9SAndroid Build Coastguard Worker OR(NOT USE_GFLAGS) 1257*da0073e9SAndroid Build Coastguard Worker OR BUILD_CUSTOM_PROTOBUF) 1258*da0073e9SAndroid Build Coastguard Worker message(WARNING "Generated cmake files are only fully tested if one builds " 1259*da0073e9SAndroid Build Coastguard Worker "with system glog, gflags, and protobuf. Other settings may " 1260*da0073e9SAndroid Build Coastguard Worker "generate files that are not well tested.") 1261*da0073e9SAndroid Build Coastguard Workerendif() 1262*da0073e9SAndroid Build Coastguard Worker 1263*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA OR USE_ROCM) 1264*da0073e9SAndroid Build Coastguard Worker # TODO: check if we should include other cuda dependency libraries to the 1265*da0073e9SAndroid Build Coastguard Worker # interface as well. 1266*da0073e9SAndroid Build Coastguard Worker 1267*da0073e9SAndroid Build Coastguard Workerendif() 1268*da0073e9SAndroid Build Coastguard Worker 1269*da0073e9SAndroid Build Coastguard Worker# Note(jiayq): when building static libraries, all PRIVATE dependencies will 1270*da0073e9SAndroid Build Coastguard Worker# also become interface libraries, and as a result if there are any dependency 1271*da0073e9SAndroid Build Coastguard Worker# libraries that are not exported, the following install export script will 1272*da0073e9SAndroid Build Coastguard Worker# fail. As a result, we will only provide the targets cmake files for shared lib 1273*da0073e9SAndroid Build Coastguard Worker# installation. For more info, read: 1274*da0073e9SAndroid Build Coastguard Worker# https://cmake.org/pipermail/cmake/2016-May/063400.html 1275*da0073e9SAndroid Build Coastguard Workerif(BUILD_SHARED_LIBS) 1276*da0073e9SAndroid Build Coastguard Worker configure_file(${PROJECT_SOURCE_DIR}/cmake/Caffe2Config.cmake.in 1277*da0073e9SAndroid Build Coastguard Worker ${PROJECT_BINARY_DIR}/Caffe2Config.cmake @ONLY) 1278*da0073e9SAndroid Build Coastguard Worker install( 1279*da0073e9SAndroid Build Coastguard Worker FILES ${PROJECT_BINARY_DIR}/Caffe2Config.cmake 1280*da0073e9SAndroid Build Coastguard Worker DESTINATION share/cmake/Caffe2 1281*da0073e9SAndroid Build Coastguard Worker COMPONENT dev) 1282*da0073e9SAndroid Build Coastguard Worker install( 1283*da0073e9SAndroid Build Coastguard Worker FILES ${PROJECT_SOURCE_DIR}/cmake/public/cuda.cmake 1284*da0073e9SAndroid Build Coastguard Worker ${PROJECT_SOURCE_DIR}/cmake/public/xpu.cmake 1285*da0073e9SAndroid Build Coastguard Worker ${PROJECT_SOURCE_DIR}/cmake/public/glog.cmake 1286*da0073e9SAndroid Build Coastguard Worker ${PROJECT_SOURCE_DIR}/cmake/public/gflags.cmake 1287*da0073e9SAndroid Build Coastguard Worker ${PROJECT_SOURCE_DIR}/cmake/public/mkl.cmake 1288*da0073e9SAndroid Build Coastguard Worker ${PROJECT_SOURCE_DIR}/cmake/public/mkldnn.cmake 1289*da0073e9SAndroid Build Coastguard Worker ${PROJECT_SOURCE_DIR}/cmake/public/protobuf.cmake 1290*da0073e9SAndroid Build Coastguard Worker ${PROJECT_SOURCE_DIR}/cmake/public/utils.cmake 1291*da0073e9SAndroid Build Coastguard Worker ${PROJECT_SOURCE_DIR}/cmake/public/LoadHIP.cmake 1292*da0073e9SAndroid Build Coastguard Worker DESTINATION share/cmake/Caffe2/public 1293*da0073e9SAndroid Build Coastguard Worker COMPONENT dev) 1294*da0073e9SAndroid Build Coastguard Worker install( 1295*da0073e9SAndroid Build Coastguard Worker DIRECTORY ${PROJECT_SOURCE_DIR}/cmake/Modules_CUDA_fix 1296*da0073e9SAndroid Build Coastguard Worker DESTINATION share/cmake/Caffe2/ 1297*da0073e9SAndroid Build Coastguard Worker COMPONENT dev) 1298*da0073e9SAndroid Build Coastguard Worker install( 1299*da0073e9SAndroid Build Coastguard Worker FILES ${PROJECT_SOURCE_DIR}/cmake/Modules/FindCUDAToolkit.cmake 1300*da0073e9SAndroid Build Coastguard Worker DESTINATION share/cmake/Caffe2/ 1301*da0073e9SAndroid Build Coastguard Worker COMPONENT dev) 1302*da0073e9SAndroid Build Coastguard Worker install( 1303*da0073e9SAndroid Build Coastguard Worker FILES ${PROJECT_SOURCE_DIR}/cmake/Modules/FindCUSPARSELT.cmake 1304*da0073e9SAndroid Build Coastguard Worker DESTINATION share/cmake/Caffe2/ 1305*da0073e9SAndroid Build Coastguard Worker COMPONENT dev) 1306*da0073e9SAndroid Build Coastguard Worker install( 1307*da0073e9SAndroid Build Coastguard Worker FILES ${PROJECT_SOURCE_DIR}/cmake/Modules/FindCUDSS.cmake 1308*da0073e9SAndroid Build Coastguard Worker DESTINATION share/cmake/Caffe2/ 1309*da0073e9SAndroid Build Coastguard Worker COMPONENT dev) 1310*da0073e9SAndroid Build Coastguard Worker install( 1311*da0073e9SAndroid Build Coastguard Worker FILES ${PROJECT_SOURCE_DIR}/cmake/Modules/FindSYCLToolkit.cmake 1312*da0073e9SAndroid Build Coastguard Worker DESTINATION share/cmake/Caffe2/ 1313*da0073e9SAndroid Build Coastguard Worker COMPONENT dev) 1314*da0073e9SAndroid Build Coastguard Worker if(NOT BUILD_LIBTORCHLESS) 1315*da0073e9SAndroid Build Coastguard Worker install( 1316*da0073e9SAndroid Build Coastguard Worker EXPORT Caffe2Targets 1317*da0073e9SAndroid Build Coastguard Worker DESTINATION share/cmake/Caffe2 1318*da0073e9SAndroid Build Coastguard Worker FILE Caffe2Targets.cmake 1319*da0073e9SAndroid Build Coastguard Worker COMPONENT dev) 1320*da0073e9SAndroid Build Coastguard Worker endif() 1321*da0073e9SAndroid Build Coastguard Workerelse() 1322*da0073e9SAndroid Build Coastguard Worker message(WARNING "Generated cmake files are only available when building " 1323*da0073e9SAndroid Build Coastguard Worker "shared libs.") 1324*da0073e9SAndroid Build Coastguard Workerendif() 1325*da0073e9SAndroid Build Coastguard Worker 1326*da0073e9SAndroid Build Coastguard Worker# ---[ Binaries Binaries will be built after the Caffe2 main libraries and the 1327*da0073e9SAndroid Build Coastguard Worker# modules are built. For the binaries, they will be linked to the Caffe2 main 1328*da0073e9SAndroid Build Coastguard Worker# libraries, as well as all the modules that are built with Caffe2 (the ones 1329*da0073e9SAndroid Build Coastguard Worker# built in the previous Modules section above). 1330*da0073e9SAndroid Build Coastguard Workerif(BUILD_BINARY) 1331*da0073e9SAndroid Build Coastguard Worker add_subdirectory(binaries) 1332*da0073e9SAndroid Build Coastguard Workerendif() 1333*da0073e9SAndroid Build Coastguard Worker 1334*da0073e9SAndroid Build Coastguard Worker# ---[ JNI 1335*da0073e9SAndroid Build Coastguard Workerif(BUILD_JNI) 1336*da0073e9SAndroid Build Coastguard Worker if(NOT MSVC) 1337*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -Wno-unused-variable") 1338*da0073e9SAndroid Build Coastguard Worker endif() 1339*da0073e9SAndroid Build Coastguard Worker set(BUILD_LIBTORCH_WITH_JNI 1) 1340*da0073e9SAndroid Build Coastguard Worker set(FBJNI_SKIP_TESTS 1) 1341*da0073e9SAndroid Build Coastguard Worker add_subdirectory(android/pytorch_android) 1342*da0073e9SAndroid Build Coastguard Workerendif() 1343*da0073e9SAndroid Build Coastguard Worker 1344*da0073e9SAndroid Build Coastguard Workerinclude(cmake/Summary.cmake) 1345*da0073e9SAndroid Build Coastguard Workercaffe2_print_configuration_summary() 1346*da0073e9SAndroid Build Coastguard Worker 1347*da0073e9SAndroid Build Coastguard Workerif(BUILD_FUNCTORCH) 1348*da0073e9SAndroid Build Coastguard Worker add_subdirectory(functorch) 1349*da0073e9SAndroid Build Coastguard Workerendif() 1350*da0073e9SAndroid Build Coastguard Worker 1351*da0073e9SAndroid Build Coastguard Worker# Parse custom debug info 1352*da0073e9SAndroid Build Coastguard Workerif(DEFINED USE_CUSTOM_DEBINFO) 1353*da0073e9SAndroid Build Coastguard Worker string(REPLACE ";" " " SOURCE_FILES "${USE_CUSTOM_DEBINFO}") 1354*da0073e9SAndroid Build Coastguard Worker message(STATUS "Source files with custom debug infos: ${SOURCE_FILES}") 1355*da0073e9SAndroid Build Coastguard Worker 1356*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE " +" ";" SOURCE_FILES_LIST "${SOURCE_FILES}") 1357*da0073e9SAndroid Build Coastguard Worker 1358*da0073e9SAndroid Build Coastguard Worker # Set the COMPILE_FLAGS property for each source file 1359*da0073e9SAndroid Build Coastguard Worker foreach(SOURCE_FILE ${SOURCE_FILES_LIST}) 1360*da0073e9SAndroid Build Coastguard Worker # We have to specify the scope here. We do this by specifying the targets we 1361*da0073e9SAndroid Build Coastguard Worker # care about and caffe2/ for all test targets defined there 1362*da0073e9SAndroid Build Coastguard Worker if(BUILD_LIBTORCHLESS) 1363*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_CUDA OFF) 1364*da0073e9SAndroid Build Coastguard Worker set(ALL_PT_TARGETS "torch_python;${C10_LIB};${TORCH_CPU_LIB};${TORCH_LIB}") 1365*da0073e9SAndroid Build Coastguard Worker else() 1366*da0073e9SAndroid Build Coastguard Worker # @todo test if we can remove this 1367*da0073e9SAndroid Build Coastguard Worker set(ALL_PT_TARGETS "torch_python;c10;torch_cpu;torch") 1368*da0073e9SAndroid Build Coastguard Worker endif() 1369*da0073e9SAndroid Build Coastguard Worker set_source_files_properties( 1370*da0073e9SAndroid Build Coastguard Worker ${SOURCE_FILE} DIRECTORY "caffe2/" TARGET_DIRECTORY ${ALL_PT_TARGETS} 1371*da0073e9SAndroid Build Coastguard Worker PROPERTIES COMPILE_FLAGS "-g") 1372*da0073e9SAndroid Build Coastguard Worker endforeach() 1373*da0073e9SAndroid Build Coastguard Worker 1374*da0073e9SAndroid Build Coastguard Worker # Link everything with debug info when any file is in debug mode 1375*da0073e9SAndroid Build Coastguard Worker set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -g") 1376*da0073e9SAndroid Build Coastguard Worker set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -g") 1377*da0073e9SAndroid Build Coastguard Workerendif() 1378*da0073e9SAndroid Build Coastguard Worker 1379*da0073e9SAndroid Build Coastguard Worker# Bundle PTXAS if needed 1380*da0073e9SAndroid Build Coastguard Workerif(BUILD_BUNDLE_PTXAS AND USE_CUDA) 1381*da0073e9SAndroid Build Coastguard Worker if(NOT EXISTS "${PROJECT_SOURCE_DIR}/build/bin/ptxas") 1382*da0073e9SAndroid Build Coastguard Worker message(STATUS "Copying PTXAS into the bin folder") 1383*da0073e9SAndroid Build Coastguard Worker file(COPY "${CUDAToolkit_BIN_DIR}/ptxas" 1384*da0073e9SAndroid Build Coastguard Worker DESTINATION "${PROJECT_BINARY_DIR}") 1385*da0073e9SAndroid Build Coastguard Worker endif() 1386*da0073e9SAndroid Build Coastguard Worker install(PROGRAMS "${PROJECT_BINARY_DIR}/ptxas" 1387*da0073e9SAndroid Build Coastguard Worker DESTINATION "${CMAKE_INSTALL_BINDIR}") 1388*da0073e9SAndroid Build Coastguard Workerendif() 1389