From b05180f57506fa688eb45af3e97ffddf095d1487 Mon Sep 17 00:00:00 2001 From: Christoph Holzheuer Date: Thu, 2 Apr 2026 14:36:47 +0200 Subject: [PATCH] changed aarch64 build system --- BionxControl.pro | 29 ---- CMakeLists.txt | 132 ++++++++++++++++++ Dockerfile | 36 +++++ ...toolchain.cmake => aarch64-toolchain.cmake | 0 .../CMakeLists.txt | 0 .../Dockerfile | 0 .../MainWindow.cpp | 0 .../MainWindow.hpp | 0 docker4BionxControl/aarch64-toolchain.cmake | 25 ++++ .../main.cpp | 0 .../runme.txt | 0 runme.txt | 14 ++ 12 files changed, 207 insertions(+), 29 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 Dockerfile rename docker4Bionx/aarch64-toolchain.cmake => aarch64-toolchain.cmake (100%) rename {docker4Bionx => docker4BionxControl}/CMakeLists.txt (100%) rename {docker4Bionx => docker4BionxControl}/Dockerfile (100%) rename {docker4Bionx => docker4BionxControl}/MainWindow.cpp (100%) rename {docker4Bionx => docker4BionxControl}/MainWindow.hpp (100%) create mode 100644 docker4BionxControl/aarch64-toolchain.cmake rename {docker4Bionx => docker4BionxControl}/main.cpp (100%) rename {docker4Bionx => docker4BionxControl}/runme.txt (100%) create mode 100644 runme.txt diff --git a/BionxControl.pro b/BionxControl.pro index 2220841..cd74c38 100644 --- a/BionxControl.pro +++ b/BionxControl.pro @@ -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 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f6e3e24 --- /dev/null +++ b/CMakeLists.txt @@ -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} +) + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..52624f1 --- /dev/null +++ b/Dockerfile @@ -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 diff --git a/docker4Bionx/aarch64-toolchain.cmake b/aarch64-toolchain.cmake similarity index 100% rename from docker4Bionx/aarch64-toolchain.cmake rename to aarch64-toolchain.cmake diff --git a/docker4Bionx/CMakeLists.txt b/docker4BionxControl/CMakeLists.txt similarity index 100% rename from docker4Bionx/CMakeLists.txt rename to docker4BionxControl/CMakeLists.txt diff --git a/docker4Bionx/Dockerfile b/docker4BionxControl/Dockerfile similarity index 100% rename from docker4Bionx/Dockerfile rename to docker4BionxControl/Dockerfile diff --git a/docker4Bionx/MainWindow.cpp b/docker4BionxControl/MainWindow.cpp similarity index 100% rename from docker4Bionx/MainWindow.cpp rename to docker4BionxControl/MainWindow.cpp diff --git a/docker4Bionx/MainWindow.hpp b/docker4BionxControl/MainWindow.hpp similarity index 100% rename from docker4Bionx/MainWindow.hpp rename to docker4BionxControl/MainWindow.hpp diff --git a/docker4BionxControl/aarch64-toolchain.cmake b/docker4BionxControl/aarch64-toolchain.cmake new file mode 100644 index 0000000..cf27c13 --- /dev/null +++ b/docker4BionxControl/aarch64-toolchain.cmake @@ -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") diff --git a/docker4Bionx/main.cpp b/docker4BionxControl/main.cpp similarity index 100% rename from docker4Bionx/main.cpp rename to docker4BionxControl/main.cpp diff --git a/docker4Bionx/runme.txt b/docker4BionxControl/runme.txt similarity index 100% rename from docker4Bionx/runme.txt rename to docker4BionxControl/runme.txt diff --git a/runme.txt b/runme.txt new file mode 100644 index 0000000..7d52b7d --- /dev/null +++ b/runme.txt @@ -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 \ No newline at end of file