Files
Hueta/build-x86.sh

195 lines
6.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -e # Прерывать выполнение при ошибках
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Конфигурация
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BUILD_DIR="build-x86"
TOOLCHAIN_FILE="toolchain-x86.cmake"
JOBS=$(nproc)
# Функции для вывода
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Проверка наличия toolchain файла
check_toolchain() {
if [ ! -f "$SCRIPT_DIR/$TOOLCHAIN_FILE" ]; then
print_error "Файл $TOOLCHAIN_FILE не найден в $SCRIPT_DIR"
exit 1
fi
print_info "Найден toolchain файл: $TOOLCHAIN_FILE"
}
# Создание директории сборки
setup_build_dir() {
print_info "Настройка директории сборки: $BUILD_DIR"
if [ -d "$SCRIPT_DIR/$BUILD_DIR" ]; then
print_warning "Директория сборки уже существует"
read -p "Очистить существующую сборку? [y/N]: " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
rm -rf "$SCRIPT_DIR/$BUILD_DIR"
print_info "Директория сборки очищена"
fi
fi
mkdir -p "$SCRIPT_DIR/$BUILD_DIR"
print_success "Директория сборки готова"
}
# Конфигурация CMake
configure_cmake() {
print_info "Конфигурация CMake для x86..."
cd "$SCRIPT_DIR/$BUILD_DIR"
# Определяем тип сборки (Debug по умолчанию для отладки)
local build_type="${BUILD_TYPE:-Debug}"
print_info "Тип сборки: $build_type"
cmake \
-DCMAKE_BUILD_TYPE="$build_type" \
-DCMAKE_VERBOSE_MAKEFILE=ON \
..
if [ $? -eq 0 ]; then
print_success "CMake конфигурация завершена успешно"
else
print_error "Ошибка конфигурации CMake"
exit 1
fi
}
# Сборка проекта
build_project() {
print_info "Сборка проекта (используется $JOBS потоков)..."
cd "$SCRIPT_DIR/$BUILD_DIR"
make -j$JOBS
if [ $? -eq 0 ]; then
print_success "Сборка завершена успешно"
else
print_error "Ошибка сборки"
exit 1
fi
}
# Проверка результата сборки
check_build_result() {
local binary_path="$SCRIPT_DIR/$BUILD_DIR/test_app"
if [ -f "$binary_path" ]; then
print_success "Исполняемый файл создан: $binary_path"
# Проверяем архитектуру
local file_info=$(file "$binary_path")
print_info "Информация о файле: $file_info"
if echo "$file_info" | grep -q "x86-64\|x86_64"; then
print_success "Подтверждена x86 архитектура"
else
print_warning "Архитектура может быть неправильной"
fi
# Показываем размер файла
local file_size=$(du -h "$binary_path" | cut -f1)
print_info "Размер исполняемого файла: $file_size"
else
print_error "Исполняемый файл не найден: $binary_path"
exit 1
fi
}
# Главная функция
main() {
print_info "=== Кросс-компиляция test_app для x86 ==="
# Переходим в директорию скрипта
cd "$SCRIPT_DIR"
# Проверки
# Сборка
setup_build_dir
configure_cmake
build_project
check_build_result
print_success "=== Кросс-компиляция завершена успешно! ==="
print_info "Исполняемый файл: $SCRIPT_DIR/$BUILD_DIR/test_app"
print_info "Для запуска на x86 устройстве скопируйте файл и запустите его"
}
# Обработка аргументов командной строки
case "${1:-}" in
"clean")
print_info "Очистка директории сборки x86..."
rm -rf "$SCRIPT_DIR/$BUILD_DIR"
print_success "Директория сборки очищена"
exit 0
;;
"debug")
export BUILD_TYPE="Debug"
print_info "Режим Debug сборки (с отладочными символами)"
main
;;
"release")
export BUILD_TYPE="Release"
print_info "Режим Release сборки (оптимизированная)"
main
;;
"help"|"-h"|"--help")
echo "Использование: $0 [команда]"
echo ""
echo "Команды:"
echo " (нет) - Выполнить Debug сборку (по умолчанию)"
echo " debug - Выполнить Debug сборку (с отладочными символами)"
echo " release - Выполнить Release сборку (оптимизированная)"
echo " clean - Очистить директорию сборки"
echo " help - Показать эту справку"
echo ""
echo "Примеры:"
echo " $0 # Debug сборка"
echo " $0 debug # Debug сборка (явно)"
echo " $0 release # Release сборка"
echo " $0 clean # Очистка"
echo ""
echo "Переменные окружения:"
echo " BUILD_TYPE # Debug, Release, RelWithDebInfo, MinSizeRel"
exit 0
;;
"")
export BUILD_TYPE="${BUILD_TYPE:-Debug}"
main
;;
*)
print_error "Неизвестная команда: $1"
print_info "Используйте '$0 help' для справки"
exit 1
;;
esac