Fixed build process.
This commit is contained in:
@@ -19,7 +19,7 @@ SOURCES += \
|
|||||||
bcdriver.cpp \
|
bcdriver.cpp \
|
||||||
bcdriverstatewidget.cpp \
|
bcdriverstatewidget.cpp \
|
||||||
bcdrivertinycan.cpp \
|
bcdrivertinycan.cpp \
|
||||||
bcthemeswitchbutton.cpp \
|
bcthemebutton.cpp \
|
||||||
bctoggleswitch.cpp \
|
bctoggleswitch.cpp \
|
||||||
bctransmitter.cpp \
|
bctransmitter.cpp \
|
||||||
bcvalue.cpp \
|
bcvalue.cpp \
|
||||||
@@ -40,7 +40,7 @@ HEADERS += \
|
|||||||
bcdriverstatewidget.h \
|
bcdriverstatewidget.h \
|
||||||
bcdrivertinycan.h \
|
bcdrivertinycan.h \
|
||||||
bcmainwindow.h \
|
bcmainwindow.h \
|
||||||
bcthemeswitchbutton.h \
|
bcthemebutton.h \
|
||||||
bctoggleswitch.h \
|
bctoggleswitch.h \
|
||||||
bctransmitter.h \
|
bctransmitter.h \
|
||||||
bcvalue.h \
|
bcvalue.h \
|
||||||
|
|||||||
@@ -28,10 +28,16 @@ qt_add_executable(BionxControl WIN32 MACOSX_BUNDLE
|
|||||||
bcvaluemodel.cpp bcvaluemodel.h
|
bcvaluemodel.cpp bcvaluemodel.h
|
||||||
bcvalueslider.cpp bcvalueslider.h bcvalueslider.ui
|
bcvalueslider.cpp bcvalueslider.h bcvalueslider.ui
|
||||||
bcxmlloader.cpp bcxmlloader.h
|
bcxmlloader.cpp bcxmlloader.h
|
||||||
libwin/can_drv_win.c
|
|
||||||
libwin/mhs_can_drv.c
|
|
||||||
main.cpp
|
main.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Plattformspezifische CAN-Treiber einbinden
|
||||||
|
if(WIN32)
|
||||||
|
target_sources(BionxControl PRIVATE libwin/can_drv_win.c)
|
||||||
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
|
target_sources(BionxControl PRIVATE libwin/mhs_can_drv.c)
|
||||||
|
endif()
|
||||||
|
|
||||||
target_include_directories(BionxControl PRIVATE
|
target_include_directories(BionxControl PRIVATE
|
||||||
.
|
.
|
||||||
libwin
|
libwin
|
||||||
@@ -129,4 +135,3 @@ install(TARGETS BionxControl
|
|||||||
BUNDLE DESTINATION .
|
BUNDLE DESTINATION .
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
18
Dockerfile
18
Dockerfile
@@ -4,15 +4,15 @@ FROM debian:trixie
|
|||||||
# Verhindert interaktive Prompts während der Installation
|
# Verhindert interaktive Prompts während der Installation
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
# 1. Multiarch für arm64 aktivieren
|
# 1. Multiarch für armhf aktivieren
|
||||||
RUN dpkg --add-architecture arm64 && \
|
RUN dpkg --add-architecture armhf && \
|
||||||
apt-get update && \
|
apt-get update && \
|
||||||
apt-get upgrade -y
|
apt-get upgrade -y
|
||||||
|
|
||||||
# 2. Host-Build-Tools und Cross-Compiler installieren
|
# 2. Host-Build-Tools und Cross-Compiler für 32-Bit installieren
|
||||||
RUN apt-get install -y \
|
RUN apt-get install -y \
|
||||||
build-essential \
|
build-essential \
|
||||||
crossbuild-essential-arm64 \
|
crossbuild-essential-armhf \
|
||||||
cmake \
|
cmake \
|
||||||
ninja-build \
|
ninja-build \
|
||||||
git \
|
git \
|
||||||
@@ -24,12 +24,12 @@ RUN apt-get install -y \
|
|||||||
qt6-tools-dev-tools \
|
qt6-tools-dev-tools \
|
||||||
qt6-svg-dev
|
qt6-svg-dev
|
||||||
|
|
||||||
# 4. Qt6 Bibliotheken für das TARGET (arm64) installieren
|
# 4. Qt6 Bibliotheken für das TARGET (armhf) installieren
|
||||||
RUN apt-get install -y \
|
RUN apt-get install -y \
|
||||||
qt6-base-dev:arm64 \
|
qt6-base-dev:armhf \
|
||||||
libglvnd-dev:arm64 \
|
libglvnd-dev:armhf \
|
||||||
qt6-svg-dev:arm64
|
qt6-svg-dev:armhf
|
||||||
|
|
||||||
# Aufräumen
|
# Aufräumen
|
||||||
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
|
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
|||||||
@@ -1,23 +1,23 @@
|
|||||||
# Name des Zielsystems
|
# Name des Zielsystems
|
||||||
set(CMAKE_SYSTEM_NAME Linux)
|
set(CMAKE_SYSTEM_NAME Linux)
|
||||||
set(CMAKE_SYSTEM_PROCESSOR aarch64)
|
set(CMAKE_SYSTEM_PROCESSOR arm)
|
||||||
|
|
||||||
# Die Cross-Compiler aus dem Debian-Paket
|
# Die Cross-Compiler aus dem Debian-Paket für 32-Bit (armhf)
|
||||||
set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
|
set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc)
|
||||||
set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
|
set(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++)
|
||||||
|
|
||||||
# Wo das System nach Bibliotheken und Headern suchen soll (Sysroot)
|
# Wo das System nach Bibliotheken und Headern suchen soll (Sysroot)
|
||||||
set(CMAKE_SYSROOT /)
|
set(CMAKE_SYSROOT /)
|
||||||
|
|
||||||
# Pfade für pkg-config anpassen, damit es die arm64 .pc Dateien findet
|
# Pfade für pkg-config anpassen, damit es die armhf .pc Dateien findet
|
||||||
set(ENV{PKG_CONFIG_DIR} "")
|
set(ENV{PKG_CONFIG_DIR} "")
|
||||||
set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig")
|
set(ENV{PKG_CONFIG_LIBDIR} "/usr/lib/arm-linux-gnueabihf/pkgconfig:/usr/share/pkgconfig")
|
||||||
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
|
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})
|
||||||
|
|
||||||
# Suchverhalten für find_package(), find_library() etc.
|
# 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_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_LIBRARY ONLY) # Libs nur im Target (armhf) suchen
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) # Header nur im Target (arm64) suchen
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) # Header nur im Target (armhf) suchen
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) # CMake-Pakete nur im Target suchen
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) # CMake-Pakete nur im Target suchen
|
||||||
|
|
||||||
# *** WICHTIG FÜR QT6 ***
|
# *** WICHTIG FÜR QT6 ***
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
|
||||||
#include <bcthemeswitchbutton.h>
|
#include <bcthemebutton.h>
|
||||||
#include <bcdriverstatewidget.h>
|
#include <bcdriverstatewidget.h>
|
||||||
#include <bcmainwindow.h>
|
#include <bcmainwindow.h>
|
||||||
#include <bcvaluedelegate.h>
|
#include <bcvaluedelegate.h>
|
||||||
@@ -189,9 +189,9 @@ void BCMainWindow::initStatusBar()
|
|||||||
_statusBar->addPermanentWidget(conState);
|
_statusBar->addPermanentWidget(conState);
|
||||||
conState->installEventFilter(this);
|
conState->installEventFilter(this);
|
||||||
|
|
||||||
BCThemeSwitchButton* themeBtn = new BCThemeSwitchButton(this);
|
BCThemeButton* themeBtn = new BCThemeButton(this);
|
||||||
_statusBar->addPermanentWidget(themeBtn);
|
_statusBar->addPermanentWidget(themeBtn);
|
||||||
connect(themeBtn, &BCThemeSwitchButton::themeChanged, this, [this](bool isDark)
|
connect(themeBtn, &BCThemeButton::themeChanged, this, [this](bool isDark)
|
||||||
{
|
{
|
||||||
QString message = isDark ? "using DarkMode." : "using LightMode.";
|
QString message = isDark ? "using DarkMode." : "using LightMode.";
|
||||||
onShowMessage( message );
|
onShowMessage( message );
|
||||||
|
|||||||
@@ -30,10 +30,10 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include <bcthemeswitchbutton.h>
|
#include <bcthemebutton.h>
|
||||||
|
|
||||||
|
|
||||||
BCThemeSwitchButton::BCThemeSwitchButton(QWidget *parent )
|
BCThemeButton::BCThemeButton(QWidget *parent )
|
||||||
: QPushButton(parent)
|
: QPushButton(parent)
|
||||||
{
|
{
|
||||||
// Visuelles Setup: Flach, keine Ränder, Hand-Cursor
|
// Visuelles Setup: Flach, keine Ränder, Hand-Cursor
|
||||||
@@ -42,7 +42,7 @@ BCThemeSwitchButton::BCThemeSwitchButton(QWidget *parent )
|
|||||||
setFixedSize( 24, 24 );
|
setFixedSize( 24, 24 );
|
||||||
updateIcon();
|
updateIcon();
|
||||||
|
|
||||||
connect(this, &QPushButton::clicked, this, &BCThemeSwitchButton::toggleMode);
|
connect(this, &QPushButton::clicked, this, &BCThemeButton::toggleMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ BCThemeSwitchButton::BCThemeSwitchButton(QWidget *parent )
|
|||||||
* @brief Setzt den DarkMode
|
* @brief Setzt den DarkMode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void BCThemeSwitchButton::setDarkMode( bool isDark )
|
void BCThemeButton::setDarkMode( bool isDark )
|
||||||
{
|
{
|
||||||
_isDarkMode = !isDark;
|
_isDarkMode = !isDark;
|
||||||
toggleMode();
|
toggleMode();
|
||||||
@@ -61,7 +61,7 @@ void BCThemeSwitchButton::setDarkMode( bool isDark )
|
|||||||
* @brief Schaltet den akutellen Mode um.
|
* @brief Schaltet den akutellen Mode um.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void BCThemeSwitchButton::toggleMode()
|
void BCThemeButton::toggleMode()
|
||||||
{
|
{
|
||||||
_isDarkMode = !_isDarkMode;
|
_isDarkMode = !_isDarkMode;
|
||||||
updateIcon();
|
updateIcon();
|
||||||
@@ -73,7 +73,7 @@ void BCThemeSwitchButton::toggleMode()
|
|||||||
* @brief Icon & Tooltip anpassen
|
* @brief Icon & Tooltip anpassen
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void BCThemeSwitchButton::updateIcon()
|
void BCThemeButton::updateIcon()
|
||||||
{
|
{
|
||||||
setText(_isDarkMode ? "🌙" : "☀️");
|
setText(_isDarkMode ? "🌙" : "☀️");
|
||||||
setToolTip(_isDarkMode ? "Use LightMode" : "Use DarkMode");
|
setToolTip(_isDarkMode ? "Use LightMode" : "Use DarkMode");
|
||||||
@@ -43,13 +43,13 @@
|
|||||||
* zu wechseln
|
* zu wechseln
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class BCThemeSwitchButton : public QPushButton
|
class BCThemeButton : public QPushButton
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
explicit BCThemeSwitchButton(QWidget *parent = nullptr);
|
explicit BCThemeButton(QWidget *parent = nullptr);
|
||||||
void setDarkMode( bool isDark );
|
void setDarkMode( bool isDark );
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
40
build_and_deploy.sh
Executable file
40
build_and_deploy.sh
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Bricht das Skript ab, falls ein Befehl (z. B. der Build) fehlschlägt
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# --- Variablen (Bitte anpassen!) ---
|
||||||
|
IMAGE_NAME="qt-cross-rpi"
|
||||||
|
# Trage hier den genauen Namen deines fertig kompilierten Executables ein:
|
||||||
|
BINARY_NAME="BionxControl"
|
||||||
|
TARGET_USER="chris"
|
||||||
|
TARGET_IP="192.168.0.106"
|
||||||
|
TARGET_DIR="/home/chris/projects/BionxControl"
|
||||||
|
# Den Namen der Toolchain aus deiner Vorlage oder der zuvor erstellten Datei
|
||||||
|
TOOLCHAIN_FILE="armhf-toolchain.cmake"
|
||||||
|
|
||||||
|
echo "=== 1. Baue das Docker-Image ==="
|
||||||
|
docker build -t ${IMAGE_NAME} .
|
||||||
|
|
||||||
|
echo "=== 2. Kompiliere das Projekt im Container ==="
|
||||||
|
# Wir führen die Build-Befehle direkt im Container aus, anstatt interaktiv zu starten.
|
||||||
|
# Das -it flag wurde entfernt, da wir es als Skript ausführen.
|
||||||
|
docker run --rm -v "$(pwd):/workspace" ${IMAGE_NAME} bash -c "
|
||||||
|
echo 'Bereinige altes Build-Verzeichnis...'
|
||||||
|
rm -rf dockerbuild
|
||||||
|
|
||||||
|
mkdir dockerbuild
|
||||||
|
cd dockerbuild
|
||||||
|
|
||||||
|
echo 'Führe CMake aus...'
|
||||||
|
cmake -DCMAKE_TOOLCHAIN_FILE=../${TOOLCHAIN_FILE} -G Ninja ..
|
||||||
|
|
||||||
|
echo 'Starte Build (Ninja)...'
|
||||||
|
ninja
|
||||||
|
"
|
||||||
|
|
||||||
|
echo "=== 3. Deploy auf den Raspberry Pi via scp ==="
|
||||||
|
# Kopiert das neu gebaute Binary auf die Zielmaschine
|
||||||
|
scp "dockerbuild/${BINARY_NAME}" "${TARGET_USER}@${TARGET_IP}:${TARGET_DIR}"
|
||||||
|
|
||||||
|
echo "=== Deployment erfolgreich abgeschlossen! ==="
|
||||||
15
main.cpp
15
main.cpp
@@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
|
#include <QSysInfo>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
@@ -45,9 +46,19 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
|
BCMainWindow mainWindow;
|
||||||
|
|
||||||
|
if (QSysInfo::machineHostName() == "BionxControl")
|
||||||
|
{
|
||||||
|
mainWindow.setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
|
||||||
|
mainWindow.showFullScreen();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Normaler Fenster-Modus (z. B. für die Entwicklung auf dem Desktop)
|
||||||
|
mainWindow.show();
|
||||||
|
}
|
||||||
|
|
||||||
BCMainWindow w;
|
|
||||||
w.show();
|
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
/* Text: #000000, #1f1f1f */
|
/* Text: #000000, #1f1f1f */
|
||||||
/* Borders: #e1e1e1, #d1d1d1 */
|
/* Borders: #e1e1e1, #d1d1d1 */
|
||||||
|
|
||||||
|
|
||||||
/* === QWidget Base === */
|
/* === QWidget Base === */
|
||||||
QWidget {
|
QWidget {
|
||||||
background-color: #f3f3f3;
|
background-color: #f3f3f3;
|
||||||
@@ -250,3 +251,8 @@ QLineEdit:disabled {
|
|||||||
color: #a0a0a0;
|
color: #a0a0a0;
|
||||||
border: 1px solid #e1e1e1;
|
border: 1px solid #e1e1e1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QSlider {
|
||||||
|
background: hotpink;
|
||||||
|
}
|
||||||
|
|||||||
11
runme.txt
11
runme.txt
@@ -1,14 +1,9 @@
|
|||||||
docker build -t qt-cross-rpi .
|
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
|
docker run --rm -it -v "$(pwd):/workspace" qt-cross-rpi bash
|
||||||
|
|
||||||
# 1. Erstelle einen separaten Build-Ordner und wechsle dorthin
|
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
|
cmake -DCMAKE_TOOLCHAIN_FILE=../arm32-toolchain.cmake -G Ninja ..
|
||||||
# 2. Konfiguriere das Projekt mit CMake und deiner Toolchain-Datei für aarch64
|
ninja
|
||||||
cmake -DCMAKE_TOOLCHAIN_FILE=../aarch64-toolchain.cmake -G Ninja ..
|
|
||||||
|
|
||||||
# 3. Starte den Kompiliervorgang
|
|
||||||
ninja
|
|
||||||
|
|||||||
Reference in New Issue
Block a user