# ----------------------------------------------------------------------------------------------------------- # Copyright (c) 2025 Huawei Technologies Co., Ltd. # This program is free software, you can redistribute it and/or modify it under the terms and conditions of # CANN Open Software License Agreement Version 2.0 (the "License"). # Please refer to the License for details. You may not use this file except in compliance with the License. # THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, # INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. # See LICENSE in the root of the software repository for the full text of the License. # ----------------------------------------------------------------------------------------------------------- # makeself.cmake - 自定义 makeself 打包脚本 # 设置 makeself 路径 set(MAKESELF_EXE ${CPACK_MAKESELF_PATH}/makeself.sh) set(MAKESELF_HEADER_EXE ${CPACK_MAKESELF_PATH}/makeself-header.sh) if(NOT MAKESELF_EXE) message(FATAL_ERROR "makeself not found!") endif() # 创建临时安装目录 set(STAGING_DIR "${CPACK_CMAKE_BINARY_DIR}/_CPack_Packages/makeself_staging") # 先删除再创建 file(REMOVE_RECURSE "${STAGING_DIR}") file(MAKE_DIRECTORY "${STAGING_DIR}") # 执行安装到临时目录 execute_process( COMMAND "${CMAKE_COMMAND}" --install "${CPACK_CMAKE_BINARY_DIR}" --prefix "${STAGING_DIR}" RESULT_VARIABLE INSTALL_RESULT ) if(NOT INSTALL_RESULT EQUAL 0) message(FATAL_ERROR "Installation to staging directory failed: ${INSTALL_RESULT}") endif() # 生成安装配置文件 set(CSV_OUTPUT ${CPACK_CMAKE_BINARY_DIR}/filelist.csv) execute_process( COMMAND python3 ${CPACK_CMAKE_SOURCE_DIR}/scripts/package/package.py --pkg_name ops_transformer --chip_name ${CPACK_SOC} --os_arch linux-${CPACK_ARCH} --version_dir ${CPACK_VERSION} WORKING_DIRECTORY ${CPACK_CMAKE_BINARY_DIR} OUTPUT_VARIABLE result ERROR_VARIABLE error RESULT_VARIABLE code OUTPUT_STRIP_TRAILING_WHITESPACE ) message(STATUS "package.py result: ${code}") if (NOT code EQUAL 0) message(FATAL_ERROR "Filelist generation failed: ${result}") else () message(STATUS "Filelist generated successfully: ${result}") if (NOT EXISTS ${CSV_OUTPUT}) message(FATAL_ERROR "Output file not created: ${CSV_OUTPUT}") endif () endif () set(SCENE_OUT_PUT ${CPACK_CMAKE_BINARY_DIR}/scene.info ) set(TRANSFORMER_VERSION_OUT_PUT ${CPACK_CMAKE_BINARY_DIR}/ops_transformer_version.h ) configure_file( ${SCENE_OUT_PUT} ${STAGING_DIR}/share/info/ops_transformer/ COPYONLY ) configure_file( ${CSV_OUTPUT} ${STAGING_DIR}/share/info/ops_transformer/script/ COPYONLY ) configure_file( ${TRANSFORMER_VERSION_OUT_PUT} ${STAGING_DIR}/share/info/ops_transformer/ COPYONLY ) # makeself打包 file(STRINGS ${CPACK_CMAKE_BINARY_DIR}/makeself.txt script_output) string(REPLACE " " ";" makeself_param_string "${script_output}") string(REGEX MATCH "cann.*\\.run" package_name "${makeself_param_string}") list(LENGTH makeself_param_string LIST_LENGTH) math(EXPR INSERT_INDEX "${LIST_LENGTH} - 2") list(INSERT makeself_param_string ${INSERT_INDEX} "${STAGING_DIR}") message(STATUS "script output: ${script_output}") message(STATUS "makeself: ${makeself_param_string}") message(STATUS "package: ${package_name}") execute_process(COMMAND bash ${MAKESELF_EXE} --header ${MAKESELF_HEADER_EXE} --help-header share/info/ops_transformer/script/help.info ${makeself_param_string} share/info/ops_transformer/script/install.sh WORKING_DIRECTORY ${STAGING_DIR} RESULT_VARIABLE EXEC_RESULT ERROR_VARIABLE EXEC_ERROR ) if(NOT EXEC_RESULT EQUAL 0) message(FATAL_ERROR "makeself packaging failed: ${EXEC_ERROR}") endif() execute_process( COMMAND mkdir -p ${CPACK_PACKAGE_DIRECTORY} COMMAND mv ${STAGING_DIR}/${package_name} ${CPACK_PACKAGE_DIRECTORY}/ COMMAND echo "build pkg success: ${CPACK_PACKAGE_DIRECTORY}/${package_name}" WORKING_DIRECTORY ${STAGING_DIR} )