cmake_minimum_required(VERSION 3.16)
set(PKG_NAME AscendOps)
project(${PKG_NAME} VERSION 1.0.0)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
include(cmake/ascend.cmake)
include(cmake/python.cmake)
include(cmake/torch.cmake)
include(cmake/torch_npu.cmake)
include(cmake/func.cmake)
set(NPU_ARCH "ascend910b" CACHE STRING "NPU architecture")
set(EXTENSION_MODULE_NAME "ascend_ops" CACHE STRING "Extension module name")
set(INCLUDE_DIRECTORIES
${Python3_INCLUDE_DIRS}
${TORCH_INCLUDE_DIRS}
${TORCH_NPU_INCLUDE_PATH}
${ASCEND_INCLUDE_DIRS}
)
set(LINK_DIRECTORIES
${TORCH_NPU_LIB_PATH}
${ASCEND_DIR}/lib64
)
set(LINK_LIBRARIES
${TORCH_LIBRARIES}
torch_npu
ascendcl
platform
register
tiling_api
runtime
)
set(COMPILE_OPTIONS
${TORCH_CXX_FLAGS}
-O3
-fdiagnostics-color=always
-w
-DEXTENSION_MODULE_NAME=${EXTENSION_MODULE_NAME}
)
set(OBJECTS_LIST "" CACHE INTERNAL "List of objects")
message(STATUS "OBJECTS_LIST before adding sources: ${OBJECTS_LIST}")
add_subdirectory(csrc)
message(STATUS "OBJECTS_LIST after adding sources: ${OBJECTS_LIST}")
set("EXTENSION_CPP" ${CMAKE_CURRENT_SOURCE_DIR}/csrc/extension.cpp)
add_library(_C SHARED
${EXTENSION_CPP}
${OBJECTS_LIST}
)
set_target_properties(_C PROPERTIES
POSITION_INDEPENDENT_CODE ON
PREFIX ""
SUFFIX ".abi3.so"
OUTPUT_NAME "_C"
)
target_compile_definitions(_C PRIVATE Py_LIMITED_API=0x03080000)
target_compile_options(_C PRIVATE ${COMPILE_OPTIONS})
target_include_directories(_C PRIVATE ${INCLUDE_DIRECTORIES})
target_link_directories(_C PRIVATE ${LINK_DIRECTORIES})
target_link_libraries(_C PRIVATE ${LINK_LIBRARIES})
add_custom_command(TARGET _C POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
$<TARGET_FILE:_C>
${CMAKE_CURRENT_SOURCE_DIR}/${EXTENSION_MODULE_NAME}/$<TARGET_FILE_NAME:_C>
COMMENT "Copying compiled extension $<TARGET_FILE_NAME:_C> to ${CMAKE_CURRENT_SOURCE_DIR}/${EXTENSION_MODULE_NAME}/"
)