From 60706e5e52cc80f3c6ea0f305456f808a9635735 Mon Sep 17 00:00:00 2001 From: Christoph Holzheuer Date: Wed, 1 Apr 2026 17:21:33 +0200 Subject: [PATCH] added docker --- docker4Bionx/CMakeLists.txt | 24 ++++++++++++++++++++ docker4Bionx/Dockerfile | 34 ++++++++++++++++++++++++++++ docker4Bionx/MainWindow.cpp | 17 ++++++++++++++ docker4Bionx/MainWindow.hpp | 14 ++++++++++++ docker4Bionx/aarch64-toolchain.cmake | 25 ++++++++++++++++++++ docker4Bionx/main.cpp | 11 +++++++++ 6 files changed, 125 insertions(+) create mode 100644 docker4Bionx/CMakeLists.txt create mode 100644 docker4Bionx/Dockerfile create mode 100644 docker4Bionx/MainWindow.cpp create mode 100644 docker4Bionx/MainWindow.hpp create mode 100644 docker4Bionx/aarch64-toolchain.cmake create mode 100644 docker4Bionx/main.cpp diff --git a/docker4Bionx/CMakeLists.txt b/docker4Bionx/CMakeLists.txt new file mode 100644 index 0000000..8cad5f8 --- /dev/null +++ b/docker4Bionx/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.16) +project(HelloWorldQt6 VERSION 1.0.0 LANGUAGES CXX) + +# Wir nutzen modernes C++ +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Qt-spezifische Automatismen aktivieren +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTORCC ON) + +# Qt6 Widgets-Modul suchen +find_package(Qt6 REQUIRED COMPONENTS Widgets) + +# Executable definieren und Quelldateien hinzufügen +add_executable(HelloWorldApp + main.cpp + MainWindow.cpp + MainWindow.hpp +) + +# Qt6 Bibliotheken linken +target_link_libraries(HelloWorldApp PRIVATE Qt6::Widgets) \ No newline at end of file diff --git a/docker4Bionx/Dockerfile b/docker4Bionx/Dockerfile new file mode 100644 index 0000000..777cfc3 --- /dev/null +++ b/docker4Bionx/Dockerfile @@ -0,0 +1,34 @@ +# Wir nutzen Debian Trixie als Basis für das aktuelle Raspberry Pi OS +FROM debian:trixie + +# Verhindert interaktive Prompts während der Installation +ENV DEBIAN_FRONTEND=noninteractive + +# 1. Multiarch für arm64 aktivieren +RUN dpkg --add-architecture arm64 && \ + apt-get update && \ + apt-get upgrade -y + +# 2. Host-Build-Tools und Cross-Compiler installieren +RUN apt-get install -y \ + build-essential \ + crossbuild-essential-arm64 \ + cmake \ + ninja-build \ + git \ + pkg-config + +# 3. Qt6 für den HOST installieren (für moc, uic, etc.) +RUN apt-get install -y \ + qt6-base-dev \ + qt6-tools-dev-tools + +# 4. Qt6 Bibliotheken für das TARGET (arm64) installieren +RUN apt-get install -y \ + qt6-base-dev:arm64 \ + libglvnd-dev:arm64 + +# Aufräumen +RUN apt-get clean && rm -rf /var/lib/apt/lists/* + +WORKDIR /workspace diff --git a/docker4Bionx/MainWindow.cpp b/docker4Bionx/MainWindow.cpp new file mode 100644 index 0000000..19835d1 --- /dev/null +++ b/docker4Bionx/MainWindow.cpp @@ -0,0 +1,17 @@ +#include "MainWindow.hpp" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + // Button erstellen + m_helloButton = new QPushButton("Hello World", this); + + // Den Button zum zentralen Widget des Fensters machen + setCentralWidget(m_helloButton); + + // Eine angenehme Startgröße für das Fenster setzen + resize(400, 300); + + // Ein kleines Extra: Klick auf den Button schließt die App + connect(m_helloButton, &QPushButton::clicked, this, &QMainWindow::close); +} diff --git a/docker4Bionx/MainWindow.hpp b/docker4Bionx/MainWindow.hpp new file mode 100644 index 0000000..b87a40d --- /dev/null +++ b/docker4Bionx/MainWindow.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include +#include + +class MainWindow : public QMainWindow { + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = nullptr); + +private: + QPushButton *m_helloButton; +}; diff --git a/docker4Bionx/aarch64-toolchain.cmake b/docker4Bionx/aarch64-toolchain.cmake new file mode 100644 index 0000000..cf27c13 --- /dev/null +++ b/docker4Bionx/aarch64-toolchain.cmake @@ -0,0 +1,25 @@ +# Name des Zielsystems +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +# Die Cross-Compiler aus dem Debian-Paket +set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++) + +# Wo das System nach Bibliotheken und Headern suchen soll (Sysroot) +set(CMAKE_SYSROOT /) + +# Pfade für pkg-config anpassen, damit es die arm64 .pc Dateien findet +set(ENV{PKG_CONFIG_DIR} "") +set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig") +set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT}) + +# Suchverhalten für find_package(), find_library() etc. +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Programme (wie moc) auf dem Host suchen +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) # Libs nur im Target (arm64) suchen +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) # Header nur im Target (arm64) suchen +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) # CMake-Pakete nur im Target suchen + +# *** WICHTIG FÜR QT6 *** +# Sagt Qt, wo es die Host-Tools für das Code-Generieren findet +set(QT_HOST_PATH "/usr") diff --git a/docker4Bionx/main.cpp b/docker4Bionx/main.cpp new file mode 100644 index 0000000..7aeec86 --- /dev/null +++ b/docker4Bionx/main.cpp @@ -0,0 +1,11 @@ +#include +#include "MainWindow.hpp" + +int main(int argc, char *argv[]) { + QApplication app(argc, argv); + + MainWindow window; + window.show(); + + return app.exec(); +}