1*da0073e9SAndroid Build Coastguard Worker# RPATH stuff 2*da0073e9SAndroid Build Coastguard Worker# see https://cmake.org/Wiki/CMake_RPATH_handling 3*da0073e9SAndroid Build Coastguard Workerif(APPLE) 4*da0073e9SAndroid Build Coastguard Worker set(CMAKE_MACOSX_RPATH ON) 5*da0073e9SAndroid Build Coastguard Worker set(_rpath_portable_origin "@loader_path") 6*da0073e9SAndroid Build Coastguard Workerelse() 7*da0073e9SAndroid Build Coastguard Worker set(_rpath_portable_origin $ORIGIN) 8*da0073e9SAndroid Build Coastguard Workerendif(APPLE) 9*da0073e9SAndroid Build Coastguard Worker# Use separate rpaths during build and install phases 10*da0073e9SAndroid Build Coastguard Workerset(CMAKE_SKIP_BUILD_RPATH FALSE) 11*da0073e9SAndroid Build Coastguard Worker# Don't use the install-rpath during the build phase 12*da0073e9SAndroid Build Coastguard Workerset(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 13*da0073e9SAndroid Build Coastguard Workerset(CMAKE_INSTALL_RPATH "${_rpath_portable_origin}") 14*da0073e9SAndroid Build Coastguard Worker# Automatically add all linked folders that are NOT in the build directory to 15*da0073e9SAndroid Build Coastguard Worker# the rpath (per library?) 16*da0073e9SAndroid Build Coastguard Workerset(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) 17*da0073e9SAndroid Build Coastguard Worker 18*da0073e9SAndroid Build Coastguard Worker # UBSAN triggers when compiling protobuf, so we need to disable it. 19*da0073e9SAndroid Build Coastguard Workerset(UBSAN_FLAG "-fsanitize=undefined") 20*da0073e9SAndroid Build Coastguard Worker 21*da0073e9SAndroid Build Coastguard Workermacro(disable_ubsan) 22*da0073e9SAndroid Build Coastguard Worker if(CMAKE_C_FLAGS MATCHES ${UBSAN_FLAG} OR CMAKE_CXX_FLAGS MATCHES ${UBSAN_FLAG}) 23*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_UBSAN_ENABLED ON) 24*da0073e9SAndroid Build Coastguard Worker string(REPLACE ${UBSAN_FLAG} "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) 25*da0073e9SAndroid Build Coastguard Worker string(REPLACE ${UBSAN_FLAG} "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) 26*da0073e9SAndroid Build Coastguard Worker endif() 27*da0073e9SAndroid Build Coastguard Workerendmacro() 28*da0073e9SAndroid Build Coastguard Worker 29*da0073e9SAndroid Build Coastguard Workermacro(enable_ubsan) 30*da0073e9SAndroid Build Coastguard Worker if(CAFFE2_UBSAN_ENABLED) 31*da0073e9SAndroid Build Coastguard Worker set(CMAKE_C_FLAGS "${UBSAN_FLAG} ${CMAKE_C_FLAGS}") 32*da0073e9SAndroid Build Coastguard Worker set(CMAKE_CXX_FLAGS "${UBSAN_FLAG} ${CMAKE_CXX_FLAGS}") 33*da0073e9SAndroid Build Coastguard Worker endif() 34*da0073e9SAndroid Build Coastguard Workerendmacro() 35*da0073e9SAndroid Build Coastguard Worker 36*da0073e9SAndroid Build Coastguard Worker# ---[ CUDA 37*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA) 38*da0073e9SAndroid Build Coastguard Worker # public/*.cmake uses CAFFE2_USE_* 39*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_CUDA ${USE_CUDA}) 40*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_CUDNN ${USE_CUDNN}) 41*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_CUSPARSELT ${USE_CUSPARSELT}) 42*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_CUFILE ${USE_CUFILE}) 43*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_NVRTC ${USE_NVRTC}) 44*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/public/cuda.cmake) 45*da0073e9SAndroid Build Coastguard Worker if(CAFFE2_USE_CUDA) 46*da0073e9SAndroid Build Coastguard Worker # A helper variable recording the list of Caffe2 dependent libraries 47*da0073e9SAndroid Build Coastguard Worker # torch::cudart is dealt with separately, due to CUDA_ADD_LIBRARY 48*da0073e9SAndroid Build Coastguard Worker # design reason (it adds CUDA_LIBRARIES itself). 49*da0073e9SAndroid Build Coastguard Worker set(Caffe2_PUBLIC_CUDA_DEPENDENCY_LIBS ) 50*da0073e9SAndroid Build Coastguard Worker if(NOT CAFFE2_USE_NVRTC) 51*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NVRTC OFF) 52*da0073e9SAndroid Build Coastguard Worker endif() 53*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_CUDA_DEPENDENCY_LIBS caffe2::curand caffe2::cufft caffe2::cublas) 54*da0073e9SAndroid Build Coastguard Worker if(CAFFE2_USE_CUDNN) 55*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_CUDA_DEPENDENCY_LIBS torch::cudnn) 56*da0073e9SAndroid Build Coastguard Worker else() 57*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_CUDNN OFF) 58*da0073e9SAndroid Build Coastguard Worker endif() 59*da0073e9SAndroid Build Coastguard Worker if(CAFFE2_USE_CUSPARSELT) 60*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_CUDA_DEPENDENCY_LIBS torch::cusparselt) 61*da0073e9SAndroid Build Coastguard Worker else() 62*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_CUSPARSELT OFF) 63*da0073e9SAndroid Build Coastguard Worker endif() 64*da0073e9SAndroid Build Coastguard Worker if(CAFFE2_USE_CUFILE) 65*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_CUDA_DEPENDENCY_LIBS torch::cufile) 66*da0073e9SAndroid Build Coastguard Worker endif() 67*da0073e9SAndroid Build Coastguard Worker find_program(SCCACHE_EXECUTABLE sccache) 68*da0073e9SAndroid Build Coastguard Worker if(SCCACHE_EXECUTABLE) 69*da0073e9SAndroid Build Coastguard Worker # Using RSP/--options-file renders output noncacheable by sccache 70*da0073e9SAndroid Build Coastguard Worker # as they fall under `multiple input files` non-cacheable rule 71*da0073e9SAndroid Build Coastguard Worker set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_INCLUDES 0) 72*da0073e9SAndroid Build Coastguard Worker set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_LIBRARIES 0) 73*da0073e9SAndroid Build Coastguard Worker set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_OBJECTS 0) 74*da0073e9SAndroid Build Coastguard Worker endif() 75*da0073e9SAndroid Build Coastguard Worker else() 76*da0073e9SAndroid Build Coastguard Worker message(WARNING 77*da0073e9SAndroid Build Coastguard Worker "Not compiling with CUDA. Suppress this warning with " 78*da0073e9SAndroid Build Coastguard Worker "-DUSE_CUDA=OFF.") 79*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_CUDA OFF) 80*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_CUDNN OFF) 81*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_CUSPARSELT OFF) 82*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NVRTC OFF) 83*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_CUDA OFF) 84*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_CUDNN OFF) 85*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_CUSPARSELT OFF) 86*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_CUFILE OFF) 87*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_NVRTC OFF) 88*da0073e9SAndroid Build Coastguard Worker endif() 89*da0073e9SAndroid Build Coastguard Workerendif() 90*da0073e9SAndroid Build Coastguard Worker 91*da0073e9SAndroid Build Coastguard Worker# ---[ XPU 92*da0073e9SAndroid Build Coastguard Workerif(USE_XPU) 93*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/public/xpu.cmake) 94*da0073e9SAndroid Build Coastguard Worker if(NOT PYTORCH_FOUND_XPU) 95*da0073e9SAndroid Build Coastguard Worker message(WARNING "Not compiling with XPU. Could NOT find SYCL." 96*da0073e9SAndroid Build Coastguard Worker "Suppress this warning with -DUSE_XPU=OFF.") 97*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_XPU OFF) 98*da0073e9SAndroid Build Coastguard Worker else() 99*da0073e9SAndroid Build Coastguard Worker if(LINUX) 100*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -D__INTEL_PREVIEW_BREAKING_CHANGES") 101*da0073e9SAndroid Build Coastguard Worker endif() 102*da0073e9SAndroid Build Coastguard Worker endif() 103*da0073e9SAndroid Build Coastguard Workerendif() 104*da0073e9SAndroid Build Coastguard Worker 105*da0073e9SAndroid Build Coastguard Worker# ---[ Custom Protobuf 106*da0073e9SAndroid Build Coastguard Workerif(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO AND NOT INTERN_BUILD_MOBILE) 107*da0073e9SAndroid Build Coastguard Worker disable_ubsan() 108*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/ProtoBuf.cmake) 109*da0073e9SAndroid Build Coastguard Worker enable_ubsan() 110*da0073e9SAndroid Build Coastguard Workerendif() 111*da0073e9SAndroid Build Coastguard Worker 112*da0073e9SAndroid Build Coastguard Workerif(USE_ASAN OR USE_TSAN) 113*da0073e9SAndroid Build Coastguard Worker find_package(Sanitizer REQUIRED) 114*da0073e9SAndroid Build Coastguard Worker if(USE_ASAN) 115*da0073e9SAndroid Build Coastguard Worker if(TARGET Sanitizer::address) 116*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS Sanitizer::address) 117*da0073e9SAndroid Build Coastguard Worker else() 118*da0073e9SAndroid Build Coastguard Worker message(WARNING "Not ASAN found. Suppress this warning with -DUSE_ASAN=OFF.") 119*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_ASAN OFF) 120*da0073e9SAndroid Build Coastguard Worker endif() 121*da0073e9SAndroid Build Coastguard Worker if(TARGET Sanitizer::undefined) 122*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS Sanitizer::undefined) 123*da0073e9SAndroid Build Coastguard Worker endif() 124*da0073e9SAndroid Build Coastguard Worker endif() 125*da0073e9SAndroid Build Coastguard Worker if(USE_TSAN) 126*da0073e9SAndroid Build Coastguard Worker if(TARGET Sanitizer::thread) 127*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS Sanitizer::thread) 128*da0073e9SAndroid Build Coastguard Worker else() 129*da0073e9SAndroid Build Coastguard Worker message(WARNING "Not TSAN found. Suppress this warning with -DUSE_TSAN=OFF.") 130*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_TSAN OFF) 131*da0073e9SAndroid Build Coastguard Worker endif() 132*da0073e9SAndroid Build Coastguard Worker endif() 133*da0073e9SAndroid Build Coastguard Workerendif() 134*da0073e9SAndroid Build Coastguard Worker 135*da0073e9SAndroid Build Coastguard Worker# ---[ Threads 136*da0073e9SAndroid Build Coastguard Workerfind_package(Threads REQUIRED) 137*da0073e9SAndroid Build Coastguard Workerif(TARGET Threads::Threads) 138*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS Threads::Threads) 139*da0073e9SAndroid Build Coastguard Workerelse() 140*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR 141*da0073e9SAndroid Build Coastguard Worker "Cannot find threading library. PyTorch requires Threads to compile.") 142*da0073e9SAndroid Build Coastguard Workerendif() 143*da0073e9SAndroid Build Coastguard Worker 144*da0073e9SAndroid Build Coastguard Worker# ---[ protobuf 145*da0073e9SAndroid Build Coastguard Workerif(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO) 146*da0073e9SAndroid Build Coastguard Worker if(USE_LITE_PROTO) 147*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_LITE_PROTO 1) 148*da0073e9SAndroid Build Coastguard Worker endif() 149*da0073e9SAndroid Build Coastguard Workerendif() 150*da0073e9SAndroid Build Coastguard Worker 151*da0073e9SAndroid Build Coastguard Worker# ---[ BLAS 152*da0073e9SAndroid Build Coastguard Worker 153*da0073e9SAndroid Build Coastguard Workerset(AT_MKLDNN_ACL_ENABLED 0) 154*da0073e9SAndroid Build Coastguard Workerset(AT_MKLDNN_ENABLED 0) 155*da0073e9SAndroid Build Coastguard Workerset(AT_MKL_ENABLED 0) 156*da0073e9SAndroid Build Coastguard Worker# setting default preferred BLAS options if not already present. 157*da0073e9SAndroid Build Coastguard Workerif(NOT INTERN_BUILD_MOBILE) 158*da0073e9SAndroid Build Coastguard Worker set(BLAS "MKL" CACHE STRING "Selected BLAS library") 159*da0073e9SAndroid Build Coastguard Workerelse() 160*da0073e9SAndroid Build Coastguard Worker set(BLAS "Eigen" CACHE STRING "Selected BLAS library") 161*da0073e9SAndroid Build Coastguard Worker set(AT_MKLDNN_ENABLED 0) 162*da0073e9SAndroid Build Coastguard Worker set(AT_MKL_ENABLED 0) 163*da0073e9SAndroid Build Coastguard Workerendif() 164*da0073e9SAndroid Build Coastguard Workerset_property(CACHE BLAS PROPERTY STRINGS "ATLAS;BLIS;Eigen;FLAME;Generic;MKL;OpenBLAS;vecLib") 165*da0073e9SAndroid Build Coastguard Workermessage(STATUS "Trying to find preferred BLAS backend of choice: " ${BLAS}) 166*da0073e9SAndroid Build Coastguard Worker 167*da0073e9SAndroid Build Coastguard Workerif(BLAS STREQUAL "Eigen") 168*da0073e9SAndroid Build Coastguard Worker # Eigen is header-only and we do not have any dependent libraries 169*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_EIGEN_FOR_BLAS ON) 170*da0073e9SAndroid Build Coastguard Workerelseif(BLAS STREQUAL "ATLAS") 171*da0073e9SAndroid Build Coastguard Worker find_package(Atlas REQUIRED) 172*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${ATLAS_INCLUDE_DIRS}) 173*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS ${ATLAS_LIBRARIES}) 174*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS cblas) 175*da0073e9SAndroid Build Coastguard Worker set(BLAS_INFO "atlas") 176*da0073e9SAndroid Build Coastguard Worker set(BLAS_FOUND 1) 177*da0073e9SAndroid Build Coastguard Worker set(BLAS_LIBRARIES ${ATLAS_LIBRARIES} cblas) 178*da0073e9SAndroid Build Coastguard Workerelseif(BLAS STREQUAL "OpenBLAS") 179*da0073e9SAndroid Build Coastguard Worker find_package(OpenBLAS REQUIRED) 180*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${OpenBLAS_INCLUDE_DIR}) 181*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS ${OpenBLAS_LIB}) 182*da0073e9SAndroid Build Coastguard Worker set(BLAS_INFO "open") 183*da0073e9SAndroid Build Coastguard Worker set(BLAS_FOUND 1) 184*da0073e9SAndroid Build Coastguard Worker set(BLAS_LIBRARIES ${OpenBLAS_LIB}) 185*da0073e9SAndroid Build Coastguard Workerelseif(BLAS STREQUAL "BLIS") 186*da0073e9SAndroid Build Coastguard Worker find_package(BLIS REQUIRED) 187*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${BLIS_INCLUDE_DIR}) 188*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS ${BLIS_LIB}) 189*da0073e9SAndroid Build Coastguard Workerelseif(BLAS STREQUAL "MKL") 190*da0073e9SAndroid Build Coastguard Worker if(BLAS_SET_BY_USER) 191*da0073e9SAndroid Build Coastguard Worker find_package(MKL REQUIRED) 192*da0073e9SAndroid Build Coastguard Worker else() 193*da0073e9SAndroid Build Coastguard Worker find_package(MKL QUIET) 194*da0073e9SAndroid Build Coastguard Worker endif() 195*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/public/mkl.cmake) 196*da0073e9SAndroid Build Coastguard Worker if(MKL_FOUND) 197*da0073e9SAndroid Build Coastguard Worker message(STATUS "MKL libraries: ${MKL_LIBRARIES}") 198*da0073e9SAndroid Build Coastguard Worker message(STATUS "MKL include directory: ${MKL_INCLUDE_DIR}") 199*da0073e9SAndroid Build Coastguard Worker message(STATUS "MKL OpenMP type: ${MKL_OPENMP_TYPE}") 200*da0073e9SAndroid Build Coastguard Worker message(STATUS "MKL OpenMP library: ${MKL_OPENMP_LIBRARY}") 201*da0073e9SAndroid Build Coastguard Worker include_directories(AFTER SYSTEM ${MKL_INCLUDE_DIR}) 202*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_PUBLIC_DEPENDENCY_LIBS caffe2::mkl) 203*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_MKL ON) 204*da0073e9SAndroid Build Coastguard Worker set(BLAS_INFO "mkl") 205*da0073e9SAndroid Build Coastguard Worker set(BLAS_FOUND 1) 206*da0073e9SAndroid Build Coastguard Worker set(BLAS_LIBRARIES ${MKL_LIBRARIES}) 207*da0073e9SAndroid Build Coastguard Worker else() 208*da0073e9SAndroid Build Coastguard Worker message(WARNING "MKL could not be found. Defaulting to Eigen") 209*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_EIGEN_FOR_BLAS ON) 210*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_MKL OFF) 211*da0073e9SAndroid Build Coastguard Worker endif() 212*da0073e9SAndroid Build Coastguard Workerelseif(BLAS STREQUAL "NVPL") 213*da0073e9SAndroid Build Coastguard Worker find_package(NVPL_BLAS REQUIRED) 214*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS nvpl::blas_lp64_omp) 215*da0073e9SAndroid Build Coastguard Worker set(BLAS_INFO "nvpl") 216*da0073e9SAndroid Build Coastguard Worker set(BLAS_FOUND 1) 217*da0073e9SAndroid Build Coastguard Worker set(BLAS_USE_CBLAS_DOT TRUE) 218*da0073e9SAndroid Build Coastguard Workerelseif(BLAS STREQUAL "vecLib") 219*da0073e9SAndroid Build Coastguard Worker find_package(vecLib REQUIRED) 220*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${vecLib_INCLUDE_DIR}) 221*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS ${vecLib_LINKER_LIBS}) 222*da0073e9SAndroid Build Coastguard Worker set(BLAS_INFO "veclib") 223*da0073e9SAndroid Build Coastguard Worker set(BLAS_FOUND 1) 224*da0073e9SAndroid Build Coastguard Worker set(BLAS_LIBRARIES ${vecLib_LINKER_LIBS}) 225*da0073e9SAndroid Build Coastguard Workerelseif(BLAS STREQUAL "FlexiBLAS") 226*da0073e9SAndroid Build Coastguard Worker find_package(FlexiBLAS REQUIRED) 227*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${FlexiBLAS_INCLUDE_DIR}) 228*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS ${FlexiBLAS_LIB}) 229*da0073e9SAndroid Build Coastguard Workerelseif(BLAS STREQUAL "Generic") 230*da0073e9SAndroid Build Coastguard Worker # On Debian family, the CBLAS ABIs have been merged into libblas.so 231*da0073e9SAndroid Build Coastguard Worker if(ENV{GENERIC_BLAS_LIBRARIES} STREQUAL "") 232*da0073e9SAndroid Build Coastguard Worker set(GENERIC_BLAS "blas") 233*da0073e9SAndroid Build Coastguard Worker else() 234*da0073e9SAndroid Build Coastguard Worker set(GENERIC_BLAS $ENV{GENERIC_BLAS_LIBRARIES}) 235*da0073e9SAndroid Build Coastguard Worker endif() 236*da0073e9SAndroid Build Coastguard Worker find_library(BLAS_LIBRARIES NAMES ${GENERIC_BLAS}) 237*da0073e9SAndroid Build Coastguard Worker message("-- Using BLAS: ${BLAS_LIBRARIES}") 238*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS ${BLAS_LIBRARIES}) 239*da0073e9SAndroid Build Coastguard Worker set(GENERIC_BLAS_FOUND TRUE) 240*da0073e9SAndroid Build Coastguard Worker set(BLAS_INFO "generic") 241*da0073e9SAndroid Build Coastguard Worker set(BLAS_FOUND 1) 242*da0073e9SAndroid Build Coastguard Workerelse() 243*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Unrecognized BLAS option: " ${BLAS}) 244*da0073e9SAndroid Build Coastguard Workerendif() 245*da0073e9SAndroid Build Coastguard Worker 246*da0073e9SAndroid Build Coastguard Workerif(NOT INTERN_BUILD_MOBILE) 247*da0073e9SAndroid Build Coastguard Worker set(AT_MKL_SEQUENTIAL 0) 248*da0073e9SAndroid Build Coastguard Worker set(USE_BLAS 1) 249*da0073e9SAndroid Build Coastguard Worker if(NOT (ATLAS_FOUND OR BLIS_FOUND OR GENERIC_BLAS_FOUND OR MKL_FOUND OR OpenBLAS_FOUND OR VECLIB_FOUND OR FlexiBLAS_FOUND OR NVPL_BLAS_FOUND)) 250*da0073e9SAndroid Build Coastguard Worker message(WARNING "Preferred BLAS (" ${BLAS} ") cannot be found, now searching for a general BLAS library") 251*da0073e9SAndroid Build Coastguard Worker find_package(BLAS) 252*da0073e9SAndroid Build Coastguard Worker if(NOT BLAS_FOUND) 253*da0073e9SAndroid Build Coastguard Worker set(USE_BLAS 0) 254*da0073e9SAndroid Build Coastguard Worker endif() 255*da0073e9SAndroid Build Coastguard Worker endif() 256*da0073e9SAndroid Build Coastguard Worker 257*da0073e9SAndroid Build Coastguard Worker if(MKL_FOUND) 258*da0073e9SAndroid Build Coastguard Worker if("${MKL_THREADING}" STREQUAL "SEQ") 259*da0073e9SAndroid Build Coastguard Worker set(AT_MKL_SEQUENTIAL 1) 260*da0073e9SAndroid Build Coastguard Worker endif() 261*da0073e9SAndroid Build Coastguard Worker set(AT_MKL_ENABLED 1) 262*da0073e9SAndroid Build Coastguard Worker endif() 263*da0073e9SAndroid Build Coastguard Workerelseif(INTERN_USE_EIGEN_BLAS) 264*da0073e9SAndroid Build Coastguard Worker # Eigen BLAS for Mobile 265*da0073e9SAndroid Build Coastguard Worker set(USE_BLAS 1) 266*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/External/EigenBLAS.cmake) 267*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS eigen_blas) 268*da0073e9SAndroid Build Coastguard Workerendif() 269*da0073e9SAndroid Build Coastguard Worker 270*da0073e9SAndroid Build Coastguard Worker# --- [ PocketFFT 271*da0073e9SAndroid Build Coastguard Workerset(AT_POCKETFFT_ENABLED 0) 272*da0073e9SAndroid Build Coastguard Workerif(NOT AT_MKL_ENABLED) 273*da0073e9SAndroid Build Coastguard Worker set(POCKETFFT_INCLUDE_DIR "${Torch_SOURCE_DIR}/third_party/pocketfft/") 274*da0073e9SAndroid Build Coastguard Worker if(NOT EXISTS "${POCKETFFT_INCLUDE_DIR}") 275*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "pocketfft directory not found, expected ${POCKETFFT_INCLUDE_DIR}") 276*da0073e9SAndroid Build Coastguard Worker elif(NOT EXISTS "${POCKETFFT_INCLUDE_DIR}/pocketfft_hdronly.h") 277*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "pocketfft headers not found in ${POCKETFFT_INCLUDE_DIR}") 278*da0073e9SAndroid Build Coastguard Worker endif() 279*da0073e9SAndroid Build Coastguard Worker 280*da0073e9SAndroid Build Coastguard Worker set(AT_POCKETFFT_ENABLED 1) 281*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using pocketfft in directory: ${POCKETFFT_INCLUDE_DIR}") 282*da0073e9SAndroid Build Coastguard Workerendif() 283*da0073e9SAndroid Build Coastguard Worker 284*da0073e9SAndroid Build Coastguard Worker# ---[ Dependencies 285*da0073e9SAndroid Build Coastguard Worker# NNPACK and family (QNNPACK, PYTORCH_QNNPACK, and XNNPACK) can download and 286*da0073e9SAndroid Build Coastguard Worker# compile their dependencies in isolation as part of their build. These dependencies 287*da0073e9SAndroid Build Coastguard Worker# are then linked statically with PyTorch. To avoid the possibility of a version 288*da0073e9SAndroid Build Coastguard Worker# mismatch between these shared dependencies, explicitly declare our intent to these 289*da0073e9SAndroid Build Coastguard Worker# libraries that we are interested in using the exact same source dependencies for all. 290*da0073e9SAndroid Build Coastguard Worker 291*da0073e9SAndroid Build Coastguard Workerif(USE_NNPACK OR USE_PYTORCH_QNNPACK OR USE_XNNPACK) 292*da0073e9SAndroid Build Coastguard Worker set(DISABLE_NNPACK_AND_FAMILY OFF) 293*da0073e9SAndroid Build Coastguard Worker 294*da0073e9SAndroid Build Coastguard Worker # Sanity checks - Can we actually build NNPACK and family given the configuration provided? 295*da0073e9SAndroid Build Coastguard Worker # Disable them and warn the user if not. 296*da0073e9SAndroid Build Coastguard Worker 297*da0073e9SAndroid Build Coastguard Worker if(IOS) 298*da0073e9SAndroid Build Coastguard Worker list(LENGTH IOS_ARCH IOS_ARCH_COUNT) 299*da0073e9SAndroid Build Coastguard Worker if(IOS_ARCH_COUNT GREATER 1) 300*da0073e9SAndroid Build Coastguard Worker message(WARNING 301*da0073e9SAndroid Build Coastguard Worker "Multi-architecture (${IOS_ARCH}) builds are not supported in {Q/X}NNPACK. " 302*da0073e9SAndroid Build Coastguard Worker "Specify a single architecture in IOS_ARCH and re-configure, or " 303*da0073e9SAndroid Build Coastguard Worker "turn this warning off by USE_{Q/X}NNPACK=OFF.") 304*da0073e9SAndroid Build Coastguard Worker set(DISABLE_NNPACK_AND_FAMILY ON) 305*da0073e9SAndroid Build Coastguard Worker endif() 306*da0073e9SAndroid Build Coastguard Worker if(NOT IOS_ARCH MATCHES "^(i386|x86_64|armv7.*|arm64.*)$") 307*da0073e9SAndroid Build Coastguard Worker message(WARNING 308*da0073e9SAndroid Build Coastguard Worker "Target architecture \"${IOS_ARCH}\" is not supported in {Q/X}NNPACK. " 309*da0073e9SAndroid Build Coastguard Worker "Supported architectures are x86, x86-64, ARM, and ARM64. " 310*da0073e9SAndroid Build Coastguard Worker "Turn this warning off by USE_{Q/X}NNPACK=OFF.") 311*da0073e9SAndroid Build Coastguard Worker set(DISABLE_NNPACK_AND_FAMILY ON) 312*da0073e9SAndroid Build Coastguard Worker endif() 313*da0073e9SAndroid Build Coastguard Worker else() 314*da0073e9SAndroid Build Coastguard Worker if(NOT IOS AND NOT (CMAKE_SYSTEM_NAME MATCHES "^(Android|Linux|Darwin|Windows)$")) 315*da0073e9SAndroid Build Coastguard Worker message(WARNING 316*da0073e9SAndroid Build Coastguard Worker "Target platform \"${CMAKE_SYSTEM_NAME}\" is not supported in {Q/X}NNPACK. " 317*da0073e9SAndroid Build Coastguard Worker "Supported platforms are Android, iOS, Linux, and macOS. " 318*da0073e9SAndroid Build Coastguard Worker "Turn this warning off by USE_{Q/X}NNPACK=OFF.") 319*da0073e9SAndroid Build Coastguard Worker set(DISABLE_NNPACK_AND_FAMILY ON) 320*da0073e9SAndroid Build Coastguard Worker endif() 321*da0073e9SAndroid Build Coastguard Worker if(NOT IOS AND NOT (CMAKE_SYSTEM_PROCESSOR MATCHES "^(i686|AMD64|x86_64|armv[0-9].*|arm64|aarch64)$")) 322*da0073e9SAndroid Build Coastguard Worker message(WARNING 323*da0073e9SAndroid Build Coastguard Worker "Target architecture \"${CMAKE_SYSTEM_PROCESSOR}\" is not supported in {Q/X}NNPACK. " 324*da0073e9SAndroid Build Coastguard Worker "Supported architectures are x86, x86-64, ARM, and ARM64. " 325*da0073e9SAndroid Build Coastguard Worker "Turn this warning off by USE_{Q/X}NNPACK=OFF.") 326*da0073e9SAndroid Build Coastguard Worker set(DISABLE_NNPACK_AND_FAMILY ON) 327*da0073e9SAndroid Build Coastguard Worker endif() 328*da0073e9SAndroid Build Coastguard Worker endif() 329*da0073e9SAndroid Build Coastguard Worker 330*da0073e9SAndroid Build Coastguard Worker if(DISABLE_NNPACK_AND_FAMILY) 331*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NNPACK OFF) 332*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_PYTORCH_QNNPACK OFF) 333*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_XNNPACK OFF) 334*da0073e9SAndroid Build Coastguard Worker else() 335*da0073e9SAndroid Build Coastguard Worker # Disable unsupported NNPack combinations with MSVC 336*da0073e9SAndroid Build Coastguard Worker if(MSVC) 337*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NNPACK OFF) 338*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_PYTORCH_QNNPACK OFF) 339*da0073e9SAndroid Build Coastguard Worker endif() 340*da0073e9SAndroid Build Coastguard Worker 341*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_THIRD_PARTY_ROOT "${PROJECT_SOURCE_DIR}/third_party") 342*da0073e9SAndroid Build Coastguard Worker 343*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED CPUINFO_SOURCE_DIR) 344*da0073e9SAndroid Build Coastguard Worker set(CPUINFO_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/cpuinfo" CACHE STRING "cpuinfo source directory") 345*da0073e9SAndroid Build Coastguard Worker endif() 346*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED FP16_SOURCE_DIR) 347*da0073e9SAndroid Build Coastguard Worker set(FP16_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/FP16" CACHE STRING "FP16 source directory") 348*da0073e9SAndroid Build Coastguard Worker endif() 349*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED FXDIV_SOURCE_DIR) 350*da0073e9SAndroid Build Coastguard Worker set(FXDIV_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/FXdiv" CACHE STRING "FXdiv source directory") 351*da0073e9SAndroid Build Coastguard Worker endif() 352*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED PSIMD_SOURCE_DIR) 353*da0073e9SAndroid Build Coastguard Worker set(PSIMD_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/psimd" CACHE STRING "PSimd source directory") 354*da0073e9SAndroid Build Coastguard Worker endif() 355*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED PTHREADPOOL_SOURCE_DIR) 356*da0073e9SAndroid Build Coastguard Worker set(PTHREADPOOL_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/pthreadpool" CACHE STRING "pthreadpool source directory") 357*da0073e9SAndroid Build Coastguard Worker endif() 358*da0073e9SAndroid Build Coastguard Worker endif() 359*da0073e9SAndroid Build Coastguard Workerelse() 360*da0073e9SAndroid Build Coastguard Worker set(DISABLE_NNPACK_AND_FAMILY ON) 361*da0073e9SAndroid Build Coastguard Workerendif() 362*da0073e9SAndroid Build Coastguard Worker 363*da0073e9SAndroid Build Coastguard Workerset(CONFU_DEPENDENCIES_SOURCE_DIR ${PROJECT_BINARY_DIR}/confu-srcs 364*da0073e9SAndroid Build Coastguard Worker CACHE PATH "Confu-style dependencies source directory") 365*da0073e9SAndroid Build Coastguard Workerset(CONFU_DEPENDENCIES_BINARY_DIR ${PROJECT_BINARY_DIR}/confu-deps 366*da0073e9SAndroid Build Coastguard Worker CACHE PATH "Confu-style dependencies binary directory") 367*da0073e9SAndroid Build Coastguard Worker 368*da0073e9SAndroid Build Coastguard Worker# ---[ pthreadpool 369*da0073e9SAndroid Build Coastguard Worker# Only add a dependency on pthreadpool if we are on a mobile build 370*da0073e9SAndroid Build Coastguard Worker# or are building any of the libraries in the {Q/X}NNPACK family. 371*da0073e9SAndroid Build Coastguard Workerif(INTERN_BUILD_MOBILE OR NOT DISABLE_NNPACK_AND_FAMILY) 372*da0073e9SAndroid Build Coastguard Worker set(USE_PTHREADPOOL ON CACHE BOOL "" FORCE) 373*da0073e9SAndroid Build Coastguard Worker set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_PTHREADPOOL") 374*da0073e9SAndroid Build Coastguard Worker 375*da0073e9SAndroid Build Coastguard Worker # Always use third_party/pthreadpool. 376*da0073e9SAndroid Build Coastguard Worker set(USE_INTERNAL_PTHREADPOOL_IMPL OFF CACHE BOOL "" FORCE) 377*da0073e9SAndroid Build Coastguard Worker 378*da0073e9SAndroid Build Coastguard Worker if(NOT TARGET pthreadpool) 379*da0073e9SAndroid Build Coastguard Worker if(USE_SYSTEM_PTHREADPOOL) 380*da0073e9SAndroid Build Coastguard Worker add_library(pthreadpool SHARED IMPORTED) 381*da0073e9SAndroid Build Coastguard Worker find_library(PTHREADPOOL_LIBRARY pthreadpool) 382*da0073e9SAndroid Build Coastguard Worker set_property(TARGET pthreadpool PROPERTY IMPORTED_LOCATION "${PTHREADPOOL_LIBRARY}") 383*da0073e9SAndroid Build Coastguard Worker if(NOT PTHREADPOOL_LIBRARY) 384*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Cannot find pthreadpool") 385*da0073e9SAndroid Build Coastguard Worker endif() 386*da0073e9SAndroid Build Coastguard Worker message("-- Found pthreadpool: ${PTHREADPOOL_LIBRARY}") 387*da0073e9SAndroid Build Coastguard Worker elseif(NOT USE_INTERNAL_PTHREADPOOL_IMPL) 388*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED PTHREADPOOL_SOURCE_DIR) 389*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_THIRD_PARTY_ROOT "${PROJECT_SOURCE_DIR}/third_party") 390*da0073e9SAndroid Build Coastguard Worker set(PTHREADPOOL_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/pthreadpool" CACHE STRING "pthreadpool source directory") 391*da0073e9SAndroid Build Coastguard Worker endif() 392*da0073e9SAndroid Build Coastguard Worker 393*da0073e9SAndroid Build Coastguard Worker set(PTHREADPOOL_BUILD_TESTS OFF CACHE BOOL "") 394*da0073e9SAndroid Build Coastguard Worker set(PTHREADPOOL_BUILD_BENCHMARKS OFF CACHE BOOL "") 395*da0073e9SAndroid Build Coastguard Worker set(PTHREADPOOL_LIBRARY_TYPE "static" CACHE STRING "") 396*da0073e9SAndroid Build Coastguard Worker set(PTHREADPOOL_ALLOW_DEPRECATED_API ON CACHE BOOL "") 397*da0073e9SAndroid Build Coastguard Worker add_subdirectory( 398*da0073e9SAndroid Build Coastguard Worker "${PTHREADPOOL_SOURCE_DIR}" 399*da0073e9SAndroid Build Coastguard Worker "${CONFU_DEPENDENCIES_BINARY_DIR}/pthreadpool") 400*da0073e9SAndroid Build Coastguard Worker set_property(TARGET pthreadpool PROPERTY POSITION_INDEPENDENT_CODE ON) 401*da0073e9SAndroid Build Coastguard Worker endif() 402*da0073e9SAndroid Build Coastguard Worker 403*da0073e9SAndroid Build Coastguard Worker if(USE_INTERNAL_PTHREADPOOL_IMPL) 404*da0073e9SAndroid Build Coastguard Worker set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_INTERNAL_PTHREADPOOL_IMPL") 405*da0073e9SAndroid Build Coastguard Worker else() 406*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS pthreadpool) 407*da0073e9SAndroid Build Coastguard Worker endif() 408*da0073e9SAndroid Build Coastguard Worker endif() 409*da0073e9SAndroid Build Coastguard Workerelse() 410*da0073e9SAndroid Build Coastguard Worker set(USE_PTHREADPOOL OFF CACHE BOOL "" FORCE) 411*da0073e9SAndroid Build Coastguard Workerendif() 412*da0073e9SAndroid Build Coastguard Worker 413*da0073e9SAndroid Build Coastguard Workerif(NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(s390x|ppc64le)$") 414*da0073e9SAndroid Build Coastguard Worker # ---[ Caffe2 uses cpuinfo library in the thread pool 415*da0073e9SAndroid Build Coastguard Worker # ---[ But it doesn't support s390x/powerpc and thus not used on s390x/powerpc 416*da0073e9SAndroid Build Coastguard Worker if(NOT TARGET cpuinfo AND USE_SYSTEM_CPUINFO) 417*da0073e9SAndroid Build Coastguard Worker add_library(cpuinfo SHARED IMPORTED) 418*da0073e9SAndroid Build Coastguard Worker find_library(CPUINFO_LIBRARY cpuinfo) 419*da0073e9SAndroid Build Coastguard Worker if(NOT CPUINFO_LIBRARY) 420*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Cannot find cpuinfo") 421*da0073e9SAndroid Build Coastguard Worker endif() 422*da0073e9SAndroid Build Coastguard Worker message("Found cpuinfo: ${CPUINFO_LIBRARY}") 423*da0073e9SAndroid Build Coastguard Worker set_target_properties(cpuinfo PROPERTIES IMPORTED_LOCATION "${CPUINFO_LIBRARY}") 424*da0073e9SAndroid Build Coastguard Worker elseif(NOT TARGET cpuinfo) 425*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED CPUINFO_SOURCE_DIR) 426*da0073e9SAndroid Build Coastguard Worker set(CPUINFO_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../third_party/cpuinfo" CACHE STRING "cpuinfo source directory") 427*da0073e9SAndroid Build Coastguard Worker endif() 428*da0073e9SAndroid Build Coastguard Worker 429*da0073e9SAndroid Build Coastguard Worker set(CPUINFO_BUILD_TOOLS OFF CACHE BOOL "") 430*da0073e9SAndroid Build Coastguard Worker set(CPUINFO_BUILD_UNIT_TESTS OFF CACHE BOOL "") 431*da0073e9SAndroid Build Coastguard Worker set(CPUINFO_BUILD_MOCK_TESTS OFF CACHE BOOL "") 432*da0073e9SAndroid Build Coastguard Worker set(CPUINFO_BUILD_BENCHMARKS OFF CACHE BOOL "") 433*da0073e9SAndroid Build Coastguard Worker set(CPUINFO_LIBRARY_TYPE "static" CACHE STRING "") 434*da0073e9SAndroid Build Coastguard Worker set(CPUINFO_LOG_LEVEL "error" CACHE STRING "") 435*da0073e9SAndroid Build Coastguard Worker if(MSVC) 436*da0073e9SAndroid Build Coastguard Worker if(CAFFE2_USE_MSVC_STATIC_RUNTIME) 437*da0073e9SAndroid Build Coastguard Worker set(CPUINFO_RUNTIME_TYPE "static" CACHE STRING "") 438*da0073e9SAndroid Build Coastguard Worker else() 439*da0073e9SAndroid Build Coastguard Worker set(CPUINFO_RUNTIME_TYPE "shared" CACHE STRING "") 440*da0073e9SAndroid Build Coastguard Worker endif() 441*da0073e9SAndroid Build Coastguard Worker endif() 442*da0073e9SAndroid Build Coastguard Worker add_subdirectory( 443*da0073e9SAndroid Build Coastguard Worker "${CPUINFO_SOURCE_DIR}" 444*da0073e9SAndroid Build Coastguard Worker "${CONFU_DEPENDENCIES_BINARY_DIR}/cpuinfo") 445*da0073e9SAndroid Build Coastguard Worker # We build static version of cpuinfo but link 446*da0073e9SAndroid Build Coastguard Worker # them into a shared library for Caffe2, so they need PIC. 447*da0073e9SAndroid Build Coastguard Worker set_property(TARGET cpuinfo PROPERTY POSITION_INDEPENDENT_CODE ON) 448*da0073e9SAndroid Build Coastguard Worker endif() 449*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS cpuinfo) 450*da0073e9SAndroid Build Coastguard Workerendif() 451*da0073e9SAndroid Build Coastguard Worker 452*da0073e9SAndroid Build Coastguard Worker 453*da0073e9SAndroid Build Coastguard Worker# ---[ PYTORCH_QNNPACK 454*da0073e9SAndroid Build Coastguard Workerset(CAFFE2_THIRD_PARTY_ROOT "${PROJECT_SOURCE_DIR}/third_party") 455*da0073e9SAndroid Build Coastguard Workerif(USE_PYTORCH_QNNPACK) 456*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED PYTORCH_QNNPACK_SOURCE_DIR) 457*da0073e9SAndroid Build Coastguard Worker set(PYTORCH_QNNPACK_SOURCE_DIR "${PROJECT_SOURCE_DIR}/aten/src/ATen/native/quantized/cpu/qnnpack" CACHE STRING "QNNPACK source directory") 458*da0073e9SAndroid Build Coastguard Worker endif() 459*da0073e9SAndroid Build Coastguard Worker 460*da0073e9SAndroid Build Coastguard Worker if(NOT TARGET pytorch_qnnpack) 461*da0073e9SAndroid Build Coastguard Worker if(NOT USE_SYSTEM_PTHREADPOOL AND USE_INTERNAL_PTHREADPOOL_IMPL) 462*da0073e9SAndroid Build Coastguard Worker set(PYTORCH_QNNPACK_CUSTOM_THREADPOOL ON CACHE BOOL "") 463*da0073e9SAndroid Build Coastguard Worker endif() 464*da0073e9SAndroid Build Coastguard Worker 465*da0073e9SAndroid Build Coastguard Worker set(PYTORCH_QNNPACK_BUILD_TESTS OFF CACHE BOOL "") 466*da0073e9SAndroid Build Coastguard Worker set(PYTORCH_QNNPACK_BUILD_BENCHMARKS OFF CACHE BOOL "") 467*da0073e9SAndroid Build Coastguard Worker set(PYTORCH_QNNPACK_LIBRARY_TYPE "static" CACHE STRING "") 468*da0073e9SAndroid Build Coastguard Worker add_subdirectory( 469*da0073e9SAndroid Build Coastguard Worker "${PYTORCH_QNNPACK_SOURCE_DIR}" 470*da0073e9SAndroid Build Coastguard Worker "${CONFU_DEPENDENCIES_BINARY_DIR}/pytorch_qnnpack") 471*da0073e9SAndroid Build Coastguard Worker # We build static versions of QNNPACK and pthreadpool but link 472*da0073e9SAndroid Build Coastguard Worker # them into a shared library for Caffe2, so they need PIC. 473*da0073e9SAndroid Build Coastguard Worker set_property(TARGET pytorch_qnnpack PROPERTY POSITION_INDEPENDENT_CODE ON) 474*da0073e9SAndroid Build Coastguard Worker set_property(TARGET cpuinfo PROPERTY POSITION_INDEPENDENT_CODE ON) 475*da0073e9SAndroid Build Coastguard Worker # QNNPACK depends on gemmlowp headers 476*da0073e9SAndroid Build Coastguard Worker target_include_directories(pytorch_qnnpack PRIVATE "${CAFFE2_THIRD_PARTY_ROOT}/gemmlowp") 477*da0073e9SAndroid Build Coastguard Worker 478*da0073e9SAndroid Build Coastguard Worker if(PYTORCH_QNNPACK_CUSTOM_THREADPOOL) 479*da0073e9SAndroid Build Coastguard Worker target_compile_definitions( 480*da0073e9SAndroid Build Coastguard Worker pytorch_qnnpack PRIVATE 481*da0073e9SAndroid Build Coastguard Worker pthreadpool_t=legacy_pthreadpool_t 482*da0073e9SAndroid Build Coastguard Worker pthreadpool_function_1d_t=legacy_pthreadpool_function_1d_t 483*da0073e9SAndroid Build Coastguard Worker pthreadpool_function_1d_tiled_t=legacy_pthreadpool_function_1d_tiled_t 484*da0073e9SAndroid Build Coastguard Worker pthreadpool_function_2d_t=legacy_pthreadpool_function_2d_t 485*da0073e9SAndroid Build Coastguard Worker pthreadpool_function_2d_tiled_t=legacy_pthreadpool_function_2d_tiled_t 486*da0073e9SAndroid Build Coastguard Worker pthreadpool_function_3d_tiled_t=legacy_pthreadpool_function_3d_tiled_t 487*da0073e9SAndroid Build Coastguard Worker pthreadpool_function_4d_tiled_t=legacy_pthreadpool_function_4d_tiled_t 488*da0073e9SAndroid Build Coastguard Worker pthreadpool_create=legacy_pthreadpool_create 489*da0073e9SAndroid Build Coastguard Worker pthreadpool_destroy=legacy_pthreadpool_destroy 490*da0073e9SAndroid Build Coastguard Worker pthreadpool_get_threads_count=legacy_pthreadpool_get_threads_count 491*da0073e9SAndroid Build Coastguard Worker pthreadpool_compute_1d=legacy_pthreadpool_compute_1d 492*da0073e9SAndroid Build Coastguard Worker pthreadpool_parallelize_1d=legacy_pthreadpool_parallelize_1d 493*da0073e9SAndroid Build Coastguard Worker pthreadpool_compute_1d_tiled=legacy_pthreadpool_compute_1d_tiled 494*da0073e9SAndroid Build Coastguard Worker pthreadpool_compute_2d=legacy_pthreadpool_compute_2d 495*da0073e9SAndroid Build Coastguard Worker pthreadpool_compute_2d_tiled=legacy_pthreadpool_compute_2d_tiled 496*da0073e9SAndroid Build Coastguard Worker pthreadpool_compute_3d_tiled=legacy_pthreadpool_compute_3d_tiled 497*da0073e9SAndroid Build Coastguard Worker pthreadpool_compute_4d_tiled=legacy_pthreadpool_compute_4d_tiled) 498*da0073e9SAndroid Build Coastguard Worker endif() 499*da0073e9SAndroid Build Coastguard Worker endif() 500*da0073e9SAndroid Build Coastguard Worker 501*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS pytorch_qnnpack) 502*da0073e9SAndroid Build Coastguard Workerendif() 503*da0073e9SAndroid Build Coastguard Worker 504*da0073e9SAndroid Build Coastguard Worker# ---[ NNPACK 505*da0073e9SAndroid Build Coastguard Workerif(USE_NNPACK) 506*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/External/nnpack.cmake) 507*da0073e9SAndroid Build Coastguard Worker if(NNPACK_FOUND) 508*da0073e9SAndroid Build Coastguard Worker if(TARGET nnpack) 509*da0073e9SAndroid Build Coastguard Worker # ---[ NNPACK is being built together with Caffe2: explicitly specify dependency 510*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS nnpack) 511*da0073e9SAndroid Build Coastguard Worker else() 512*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${NNPACK_INCLUDE_DIRS}) 513*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS ${NNPACK_LIBRARIES}) 514*da0073e9SAndroid Build Coastguard Worker endif() 515*da0073e9SAndroid Build Coastguard Worker else() 516*da0073e9SAndroid Build Coastguard Worker message(WARNING "Not compiling with NNPACK. Suppress this warning with -DUSE_NNPACK=OFF") 517*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NNPACK OFF) 518*da0073e9SAndroid Build Coastguard Worker endif() 519*da0073e9SAndroid Build Coastguard Workerendif() 520*da0073e9SAndroid Build Coastguard Worker 521*da0073e9SAndroid Build Coastguard Worker# ---[ XNNPACK 522*da0073e9SAndroid Build Coastguard Workerif(USE_XNNPACK AND NOT USE_SYSTEM_XNNPACK) 523*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED XNNPACK_SOURCE_DIR) 524*da0073e9SAndroid Build Coastguard Worker set(XNNPACK_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/XNNPACK" CACHE STRING "XNNPACK source directory") 525*da0073e9SAndroid Build Coastguard Worker endif() 526*da0073e9SAndroid Build Coastguard Worker 527*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED XNNPACK_INCLUDE_DIR) 528*da0073e9SAndroid Build Coastguard Worker set(XNNPACK_INCLUDE_DIR "${XNNPACK_SOURCE_DIR}/include" CACHE STRING "XNNPACK include directory") 529*da0073e9SAndroid Build Coastguard Worker endif() 530*da0073e9SAndroid Build Coastguard Worker 531*da0073e9SAndroid Build Coastguard Worker if(NOT TARGET XNNPACK) 532*da0073e9SAndroid Build Coastguard Worker set(XNNPACK_LIBRARY_TYPE "static" CACHE STRING "") 533*da0073e9SAndroid Build Coastguard Worker set(XNNPACK_BUILD_BENCHMARKS OFF CACHE BOOL "") 534*da0073e9SAndroid Build Coastguard Worker set(XNNPACK_BUILD_TESTS OFF CACHE BOOL "") 535*da0073e9SAndroid Build Coastguard Worker 536*da0073e9SAndroid Build Coastguard Worker # Disable ARM BF16 and FP16 vector for now; unused and causes build failures because 537*da0073e9SAndroid Build Coastguard Worker # these new ISA features may not be supported on older compilers 538*da0073e9SAndroid Build Coastguard Worker set(XNNPACK_ENABLE_ARM_BF16 OFF CACHE BOOL "") 539*da0073e9SAndroid Build Coastguard Worker 540*da0073e9SAndroid Build Coastguard Worker # Disable AVXVNNI for now, older clang versions seem not to support it 541*da0073e9SAndroid Build Coastguard Worker # (clang 12 is where avx-vnni support is added) 542*da0073e9SAndroid Build Coastguard Worker set(XNNPACK_ENABLE_AVXVNNI OFF CACHE BOOL "") 543*da0073e9SAndroid Build Coastguard Worker 544*da0073e9SAndroid Build Coastguard Worker # Disable I8MM For CI since clang 9 does not support neon i8mm. 545*da0073e9SAndroid Build Coastguard Worker set(XNNPACK_ENABLE_ARM_I8MM OFF CACHE BOOL "") 546*da0073e9SAndroid Build Coastguard Worker 547*da0073e9SAndroid Build Coastguard Worker # Conditionally disable AVX512AMX, as it requires Clang 11 or later. Note that 548*da0073e9SAndroid Build Coastguard Worker # XNNPACK does conditionally compile this based on GCC version. Once it also does 549*da0073e9SAndroid Build Coastguard Worker # so based on Clang version, this logic can be removed. 550*da0073e9SAndroid Build Coastguard Worker IF(CMAKE_C_COMPILER_ID STREQUAL "Clang") 551*da0073e9SAndroid Build Coastguard Worker IF(CMAKE_C_COMPILER_VERSION VERSION_LESS "11") 552*da0073e9SAndroid Build Coastguard Worker set(XNNPACK_ENABLE_AVX512AMX OFF CACHE BOOL "") 553*da0073e9SAndroid Build Coastguard Worker ENDIF() 554*da0073e9SAndroid Build Coastguard Worker ENDIF() 555*da0073e9SAndroid Build Coastguard Worker 556*da0073e9SAndroid Build Coastguard Worker # Setting this global PIC flag for all XNNPACK targets. 557*da0073e9SAndroid Build Coastguard Worker # This is needed for Object libraries within XNNPACK which must 558*da0073e9SAndroid Build Coastguard Worker # be PIC to successfully link this static libXNNPACK with pytorch 559*da0073e9SAndroid Build Coastguard Worker set(__caffe2_CMAKE_POSITION_INDEPENDENT_CODE_FLAG ${CMAKE_POSITION_INDEPENDENT_CODE}) 560*da0073e9SAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE ON) 561*da0073e9SAndroid Build Coastguard Worker 562*da0073e9SAndroid Build Coastguard Worker add_subdirectory( 563*da0073e9SAndroid Build Coastguard Worker "${XNNPACK_SOURCE_DIR}" 564*da0073e9SAndroid Build Coastguard Worker "${CONFU_DEPENDENCIES_BINARY_DIR}/XNNPACK") 565*da0073e9SAndroid Build Coastguard Worker 566*da0073e9SAndroid Build Coastguard Worker # Revert to whatever it was before 567*da0073e9SAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE ${__caffe2_CMAKE_POSITION_INDEPENDENT_CODE_FLAG}) 568*da0073e9SAndroid Build Coastguard Worker endif() 569*da0073e9SAndroid Build Coastguard Worker 570*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${XNNPACK_INCLUDE_DIR}) 571*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS XNNPACK) 572*da0073e9SAndroid Build Coastguard Workerelseif(NOT TARGET XNNPACK AND USE_SYSTEM_XNNPACK) 573*da0073e9SAndroid Build Coastguard Worker add_library(XNNPACK SHARED IMPORTED) 574*da0073e9SAndroid Build Coastguard Worker find_library(XNNPACK_LIBRARY XNNPACK) 575*da0073e9SAndroid Build Coastguard Worker set_property(TARGET XNNPACK PROPERTY IMPORTED_LOCATION "${XNNPACK_LIBRARY}") 576*da0073e9SAndroid Build Coastguard Worker if(NOT XNNPACK_LIBRARY) 577*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Cannot find XNNPACK") 578*da0073e9SAndroid Build Coastguard Worker endif() 579*da0073e9SAndroid Build Coastguard Worker message("-- Found XNNPACK: ${XNNPACK_LIBRARY}") 580*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS XNNPACK) 581*da0073e9SAndroid Build Coastguard Workerendif() 582*da0073e9SAndroid Build Coastguard Worker 583*da0073e9SAndroid Build Coastguard Worker# ---[ Vulkan deps 584*da0073e9SAndroid Build Coastguard Workerif(USE_VULKAN) 585*da0073e9SAndroid Build Coastguard Worker set(Vulkan_DEFINES) 586*da0073e9SAndroid Build Coastguard Worker set(Vulkan_INCLUDES) 587*da0073e9SAndroid Build Coastguard Worker set(Vulkan_LIBS) 588*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/VulkanDependencies.cmake) 589*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS ${Vulkan_DEFINES}) 590*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${Vulkan_INCLUDES}) 591*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS ${Vulkan_LIBS}) 592*da0073e9SAndroid Build Coastguard Workerendif() 593*da0073e9SAndroid Build Coastguard Worker 594*da0073e9SAndroid Build Coastguard Worker# ---[ gflags 595*da0073e9SAndroid Build Coastguard Workerif(USE_GFLAGS) 596*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/public/gflags.cmake) 597*da0073e9SAndroid Build Coastguard Worker if(NOT TARGET gflags) 598*da0073e9SAndroid Build Coastguard Worker message(WARNING 599*da0073e9SAndroid Build Coastguard Worker "gflags is not found. Caffe2 will build without gflags support but " 600*da0073e9SAndroid Build Coastguard Worker "it is strongly recommended that you install gflags. Suppress this " 601*da0073e9SAndroid Build Coastguard Worker "warning with -DUSE_GFLAGS=OFF") 602*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_GFLAGS OFF) 603*da0073e9SAndroid Build Coastguard Worker endif() 604*da0073e9SAndroid Build Coastguard Workerendif() 605*da0073e9SAndroid Build Coastguard Worker 606*da0073e9SAndroid Build Coastguard Worker# ---[ Google-glog 607*da0073e9SAndroid Build Coastguard Workerif(USE_GLOG) 608*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/public/glog.cmake) 609*da0073e9SAndroid Build Coastguard Worker if(TARGET glog::glog) 610*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_USE_GOOGLE_GLOG 1) 611*da0073e9SAndroid Build Coastguard Worker else() 612*da0073e9SAndroid Build Coastguard Worker message(WARNING 613*da0073e9SAndroid Build Coastguard Worker "glog is not found. Caffe2 will build without glog support but it is " 614*da0073e9SAndroid Build Coastguard Worker "strongly recommended that you install glog. Suppress this warning " 615*da0073e9SAndroid Build Coastguard Worker "with -DUSE_GLOG=OFF") 616*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_GLOG OFF) 617*da0073e9SAndroid Build Coastguard Worker endif() 618*da0073e9SAndroid Build Coastguard Workerendif() 619*da0073e9SAndroid Build Coastguard Worker 620*da0073e9SAndroid Build Coastguard Worker 621*da0073e9SAndroid Build Coastguard Worker# ---[ Googletest and benchmark 622*da0073e9SAndroid Build Coastguard Workerif(BUILD_TEST OR BUILD_MOBILE_BENCHMARK OR BUILD_MOBILE_TEST) 623*da0073e9SAndroid Build Coastguard Worker # Preserve build options. 624*da0073e9SAndroid Build Coastguard Worker set(TEMP_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) 625*da0073e9SAndroid Build Coastguard Worker 626*da0073e9SAndroid Build Coastguard Worker # We will build gtest as static libs and embed it directly into the binary. 627*da0073e9SAndroid Build Coastguard Worker set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libs" FORCE) 628*da0073e9SAndroid Build Coastguard Worker 629*da0073e9SAndroid Build Coastguard Worker # For gtest, we will simply embed it into our test binaries, so we won't 630*da0073e9SAndroid Build Coastguard Worker # need to install it. 631*da0073e9SAndroid Build Coastguard Worker set(INSTALL_GTEST OFF CACHE BOOL "Install gtest." FORCE) 632*da0073e9SAndroid Build Coastguard Worker set(BUILD_GMOCK ON CACHE BOOL "Build gmock." FORCE) 633*da0073e9SAndroid Build Coastguard Worker # For Windows, we will check the runtime used is correctly passed in. 634*da0073e9SAndroid Build Coastguard Worker if(NOT CAFFE2_USE_MSVC_STATIC_RUNTIME) 635*da0073e9SAndroid Build Coastguard Worker set(gtest_force_shared_crt ON CACHE BOOL "force shared crt on gtest" FORCE) 636*da0073e9SAndroid Build Coastguard Worker endif() 637*da0073e9SAndroid Build Coastguard Worker # We need to replace googletest cmake scripts too. 638*da0073e9SAndroid Build Coastguard Worker # Otherwise, it will sometimes break the build. 639*da0073e9SAndroid Build Coastguard Worker # To make the git clean after the build, we make a backup first. 640*da0073e9SAndroid Build Coastguard Worker if((MSVC AND MSVC_Z7_OVERRIDE) OR USE_CUDA) 641*da0073e9SAndroid Build Coastguard Worker execute_process( 642*da0073e9SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} 643*da0073e9SAndroid Build Coastguard Worker "-DFILENAME=${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest/googletest/cmake/internal_utils.cmake" 644*da0073e9SAndroid Build Coastguard Worker "-DBACKUP=${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest/googletest/cmake/internal_utils.cmake.bak" 645*da0073e9SAndroid Build Coastguard Worker "-DREVERT=0" 646*da0073e9SAndroid Build Coastguard Worker "-P" 647*da0073e9SAndroid Build Coastguard Worker "${CMAKE_CURRENT_LIST_DIR}/GoogleTestPatch.cmake" 648*da0073e9SAndroid Build Coastguard Worker RESULT_VARIABLE _exitcode) 649*da0073e9SAndroid Build Coastguard Worker if(NOT _exitcode EQUAL 0) 650*da0073e9SAndroid Build Coastguard Worker message(WARNING "Patching failed for Google Test. The build may fail.") 651*da0073e9SAndroid Build Coastguard Worker endif() 652*da0073e9SAndroid Build Coastguard Worker endif() 653*da0073e9SAndroid Build Coastguard Worker 654*da0073e9SAndroid Build Coastguard Worker # Add googletest subdirectory but make sure our INCLUDE_DIRECTORIES 655*da0073e9SAndroid Build Coastguard Worker # don't bleed into it. This is because libraries installed into the root conda 656*da0073e9SAndroid Build Coastguard Worker # env (e.g. MKL) add a global /opt/conda/include directory, and if there's 657*da0073e9SAndroid Build Coastguard Worker # gtest installed in conda, the third_party/googletest/**.cc source files 658*da0073e9SAndroid Build Coastguard Worker # would try to include headers from /opt/conda/include/gtest/**.h instead of 659*da0073e9SAndroid Build Coastguard Worker # its own. Once we have proper target-based include directories, 660*da0073e9SAndroid Build Coastguard Worker # this shouldn't be necessary anymore. 661*da0073e9SAndroid Build Coastguard Worker get_property(INC_DIR_temp DIRECTORY PROPERTY INCLUDE_DIRECTORIES) 662*da0073e9SAndroid Build Coastguard Worker set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES "") 663*da0073e9SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest) 664*da0073e9SAndroid Build Coastguard Worker set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES ${INC_DIR_temp}) 665*da0073e9SAndroid Build Coastguard Worker 666*da0073e9SAndroid Build Coastguard Worker include_directories(BEFORE SYSTEM ${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest/googletest/include) 667*da0073e9SAndroid Build Coastguard Worker include_directories(BEFORE SYSTEM ${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest/googlemock/include) 668*da0073e9SAndroid Build Coastguard Worker 669*da0073e9SAndroid Build Coastguard Worker # We will not need to test benchmark lib itself. 670*da0073e9SAndroid Build Coastguard Worker set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "Disable benchmark testing as we don't need it.") 671*da0073e9SAndroid Build Coastguard Worker # We will not need to install benchmark since we link it statically. 672*da0073e9SAndroid Build Coastguard Worker set(BENCHMARK_ENABLE_INSTALL OFF CACHE BOOL "Disable benchmark install to avoid overwriting vendor install.") 673*da0073e9SAndroid Build Coastguard Worker if(NOT USE_SYSTEM_BENCHMARK) 674*da0073e9SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/benchmark) 675*da0073e9SAndroid Build Coastguard Worker else() 676*da0073e9SAndroid Build Coastguard Worker add_library(benchmark SHARED IMPORTED) 677*da0073e9SAndroid Build Coastguard Worker find_library(BENCHMARK_LIBRARY benchmark) 678*da0073e9SAndroid Build Coastguard Worker if(NOT BENCHMARK_LIBRARY) 679*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Cannot find google benchmark library") 680*da0073e9SAndroid Build Coastguard Worker endif() 681*da0073e9SAndroid Build Coastguard Worker message("-- Found benchmark: ${BENCHMARK_LIBRARY}") 682*da0073e9SAndroid Build Coastguard Worker set_property(TARGET benchmark PROPERTY IMPORTED_LOCATION ${BENCHMARK_LIBRARY}) 683*da0073e9SAndroid Build Coastguard Worker endif() 684*da0073e9SAndroid Build Coastguard Worker include_directories(${CMAKE_CURRENT_LIST_DIR}/../third_party/benchmark/include) 685*da0073e9SAndroid Build Coastguard Worker 686*da0073e9SAndroid Build Coastguard Worker # Recover build options. 687*da0073e9SAndroid Build Coastguard Worker set(BUILD_SHARED_LIBS ${TEMP_BUILD_SHARED_LIBS} CACHE BOOL "Build shared libs" FORCE) 688*da0073e9SAndroid Build Coastguard Worker 689*da0073e9SAndroid Build Coastguard Worker # To make the git clean after the build, we revert the changes here. 690*da0073e9SAndroid Build Coastguard Worker if(MSVC AND MSVC_Z7_OVERRIDE) 691*da0073e9SAndroid Build Coastguard Worker execute_process( 692*da0073e9SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} 693*da0073e9SAndroid Build Coastguard Worker "-DFILENAME=${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest/googletest/cmake/internal_utils.cmake" 694*da0073e9SAndroid Build Coastguard Worker "-DBACKUP=${CMAKE_CURRENT_LIST_DIR}/../third_party/googletest/googletest/cmake/internal_utils.cmake.bak" 695*da0073e9SAndroid Build Coastguard Worker "-DREVERT=1" 696*da0073e9SAndroid Build Coastguard Worker "-P" 697*da0073e9SAndroid Build Coastguard Worker "${CMAKE_CURRENT_LIST_DIR}/GoogleTestPatch.cmake" 698*da0073e9SAndroid Build Coastguard Worker RESULT_VARIABLE _exitcode) 699*da0073e9SAndroid Build Coastguard Worker if(NOT _exitcode EQUAL 0) 700*da0073e9SAndroid Build Coastguard Worker message(WARNING "Reverting changes failed for Google Test. The build may fail.") 701*da0073e9SAndroid Build Coastguard Worker endif() 702*da0073e9SAndroid Build Coastguard Worker endif() 703*da0073e9SAndroid Build Coastguard Worker 704*da0073e9SAndroid Build Coastguard Worker # Cacheing variables to enable incremental build. 705*da0073e9SAndroid Build Coastguard Worker # Without this is cross compiling we end up having to blow build directory 706*da0073e9SAndroid Build Coastguard Worker # and rebuild from scratch. 707*da0073e9SAndroid Build Coastguard Worker if(CMAKE_CROSSCOMPILING) 708*da0073e9SAndroid Build Coastguard Worker if(COMPILE_HAVE_STD_REGEX) 709*da0073e9SAndroid Build Coastguard Worker set(RUN_HAVE_STD_REGEX 0 CACHE INTERNAL "Cache RUN_HAVE_STD_REGEX output for cross-compile.") 710*da0073e9SAndroid Build Coastguard Worker endif() 711*da0073e9SAndroid Build Coastguard Worker endif() 712*da0073e9SAndroid Build Coastguard Workerendif() 713*da0073e9SAndroid Build Coastguard Worker 714*da0073e9SAndroid Build Coastguard Worker# ---[ FBGEMM 715*da0073e9SAndroid Build Coastguard Workerif(USE_FBGEMM) 716*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_THIRD_PARTY_ROOT "${PROJECT_SOURCE_DIR}/third_party") 717*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED FBGEMM_SOURCE_DIR) 718*da0073e9SAndroid Build Coastguard Worker set(FBGEMM_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/fbgemm" CACHE STRING "FBGEMM source directory") 719*da0073e9SAndroid Build Coastguard Worker endif() 720*da0073e9SAndroid Build Coastguard Worker if(NOT CAFFE2_COMPILER_SUPPORTS_AVX512_EXTENSIONS) 721*da0073e9SAndroid Build Coastguard Worker message(WARNING 722*da0073e9SAndroid Build Coastguard Worker "A compiler with AVX512 support is required for FBGEMM. " 723*da0073e9SAndroid Build Coastguard Worker "Not compiling with FBGEMM. " 724*da0073e9SAndroid Build Coastguard Worker "Turn this warning off by USE_FBGEMM=OFF.") 725*da0073e9SAndroid Build Coastguard Worker set(USE_FBGEMM OFF) 726*da0073e9SAndroid Build Coastguard Worker endif() 727*da0073e9SAndroid Build Coastguard Worker if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) 728*da0073e9SAndroid Build Coastguard Worker message(WARNING 729*da0073e9SAndroid Build Coastguard Worker "x64 operating system is required for FBGEMM. " 730*da0073e9SAndroid Build Coastguard Worker "Not compiling with FBGEMM. " 731*da0073e9SAndroid Build Coastguard Worker "Turn this warning off by USE_FBGEMM=OFF.") 732*da0073e9SAndroid Build Coastguard Worker set(USE_FBGEMM OFF) 733*da0073e9SAndroid Build Coastguard Worker endif() 734*da0073e9SAndroid Build Coastguard Worker if(USE_FBGEMM AND NOT TARGET fbgemm) 735*da0073e9SAndroid Build Coastguard Worker set(FBGEMM_BUILD_TESTS OFF CACHE BOOL "") 736*da0073e9SAndroid Build Coastguard Worker set(FBGEMM_BUILD_BENCHMARKS OFF CACHE BOOL "") 737*da0073e9SAndroid Build Coastguard Worker if(MSVC AND BUILD_SHARED_LIBS) 738*da0073e9SAndroid Build Coastguard Worker set(FBGEMM_LIBRARY_TYPE "shared" CACHE STRING "") 739*da0073e9SAndroid Build Coastguard Worker else() 740*da0073e9SAndroid Build Coastguard Worker set(FBGEMM_LIBRARY_TYPE "static" CACHE STRING "") 741*da0073e9SAndroid Build Coastguard Worker endif() 742*da0073e9SAndroid Build Coastguard Worker if(USE_ASAN) 743*da0073e9SAndroid Build Coastguard Worker set(USE_SANITIZER "address,undefined" CACHE STRING "-fsanitize options for FBGEMM") 744*da0073e9SAndroid Build Coastguard Worker endif() 745*da0073e9SAndroid Build Coastguard Worker add_subdirectory("${FBGEMM_SOURCE_DIR}") 746*da0073e9SAndroid Build Coastguard Worker set_property(TARGET fbgemm_generic PROPERTY POSITION_INDEPENDENT_CODE ON) 747*da0073e9SAndroid Build Coastguard Worker set_property(TARGET fbgemm_avx2 PROPERTY POSITION_INDEPENDENT_CODE ON) 748*da0073e9SAndroid Build Coastguard Worker set_property(TARGET fbgemm_avx512 PROPERTY POSITION_INDEPENDENT_CODE ON) 749*da0073e9SAndroid Build Coastguard Worker set_property(TARGET fbgemm PROPERTY POSITION_INDEPENDENT_CODE ON) 750*da0073e9SAndroid Build Coastguard Worker if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 13.0.0) 751*da0073e9SAndroid Build Coastguard Worker # See https://github.com/pytorch/pytorch/issues/74352 752*da0073e9SAndroid Build Coastguard Worker target_compile_options_if_supported(asmjit -Wno-deprecated-copy) 753*da0073e9SAndroid Build Coastguard Worker target_compile_options_if_supported(asmjit -Wno-unused-but-set-variable) 754*da0073e9SAndroid Build Coastguard Worker endif() 755*da0073e9SAndroid Build Coastguard Worker endif() 756*da0073e9SAndroid Build Coastguard Worker 757*da0073e9SAndroid Build Coastguard Worker if(USE_FBGEMM) 758*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS fbgemm) 759*da0073e9SAndroid Build Coastguard Worker endif() 760*da0073e9SAndroid Build Coastguard Workerendif() 761*da0073e9SAndroid Build Coastguard Worker 762*da0073e9SAndroid Build Coastguard Workerif(USE_FBGEMM) 763*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_FBGEMM ON) 764*da0073e9SAndroid Build Coastguard Workerelse() 765*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_FBGEMM OFF) 766*da0073e9SAndroid Build Coastguard Worker message(WARNING 767*da0073e9SAndroid Build Coastguard Worker "Turning USE_FAKELOWP off as it depends on USE_FBGEMM.") 768*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_FAKELOWP OFF) 769*da0073e9SAndroid Build Coastguard Workerendif() 770*da0073e9SAndroid Build Coastguard Worker 771*da0073e9SAndroid Build Coastguard Workerif(USE_OPENCL) 772*da0073e9SAndroid Build Coastguard Worker message(INFO "USING OPENCL") 773*da0073e9SAndroid Build Coastguard Worker find_package(OpenCL REQUIRED) 774*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${OpenCL_INCLUDE_DIRS}) 775*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS ${OpenCL_LIBRARIES}) 776*da0073e9SAndroid Build Coastguard Workerendif() 777*da0073e9SAndroid Build Coastguard Worker 778*da0073e9SAndroid Build Coastguard Worker# ---[ NUMA 779*da0073e9SAndroid Build Coastguard Workerif(USE_NUMA) 780*da0073e9SAndroid Build Coastguard Worker if(LINUX) 781*da0073e9SAndroid Build Coastguard Worker find_package(Numa) 782*da0073e9SAndroid Build Coastguard Worker if(NOT NUMA_FOUND) 783*da0073e9SAndroid Build Coastguard Worker message(WARNING "Not compiling with NUMA. Suppress this warning with -DUSE_NUMA=OFF") 784*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NUMA OFF) 785*da0073e9SAndroid Build Coastguard Worker endif() 786*da0073e9SAndroid Build Coastguard Worker else() 787*da0073e9SAndroid Build Coastguard Worker message(WARNING "NUMA is currently only supported under Linux.") 788*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NUMA OFF) 789*da0073e9SAndroid Build Coastguard Worker endif() 790*da0073e9SAndroid Build Coastguard Workerendif() 791*da0073e9SAndroid Build Coastguard Worker 792*da0073e9SAndroid Build Coastguard Workerif(USE_ITT) 793*da0073e9SAndroid Build Coastguard Worker find_package(ITT) 794*da0073e9SAndroid Build Coastguard Worker if(ITT_FOUND) 795*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${ITT_INCLUDE_DIR}) 796*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS ${ITT_LIBRARIES}) 797*da0073e9SAndroid Build Coastguard Worker list(APPEND TORCH_PYTHON_LINK_LIBRARIES ${ITT_LIBRARIES}) 798*da0073e9SAndroid Build Coastguard Worker else() 799*da0073e9SAndroid Build Coastguard Worker message(WARNING "Not compiling with ITT. Suppress this warning with -DUSE_ITT=OFF") 800*da0073e9SAndroid Build Coastguard Worker set(USE_ITT OFF CACHE BOOL "" FORCE) 801*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_ITT OFF) 802*da0073e9SAndroid Build Coastguard Worker endif() 803*da0073e9SAndroid Build Coastguard Workerendif() 804*da0073e9SAndroid Build Coastguard Worker 805*da0073e9SAndroid Build Coastguard Worker# ---[ Caffe2 depends on FP16 library for half-precision conversions 806*da0073e9SAndroid Build Coastguard Workerif(NOT TARGET fp16 AND NOT USE_SYSTEM_FP16) 807*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_THIRD_PARTY_ROOT "${PROJECT_SOURCE_DIR}/third_party") 808*da0073e9SAndroid Build Coastguard Worker # PSIMD is required by FP16 809*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED PSIMD_SOURCE_DIR) 810*da0073e9SAndroid Build Coastguard Worker set(PSIMD_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/psimd" CACHE STRING "PSimd source directory") 811*da0073e9SAndroid Build Coastguard Worker endif() 812*da0073e9SAndroid Build Coastguard Worker if(NOT DEFINED FP16_SOURCE_DIR) 813*da0073e9SAndroid Build Coastguard Worker set(FP16_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/FP16" CACHE STRING "FP16 source directory") 814*da0073e9SAndroid Build Coastguard Worker endif() 815*da0073e9SAndroid Build Coastguard Worker 816*da0073e9SAndroid Build Coastguard Worker set(FP16_BUILD_TESTS OFF CACHE BOOL "") 817*da0073e9SAndroid Build Coastguard Worker set(FP16_BUILD_BENCHMARKS OFF CACHE BOOL "") 818*da0073e9SAndroid Build Coastguard Worker add_subdirectory( 819*da0073e9SAndroid Build Coastguard Worker "${FP16_SOURCE_DIR}" 820*da0073e9SAndroid Build Coastguard Worker "${CONFU_DEPENDENCIES_BINARY_DIR}/FP16") 821*da0073e9SAndroid Build Coastguard Workerelseif(NOT TARGET fp16 AND USE_SYSTEM_FP16) 822*da0073e9SAndroid Build Coastguard Worker add_library(fp16 STATIC "/usr/include/fp16.h") 823*da0073e9SAndroid Build Coastguard Worker set_target_properties(fp16 PROPERTIES LINKER_LANGUAGE C) 824*da0073e9SAndroid Build Coastguard Workerendif() 825*da0073e9SAndroid Build Coastguard Workerlist(APPEND Caffe2_DEPENDENCY_LIBS fp16) 826*da0073e9SAndroid Build Coastguard Worker 827*da0073e9SAndroid Build Coastguard Worker# ---[ EIGEN 828*da0073e9SAndroid Build Coastguard Worker# Due to license considerations, we will only use the MPL2 parts of Eigen. 829*da0073e9SAndroid Build Coastguard Workerset(EIGEN_MPL2_ONLY 1) 830*da0073e9SAndroid Build Coastguard Workerif(USE_SYSTEM_EIGEN_INSTALL) 831*da0073e9SAndroid Build Coastguard Worker find_package(Eigen3) 832*da0073e9SAndroid Build Coastguard Worker if(EIGEN3_FOUND) 833*da0073e9SAndroid Build Coastguard Worker message(STATUS "Found system Eigen at " ${EIGEN3_INCLUDE_DIR}) 834*da0073e9SAndroid Build Coastguard Worker else() 835*da0073e9SAndroid Build Coastguard Worker message(STATUS "Did not find system Eigen. Using third party subdirectory.") 836*da0073e9SAndroid Build Coastguard Worker set(EIGEN3_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/../third_party/eigen) 837*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_SYSTEM_EIGEN_INSTALL OFF) 838*da0073e9SAndroid Build Coastguard Worker endif() 839*da0073e9SAndroid Build Coastguard Workerelse() 840*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using third party subdirectory Eigen.") 841*da0073e9SAndroid Build Coastguard Worker set(EIGEN3_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/../third_party/eigen) 842*da0073e9SAndroid Build Coastguard Workerendif() 843*da0073e9SAndroid Build Coastguard Workerinclude_directories(SYSTEM ${EIGEN3_INCLUDE_DIR}) 844*da0073e9SAndroid Build Coastguard Worker 845*da0073e9SAndroid Build Coastguard Worker 846*da0073e9SAndroid Build Coastguard Worker# ---[ Python Interpreter 847*da0073e9SAndroid Build Coastguard Worker# If not given a Python installation, then use the current active Python 848*da0073e9SAndroid Build Coastguard Workerif(NOT Python_EXECUTABLE) 849*da0073e9SAndroid Build Coastguard Worker execute_process( 850*da0073e9SAndroid Build Coastguard Worker COMMAND "which" "python3" RESULT_VARIABLE _exitcode OUTPUT_VARIABLE _py_exe) 851*da0073e9SAndroid Build Coastguard Worker if(${_exitcode} EQUAL 0) 852*da0073e9SAndroid Build Coastguard Worker if(NOT MSVC) 853*da0073e9SAndroid Build Coastguard Worker string(STRIP ${_py_exe} Python_EXECUTABLE) 854*da0073e9SAndroid Build Coastguard Worker endif() 855*da0073e9SAndroid Build Coastguard Worker message(STATUS "Setting Python to ${Python_EXECUTABLE}") 856*da0073e9SAndroid Build Coastguard Worker endif() 857*da0073e9SAndroid Build Coastguard Workerendif() 858*da0073e9SAndroid Build Coastguard Worker 859*da0073e9SAndroid Build Coastguard Workerif(BUILD_PYTHON) 860*da0073e9SAndroid Build Coastguard Worker set(PYTHON_COMPONENTS Development.Module) 861*da0073e9SAndroid Build Coastguard Worker if(USE_NUMPY) 862*da0073e9SAndroid Build Coastguard Worker list(APPEND PYTHON_COMPONENTS NumPy) 863*da0073e9SAndroid Build Coastguard Worker endif() 864*da0073e9SAndroid Build Coastguard Worker find_package(Python COMPONENTS Interpreter OPTIONAL_COMPONENTS ${PYTHON_COMPONENTS}) 865*da0073e9SAndroid Build Coastguard Workerelse() 866*da0073e9SAndroid Build Coastguard Worker find_package(Python COMPONENTS Interpreter) 867*da0073e9SAndroid Build Coastguard Workerendif() 868*da0073e9SAndroid Build Coastguard Worker 869*da0073e9SAndroid Build Coastguard Workerif(NOT Python_Interpreter_FOUND) 870*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Python3 could not be found.") 871*da0073e9SAndroid Build Coastguard Workerendif() 872*da0073e9SAndroid Build Coastguard Worker 873*da0073e9SAndroid Build Coastguard Workerif(${Python_VERSION} VERSION_LESS 3.8) 874*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR 875*da0073e9SAndroid Build Coastguard Worker "Found Python libraries version ${Python_VERSION}. Python < 3.8 is no longer supported by PyTorch.") 876*da0073e9SAndroid Build Coastguard Workerendif() 877*da0073e9SAndroid Build Coastguard Worker 878*da0073e9SAndroid Build Coastguard Worker# ---[ Python + Numpy 879*da0073e9SAndroid Build Coastguard Workerif(BUILD_PYTHON) 880*da0073e9SAndroid Build Coastguard Worker if(Python_Development.Module_FOUND) 881*da0073e9SAndroid Build Coastguard Worker if(USE_NUMPY) 882*da0073e9SAndroid Build Coastguard Worker if(NOT Python_NumPy_FOUND) 883*da0073e9SAndroid Build Coastguard Worker message(WARNING "NumPy could not be found. Not building with NumPy. Suppress this warning with -DUSE_NUMPY=OFF") 884*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NUMPY OFF) 885*da0073e9SAndroid Build Coastguard Worker else() 886*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NUMPY ON) 887*da0073e9SAndroid Build Coastguard Worker endif() 888*da0073e9SAndroid Build Coastguard Worker endif() 889*da0073e9SAndroid Build Coastguard Worker # Observers are required in the python build 890*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_OBSERVERS ON) 891*da0073e9SAndroid Build Coastguard Worker else() 892*da0073e9SAndroid Build Coastguard Worker message(WARNING "Python dependencies not met. Not compiling with python. Suppress this warning with -DBUILD_PYTHON=OFF") 893*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(BUILD_PYTHON OFF) 894*da0073e9SAndroid Build Coastguard Worker endif() 895*da0073e9SAndroid Build Coastguard Workerendif() 896*da0073e9SAndroid Build Coastguard Worker 897*da0073e9SAndroid Build Coastguard Worker# ---[ pybind11 898*da0073e9SAndroid Build Coastguard Workerif(USE_SYSTEM_PYBIND11) 899*da0073e9SAndroid Build Coastguard Worker find_package(pybind11 CONFIG) 900*da0073e9SAndroid Build Coastguard Worker if(NOT pybind11_FOUND) 901*da0073e9SAndroid Build Coastguard Worker find_package(pybind11) 902*da0073e9SAndroid Build Coastguard Worker endif() 903*da0073e9SAndroid Build Coastguard Worker if(NOT pybind11_FOUND) 904*da0073e9SAndroid Build Coastguard Worker message(FATAL "Cannot find system pybind11") 905*da0073e9SAndroid Build Coastguard Worker endif() 906*da0073e9SAndroid Build Coastguard Workerelse() 907*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using third_party/pybind11.") 908*da0073e9SAndroid Build Coastguard Worker set(pybind11_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/../third_party/pybind11/include) 909*da0073e9SAndroid Build Coastguard Worker install(DIRECTORY ${pybind11_INCLUDE_DIRS} 910*da0073e9SAndroid Build Coastguard Worker DESTINATION ${CMAKE_INSTALL_PREFIX} 911*da0073e9SAndroid Build Coastguard Worker FILES_MATCHING PATTERN "*.h") 912*da0073e9SAndroid Build Coastguard Workerendif() 913*da0073e9SAndroid Build Coastguard Workermessage(STATUS "pybind11 include dirs: " "${pybind11_INCLUDE_DIRS}") 914*da0073e9SAndroid Build Coastguard Workeradd_library(pybind::pybind11 INTERFACE IMPORTED) 915*da0073e9SAndroid Build Coastguard Workertarget_include_directories(pybind::pybind11 SYSTEM INTERFACE ${pybind11_INCLUDE_DIRS}) 916*da0073e9SAndroid Build Coastguard Workertarget_link_libraries(pybind::pybind11 INTERFACE Python::Module) 917*da0073e9SAndroid Build Coastguard Worker 918*da0073e9SAndroid Build Coastguard Worker# ---[ OpenTelemetry API headers 919*da0073e9SAndroid Build Coastguard Workerfind_package(OpenTelemetryApi) 920*da0073e9SAndroid Build Coastguard Workerif(NOT OpenTelemetryApi_FOUND) 921*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using third_party/opentelemetry-cpp.") 922*da0073e9SAndroid Build Coastguard Worker set(OpenTelemetryApi_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/../third_party/opentelemetry-cpp/api/include) 923*da0073e9SAndroid Build Coastguard Workerendif() 924*da0073e9SAndroid Build Coastguard Workermessage(STATUS "opentelemetry api include dirs: " "${OpenTelemetryApi_INCLUDE_DIRS}") 925*da0073e9SAndroid Build Coastguard Workeradd_library(opentelemetry::api INTERFACE IMPORTED) 926*da0073e9SAndroid Build Coastguard Workertarget_include_directories(opentelemetry::api SYSTEM INTERFACE ${OpenTelemetryApi_INCLUDE_DIRS}) 927*da0073e9SAndroid Build Coastguard Worker 928*da0073e9SAndroid Build Coastguard Worker# ---[ MPI 929*da0073e9SAndroid Build Coastguard Workerif(USE_MPI) 930*da0073e9SAndroid Build Coastguard Worker find_package(MPI) 931*da0073e9SAndroid Build Coastguard Worker if(MPI_CXX_FOUND) 932*da0073e9SAndroid Build Coastguard Worker message(STATUS "MPI support found") 933*da0073e9SAndroid Build Coastguard Worker message(STATUS "MPI compile flags: " ${MPI_CXX_COMPILE_FLAGS}) 934*da0073e9SAndroid Build Coastguard Worker message(STATUS "MPI include path: " ${MPI_CXX_INCLUDE_PATH}) 935*da0073e9SAndroid Build Coastguard Worker message(STATUS "MPI LINK flags path: " ${MPI_CXX_LINK_FLAGS}) 936*da0073e9SAndroid Build Coastguard Worker message(STATUS "MPI libraries: " ${MPI_CXX_LIBRARIES}) 937*da0073e9SAndroid Build Coastguard Worker find_program(OMPI_INFO 938*da0073e9SAndroid Build Coastguard Worker NAMES ompi_info 939*da0073e9SAndroid Build Coastguard Worker HINTS ${MPI_CXX_LIBRARIES}/../bin) 940*da0073e9SAndroid Build Coastguard Worker if(OMPI_INFO) 941*da0073e9SAndroid Build Coastguard Worker execute_process(COMMAND ${OMPI_INFO} 942*da0073e9SAndroid Build Coastguard Worker OUTPUT_VARIABLE _output) 943*da0073e9SAndroid Build Coastguard Worker if(_output MATCHES "smcuda") 944*da0073e9SAndroid Build Coastguard Worker message(STATUS "Found OpenMPI with CUDA support built.") 945*da0073e9SAndroid Build Coastguard Worker else() 946*da0073e9SAndroid Build Coastguard Worker message(WARNING "OpenMPI found, but it is not built with CUDA support.") 947*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_FORCE_FALLBACK_CUDA_MPI 1) 948*da0073e9SAndroid Build Coastguard Worker endif() 949*da0073e9SAndroid Build Coastguard Worker endif() 950*da0073e9SAndroid Build Coastguard Worker else() 951*da0073e9SAndroid Build Coastguard Worker message(WARNING "Not compiling with MPI. Suppress this warning with -DUSE_MPI=OFF") 952*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_MPI OFF) 953*da0073e9SAndroid Build Coastguard Worker endif() 954*da0073e9SAndroid Build Coastguard Workerendif() 955*da0073e9SAndroid Build Coastguard Worker 956*da0073e9SAndroid Build Coastguard Worker# ---[ OpenMP 957*da0073e9SAndroid Build Coastguard Workerif(USE_OPENMP AND NOT TARGET caffe2::openmp) 958*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/Modules/FindOpenMP.cmake) 959*da0073e9SAndroid Build Coastguard Worker if(OPENMP_FOUND) 960*da0073e9SAndroid Build Coastguard Worker message(STATUS "Adding OpenMP CXX_FLAGS: " ${OpenMP_CXX_FLAGS}) 961*da0073e9SAndroid Build Coastguard Worker if(APPLE AND USE_MPS) 962*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_OBJCXX_FLAGS " ${OpenMP_CXX_FLAGS}") 963*da0073e9SAndroid Build Coastguard Worker endif() 964*da0073e9SAndroid Build Coastguard Worker if(OpenMP_CXX_LIBRARIES) 965*da0073e9SAndroid Build Coastguard Worker message(STATUS "Will link against OpenMP libraries: ${OpenMP_CXX_LIBRARIES}") 966*da0073e9SAndroid Build Coastguard Worker endif() 967*da0073e9SAndroid Build Coastguard Worker add_library(caffe2::openmp INTERFACE IMPORTED) 968*da0073e9SAndroid Build Coastguard Worker target_link_libraries(caffe2::openmp INTERFACE OpenMP::OpenMP_CXX) 969*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS caffe2::openmp) 970*da0073e9SAndroid Build Coastguard Worker if(MSVC AND OpenMP_CXX_LIBRARIES MATCHES ".*libiomp5md\\.lib.*") 971*da0073e9SAndroid Build Coastguard Worker target_compile_definitions(caffe2::openmp INTERFACE _OPENMP_NOFORCE_MANIFEST) 972*da0073e9SAndroid Build Coastguard Worker target_link_options(caffe2::openmp INTERFACE "/NODEFAULTLIB:vcomp") 973*da0073e9SAndroid Build Coastguard Worker endif() 974*da0073e9SAndroid Build Coastguard Worker else() 975*da0073e9SAndroid Build Coastguard Worker message(WARNING "Not compiling with OpenMP. Suppress this warning with -DUSE_OPENMP=OFF") 976*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_OPENMP OFF) 977*da0073e9SAndroid Build Coastguard Worker endif() 978*da0073e9SAndroid Build Coastguard Workerendif() 979*da0073e9SAndroid Build Coastguard Worker 980*da0073e9SAndroid Build Coastguard Worker 981*da0073e9SAndroid Build Coastguard Worker 982*da0073e9SAndroid Build Coastguard Worker# ---[ Android specific ones 983*da0073e9SAndroid Build Coastguard Workerif(ANDROID) 984*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS log) 985*da0073e9SAndroid Build Coastguard Workerendif() 986*da0073e9SAndroid Build Coastguard Worker 987*da0073e9SAndroid Build Coastguard Worker# ---[ LLVM 988*da0073e9SAndroid Build Coastguard Workerif(USE_LLVM) 989*da0073e9SAndroid Build Coastguard Worker message(STATUS "Looking for LLVM in ${USE_LLVM}") 990*da0073e9SAndroid Build Coastguard Worker find_package(LLVM PATHS ${USE_LLVM} NO_DEFAULT_PATH) 991*da0073e9SAndroid Build Coastguard Worker 992*da0073e9SAndroid Build Coastguard Worker if(LLVM_FOUND) 993*da0073e9SAndroid Build Coastguard Worker message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}") 994*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}") 995*da0073e9SAndroid Build Coastguard Worker 996*da0073e9SAndroid Build Coastguard Worker include_directories(${LLVM_INCLUDE_DIRS}) 997*da0073e9SAndroid Build Coastguard Worker add_definitions(-DTORCH_ENABLE_LLVM) 998*da0073e9SAndroid Build Coastguard Worker endif(LLVM_FOUND) 999*da0073e9SAndroid Build Coastguard Workerendif(USE_LLVM) 1000*da0073e9SAndroid Build Coastguard Worker 1001*da0073e9SAndroid Build Coastguard Worker# ---[ cuDNN 1002*da0073e9SAndroid Build Coastguard Workerif(USE_CUDNN) 1003*da0073e9SAndroid Build Coastguard Worker if(CUDNN_VERSION VERSION_LESS 8.5) 1004*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "PyTorch needs CuDNN-8.5 or above, but found ${CUDNN_VERSION}. Builds are still possible with `USE_CUDNN=0`") 1005*da0073e9SAndroid Build Coastguard Worker endif() 1006*da0073e9SAndroid Build Coastguard Worker set(CUDNN_FRONTEND_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/../third_party/cudnn_frontend/include) 1007*da0073e9SAndroid Build Coastguard Worker target_include_directories(torch::cudnn INTERFACE ${CUDNN_FRONTEND_INCLUDE_DIR}) 1008*da0073e9SAndroid Build Coastguard Workerendif() 1009*da0073e9SAndroid Build Coastguard Worker 1010*da0073e9SAndroid Build Coastguard Worker# ---[ HIP 1011*da0073e9SAndroid Build Coastguard Workerif(USE_ROCM) 1012*da0073e9SAndroid Build Coastguard Worker # This prevents linking in the libtinfo from /opt/conda/lib which conflicts with ROCm libtinfo. 1013*da0073e9SAndroid Build Coastguard Worker # Currently only active for Ubuntu 20.04 and greater versions. 1014*da0073e9SAndroid Build Coastguard Worker if(UNIX AND EXISTS "/etc/os-release") 1015*da0073e9SAndroid Build Coastguard Worker file(STRINGS /etc/os-release OS_RELEASE) 1016*da0073e9SAndroid Build Coastguard Worker set(DISTRO_NAME "") 1017*da0073e9SAndroid Build Coastguard Worker set(DISTRO_VERSION "") 1018*da0073e9SAndroid Build Coastguard Worker foreach(line ${OS_RELEASE}) 1019*da0073e9SAndroid Build Coastguard Worker string(REGEX MATCH "^NAME=" DISTRO_NAME_MATCH ${line}) 1020*da0073e9SAndroid Build Coastguard Worker if(NOT DISTRO_NAME_MATCH STREQUAL "") 1021*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "^NAME=\"(.*)\"" "\\1" DISTRO_NAME ${line}) 1022*da0073e9SAndroid Build Coastguard Worker endif() 1023*da0073e9SAndroid Build Coastguard Worker string(REGEX MATCH "^VERSION_ID=" DISTRO_VERSION_MATCH ${line}) 1024*da0073e9SAndroid Build Coastguard Worker if(NOT DISTRO_VERSION_MATCH STREQUAL "") 1025*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "^VERSION_ID=\"(.*)\"" "\\1" DISTRO_VERSION ${line}) 1026*da0073e9SAndroid Build Coastguard Worker endif() 1027*da0073e9SAndroid Build Coastguard Worker endforeach() 1028*da0073e9SAndroid Build Coastguard Worker if(DISTRO_NAME STREQUAL "Ubuntu" AND DISTRO_VERSION VERSION_GREATER_EQUAL "20.04") 1029*da0073e9SAndroid Build Coastguard Worker find_library(LIBTINFO_LOC tinfo NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH) 1030*da0073e9SAndroid Build Coastguard Worker if(LIBTINFO_LOC) 1031*da0073e9SAndroid Build Coastguard Worker get_filename_component(LIBTINFO_LOC_PARENT ${LIBTINFO_LOC} DIRECTORY) 1032*da0073e9SAndroid Build Coastguard Worker set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath-link,${LIBTINFO_LOC_PARENT}") 1033*da0073e9SAndroid Build Coastguard Worker endif() 1034*da0073e9SAndroid Build Coastguard Worker endif() 1035*da0073e9SAndroid Build Coastguard Worker endif() 1036*da0073e9SAndroid Build Coastguard Worker 1037*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/public/LoadHIP.cmake) 1038*da0073e9SAndroid Build Coastguard Worker if(PYTORCH_FOUND_HIP) 1039*da0073e9SAndroid Build Coastguard Worker message(INFO "Compiling with HIP for AMD.") 1040*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_ROCM ON) 1041*da0073e9SAndroid Build Coastguard Worker 1042*da0073e9SAndroid Build Coastguard Worker if(USE_NCCL AND NOT USE_SYSTEM_NCCL) 1043*da0073e9SAndroid Build Coastguard Worker message(INFO "Forcing USE_SYSTEM_NCCL to ON since it's required by using RCCL") 1044*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_SYSTEM_NCCL ON) 1045*da0073e9SAndroid Build Coastguard Worker endif() 1046*da0073e9SAndroid Build Coastguard Worker 1047*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -fPIC) 1048*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -D__HIP_PLATFORM_AMD__=1) 1049*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -DCUDA_HAS_FP16=1) 1050*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -DUSE_ROCM) 1051*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -D__HIP_NO_HALF_OPERATORS__=1) 1052*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -D__HIP_NO_HALF_CONVERSIONS__=1) 1053*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -DTORCH_HIP_VERSION=${TORCH_HIP_VERSION}) 1054*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -Wno-shift-count-negative) 1055*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -Wno-shift-count-overflow) 1056*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -Wno-duplicate-decl-specifier) 1057*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -DCAFFE2_USE_MIOPEN) 1058*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -DTHRUST_DEVICE_SYSTEM=THRUST_DEVICE_SYSTEM_HIP) 1059*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -std=c++17) 1060*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -DHIPBLAS_V2) 1061*da0073e9SAndroid Build Coastguard Worker if(HIP_NEW_TYPE_ENUMS) 1062*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -DHIP_NEW_TYPE_ENUMS) 1063*da0073e9SAndroid Build Coastguard Worker endif() 1064*da0073e9SAndroid Build Coastguard Worker add_definitions(-DROCM_VERSION=${ROCM_VERSION_DEV_INT}) 1065*da0073e9SAndroid Build Coastguard Worker add_definitions(-DTORCH_HIP_VERSION=${TORCH_HIP_VERSION}) 1066*da0073e9SAndroid Build Coastguard Worker message("TORCH_HIP_VERSION=${TORCH_HIP_VERSION} is added as a compiler defines") 1067*da0073e9SAndroid Build Coastguard Worker 1068*da0073e9SAndroid Build Coastguard Worker if(CMAKE_BUILD_TYPE MATCHES Debug) 1069*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -g2) 1070*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CXX_FLAGS -O0) 1071*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_HIPCC_FLAGS -fdebug-info-for-profiling) 1072*da0073e9SAndroid Build Coastguard Worker endif(CMAKE_BUILD_TYPE MATCHES Debug) 1073*da0073e9SAndroid Build Coastguard Worker 1074*da0073e9SAndroid Build Coastguard Worker # needed for compat with newer versions of hip-clang that introduced C++20 mangling rules 1075*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_HIPCC_FLAGS -fclang-abi-compat=17) 1076*da0073e9SAndroid Build Coastguard Worker 1077*da0073e9SAndroid Build Coastguard Worker set(HIP_CLANG_FLAGS ${HIP_CXX_FLAGS}) 1078*da0073e9SAndroid Build Coastguard Worker # Ask hcc to generate device code during compilation so we can use 1079*da0073e9SAndroid Build Coastguard Worker # host linker to link. 1080*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CLANG_FLAGS -fno-gpu-rdc) 1081*da0073e9SAndroid Build Coastguard Worker foreach(pytorch_rocm_arch ${PYTORCH_ROCM_ARCH}) 1082*da0073e9SAndroid Build Coastguard Worker list(APPEND HIP_CLANG_FLAGS --offload-arch=${pytorch_rocm_arch}) 1083*da0073e9SAndroid Build Coastguard Worker endforeach() 1084*da0073e9SAndroid Build Coastguard Worker 1085*da0073e9SAndroid Build Coastguard Worker set(Caffe2_HIP_INCLUDE 1086*da0073e9SAndroid Build Coastguard Worker $<INSTALL_INTERFACE:include> ${Caffe2_HIP_INCLUDE}) 1087*da0073e9SAndroid Build Coastguard Worker # This is needed for library added by hip_add_library (same for hip_add_executable) 1088*da0073e9SAndroid Build Coastguard Worker hip_include_directories(${Caffe2_HIP_INCLUDE}) 1089*da0073e9SAndroid Build Coastguard Worker 1090*da0073e9SAndroid Build Coastguard Worker set(Caffe2_PUBLIC_HIP_DEPENDENCY_LIBS 1091*da0073e9SAndroid Build Coastguard Worker hip::amdhip64 MIOpen hiprtc::hiprtc) # libroctx will be linked in with MIOpen 1092*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_PUBLIC_HIP_DEPENDENCY_LIBS roc::hipblaslt) 1093*da0073e9SAndroid Build Coastguard Worker 1094*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_PUBLIC_HIP_DEPENDENCY_LIBS 1095*da0073e9SAndroid Build Coastguard Worker roc::hipblas hip::hipfft hip::hiprand roc::hipsparse roc::hipsolver) 1096*da0073e9SAndroid Build Coastguard Worker 1097*da0073e9SAndroid Build Coastguard Worker # ---[ Kernel asserts 1098*da0073e9SAndroid Build Coastguard Worker # Kernel asserts is disabled for ROCm by default. 1099*da0073e9SAndroid Build Coastguard Worker # It can be turned on by turning on the env USE_ROCM_KERNEL_ASSERT to the build system. 1100*da0073e9SAndroid Build Coastguard Worker if(USE_ROCM_KERNEL_ASSERT) 1101*da0073e9SAndroid Build Coastguard Worker message(STATUS "Enabling Kernel Assert for ROCm") 1102*da0073e9SAndroid Build Coastguard Worker else() 1103*da0073e9SAndroid Build Coastguard Worker message(STATUS "Disabling Kernel Assert for ROCm") 1104*da0073e9SAndroid Build Coastguard Worker endif() 1105*da0073e9SAndroid Build Coastguard Worker 1106*da0073e9SAndroid Build Coastguard Worker else() 1107*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_ROCM OFF) 1108*da0073e9SAndroid Build Coastguard Worker endif() 1109*da0073e9SAndroid Build Coastguard Workerendif() 1110*da0073e9SAndroid Build Coastguard Worker 1111*da0073e9SAndroid Build Coastguard Worker# ---[ NCCL 1112*da0073e9SAndroid Build Coastguard Workerif(USE_NCCL) 1113*da0073e9SAndroid Build Coastguard Worker if(NOT (USE_CUDA OR USE_ROCM)) 1114*da0073e9SAndroid Build Coastguard Worker message(WARNING 1115*da0073e9SAndroid Build Coastguard Worker "Not using CUDA/ROCM, so disabling USE_NCCL. Suppress this warning with " 1116*da0073e9SAndroid Build Coastguard Worker "-DUSE_NCCL=OFF.") 1117*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NCCL OFF) 1118*da0073e9SAndroid Build Coastguard Worker elseif(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") 1119*da0073e9SAndroid Build Coastguard Worker message(WARNING "NCCL is currently only supported under Linux.") 1120*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NCCL OFF) 1121*da0073e9SAndroid Build Coastguard Worker elseif(USE_CUDA) 1122*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/External/nccl.cmake) 1123*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_CUDA_DEPENDENCY_LIBS __caffe2_nccl) 1124*da0073e9SAndroid Build Coastguard Worker elseif(USE_ROCM) 1125*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/External/rccl.cmake) 1126*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_CUDA_DEPENDENCY_LIBS __caffe2_nccl) 1127*da0073e9SAndroid Build Coastguard Worker endif() 1128*da0073e9SAndroid Build Coastguard Workerendif() 1129*da0073e9SAndroid Build Coastguard Worker 1130*da0073e9SAndroid Build Coastguard Worker# ---[ UCC 1131*da0073e9SAndroid Build Coastguard Workerif(USE_UCC) 1132*da0073e9SAndroid Build Coastguard Worker if(NOT CMAKE_SYSTEM_NAME STREQUAL "Linux") 1133*da0073e9SAndroid Build Coastguard Worker message(WARNING "UCC is currently only supported under Linux.") 1134*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_UCC OFF) 1135*da0073e9SAndroid Build Coastguard Worker else() 1136*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/External/ucc.cmake) 1137*da0073e9SAndroid Build Coastguard Worker endif() 1138*da0073e9SAndroid Build Coastguard Workerendif() 1139*da0073e9SAndroid Build Coastguard Worker 1140*da0073e9SAndroid Build Coastguard Worker# ---[ CUB 1141*da0073e9SAndroid Build Coastguard Workerif(USE_CUDA) 1142*da0073e9SAndroid Build Coastguard Worker find_package(CUB) 1143*da0073e9SAndroid Build Coastguard Worker if(NOT CUB_FOUND) 1144*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Cannot find CUB.") 1145*da0073e9SAndroid Build Coastguard Worker endif() 1146*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${CUB_INCLUDE_DIRS}) 1147*da0073e9SAndroid Build Coastguard Workerendif() 1148*da0073e9SAndroid Build Coastguard Worker 1149*da0073e9SAndroid Build Coastguard Workerif(USE_DISTRIBUTED AND USE_TENSORPIPE) 1150*da0073e9SAndroid Build Coastguard Worker if(MSVC) 1151*da0073e9SAndroid Build Coastguard Worker message(WARNING "Tensorpipe cannot be used on Windows.") 1152*da0073e9SAndroid Build Coastguard Worker else() 1153*da0073e9SAndroid Build Coastguard Worker if(USE_CUDA) 1154*da0073e9SAndroid Build Coastguard Worker set(TP_USE_CUDA ON CACHE BOOL "" FORCE) 1155*da0073e9SAndroid Build Coastguard Worker set(TP_ENABLE_CUDA_IPC ON CACHE BOOL "" FORCE) 1156*da0073e9SAndroid Build Coastguard Worker endif() 1157*da0073e9SAndroid Build Coastguard Worker set(TP_BUILD_LIBUV ON CACHE BOOL "" FORCE) 1158*da0073e9SAndroid Build Coastguard Worker add_compile_options(-DTORCH_USE_LIBUV) 1159*da0073e9SAndroid Build Coastguard Worker include_directories(BEFORE SYSTEM ${CMAKE_CURRENT_LIST_DIR}/../third_party/tensorpipe/third_party/libuv/include) 1160*da0073e9SAndroid Build Coastguard Worker set(TP_STATIC_OR_SHARED STATIC CACHE STRING "" FORCE) 1161*da0073e9SAndroid Build Coastguard Worker 1162*da0073e9SAndroid Build Coastguard Worker # Tensorpipe uses cuda_add_library 1163*da0073e9SAndroid Build Coastguard Worker torch_update_find_cuda_flags() 1164*da0073e9SAndroid Build Coastguard Worker add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/tensorpipe) 1165*da0073e9SAndroid Build Coastguard Worker 1166*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS tensorpipe) 1167*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS nlohmann) 1168*da0073e9SAndroid Build Coastguard Worker if(USE_CUDA) 1169*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_CUDA_DEPENDENCY_LIBS tensorpipe_cuda) 1170*da0073e9SAndroid Build Coastguard Worker elseif(USE_ROCM) 1171*da0073e9SAndroid Build Coastguard Worker message(WARNING "TensorPipe doesn't yet support ROCm") 1172*da0073e9SAndroid Build Coastguard Worker # Not yet... 1173*da0073e9SAndroid Build Coastguard Worker # list(APPEND Caffe2_HIP_DEPENDENCY_LIBS tensorpipe_hip) 1174*da0073e9SAndroid Build Coastguard Worker endif() 1175*da0073e9SAndroid Build Coastguard Worker endif() 1176*da0073e9SAndroid Build Coastguard Workerendif() 1177*da0073e9SAndroid Build Coastguard Worker 1178*da0073e9SAndroid Build Coastguard Workerif(USE_GLOO) 1179*da0073e9SAndroid Build Coastguard Worker if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) 1180*da0073e9SAndroid Build Coastguard Worker message(WARNING "Gloo can only be used on 64-bit systems.") 1181*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_GLOO OFF) 1182*da0073e9SAndroid Build Coastguard Worker else() 1183*da0073e9SAndroid Build Coastguard Worker # Don't install gloo 1184*da0073e9SAndroid Build Coastguard Worker set(GLOO_INSTALL OFF CACHE BOOL "" FORCE) 1185*da0073e9SAndroid Build Coastguard Worker set(GLOO_STATIC_OR_SHARED STATIC CACHE STRING "" FORCE) 1186*da0073e9SAndroid Build Coastguard Worker 1187*da0073e9SAndroid Build Coastguard Worker # Temporarily override variables to avoid building Gloo tests/benchmarks 1188*da0073e9SAndroid Build Coastguard Worker set(__BUILD_TEST ${BUILD_TEST}) 1189*da0073e9SAndroid Build Coastguard Worker set(__BUILD_BENCHMARK ${BUILD_BENCHMARK}) 1190*da0073e9SAndroid Build Coastguard Worker set(BUILD_TEST OFF) 1191*da0073e9SAndroid Build Coastguard Worker set(BUILD_BENCHMARK OFF) 1192*da0073e9SAndroid Build Coastguard Worker if(USE_ROCM) 1193*da0073e9SAndroid Build Coastguard Worker set(ENV{GLOO_ROCM_ARCH} "${PYTORCH_ROCM_ARCH}") 1194*da0073e9SAndroid Build Coastguard Worker endif() 1195*da0073e9SAndroid Build Coastguard Worker if(NOT USE_SYSTEM_GLOO) 1196*da0073e9SAndroid Build Coastguard Worker if(USE_DISTRIBUED AND USE_TENSORPIPE) 1197*da0073e9SAndroid Build Coastguard Worker get_target_property(_include_dirs uv_a INCLUDE_DIRECTORIES) 1198*da0073e9SAndroid Build Coastguard Worker set_target_properties(uv_a PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${_include_dirs}") 1199*da0073e9SAndroid Build Coastguard Worker endif() 1200*da0073e9SAndroid Build Coastguard Worker if(USE_NCCL AND NOT USE_SYSTEM_NCCL) 1201*da0073e9SAndroid Build Coastguard Worker # Tell Gloo build system to use bundled NCCL, see 1202*da0073e9SAndroid Build Coastguard Worker # https://github.com/facebookincubator/gloo/blob/950c0e23819779a9e0c70b861db4c52b31d1d1b2/cmake/Dependencies.cmake#L123 1203*da0073e9SAndroid Build Coastguard Worker set(NCCL_EXTERNAL ON) 1204*da0073e9SAndroid Build Coastguard Worker endif() 1205*da0073e9SAndroid Build Coastguard Worker set(GLOO_USE_CUDA_TOOLKIT ON CACHE BOOL "" FORCE) 1206*da0073e9SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/gloo) 1207*da0073e9SAndroid Build Coastguard Worker else() 1208*da0073e9SAndroid Build Coastguard Worker add_library(gloo SHARED IMPORTED) 1209*da0073e9SAndroid Build Coastguard Worker find_library(GLOO_LIBRARY gloo) 1210*da0073e9SAndroid Build Coastguard Worker if(NOT GLOO_LIBRARY) 1211*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Cannot find gloo") 1212*da0073e9SAndroid Build Coastguard Worker endif() 1213*da0073e9SAndroid Build Coastguard Worker message("Found gloo: ${GLOO_LIBRARY}") 1214*da0073e9SAndroid Build Coastguard Worker set_target_properties(gloo PROPERTIES IMPORTED_LOCATION ${GLOO_LIBRARY}) 1215*da0073e9SAndroid Build Coastguard Worker endif() 1216*da0073e9SAndroid Build Coastguard Worker # Here is a little bit hacky. We have to put PROJECT_BINARY_DIR in front 1217*da0073e9SAndroid Build Coastguard Worker # of PROJECT_SOURCE_DIR with/without conda system. The reason is that 1218*da0073e9SAndroid Build Coastguard Worker # gloo generates a new config.h in the binary diretory. 1219*da0073e9SAndroid Build Coastguard Worker include_directories(BEFORE SYSTEM ${CMAKE_CURRENT_LIST_DIR}/../third_party/gloo) 1220*da0073e9SAndroid Build Coastguard Worker include_directories(BEFORE SYSTEM ${PROJECT_BINARY_DIR}/third_party/gloo) 1221*da0073e9SAndroid Build Coastguard Worker set(BUILD_TEST ${__BUILD_TEST}) 1222*da0073e9SAndroid Build Coastguard Worker set(BUILD_BENCHMARK ${__BUILD_BENCHMARK}) 1223*da0073e9SAndroid Build Coastguard Worker 1224*da0073e9SAndroid Build Coastguard Worker # Add explicit dependency since NCCL is built from third_party. 1225*da0073e9SAndroid Build Coastguard Worker # Without dependency, make -jN with N>1 can fail if the NCCL build 1226*da0073e9SAndroid Build Coastguard Worker # hasn't finished when CUDA targets are linked. 1227*da0073e9SAndroid Build Coastguard Worker if(NOT USE_SYSTEM_NCCL AND USE_NCCL AND NOT USE_ROCM) 1228*da0073e9SAndroid Build Coastguard Worker add_dependencies(gloo_cuda nccl_external) 1229*da0073e9SAndroid Build Coastguard Worker endif() 1230*da0073e9SAndroid Build Coastguard Worker # Pick the right dependency depending on USE_CUDA 1231*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS gloo) 1232*da0073e9SAndroid Build Coastguard Worker if(USE_CUDA) 1233*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_CUDA_DEPENDENCY_LIBS gloo_cuda) 1234*da0073e9SAndroid Build Coastguard Worker elseif(USE_ROCM) 1235*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_HIP_DEPENDENCY_LIBS gloo_hip) 1236*da0073e9SAndroid Build Coastguard Worker endif() 1237*da0073e9SAndroid Build Coastguard Worker add_compile_options(-DCAFFE2_USE_GLOO) 1238*da0073e9SAndroid Build Coastguard Worker endif() 1239*da0073e9SAndroid Build Coastguard Workerendif() 1240*da0073e9SAndroid Build Coastguard Worker 1241*da0073e9SAndroid Build Coastguard Worker# ---[ profiling 1242*da0073e9SAndroid Build Coastguard Workerif(USE_PROF) 1243*da0073e9SAndroid Build Coastguard Worker find_package(htrace) 1244*da0073e9SAndroid Build Coastguard Worker if(htrace_FOUND) 1245*da0073e9SAndroid Build Coastguard Worker set(USE_PROF_HTRACE ON) 1246*da0073e9SAndroid Build Coastguard Worker else() 1247*da0073e9SAndroid Build Coastguard Worker message(WARNING "htrace not found. Caffe2 will build without htrace prof") 1248*da0073e9SAndroid Build Coastguard Worker endif() 1249*da0073e9SAndroid Build Coastguard Workerendif() 1250*da0073e9SAndroid Build Coastguard Worker 1251*da0073e9SAndroid Build Coastguard Workerif(USE_SNPE AND ANDROID) 1252*da0073e9SAndroid Build Coastguard Worker if(SNPE_LOCATION AND SNPE_HEADERS) 1253*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using SNPE location specified by -DSNPE_LOCATION: " ${SNPE_LOCATION}) 1254*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using SNPE headers specified by -DSNPE_HEADERS: " ${SNPE_HEADERS}) 1255*da0073e9SAndroid Build Coastguard Worker include_directories(SYSTEM ${SNPE_HEADERS}) 1256*da0073e9SAndroid Build Coastguard Worker add_library(snpe SHARED IMPORTED) 1257*da0073e9SAndroid Build Coastguard Worker set_property(TARGET snpe PROPERTY IMPORTED_LOCATION ${SNPE_LOCATION}) 1258*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS snpe) 1259*da0073e9SAndroid Build Coastguard Worker else() 1260*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_SNPE OFF) 1261*da0073e9SAndroid Build Coastguard Worker endif() 1262*da0073e9SAndroid Build Coastguard Workerendif() 1263*da0073e9SAndroid Build Coastguard Worker 1264*da0073e9SAndroid Build Coastguard Workerif(USE_NNAPI AND NOT ANDROID) 1265*da0073e9SAndroid Build Coastguard Worker message(WARNING "NNApi is only used in android builds.") 1266*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_NNAPI OFF) 1267*da0073e9SAndroid Build Coastguard Workerendif() 1268*da0073e9SAndroid Build Coastguard Worker 1269*da0073e9SAndroid Build Coastguard Worker# ---[ Onnx 1270*da0073e9SAndroid Build Coastguard Workerif(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO AND NOT INTERN_DISABLE_ONNX) 1271*da0073e9SAndroid Build Coastguard Worker if(EXISTS "${CAFFE2_CUSTOM_PROTOC_EXECUTABLE}") 1272*da0073e9SAndroid Build Coastguard Worker set(ONNX_CUSTOM_PROTOC_EXECUTABLE ${CAFFE2_CUSTOM_PROTOC_EXECUTABLE}) 1273*da0073e9SAndroid Build Coastguard Worker endif() 1274*da0073e9SAndroid Build Coastguard Worker set(TEMP_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) 1275*da0073e9SAndroid Build Coastguard Worker set(BUILD_SHARED_LIBS OFF) 1276*da0073e9SAndroid Build Coastguard Worker set(ONNX_USE_MSVC_STATIC_RUNTIME ${CAFFE2_USE_MSVC_STATIC_RUNTIME}) 1277*da0073e9SAndroid Build Coastguard Worker set(ONNX_USE_LITE_PROTO ${CAFFE2_USE_LITE_PROTO}) 1278*da0073e9SAndroid Build Coastguard Worker # If linking local protobuf, make sure ONNX has the same protobuf 1279*da0073e9SAndroid Build Coastguard Worker # patches as Caffe2 and Caffe proto. This forces some functions to 1280*da0073e9SAndroid Build Coastguard Worker # not be inline and instead route back to the statically-linked protobuf. 1281*da0073e9SAndroid Build Coastguard Worker if(CAFFE2_LINK_LOCAL_PROTOBUF) 1282*da0073e9SAndroid Build Coastguard Worker set(ONNX_PROTO_POST_BUILD_SCRIPT ${PROJECT_SOURCE_DIR}/cmake/ProtoBufPatch.cmake) 1283*da0073e9SAndroid Build Coastguard Worker endif() 1284*da0073e9SAndroid Build Coastguard Worker if(ONNX_ML) 1285*da0073e9SAndroid Build Coastguard Worker add_definitions(-DONNX_ML=1) 1286*da0073e9SAndroid Build Coastguard Worker endif() 1287*da0073e9SAndroid Build Coastguard Worker add_definitions(-DONNXIFI_ENABLE_EXT=1) 1288*da0073e9SAndroid Build Coastguard Worker if(NOT USE_SYSTEM_ONNX) 1289*da0073e9SAndroid Build Coastguard Worker add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../third_party/onnx EXCLUDE_FROM_ALL) 1290*da0073e9SAndroid Build Coastguard Worker if(NOT MSVC) 1291*da0073e9SAndroid Build Coastguard Worker set_target_properties(onnx_proto PROPERTIES CXX_STANDARD 17) 1292*da0073e9SAndroid Build Coastguard Worker endif() 1293*da0073e9SAndroid Build Coastguard Worker endif() 1294*da0073e9SAndroid Build Coastguard Worker 1295*da0073e9SAndroid Build Coastguard Worker add_definitions(-DONNX_NAMESPACE=${ONNX_NAMESPACE}) 1296*da0073e9SAndroid Build Coastguard Worker if(NOT USE_SYSTEM_ONNX) 1297*da0073e9SAndroid Build Coastguard Worker include_directories(${ONNX_INCLUDE_DIRS}) 1298*da0073e9SAndroid Build Coastguard Worker # In mobile build we care about code size, and so we need drop 1299*da0073e9SAndroid Build Coastguard Worker # everything (e.g. checker) in onnx but the pb definition. 1300*da0073e9SAndroid Build Coastguard Worker if(ANDROID OR IOS) 1301*da0073e9SAndroid Build Coastguard Worker caffe2_interface_library(onnx_proto onnx_library) 1302*da0073e9SAndroid Build Coastguard Worker else() 1303*da0073e9SAndroid Build Coastguard Worker caffe2_interface_library(onnx onnx_library) 1304*da0073e9SAndroid Build Coastguard Worker endif() 1305*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_WHOLE_LINK_LIBS onnx_library) 1306*da0073e9SAndroid Build Coastguard Worker else() 1307*da0073e9SAndroid Build Coastguard Worker add_library(onnx SHARED IMPORTED) 1308*da0073e9SAndroid Build Coastguard Worker find_library(ONNX_LIBRARY onnx) 1309*da0073e9SAndroid Build Coastguard Worker if(NOT ONNX_LIBRARY) 1310*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Cannot find onnx") 1311*da0073e9SAndroid Build Coastguard Worker endif() 1312*da0073e9SAndroid Build Coastguard Worker set_property(TARGET onnx PROPERTY IMPORTED_LOCATION ${ONNX_LIBRARY}) 1313*da0073e9SAndroid Build Coastguard Worker add_library(onnx_proto SHARED IMPORTED) 1314*da0073e9SAndroid Build Coastguard Worker find_library(ONNX_PROTO_LIBRARY onnx_proto) 1315*da0073e9SAndroid Build Coastguard Worker if(NOT ONNX_PROTO_LIBRARY) 1316*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Cannot find onnx") 1317*da0073e9SAndroid Build Coastguard Worker endif() 1318*da0073e9SAndroid Build Coastguard Worker set_property(TARGET onnx_proto PROPERTY IMPORTED_LOCATION ${ONNX_PROTO_LIBRARY}) 1319*da0073e9SAndroid Build Coastguard Worker message("-- Found onnx: ${ONNX_LIBRARY} ${ONNX_PROTO_LIBRARY}") 1320*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS onnx_proto onnx) 1321*da0073e9SAndroid Build Coastguard Worker endif() 1322*da0073e9SAndroid Build Coastguard Worker # Recover the build shared libs option. 1323*da0073e9SAndroid Build Coastguard Worker set(BUILD_SHARED_LIBS ${TEMP_BUILD_SHARED_LIBS}) 1324*da0073e9SAndroid Build Coastguard Workerendif() 1325*da0073e9SAndroid Build Coastguard Worker 1326*da0073e9SAndroid Build Coastguard Worker# --[ ATen checks 1327*da0073e9SAndroid Build Coastguard Workerset(USE_LAPACK 0) 1328*da0073e9SAndroid Build Coastguard Worker 1329*da0073e9SAndroid Build Coastguard Worker# we need to build all targets to be linked with PIC 1330*da0073e9SAndroid Build Coastguard Workerif(USE_KINETO AND INTERN_BUILD_MOBILE AND USE_LITE_INTERPRETER_PROFILER) 1331*da0073e9SAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) 1332*da0073e9SAndroid Build Coastguard Workerendif() 1333*da0073e9SAndroid Build Coastguard Worker 1334*da0073e9SAndroid Build Coastguard Workerif(NOT INTERN_BUILD_MOBILE) 1335*da0073e9SAndroid Build Coastguard Worker set(TORCH_CUDA_ARCH_LIST $ENV{TORCH_CUDA_ARCH_LIST}) 1336*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS " $ENV{TORCH_NVCC_FLAGS}") 1337*da0073e9SAndroid Build Coastguard Worker set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) 1338*da0073e9SAndroid Build Coastguard Worker 1339*da0073e9SAndroid Build Coastguard Worker # Top-level build config 1340*da0073e9SAndroid Build Coastguard Worker ############################################ 1341*da0073e9SAndroid Build Coastguard Worker # Flags 1342*da0073e9SAndroid Build Coastguard Worker # When using MSVC 1343*da0073e9SAndroid Build Coastguard Worker # Detect CUDA architecture and get best NVCC flags 1344*da0073e9SAndroid Build Coastguard Worker # finding cuda must be first because other things depend on the result 1345*da0073e9SAndroid Build Coastguard Worker # 1346*da0073e9SAndroid Build Coastguard Worker # NB: We MUST NOT run this find_package if NOT USE_CUDA is set, because upstream 1347*da0073e9SAndroid Build Coastguard Worker # FindCUDA has a bug where it will still attempt to make use of NOTFOUND 1348*da0073e9SAndroid Build Coastguard Worker # compiler variables to run various probe tests. We could try to fix 1349*da0073e9SAndroid Build Coastguard Worker # this, but since FindCUDA upstream is subsumed by first-class support 1350*da0073e9SAndroid Build Coastguard Worker # for CUDA language, it seemed not worth fixing. 1351*da0073e9SAndroid Build Coastguard Worker 1352*da0073e9SAndroid Build Coastguard Worker if(MSVC) 1353*da0073e9SAndroid Build Coastguard Worker # we want to respect the standard, and we are bored of those **** . 1354*da0073e9SAndroid Build Coastguard Worker add_definitions(-D_CRT_SECURE_NO_DEPRECATE=1) 1355*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS " -Xcompiler=/wd4819,/wd4503,/wd4190,/wd4244,/wd4251,/wd4275,/wd4522") 1356*da0073e9SAndroid Build Coastguard Worker endif() 1357*da0073e9SAndroid Build Coastguard Worker 1358*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS " -Wno-deprecated-gpu-targets --expt-extended-lambda") 1359*da0073e9SAndroid Build Coastguard Worker 1360*da0073e9SAndroid Build Coastguard Worker # use cub in a safe manner, see: 1361*da0073e9SAndroid Build Coastguard Worker # https://github.com/pytorch/pytorch/pull/55292 1362*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS " -DCUB_WRAPPED_NAMESPACE=at_cuda_detail") 1363*da0073e9SAndroid Build Coastguard Worker 1364*da0073e9SAndroid Build Coastguard Worker message(STATUS "Found CUDA with FP16 support, compiling with torch.cuda.HalfTensor") 1365*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CUDA_FLAGS " -DCUDA_HAS_FP16=1" 1366*da0073e9SAndroid Build Coastguard Worker " -D__CUDA_NO_HALF_OPERATORS__" 1367*da0073e9SAndroid Build Coastguard Worker " -D__CUDA_NO_HALF_CONVERSIONS__" 1368*da0073e9SAndroid Build Coastguard Worker " -D__CUDA_NO_HALF2_OPERATORS__" 1369*da0073e9SAndroid Build Coastguard Worker " -D__CUDA_NO_BFLOAT16_CONVERSIONS__") 1370*da0073e9SAndroid Build Coastguard Worker 1371*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_C_FLAGS_RELEASE " -DNDEBUG") 1372*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS_RELEASE " -DNDEBUG") 1373*da0073e9SAndroid Build Coastguard Worker if(NOT GENERATOR_IS_MULTI_CONFIG) 1374*da0073e9SAndroid Build Coastguard Worker if(${CMAKE_BUILD_TYPE} STREQUAL "Release") 1375*da0073e9SAndroid Build Coastguard Worker message(STATUS "Adding -DNDEBUG to compile flags") 1376*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_C_FLAGS " -DNDEBUG") 1377*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DNDEBUG") 1378*da0073e9SAndroid Build Coastguard Worker else() 1379*da0073e9SAndroid Build Coastguard Worker message(STATUS "Removing -DNDEBUG from compile flags") 1380*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "[-/]DNDEBUG" "" CMAKE_C_FLAGS "" ${CMAKE_C_FLAGS}) 1381*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "[-/]DNDEBUG" "" CMAKE_CXX_FLAGS "" ${CMAKE_CXX_FLAGS}) 1382*da0073e9SAndroid Build Coastguard Worker endif() 1383*da0073e9SAndroid Build Coastguard Worker endif() 1384*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "[-/]DNDEBUG" "" CMAKE_C_FLAGS_DEBUG "" ${CMAKE_C_FLAGS_DEBUG}) 1385*da0073e9SAndroid Build Coastguard Worker string(REGEX REPLACE "[-/]DNDEBUG" "" CMAKE_CXX_FLAGS_DEBUG "" ${CMAKE_CXX_FLAGS_DEBUG}) 1386*da0073e9SAndroid Build Coastguard Worker 1387*da0073e9SAndroid Build Coastguard Worker set(CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE OFF) 1388*da0073e9SAndroid Build Coastguard Worker 1389*da0073e9SAndroid Build Coastguard Worker if(USE_CUDA OR USE_ROCM) 1390*da0073e9SAndroid Build Coastguard Worker if(USE_MAGMA) 1391*da0073e9SAndroid Build Coastguard Worker find_package(MAGMA) 1392*da0073e9SAndroid Build Coastguard Worker if(MAGMA_FOUND) 1393*da0073e9SAndroid Build Coastguard Worker message(STATUS "Compiling with MAGMA support") 1394*da0073e9SAndroid Build Coastguard Worker message(STATUS "MAGMA INCLUDE DIRECTORIES: ${MAGMA_INCLUDE_DIR}") 1395*da0073e9SAndroid Build Coastguard Worker message(STATUS "MAGMA LIBRARIES: ${MAGMA_LIBRARIES}") 1396*da0073e9SAndroid Build Coastguard Worker message(STATUS "MAGMA V2 check: ${MAGMA_V2}") 1397*da0073e9SAndroid Build Coastguard Worker else() 1398*da0073e9SAndroid Build Coastguard Worker message(STATUS "MAGMA not found. Compiling without MAGMA support") 1399*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_MAGMA OFF) 1400*da0073e9SAndroid Build Coastguard Worker endif() 1401*da0073e9SAndroid Build Coastguard Worker endif() 1402*da0073e9SAndroid Build Coastguard Worker elseif(USE_MAGMA) 1403*da0073e9SAndroid Build Coastguard Worker message(WARNING 1404*da0073e9SAndroid Build Coastguard Worker "Not compiling with MAGMA. Suppress this warning with " 1405*da0073e9SAndroid Build Coastguard Worker "-DUSE_MAGMA=OFF.") 1406*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_MAGMA OFF) 1407*da0073e9SAndroid Build Coastguard Worker endif() 1408*da0073e9SAndroid Build Coastguard Worker 1409*da0073e9SAndroid Build Coastguard Worker # ARM specific flags 1410*da0073e9SAndroid Build Coastguard Worker find_package(ARM) 1411*da0073e9SAndroid Build Coastguard Worker if(ASIMD_FOUND) 1412*da0073e9SAndroid Build Coastguard Worker message(STATUS "asimd/Neon found with compiler flag : -D__NEON__") 1413*da0073e9SAndroid Build Coastguard Worker add_compile_options(-D__NEON__) 1414*da0073e9SAndroid Build Coastguard Worker elseif(NEON_FOUND) 1415*da0073e9SAndroid Build Coastguard Worker if(APPLE) 1416*da0073e9SAndroid Build Coastguard Worker message(STATUS "Neon found with compiler flag : -D__NEON__") 1417*da0073e9SAndroid Build Coastguard Worker add_compile_options(-D__NEON__) 1418*da0073e9SAndroid Build Coastguard Worker else() 1419*da0073e9SAndroid Build Coastguard Worker message(STATUS "Neon found with compiler flag : -mfpu=neon -D__NEON__") 1420*da0073e9SAndroid Build Coastguard Worker add_compile_options(-mfpu=neon -D__NEON__) 1421*da0073e9SAndroid Build Coastguard Worker endif() 1422*da0073e9SAndroid Build Coastguard Worker endif() 1423*da0073e9SAndroid Build Coastguard Worker if(CORTEXA8_FOUND) 1424*da0073e9SAndroid Build Coastguard Worker message(STATUS "Cortex-A8 Found with compiler flag : -mcpu=cortex-a8") 1425*da0073e9SAndroid Build Coastguard Worker add_compile_options(-mcpu=cortex-a8 -fprefetch-loop-arrays) 1426*da0073e9SAndroid Build Coastguard Worker endif() 1427*da0073e9SAndroid Build Coastguard Worker if(CORTEXA9_FOUND) 1428*da0073e9SAndroid Build Coastguard Worker message(STATUS "Cortex-A9 Found with compiler flag : -mcpu=cortex-a9") 1429*da0073e9SAndroid Build Coastguard Worker add_compile_options(-mcpu=cortex-a9) 1430*da0073e9SAndroid Build Coastguard Worker endif() 1431*da0073e9SAndroid Build Coastguard Worker 1432*da0073e9SAndroid Build Coastguard Worker find_package(LAPACK) 1433*da0073e9SAndroid Build Coastguard Worker if(LAPACK_FOUND) 1434*da0073e9SAndroid Build Coastguard Worker set(USE_LAPACK 1) 1435*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_PRIVATE_DEPENDENCY_LIBS ${LAPACK_LIBRARIES}) 1436*da0073e9SAndroid Build Coastguard Worker endif() 1437*da0073e9SAndroid Build Coastguard Worker 1438*da0073e9SAndroid Build Coastguard Worker if(NOT USE_CUDA) 1439*da0073e9SAndroid Build Coastguard Worker message("disabling CUDA because NOT USE_CUDA is set") 1440*da0073e9SAndroid Build Coastguard Worker set(AT_CUDA_ENABLED 0) 1441*da0073e9SAndroid Build Coastguard Worker else() 1442*da0073e9SAndroid Build Coastguard Worker set(AT_CUDA_ENABLED 1) 1443*da0073e9SAndroid Build Coastguard Worker endif() 1444*da0073e9SAndroid Build Coastguard Worker 1445*da0073e9SAndroid Build Coastguard Worker if(NOT USE_ROCM) 1446*da0073e9SAndroid Build Coastguard Worker message("disabling ROCM because NOT USE_ROCM is set") 1447*da0073e9SAndroid Build Coastguard Worker message(STATUS "MIOpen not found. Compiling without MIOpen support") 1448*da0073e9SAndroid Build Coastguard Worker set(AT_ROCM_ENABLED 0) 1449*da0073e9SAndroid Build Coastguard Worker else() 1450*da0073e9SAndroid Build Coastguard Worker include_directories(BEFORE ${MIOPEN_INCLUDE_DIRS}) 1451*da0073e9SAndroid Build Coastguard Worker set(AT_ROCM_ENABLED 1) 1452*da0073e9SAndroid Build Coastguard Worker endif() 1453*da0073e9SAndroid Build Coastguard Worker 1454*da0073e9SAndroid Build Coastguard Worker if(USE_MKLDNN) 1455*da0073e9SAndroid Build Coastguard Worker if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) 1456*da0073e9SAndroid Build Coastguard Worker message(WARNING 1457*da0073e9SAndroid Build Coastguard Worker "x64 operating system is required for MKLDNN. " 1458*da0073e9SAndroid Build Coastguard Worker "Not compiling with MKLDNN. " 1459*da0073e9SAndroid Build Coastguard Worker "Turn this warning off by USE_MKLDNN=OFF.") 1460*da0073e9SAndroid Build Coastguard Worker set(USE_MKLDNN OFF) 1461*da0073e9SAndroid Build Coastguard Worker endif() 1462*da0073e9SAndroid Build Coastguard Worker if(USE_MKLDNN_ACL) 1463*da0073e9SAndroid Build Coastguard Worker set(AT_MKLDNN_ACL_ENABLED 1) 1464*da0073e9SAndroid Build Coastguard Worker endif() 1465*da0073e9SAndroid Build Coastguard Worker endif() 1466*da0073e9SAndroid Build Coastguard Worker if(USE_MKLDNN) 1467*da0073e9SAndroid Build Coastguard Worker include(${CMAKE_CURRENT_LIST_DIR}/public/mkldnn.cmake) 1468*da0073e9SAndroid Build Coastguard Worker if(MKLDNN_FOUND) 1469*da0073e9SAndroid Build Coastguard Worker set(AT_MKLDNN_ENABLED 1) 1470*da0073e9SAndroid Build Coastguard Worker include_directories(AFTER SYSTEM ${MKLDNN_INCLUDE_DIR}) 1471*da0073e9SAndroid Build Coastguard Worker else() 1472*da0073e9SAndroid Build Coastguard Worker message(WARNING "MKLDNN could not be found.") 1473*da0073e9SAndroid Build Coastguard Worker caffe2_update_option(USE_MKLDNN OFF) 1474*da0073e9SAndroid Build Coastguard Worker endif() 1475*da0073e9SAndroid Build Coastguard Worker else() 1476*da0073e9SAndroid Build Coastguard Worker message("disabling MKLDNN because USE_MKLDNN is not set") 1477*da0073e9SAndroid Build Coastguard Worker endif() 1478*da0073e9SAndroid Build Coastguard Worker 1479*da0073e9SAndroid Build Coastguard Worker if(UNIX AND NOT APPLE) 1480*da0073e9SAndroid Build Coastguard Worker include(CheckLibraryExists) 1481*da0073e9SAndroid Build Coastguard Worker # https://github.com/libgit2/libgit2/issues/2128#issuecomment-35649830 1482*da0073e9SAndroid Build Coastguard Worker CHECK_LIBRARY_EXISTS(rt clock_gettime "time.h" NEED_LIBRT) 1483*da0073e9SAndroid Build Coastguard Worker if(NEED_LIBRT) 1484*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS rt) 1485*da0073e9SAndroid Build Coastguard Worker set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} rt) 1486*da0073e9SAndroid Build Coastguard Worker endif(NEED_LIBRT) 1487*da0073e9SAndroid Build Coastguard Worker endif(UNIX AND NOT APPLE) 1488*da0073e9SAndroid Build Coastguard Worker 1489*da0073e9SAndroid Build Coastguard Worker if(UNIX) 1490*da0073e9SAndroid Build Coastguard Worker set(CMAKE_EXTRA_INCLUDE_FILES "sys/mman.h") 1491*da0073e9SAndroid Build Coastguard Worker CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP) 1492*da0073e9SAndroid Build Coastguard Worker if(HAVE_MMAP) 1493*da0073e9SAndroid Build Coastguard Worker add_definitions(-DHAVE_MMAP=1) 1494*da0073e9SAndroid Build Coastguard Worker endif(HAVE_MMAP) 1495*da0073e9SAndroid Build Coastguard Worker # done for lseek: https://www.gnu.org/software/libc/manual/html_node/File-Position-Primitive.html 1496*da0073e9SAndroid Build Coastguard Worker add_definitions(-D_FILE_OFFSET_BITS=64) 1497*da0073e9SAndroid Build Coastguard Worker CHECK_FUNCTION_EXISTS(shm_open HAVE_SHM_OPEN) 1498*da0073e9SAndroid Build Coastguard Worker if(HAVE_SHM_OPEN) 1499*da0073e9SAndroid Build Coastguard Worker add_definitions(-DHAVE_SHM_OPEN=1) 1500*da0073e9SAndroid Build Coastguard Worker endif(HAVE_SHM_OPEN) 1501*da0073e9SAndroid Build Coastguard Worker CHECK_FUNCTION_EXISTS(shm_unlink HAVE_SHM_UNLINK) 1502*da0073e9SAndroid Build Coastguard Worker if(HAVE_SHM_UNLINK) 1503*da0073e9SAndroid Build Coastguard Worker add_definitions(-DHAVE_SHM_UNLINK=1) 1504*da0073e9SAndroid Build Coastguard Worker endif(HAVE_SHM_UNLINK) 1505*da0073e9SAndroid Build Coastguard Worker CHECK_FUNCTION_EXISTS(malloc_usable_size HAVE_MALLOC_USABLE_SIZE) 1506*da0073e9SAndroid Build Coastguard Worker if(HAVE_MALLOC_USABLE_SIZE) 1507*da0073e9SAndroid Build Coastguard Worker add_definitions(-DHAVE_MALLOC_USABLE_SIZE=1) 1508*da0073e9SAndroid Build Coastguard Worker endif(HAVE_MALLOC_USABLE_SIZE) 1509*da0073e9SAndroid Build Coastguard Worker endif(UNIX) 1510*da0073e9SAndroid Build Coastguard Worker 1511*da0073e9SAndroid Build Coastguard Worker add_definitions(-DUSE_EXTERNAL_MZCRC) 1512*da0073e9SAndroid Build Coastguard Worker add_definitions(-DMINIZ_DISABLE_ZIP_READER_CRC32_CHECKS) 1513*da0073e9SAndroid Build Coastguard Worker 1514*da0073e9SAndroid Build Coastguard Worker find_package(ZVECTOR) # s390x simd support 1515*da0073e9SAndroid Build Coastguard Workerendif() 1516*da0073e9SAndroid Build Coastguard Worker 1517*da0073e9SAndroid Build Coastguard Worker# 1518*da0073e9SAndroid Build Coastguard Worker# End ATen checks 1519*da0073e9SAndroid Build Coastguard Worker# 1520*da0073e9SAndroid Build Coastguard Workerset(TEMP_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) 1521*da0073e9SAndroid Build Coastguard Workerset(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libs" FORCE) 1522*da0073e9SAndroid Build Coastguard Workeradd_subdirectory(${PROJECT_SOURCE_DIR}/third_party/fmt) 1523*da0073e9SAndroid Build Coastguard Worker 1524*da0073e9SAndroid Build Coastguard Worker# Disable compiler feature checks for `fmt`. 1525*da0073e9SAndroid Build Coastguard Worker# 1526*da0073e9SAndroid Build Coastguard Worker# CMake compiles a little program to check compiler features. Some of our build 1527*da0073e9SAndroid Build Coastguard Worker# configurations (notably the mobile build analyzer) will populate 1528*da0073e9SAndroid Build Coastguard Worker# CMAKE_CXX_FLAGS in ways that break feature checks. Since we already know 1529*da0073e9SAndroid Build Coastguard Worker# `fmt` is compatible with a superset of the compilers that PyTorch is, it 1530*da0073e9SAndroid Build Coastguard Worker# shouldn't be too bad to just disable the checks. 1531*da0073e9SAndroid Build Coastguard Workerset_target_properties(fmt-header-only PROPERTIES INTERFACE_COMPILE_FEATURES "") 1532*da0073e9SAndroid Build Coastguard Worker 1533*da0073e9SAndroid Build Coastguard Workerlist(APPEND Caffe2_DEPENDENCY_LIBS fmt::fmt-header-only) 1534*da0073e9SAndroid Build Coastguard Workerset(BUILD_SHARED_LIBS ${TEMP_BUILD_SHARED_LIBS} CACHE BOOL "Build shared libs" FORCE) 1535*da0073e9SAndroid Build Coastguard Worker 1536*da0073e9SAndroid Build Coastguard Worker# ---[ Kineto 1537*da0073e9SAndroid Build Coastguard Worker# edge profiler depends on KinetoProfiler but it only does cpu 1538*da0073e9SAndroid Build Coastguard Worker# profiling. Thus we dont need USE_CUDA/USE_ROCM 1539*da0073e9SAndroid Build Coastguard Workerif(USE_KINETO AND INTERN_BUILD_MOBILE AND NOT (BUILD_LITE_INTERPRETER AND USE_LITE_INTERPRETER_PROFILER)) 1540*da0073e9SAndroid Build Coastguard Worker message(STATUS "Not using libkineto in a mobile build.") 1541*da0073e9SAndroid Build Coastguard Worker set(USE_KINETO OFF) 1542*da0073e9SAndroid Build Coastguard Workerendif() 1543*da0073e9SAndroid Build Coastguard Worker 1544*da0073e9SAndroid Build Coastguard Workerif(USE_KINETO AND INTERN_BUILD_MOBILE AND USE_LITE_INTERPRETER_PROFILER AND (USE_CUDA OR USE_ROCM)) 1545*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Mobile build with profiler does not support CUDA or ROCM") 1546*da0073e9SAndroid Build Coastguard Workerendif() 1547*da0073e9SAndroid Build Coastguard Worker 1548*da0073e9SAndroid Build Coastguard Workerif(USE_KINETO) 1549*da0073e9SAndroid Build Coastguard Worker if((NOT USE_CUDA) OR MSVC) 1550*da0073e9SAndroid Build Coastguard Worker set(LIBKINETO_NOCUPTI ON CACHE STRING "" FORCE) 1551*da0073e9SAndroid Build Coastguard Worker else() 1552*da0073e9SAndroid Build Coastguard Worker set(LIBKINETO_NOCUPTI OFF CACHE STRING "") 1553*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using Kineto with CUPTI support") 1554*da0073e9SAndroid Build Coastguard Worker endif() 1555*da0073e9SAndroid Build Coastguard Worker 1556*da0073e9SAndroid Build Coastguard Worker if(NOT USE_ROCM) 1557*da0073e9SAndroid Build Coastguard Worker set(LIBKINETO_NOROCTRACER ON CACHE STRING "" FORCE) 1558*da0073e9SAndroid Build Coastguard Worker else() 1559*da0073e9SAndroid Build Coastguard Worker set(LIBKINETO_NOROCTRACER OFF CACHE STRING "") 1560*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using Kineto with Roctracer support") 1561*da0073e9SAndroid Build Coastguard Worker endif() 1562*da0073e9SAndroid Build Coastguard Worker 1563*da0073e9SAndroid Build Coastguard Worker if((NOT USE_XPU) OR WIN32) 1564*da0073e9SAndroid Build Coastguard Worker set(LIBKINETO_NOXPUPTI ON CACHE STRING "" FORCE) 1565*da0073e9SAndroid Build Coastguard Worker else() 1566*da0073e9SAndroid Build Coastguard Worker set(LIBKINETO_NOXPUPTI OFF CACHE STRING "") 1567*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using Kineto with XPUPTI support") 1568*da0073e9SAndroid Build Coastguard Worker endif() 1569*da0073e9SAndroid Build Coastguard Worker 1570*da0073e9SAndroid Build Coastguard Worker if(LIBKINETO_NOCUPTI AND LIBKINETO_NOROCTRACER AND LIBKINETO_NOXPUPTI) 1571*da0073e9SAndroid Build Coastguard Worker message(STATUS "Using CPU-only version of Kineto") 1572*da0073e9SAndroid Build Coastguard Worker endif() 1573*da0073e9SAndroid Build Coastguard Worker 1574*da0073e9SAndroid Build Coastguard Worker set(CAFFE2_THIRD_PARTY_ROOT "${PROJECT_SOURCE_DIR}/third_party" CACHE STRING "") 1575*da0073e9SAndroid Build Coastguard Worker set(KINETO_SOURCE_DIR "${CAFFE2_THIRD_PARTY_ROOT}/kineto/libkineto" CACHE STRING "") 1576*da0073e9SAndroid Build Coastguard Worker set(KINETO_BUILD_TESTS OFF CACHE BOOL "") 1577*da0073e9SAndroid Build Coastguard Worker set(KINETO_LIBRARY_TYPE "static" CACHE STRING "") 1578*da0073e9SAndroid Build Coastguard Worker 1579*da0073e9SAndroid Build Coastguard Worker message(STATUS "Configuring Kineto dependency:") 1580*da0073e9SAndroid Build Coastguard Worker message(STATUS " KINETO_SOURCE_DIR = ${KINETO_SOURCE_DIR}") 1581*da0073e9SAndroid Build Coastguard Worker message(STATUS " KINETO_BUILD_TESTS = ${KINETO_BUILD_TESTS}") 1582*da0073e9SAndroid Build Coastguard Worker message(STATUS " KINETO_LIBRARY_TYPE = ${KINETO_LIBRARY_TYPE}") 1583*da0073e9SAndroid Build Coastguard Worker 1584*da0073e9SAndroid Build Coastguard Worker if(NOT LIBKINETO_NOCUPTI) 1585*da0073e9SAndroid Build Coastguard Worker set(CUDA_SOURCE_DIR "${CUDA_TOOLKIT_ROOT_DIR}" CACHE STRING "") 1586*da0073e9SAndroid Build Coastguard Worker message(STATUS " CUDA_SOURCE_DIR = ${CUDA_SOURCE_DIR}") 1587*da0073e9SAndroid Build Coastguard Worker message(STATUS " CUDA_INCLUDE_DIRS = ${CUDA_INCLUDE_DIRS}") 1588*da0073e9SAndroid Build Coastguard Worker 1589*da0073e9SAndroid Build Coastguard Worker if(NOT MSVC) 1590*da0073e9SAndroid Build Coastguard Worker if(USE_CUPTI_SO) 1591*da0073e9SAndroid Build Coastguard Worker set(CUPTI_LIB_NAME "libcupti.so") 1592*da0073e9SAndroid Build Coastguard Worker else() 1593*da0073e9SAndroid Build Coastguard Worker set(CUPTI_LIB_NAME "libcupti_static.a") 1594*da0073e9SAndroid Build Coastguard Worker endif() 1595*da0073e9SAndroid Build Coastguard Worker else() 1596*da0073e9SAndroid Build Coastguard Worker set(CUPTI_LIB_NAME "cupti.lib") 1597*da0073e9SAndroid Build Coastguard Worker endif() 1598*da0073e9SAndroid Build Coastguard Worker 1599*da0073e9SAndroid Build Coastguard Worker find_library(CUPTI_LIBRARY_PATH ${CUPTI_LIB_NAME} PATHS 1600*da0073e9SAndroid Build Coastguard Worker ${CUDA_SOURCE_DIR} 1601*da0073e9SAndroid Build Coastguard Worker ${CUDA_SOURCE_DIR}/extras/CUPTI/lib64 1602*da0073e9SAndroid Build Coastguard Worker ${CUDA_SOURCE_DIR}/lib 1603*da0073e9SAndroid Build Coastguard Worker ${CUDA_SOURCE_DIR}/lib64 1604*da0073e9SAndroid Build Coastguard Worker NO_DEFAULT_PATH) 1605*da0073e9SAndroid Build Coastguard Worker 1606*da0073e9SAndroid Build Coastguard Worker find_path(CUPTI_INCLUDE_DIR cupti.h PATHS 1607*da0073e9SAndroid Build Coastguard Worker ${CUDA_SOURCE_DIR}/extras/CUPTI/include 1608*da0073e9SAndroid Build Coastguard Worker ${CUDA_INCLUDE_DIRS} 1609*da0073e9SAndroid Build Coastguard Worker ${CUDA_SOURCE_DIR} 1610*da0073e9SAndroid Build Coastguard Worker ${CUDA_SOURCE_DIR}/include 1611*da0073e9SAndroid Build Coastguard Worker NO_DEFAULT_PATH) 1612*da0073e9SAndroid Build Coastguard Worker 1613*da0073e9SAndroid Build Coastguard Worker if(CUPTI_LIBRARY_PATH AND CUPTI_INCLUDE_DIR) 1614*da0073e9SAndroid Build Coastguard Worker message(STATUS " CUPTI_INCLUDE_DIR = ${CUPTI_INCLUDE_DIR}") 1615*da0073e9SAndroid Build Coastguard Worker set(CUDA_cupti_LIBRARY ${CUPTI_LIBRARY_PATH}) 1616*da0073e9SAndroid Build Coastguard Worker message(STATUS " CUDA_cupti_LIBRARY = ${CUDA_cupti_LIBRARY}") 1617*da0073e9SAndroid Build Coastguard Worker message(STATUS "Found CUPTI") 1618*da0073e9SAndroid Build Coastguard Worker set(LIBKINETO_NOCUPTI OFF CACHE STRING "" FORCE) 1619*da0073e9SAndroid Build Coastguard Worker 1620*da0073e9SAndroid Build Coastguard Worker # I've only tested this sanity check on Linux; if someone 1621*da0073e9SAndroid Build Coastguard Worker # runs into this bug on another platform feel free to 1622*da0073e9SAndroid Build Coastguard Worker # generalize it accordingly 1623*da0073e9SAndroid Build Coastguard Worker if(NOT USE_CUPTI_SO AND UNIX) 1624*da0073e9SAndroid Build Coastguard Worker include(CheckCXXSourceRuns) 1625*da0073e9SAndroid Build Coastguard Worker # rt is handled by the CMAKE_REQUIRED_LIBRARIES set above 1626*da0073e9SAndroid Build Coastguard Worker if(NOT APPLE) 1627*da0073e9SAndroid Build Coastguard Worker set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} "dl" "pthread") 1628*da0073e9SAndroid Build Coastguard Worker endif() 1629*da0073e9SAndroid Build Coastguard Worker set(CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--whole-archive,${CUPTI_LIBRARY_PATH},--no-whole-archive") 1630*da0073e9SAndroid Build Coastguard Worker check_cxx_source_runs("#include <stdexcept> 1631*da0073e9SAndroid Build Coastguard Worker int main() { 1632*da0073e9SAndroid Build Coastguard Worker try { 1633*da0073e9SAndroid Build Coastguard Worker throw std::runtime_error(\"error\"); 1634*da0073e9SAndroid Build Coastguard Worker } catch (...) { 1635*da0073e9SAndroid Build Coastguard Worker return 0; 1636*da0073e9SAndroid Build Coastguard Worker } 1637*da0073e9SAndroid Build Coastguard Worker return 1; 1638*da0073e9SAndroid Build Coastguard Worker }" EXCEPTIONS_WORK) 1639*da0073e9SAndroid Build Coastguard Worker set(CMAKE_REQUIRED_LINK_OPTIONS "") 1640*da0073e9SAndroid Build Coastguard Worker if(NOT EXCEPTIONS_WORK) 1641*da0073e9SAndroid Build Coastguard Worker message(FATAL_ERROR "Detected that statically linking against CUPTI causes exceptions to stop working. See https://github.com/pytorch/pytorch/issues/57744 for more details. Perhaps try: USE_CUPTI_SO=1 python setup.py develop --cmake") 1642*da0073e9SAndroid Build Coastguard Worker endif() 1643*da0073e9SAndroid Build Coastguard Worker endif() 1644*da0073e9SAndroid Build Coastguard Worker 1645*da0073e9SAndroid Build Coastguard Worker else() 1646*da0073e9SAndroid Build Coastguard Worker message(STATUS "Could not find CUPTI library, using CPU-only Kineto build") 1647*da0073e9SAndroid Build Coastguard Worker set(LIBKINETO_NOCUPTI ON CACHE STRING "" FORCE) 1648*da0073e9SAndroid Build Coastguard Worker endif() 1649*da0073e9SAndroid Build Coastguard Worker endif() 1650*da0073e9SAndroid Build Coastguard Worker 1651*da0073e9SAndroid Build Coastguard Worker if(NOT LIBKINETO_NOROCTRACER) 1652*da0073e9SAndroid Build Coastguard Worker if("$ENV{ROCM_SOURCE_DIR}" STREQUAL "") 1653*da0073e9SAndroid Build Coastguard Worker set(ENV{ROCM_SOURCE_DIR} "/opt/rocm") 1654*da0073e9SAndroid Build Coastguard Worker endif() 1655*da0073e9SAndroid Build Coastguard Worker endif() 1656*da0073e9SAndroid Build Coastguard Worker 1657*da0073e9SAndroid Build Coastguard Worker if(NOT TARGET kineto) 1658*da0073e9SAndroid Build Coastguard Worker add_subdirectory("${KINETO_SOURCE_DIR}") 1659*da0073e9SAndroid Build Coastguard Worker set_property(TARGET kineto PROPERTY POSITION_INDEPENDENT_CODE ON) 1660*da0073e9SAndroid Build Coastguard Worker endif() 1661*da0073e9SAndroid Build Coastguard Worker list(APPEND Caffe2_DEPENDENCY_LIBS kineto) 1662*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DUSE_KINETO") 1663*da0073e9SAndroid Build Coastguard Worker if(LIBKINETO_NOCUPTI) 1664*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DLIBKINETO_NOCUPTI") 1665*da0073e9SAndroid Build Coastguard Worker endif() 1666*da0073e9SAndroid Build Coastguard Worker if(LIBKINETO_NOROCTRACER) 1667*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DLIBKINETO_NOROCTRACER") 1668*da0073e9SAndroid Build Coastguard Worker endif() 1669*da0073e9SAndroid Build Coastguard Worker if(LIBKINETO_NOXPUPTI) 1670*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DLIBKINETO_NOXPUPTI=ON") 1671*da0073e9SAndroid Build Coastguard Worker else() 1672*da0073e9SAndroid Build Coastguard Worker string(APPEND CMAKE_CXX_FLAGS " -DLIBKINETO_NOXPUPTI=OFF") 1673*da0073e9SAndroid Build Coastguard Worker endif() 1674*da0073e9SAndroid Build Coastguard Worker if(LIBKINETO_NOCUPTI AND LIBKINETO_NOROCTRACER AND LIBKINETO_NOXPUPTI) 1675*da0073e9SAndroid Build Coastguard Worker message(STATUS "Configured Kineto (CPU)") 1676*da0073e9SAndroid Build Coastguard Worker else() 1677*da0073e9SAndroid Build Coastguard Worker message(STATUS "Configured Kineto") 1678*da0073e9SAndroid Build Coastguard Worker endif() 1679*da0073e9SAndroid Build Coastguard Workerendif() 1680*da0073e9SAndroid Build Coastguard Worker 1681*da0073e9SAndroid Build Coastguard Worker# Include google/FlatBuffers 1682*da0073e9SAndroid Build Coastguard Workerinclude(${CMAKE_CURRENT_LIST_DIR}/FlatBuffers.cmake) 1683*da0073e9SAndroid Build Coastguard Worker 1684*da0073e9SAndroid Build Coastguard Worker# Include cpp-httplib 1685*da0073e9SAndroid Build Coastguard Workeradd_library(httplib INTERFACE IMPORTED) 1686*da0073e9SAndroid Build Coastguard Workertarget_include_directories(httplib SYSTEM INTERFACE ${PROJECT_SOURCE_DIR}/third_party/cpp-httplib) 1687*da0073e9SAndroid Build Coastguard Worker 1688*da0073e9SAndroid Build Coastguard Worker# Include nlohmann-json 1689*da0073e9SAndroid Build Coastguard Workeradd_library(nlohmann INTERFACE IMPORTED) 1690*da0073e9SAndroid Build Coastguard Workerinclude_directories(nlohmann SYSTEM INTERFACE ${PROJECT_SOURCE_DIR}/third_party/nlohmann/include) 1691