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