mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/30769 The TorchConfig.cmake is the public cmake we produce in install folder for 3rd party client code to get all libtorch dependencies easily. Apparently this build flow is not well covered by our CI (which is focused on 1st party build / shared libraries?) as the little dummy project for code analysis testing purpose was broken by #30315 without fail any CI. Fixed the problem for mobile build and add the dummy project build to mobile CI as well. Test Plan: - make sure new CI pass; Differential Revision: D18825054 Pulled By: ljk53 fbshipit-source-id: 80506f3875ffbc1a191154bb9e3621c621e08b12
126 lines
4.3 KiB
CMake
126 lines
4.3 KiB
CMake
# FindTorch
|
|
# -------
|
|
#
|
|
# Finds the Torch library
|
|
#
|
|
# This will define the following variables:
|
|
#
|
|
# TORCH_FOUND -- True if the system has the Torch library
|
|
# TORCH_INCLUDE_DIRS -- The include directories for torch
|
|
# TORCH_LIBRARIES -- Libraries to link against
|
|
# TORCH_CXX_FLAGS -- Additional (required) compiler flags
|
|
#
|
|
# and the following imported targets:
|
|
#
|
|
# torch
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
|
|
if (DEFINED ENV{TORCH_INSTALL_PREFIX})
|
|
set(TORCH_INSTALL_PREFIX $ENV{TORCH_INSTALL_PREFIX})
|
|
else()
|
|
# Assume we are in <install-prefix>/share/cmake/Torch/TorchConfig.cmake
|
|
get_filename_component(CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
|
get_filename_component(TORCH_INSTALL_PREFIX "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
|
|
endif()
|
|
|
|
# Include directories.
|
|
if (EXISTS "${TORCH_INSTALL_PREFIX}/include")
|
|
set(TORCH_INCLUDE_DIRS
|
|
${TORCH_INSTALL_PREFIX}/include
|
|
${TORCH_INSTALL_PREFIX}/include/torch/csrc/api/include)
|
|
else()
|
|
set(TORCH_INCLUDE_DIRS
|
|
${TORCH_INSTALL_PREFIX}/include
|
|
${TORCH_INSTALL_PREFIX}/include/torch/csrc/api/include)
|
|
endif()
|
|
|
|
# Library dependencies.
|
|
if (@BUILD_SHARED_LIBS@)
|
|
find_package(Caffe2 REQUIRED PATHS ${CMAKE_CURRENT_LIST_DIR}/../Caffe2)
|
|
set(TORCH_LIBRARIES torch ${Caffe2_MAIN_LIBS})
|
|
else()
|
|
add_library(torch STATIC IMPORTED) # set imported_location at the bottom
|
|
set(TORCH_LIBRARIES torch)
|
|
endif()
|
|
|
|
find_library(C10_LIBRARY c10 PATHS "${TORCH_INSTALL_PREFIX}/lib")
|
|
list(APPEND TORCH_LIBRARIES ${C10_LIBRARY})
|
|
|
|
# We need manually add dependent libraries when they are not linked into the
|
|
# shared library.
|
|
# TODO: this list might be incomplete.
|
|
if (NOT @BUILD_SHARED_LIBS@)
|
|
find_library(TORCH_CPU_LIBRARY torch_cpu PATHS "${TORCH_INSTALL_PREFIX}/lib")
|
|
list(APPEND TORCH_LIBRARIES ${TORCH_CPU_LIBRARY})
|
|
|
|
if (@USE_NNPACK@)
|
|
find_library(NNPACK_LIBRARY nnpack PATHS "${TORCH_INSTALL_PREFIX}/lib")
|
|
list(APPEND TORCH_LIBRARIES ${NNPACK_LIBRARY})
|
|
endif()
|
|
|
|
if (@USE_PYTORCH_QNNPACK@)
|
|
find_library(PYTORCH_QNNPACK_LIBRARY pytorch_qnnpack PATHS "${TORCH_INSTALL_PREFIX}/lib")
|
|
list(APPEND TORCH_LIBRARIES ${PYTORCH_QNNPACK_LIBRARY})
|
|
endif()
|
|
|
|
if (@INTERN_USE_EIGEN_BLAS@)
|
|
find_library(EIGEN_BLAS_LIBRARY eigen_blas PATHS "${TORCH_INSTALL_PREFIX}/lib")
|
|
list(APPEND TORCH_LIBRARIES ${EIGEN_BLAS_LIBRARY})
|
|
endif()
|
|
|
|
find_library(CPUINFO_LIBRARY cpuinfo PATHS "${TORCH_INSTALL_PREFIX}/lib")
|
|
list(APPEND TORCH_LIBRARIES ${CPUINFO_LIBRARY})
|
|
|
|
find_library(CLOG_LIBRARY clog PATHS "${TORCH_INSTALL_PREFIX}/lib")
|
|
list(APPEND TORCH_LIBRARIES ${CLOG_LIBRARY})
|
|
endif()
|
|
|
|
if (@USE_CUDA@)
|
|
if(MSVC)
|
|
set(NVTOOLEXT_HOME "C:/Program Files/NVIDIA Corporation/NvToolsExt")
|
|
if ($ENV{NVTOOLEXT_HOME})
|
|
set(NVTOOLEXT_HOME $ENV{NVTOOLEXT_HOME})
|
|
endif()
|
|
set(TORCH_CUDA_LIBRARIES
|
|
${NVTOOLEXT_HOME}/lib/x64/nvToolsExt64_1.lib
|
|
${CUDA_LIBRARIES})
|
|
list(APPEND TORCH_INCLUDE_DIRS ${NVTOOLEXT_HOME}/include)
|
|
find_library(CAFFE2_NVRTC_LIBRARY caffe2_nvrtc PATHS "${TORCH_INSTALL_PREFIX}/lib")
|
|
list(APPEND TORCH_CUDA_LIBRARIES ${CAFFE2_NVRTC_LIBRARY})
|
|
elseif(APPLE)
|
|
set(TORCH_CUDA_LIBRARIES
|
|
${CUDA_TOOLKIT_ROOT_DIR}/lib/libcudart.dylib
|
|
${CUDA_TOOLKIT_ROOT_DIR}/lib/libnvrtc.dylib
|
|
${CUDA_TOOLKIT_ROOT_DIR}/lib/libnvToolsExt.dylib
|
|
${CUDA_LIBRARIES})
|
|
else()
|
|
find_library(LIBNVTOOLSEXT libnvToolsExt.so PATHS ${CUDA_TOOLKIT_ROOT_DIR}/lib64/)
|
|
set(TORCH_CUDA_LIBRARIES
|
|
${CUDA_CUDA_LIB}
|
|
${CUDA_NVRTC_LIB}
|
|
${LIBNVTOOLSEXT}
|
|
${CUDA_LIBRARIES})
|
|
endif()
|
|
find_library(C10_CUDA_LIBRARY c10_cuda PATHS "${TORCH_INSTALL_PREFIX}/lib")
|
|
list(APPEND TORCH_CUDA_LIBRARIES ${C10_CUDA_LIBRARY})
|
|
list(APPEND TORCH_LIBRARIES ${TORCH_CUDA_LIBRARIES})
|
|
endif()
|
|
|
|
# When we build libtorch with the old GCC ABI, dependent libraries must too.
|
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
set(TORCH_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=@GLIBCXX_USE_CXX11_ABI@")
|
|
endif()
|
|
|
|
find_library(TORCH_LIBRARY torch PATHS "${TORCH_INSTALL_PREFIX}/lib")
|
|
set_target_properties(torch PROPERTIES
|
|
IMPORTED_LOCATION "${TORCH_LIBRARY}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${TORCH_INCLUDE_DIRS}"
|
|
CXX_STANDARD 14
|
|
)
|
|
if (TORCH_CXX_FLAGS)
|
|
set_property(TARGET torch PROPERTY INTERFACE_COMPILE_OPTIONS "${TORCH_CXX_FLAGS}")
|
|
endif()
|
|
|
|
find_package_handle_standard_args(torch DEFAULT_MSG TORCH_LIBRARY TORCH_INCLUDE_DIRS)
|