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)
# ------------------------------------------------------------------------------
# 1. C++ Standard & Projekt-Einstellungen
# ------------------------------------------------------------------------------
# Du hast C++23 angefordert. Hinweis: Der Compiler muss sehr aktuell sein (GCC 13+ / MSVC 2022)
set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON) 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_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
# ------------------------------------------------------------------------------ find_package(Qt6 REQUIRED COMPONENTS Gui Svg Widgets)
# 2. Qt-Pakete laden
# ------------------------------------------------------------------------------
# Äquivalent zu: QT += core gui widgets svg
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Svg)
# ------------------------------------------------------------------------------ qt_standard_project_setup()
# 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_add_executable(BionxControl WIN32 MACOSX_BUNDLE
# 4. Plattform-Spezifika (Architektur-Entscheidung) bc.cpp bc.h
# ------------------------------------------------------------------------------ bcdelightpmwidget.cpp bcdelightpmwidget.h
bcdeviceview.cpp bcdeviceview.h
# Windows-Spezifische Quellen und Libs bcdriver.cpp bcdriver.h
if(WIN32) bcdriverstatewidget.cpp bcdriverstatewidget.h
message(STATUS "Konfiguration für Windows.") bcdrivertinycan.cpp bcdrivertinycan.h
list(APPEND PROJECT_SOURCES 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/can_drv_win.c
libwin/mhs_can_drv.c libwin/mhs_can_drv.c
) main.cpp
# 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}
) )
# Include-Pfade (Äquivalent zu INCLUDEPATH += . libwin)
target_include_directories(BionxControl PRIVATE target_include_directories(BionxControl PRIVATE
. .
libwin libwin
) )
# ------------------------------------------------------------------------------
# 6. Bibliotheken linken
# ------------------------------------------------------------------------------
target_link_libraries(BionxControl PRIVATE target_link_libraries(BionxControl PRIVATE
Qt6::Core Qt::Core
Qt6::Gui Qt::Gui
Qt6::Widgets Qt::Svg
Qt6::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 install(TARGETS BionxControl
BUNDLE DESTINATION . 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