diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..8c21b12d --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,84 @@ +# swy: some useful references; the MSVC part of the CI script is based on the one from bind9, by Michał Kępień: +# https://gitlab.com/gitlab-org/ci-cd/shared-runners/images/gcp/windows-containers/blob/master/cookbooks/preinstalled-software/README.md +# https://gitlab.isc.org/isc-projects/bind9/commit/facc6a051fcac70fbbc61cb92a37be8c3e4db5ec#587d266bb27a4dc3022bbed44dfa19849df3044c_718_731 +# https://www.kittell.net/code/powershell-unix-sed-equivalent-change-text-file/ +# https://powershell.org/forums/topic/how-to-use-ansi-vt100-formatting-in-powershell-ooh-pretty-colors/ + +.shared_windows_runners: + tags: + - shared-windows + - windows + - windows-1809 + +stages: + - build + +before_script: + - echo "started by ${GITLAB_USER_NAME}" + - $esc = "$([char]27)" + - $count = 0 + - function _unix_tmsec_ { [int64](([datetime]::UtcNow)-(get-date "1/1/1970")).TotalSeconds } + - function _fold_start_ { param( [string]$TEXT_TAG ) $t=_unix_tmsec_; $global:count += 1; Write-Host -NoNewLine "`r`n`r`nsection_start:${t}:sect_${count}`r${esc}[0K${esc}[33m${TEXT_TAG}${esc}[39m`r`n"; } + - function _fold_final_ { $t=_unix_tmsec_; Write-Host -NoNewLine "`r`n`r`nsection_end:${t}:sect_${count}`r${esc}[0K`r`n" ; } + +build: + extends: + - .shared_windows_runners + stage: build + script: + - _fold_start_ 'configuring the msvc environment variables' + - Push-Location "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Auxiliary/Build" + - '& cmd.exe /C "vcvarsall.bat x64 & set" | Foreach-Object { if ($_ -match "(.*?)=(.*)") { Set-Item -force -path "Env:\$($matches[1])" -value "$($matches[2])" } }' + - Pop-Location + - _fold_final_ + + - _fold_start_ 'downloading precompiled versions of qtbase, qttools (for windeployqt) and jom (for a more parallel nmake)' + - mkdir _qt + - mkdir _qt_download + - Push-Location _qt_download + - curl.exe -LJ -o qt-base.7z 'https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5150/qt.qt5.5150.win64_msvc2017_64/5.15.0-0-202002260536qtbase-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64.7z' + - curl.exe -LJ -o qt-tools.7z 'https://download.qt.io/online/qtsdkrepository/windows_x86/desktop/qt5_5150/qt.qt5.5150.win64_msvc2017_64/5.15.0-0-202002260536qttools-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64.7z' + - curl.exe -LJ -o qt-jom.zip 'https://download.qt.io/official_releases/jom/jom.zip' + - _fold_final_ + + - _fold_start_ 'extracting the downloaded qt binaries' + - 7z x qt-base.7z '-o../_qt' -y + - 7z x qt-tools.7z '-o../_qt' -y + - 7z x qt-jom.zip '-o../_qt' -y + - _fold_final_ + + - _fold_start_ 'turn the qt install from enterprise to foss; remove the licensing checks' + - ${qconfig-pri-folder} = '..\_qt\5.15.0\msvc2017_64\mkspecs\qconfig.pri' + - (Get-Content ${qconfig-pri-folder}).replace('QT_EDITION = Enterprise', 'QT_EDITION = OpenSource') | Set-Content ${qconfig-pri-folder} + - (Get-Content ${qconfig-pri-folder}).replace('QT_LICHECK = licheck.exe', '') | Set-Content ${qconfig-pri-folder} + - Pop-Location + - _fold_final_ + + - _fold_start_ 'run qmake and generate the msvc nmake makefile' + - mkdir _build; cd _build + - ..\_qt\5.15.0\msvc2017_64\bin\qmake ..\OpenRGB.pro + - _fold_final_ + + - _fold_start_ 'start the actual build with jom instead of nmake; for speed' + - ..\_qt\jom + - _fold_final_ + + - _fold_start_ 'run windeployqt to automatically copy the needed dll files' + - ..\_qt\5.15.0\msvc2017_64\bin\windeployqt --no-angle --no-translations --no-opengl-sw --no-system-d3d-compiler --no-compiler-runtime --no-webkit2 .\release\ + - _fold_final_ + + - _fold_start_ 'compressing the release folder so that we can upload it as artifact' + - mv release 'OpenRGB Windows 64-bit' + - ${datetime} = Get-Date ([datetime]::UtcNow) -Format "yyyy-MM-ddTHH-mm-ss" + - ${revision} = ((git rev-parse --short HEAD) | Out-String).Trim() + - ${rversion} = (((Get-Content '..\OpenRGB.pro' | Select-String -Pattern "VERSION =") | Out-String).Trim().Split("="))[1].Trim() + - 7z a -mx9 -r -y "OpenRGB_${rversion}_64_${revision}_nightly_${datetime}.7z" 'OpenRGB Windows 64-bit' + - _fold_final_ +# cache: +# key: same-key +# paths: +# - C:\vcpkg\installed\ + artifacts: + paths: + - _build/*.7z + expire_in: 1337 years \ No newline at end of file diff --git a/OpenRGB.pro b/OpenRGB.pro index 9144fb08..0928a242 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -393,9 +393,30 @@ win32:DEFINES += \ win32:RC_ICONS += \ qt/OpenRGB.ico -# Copy OpenRazer.dll to output directory +#-------------------------------------------------------------------# +# Windows GitLab CI Configuration # +#-------------------------------------------------------------------# +win32:CONFIG(debug, debug|release) { + win32:DESTDIR = debug +} + +win32:CONFIG(release, debug|release) { + win32:DESTDIR = release +} + +win32:OBJECTS_DIR = _intermediate_$$DESTDIR/.obj +win32:MOC_DIR = _intermediate_$$DESTDIR/.moc +win32:RCC_DIR = _intermediate_$$DESTDIR/.qrc +win32:UI_DIR = _intermediate_$$DESTDIR/.ui + +#-------------------------------------------------------------------# +# Copy dependencies to output directory # +#-------------------------------------------------------------------# + win32:contains(QMAKE_TARGET.arch, x86_64) { - copydata.commands = $(COPY_FILE) \"$$shell_path($$PWD\\dependencies\\openrazer-win32\\OpenRazer64.dll)\" \"$$shell_path($$OUT_PWD)\" + copydata.commands = $(COPY_FILE) \"$$shell_path($$PWD/dependencies/openrazer-win32/OpenRazer64.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) + copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/inpout32_1501/x64/inpoutx64.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) + copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/libusb-1.0.22/MS64/dll/libusb-1.0.dll)\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) first.depends = $(first) copydata export(first.depends) export(copydata.commands) @@ -403,7 +424,10 @@ win32:contains(QMAKE_TARGET.arch, x86_64) { } win32:contains(QMAKE_TARGET.arch, x86) { - copydata.commands = $(COPY_FILE) \"$$shell_path($$PWD\\dependencies\\openrazer-win32\\OpenRazer.dll)\" \"$$shell_path($$OUT_PWD)\" + copydata.commands = $(COPY_FILE) \"$$shell_path($$PWD/dependencies/openrazer-win32/OpenRazer.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) + copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/inpout32_1501/Win32/inpout32.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) + copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/libusb-1.0.22/MS32/dll/libusb-1.0.dll)\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) + first.depends = $(first) copydata export(first.depends) export(copydata.commands)