xref: /aosp_15_r20/external/pytorch/functorch/CMakeLists.txt (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
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