## Copyright(c) 2018-2020, Intel Corporation
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions are met:
##
## * Redistributions of source code must retain the above copyright notice,
## this list of conditions and the following disclaimer.
## * Redistributions in binary form must reproduce the above copyright notice,
## this list of conditions and the following disclaimer in the documentation
## and/or other materials provided with the distribution.
## * Neither the name of Intel Corporation nor the names of its contributors
## may be used to endorse or promote products derived from this software
## without specific prior written permission.
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
## ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
## LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
## POSSIBILITY OF SUCH DAMAGE.
set(PYOPAE_PYBIND11_VERSION "2.2.4")
set(PYOPAE_SRC
opae.cpp
pycontext.h
pycontext.cpp
pyproperties.h
pyproperties.cpp
pyhandle.h
pyhandle.cpp
pytoken.h
pytoken.cpp
pyshared_buffer.h
pyshared_buffer.cpp
pyevents.h
pyevents.cpp
pyerrors.h
pyerrors.cpp
pysysobject.h
pysysobject.cpp
)
opae_external_project_add(PROJECT_NAME pybind11
GIT_URL https://github.com/pybind/pybind11.git
GIT_TAG v2.4.3
)
opae_add_module_library(TARGET _opae
SOURCE ${PYOPAE_SRC}
LIBS
opae-c
opae-cxx-core
)
target_include_directories(_opae
PRIVATE ${PYBIND11_INCLUDE_DIR}
PRIVATE ${PYTHON_INCLUDE_DIRS})
set_target_properties(_opae
PROPERTIES PREFIX ""
CXX_VISIBILITY_PRESET "hidden"
LINK_FLAGS "-std=c++11"
LIBRARY_OUTPUT_DIRECTORY
${LIBRARY_OUTPUT_PATH}/python${OPAE_PYTHON_VERSION}/opae/fpga
)
add_custom_command(TARGET _opae
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/opae/__init__.py
${LIBRARY_OUTPUT_PATH}/python${OPAE_PYTHON_VERSION}/opae
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/opae/fpga/__init__.py
${LIBRARY_OUTPUT_PATH}/python${OPAE_PYTHON_VERSION}/opae/fpga
COMMENT "Copying namespace package files")
add_custom_command(TARGET _opae
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/test_pyopae.py
${LIBRARY_OUTPUT_PATH}/python${OPAE_PYTHON_VERSION}
COMMENT "Copying Python test files")
if (OPAE_BUILD_PYTHON_DIST)
set(SETUP_INCLUDE_DIRS "${OPAE_INCLUDE_DIR}:${PYBIND_INCLUDE_DIR}")
set(PYFILES
setup.py
opae/__init__.py
opae/fpga/__init__.py
test_pyopae.py
)
set (PYDIST_STAGE_DIR ${CMAKE_CURRENT_BINARY_DIR}/stage)
configure_file(README.md ${PYDIST_STAGE_DIR}/README.md @ONLY)
foreach(pyfile ${PYFILES})
configure_file(${pyfile} ${PYDIST_STAGE_DIR}/${pyfile} @ONLY)
endforeach(pyfile ${PYFILES})
foreach(cppfile ${PYOPAE_SRC})
file(COPY ${cppfile} DESTINATION ${PYDIST_STAGE_DIR})
endforeach(cppfile ${PYOPAE_SRC})
file(COPY MANIFEST.in DESTINATION ${PYDIST_STAGE_DIR})
add_custom_target(pyopae-dist
COMMAND ${PYTHON_EXECUTABLE} setup.py sdist
COMMAND ${PYTHON_EXECUTABLE} setup.py build_ext
--include-dirs=${OPAE_INCLUDE_DIR}
--library-dirs=${LIBRARY_OUTPUT_PATH}
COMMAND ${PYTHON_EXECUTABLE} setup.py bdist_wheel
DEPENDS ${PYFILES} ${PYOPAE_SRC}
WORKING_DIRECTORY ${PYDIST_STAGE_DIR}
COMMENT "Building Python distrubutions")
endif (OPAE_BUILD_PYTHON_DIST)