| cmake_minimum_required(VERSION 3.10 FATAL_ERROR) |
| project(c10 CXX) |
| |
| set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ standard whose features are requested to build this target.") |
| set(CMAKE_EXPORT_COMPILE_COMMANDS ON) |
| |
| # Main build file for the C10 library. |
| # |
| # Note that the C10 library should maintain minimal dependencies - especially, |
| # it should not depend on any library that is implementation specific or |
| # backend specific. It should in particular NOT be dependent on any generated |
| # protobuf header files, because protobuf header files will transitively force |
| # one to link against a specific protobuf version. |
| |
| # ---[ Configure macro file. |
| set(C10_USE_GFLAGS ${USE_GFLAGS}) # used in cmake_macros.h.in |
| set(C10_USE_GLOG ${USE_GLOG}) # used in cmake_macros.h.in |
| set(C10_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) # used in cmake_macros.h.in |
| set(C10_USE_NUMA ${USE_NUMA}) |
| set(C10_USE_MSVC_STATIC_RUNTIME ${CAFFE2_USE_MSVC_STATIC_RUNTIME}) |
| configure_file( |
| ${CMAKE_CURRENT_LIST_DIR}/macros/cmake_macros.h.in |
| ${CMAKE_BINARY_DIR}/c10/macros/cmake_macros.h) |
| |
| # Note: if you want to add ANY dependency to the c10 library, make sure you |
| # check with the core PyTorch developers as the dependency will be |
| # transitively passed on to all libraries dependent on PyTorch. |
| file(GLOB C10_SRCS |
| *.cpp |
| core/*.cpp |
| core/impl/*.cpp |
| mobile/*.cpp |
| macros/*.cpp |
| util/*.cpp |
| ) |
| file(GLOB C10_HEADERS |
| *.h |
| core/*.h |
| core/impl/*.h |
| mobile/*.h |
| macros/*.h |
| util/*.h |
| ) |
| add_library(c10 ${C10_SRCS} ${C10_HEADERS}) |
| if(HAVE_SOVERSION) |
| set_target_properties(c10 PROPERTIES |
| VERSION ${TORCH_VERSION} SOVERSION ${TORCH_SOVERSION}) |
| endif() |
| # If building shared library, set dllimport/dllexport proper. |
| target_compile_options(c10 PRIVATE "-DC10_BUILD_MAIN_LIB") |
| # Enable hidden visibility if compiler supports it. |
| if(${COMPILER_SUPPORTS_HIDDEN_VISIBILITY}) |
| target_compile_options(c10 PRIVATE "-fvisibility=hidden") |
| endif() |
| if(HAS_WERROR_SIGN_COMPARE AND WERROR) |
| target_compile_options(c10 PRIVATE "-Werror=sign-compare") |
| endif() |
| |
| # ---[ Dependency of c10 |
| if(${USE_GFLAGS}) |
| target_link_libraries(c10 PUBLIC gflags) |
| endif() |
| |
| if(${USE_GLOG}) |
| target_link_libraries(c10 PUBLIC glog::glog) |
| endif() |
| target_link_libraries(c10 PRIVATE fmt::fmt-header-only) |
| |
| find_package(Backtrace) |
| if(Backtrace_FOUND) |
| target_include_directories(c10 PRIVATE ${Backtrace_INCLUDE_DIRS}) |
| target_link_libraries(c10 PRIVATE ${Backtrace_LIBRARIES}) |
| target_compile_definitions(c10 PRIVATE SUPPORTS_BACKTRACE=1) |
| else() |
| target_compile_definitions(c10 PRIVATE SUPPORTS_BACKTRACE=0) |
| endif() |
| |
| if(USE_NUMA) |
| message(STATUS "NUMA paths:") |
| message(STATUS ${Numa_INCLUDE_DIR}) |
| message(STATUS ${Numa_LIBRARIES}) |
| include_directories(SYSTEM ${Numa_INCLUDE_DIR}) |
| target_link_libraries(c10 PRIVATE ${Numa_LIBRARIES}) |
| else() |
| message(STATUS "don't use NUMA") |
| endif() |
| |
| if(ANDROID) |
| target_link_libraries(c10 PRIVATE log) |
| endif() |
| |
| target_include_directories( |
| c10 PUBLIC |
| $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../> |
| $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}> |
| $<INSTALL_INTERFACE:include>) |
| |
| add_subdirectory(test) |
| add_subdirectory(benchmark) |
| |
| if(USE_CUDA) |
| add_subdirectory(cuda) |
| endif() |
| |
| if(USE_ROCM) |
| # NB: This directory is generated by the HIPIFY script; it's |
| # not checked in |
| add_subdirectory(hip) |
| endif() |
| |
| # ---[ Installation |
| # Note: for now, we will put all export path into one single Caffe2Targets group |
| # to deal with the cmake deployment need. Inside the Caffe2Targets set, the |
| # individual libraries like libc10.so and libcaffe2.so are still self-contained. |
| install(TARGETS c10 EXPORT Caffe2Targets DESTINATION lib) |
| install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR} |
| DESTINATION include |
| FILES_MATCHING PATTERN "*.h") |
| install(FILES ${CMAKE_BINARY_DIR}/c10/macros/cmake_macros.h |
| DESTINATION include/c10/macros) |
| |
| if(MSVC AND C10_BUILD_SHARED_LIBS) |
| install(FILES $<TARGET_PDB_FILE:c10> DESTINATION lib OPTIONAL) |
| endif() |