option(LIBA_OPENMP "Enable/Disable openmp" $ENV{LIBA_OPENMP})
if(LIBA_OPENMP)
find_package(OpenMP)
endif()
if(LIBA_OPENMP AND OpenMP_C_FLAGS)
string_append(CMAKE_C_FLAGS ${OpenMP_C_FLAGS})
endif()
if(LIBA_OPENMP AND OpenMP_CXX_FLAGS)
string_append(CMAKE_CXX_FLAGS ${OpenMP_CXX_FLAGS})
endif()
if(WIN32)
set(CMAKE_SHARED_MODULE_SUFFIX ".pyd")
endif()
if(Python_SOABI)
set(python_suffix ".${Python_SOABI}${CMAKE_SHARED_MODULE_SUFFIX}")
elseif(EXISTS ${Python_EXECUTABLE})
execute_process(COMMAND ${Python_EXECUTABLE} -c
"import sysconfig;print(sysconfig.get_config_var(\"EXT_SUFFIX\") or sysconfig.get_config_var(\"SO\"))"
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE python_suffix
)
endif()
if(CYTHON_FOUND) # https://cython.readthedocs.io/en/stable
add_custom_command(OUTPUT ${CMAKE_CURRENT_LIST_DIR}/src/${PROJECT_NAME}.c
COMMAND ${CYTHON_EXECUTABLE} --fast-fail ${CMAKE_CURRENT_LIST_DIR}/src/${PROJECT_NAME}.pyx
)
endif()
if(python_suffix)
set(CMAKE_SHARED_MODULE_SUFFIX ${python_suffix})
else()
set(python_suffix ${CMAKE_SHARED_MODULE_SUFFIX})
endif()
set(CMAKE_SHARED_MODULE_PREFIX "")
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
set(CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_RELWITHDEBINFO})
set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
add_library(apy MODULE $<TARGET_OBJECTS:a> ${CMAKE_CURRENT_LIST_DIR}/src/${PROJECT_NAME}.c)
set_target_properties(apy PROPERTIES DEFINE_SYMBOL A_EXPORTS OUTPUT_NAME ${PROJECT_NAME}
INTERPROCEDURAL_OPTIMIZATION ${LIBA_IPO} VISIBILITY_INLINES_HIDDEN 1
LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_CURRENT_LIST_DIR}
LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_CURRENT_LIST_DIR}
LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_LIST_DIR}
LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_LIST_DIR}
CXX_VISIBILITY_PRESET hidden C_VISIBILITY_PRESET hidden
)
add_library_properties(apy PRIVATE alib)
if(TARGET Python::Python)
target_link_libraries(apy PRIVATE Python::Python)
get_property(implib TARGET Python::Python PROPERTY IMPORTED_IMPLIB_RELEASE)
if(implib)
set_property(TARGET Python::Python PROPERTY MAP_IMPORTED_CONFIG_DEBUG Release)
endif()
else()
string(REGEX REPLACE "optimized;([^;]+).*" "\\1" Python_LIBRARIES "${Python_LIBRARIES}")
target_include_directories(apy PRIVATE ${Python_INCLUDE_DIRS})
target_link_libraries(apy PRIVATE ${Python_LIBRARIES})
endif()
if(Python_SITEARCH)
set(python_platlib ${Python_SITEARCH})
else()
execute_process(COMMAND ${Python_EXECUTABLE} -c
"import sysconfig;print(sysconfig.get_path(\"platlib\"))"
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE python_platlib
)
endif()
if(NOT python_platlib)
set(python_platlib ${CMAKE_INSTALL_LIBDIR}/site-packages)
endif()
if("${LIBA_INSTALL}" MATCHES "[Pp]ython")
install(FILES ${CMAKE_CURRENT_LIST_DIR}/liba.pyi
${CMAKE_CURRENT_LIST_DIR}/liba${python_suffix}
DESTINATION ${python_platlib}
)
elseif("${LIBA_INSTALL}" MATCHES "^$")
string(REGEX REPLACE ".*[Ll]ib[/\\](.*)$" "\\1" site "${python_platlib}")
install(FILES ${CMAKE_CURRENT_LIST_DIR}/liba.pyi
${CMAKE_CURRENT_LIST_DIR}/liba${python_suffix}
DESTINATION ${CMAKE_INSTALL_LIBDIR}/${site}
)
endif()
if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/test/CMakeLists.txt AND Python_EXECUTABLE)
add_subdirectory(test)
endif()