changed aarch64 build system

This commit is contained in:
Christoph Holzheuer
2026-04-02 14:36:47 +02:00
parent c3e5092845
commit b05180f575
12 changed files with 207 additions and 29 deletions

View File

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

View File

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

View File

@@ -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);
}

View File

@@ -0,0 +1,14 @@
#pragma once
#include <QMainWindow>
#include <QPushButton>
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
private:
QPushButton *m_helloButton;
};

View File

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

View File

@@ -0,0 +1,11 @@
#include <QApplication>
#include "MainWindow.hpp"
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}

View File