1# find exec 2find_package(Python3 COMPONENTS Interpreter) 3if(NOT Python3_FOUND) 4 message(FATAL_ERROR "No python3 found.") 5endif() 6 7set(PYTHON ${Python3_EXECUTABLE}) 8set(PYTHON_VERSION ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}) 9 10if(NOT (PYTHON_VERSION MATCHES "3.9" OR PYTHON_VERSION MATCHES "3.8" OR PYTHON_VERSION MATCHES "3.7")) 11 message(FATAL_ERROR "FIND PYTHON VERSION ${PYTHON_VERSION} BUT CAN NOT MATCH PYTHON VERSION 3.9 OR 3.8 OR 3.7") 12endif() 13 14find_package(Git) 15if(NOT GIT_FOUND) 16 message("No git found.") 17 return() 18endif() 19set(GIT ${GIT_EXECUTABLE}) 20 21# set path 22set(MS_ROOT_DIR ${CPACK_CMAKE_SOURCE_DIR}) 23set(MS_PACK_ROOT_DIR ${CPACK_PACK_ROOT_DIR}) 24 25# set package file name 26if(CMAKE_SYSTEM_NAME MATCHES "Linux") 27 if(PYTHON_VERSION MATCHES "3.9") 28 set(PY_TAGS "cp39-cp39") 29 elseif(PYTHON_VERSION MATCHES "3.8") 30 set(PY_TAGS "cp38-cp38") 31 elseif(PYTHON_VERSION MATCHES "3.7") 32 set(PY_TAGS "cp37-cp37m") 33 else() 34 message("Could not find 'Python 3.9' OR 'Python 3.8' or 'Python 3.7'") 35 return() 36 endif() 37 string(TOLOWER linux_${CMAKE_HOST_SYSTEM_PROCESSOR} PLATFORM_TAG) 38elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin") 39 if(PYTHON_VERSION MATCHES "3.9") 40 set(PY_TAGS "py39-none") 41 elseif(PYTHON_VERSION MATCHES "3.8") 42 set(PY_TAGS "py38-none") 43 elseif(PYTHON_VERSION MATCHES "3.7") 44 set(PY_TAGS "py37-none") 45 else() 46 message("Could not find 'Python 3.9' OR 'Python 3.8' or 'Python 3.7'") 47 return() 48 endif() 49 set(PLATFORM_TAG "any") 50elseif(CMAKE_SYSTEM_NAME MATCHES "Windows") 51 if(PYTHON_VERSION MATCHES "3.9") 52 set(PY_TAGS "cp39-cp39") 53 elseif(PYTHON_VERSION MATCHES "3.8") 54 set(PY_TAGS "cp38-cp38") 55 elseif(PYTHON_VERSION MATCHES "3.7") 56 set(PY_TAGS "cp37-cp37m") 57 else() 58 message("Could not find 'Python 3.9' OR 'Python 3.8' or 'Python 3.7'") 59 return() 60 endif() 61 set(PLATFORM_TAG "win_amd64") 62else() 63 message(FATAL_ERROR "other platform: ${CMAKE_SYSTEM_NAME}") 64endif() 65 66# get git commit id 67set(GIT_COMMIT_ID "") 68execute_process( 69 COMMAND ${GIT} log --format='[sha1]:%h,[branch]:%d' --abbrev=8 -1 70 OUTPUT_VARIABLE GIT_COMMIT_ID 71 WORKING_DIRECTORY ${MS_ROOT_DIR} 72 ERROR_QUIET) 73string(REPLACE " " "" GIT_COMMIT_ID ${GIT_COMMIT_ID}) 74 75set(ENV{BACKEND_POLICY} ${CPACK_MS_BACKEND}) 76set(ENV{BACKEND_TARGET} ${CPACK_MS_TARGET}) 77set(ENV{MS_PACKAGE_NAME} ${CPACK_MS_PACKAGE_NAME}) 78set(ENV{COMMIT_ID} ${GIT_COMMIT_ID}) 79 80file(GLOB DEBUG_SYM 81 ${MS_PACK_ROOT_DIR}/mindspore/*.so 82 ${MS_PACK_ROOT_DIR}/mindspore/lib/*.so 83) 84 85file(GLOB DEBUG_STRIP_SYM 86 ${MS_PACK_ROOT_DIR}/mindspore/*.so 87 ${MS_PACK_ROOT_DIR}/mindspore/lib/*.so* 88) 89 90set(CMAKE_OBJCOPY $ENV{CROSS_COMPILE}objcopy) 91set(CMAKE_STRIP $ENV{CROSS_COMPILE}strip) 92 93if(CPACK_ENABLE_SYM_FILE) 94 foreach(schema ${DEBUG_SYM}) 95 execute_process( 96 COMMAND ${CMAKE_OBJCOPY} "--only-keep-debug" ${schema} ${schema}.sym 97 WORKING_DIRECTORY ${MS_PACK_ROOT_DIR} 98 ) 99 endforeach() 100endif() 101 102if("${CPACK_CMAKE_BUILD_TYPE}" STREQUAL "Release") 103 foreach(schema ${DEBUG_STRIP_SYM}) 104 execute_process( 105 COMMAND ${CMAKE_STRIP} ${schema} 106 WORKING_DIRECTORY ${MS_PACK_ROOT_DIR} 107 ) 108 endforeach() 109endif() 110 111file(GLOB DEBUG_SYM_FILE 112 ${MS_PACK_ROOT_DIR}/mindspore/*.sym 113 ${MS_PACK_ROOT_DIR}/mindspore/lib/*.sym 114) 115 116if(CPACK_ENABLE_SYM_FILE) 117 file(MAKE_DIRECTORY ${MS_ROOT_DIR}/debug_info) 118 file(COPY ${DEBUG_SYM_FILE} DESTINATION ${MS_ROOT_DIR}/debug_info/) 119 file(REMOVE_RECURSE ${DEBUG_SYM_FILE}) 120endif() 121 122execute_process( 123 COMMAND ${PYTHON} ${MS_ROOT_DIR}/setup.py "bdist_wheel" 124 WORKING_DIRECTORY ${MS_PACK_ROOT_DIR} 125) 126 127# finally 128set(PACKAGE_NAME ${CPACK_MS_PACKAGE_NAME}) 129if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows") 130 string(REPLACE "-" "_" PACKAGE_NAME ${PACKAGE_NAME}) 131 execute_process( 132 COMMAND chmod -R 700 ${MS_PACK_ROOT_DIR}/mindspore/ 133 COMMAND chmod -R 700 ${MS_PACK_ROOT_DIR}/${PACKAGE_NAME}.egg-info/ 134 ) 135endif() 136 137file(GLOB WHL_FILE ${MS_PACK_ROOT_DIR}/dist/*.whl) 138get_filename_component(ORIGIN_FILE_NAME ${WHL_FILE} NAME) 139string(REPLACE "-" ";" ORIGIN_FILE_NAME ${ORIGIN_FILE_NAME}) 140list(GET ORIGIN_FILE_NAME 1 VERSION) 141set(NEW_FILE_NAME ${PACKAGE_NAME}-${VERSION}-${PY_TAGS}-${PLATFORM_TAG}.whl) 142file(RENAME ${WHL_FILE} ${MS_PACK_ROOT_DIR}/${NEW_FILE_NAME}) 143file(REMOVE_RECURSE ${MS_ROOT_DIR}/output) 144file(MAKE_DIRECTORY ${MS_ROOT_DIR}/output) 145file(COPY ${MS_PACK_ROOT_DIR}/${NEW_FILE_NAME} DESTINATION ${MS_ROOT_DIR}/output/) 146 147file(SHA256 ${MS_ROOT_DIR}/output/${NEW_FILE_NAME} SHA256_VAR) 148file(WRITE ${MS_ROOT_DIR}/output/${NEW_FILE_NAME}.sha256 ${SHA256_VAR} " " ${NEW_FILE_NAME}) 149set(CMAKE_TAR $ENV{CROSS_COMPILE}tar) 150if(CPACK_ENABLE_SYM_FILE) 151 file(MAKE_DIRECTORY ${MS_ROOT_DIR}/output/${PACKAGE_NAME}-${VERSION}-${PY_TAGS}-${PLATFORM_TAG}) 152 file(COPY ${MS_ROOT_DIR}/debug_info/ DESTINATION 153 ${MS_ROOT_DIR}/output/${PACKAGE_NAME}-${VERSION}-${PY_TAGS}-${PLATFORM_TAG}/) 154 execute_process(COMMAND 155 ${CMAKE_COMMAND} -E ${CMAKE_TAR} cfv 156 ${MS_ROOT_DIR}/output/${PACKAGE_NAME}-${VERSION}-${PY_TAGS}-${PLATFORM_TAG}.zip 157 ${MS_ROOT_DIR}/output/${PACKAGE_NAME}-${VERSION}-${PY_TAGS}-${PLATFORM_TAG}/ --format=zip 158 WORKING_DIRECTORY ${MS_ROOT_DIR}) 159 file(REMOVE_RECURSE ${MS_ROOT_DIR}/debug_info) 160 file(REMOVE_RECURSE ${MS_ROOT_DIR}/output/${PACKAGE_NAME}-${VERSION}-${PY_TAGS}-${PLATFORM_TAG}) 161endif() 162