109 lines
4.0 KiB
CMake
109 lines
4.0 KiB
CMake
# -----------------------------------------------------------------------------------------------------------
|
|
# 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}
|
|
)
|