1cmake_minimum_required(VERSION 3.18) 2project(functorch) 3set(CMAKE_CXX_STANDARD 17) 4 5include(GNUInstallDirs) 6include(CMakePackageConfigHelpers) 7 8set(FT_DIR csrc) 9file(GLOB_RECURSE FT_SOURCES ${FT_DIR}/*.cpp ${FT_DIR}/*.c) 10 11add_library(${PROJECT_NAME} MODULE ${FT_SOURCES}) 12target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) 13target_compile_definitions(${PROJECT_NAME} PRIVATE FUNCTORCH_BUILD_MAIN_LIB) 14target_compile_definitions(${PROJECT_NAME} PRIVATE TORCH_EXTENSION_NAME=_C) 15target_compile_definitions(${PROJECT_NAME} PRIVATE TORCH_API_INCLUDE_EXTENSION_H) 16target_compile_options(${PROJECT_NAME} PRIVATE ${TORCH_PYTHON_COMPILE_OPTIONS}) 17target_compile_options_if_supported(${PROJECT_NAME} "-Wmissing-prototypes") 18target_compile_options_if_supported(${PROJECT_NAME} "-Werror=missing-prototypes") 19if(BUILD_LIBTORCHLESS) 20 target_link_libraries(${PROJECT_NAME} PRIVATE ${TORCH_LIB} torch_python) 21else() 22 # functorch cannot use the alias to build on windows 23 target_link_libraries(${PROJECT_NAME} PRIVATE torch torch_python) 24endif() 25target_link_libraries(${PROJECT_NAME} PRIVATE pybind::pybind11) 26 27set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY 28 ${CMAKE_BINARY_DIR}/functorch) 29set_target_properties(${PROJECT_NAME} PROPERTIES INSTALL_RPATH "${_rpath_portable_origin}/../torch/lib") 30 31# Copy-pasted prefix/suffix logic for Python extensions from 32# https://github.com/pytorch/pytorch/blob/33bb8ae350611760139457b85842b1d7edf9aa11/caffe2/CMakeLists.txt#L1975 33# https://github.com/pytorch/pytorch/blob/33bb8ae350611760139457b85842b1d7edf9aa11/caffe2/CMakeLists.txt#L2022 34# TODO: It would be good to be able to use Python3_add_library target, but it does not work in many cases 35set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" DEBUG_POSTFIX "") 36if(WIN32) 37 set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".pyd") 38else() 39 set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".so") 40endif() 41# Needed to link functorch on MacOS 42if(NOT ${TORCH_PYTHON_LINK_FLAGS} STREQUAL "") 43 set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS ${TORCH_PYTHON_LINK_FLAGS}) 44endif() 45install(TARGETS ${PROJECT_NAME} DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}") 46