| # 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 to |
| # |
| # and the following imported targets: |
| # |
| # Torch |
| # |
| # and the following functions: |
| # |
| # torch_add_custom_op_library(<name> <source_files>) |
| |
| if ($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. |
| set(TORCH_INCLUDE_DIRS "${TORCH_INSTALL_PREFIX}/lib/include") |
| |
| # Library dependencies. |
| find_package(Caffe2 REQUIRED) |
| find_library(TORCH_LIBRARY torch PATHS "${TORCH_INSTALL_PREFIX}/lib") |
| |
| set(TORCH_LIBRARIES ${TORCH_LIBRARY} ${Caffe2_MAIN_LIBS}) |
| 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") |
| 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() |
| set(TORCH_CUDA_LIBRARIES |
| ${CUDA_CUDA_LIB} |
| ${CUDA_NVRTC_LIB} |
| ${CUDA_TOOLKIT_ROOT_DIR}/lib64/libnvToolsExt.so |
| ${CUDA_LIBRARIES}) |
| endif() |
| list(APPEND TORCH_LIBRARIES ${TORCH_CUDA_LIBRARIES}) |
| endif() |
| |
| # Creates a shared library <name> with the correct include directories |
| # and linker flags set to include Torch header files and link with Torch |
| # libraries. Also sets the C++ standard version to C++11. All options |
| # can be override by specifying further options on the `<name>` CMake target. |
| function(torch_add_custom_op_library name source_files) |
| add_library(${name} SHARED ${source_files}) |
| target_include_directories(${name} PUBLIC "${TORCH_INCLUDE_DIRS}") |
| target_link_libraries(${name} "${TORCH_LIBRARIES}") |
| set_property(TARGET ${name} PROPERTY CXX_STANDARD 11) |
| endfunction(torch_add_custom_op_library) |