xref: /aosp_15_r20/external/pytorch/test/edge/CMakeLists.txt (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1cmake_minimum_required(VERSION 3.1)
2
3set(TORCH_ROOT ${CMAKE_CURRENT_LIST_DIR}/../..)
4set(TEST_ROOT ${TORCH_ROOT}/test/edge)
5set(OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/out)
6file(GLOB_RECURSE all_python "${TORCH_ROOT}/torchgen/*.py")
7include(${TORCH_ROOT}/cmake/public/utils.cmake)
8append_cxx_flag_if_supported("-Wno-unused-private-field" CMAKE_CXX_FLAGS)
9
10# Generate unboxing kernels
11set(GEN_COMMAND
12        "${Python_EXECUTABLE}" -m torchgen.gen_executorch
13        --source-path=${TEST_ROOT}
14        --install-dir=${OUTPUT_DIRECTORY}
15        --tags-path=${TORCH_ROOT}/aten/src/ATen/native/tags.yaml
16        --aten-yaml-path=${TORCH_ROOT}/aten/src/ATen/native/native_functions.yaml
17        --use-aten-lib
18        --op-selection-yaml-path=${TEST_ROOT}/selected_operators.yaml
19        --custom-ops-yaml-path=${TEST_ROOT}/custom_ops.yaml
20        )
21set(GEN_COMMAND_sources
22        ${OUTPUT_DIRECTORY}/RegisterCodegenUnboxedKernelsEverything.cpp
23        ${OUTPUT_DIRECTORY}/RegisterCPUCustomOps.cpp
24        ${OUTPUT_DIRECTORY}/Functions.h
25        ${OUTPUT_DIRECTORY}/NativeFunctions.h
26        ${OUTPUT_DIRECTORY}/CustomOpsNativeFunctions.h
27        )
28message(STATUS "Generating sources for unboxing kernels ${GEN_COMMAND}")
29add_custom_command(
30        COMMENT "Generating sources"
31        OUTPUT ${GEN_COMMAND_sources}
32        COMMAND ${GEN_COMMAND}
33        DEPENDS
34        ${all_python}
35        ${TORCH_ROOT}/aten/src/ATen/native/native_functions.yaml
36        ${TORCH_ROOT}/aten/src/ATen/native/tags.yaml
37        ${TEST_ROOT}/templates/Functions.h
38        ${TEST_ROOT}/templates/NativeFunctions.h
39        ${TEST_ROOT}/templates/RegisterCodegenUnboxedKernels.cpp
40        ${TEST_ROOT}/templates/RegisterDispatchKeyCustomOps.cpp
41        WORKING_DIRECTORY ${TORCH_ROOT}
42)
43add_custom_target(unbox_target DEPENDS ${GEN_COMMAND_sources})
44
45add_library(unbox_lib STATIC
46        ${GEN_COMMAND_sources}
47        ${TEST_ROOT}/operator_registry.cpp
48        ${TEST_ROOT}/custom_ops.cpp
49        )
50target_include_directories(unbox_lib PUBLIC ${TEST_ROOT} ${ATen_CPU_INCLUDE})
51target_link_libraries(unbox_lib PUBLIC torch_cpu)
52target_compile_definitions(unbox_lib PUBLIC USE_ATEN_LIB)
53
54add_executable(test_edge_op_registration
55        ${TEST_ROOT}/test_operator_registration.cpp
56        ${TEST_ROOT}/test_main.cpp
57        )
58
59target_compile_definitions(test_edge_op_registration PRIVATE USE_GTEST)
60
61set(TEST_DEPENDENCIES gtest unbox_lib)
62
63target_link_libraries(test_edge_op_registration PRIVATE
64  ${TEST_DEPENDENCIES}
65)
66if((CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") OR (APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
67  target_link_options(test_edge_op_registration PRIVATE
68          "-Wl,-force_load,$<TARGET_FILE:unbox_lib>"
69          )
70elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
71  target_link_options(test_edge_op_registration PRIVATE
72          "-Wl,--whole-archive,$<TARGET_FILE:unbox_lib>,--no-whole-archive"
73          )
74endif()
75if(INSTALL_TEST)
76  install(TARGETS test_edge_op_registration DESTINATION bin)
77endif()
78