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

@@ -1,6 +1,5 @@
QT += core gui svg widgets
CONFIG += c++23
# You can make your code fail to compile if it uses deprecated APIs.
@@ -9,34 +8,6 @@ CONFIG += c++23
INCLUDEPATH += . libwin
linux:contains(QT_ARCH, arm.*)
{
message("Konfiguration für Raspberry Pi (ARM) erkannt.")
# 1. Header-Dateien (z.B. für bcm2835.h oder eigene Treiber)
#INCLUDEPATH += /usr/local/include \
# /home/pi/my_custom_drivers/include
# not used at the moment
# 2. Bibliotheken linken
# -L sagt dem Linker WO er suchen soll
# -l sagt dem Linker WAS er nehmen soll (z.B. libwiringPi.so -> -lwiringPi)
#LIBS += -L/usr/lib \
# -lmhstcan
# Optional: Spezielle Compiler-Flags für den Pi (Optimierung)
#QMAKE_CXXFLAGS += -O3
}
li
windows
{
#LIBS += -L$$PWD/can_api -lmhstcan -lAdvapi32
message("Konfiguration für Windows.")
}
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0

132
CMakeLists.txt Normal file
View File

@@ -0,0 +1,132 @@
cmake_minimum_required(VERSION 3.16)
project(BionxControl VERSION 1.0 LANGUAGES C CXX)
# --- C++23 aktivieren ---
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# set(CMAKE_CXX_EXTENSIONS OFF) # Optional: Auf OFF setzen, wenn du reines C++23 statt GNU++23 erzwingen willst
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt6 REQUIRED COMPONENTS Gui Svg Widgets)
qt_standard_project_setup()
qt_add_executable(BionxControl WIN32 MACOSX_BUNDLE
bc.cpp bc.h
bcdelightpmwidget.cpp bcdelightpmwidget.h
bcdeviceview.cpp bcdeviceview.h
bcdriver.cpp bcdriver.h
bcdriverstatewidget.cpp bcdriverstatewidget.h
bcdrivertinycan.cpp bcdrivertinycan.h
bcmainwindow.cpp bcmainwindow.h bcmainwindow.ui
bcthemeswitchbutton.cpp bcthemeswitchbutton.h
bctoggleswitch.cpp bctoggleswitch.h
bctransmitter.cpp bctransmitter.h
bcvalue.cpp bcvalue.h
bcvaluedelegate.cpp bcvaluedelegate.h
bcvaluemodel.cpp bcvaluemodel.h
bcvalueslider.cpp bcvalueslider.h bcvalueslider.ui
bcxmlloader.cpp bcxmlloader.h
libwin/can_drv_win.c
libwin/mhs_can_drv.c
main.cpp
)
target_include_directories(BionxControl PRIVATE
.
libwin
)
target_link_libraries(BionxControl PRIVATE
Qt::Core
Qt::Gui
Qt::Svg
Qt::Widgets
)
# Resources:
set_source_files_properties("resources/bc_dark.qss"
PROPERTIES QT_RESOURCE_ALIAS "bc_dark.qss"
)
set_source_files_properties("resources/bc_light.qss"
PROPERTIES QT_RESOURCE_ALIAS "bc_light.qss"
)
set_source_files_properties("resources/bikeinfo.xml"
PROPERTIES QT_RESOURCE_ALIAS "bikeinfo.xml"
)
set_source_files_properties("resources/bionx_akku.png"
PROPERTIES QT_RESOURCE_ALIAS "bionx_akku.png"
)
set_source_files_properties("resources/bionx_console.png"
PROPERTIES QT_RESOURCE_ALIAS "bionx_console.png"
)
set_source_files_properties("resources/bionx_motor.png"
PROPERTIES QT_RESOURCE_ALIAS "bionx_motor.png"
)
set_source_files_properties("resources/connect.png"
PROPERTIES QT_RESOURCE_ALIAS "connect.png"
)
set_source_files_properties("resources/exit.png"
PROPERTIES QT_RESOURCE_ALIAS "exit.png"
)
set_source_files_properties("resources/exit_red.png"
PROPERTIES QT_RESOURCE_ALIAS "exit_red.png"
)
set_source_files_properties("resources/sync.png"
PROPERTIES QT_RESOURCE_ALIAS "sync.png"
)
set_source_files_properties("resources/sync_green.png"
PROPERTIES QT_RESOURCE_ALIAS "sync_green.png"
)
set_source_files_properties("resources/sync_yellow.png"
PROPERTIES QT_RESOURCE_ALIAS "sync_yellow.png"
)
set_source_files_properties("resources/update.png"
PROPERTIES QT_RESOURCE_ALIAS "update.png"
)
set(bionxcontrol_resource_files
"resources/bc_dark.qss"
"resources/bc_light.qss"
"resources/bikeinfo.xml"
"resources/bionx_akku.png"
"resources/bionx_console.png"
"resources/bionx_motor.png"
"resources/connect.png"
"resources/exit.png"
"resources/exit_red.png"
"resources/smile/face-angel.png"
"resources/smile/face-angry.png"
"resources/smile/face-cool.png"
"resources/smile/face-crying.png"
"resources/smile/face-embarrassed.png"
"resources/smile/face-glasses.png"
"resources/smile/face-kiss.png"
"resources/smile/face-laugh.png"
"resources/smile/face-monkey.png"
"resources/smile/face-plain.png"
"resources/smile/face-raspberry.png"
"resources/smile/face-sad.png"
"resources/smile/face-sick.png"
"resources/smile/face-smile-big.png"
"resources/smile/face-smile.png"
"resources/smile/face-smirk.png"
"resources/smile/face-surprise.png"
"resources/sync.png"
"resources/sync_green.png"
"resources/sync_yellow.png"
"resources/update.png"
)
qt_add_resources(BionxControl "bionxcontrol"
PREFIX
"/"
FILES
${bionxcontrol_resource_files}
)
install(TARGETS BionxControl
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

36
Dockerfile Normal file
View File

@@ -0,0 +1,36 @@
# 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 \
qt6-svg-dev
# 4. Qt6 Bibliotheken für das TARGET (arm64) installieren
RUN apt-get install -y \
qt6-base-dev:arm64 \
libglvnd-dev:arm64 \
qt6-svg-dev:arm64
# Aufräumen
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
WORKDIR /workspace

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

14
runme.txt Normal file
View File

@@ -0,0 +1,14 @@
docker build -t qt-cross-rpi .
// eigentlich: docker buildx build --platform linux/arm64 -t qt-cross-rpi --load .
docker run --rm -it -v "$(pwd):/workspace" qt-cross-rpi bash
# 1. Erstelle einen separaten Build-Ordner und wechsle dorthin
mkdir build
cd build
# 2. Konfiguriere das Projekt mit CMake und deiner Toolchain-Datei für aarch64
cmake -DCMAKE_TOOLCHAIN_FILE=../aarch64-toolchain.cmake -G Ninja ..
# 3. Starte den Kompiliervorgang
ninja