Skip to content

Build Chiaki (VC Qt6) #1

Build Chiaki (VC Qt6)

Build Chiaki (VC Qt6) #1

name: Build Chiaki (VC Qt6)
on:
workflow_dispatch:
# workflow_call: #testing!
# TODO: https://www.qt.io/blog/qt-multimedia-in-qt-6
# Not as easy as updating a cmakelists.txt file :(
jobs:
build-win_x64: # only win_x64 so far :)
name: Build Chiaki win_x64 (VC)
runs-on: windows-2022
defaults:
run:
shell: powershell
steps:
- name: Clean Workspace Action
uses: yumis-coconudge/[email protected]
- name: Checkout code
uses: actions/checkout@v2
with:
repository: 'dolphin78/chiaki-qt6'
ref: 'haptics'
submodules: 'recursive'
path: 'chiaki-qt6'
- name: Setup NASM
run: |
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -UseBasicParsing -Uri "https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-win64.zip" -OutFile ".\nasm-2.15.05-win64.zip"
Expand-Archive -LiteralPath "nasm-2.15.05-win64.zip" -DestinationPath "."
Rename-Item "nasm-2.15.05" "nasm"
Write-Output "${{ github.workspace }}\nasm" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
- name: Setup ffmpeg
run: |
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n5.1-latest-win64-gpl-shared-5.1.zip" -OutFile ".\ffmpeg-n5.1-latest-win64-gpl-shared-5.1.zip"
Expand-Archive -LiteralPath "ffmpeg-n5.1-latest-win64-gpl-shared-5.1.zip" -DestinationPath "."
Rename-Item "ffmpeg-n5.1-latest-win64-gpl-shared-5.1" "ffmpeg"
Write-Output "${{ github.workspace }}\ffmpeg\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
- name: Setup protoc
run: |
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -UseBasicParsing -Uri "https://github.com/protocolbuffers/protobuf/releases/download/v21.2/protoc-21.2-win64.zip" -OutFile ".\protobuf.zip"
Expand-Archive -LiteralPath ".\protobuf.zip" -DestinationPath ".\protobuf"
Write-Output "${{ github.workspace }}\protobuf\bin" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
- name: Setup nanopb
run: |
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -UseBasicParsing -Uri "https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.6-windows-x86.zip" -OutFile ".\nanopb-0.4.6-windows-x86.zip"
Expand-Archive -LiteralPath "nanopb-0.4.6-windows-x86.zip" -DestinationPath "."
Rename-Item "nanopb-0.4.6-windows-x86" "nanopb"
- name: Setup OpenSSL
run: |
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -UseBasicParsing -Uri "https://download.firedaemon.com/FireDaemon-OpenSSL/openssl-1.1.1w.zip" -OutFile ".\openssl-1.1.1w.zip"
Expand-Archive -LiteralPath "openssl-1.1.1w.zip" -DestinationPath "."
Rename-Item "openssl-1.1" "openssl"
Write-Output "${{ github.workspace }}\openssl" | Out-File -FilePath $Env:GITHUB_PATH -Encoding utf8 -Append
- name: Setup SDL2
run: |
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -UseBasicParsing -Uri "https://www.libsdl.org/release/SDL2-devel-2.28.4-VC.zip" -OutFile ".\SDL2-devel-2.28.4-VC.zip"
Expand-Archive -LiteralPath "SDL2-devel-2.28.4-VC.zip" -DestinationPath "."
Rename-Item "SDL2-2.28.4" "SDL2"
Write-Output "SDL2_DIR=${{ github.workspace }}\SDL2" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
Set-Content -Path "${{ github.workspace }}\SDL2\sdl2-config.cmake" -Value 'set(TARGET_NAME SDL2::SDL2)'
Add-Content -Path "${{ github.workspace }}\SDL2\sdl2-config.cmake" -Value 'add_library(${TARGET_NAME} SHARED IMPORTED)'
Add-Content -Path "${{ github.workspace }}\SDL2\sdl2-config.cmake" -Value 'set_target_properties(${TARGET_NAME} PROPERTIES'
Add-Content -Path "${{ github.workspace }}\SDL2\sdl2-config.cmake" -Value ' IMPORTED_LOCATION "${SDL2_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2${CMAKE_SHARED_LIBRARY_SUFFIX}"'
Add-Content -Path "${{ github.workspace }}\SDL2\sdl2-config.cmake" -Value ' INTERFACE_INCLUDE_DIRECTORIES "$ENV{SDL2_DIR}/include"'
Add-Content -Path "${{ github.workspace }}\SDL2\sdl2-config.cmake" -Value ' INTERFACE_LINK_LIBRARIES "$ENV{SDL2_DIR}/lib/x64/SDL2.lib;$ENV{SDL2_DIR}/lib/x64/SDL2main.lib"'
Add-Content -Path "${{ github.workspace }}\SDL2\sdl2-config.cmake" -Value ' IMPORTED_LINK_INTERFACE_LANGUAGES "C"'
Add-Content -Path "${{ github.workspace }}\SDL2\sdl2-config.cmake" -Value ')'
Add-Content -Path "${{ github.workspace }}\SDL2\sdl2-config.cmake" -Value 'set_target_properties(SDL2::SDL2 PROPERTIES IMPORTED_IMPLIB "$ENV{SDL2_DIR}/lib/x64/SDL2.lib")'
Get-Content -Path "${{ github.workspace }}\SDL2\sdl2-config.cmake"
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
architecture: "x64"
- name: Install pip dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade setuptools wheel
python3 -m pip install --user --upgrade scons protobuf grpcio-tools pyinstaller
python3 -c 'import google.protobuf; print(google.protobuf.__file__)'
# aqt list-qt windows desktop --modules 6.2.4 win64_msvc2019_64
# debug_info qt3d qt5compat qtactiveqt qtcharts qtconnectivity qtdatavis3d
# qtimageformats qtlottie qtmultimedia qtnetworkauth qtpositioning qtquick3d
# qtquicktimeline qtremoteobjects qtscxml qtsensors qtserialbus qtserialport
# qtshadertools qtvirtualkeyboard qtwebchannel qtwebengine qtwebsockets qtwebview
- name: Setup Qt
uses: jurplel/install-qt-action@v2
with:
version: '6.2.4'
host: 'windows'
target: 'desktop'
arch: 'win64_msvc2019_64'
modules: 'qtmultimedia'
aqtversion: '==2.1.0'
- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
with:
arch: "x86_64"
toolset: "14"
- name: Configure & Build Opus
run: |
git clone https://github.com/xiph/opus.git
cd opus
mkdir build
cmake `
-S . `
-B build `
-G "Visual Studio 17 2022" -A x64 `
-DCMAKE_C_COMPILER=cl `
-DCMAKE_BUILD_TYPE=Release `
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}\opus-prefix"
cmake --build build --config Release
cmake --install build
- name: Configure Chiaki
working-directory: chiaki-qt6
run: |
cmake `
-S . `
-B build `
-G "Visual Studio 17 2022" -A x64 `
-DCMAKE_C_COMPILER=cl `
-DCMAKE_C_FLAGS="-we4013" `
-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE `
-DCMAKE_BUILD_TYPE=RelWithDebInfo `
-DCHIAKI_ENABLE_CLI=OFF `
-DCHIAKI_GUI_ENABLE_SDL_GAMECONTROLLER=ON `
-DPYTHON_EXECUTABLE="${{ env.pythonLocation }}\python.exe" `
-DCMAKE_PREFIX_PATH="${{ github.workspace }}\nanopb;${{ github.workspace }}\ffmpeg;${{ github.workspace }}\opus-prefix;${{ github.workspace }}\openssl\x64;${{ github.workspace }}\SDL2;${{ env.Qt6_Dir }}"
- name: Build Chiaki
working-directory: chiaki-qt6
run: |
cmake --build build --config Release --clean-first --target chiaki
- name: Prepare Qt deployment package
working-directory: chiaki-qt6
run: |
mkdir Chiaki-VC-Qt6
cp build\gui\Release\chiaki.exe Chiaki-VC-Qt6
cp "${{ github.workspace }}\openssl\x64\bin\libcrypto-1_1-x64.dll" Chiaki-VC-Qt6
cp "${{ github.workspace }}\openssl\x64\bin\libssl-1_1-x64.dll" Chiaki-VC-Qt6
cp "${{ github.workspace }}\SDL2\lib\x64\SDL2.dll" Chiaki-VC-Qt6
cp "${{ github.workspace }}\ffmpeg\bin\swresample-4.dll" Chiaki-VC-Qt6
cp "${{ github.workspace }}\ffmpeg\bin\avcodec-59.dll" Chiaki-VC-Qt6
cp "${{ github.workspace }}\ffmpeg\bin\avutil-57.dll" Chiaki-VC-Qt6
windeployqt.exe --no-translations Chiaki-VC-Qt6\chiaki.exe
- name: Package Chiaki
working-directory: chiaki-qt6
run: |
$CHIAKI_VERSION_MAJOR = (Select-String -Path .\CMakeLists.txt -Pattern 'set\(CHIAKI_VERSION_MAJOR ([0-9]+)\)') | %{$_.Matches.Groups[1].value}
$CHIAKI_VERSION_MINOR = (Select-String -Path .\CMakeLists.txt -Pattern 'set\(CHIAKI_VERSION_MINOR ([0-9]+)\)') | %{$_.Matches.Groups[1].value}
$CHIAKI_VERSION_PATCH = (Select-String -Path .\CMakeLists.txt -Pattern 'set\(CHIAKI_VERSION_PATCH ([0-9]+)\)') | %{$_.Matches.Groups[1].value}
$RELEASE_PACKAGE_FILE = "Chiaki-win_x64-VC-Qt6-$CHIAKI_VERSION_MAJOR.$CHIAKI_VERSION_MINOR.$CHIAKI_VERSION_PATCH.zip"
Compress-Archive Chiaki-VC-Qt6 $RELEASE_PACKAGE_FILE
$release_filepath = Get-ChildItem $RELEASE_PACKAGE_FILE | %{$_[0].FullName}
echo "RELEASE_PACKAGE_PATH=$release_filepath" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
- name: Upload Chiaki Artifact
uses: actions/upload-artifact@v3
with:
name: Chiaki-win_x64-VC-Qt6-Release
path: ${{ env.RELEASE_PACKAGE_PATH }}
if-no-files-found: error
retention-days: 1