Update Windows build to latest GNU Radio #887
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: [push, pull_request] | |
jobs: | |
appimage: | |
name: AppImage | |
runs-on: ubuntu-latest | |
steps: | |
- name: Install base dependencies | |
run: | | |
sudo apt-get update -qq | |
sudo apt-get install -y --no-install-recommends \ | |
libopengl0 \ | |
libegl1 | |
- name: Install conda dependencies | |
id: setup-micromamba | |
uses: mamba-org/setup-micromamba@v1 | |
with: | |
environment-name: gqrx | |
create-args: >- | |
c-compiler | |
cxx-compiler | |
cmake | |
make | |
pkg-config | |
gnuradio-core | |
gnuradio-osmosdr | |
libboost-headers | |
mesa-libgl-devel-cos6-x86_64 | |
pybind11 | |
pulseaudio | |
qt6-gtk-platformtheme | |
qt6-main | |
soapysdr-module-lms7 | |
soapysdr-module-plutosdr | |
soapysdr-module-remote | |
volk | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Configure | |
shell: bash -el {0} | |
run: | | |
git config --global --add safe.directory $GITHUB_WORKSPACE | |
mkdir build | |
cd build | |
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX .. | |
- name: Compile | |
shell: bash -el {0} | |
working-directory: build | |
run: | | |
make -j4 | |
make install | |
- name: Build AppImage | |
shell: bash -el {0} | |
env: | |
APPIMAGE_EXTRACT_AND_RUN: "1" | |
PREFIX: ${{ steps.setup-micromamba.outputs.environment-path }} | |
run: ./appimage.sh | |
- name: Save artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: gqrx-appimage-${{ github.run_id }} | |
path: Gqrx-*.AppImage | |
macos: | |
name: MacOS | |
runs-on: macos-12 | |
steps: | |
- name: Check for Secret availability | |
id: secret-check | |
run: | | |
if [ "${{ secrets.BUILD_CERTIFICATE_BASE64 }}" != '' ]; then | |
echo "available=true" >> $GITHUB_OUTPUT; | |
else | |
echo "available=false" >> $GITHUB_OUTPUT; | |
fi | |
- name: Install dependencies | |
run: | | |
brew update | |
brew install --HEAD librtlsdr | |
brew install airspy airspyhf boost dylibbundler gnuradio hackrf libbladerf libserialport portaudio pybind11 six uhd qt@6 || true | |
brew tap pothosware/homebrew-pothos | |
brew install soapyremote | |
cd /tmp | |
git clone https://github.com/analogdevicesinc/libiio.git | |
cd libiio | |
git checkout v0.23 | |
mkdir build | |
cd build | |
cmake .. | |
make -j4 | |
sudo make install | |
cd /tmp | |
git clone https://github.com/analogdevicesinc/libad9361-iio.git | |
cd libad9361-iio | |
mkdir build | |
cd build | |
cmake .. | |
make -j4 | |
sudo make install | |
cd /tmp | |
git clone https://github.com/pothosware/SoapyPlutoSDR.git | |
cd SoapyPlutoSDR | |
mkdir build | |
cd build | |
cmake .. | |
make -j4 | |
make install | |
cd /tmp | |
cp /Library/Frameworks/iio.framework/iio /usr/local/lib/libiio.dylib | |
install_name_tool -id "/usr/local/lib/libiio.dylib" /usr/local/lib/libiio.dylib | |
cp /Library/Frameworks/ad9361.framework/ad9361 /usr/local/lib/libad9361.dylib | |
install_name_tool -id "/usr/local/lib/libad9361.dylib" /usr/local/lib/libad9361.dylib | |
install_name_tool -delete_rpath /Library/Frameworks /usr/local/lib/libad9361.dylib | |
install_name_tool -change @rpath/iio.framework/Versions/0.23/iio /usr/local/lib/libiio.dylib /usr/local/lib/libad9361.dylib | |
install_name_tool -change @rpath/iio.framework/Versions/0.23/iio /usr/local/lib/libiio.dylib /usr/local/lib/SoapySDR/modules0.*/libPlutoSDRSupport.so | |
install_name_tool -change @rpath/ad9361.framework/Versions/0.2/ad9361 /usr/local/lib/libad9361.dylib /usr/local/lib/SoapySDR/modules0.*/libPlutoSDRSupport.so | |
cd /tmp | |
git clone https://gitea.osmocom.org/sdr/gr-iqbal.git | |
cd gr-iqbal | |
git submodule update --init --recursive | |
mkdir build | |
cd build | |
cmake .. | |
make -j4 | |
make install | |
cd /tmp | |
git clone https://gitea.osmocom.org/sdr/gr-osmosdr.git | |
cd gr-osmosdr | |
mkdir build | |
cd build | |
cmake -DCMAKE_CXX_FLAGS=-Wno-register .. | |
LIBRARY_PATH=/usr/local/opt/icu4c/lib make -j4 | |
make install | |
- name: Install Apple certificate | |
if: ${{ steps.secret-check.outputs.available == 'true' }} | |
env: | |
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} | |
P12_PASSWORD: ${{ secrets.P12_PASSWORD }} | |
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} | |
run: | | |
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 | |
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db | |
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH | |
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH | |
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH | |
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH | |
security list-keychain -d user -s $KEYCHAIN_PATH | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Configure | |
run: mkdir build && cd build && cmake .. | |
- name: Compile | |
working-directory: build | |
run: make -j4 | |
- name: Build app bundle | |
run: ./macos_bundle.sh ${{ steps.secret-check.outputs.available }} | |
- name: Notarize app bundle | |
if: ${{ steps.secret-check.outputs.available == 'true' }} | |
env: | |
NOTARIZE_USERNAME: ${{ secrets.NOTARIZE_USERNAME }} | |
NOTARIZE_TEAM_ID: ${{ secrets.NOTARIZE_TEAM_ID }} | |
NOTARIZE_PASSWORD: ${{ secrets.NOTARIZE_PASSWORD }} | |
run: | | |
ditto -c -k --keepParent Gqrx.app Gqrx.zip | |
xcrun notarytool submit Gqrx.zip --apple-id "$NOTARIZE_USERNAME" --team-id "$NOTARIZE_TEAM_ID" --password "$NOTARIZE_PASSWORD" --wait | |
- name: Staple app bundle | |
if: ${{ steps.secret-check.outputs.available == 'true' }} | |
run: xcrun stapler staple --verbose Gqrx.app | |
- name: Create DMG | |
run: | | |
GQRX_VERSION=$(<build/version.txt) | |
hdiutil create Gqrx.dmg -srcfolder Gqrx.app -format UDZO -fs HFS+ -volname "Gqrx $GQRX_VERSION" | |
- name: Notarize DMG | |
if: ${{ steps.secret-check.outputs.available == 'true' }} | |
env: | |
NOTARIZE_USERNAME: ${{ secrets.NOTARIZE_USERNAME }} | |
NOTARIZE_TEAM_ID: ${{ secrets.NOTARIZE_TEAM_ID }} | |
NOTARIZE_PASSWORD: ${{ secrets.NOTARIZE_PASSWORD }} | |
run: | | |
xcrun notarytool submit Gqrx.dmg --apple-id "$NOTARIZE_USERNAME" --team-id "$NOTARIZE_TEAM_ID" --password "$NOTARIZE_PASSWORD" --wait | |
- name: Staple DMG | |
if: ${{ steps.secret-check.outputs.available == 'true' }} | |
run: xcrun stapler staple --verbose Gqrx.dmg | |
- name: Rename DMG | |
run: | | |
GQRX_VERSION=$(<build/version.txt) | |
mv Gqrx.dmg Gqrx-$GQRX_VERSION.dmg | |
- name: Save artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: gqrx-macos-${{ github.run_id }} | |
path: Gqrx-*.dmg | |
windows: | |
runs-on: windows-latest | |
name: Windows | |
defaults: | |
run: | |
shell: msys2 {0} | |
steps: | |
- name: Setup MSYS2 | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: MINGW64 | |
update: true | |
install: >- | |
git | |
make | |
pacboy: >- | |
toolchain:p | |
cmake:p | |
ninja:p | |
libusb:p | |
boost:p | |
qt6-base:p | |
qt6-svg:p | |
spdlog:p | |
volk:p | |
libsndfile:p | |
soapysdr:p | |
fftw:p | |
- name: Clone and build GNU Radio | |
working-directory: ${{ runner.temp }} | |
run: | | |
git clone --branch v3.10.11.0 --depth 1 https://github.com/gnuradio/gnuradio.git | |
cd gnuradio | |
cmake -S . -B build \ | |
-DCMAKE_INSTALL_PREFIX=${RUNNER_TEMP}/msys64/mingw64 \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DENABLE_DEFAULT=OFF \ | |
-DENABLE_COMMON_PCH=ON \ | |
-DENABLE_GNURADIO_RUNTIME=ON \ | |
-DENABLE_GR_ANALOG=ON \ | |
-DENABLE_GR_AUDIO=ON \ | |
-DENABLE_GR_BLOCKS=ON \ | |
-DENABLE_GR_DIGITAL=ON \ | |
-DENABLE_GR_FFT=ON \ | |
-DENABLE_GR_FILTER=ON \ | |
-DENABLE_GR_NETWORK=ON | |
cmake --build build | |
cmake --install build | |
- name: Clone and build rtl-sdr | |
working-directory: ${{ runner.temp }} | |
run: | | |
git clone https://gitea.osmocom.org/sdr/rtl-sdr.git | |
cd rtl-sdr | |
cmake -S . -B build \ | |
-DCMAKE_INSTALL_PREFIX=${RUNNER_TEMP}/msys64/mingw64 \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DDETACH_KERNEL_DRIVER=OFF \ | |
-DENABLE_ZEROCOPY=OFF \ | |
-DINSTALL_UDEV_RULES=OFF | |
cmake --build build | |
cmake --install build | |
- name: Clone and build airspyone_host | |
working-directory: ${{ runner.temp }} | |
run: | | |
git clone https://github.com/airspy/airspyone_host.git | |
cd airspyone_host | |
cmake -S . -B build \ | |
-G "MinGW Makefiles" \ | |
-DCMAKE_INSTALL_PREFIX=${RUNNER_TEMP}/msys64/mingw64 | |
cmake --build build | |
cmake --install build | |
- name: Clone and build airspyhf | |
working-directory: ${{ runner.temp }} | |
run: | | |
git clone https://github.com/airspy/airspyhf.git | |
cd airspyhf | |
cmake -S . -B build \ | |
-G "MSYS Makefiles" \ | |
-DCMAKE_INSTALL_PREFIX=${RUNNER_TEMP}/msys64/mingw64 \ | |
-DTHREADS_PTHREADS_INCLUDE_DIR=${RUNNER_TEMP}/msys64/mingw64/include \ | |
-DTHREADS_PTHREADS_WIN32_LIBRARY=${RUNNER_TEMP}/msys64/mingw64/lib/libpthread.a | |
cmake --build build | |
cmake --install build | |
- name: Clone and build gr-osmosdr | |
working-directory: ${{ runner.temp }} | |
run: | | |
git clone https://gitea.osmocom.org/sdr/gr-osmosdr.git | |
cd gr-osmosdr | |
cmake -S . -B build \ | |
-DCMAKE_INSTALL_PREFIX=${RUNNER_TEMP}/msys64/mingw64 \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-DENABLE_DEFAULT=OFF \ | |
-DENABLE_AIRSPY=ON \ | |
-DENABLE_AIRSPYHF=ON \ | |
-DENABLE_FILE=ON \ | |
-DENABLE_REDPITAYA=ON \ | |
-DENABLE_RTL=ON \ | |
-DENABLE_RTL_TCP=ON \ | |
-DENABLE_SOAPY=ON | |
cmake --build build | |
cmake --install build | |
- name: Configure git | |
run: git config --global core.autocrlf input | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Configure, compile & install | |
run: | | |
cmake -S . -B build \ | |
-DCMAKE_INSTALL_PREFIX=C:/gqrx \ | |
-DCMAKE_BUILD_TYPE=Release | |
cmake --build build | |
cmake --install build | |
- name: Deploy Qt application | |
working-directory: ${{ runner.temp }}/msys64/mingw64/bin | |
run: | | |
windeployqt6 C:/gqrx/bin/gqrx.exe | |
cp \ | |
libairspy.dll \ | |
libairspyhf.dll \ | |
libb2-1.dll \ | |
libboost_program_options-mt.dll \ | |
libboost_thread-mt.dll \ | |
libbrotlicommon.dll \ | |
libbrotlidec.dll \ | |
libbz2-1.dll \ | |
libdouble-conversion.dll \ | |
libfftw3f-3.dll \ | |
libfftw3f_threads-3.dll \ | |
libFLAC.dll \ | |
libfmt.dll \ | |
libfreetype-6.dll \ | |
libgcc_s_seh-1.dll \ | |
libglib-2.0-0.dll \ | |
libgmp-10.dll \ | |
libgnuradio-*.dll \ | |
libgraphite2.dll \ | |
libharfbuzz-0.dll \ | |
libiconv-2.dll \ | |
libicudt75.dll \ | |
libicuin75.dll \ | |
libicuuc75.dll \ | |
libintl-8.dll \ | |
libmd4c.dll \ | |
libmp3lame-0.dll \ | |
libmpg123-0.dll \ | |
libogg-0.dll \ | |
libopus-0.dll \ | |
liborc-0.4-0.dll \ | |
libpcre2-16-0.dll \ | |
libpcre2-8-0.dll \ | |
libpng16-16.dll \ | |
librtlsdr.dll \ | |
libsndfile-1.dll \ | |
libSoapySDR.dll \ | |
libspdlog.dll \ | |
libstdc++-6.dll \ | |
libusb-1.0.dll \ | |
libvolk.dll \ | |
libvorbis-0.dll \ | |
libvorbisenc-2.dll \ | |
libwinpthread-1.dll \ | |
libzstd.dll \ | |
zlib1.dll \ | |
C:/gqrx/bin/ | |
- name: Save artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: gqrx-windows-${{ github.run_id }} | |
path: C:/gqrx/bin |