diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 000000000000..81b28159497e --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,91 @@ +name: Windows + +on: + push: + branches: + - master + - 'Stable*' + tags: + - 'v*' + paths-ignore: + - 'docs/**' + - 'android/**' + pull_request: + paths-ignore: + - 'docs/**' + - 'android/**' + +jobs: + build: + runs-on: windows-latest + + strategy: + matrix: + BuildType: [Debug, Release] + + defaults: + run: + shell: cmd + + env: + QT_VERSION: 6.6.3 + ARTIFACT: QGroundControl-installer.exe + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + with: + submodules: recursive + fetch-tags: true + + - name: Install Qt + uses: jurplel/install-qt-action@v3 + with: + version: ${{ env.QT_VERSION }} + aqtversion: ==3.1.* + host: windows + target: desktop + arch: win64_msvc2019_64 + dir: ${{ runner.temp }} + modules: qtcharts qtlocation qtpositioning qtspeech qt5compat qtmultimedia qtserialport qtimageformats qtshadertools qtconnectivity qtquick3d + setup-python: true + cache: true + + - name: Setup GStreamer + uses: blinemedical/setup-gstreamer@v1 + with: + version: 1.18.6 + + - name: Install Dependencies + run: choco install --no-progress ninja -y + + - name: Set up Visual Studio shell + uses: ilammy/msvc-dev-cmd@v1 + with: + arch: x64 + + - name: Create build directory + run: mkdir ${{ runner.temp }}\shadow_build_dir + + - name: Configure + working-directory: ${{ runner.temp }}\shadow_build_dir + run: cmake -S ${{ github.workspace }} -B . -G Ninja ^ + -DCMAKE_BUILD_TYPE=${{ matrix.BuildType }} ^ + -DQGC_STABLE_BUILD=${{ github.ref_type == 'tag' || contains(github.ref, 'Stable') && 'ON' || 'OFF' }} + + - name: Build + working-directory: ${{ runner.temp }}\shadow_build_dir + run: cmake --build . --target all --config ${{ matrix.BuildType }} + + - name: Install + working-directory: ${{ runner.temp }}\shadow_build_dir + run: cmake --install . --config ${{ matrix.BuildType }} + + - name: Upload Build File + uses: ./.github/actions/upload + if: matrix.BuildType == 'Release' + with: + artifact_name: ${{ env.ARTIFACT }} + aws_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + source: '' diff --git a/.github/workflows/windows_debug.yml b/.github/workflows/windows_debug.yml deleted file mode 100644 index c9c7e585d1c9..000000000000 --- a/.github/workflows/windows_debug.yml +++ /dev/null @@ -1,97 +0,0 @@ -name: Windows Debug and Tests - -on: - push: - branches: - - 'master' - - 'Stable*' - tags: - - 'v*' - paths-ignore: - - 'docs/**' - pull_request: - branches: - - '*' - paths-ignore: - - 'docs/**' - -defaults: - run: - shell: cmd - -env: - SOURCE_DIR: ${{ github.workspace }} - QT_VERSION: 6.6.* - ARTIFACT: QGroundControl-installer.exe - BUILD_TYPE: ${{ fromJSON('["DailyBuild", "StableBuild"]')[ github.ref_type == 'tag' || contains(github.ref, 'Stable_' ) ] }} - -jobs: - build: - runs-on: windows-2019 - - steps: - - name: Checkout repo - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: ccache - uses: hendrikmuhs/ccache-action@v1.2 - with: - create-symlink: true - key: ${{ runner.os }}-Debug - restore-keys: ${{ runner.os }}-Debug - max-size: "2G" - append-timestamp: false - variant: "sccache" - - - name: Get all tags for correct version determination - working-directory: ${{ github.workspace }} - run: | - git fetch --all --tags -f --depth 1 - - - name: Install Qt - uses: jurplel/install-qt-action@v3 - with: - version: ${{ env.QT_VERSION }} - aqtversion: ==3.1.* - host: windows - target: desktop - arch: win64_msvc2019_64 - dir: ${{ runner.temp }} - modules: qtcharts qtlocation qtpositioning qtspeech qt5compat qtmultimedia qtserialport qtimageformats qtshadertools qtconnectivity qtquick3d - setup-python: true - cache: true - - - name: Setup GStreamer - uses: blinemedical/setup-gstreamer@v1 - with: - version: 1.18.6 - - - name: Install Dependencies - run: python -m pip install ninja - - - name: Set up Visual Studio shell - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: x64 - - - name: Create build directory - run: mkdir ${{ runner.temp }}\shadow_build_dir - - - name: Build - working-directory: ${{ runner.temp }}\shadow_build_dir - run: | - cmake -S ${{ env.SOURCE_DIR }} -B ${{ runner.temp }}\shadow_build_dir -G Ninja -DCMAKE_BUILD_TYPE=Debug - cmake --build ${{ runner.temp }}\shadow_build_dir --target all --config Debug - cmake --install ${{ runner.temp }}\shadow_build_dir - - - name: Save PDB artifact - uses: actions/upload-artifact@master - with: - name: qgroundcontrol.pdb - path: ${{ runner.temp }}\shadow_build_dir\staging\qgroundcontrol.pdb - - # - name: Run unit tests - # working-directory: ${{ runner.temp }}\shadow_build_dir - # run: ${{ runner.temp }}\shadow_build_dir\staging\bin\QGroundControl.exe --unittest diff --git a/.github/workflows/windows_release.yml b/.github/workflows/windows_release.yml deleted file mode 100644 index 4f271c3fd1d9..000000000000 --- a/.github/workflows/windows_release.yml +++ /dev/null @@ -1,101 +0,0 @@ -name: Windows Release - -on: - push: - branches: - - 'master' - - 'Stable*' - tags: - - 'v*' - paths-ignore: - - 'docs/**' - pull_request: - branches: - - '*' - paths-ignore: - - 'docs/**' - -defaults: - run: - shell: cmd - -env: - SOURCE_DIR: ${{ github.workspace }} - QT_VERSION: 6.6.* - ARTIFACT: QGroundControl-installer.exe - BUILD_TYPE: ${{ fromJSON('["DailyBuild", "StableBuild"]')[ github.ref_type == 'tag' || contains(github.ref, 'Stable_' ) ] }} - -jobs: - build: - runs-on: windows-2019 - - steps: - - name: Checkout repo - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: ccache - uses: hendrikmuhs/ccache-action@v1.2 - with: - create-symlink: true - key: ${{ runner.os }}-Release - restore-keys: ${{ runner.os }}-Release - max-size: "2G" - append-timestamp: false - variant: "sccache" - if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request' - - - name: Get all tags for correct version determination - working-directory: ${{ github.workspace }} - run: | - git fetch --all --tags -f --depth 1 - - - name: Install Qt - uses: jurplel/install-qt-action@v3 - with: - version: ${{ env.QT_VERSION }} - aqtversion: ==3.1.* - host: windows - target: desktop - arch: win64_msvc2019_64 - dir: ${{ runner.temp }} - modules: qtcharts qtlocation qtpositioning qtspeech qt5compat qtmultimedia qtserialport qtimageformats qtshadertools qtconnectivity qtquick3d - setup-python: false - cache: true - - - name: Download JOM - uses: suisei-cn/actions-download-file@v1.6.0 - with: - url: http://download.qt.io/official_releases/jom/jom.zip - target: ${{ runner.temp }}\ - - - name: Unzip JOM - working-directory: ${{ runner.temp }} - run: | - 7z x jom.zip -ojom - - - name: Install Gstreamer - run: choco install --no-progress gstreamer gstreamer-devel --version=1.18.6 - - - name: Set up Visual Studio shell - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: x64 - - - name: Create build directory - run: mkdir ${{ runner.temp }}\shadow_build_dir - - - name: Build - working-directory: ${{ runner.temp }}\shadow_build_dir - run: | - qmake -r ${{ env.SOURCE_DIR }}\qgroundcontrol.pro CONFIG+=installer CONFIG+=${{ env. BUILD_TYPE }} - ${{ runner.temp }}\jom\jom -j2 - - - name: Upload Build File - uses: ./.github/actions/upload - with: - artifact_name: ${{ env.ARTIFACT }} - aws_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - source: 'staging' diff --git a/CMakeLists.txt b/CMakeLists.txt index d3be93e293fa..25b894ddbb4d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -294,4 +294,6 @@ if(LINUX) DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo/ ) install(SCRIPT "${CMAKE_SOURCE_DIR}/cmake/CreateAppImage.cmake") +elseif(WIN32) + install(SCRIPT "${CMAKE_SOURCE_DIR}/cmake/CreateWinInstaller.cmake") endif() diff --git a/cmake/CreateWinInstaller.cmake b/cmake/CreateWinInstaller.cmake new file mode 100644 index 000000000000..360d2f690681 --- /dev/null +++ b/cmake/CreateWinInstaller.cmake @@ -0,0 +1,46 @@ +message(STATUS "Creating Win Installer") + +include(CMakePrintHelpers) + +set(QGC_INSTALLER_SOURCE "${CMAKE_CURRENT_LIST_DIR}/../deploy/windows") +cmake_print_variables(QGC_INSTALLER_SOURCE) + +set(QGC_INSTALLER_ICON "${QGC_INSTALLER_SOURCE}/WindowsQGC.ico") +set(QGC_INSTALLER_HEADER_BITMAP "${QGC_INSTALLER_SOURCE}/installheader.bmp") +set(QGC_INSTALLER_DRIVER_MSI "${QGC_INSTALLER_SOURCE}/driver.msi") +cmake_print_variables( QGC_INSTALLER_ICON QGC_INSTALLER_HEADER_BITMAP QGC_INSTALLER_DRIVER_MSI) + +set(QGC_NSIS_INSTALLER_SCRIPT "${QGC_INSTALLER_SOURCE}/nullsoft_installer.nsi") +set(QGC_NSIS_INSTALLER_CMD "C:/Program Files (x86)/NSIS/makensis.exe") +cmake_print_variables(QGC_NSIS_INSTALLER_SCRIPT QGC_NSIS_INSTALLER_CMD) + +set(QGC_NSIS_INSTALLER_PARAMETERS_LIST) +list(APPEND QGC_NSIS_INSTALLER_PARAMETERS_LIST "/DDRIVER_MSI=\"${QGC_INSTALLER_DRIVER_MSI}\"") +list(APPEND QGC_NSIS_INSTALLER_PARAMETERS_LIST "/DINSTALLER_ICON=\"${QGC_INSTALLER_ICON}\"") +list(APPEND QGC_NSIS_INSTALLER_PARAMETERS_LIST "/DHEADER_BITMAP=\"${QGC_INSTALLER_HEADER_BITMAP}\"") +list(APPEND QGC_NSIS_INSTALLER_PARAMETERS_LIST "/DAPPNAME=\"QGroundControl\"") +list(APPEND QGC_NSIS_INSTALLER_PARAMETERS_LIST "/DEXENAME=\"QGroundControl\"") +list(APPEND QGC_NSIS_INSTALLER_PARAMETERS_LIST "/DORGNAME=\"Dronecode Foundation\"") +list(APPEND QGC_NSIS_INSTALLER_PARAMETERS_LIST "/DDESTDIR=${CMAKE_BINARY_DIR}/staging") +list(APPEND QGC_NSIS_INSTALLER_PARAMETERS_LIST "/NOCD") +list(APPEND QGC_NSIS_INSTALLER_PARAMETERS_LIST "\"/XOutFile ${CMAKE_BINARY_DIR}/QGroundControl-installer.exe\"") +list(APPEND QGC_NSIS_INSTALLER_PARAMETERS_LIST "\"${QGC_NSIS_INSTALLER_SCRIPT}\"") +cmake_print_variables(QGC_NSIS_INSTALLER_PARAMETERS_LIST) + +list(JOIN QGC_NSIS_INSTALLER_PARAMETERS_LIST " " QGC_NSIS_INSTALLER_PARAMETERS_STR) +cmake_print_variables(QGC_NSIS_INSTALLER_PARAMETERS_STR) + +separate_arguments(QGC_NSIS_INSTALLER_PARAMETERS WINDOWS_COMMAND "${QGC_NSIS_INSTALLER_PARAMETERS_STR}") +cmake_print_variables(QGC_NSIS_INSTALLER_PARAMETERS) + +message(STATUS "Win Installer Command: \"COMMAND ${QGC_NSIS_INSTALLER_CMD} ${QGC_NSIS_INSTALLER_PARAMETERS}\"") + +execute_process( + COMMAND "${QGC_NSIS_INSTALLER_CMD} ${QGC_NSIS_INSTALLER_PARAMETERS}" + RESULTS_VARIABLE NSIS_RESULT + OUTPUT_VARIABLE NSIS_OUTPUT + ERROR_VARIABLE NSIS_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +cmake_print_variables(NSIS_RESULT NSIS_OUTPUT NSIS_ERROR)