mirror of
https://github.com/saymrwulf/uhd.git
synced 2026-05-15 21:01:26 +00:00
With Boost 1.64 to 1.65 (which, of course, Ubuntu LTS ships), the `PyInit_Libraryname` are invisible when one sets the default visibility to "hidden" (which is reasonable, and which we do).
80 lines
3.1 KiB
CMake
80 lines
3.1 KiB
CMake
#
|
|
# Copyright 2017-2018 Ettus Research, a National Instruments Company
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
#
|
|
|
|
########################################################################
|
|
# This file included, use CMake directory variables
|
|
########################################################################
|
|
|
|
PYTHON_CHECK_MODULE(
|
|
"virtualenv"
|
|
"sys" "hasattr(sys, 'real_prefix')"
|
|
HAVE_PYTHON_VIRTUALENV
|
|
)
|
|
|
|
# Get include dirs
|
|
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS})
|
|
EXECUTE_PROCESS(
|
|
COMMAND "${PYTHON_EXECUTABLE}" -c
|
|
"from __future__ import print_function\ntry:\n import numpy\n import os\n inc_path = numpy.get_include()\n if os.path.exists(os.path.join(inc_path, 'numpy', 'arrayobject.h')):\n print(inc_path, end='')\nexcept:\n pass"
|
|
OUTPUT_VARIABLE PYTHON_NUMPY_INCLUDE_DIR)
|
|
|
|
# Build pyuhd library
|
|
ADD_LIBRARY(pyuhd SHARED pyuhd.cpp)
|
|
TARGET_INCLUDE_DIRECTORIES(pyuhd PUBLIC
|
|
${PYTHON_NUMPY_INCLUDE_DIR}
|
|
${CMAKE_SOURCE_DIR}/lib
|
|
)
|
|
|
|
TARGET_LINK_LIBRARIES(pyuhd ${BOOST_PYTHON_LIBRARY} ${Boost_LIBRARIES} ${PYTHON_LIBRARY} uhd)
|
|
# Copy pyuhd library to the staging directory
|
|
IF(WIN32)
|
|
SET(PYUHD_LIBRARY_NAME libpyuhd.pyd)
|
|
ELSE()
|
|
SET(PYUHD_LIBRARY_NAME libpyuhd${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
ENDIF(WIN32)
|
|
|
|
ADD_CUSTOM_COMMAND(TARGET pyuhd
|
|
POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pyuhd> ${CMAKE_CURRENT_BINARY_DIR}/uhd/${PYUHD_LIBRARY_NAME})
|
|
|
|
SET(PYUHD_FILES
|
|
${CMAKE_CURRENT_SOURCE_DIR}/__init__.py
|
|
${CMAKE_CURRENT_SOURCE_DIR}/types.py
|
|
${CMAKE_CURRENT_SOURCE_DIR}/usrp.py
|
|
${CMAKE_CURRENT_SOURCE_DIR}/filters.py
|
|
)
|
|
|
|
SET(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in")
|
|
SET(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
|
|
SET(TIMESTAMP_FILE "${CMAKE_CURRENT_BINARY_DIR}/build/timestamp")
|
|
|
|
CONFIGURE_FILE(${SETUP_PY_IN} ${SETUP_PY})
|
|
|
|
ADD_CUSTOM_COMMAND(OUTPUT ${TIMESTAMP_FILE}
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${PYUHD_FILES} ${CMAKE_CURRENT_BINARY_DIR}/uhd
|
|
COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} -q build
|
|
COMMAND ${CMAKE_COMMAND} -E touch ${TIMESTAMP_FILE}
|
|
DEPENDS ${PYUHD_FILES})
|
|
|
|
ADD_CUSTOM_TARGET(pyuhd_library ALL DEPENDS ${TIMESTAMP_FILE} pyuhd)
|
|
IF(HAVE_PYTHON_VIRTUALENV)
|
|
# In virtualenvs, let setuptools do its thing
|
|
INSTALL(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} -q install --force)")
|
|
ELSE()
|
|
# Otherwise, use distutils to determine the correct relative path for Python
|
|
# packages, and install to our prefix
|
|
IF(NOT DEFINED UHD_PYTHON_DIR)
|
|
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
|
|
"from __future__ import print_function;\
|
|
from distutils import sysconfig;\
|
|
print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}'));"
|
|
OUTPUT_VARIABLE UHD_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
ENDIF(NOT DEFINED UHD_PYTHON_DIR)
|
|
file(TO_CMAKE_PATH ${UHD_PYTHON_DIR} UHD_PYTHON_DIR)
|
|
|
|
MESSAGE(STATUS "Utilizing the python install directory: ${UHD_PYTHON_DIR}")
|
|
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/uhd DESTINATION ${UHD_PYTHON_DIR} COMPONENT pythonapi)
|
|
ENDIF(HAVE_PYTHON_VIRTUALENV)
|