Нахуй всё отсюда =))

This commit is contained in:
2026-03-30 21:51:46 +03:00
parent 78412be6fe
commit eeccbb8add
6 changed files with 212 additions and 122 deletions

2
.gitignore vendored
View File

@@ -1,2 +1,2 @@
build/ build*/
*.log *.log

View File

@@ -1,4 +1,14 @@
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.10)
project(test_app) 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}
)

194
build-x86.sh Executable file
View File

@@ -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

View File

@@ -1,17 +0,0 @@
#include <iostream>
#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;
}

View File

@@ -1,102 +0,0 @@
#include <iostream>
#include <fstream>
#include <time.h>
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);
}
};

5
src/main.cpp Normal file
View File

@@ -0,0 +1,5 @@
#include <iostream>
int main() {
return 0;
}