2 Commits

Author SHA1 Message Date
Christoph Holzheuer
b05180f575 changed aarch64 build system 2026-04-02 14:36:47 +02:00
Christoph Holzheuer
c3e5092845 Removed old cmake files. 2026-04-02 10:41:27 +02:00
14 changed files with 207 additions and 301 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

View File

@@ -1,138 +1,132 @@
cmake_minimum_required(VERSION 3.16)
# Projektname und unterstützte Sprachen (C++ für Qt, C für die Treiber)
project(BionxControl LANGUAGES CXX C)
# ------------------------------------------------------------------------------
# 1. C++ Standard & Projekt-Einstellungen
# ------------------------------------------------------------------------------
# Du hast C++23 angefordert. Hinweis: Der Compiler muss sehr aktuell sein (GCC 13+ / MSVC 2022)
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
# Automatische Erstellung von MOC, UIC und RCC aktivieren
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
# ------------------------------------------------------------------------------
# 2. Qt-Pakete laden
# ------------------------------------------------------------------------------
# Äquivalent zu: QT += core gui widgets svg
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Svg)
find_package(Qt6 REQUIRED COMPONENTS Gui Svg Widgets)
# ------------------------------------------------------------------------------
# 3. Quellcode definieren
# ------------------------------------------------------------------------------
set(PROJECT_SOURCES
main.cpp
bcmainwindow.cpp
bc.cpp
bcdelightpmwidget.cpp
bcdeviceview.cpp
bcdriver.cpp
bcdriverstatewidget.cpp
bcdrivertinycan.cpp
bcthemeswitchbutton.cpp
bctoggleswitch.cpp
bctransmitter.cpp
bcvalue.cpp
bcvaluedelegate.cpp
bcvaluemodel.cpp
bcvalueslider.cpp
bcvaluesliderstyle.cpp
bcxmlloader.cpp
# Deine Header (wichtig, damit sie in der IDE sichtbar sind)
bcmainwindow.h
bc.h
bcdelightpmwidget.h
bcdeviceview.h
bcdriver.h
bcdriverstatewidget.h
bcdrivertinycan.h
bcthemeswitchbutton.h
bctoggleswitch.h
bctransmitter.h
bcvalue.h
bcvaluedelegate.h
bcvaluemodel.h
bcvalueslider.h
BCValueSliderStyle.h
bcxmlloader.h
# UI Forms
bcmainwindow.ui
bcvalueslider.ui
# Resources
bionxcontrol.qrc
)
qt_standard_project_setup()
# ------------------------------------------------------------------------------
# 4. Plattform-Spezifika (Architektur-Entscheidung)
# ------------------------------------------------------------------------------
# Windows-Spezifische Quellen und Libs
if(WIN32)
message(STATUS "Konfiguration für Windows.")
list(APPEND PROJECT_SOURCES
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
)
# Falls du die Libs später aktivieren willst (wie im .pro auskommentiert):
# target_link_libraries(BionxControl PRIVATE Advapi32)
# target_link_directories(BionxControl PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/can_api")
endif()
# Linux / Raspberry Pi (ARM) Logik
if(UNIX AND NOT APPLE)
# Check ob wir auf ARM kompilieren (für RPi)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
message(STATUS "Konfiguration für Raspberry Pi (ARM) erkannt.")
# Optimierungs-Flag aus deiner .pro
add_compile_options(-O3)
# Falls du wiringPi oder can Treiber brauchst:
# target_link_libraries(BionxControl PRIVATE wiringPi mhstcan)
endif()
# Hinweis: Im original .pro waren die .c Files auch unter Linux aktiv.
# Falls die C-Treiber auch unter Linux laufen sollen, verschiebe sie
# aus dem if(WIN32) Block nach oben in PROJECT_SOURCES.
endif()
# ------------------------------------------------------------------------------
# 5. Executable erstellen
# ------------------------------------------------------------------------------
qt_add_executable(BionxControl
MANUAL_FINALIZATION
${PROJECT_SOURCES}
main.cpp
)
# Include-Pfade (Äquivalent zu INCLUDEPATH += . libwin)
target_include_directories(BionxControl PRIVATE
.
libwin
)
# ------------------------------------------------------------------------------
# 6. Bibliotheken linken
# ------------------------------------------------------------------------------
target_link_libraries(BionxControl PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Svg
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}
)
# ------------------------------------------------------------------------------
# 7. Deployment / Installation
# ------------------------------------------------------------------------------
# Äquivalent zu deinem "target.path" Block
install(TARGETS BionxControl
BUNDLE DESTINATION .
RUNTIME DESTINATION bin
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
# Unter Windows: Konsolenfenster unterdrücken (außer im Debug-Mode wenn gewünscht)
if(WIN32)
set_target_properties(BionxControl PROPERTIES WIN32_EXECUTABLE ON)
endif()

View File

@@ -1,22 +0,0 @@
{
"version": 3,
"configurePresets": [
{
"hidden": true,
"name": "Qt",
"cacheVariables": {
"CMAKE_PREFIX_PATH": "$env{QTDIR}"
},
"vendor": {
"qt-project.org/Qt": {
"checksum": "wVa86FgEkvdCTVp1/nxvrkaemJc="
}
}
}
],
"vendor": {
"qt-project.org/Presets": {
"checksum": "67SmY24ZeVbebyKD0fGfIzb/bGI="
}
}
}

View File

@@ -1,112 +0,0 @@
{
"version": 3,
"configurePresets": [
{
"name": "Qt-Debug",
"inherits": "Qt-Default",
"binaryDir": "${sourceDir}/out/build/debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_CXX_FLAGS": "-DQT_QML_DEBUG"
},
"environment": {
"QML_DEBUG_ARGS": "-qmljsdebugger=file:{aad3125d-03d3-444f-a577-6e1a42300747},block"
}
},
{
"name": "Qt-Release",
"inherits": "Qt-Default",
"binaryDir": "${sourceDir}/out/build/release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"hidden": true,
"name": "Qt-Default",
"inherits": "msvc2022x64Qt6",
"vendor": {
"qt-project.org/Default": {
"checksum": "i66Ru6Xr2iTwQJrInr6OBGYjRK8="
}
}
},
{
"hidden": true,
"name": "5.13.2_msvc2017",
"inherits": "Qt",
"environment": {
"QTDIR": "C:/Qt/Qt5.13.2/5.13.2/msvc2017"
},
"architecture": {
"strategy": "external",
"value": "x86"
},
"generator": "Ninja",
"vendor": {
"qt-project.org/Version": {
"checksum": "buLxQ1kUsADOzoJ+w8yPcUB7uPI="
}
}
},
{
"hidden": true,
"name": "msvc2022x64Qt6",
"inherits": "Qt",
"environment": {
"QTDIR": "C:/Qt/6.10.1/msvc2022_64"
},
"architecture": {
"strategy": "external",
"value": "x64"
},
"generator": "Ninja",
"vendor": {
"qt-project.org/Version": {
"checksum": "4+Yj6B2/47gfzBNUic9pikpc6XY="
}
}
},
{
"hidden": true,
"name": "VS2017x64Default",
"inherits": "Qt",
"environment": {
"QTDIR": "C:/Qt/Qt5.13.2/5.13.2/msvc2017_64"
},
"architecture": {
"strategy": "external",
"value": "x64"
},
"generator": "Ninja",
"vendor": {
"qt-project.org/Version": {
"checksum": "8CScCBxKrPnt9tGlvYctTIj9T7o="
}
}
},
{
"hidden": true,
"name": "VS2017x86Default",
"inherits": "Qt",
"environment": {
"QTDIR": "C:/Qt/Qt5.13.2/5.13.2/msvc2017"
},
"architecture": {
"strategy": "external",
"value": "x86"
},
"generator": "Ninja",
"vendor": {
"qt-project.org/Version": {
"checksum": "0W/xbuyiWWemn9gHwntcl/pzeNw="
}
}
}
],
"vendor": {
"qt-project.org/Presets": {
"checksum": "VXVUfuzC5iU0zlFoq9u8LP40dyc="
}
}
}

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

View File

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