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 QT += core gui svg widgets
CONFIG += c++23 CONFIG += c++23
# You can make your code fail to compile if it uses deprecated APIs. # You can make your code fail to compile if it uses deprecated APIs.
@@ -9,34 +8,6 @@ CONFIG += c++23
INCLUDEPATH += . libwin 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. # You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line. # 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 #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) cmake_minimum_required(VERSION 3.16)
project(BionxControl VERSION 1.0 LANGUAGES C CXX)
# Projektname und unterstützte Sprachen (C++ für Qt, C für die Treiber) # --- C++23 aktivieren ---
project(BionxControl LANGUAGES CXX C) 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
# 1. C++ Standard & Projekt-Einstellungen
# ------------------------------------------------------------------------------ set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Du hast C++23 angefordert. Hinweis: Der Compiler muss sehr aktuell sein (GCC 13+ / MSVC 2022) set(CMAKE_AUTOUIC ON)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 REQUIRED COMPONENTS Gui Svg Widgets)
# Automatische Erstellung von MOC, UIC und RCC aktivieren qt_standard_project_setup()
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON) qt_add_executable(BionxControl WIN32 MACOSX_BUNDLE
set(CMAKE_AUTORCC ON) bc.cpp bc.h
bcdelightpmwidget.cpp bcdelightpmwidget.h
# ------------------------------------------------------------------------------ bcdeviceview.cpp bcdeviceview.h
# 2. Qt-Pakete laden bcdriver.cpp bcdriver.h
# ------------------------------------------------------------------------------ bcdriverstatewidget.cpp bcdriverstatewidget.h
# Äquivalent zu: QT += core gui widgets svg bcdrivertinycan.cpp bcdrivertinycan.h
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Svg) bcmainwindow.cpp bcmainwindow.h bcmainwindow.ui
bcthemeswitchbutton.cpp bcthemeswitchbutton.h
# ------------------------------------------------------------------------------ bctoggleswitch.cpp bctoggleswitch.h
# 3. Quellcode definieren bctransmitter.cpp bctransmitter.h
# ------------------------------------------------------------------------------ bcvalue.cpp bcvalue.h
set(PROJECT_SOURCES bcvaluedelegate.cpp bcvaluedelegate.h
main.cpp bcvaluemodel.cpp bcvaluemodel.h
bcmainwindow.cpp bcvalueslider.cpp bcvalueslider.h bcvalueslider.ui
bc.cpp bcxmlloader.cpp bcxmlloader.h
bcdelightpmwidget.cpp libwin/can_drv_win.c
bcdeviceview.cpp libwin/mhs_can_drv.c
bcdriver.cpp main.cpp
bcdriverstatewidget.cpp )
bcdrivertinycan.cpp target_include_directories(BionxControl PRIVATE
bcthemeswitchbutton.cpp .
bctoggleswitch.cpp libwin
bctransmitter.cpp )
bcvalue.cpp
bcvaluedelegate.cpp target_link_libraries(BionxControl PRIVATE
bcvaluemodel.cpp Qt::Core
bcvalueslider.cpp Qt::Gui
bcvaluesliderstyle.cpp Qt::Svg
bcxmlloader.cpp Qt::Widgets
# Deine Header (wichtig, damit sie in der IDE sichtbar sind) )
bcmainwindow.h
bc.h
bcdelightpmwidget.h # Resources:
bcdeviceview.h set_source_files_properties("resources/bc_dark.qss"
bcdriver.h PROPERTIES QT_RESOURCE_ALIAS "bc_dark.qss"
bcdriverstatewidget.h )
bcdrivertinycan.h set_source_files_properties("resources/bc_light.qss"
bcthemeswitchbutton.h PROPERTIES QT_RESOURCE_ALIAS "bc_light.qss"
bctoggleswitch.h )
bctransmitter.h set_source_files_properties("resources/bikeinfo.xml"
bcvalue.h PROPERTIES QT_RESOURCE_ALIAS "bikeinfo.xml"
bcvaluedelegate.h )
bcvaluemodel.h set_source_files_properties("resources/bionx_akku.png"
bcvalueslider.h PROPERTIES QT_RESOURCE_ALIAS "bionx_akku.png"
BCValueSliderStyle.h )
bcxmlloader.h set_source_files_properties("resources/bionx_console.png"
# UI Forms PROPERTIES QT_RESOURCE_ALIAS "bionx_console.png"
bcmainwindow.ui )
bcvalueslider.ui set_source_files_properties("resources/bionx_motor.png"
# Resources PROPERTIES QT_RESOURCE_ALIAS "bionx_motor.png"
bionxcontrol.qrc )
) set_source_files_properties("resources/connect.png"
PROPERTIES QT_RESOURCE_ALIAS "connect.png"
# ------------------------------------------------------------------------------ )
# 4. Plattform-Spezifika (Architektur-Entscheidung) set_source_files_properties("resources/exit.png"
# ------------------------------------------------------------------------------ PROPERTIES QT_RESOURCE_ALIAS "exit.png"
)
# Windows-Spezifische Quellen und Libs set_source_files_properties("resources/exit_red.png"
if(WIN32) PROPERTIES QT_RESOURCE_ALIAS "exit_red.png"
message(STATUS "Konfiguration für Windows.") )
list(APPEND PROJECT_SOURCES set_source_files_properties("resources/sync.png"
libwin/can_drv_win.c PROPERTIES QT_RESOURCE_ALIAS "sync.png"
libwin/mhs_can_drv.c )
) set_source_files_properties("resources/sync_green.png"
# Falls du die Libs später aktivieren willst (wie im .pro auskommentiert): PROPERTIES QT_RESOURCE_ALIAS "sync_green.png"
# target_link_libraries(BionxControl PRIVATE Advapi32) )
# target_link_directories(BionxControl PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/can_api") set_source_files_properties("resources/sync_yellow.png"
endif() PROPERTIES QT_RESOURCE_ALIAS "sync_yellow.png"
)
# Linux / Raspberry Pi (ARM) Logik set_source_files_properties("resources/update.png"
if(UNIX AND NOT APPLE) PROPERTIES QT_RESOURCE_ALIAS "update.png"
# Check ob wir auf ARM kompilieren (für RPi) )
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") set(bionxcontrol_resource_files
message(STATUS "Konfiguration für Raspberry Pi (ARM) erkannt.") "resources/bc_dark.qss"
# Optimierungs-Flag aus deiner .pro "resources/bc_light.qss"
add_compile_options(-O3) "resources/bikeinfo.xml"
"resources/bionx_akku.png"
# Falls du wiringPi oder can Treiber brauchst: "resources/bionx_console.png"
# target_link_libraries(BionxControl PRIVATE wiringPi mhstcan) "resources/bionx_motor.png"
endif() "resources/connect.png"
"resources/exit.png"
# Hinweis: Im original .pro waren die .c Files auch unter Linux aktiv. "resources/exit_red.png"
# Falls die C-Treiber auch unter Linux laufen sollen, verschiebe sie "resources/smile/face-angel.png"
# aus dem if(WIN32) Block nach oben in PROJECT_SOURCES. "resources/smile/face-angry.png"
endif() "resources/smile/face-cool.png"
"resources/smile/face-crying.png"
# ------------------------------------------------------------------------------ "resources/smile/face-embarrassed.png"
# 5. Executable erstellen "resources/smile/face-glasses.png"
# ------------------------------------------------------------------------------ "resources/smile/face-kiss.png"
qt_add_executable(BionxControl "resources/smile/face-laugh.png"
MANUAL_FINALIZATION "resources/smile/face-monkey.png"
${PROJECT_SOURCES} "resources/smile/face-plain.png"
) "resources/smile/face-raspberry.png"
"resources/smile/face-sad.png"
# Include-Pfade (Äquivalent zu INCLUDEPATH += . libwin) "resources/smile/face-sick.png"
target_include_directories(BionxControl PRIVATE "resources/smile/face-smile-big.png"
. "resources/smile/face-smile.png"
libwin "resources/smile/face-smirk.png"
) "resources/smile/face-surprise.png"
"resources/sync.png"
# ------------------------------------------------------------------------------ "resources/sync_green.png"
# 6. Bibliotheken linken "resources/sync_yellow.png"
# ------------------------------------------------------------------------------ "resources/update.png"
target_link_libraries(BionxControl PRIVATE )
Qt6::Core
Qt6::Gui qt_add_resources(BionxControl "bionxcontrol"
Qt6::Widgets PREFIX
Qt6::Svg "/"
) FILES
${bionxcontrol_resource_files}
# ------------------------------------------------------------------------------ )
# 7. Deployment / Installation
# ------------------------------------------------------------------------------ install(TARGETS BionxControl
# Äquivalent zu deinem "target.path" Block BUNDLE DESTINATION .
install(TARGETS BionxControl RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
BUNDLE DESTINATION . )
RUNTIME DESTINATION bin
)
# 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