diff --git a/.gitea/workflows/build-win.yml b/.gitea/workflows/build-win.yml new file mode 100644 index 0000000..31120dd --- /dev/null +++ b/.gitea/workflows/build-win.yml @@ -0,0 +1,45 @@ +name: Build eismuliplexer-qt for windows +run-name: Building eismuliplexer-qt for windows +on: [push] + +jobs: + BuildWin: + runs-on: arch-mingw-qt + steps: + - name: Install dependancies + run: pacman -Sy; pacman -S --noconfirm mingw-w64-libusb mingw-w64-pkg-config nodejs zip + - name: Check out repository code + uses: ischanx/checkout@8c80eac3058d03dc5301629e8f7d59ae255d6cc3 + - name: Checkout libeismultiplexer + run: git clone http://192.168.178.27/git/Eismultiplexer/libeismultiplexer.git + - name: libeismultiplexer version + id: libeisversion + run: | + cd ${{ gitea.workspace }}/libeismultiplexer + git fetch -a; + echo "tag=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_OUTPUT + - name: Version + id: version + run: | + cd ${{ gitea.workspace }} + git fetch -a; + echo "tag=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_OUTPUT + - name: Build libeismultiplexer + run: | + mkdir ${{ gitea.workspace }}/libeismultiplexer/build + cd ${{ gitea.workspace }}/libeismultiplexer/build + cmake -DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32/ -DCMAKE_TOOLCHAIN_FILE=../crossW64.cmake -DCMAKE_BUILD_TYPE=Release -DGIT_TAG=${{ steps.libeisversion.outputs.tag }} .. + make + make install + - name: Build + run: | + mkdir ${{ gitea.workspace }}/build + cd ${{ gitea.workspace }}/build + cmake -DCMAKE_TOOLCHAIN_FILE=../crossW64.cmake -DCMAKE_BUILD_TYPE=Release -DGIT_TAG=${{ steps.version.outputs.tag }} .. + make -j $(nproc) + make package + - name: Upload Package + uses: actions/upload-artifact@v3 + with: + name: eismuliplexer-qt-${{ steps.version.outputs.tag }}-w64 + path: ${{ gitea.workspace }}/build/packaged/${{ steps.version.outputs.tag }}/release/* diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml new file mode 100644 index 0000000..340ac90 --- /dev/null +++ b/.gitea/workflows/build.yml @@ -0,0 +1,53 @@ +name: Build eismuliplexer for linux +run-name: Building eismuliplexer for linux +on: [push] + +jobs: + Build: + runs-on: ubuntu-latest + steps: + - name: Install dependancies + run: apt update; apt install -y libusb-1.0-0-dev cmake qt6-base-dev qt6-base-dev-tools qt6-tools-dev-tools libqt6widgets6 wget libglx-dev libgl1-mesa-dev qt6-qpa-plugins + - name: Check out repository code + uses: ischanx/checkout@8c80eac3058d03dc5301629e8f7d59ae255d6cc3 + - name: Checkout libeismultiplexer + run: git clone http://192.168.178.27/git/Eismultiplexer/libeismultiplexer.git + - name: Install Appimagetool + run: | + wget https://github.com/probonopd/go-appimage/releases/download/continuous/appimagetool-904-x86_64.AppImage + chmod +x appimagetool-904-x86_64.AppImage + mv appimagetool-904-x86_64.AppImage /usr/bin/appimagetool + - name: libeismultiplexer version + id: libeisversion + run: | + cd ${{ gitea.workspace }}/libeismultiplexer + git fetch -a; + echo "tag=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_OUTPUT + - name: Version + id: version + run: | + cd ${{ gitea.workspace }} + git fetch -a; + echo "tag=$(git describe --tags `git rev-list --tags --max-count=1`)" >> $GITHUB_OUTPUT + - name: Build and install libeismultiplexer + run: | + mkdir ${{ gitea.workspace }}/libeismultiplexer/build; cd ${{ gitea.workspace }}/libeismultiplexer/build + cmake -DCMAKE_BUILD_TYPE=Release -DGIT_TAG=${{ steps.libeisversion.outputs.tag }} .. + make -j $(nproc) + make install + - name: Build + run: | + mkdir ${{ gitea.workspace }}/build; cd ${{ gitea.workspace }}/build + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./install/usr -DGIT_TAG=${{ steps.version.outputs.tag }} .. + make -j $(nproc) + make install + - name: Create Appimage + run: | + cd ${{ gitea.workspace }}/build/ + appimagetool --appimage-extract-and-run -s deploy install/usr/share/applications/eismultiplexerqt.desktop + appimagetool --appimage-extract-and-run -s install + - name: Upload Appimage + uses: actions/upload-artifact@v3 + with: + name: eismultiplexer-qt-appimage + path: ${{ gitea.workspace }}/build/*.AppImage diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1e931b8..0000000 --- a/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ - -# Build directory -build/ - -# Qt creator user files -*.user -*.pro.user -*.opensdf -*.sdf - -# CMake cache -CMakeCache.txt -CMakeFiles/ -cmake_install.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index e86a2c3..e3f9565 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,28 +1,25 @@ cmake_minimum_required(VERSION 3.14) -project(eismuliplexer-qt) +project(eismultiplexer-qt) -set(CMAKE_PROJECT_VERSION_MAJOR 0) -set(CMAKE_PROJECT_VERSION_MINOR 9) -set(CMAKE_PROJECT_VERSION_PATCH 0) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") +include(GitVersion) +get_version_from_git() +message("Building version ${PROJECT_VERSION}") add_compile_definitions(VERSION_MAJOR=${CMAKE_PROJECT_VERSION_MAJOR}) add_compile_definitions(VERSION_MINOR=${CMAKE_PROJECT_VERSION_MINOR}) add_compile_definitions(VERSION_PATCH=${CMAKE_PROJECT_VERSION_PATCH}) -if(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") - message(FATAL_ERROR "Windows builds have to be cross compiled on UNIX") -endif() - message("Platform " ${CMAKE_SYSTEM_NAME}) -if(WIN32) +if(WIN32 AND NOT CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/release-win.sh ${CMAKE_CURRENT_BINARY_DIR}/release.sh @ONLY) add_custom_target(package COMMAND ${CMAKE_CURRENT_BINARY_DIR}/release.sh WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Createing release archive" VERBATIM) -endif(WIN32) +endif(WIN32 AND NOT CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -45,6 +42,9 @@ add_executable(${PROJECT_NAME} multiplexer.h multiplexer.cpp ) +set_target_properties(${PROJECT_NAME} PROPERTIES WIN32_EXECUTABLE ON) target_compile_options(${PROJECT_NAME} PUBLIC "-Wall") target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Widgets Qt6::Core ${EISMULIPLEXER_LIBRARIES}) -#target_include_directories(${PROJECT_NAME} PUBLIC ${EISMULIPLEXER_INCLUDE_DIRS}) +install(TARGETS ${PROJECT_NAME} DESTINATION bin) +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/eismultiplexerqt.desktop DESTINATION share/applications) +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/eismultiplexerqt.png DESTINATION share/icons/hicolor/256x256/apps) diff --git a/cmake/GitVersion.cmake b/cmake/GitVersion.cmake new file mode 100644 index 0000000..b147005 --- /dev/null +++ b/cmake/GitVersion.cmake @@ -0,0 +1,38 @@ +function(get_version_from_git) + find_package(Git REQUIRED) + + if(NOT GIT_TAG) + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --always + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_TAG + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE GIT_RESULT + ) + if(NOT GIT_RESULT EQUAL 0) + message(FATAL_ERROR "Failed to get git tag") + endif() + endif() + + string(REGEX REPLACE "^v" "" CLEAN_TAG "${GIT_TAG}") + if(CLEAN_TAG MATCHES "^([0-9]+)\\.([0-9]+)\\.([0-9]+)(-.*)?$") + + set(CMAKE_PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1}) + set(CMAKE_PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1} PARENT_SCOPE) + set(CMAKE_PROJECT_VERSION_MINOR ${CMAKE_MATCH_2}) + set(CMAKE_PROJECT_VERSION_MINOR ${CMAKE_MATCH_2} PARENT_SCOPE) + set(CMAKE_PROJECT_VERSION_PATCH ${CMAKE_MATCH_3}) + set(CMAKE_PROJECT_VERSION_PATCH ${CMAKE_MATCH_3} PARENT_SCOPE) + + set(PROJECT_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") + set(PROJECT_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" PARENT_SCOPE) + else() + message(WARNING "Tag '${CLEAN_TAG}' does not match semver format") + set(CMAKE_PROJECT_VERSION_MAJOR 0) + set(CMAKE_PROJECT_VERSION_MAJOR 0 PARENT_SCOPE) + set(CMAKE_PROJECT_VERSION_MINOR 0) + set(CMAKE_PROJECT_VERSION_MINOR 0 PARENT_SCOPE) + set(CMAKE_PROJECT_VERSION_PATCH 0) + set(CMAKE_PROJECT_VERSION_PATCH 0 PARENT_SCOPE) + endif() +endfunction() diff --git a/crossW64.cmake b/crossW64.cmake new file mode 100644 index 0000000..0fab148 --- /dev/null +++ b/crossW64.cmake @@ -0,0 +1,9 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(CMAKE_SYSTEM_PROCESSOR AMD64) +set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) +set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) +set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(ENV{PKG_CONFIG_PATH} "/usr/x86_64-w64-mingw32/lib/pkgconfig/") diff --git a/mainwindow.cpp b/mainwindow.cpp index 99a5739..0b7ae5d 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -39,7 +39,8 @@ void MainWindow::enumerateDevices() { uint16_t serial = serials[i]; std::shared_ptr multiplexer(new struct eismultiplexer); - if (eismultiplexer_connect(multiplexer.get(), serial) >= 0) + int ret = eismultiplexer_connect(multiplexer.get(), serial); + if (ret == 0) { uint16_t channelCount = 0; qDebug()<<"Adding channels from device "<channelLayout->addStretch(); } diff --git a/resources/eismultiplexerqt.desktop b/resources/eismultiplexerqt.desktop new file mode 100644 index 0000000..58f04ce --- /dev/null +++ b/resources/eismultiplexerqt.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Categories=Qt;Science +Comment=Application to control RHD eismultiplexer devices +Icon=eismultiplexerqt +Name=EisMultiplexerQT +Exec=eismultiplexer-qt +Type=Application diff --git a/resources/eismultiplexerqt.png b/resources/eismultiplexerqt.png new file mode 100644 index 0000000..6408f2e Binary files /dev/null and b/resources/eismultiplexerqt.png differ diff --git a/scripts/release-win.sh b/scripts/release-win.sh new file mode 100755 index 0000000..c022117 --- /dev/null +++ b/scripts/release-win.sh @@ -0,0 +1,61 @@ +#!/bin/bash -e +# +# libkissinference - an inference libary for kiss networks +# Copyright (C) 2024 Carl Philipp Klemm +# +# This file is part of libkissinference. +# +# libkissinference is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# libkissinference is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with libkissinference. If not, see . +# + +PROJECTNAME=@PROJECT_NAME@ +SYSTEMPROC=@CMAKE_SYSTEM_PROCESSOR@ +ROOTPATH=@CMAKE_FIND_ROOT_PATH@ +VERSION="@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@.@CMAKE_PROJECT_VERSION_PATCH@" +BINARYDIR="@CMAKE_CURRENT_BINARY_DIR@" +SRCDIR="@CMAKE_CURRENT_SOURCE_DIR@" +RELDIRECTORY="$BINARYDIR/packaged/$VERSION/release" +ZIPNAME=$PROJECTNAME-$SYSTEMPROC-$VERSION + +rm $BINARYDIR/packaged/$ZIPNAME.zip || true +cd $BINARYDIR +install -d $RELDIRECTORY +cp eismultiplexer-qt.exe $RELDIRECTORY +cp $ROOTPATH/bin/libwinpthread-1.dll $RELDIRECTORY +cp $ROOTPATH/bin/libusb-1.0.dll $RELDIRECTORY +cp $ROOTPATH/bin/libssp-0.dll $RELDIRECTORY +cp $ROOTPATH/bin/libgcc_s_seh-1.dll $RELDIRECTORY +cp $ROOTPATH/bin/libstdc++-6.dll $RELDIRECTORY +cp $ROOTPATH/bin/Qt6Core.dll $RELDIRECTORY +cp $ROOTPATH/bin/Qt6Gui.dll $RELDIRECTORY +cp $ROOTPATH/bin/Qt6Widgets.dll $RELDIRECTORY +cp -r $ROOTPATH/lib/qt6/plugins/platforms $RELDIRECTORY +cp $ROOTPATH/lib/libeismultiplexer.dll $RELDIRECTORY +cp $ROOTPATH/bin/libpcre2-*-0.dll $RELDIRECTORY +cp $ROOTPATH/bin/zlib1.dll $RELDIRECTORY +cp $ROOTPATH/bin/libfreetype-6.dll $RELDIRECTORY +cp $ROOTPATH/bin/libpng16-16.dll $RELDIRECTORY +cp $ROOTPATH/bin/libzstd.dll $RELDIRECTORY +cp $ROOTPATH/bin/libharfbuzz-0.dll $RELDIRECTORY +cp $ROOTPATH/bin/libintl-8.dll $RELDIRECTORY +cp $ROOTPATH/bin/libgraphite2.dll $RELDIRECTORY +cp $ROOTPATH/bin/libglib-2.0-0.dll $RELDIRECTORY +cp $ROOTPATH/bin/libbz2-1.dll $RELDIRECTORY +cp $ROOTPATH/bin/libbrotlidec.dll $RELDIRECTORY +cp $ROOTPATH/bin/libbrotlicommon.dll $RELDIRECTORY +cp $ROOTPATH/bin/libiconv-2.dll $RELDIRECTORY +#cp $SRCDIR/README.md $RELDIRECTORY +cd $RELDIRECTORY/.. +rm $BINARYDIR/packaged/$ZIPNAME.zip || true +zip -r $BINARYDIR/packaged/$ZIPNAME.zip release