Нахуй всё отсюда =))
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,2 +1,2 @@
|
|||||||
build/
|
build*/
|
||||||
*.log
|
*.log
|
||||||
|
|||||||
@@ -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
194
build-x86.sh
Executable 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
|
||||||
17
main.cpp
17
main.cpp
@@ -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;
|
|
||||||
}
|
|
||||||
102
src/logger.cpp
102
src/logger.cpp
@@ -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
5
src/main.cpp
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user