File: pyverbs_functions.cmake

package info (click to toggle)
rdma-core 33.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 13,844 kB
  • sloc: ansic: 145,804; python: 5,688; sh: 2,761; perl: 1,465; makefile: 73
file content (64 lines) | stat: -rw-r--r-- 2,691 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# SPDX-License-Identifier: (GPL-2.0 OR Linux-OpenIB)
# Copyright (c) 2018, Mellanox Technologies. All rights reserved.  See COPYING file

function(rdma_cython_module PY_MODULE LINKER_FLAGS)
  foreach(PYX_FILE ${ARGN})
    get_filename_component(FILENAME ${PYX_FILE} NAME_WE)
    get_filename_component(DIR ${PYX_FILE} DIRECTORY)
	if (DIR)
		set(PYX "${CMAKE_CURRENT_SOURCE_DIR}/${DIR}/${FILENAME}.pyx")
	else()
	    set(PYX "${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}.pyx")
	endif()
    set(CFILE "${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.c")
    include_directories(${PYTHON_INCLUDE_DIRS})
    add_custom_command(
      OUTPUT "${CFILE}"
      MAIN_DEPENDENCY "${PYX}"
      COMMAND ${CYTHON_EXECUTABLE} "${PYX}" -o "${CFILE}"
      "-I${PYTHON_INCLUDE_DIRS}"
      COMMENT "Cythonizing ${PYX}"
      )

    string(REGEX REPLACE "\\.so$" "" SONAME "${FILENAME}${CMAKE_PYTHON_SO_SUFFIX}")
    add_library(${SONAME} SHARED ${CFILE})
    set_target_properties(${SONAME} PROPERTIES
      COMPILE_FLAGS "${CMAKE_C_FLAGS} -fPIC -fno-strict-aliasing -Wno-unused-function -Wno-redundant-decls -Wno-shadow -Wno-cast-function-type -Wno-implicit-fallthrough -Wno-unknown-warning -Wno-unknown-warning-option -Wno-deprecated-declarations ${NO_VAR_TRACKING_FLAGS}"
      LIBRARY_OUTPUT_DIRECTORY "${BUILD_PYTHON}/${PY_MODULE}"
      PREFIX "")
    target_link_libraries(${SONAME} LINK_PRIVATE ${PYTHON_LIBRARIES} ibverbs rdmacm ${LINKER_FLAGS})
    install(TARGETS ${SONAME}
      DESTINATION ${CMAKE_INSTALL_PYTHON_ARCH_LIB}/${PY_MODULE})
  endforeach()
endfunction()

function(rdma_python_module PY_MODULE)
  foreach(PY_FILE ${ARGN})
    get_filename_component(LINK "${CMAKE_CURRENT_SOURCE_DIR}/${PY_FILE}" ABSOLUTE)
    rdma_create_symlink("${LINK}" "${BUILD_PYTHON}/${PY_MODULE}/${PY_FILE}")
    install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PY_FILE}
      DESTINATION ${CMAKE_INSTALL_PYTHON_ARCH_LIB}/${PY_MODULE})
  endforeach()
endfunction()

function(rdma_python_test PY_MODULE)
  foreach(PY_FILE ${ARGN})
    install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PY_FILE}
      DESTINATION ${CMAKE_INSTALL_DOCDIR}/${PY_MODULE})
  endforeach()
endfunction()

# Make a python script runnable from the build/bin directory with all the
# correct paths filled in
function(rdma_internal_binary)
  foreach(PY_FILE ${ARGN})
    get_filename_component(ABS "${CMAKE_CURRENT_SOURCE_DIR}/${PY_FILE}" ABSOLUTE)
    get_filename_component(FN "${CMAKE_CURRENT_SOURCE_DIR}/${PY_FILE}" NAME)
    set(BIN_FN "${BUILD_BIN}/${FN}")

    file(WRITE "${BIN_FN}" "#!/bin/sh
PYTHONPATH='${BUILD_PYTHON}' exec '${PYTHON_EXECUTABLE}' '${ABS}' \"$@\"
")
    execute_process(COMMAND "chmod" "a+x" "${BIN_FN}")
  endforeach()
endfunction()