From eeccbb8add8e696a8f63a3393ee60d753cecb68e Mon Sep 17 00:00:00 2001 From: Aleksey Poruchikov Date: Mon, 30 Mar 2026 21:51:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=85=D1=83=D0=B9=20=D0=B2=D1=81?= =?UTF-8?q?=D1=91=20=D0=BE=D1=82=D1=81=D1=8E=D0=B4=D0=B0=20=3D))?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- CMakeLists.txt | 14 +++- build-x86.sh | 194 +++++++++++++++++++++++++++++++++++++++++++++++++ main.cpp | 17 ----- src/logger.cpp | 102 -------------------------- src/main.cpp | 5 ++ 6 files changed, 212 insertions(+), 122 deletions(-) create mode 100755 build-x86.sh delete mode 100644 main.cpp delete mode 100644 src/logger.cpp create mode 100644 src/main.cpp diff --git a/.gitignore b/.gitignore index 41ae811..9a8315e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -build/ +build*/ *.log diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d8d0f2..a8c2692 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,14 @@ cmake_minimum_required(VERSION 3.10) + project(test_app) -set(CMAKE_CXX_STANDART 17) -add_executable(test_app main.cpp) + +set(EXEC_NAME "${CMAKE_PROJECT_NAME}") + +set(CMAKE_CXX_STANDART 11) +add_executable(${EXEC_NAME}) + +file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS "src/*.cpp") + +target_sources(${EXEC_NAME} PRIVATE + ${SOURCES} +) diff --git a/build-x86.sh b/build-x86.sh new file mode 100755 index 0000000..ca9b29c --- /dev/null +++ b/build-x86.sh @@ -0,0 +1,194 @@ +#!/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 diff --git a/main.cpp b/main.cpp deleted file mode 100644 index 4baffd5..0000000 --- a/main.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "src/logger.cpp" - -int main() { - LoggerClass logger; - logger.appName = "Test"; - logger.pathToLogFiles = "/home/jam/local-gitea/CPlusPlus/logging/"; - logger.logLevel=0; - - logger.debug("YA SMOG STROKU PEREDAT'"); - logger.info("YA SMOG STROKU PEREDAT'"); - logger.warn("YA SMOG STROKU PEREDAT'"); - logger.error("YA SMOG STROKU PEREDAT'"); - logger.critical("YA SMOG STROKU PEREDAT'"); - - return 0; -} diff --git a/src/logger.cpp b/src/logger.cpp deleted file mode 100644 index 92f5f6d..0000000 --- a/src/logger.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include -#include -#include - -using namespace std; - -enum LogLevels { - DEBUG, - INFO, - WARN, - ERROR, - CRITICAL -}; - -class LoggerClass { - public: - std::string appName; - std::string pathToLogFiles = "/var/log/" + appName; - int logLevel; - - void debug(const std::string& message) { - action(LogLevels::DEBUG, message); - } - - void info(const std::string& message) { - action(LogLevels::INFO, message); - } - - void warn(const std::string& message) { - action(LogLevels::WARN, message); - } - - void error(const std::string& message) { - action(LogLevels::ERROR, message); - } - - void critical(const std::string& message) { - action(CRITICAL, message); - } - - private: - std::string filepath = ""; - bool openLogFileFailed = false; - - void action(int logLevel, const std::string message) { - std::string line; - time_t nowTime = time(NULL); - struct tm *now = localtime(&nowTime); - char str[20]; - strftime(str, sizeof(str), "%T", now); - std::string logLevelStr; - - switch (logLevel) { - case DEBUG: logLevelStr = std::string("DEBUG"); break; - case INFO: logLevelStr = std::string("INFO"); break; - case WARN: logLevelStr = std::string("WARN"); break; - case ERROR: logLevelStr = std::string("ERROR"); break; - case CRITICAL: logLevelStr = std::string("CRITICAL"); break; - default: logLevelStr = std::string("UNKNOWN"); break; - }; - line = appName + " - " + std::string(str) + " - [" + logLevelStr + "] " + message + "\n"; - if (logLevel > 2) { - print(line); - } - else { - printErr(line); - } - addToFile(line); - } - - void print(const std::string& message) { - std::cout << message; - } - void printErr(const std::string& message) { - std::cerr << message; - } - - void addToFile(const std::string& message) { - if (filepath == "") { - filepath = pathToLogFiles + "/" + appName + " " + getDateString() + ".log"; - } - - if (!openLogFileFailed) { - ofstream logFile; - logFile.open(filepath, std::ios_base::app); - if (logFile.is_open()) { - logFile << message; - } - else { openLogFileFailed = true; } - logFile.close(); - } - } - - const std::string getDateString() { - time_t nowTime = time(NULL); - struct tm *now = localtime(&nowTime); - char str[12]; - strftime(str, sizeof(str), "%Y-%m-%e", now); - return std::string(str); - } - -}; diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..1ac82fd --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,5 @@ +#include + +int main() { + return 0; +}