Skip to content
This repository was archived by the owner on Feb 19, 2024. It is now read-only.

Commit 94c7f44

Browse files
authored
Feature/s132v5 py3 (#103)
* Add support for SoftDevice API v5 * Remove support for SoftDevice API v3 * Add support for Python 3.7 * Remove pc-ble-driver as a submodule, use vcpkg compiled version * Updated to use latest version of pc-ble-driver (v4.1.1) * Change build process to create wheels for different versions of Python and platforms * Added tests for basic functionality. Still low test coverage. * Remove usage of ctypes, use SWIG auto generated module instead * Various bug fixes
1 parent 0c082b6 commit 94c7f44

51 files changed

Lines changed: 6644 additions & 3431 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
1-
python/**/*.dll
2-
python/**/*.pyd
3-
python/**/*.so
4-
python/**/*.dylib
5-
python/**/*.pyc
6-
python/**/*.hex
7-
python/**/hex/**/*.sh
8-
python/**/*.patch
9-
python/**/*.txt
10-
python/**/lib/**/*.py
11-
python/dist/**
12-
python/*.egg-info/**
1+
pc_ble_driver_py/**/*.dll
2+
pc_ble_driver_py/**/*.pyd
3+
pc_ble_driver_py/**/*.so
4+
pc_ble_driver_py/**/*.dylib
5+
pc_ble_driver_py/**/*.pyc
6+
pc_ble_driver_py/**/*.hex
7+
pc_ble_driver_py/**/*.txt
8+
pc_ble_driver_py/**/*.zip
9+
pc_ble_driver_py/lib/**/*.py
10+
pc_ble_driver_py/**/*.pyc
11+
pc_ble_driver_py/**/__pycache__
12+
tests/**/*.pyc
13+
tests/**/__pycache__
14+
15+
dist
16+
*.egg-info/**
17+
.idea
18+
.vs
19+
.tox
20+
_skbuild
21+
_cmake_test_compile

.gitmodules

Lines changed: 0 additions & 4 deletions
This file was deleted.

CMakeLists.txt

Lines changed: 155 additions & 197 deletions
Original file line numberDiff line numberDiff line change
@@ -1,197 +1,155 @@
1-
cmake_minimum_required(VERSION 3.3)
2-
3-
# Name of the project
4-
project (pc-ble-driver-py)
5-
6-
set(PC_BLE_DRIVER_PY_OUTDIR ${CMAKE_BINARY_DIR}/outdir)
7-
8-
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PC_BLE_DRIVER_PY_OUTDIR})
9-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PC_BLE_DRIVER_PY_OUTDIR})
10-
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PC_BLE_DRIVER_PY_OUTDIR})
11-
set(CMAKE_SWIG_OUTDIR ${PC_BLE_DRIVER_PY_OUTDIR})
12-
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
13-
string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
14-
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PC_BLE_DRIVER_PY_OUTDIR} )
15-
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PC_BLE_DRIVER_PY_OUTDIR} )
16-
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${PC_BLE_DRIVER_PY_OUTDIR} )
17-
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
18-
19-
# All projects depending on pc-ble-driver need to include this first
20-
include(pc-ble-driver/cmake/pc-ble-driver.cmake)
21-
add_subdirectory(pc-ble-driver)
22-
23-
# Include folders
24-
include_directories(${PC_BLE_DRIVER_INCLUDE_DIR})
25-
26-
# SWIG
27-
find_package(SWIG REQUIRED)
28-
include(${SWIG_USE_FILE})
29-
30-
find_package(PythonLibs 2.7 REQUIRED)
31-
include_directories(${PYTHON_INCLUDE_PATH})
32-
33-
foreach(SD_API_VER ${SD_API_VERS})
34-
set(PYTHON_MODULE_${SD_API_VER} ${PC_BLE_DRIVER_${SD_API_VER}_PROJECT_NAME})
35-
endforeach(SD_API_VER)
36-
37-
set(SWIG_I_FILE ${CMAKE_CURRENT_LIST_DIR}/swig/pc_ble_driver.i.in)
38-
39-
# Use release lib of Python even when building with DEBUG
40-
add_definitions( -DSWIG_PYTHON_INTERPRETER_NO_DEBUG -DHAVE_ROUND=1)
41-
42-
# Avoid warning on Windows
43-
if(WIN32)
44-
add_definitions( -DHAVE_ROUND )
45-
endif()
46-
47-
# Copy .i file into N variant files
48-
foreach(SD_API_VER ${SD_API_VERS})
49-
# Copy SWIG-generated wrapper
50-
set(SWIG_I_FILE_${SD_API_VER} ${PC_BLE_DRIVER_PY_OUTDIR}/${PYTHON_MODULE_${SD_API_VER}}.i)
51-
#MESSAGE( STATUS "swig i: " "${SWIG_I_FILE_${SD_API_VER}}")
52-
set(SWIG_MODULE_NAME ${PYTHON_MODULE_${SD_API_VER}})
53-
configure_file(${SWIG_I_FILE} ${SWIG_I_FILE_${SD_API_VER}})
54-
#add_custom_command(OUTPUT ${SWIG_I_FILE_${SD_API_VER}}
55-
# COMMAND ${CMAKE_COMMAND} -E copy ${SWIG_I_FILE} ${SWIG_I_FILE_${SD_API_VER}}
56-
#)
57-
set_property(SOURCE ${SWIG_I_FILE_${SD_API_VER}} PROPERTY CPLUSPLUS OFF)
58-
set_property(SOURCE ${SWIG_I_FILE_${SD_API_VER}} APPEND PROPERTY SWIG_FLAGS "-threads")
59-
set_property(SOURCE ${SWIG_I_FILE_${SD_API_VER}} APPEND PROPERTY SWIG_FLAGS "-DPC_BLE_DRIVER_STATIC")
60-
endforeach(SD_API_VER)
61-
62-
63-
foreach(SD_API_VER ${SD_API_VERS})
64-
set(SWIG_C_SRC_FILES_${SD_API_VER} ${PC_BLE_DRIVER_PY_OUTDIR}/${PYTHON_MODULE_${SD_API_VER}}PYTHON_wrap.c)
65-
set_source_files_properties(SWIG_C_SRC_FILES_${SD_API_VER} PROPERTIES LANGUAGE CXX)
66-
67-
set(CMAKE_SWIG_FLAGS)
68-
foreach(it ${PC_BLE_DRIVER_${SD_API_VER}_PUBLIC_INCLUDE_DIRS})
69-
#MESSAGE( STATUS "${SD_API_VER} it: " "${it}" )
70-
set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} "-I${it}")
71-
endforeach()
72-
73-
string(REGEX MATCH "[0-9]+$" _SD_API_VER_NUM "${SD_API_VER}")
74-
set(SD_API_VER_COMPILER_DEF_NUM "-D${SD_API_VER_COMPILER_DEF}=${_SD_API_VER_NUM}")
75-
set(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} "${SD_API_VER_COMPILER_DEF_NUM}")
76-
77-
swig_add_module(${PYTHON_MODULE_${SD_API_VER}} python ${SWIG_I_FILE_${SD_API_VER}})
78-
target_include_directories(${SWIG_MODULE_${PYTHON_MODULE_${SD_API_VER}}_REAL_NAME} PRIVATE ${PC_BLE_DRIVER_${SD_API_VER}_PUBLIC_INCLUDE_DIRS})
79-
endforeach(SD_API_VER)
80-
81-
# These are the files required for the pc_ble_driver Python module:
82-
83-
# Windows
84-
# pc_ble_driver_<variant>.py
85-
# _pc_ble_driver_<variant>.pyd
86-
# pc_ble_driver_<variant>_shared.dll
87-
88-
# Linux
89-
# pc_ble_driver_<variant>.py
90-
# _pc_ble_driver_<variant>.so
91-
# libpc_ble_driver_<variant>_shared.so
92-
93-
# macOS / OS X
94-
# pc_ble_driver_<variant>.py
95-
# _pc_ble_driver_<variant>.so
96-
# libpc_ble_driver_<variant>_shared.dylib
97-
98-
foreach(SD_API_VER ${SD_API_VERS})
99-
swig_link_libraries(${PYTHON_MODULE_${SD_API_VER}} ${PYTHON_LIBRARIES} ${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB})
100-
endforeach(SD_API_VER)
101-
102-
set(PY_PACKAGE_DIR ${CMAKE_CURRENT_LIST_DIR}/python)
103-
set(PY_MODULE_DIR ${PY_PACKAGE_DIR}/pc_ble_driver_py)
104-
set(PY_MODULE_HEX_DIR ${PY_MODULE_DIR}/hex)
105-
106-
if(WIN32)
107-
set(PY_MODULE_SHARED_LIB_DIR ${PY_MODULE_DIR}/lib/win/x86_${ARCH_BITS})
108-
set(SWIG_WRAPPER_SHARED_LIB_EXT pyd)
109-
elseif(APPLE)
110-
set(PY_MODULE_SHARED_LIB_DIR ${PY_MODULE_DIR}/lib/macos_osx)
111-
set(SWIG_WRAPPER_SHARED_LIB_EXT so)
112-
else()
113-
set(PY_MODULE_SHARED_LIB_DIR ${PY_MODULE_DIR}/lib/linux/x86_${ARCH_BITS})
114-
set(SWIG_WRAPPER_SHARED_LIB_EXT so)
115-
endif()
116-
117-
set(PY_MODULE_BUILD_INFO build_info.txt)
118-
set(PY_MODULE_BUILD_INFO_PRE_PATH ${PC_BLE_DRIVER_PY_OUTDIR}/${PY_MODULE_BUILD_INFO})
119-
set(PY_MODULE_BUILD_INFO_POST_PATH ${PY_MODULE_SHARED_LIB_DIR}/${PY_MODULE_BUILD_INFO})
120-
121-
foreach(SD_API_VER ${SD_API_VERS})
122-
123-
set(SWIG_WRAPPER_${SD_API_VER}_PY_FILE ${PYTHON_MODULE_${SD_API_VER}}.py)
124-
set(SWIG_WRAPPER_${SD_API_VER}_PY_PATH ${PC_BLE_DRIVER_PY_OUTDIR}/${SWIG_WRAPPER_${SD_API_VER}_PY_FILE})
125-
126-
set(SWIG_WRAPPER_${SD_API_VER}_SHARED_LIB_FILE _${PYTHON_MODULE_${SD_API_VER}}.${SWIG_WRAPPER_SHARED_LIB_EXT})
127-
set(SWIG_WRAPPER_${SD_API_VER}_SHARED_LIB_PATH ${PC_BLE_DRIVER_PY_OUTDIR}/${SWIG_WRAPPER_${SD_API_VER}_SHARED_LIB_FILE})
128-
129-
set(PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB_FILE ${CMAKE_SHARED_LIBRARY_PREFIX}${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB}${CMAKE_SHARED_LIBRARY_SUFFIX})
130-
set(PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB_PATH ${PC_BLE_DRIVER_PY_OUTDIR}/${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB_FILE})
131-
132-
# Copy SWIG-generated .py wrapper
133-
add_custom_command(TARGET ${SWIG_MODULE_${PYTHON_MODULE_${SD_API_VER}}_REAL_NAME} POST_BUILD
134-
COMMAND ${CMAKE_COMMAND} -E copy ${SWIG_WRAPPER_${SD_API_VER}_PY_PATH} ${PY_MODULE_SHARED_LIB_DIR}
135-
)
136-
137-
# Copy SWIG wrapper lib
138-
add_custom_command(TARGET ${SWIG_MODULE_${PYTHON_MODULE_${SD_API_VER}}_REAL_NAME} POST_BUILD
139-
COMMAND ${CMAKE_COMMAND} -E copy ${SWIG_WRAPPER_${SD_API_VER}_SHARED_LIB_PATH} ${PY_MODULE_SHARED_LIB_DIR}
140-
)
141-
142-
# Copy DLL
143-
add_custom_command(TARGET ${SWIG_MODULE_${PYTHON_MODULE_${SD_API_VER}}_REAL_NAME} POST_BUILD
144-
COMMAND ${CMAKE_COMMAND} -E copy ${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB_PATH} ${PY_MODULE_SHARED_LIB_DIR}
145-
)
146-
147-
# Copy .hex files
148-
add_custom_command(TARGET ${SWIG_MODULE_${PYTHON_MODULE_${SD_API_VER}}_REAL_NAME} POST_BUILD
149-
COMMAND ${CMAKE_COMMAND} -E copy_directory ${PC_BLE_DRIVER_HEX_DIR}/${SD_API_VER} ${PY_MODULE_HEX_DIR}/${SD_API_VER}
150-
)
151-
endforeach(SD_API_VER)
152-
153-
# Generate build information file
154-
set(BUILD_INFO "Build information:\n")
155-
156-
build_metadata(${CMAKE_CURRENT_LIST_DIR} BUILD_MD_STRING)
157-
string(CONCAT BUILD_INFO ${BUILD_INFO} ${BUILD_MD_STRING} )
158-
string(CONCAT BUILD_INFO ${BUILD_INFO} "* SWIG version: " ${SWIG_VERSION} "\n")
159-
string(CONCAT BUILD_INFO ${BUILD_INFO} "* Pyhon version: " ${PYTHONLIBS_VERSION_STRING} "\n")
160-
string(CONCAT BUILD_INFO ${BUILD_INFO} "* Pyhon libs: " ${PYTHON_LIBRARIES} "\n")
161-
git_repo_metadata(${CMAKE_CURRENT_LIST_DIR} PY_GIT_COMMIT PY_GIT_BRANCH PY_GIT_REMOTES)
162-
string(CONCAT BUILD_INFO ${BUILD_INFO} "* Git repo: " ${PROJECT_NAME} "\n")
163-
string(CONCAT BUILD_INFO ${BUILD_INFO} "** Git revision: " ${PY_GIT_COMMIT} "\n")
164-
string(CONCAT BUILD_INFO ${BUILD_INFO} "** Git branch: " ${PY_GIT_BRANCH} "\n")
165-
git_repo_metadata(${PC_BLE_DRIVER_ROOT_DIR} DRIVER_GIT_COMMIT DRIVER_GIT_BRANCH DRIVER_GIT_REMOTES)
166-
string(CONCAT BUILD_INFO ${BUILD_INFO} "* Git repo: " "pc-ble-driver" "\n")
167-
string(CONCAT BUILD_INFO ${BUILD_INFO} "** Git revision: " ${DRIVER_GIT_COMMIT} "\n")
168-
string(CONCAT BUILD_INFO ${BUILD_INFO} "** Git branch: " ${DRIVER_GIT_BRANCH} "\n")
169-
170-
file(WRITE ${PY_MODULE_BUILD_INFO_PRE_PATH} ${BUILD_INFO})
171-
172-
# iterate to count-1
173-
math(EXPR _COUNT "${SD_API_VER_COUNT} - 1")
174-
# Post-build build info
175-
foreach(i RANGE ${_COUNT})
176-
list(GET SD_API_VERS ${i} SD_API_VER)
177-
178-
# copy the build info only once, on the first iteration
179-
if(${i} EQUAL 0)
180-
add_custom_command(TARGET ${SWIG_MODULE_${PYTHON_MODULE_${SD_API_VER}}_REAL_NAME} POST_BUILD
181-
COMMAND ${CMAKE_COMMAND} -E copy ${PY_MODULE_BUILD_INFO_PRE_PATH} ${PY_MODULE_BUILD_INFO_POST_PATH}
182-
COMMAND ${CMAKE_COMMAND} -E echo "* MD5 sums: " >> ${PY_MODULE_BUILD_INFO_POST_PATH}
183-
)
184-
endif()
185-
186-
add_custom_command(TARGET ${SWIG_MODULE_${PYTHON_MODULE_${SD_API_VER}}_REAL_NAME} POST_BUILD
187-
COMMAND ${CMAKE_COMMAND} -E echo_append "** " >> ${PY_MODULE_BUILD_INFO_POST_PATH}
188-
COMMAND ${CMAKE_COMMAND} -E md5sum ${SWIG_WRAPPER_${SD_API_VER}_PY_FILE} >> ${PY_MODULE_BUILD_INFO_POST_PATH} WORKING_DIRECTORY ${PY_MODULE_SHARED_LIB_DIR}
189-
COMMAND ${CMAKE_COMMAND} -E echo_append "** " >> ${PY_MODULE_BUILD_INFO_POST_PATH}
190-
COMMAND ${CMAKE_COMMAND} -E md5sum ${SWIG_WRAPPER_${SD_API_VER}_SHARED_LIB_FILE} >> ${PY_MODULE_BUILD_INFO_POST_PATH} WORKING_DIRECTORY ${PY_MODULE_SHARED_LIB_DIR}
191-
COMMAND ${CMAKE_COMMAND} -E echo_append "** " >> ${PY_MODULE_BUILD_INFO_POST_PATH}
192-
COMMAND ${CMAKE_COMMAND} -E md5sum ${PC_BLE_DRIVER_${SD_API_VER}_SHARED_LIB_FILE} >> ${PY_MODULE_BUILD_INFO_POST_PATH} WORKING_DIRECTORY ${PY_MODULE_SHARED_LIB_DIR}
193-
)
194-
endforeach(i)
195-
196-
197-
1+
cmake_minimum_required(VERSION 3.13)
2+
3+
if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
4+
set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
5+
CACHE STRING "")
6+
endif()
7+
8+
# Name of the project
9+
project (pc-ble-driver-py)
10+
11+
find_package(PythonExtensions REQUIRED)
12+
13+
if(WIN32)
14+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_hypot=hypot")
15+
endif()
16+
17+
set(PC_BLE_DRIVER_PY_OUTDIR ${CMAKE_BINARY_DIR}/outdir)
18+
19+
# There is no reason to compile more than two SoftDevice API versions
20+
# The Python module only supports one SoftDevice API
21+
# version for NRF51 and one for NRF52
22+
set(SD_API_VERS "2;5")
23+
24+
# SWIG
25+
find_package(SWIG REQUIRED)
26+
include(${SWIG_USE_FILE})
27+
28+
# nrf-ble-driver
29+
find_package(nrf-ble-driver 4.1.1 CONFIG REQUIRED)
30+
31+
# PYTHON_INCLUDE_DIR provided by scikit-build
32+
include_directories(${PYTHON_INCLUDE_DIR})
33+
34+
set(SWIG_I_FILE ${CMAKE_CURRENT_LIST_DIR}/swig/pc_ble_driver.i.in)
35+
36+
# Use release lib of Python even when building with DEBUG
37+
add_definitions(-DSWIG_PYTHON_INTERPRETER_NO_DEBUG)
38+
39+
# Avoid warning on Windows
40+
if(WIN32)
41+
add_definitions(-DHAVE_ROUND)
42+
endif()
43+
44+
# Copy .i file into N variant files
45+
foreach(SD_API_VER ${SD_API_VERS})
46+
set(PYTHON_MODULE_${SD_API_VER} nrf_ble_driver_sd_api_v${SD_API_VER})
47+
# Copy SWIG-generated wrapper
48+
set(SWIG_I_FILE_${SD_API_VER} ${PC_BLE_DRIVER_PY_OUTDIR}/${PYTHON_MODULE_${SD_API_VER}}.i)
49+
set(SWIG_MODULE_NAME ${PYTHON_MODULE_${SD_API_VER}})
50+
configure_file(${SWIG_I_FILE} ${SWIG_I_FILE_${SD_API_VER}})
51+
set_property(SOURCE ${SWIG_I_FILE_${SD_API_VER}} APPEND PROPERTY SWIG_FLAGS "-threads")
52+
set_property(SOURCE ${SWIG_I_FILE_${SD_API_VER}} APPEND PROPERTY SWIG_FLAGS "-Wall")
53+
# Builtin is not supported in the customized wrappers for callbacks yet
54+
# set_property(SOURCE ${SWIG_I_FILE_${SD_API_VER}} APPEND PROPERTY SWIG_FLAGS "-builtin")
55+
endforeach()
56+
57+
set(MSFT_NON_STANDARD_COMPILER 0)
58+
59+
if(WIN32 AND MSVC_VERSION LESS 1600)
60+
# See https://cmake.org/cmake/help/v3.12/variable/MSVC_VERSION.html for more details on compiler version
61+
# See https://en.cppreference.com/w/c/types/integer for more details on fixed width integer types
62+
set(MSFT_NON_STANDARD_COMPILER 1)
63+
message(STATUS "Detected non-standard C99 MSVC compiler, adding stdint.h")
64+
endif()
65+
66+
set(NRF_BLE_DRIVER_LINKAGE_TYPE "static")
67+
68+
if(WIN32)
69+
set(NRF_BLE_DRIVER_LINKAGE_TYPE "shared")
70+
endif()
71+
72+
if(MSFT_NON_STANDARD_COMPILER)
73+
execute_process(
74+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/swig/win32/vc90-compat/stdint.h ${PC_BLE_DRIVER_PY_OUTDIR}
75+
RESULT_VARIABLE result
76+
)
77+
78+
if(NOT (result EQUAL 0))
79+
message(FATAL_ERROR "Not able to copy stdint.h compatibility file for Microsoft VC90")
80+
endif()
81+
endif()
82+
83+
foreach(SD_API_VER ${SD_API_VERS})
84+
set_property(
85+
SOURCE ${SWIG_I_FILE_${SD_API_VER}}
86+
# C++ must be off since SWIG C++ parser does not handle nested structs/classes
87+
# Warning 312. Unnamed nested class not currently supported (ignored)
88+
PROPERTY CPLUSPLUS OFF
89+
)
90+
91+
set_property(
92+
SOURCE ${SWIG_I_FILE_${SD_API_VER}}
93+
PROPERTY INCLUDE_DIRECTORIES ${nrf-ble-driver_SD_API_V${SD_API_VER}_INCLUDE_DIR} ${PC_BLE_DRIVER_PY_OUTDIR}
94+
)
95+
96+
set_property(
97+
SOURCE ${SWIG_I_FILE_${SD_API_VER}}
98+
PROPERTY COMPILE_DEFINITIONS "NRF_SD_BLE_API_VERSION=${SD_API_VER}" "SUPPRESS_INLINE_IMPLEMENTATION" "PC_BLE_DRIVER_STATIC"
99+
)
100+
101+
swig_add_library(
102+
${PYTHON_MODULE_${SD_API_VER}}
103+
TYPE SHARED
104+
LANGUAGE python
105+
SOURCES ${SWIG_I_FILE_${SD_API_VER}}
106+
OUTPUT_DIR ${PC_BLE_DRIVER_PY_OUTDIR}
107+
)
108+
109+
set_property(TARGET ${PYTHON_MODULE_${SD_API_VER}} PROPERTY CXX_STANDARD 14)
110+
111+
set_source_files_properties(${PC_BLE_DRIVER_PY_OUTDIR}/${PYTHON_MODULE_${SD_API_VER}}PYTHON_wrap.c PROPERTIES LANGUAGE CXX)
112+
113+
if(MSFT_NON_STANDARD_COMPILER)
114+
target_include_directories(${PYTHON_MODULE_${SD_API_VER}} PRIVATE ${PC_BLE_DRIVER_PY_OUTDIR})
115+
endif()
116+
117+
target_link_libraries(${PYTHON_MODULE_${SD_API_VER}} PRIVATE nrf::nrf_ble_driver_sd_api_v${SD_API_VER}_${NRF_BLE_DRIVER_LINKAGE_TYPE} ${PYTHON_LIBRARY})
118+
119+
get_target_property(CONNECTIVITY_SD_API_V${SD_API_VER}_PATH nrf::nrf_ble_driver_sd_api_v${SD_API_VER}_${NRF_BLE_DRIVER_LINKAGE_TYPE} INTERFACE_INCLUDE_DIRECTORIES)
120+
set(CONNECTIVITY_SD_API_V${SD_API_VER}_PATH ${CONNECTIVITY_SD_API_V${SD_API_VER}_PATH}/../../share/nrf-ble-driver/hex/sd_api_v${SD_API_VER})
121+
file(GLOB_RECURSE CONNECTIVITY_SD_API_V${SD_API_VER}_FILES "${CONNECTIVITY_SD_API_V${SD_API_VER}_PATH}/*.hex")
122+
123+
set_property(
124+
TARGET ${PYTHON_MODULE_${SD_API_VER}}
125+
PROPERTY RESOURCE "${CONNECTIVITY_SD_API_V${SD_API_VER}_FILES}"
126+
)
127+
if(APPLE)
128+
set_property(TARGET ${PYTHON_MODULE_${SD_API_VER}} PROPERTY SUFFIX ".so")
129+
endif()
130+
endforeach()
131+
132+
set(BUILD_OUTPUT_LIB_DIR "pc_ble_driver_py/lib")
133+
set(BUILD_OUTPUT_HEX_DIR "pc_ble_driver_py/hex")
134+
135+
foreach(SD_API_VER ${SD_API_VERS})
136+
install(
137+
TARGETS ${PYTHON_MODULE_${SD_API_VER}}
138+
RUNTIME DESTINATION ${BUILD_OUTPUT_LIB_DIR}
139+
LIBRARY DESTINATION ${BUILD_OUTPUT_LIB_DIR}
140+
ARCHIVE DESTINATION ${BUILD_OUTPUT_LIB_DIR}
141+
RESOURCE DESTINATION "${BUILD_OUTPUT_HEX_DIR}/sd_api_v${SD_API_VER}"
142+
)
143+
144+
install(
145+
FILES ${PC_BLE_DRIVER_PY_OUTDIR}/nrf_ble_driver_sd_api_v${SD_API_VER}.py
146+
DESTINATION ${BUILD_OUTPUT_LIB_DIR}
147+
)
148+
149+
if(NRF_BLE_DRIVER_LINKAGE_TYPE STREQUAL "shared")
150+
install(
151+
FILES $<TARGET_FILE:nrf::nrf_ble_driver_sd_api_v${SD_API_VER}_${NRF_BLE_DRIVER_LINKAGE_TYPE}>
152+
DESTINATION ${BUILD_OUTPUT_LIB_DIR}
153+
)
154+
endif()
155+
endforeach()

0 commit comments

Comments
 (0)