1 option(LIBA_OPENMP "Enable/Disable openmp" $ENV{LIBA_OPENMP})
7 if(LIBA_OPENMP AND OpenMP_C_FLAGS)
8 string_append(CMAKE_C_FLAGS ${OpenMP_C_FLAGS})
11 if(LIBA_OPENMP AND OpenMP_CXX_FLAGS)
12 string_append(CMAKE_CXX_FLAGS ${OpenMP_CXX_FLAGS})
16 set(CMAKE_SHARED_MODULE_SUFFIX ".pyd")
20 set(python_suffix ".${Python_SOABI}${CMAKE_SHARED_MODULE_SUFFIX}")
21 elseif(EXISTS ${Python_EXECUTABLE})
22 execute_process(COMMAND ${Python_EXECUTABLE} -c
23 "import sysconfig;print(sysconfig.get_config_var(\"EXT_SUFFIX\") or sysconfig.get_config_var(\"SO\"))"
24 ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE python_suffix
28 if(CYTHON_FOUND) # https://cython.readthedocs.io/en/stable
29 add_custom_command(OUTPUT ${CMAKE_CURRENT_LIST_DIR}/src/${PROJECT_NAME}.c
30 COMMAND ${CYTHON_EXECUTABLE} --fast-fail ${CMAKE_CURRENT_LIST_DIR}/src/${PROJECT_NAME}.pyx
35 set(CMAKE_SHARED_MODULE_SUFFIX ${python_suffix})
37 set(python_suffix ${CMAKE_SHARED_MODULE_SUFFIX})
40 set(CMAKE_SHARED_MODULE_PREFIX "")
41 set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
42 set(CMAKE_C_FLAGS_DEBUG ${CMAKE_C_FLAGS_RELWITHDEBINFO})
43 set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_RELWITHDEBINFO})
44 add_library(apy MODULE $<TARGET_OBJECTS:a> ${CMAKE_CURRENT_LIST_DIR}/src/${PROJECT_NAME}.c)
45 set_target_properties(apy PROPERTIES DEFINE_SYMBOL A_EXPORTS OUTPUT_NAME ${PROJECT_NAME}
46 INTERPROCEDURAL_OPTIMIZATION ${LIBA_IPO} VISIBILITY_INLINES_HIDDEN 1
47 LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_CURRENT_LIST_DIR}
48 LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_CURRENT_LIST_DIR}
49 LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_LIST_DIR}
50 LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_LIST_DIR}
51 CXX_VISIBILITY_PRESET hidden C_VISIBILITY_PRESET hidden
53 add_library_properties(apy PRIVATE alib)
55 if(TARGET Python::Python)
56 target_link_libraries(apy PRIVATE Python::Python)
57 get_property(implib TARGET Python::Python PROPERTY IMPORTED_IMPLIB_RELEASE)
60 set_property(TARGET Python::Python PROPERTY MAP_IMPORTED_CONFIG_DEBUG Release)
63 string(REGEX REPLACE "optimized;([^;]+).*" "\\1" Python_LIBRARIES "${Python_LIBRARIES}")
64 target_include_directories(apy PRIVATE ${Python_INCLUDE_DIRS})
65 target_link_libraries(apy PRIVATE ${Python_LIBRARIES})
69 set(python_platlib ${Python_SITEARCH})
71 execute_process(COMMAND ${Python_EXECUTABLE} -c
72 "import sysconfig;print(sysconfig.get_path(\"platlib\"))"
73 ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE python_platlib
77 if(NOT python_platlib)
78 set(python_platlib ${CMAKE_INSTALL_LIBDIR}/site-packages)
81 if("${LIBA_INSTALL}" MATCHES "[Pp]ython")
82 install(FILES ${CMAKE_CURRENT_LIST_DIR}/liba.pyi
83 ${CMAKE_CURRENT_LIST_DIR}/liba${python_suffix}
84 DESTINATION ${python_platlib}
86 elseif("${LIBA_INSTALL}" MATCHES "^$")
87 string(REGEX REPLACE ".*[Ll]ib[/\\](.*)$" "\\1" site "${python_platlib}")
88 install(FILES ${CMAKE_CURRENT_LIST_DIR}/liba.pyi
89 ${CMAKE_CURRENT_LIST_DIR}/liba${python_suffix}
90 DESTINATION ${CMAKE_INSTALL_LIBDIR}/${site}
94 if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/test/CMakeLists.txt AND Python_EXECUTABLE)
95 add_subdirectory(test)