cmake_minimum_required(VERSION 3.18)
project(sysHAX_adapter_cpu_extension)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Python3 COMPONENTS Interpreter Development.Module REQUIRED)
execute_process(
COMMAND "${Python3_EXECUTABLE}" -c "import sysconfig; print(sysconfig.get_config_var('EXT_SUFFIX') or '')"
OUTPUT_VARIABLE PY_EXT_SUFFIX
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT PY_EXT_SUFFIX)
set(PY_EXT_SUFFIX ".so")
endif()
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
find_library(TORCH_PYTHON_LIBRARY torch_python PATHS "${TORCH_INSTALL_PREFIX}/lib")
if(NOT TORCH_PYTHON_LIBRARY)
message(WARNING "libtorch_python not found under ${TORCH_INSTALL_PREFIX}/lib; Python extension may fail to import.")
endif()
macro(define_gpu_extension_target EXT_NAME)
set(options USE_SABI WITH_SOABI)
set(oneValueArgs DESTINATION LANGUAGE)
set(multiValueArgs SOURCES LIBRARIES COMPILE_FLAGS)
cmake_parse_arguments(EXT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
add_library(${EXT_NAME} SHARED ${EXT_SOURCES})
target_compile_definitions(${EXT_NAME} PRIVATE TORCH_EXTENSION_NAME=${EXT_NAME})
target_include_directories(${EXT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/csrc
${Python3_INCLUDE_DIRS}
${TORCH_INCLUDE_DIRS}
)
if(EXT_COMPILE_FLAGS)
target_compile_options(${EXT_NAME} PRIVATE ${EXT_COMPILE_FLAGS})
endif()
target_link_libraries(${EXT_NAME} PRIVATE ${TORCH_LIBRARIES} Python3::Module)
if(TORCH_PYTHON_LIBRARY)
target_link_libraries(${EXT_NAME} PRIVATE ${TORCH_PYTHON_LIBRARY})
endif()
if(EXT_LIBRARIES)
target_link_libraries(${EXT_NAME} PRIVATE ${EXT_LIBRARIES})
endif()
if(EXT_DESTINATION)
set_target_properties(${EXT_NAME} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${EXT_DESTINATION}
)
endif()
set_target_properties(${EXT_NAME} PROPERTIES
PREFIX ""
SUFFIX "${PY_EXT_SUFFIX}"
)
endmacro()
include(csrc/cpu.cmake)
option(BUILD_TESTS "Build C++ unit tests" OFF)
if(BUILD_TESTS)
enable_testing()
add_subdirectory(test/cpp)
endif()