1*89c4ff92SAndroid Build Coastguard Worker# 2*89c4ff92SAndroid Build Coastguard Worker# Copyright 2020 NXP 3*89c4ff92SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker# 5*89c4ff92SAndroid Build Coastguard Workerset(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py") 6*89c4ff92SAndroid Build Coastguard Workerset(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py") 7*89c4ff92SAndroid Build Coastguard Workerset(SWIG_GENERATE_IN "${CMAKE_CURRENT_SOURCE_DIR}/swig_generate.py") 8*89c4ff92SAndroid Build Coastguard Workerset(SWIG_GENERATE "${CMAKE_CURRENT_BINARY_DIR}/swig_generate.py") 9*89c4ff92SAndroid Build Coastguard Workerset(OUT_WRAP "${CMAKE_CURRENT_BINARY_DIR}/pyarmnn.wrap.timestamp") 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Workerconfigure_file(${SETUP_PY_IN} ${SETUP_PY} COPYONLY) 12*89c4ff92SAndroid Build Coastguard Workerconfigure_file(${SWIG_GENERATE_IN} ${SWIG_GENERATE} COPYONLY) 13*89c4ff92SAndroid Build Coastguard Worker 14*89c4ff92SAndroid Build Coastguard Worker# local env variables passed down to the python scripts 15*89c4ff92SAndroid Build Coastguard Worker# scripts can thus be used standalone 16*89c4ff92SAndroid Build Coastguard Workerset(ARMNN_ENV ARMNN_INCLUDE="${PROJECT_SOURCE_DIR}/profiling:${PROJECT_SOURCE_DIR}/profiling/common/include:${PROJECT_SOURCE_DIR}/profiling/client/include:${PROJECT_SOURCE_DIR}/include" 17*89c4ff92SAndroid Build Coastguard Worker ARMNN_LIB=${PROJECT_BINARY_DIR} 18*89c4ff92SAndroid Build Coastguard Worker SWIG_EXECUTABLE=${SWIG_EXECUTABLE}) 19*89c4ff92SAndroid Build Coastguard Worker 20*89c4ff92SAndroid Build Coastguard Worker# common step - generates swig wrappers and builds the lib 21*89c4ff92SAndroid Build Coastguard Workeradd_custom_command(OUTPUT ${OUT_WRAP} 22*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/README.md ${CMAKE_CURRENT_BINARY_DIR} 23*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE ${CMAKE_CURRENT_BINARY_DIR} 24*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src 25*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/test ${CMAKE_CURRENT_BINARY_DIR}/test 26*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "Clearing Python build ..." 27*89c4ff92SAndroid Build Coastguard Worker COMMAND ${Python3_EXECUTABLE} ${SETUP_PY} --quiet clean --all 28*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "Generating SWIG wrappers ..." 29*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E env ${ARMNN_ENV} ${Python3_EXECUTABLE} ${SWIG_GENERATE} 30*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "Building Python extensions ..." 31*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E env ${ARMNN_ENV} ${Python3_EXECUTABLE} ${SETUP_PY} --quiet build_ext --inplace 32*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/pyarmnn/_generated ${CMAKE_CURRENT_BINARY_DIR}/src/pyarmnn/_generated 33*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E touch ${OUT_WRAP} 34*89c4ff92SAndroid Build Coastguard Worker DEPENDS armnn) 35*89c4ff92SAndroid Build Coastguard Worker 36*89c4ff92SAndroid Build Coastguard Worker# source package 37*89c4ff92SAndroid Build Coastguard Workerif(BUILD_PYTHON_SRC) 38*89c4ff92SAndroid Build Coastguard Worker set(OUT_SRC "${CMAKE_CURRENT_BINARY_DIR}/pyarmnn.src.timestamp") 39*89c4ff92SAndroid Build Coastguard Worker add_custom_command(OUTPUT ${OUT_SRC} 40*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "Building Python source package ..." 41*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E env ${ARMNN_ENV} ${Python3_EXECUTABLE} ${SETUP_PY} --quiet sdist 42*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E touch ${OUT_SRC} 43*89c4ff92SAndroid Build Coastguard Worker DEPENDS ${OUT_WRAP}) 44*89c4ff92SAndroid Build Coastguard Workerendif() 45*89c4ff92SAndroid Build Coastguard Worker# wheel package 46*89c4ff92SAndroid Build Coastguard Workerif(BUILD_PYTHON_WHL) 47*89c4ff92SAndroid Build Coastguard Worker set(OUT_WHL "${CMAKE_CURRENT_BINARY_DIR}/pyarmnn.whl.timestamp") 48*89c4ff92SAndroid Build Coastguard Worker add_custom_command(OUTPUT ${OUT_WHL} 49*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "Building Python binary package ..." 50*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E env ${ARMNN_ENV} ${Python3_EXECUTABLE} ${SETUP_PY} --quiet bdist_wheel 51*89c4ff92SAndroid Build Coastguard Worker COMMAND ${CMAKE_COMMAND} -E touch ${OUT_WHL} 52*89c4ff92SAndroid Build Coastguard Worker DEPENDS ${OUT_WRAP}) 53*89c4ff92SAndroid Build Coastguard Workerendif() 54*89c4ff92SAndroid Build Coastguard Workeradd_custom_target(pyarmnn ALL DEPENDS ${OUT_WRAP} ${OUT_SRC} ${OUT_WHL}) 55