aboutsummaryrefslogtreecommitdiffstats
path: root/mpm/python/CMakeLists.txt
blob: 6b96c937670a3d1e70e740ed4e6ec3d8d90c48a2 (plain)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#
# Copyright 2017-2018 Ettus Research, a National Instruments Company
#
# SPDX-License-Identifier: GPL-3.0-or-later
#

########################################################################
# This file included, use CMake directory variables
########################################################################

# Check installation status of Python modules required by MPM unit tests
set(GEVENT_MIN_VERSION "1.4.0")
set(PYUDEV_MIN_VERSION "0.21.0")

PYTHON_CHECK_MODULE_VERSION(
    "gevent module"
    "gevent"
    "gevent.__version__"
    ${GEVENT_MIN_VERSION}
    HAVE_PYTHON_MODULE_GEVENT
)

# mprpc does not expose a __version__ attribute, so merely check for its
# presence
PYTHON_CHECK_MODULE(
    "mprpc module"
    "mprpc"
    "True"
    HAVE_PYTHON_MODULE_MPRPC
)

PYTHON_CHECK_MODULE_VERSION(
    "pyudev module"
    "pyudev"
    "pyudev.__version__"
    ${PYUDEV_MIN_VERSION}
    HAVE_PYTHON_MODULE_PYUDEV
)

# Older versions of pyroute2 (e.g. 0.5.2) do not expose a __version__
# attribute, so merely check for its presence.
PYTHON_CHECK_MODULE(
    "pyroute2 module"
    "pyroute2"
    "True"
    HAVE_PYTHON_MODULE_PYROUTE2
)

if (HAVE_PYTHON_MODULE_GEVENT AND HAVE_PYTHON_MODULE_MPRPC AND HAVE_PYTHON_MODULE_PYUDEV AND HAVE_PYTHON_MODULE_PYROUTE2)
    set(HAVE_MPM_TEST_PREREQS TRUE)
    MESSAGE(STATUS "MPM unit test Python package prerequisites met!")
else()
    set(HAVE_MPM_TEST_PREREQS FALSE)
    MESSAGE(STATUS "MPM unit test Python package prerequisites not met; skipping")
endif()
MESSAGE(STATUS "")

if(MPM_DEVICE STREQUAL "n3xx")
    add_library(pyusrp_periphs SHARED pyusrp_periphs/n3xx/pyusrp_periphs.cpp)
elseif(MPM_DEVICE STREQUAL "e320")
    add_library(pyusrp_periphs SHARED pyusrp_periphs/e320/pyusrp_periphs.cpp)
elseif(MPM_DEVICE STREQUAL "e31x")
    add_library(pyusrp_periphs SHARED pyusrp_periphs/e31x/pyusrp_periphs.cpp)
elseif(MPM_DEVICE STREQUAL "x4xx")
    add_library(pyusrp_periphs SHARED pyusrp_periphs/x4xx/pyusrp_periphs.cpp)
endif(MPM_DEVICE STREQUAL "n3xx")

if(NOT ENABLE_SIM)
    target_include_directories(pyusrp_periphs PUBLIC
        ${PYTHON_INCLUDE_DIRS}
        ${CMAKE_SOURCE_DIR}/lib/
        ${UHD_SOURCE_DIR}/lib/usrp/common
        ${UHD_SOURCE_DIR}/lib/usrp/common/ad9361_driver
        ${UHD_SOURCE_DIR}/lib/deps/pybind11/include
    )
    target_link_libraries(pyusrp_periphs ${Boost_LIBRARIES} usrp-periphs)
    add_custom_command(TARGET pyusrp_periphs POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libpyusrp_periphs.so ${CMAKE_CURRENT_BINARY_DIR}/usrp_mpm/libpyusrp_periphs.so)
endif(NOT ENABLE_SIM)

set(USRP_MPM_FILES "")
add_subdirectory(usrp_mpm)

set(OUTPUT      "${CMAKE_CURRENT_BINARY_DIR}/build/timestamp")
set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in")
set(SETUP_PY    "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
set(PERIPH_MGR_INIT_IN "${CMAKE_CURRENT_SOURCE_DIR}/usrp_mpm/periph_manager/__init__.py.in")
set(PERIPH_MGR_INIT "${CMAKE_CURRENT_BINARY_DIR}/usrp_mpm/periph_manager/__init__.py")
set(USRP_MPM_INIT_IN "${CMAKE_CURRENT_SOURCE_DIR}/usrp_mpm/__init__.py.in")
set(USRP_MPM_INIT "${CMAKE_CURRENT_BINARY_DIR}/usrp_mpm/__init__.py")

configure_file(${SETUP_PY_IN} ${SETUP_PY})
configure_file(${PERIPH_MGR_INIT_IN} ${PERIPH_MGR_INIT})
configure_file(${USRP_MPM_INIT_IN} ${USRP_MPM_INIT})
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/usrp_hwd.py" "${CMAKE_CURRENT_BINARY_DIR}/usrp_hwd.py" COPYONLY)

add_custom_command(OUTPUT ${OUTPUT}
     COMMAND ${CMAKE_COMMAND}  -DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}" -DBINARY_DIR="${CMAKE_CURRENT_BINARY_DIR}"  -P ${CMAKE_CURRENT_SOURCE_DIR}/copy_python_module.cmake
     COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} -q build
     COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT}
     DEPENDS ${USRP_MPM_FILES} pyusrp_periphs)
add_custom_target(usrp_mpm ALL DEPENDS ${OUTPUT} pyusrp_periphs)

if(NOT DEFINED USRP_MPM_PYTHON_DIR)
    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
        "import os,sysconfig;\
        platlib = sysconfig.get_path(name='platlib');\
        prefix = sysconfig.get_config_var('prefix');\
        print(os.path.relpath(platlib, prefix));"
        OUTPUT_VARIABLE USRP_MPM_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
    )
endif(NOT DEFINED USRP_MPM_PYTHON_DIR)

install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/build/lib/usrp_mpm DESTINATION ${USRP_MPM_PYTHON_DIR})
install(PROGRAMS
    usrp_hwd.py
    DESTINATION ${RUNTIME_DIR}
)

if(NOT ENABLE_SIM)
    install(PROGRAMS
        aurora_bist_test.py
        usrp_update_fs
        DESTINATION ${RUNTIME_DIR}
    )

    if (ENABLE_MYKONOS)
        install(PROGRAMS
            n3xx_bist
            DESTINATION ${RUNTIME_DIR}
        )
    elseif (ENABLE_E320)
        install(PROGRAMS
            e320_bist
            DESTINATION ${RUNTIME_DIR}
        )
    elseif (ENABLE_X400)
        install(PROGRAMS
            x4xx_bist
            DESTINATION ${RUNTIME_DIR}
        )
        install(PROGRAMS
            usrp_mpm/dboard_manager/zbx_update_cpld.py
            DESTINATION ${RUNTIME_DIR}
            RENAME zbx_update_cpld
        )
        install(PROGRAMS
            usrp_mpm/periph_manager/x4xx_update_cpld.py
            DESTINATION ${RUNTIME_DIR}
            RENAME x4xx_update_cpld
        )
    endif (ENABLE_MYKONOS)
endif()

if (HAVE_MPM_TEST_PREREQS)
    add_subdirectory(tests)
endif (HAVE_MPM_TEST_PREREQS)