#!/usr/bin/env bash # # pack_ascend_toolkit.sh — создаёт два tar.gz архива из собранного ascend-toolkit: # # 1. ascend-toolkit-8.5.0-full.tar.gz — полный архив (все файлы) # 2. ascend-toolkit-8.5.0-minimal.tar.gz — минимальный набор для режима sim # # Использование: # ./pack_ascend_toolkit.sh [path_to_result_dir] # # Если аргумент не указан, используется ./result set -euo pipefail RESULT_DIR="${1:-$(cd "$(dirname "$0")" && ls -d result 2>/dev/null || echo result)}" VERSION="8.5.0" OUTPUT_DIR="${2:-$(dirname "$0")}" if [ ! -d "$RESULT_DIR" ]; then echo "[ERROR] Directory not found: $RESULT_DIR" exit 1 fi cd "$RESULT_DIR" # ============================================================================= # 1. Полный архив — всё содержимое # ============================================================================= echo "=== Creating FULL archive ===" FULL_ARCHIVE="${OUTPUT_DIR}/ascend-toolkit-${VERSION}-full.tar.gz" tar czf "$FULL_ARCHIVE" . FULL_SIZE=$(wc -c < "$FULL_ARCHIVE" | numfmt --to=iec-i --suffix=B) echo " FULL archive: $FULL_ARCHIVE ($FULL_SIZE)" # ============================================================================= # 2. Минимальный архив — только файлы для режима sim # ============================================================================= echo "=== Creating MINIMAL archive (sim mode) ===" # Создаём временную директорию с минимальным набором MINIMAL_DIR=$(mktemp -d) trap "rm -rf $MINIMAL_DIR" EXIT # Копируем только нужные для sim-режима файлы/директории # # Структура основана на том, что реально используется при # bash run.sh -r sim -v Ascend310P3 # # Основные потребители: # - cmake/npu_lib.cmake → compiler/tikcpp/ascendc_kernel_cmake # - bisheng компиляция → tools/bisheng_compiler # - cce линковка → tools/ccec_compiler (через x86_64-linux/ccec_compiler symlink) # - симулятор → tools/simulator/Ascend310P3/lib # - заголовки → include # - библиотеки → lib64, devlib # - OPP данные → opp/built-in (нужны для op_impl) # - Python bindings → python/site-packages # - Runtime → runtime # - Toolkit → toolkit # - Конфигурации → conf, compat # - set_env.sh — корень # ============================================================================= echo " Copying essential files..." # Корневые файлы mkdir -p "$MINIMAL_DIR" cp -a set_env.sh "$MINIMAL_DIR/" 2>/dev/null || true # bin — содержит setenv.bash symlink + ключевые утилиты mkdir -p "$MINIMAL_DIR/bin" cp -a bin/* "$MINIMAL_DIR/bin/" 2>/dev/null || true # compiler — tikcpp cmake модули mkdir -p "$MINIMAL_DIR/compiler" cp -a compiler/tikcpp "$MINIMAL_DIR/compiler/" 2>/dev/null || true # compat mkdir -p "$MINIMAL_DIR/compat" cp -a compat/* "$MINIMAL_DIR/compat/" 2>/dev/null || true # conf mkdir -p "$MINIMAL_DIR/conf" cp -a conf/* "$MINIMAL_DIR/conf/" 2>/dev/null || true # devlib — stub библиотеки для разработки mkdir -p "$MINIMAL_DIR/devlib" cp -a devlib/* "$MINIMAL_DIR/devlib/" 2>/dev/null || true # fwkacllib — framework ACL библиотеки mkdir -p "$MINIMAL_DIR/fwkacllib" cp -a fwkacllib/* "$MINIMAL_DIR/fwkacllib/" 2>/dev/null || true # include — все заголовочные файлы (критично для компиляции) mkdir -p "$MINIMAL_DIR/include" cp -a include/* "$MINIMAL_DIR/include/" 2>/dev/null || true # lib64 — основные библиотеки mkdir -p "$MINIMAL_DIR/lib64" cp -a lib64/* "$MINIMAL_DIR/lib64/" 2>/dev/null || true # pkg_inc mkdir -p "$MINIMAL_DIR/pkg_inc" cp -a pkg_inc/* "$MINIMAL_DIR/pkg_inc/" 2>/dev/null || true # python mkdir -p "$MINIMAL_DIR/python" cp -a python/* "$MINIMAL_DIR/python/" 2>/dev/null || true # runtime mkdir -p "$MINIMAL_DIR/runtime" cp -a runtime/* "$MINIMAL_DIR/runtime/" 2>/dev/null || true # toolkit mkdir -p "$MINIMAL_DIR/toolkit" cp -a toolkit/* "$MINIMAL_DIR/toolkit/" 2>/dev/null || true # x86_64-linux — содержит архитектурно-зависимые файлы (symlinks на реальные директории) mkdir -p "$MINIMAL_DIR/x86_64-linux" cp -a x86_64-linux/* "$MINIMAL_DIR/x86_64-linux/" 2>/dev/null || true # tools — выборочно: # - bisheng_compiler — основной AscendC компилятор # - ccec_compiler — linker для AI Core # - simulator — библиотека симулятора для sim режима # - tikcpp — tikcpp файлы # - aml — используется в LD_LIBRARY_PATH # - profiler — может использоваться # - ascendc_tools — ascendc инструменты mkdir -p "$MINIMAL_DIR/tools" cp -a tools/bisheng_compiler "$MINIMAL_DIR/tools/" 2>/dev/null || true cp -a tools/ccec_compiler "$MINIMAL_DIR/tools/" 2>/dev/null || true cp -a tools/simulator "$MINIMAL_DIR/tools/" 2>/dev/null || true cp -a tools/tikcpp "$MINIMAL_DIR/tools/" 2>/dev/null || true cp -a tools/aml "$MINIMAL_DIR/tools/" 2>/dev/null || true cp -a tools/profiler "$MINIMAL_DIR/tools/" 2>/dev/null || true cp -a tools/ascendc_tools "$MINIMAL_DIR/tools/" 2>/dev/null || true # opp — operator packages # Для sim режима нужны op_impl (tiling и kernel реализации) mkdir -p "$MINIMAL_DIR/opp" cp -a opp/built-in "$MINIMAL_DIR/opp/" 2>/dev/null || true cp -a opp/include "$MINIMAL_DIR/opp/" 2>/dev/null || true cp -a opp/lib64 "$MINIMAL_DIR/opp/" 2>/dev/null || true echo " Compressing..." MINIMAL_ARCHIVE="${OUTPUT_DIR}/ascend-toolkit-${VERSION}-minimal.tar.gz" tar czf "$MINIMAL_ARCHIVE" -C "$MINIMAL_DIR" . MINIMAL_SIZE=$(wc -c < "$MINIMAL_ARCHIVE" | numfmt --to=iec-i --suffix=B) echo " MINIMAL archive: $MINIMAL_ARCHIVE ($MINIMAL_SIZE)" # ============================================================================= # Итог # ============================================================================= echo "" echo "=== Summary ===" echo " FULL archive: $FULL_SIZE" echo " MINIMAL archive: $MINIMAL_SIZE" echo "" echo "Upload these files to your Gitea instance." echo "Then update flake.nix to use fetchurl instead of local path."