From 97ba832ccce18cadd6e5ff6608a2a4195c5f5d2f Mon Sep 17 00:00:00 2001 From: Evgeny Prikazchikov Date: Wed, 18 Feb 2026 14:59:39 +0300 Subject: [PATCH 1/3] OSX build procedure added --- .github/workflows/main.yml | 50 +++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3684113..36dbfae 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -125,11 +125,45 @@ jobs: with: name: ThundeHub.exe path: release/ThunderHub.exe + + osx: + name: MacOS + runs-on: macos-15 + needs: version + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Qt + run: | + sudo ./build/install-qt.sh --version ${QT_VERSION} qtbase qtsvg qtimageformats qtdeclarative qttools | tee -a $GITHUB_PATH + sudo ./build/install-qt.sh --version ${QTCREATOR_VERSION} qtcreator | tee -a $GITHUB_PATH + + - name: Setup Qbs + run: | + qbs --version + qbs setup-toolchains --detect + qbs config defaultProfile xcode + qbs config --list + + - name: Build Thunder Hub + run: | + qbs install --all-products config:release profile:xcode-macosx-arm64 + 7z a -t7z ThunderEngine-macosx-arm64.7z release/install-root + + - name: Upload Thunder Hub + uses: actions/upload-artifact@v4 + with: + name: ThunderEngine-macosx-arm64.7z + path: ThunderEngine-macosx-arm64.7z github: name: Upload to GitHub releases runs-on: ubuntu-latest - needs: [version, linux, windows] + needs: [version, linux, windows, osx] if: github.repository == 'thunder-engine/thunder' && needs.version.outputs.release == 'true' @@ -162,9 +196,9 @@ jobs: uses: actions/upload-release-asset@v1 with: upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ThunderHub-windows-x64.7z - asset_name: ThunderHub-windows-x64.7z - asset_content_type: application/x-7z-compressed + asset_path: ThundeHub.exe + asset_name: ThundeHub.exe + asset_content_type: application/vnd.microsoft.portable-executable - name: Upload Linux uses: actions/upload-release-asset@v1 @@ -173,3 +207,11 @@ jobs: asset_path: ThunderHub-linux-x86_64.7z asset_name: ThunderHub-linux-x86_64.7z asset_content_type: application/x-7z-compressed + + - name: Upload OSX + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ThunderEngine-macosx-arm64.7z + asset_name: ThunderEngine-macosx-arm64.7z + asset_content_type: application/x-7z-compressed From 50f565e1a75e795f9177d504297b16dffd8e06db Mon Sep 17 00:00:00 2001 From: Evgeny Prikazchikov Date: Wed, 18 Feb 2026 15:42:50 +0300 Subject: [PATCH 2/3] a --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 36dbfae..54146ca 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,9 +32,9 @@ jobs: - name: Get version id: get-version run: | - if [[ "$THUNDER_RELEASE" == 'true' ]]; then echo "::set-output name=version::${VERSION}" ; fi - if [[ "$THUNDER_RELEASE" != 'true' ]]; then echo "::set-output name=version::${VERSION}-SNAPSHOT" ; fi - echo "::set-output name=release::${THUNDER_RELEASE}" + if [[ "$THUNDER_RELEASE" == 'true' ]]; then echo "version=${VERSION}" >> $GITHUB_OUTPUT ; fi + if [[ "$THUNDER_RELEASE" != 'true' ]]; then echo "version=${VERSION}-SNAPSHOT" >> $GITHUB_OUTPUT ; fi + echo "release=${THUNDER_RELEASE}" >> $GITHUB_OUTPUT linux: name: Linux From cffd9cc0fa9156f9cbc73834d1cbba092de0a4aa Mon Sep 17 00:00:00 2001 From: Evgeniy Prikazchikov Date: Wed, 18 Feb 2026 19:36:18 +0300 Subject: [PATCH 3/3] MacOS build updated --- build/install.qbs | 47 ++++++++++++++++++++++-------------------- hub/ThunderHub.qbs | 4 ++-- hub/res/app-Info.plist | 2 +- thunder-hub.qbs | 10 ++++----- 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/build/install.qbs b/build/install.qbs index 50d733a..9d5d3c6 100644 --- a/build/install.qbs +++ b/build/install.qbs @@ -56,48 +56,46 @@ Product { files: { var list = []; + var libs = ["Core", "Gui", "Network", "OpenGL", "QmlCore", "Qml", "QmlMeta", "QmlModels", "QmlNetwork", "QmlWorkerScript", + "QmlXmlListModel", "QuickControls2Basic", "QuickControls2BasicStyleImpl", "QuickControls2", "QuickControls2Impl", + "Quick", "QuickDialogs2", "QuickDialogs2QuickImpl", "QuickDialogs2Utils", "QuickLayouts", "QuickTemplates2", + "QuickWidgets", "Svg", "Xml", "Widgets"] if (!Qt.core.frameworkBuild) { var libPrefix = (qbs.targetOS.contains("linux") ? "lib" : "") + "Qt" + Qt.core.versionMajor var libPostfix = ((qbs.targetOS.contains("windows") && qbs.debugInformation) ? "d": "") + cpp.dynamicLibrarySuffix - var libs = ["Core", "Gui", "Network", "OpenGL", "QmlCore", "Qml", "QmlMeta", "QmlModels", "QmlNetwork", "QmlWorkerScript", - "QmlXmlListModel", "QuickControls2Basic", "QuickControls2BasicStyleImpl", "QuickControls2", "QuickControls2Impl", - "Quick", "QuickDialogs2", "QuickDialogs2QuickImpl", "QuickDialogs2Utils", "QuickLayouts", "QuickTemplates2", - "QuickWidgets", "Svg", "Xml", "Widgets"] if(qbs.targetOS.contains("linux")) { - for(var it in libs) { - list.push(libPrefix + libs[it] + libPostfix + "." + Qt.core.versionMajor + "." + Qt.core.versionMinor + "." + Qt.core.versionPatch) - list.push(libPrefix + libs[it] + libPostfix + "." + Qt.core.versionMajor) - } - list.push("libicudata.so.73", "libicudata.so.73.2") list.push("libicui18n.so.73", "libicui18n.so.73.2") list.push("libicuuc.so.73", "libicuuc.so.73.2") - list.push(libPrefix + "DBus" + libPostfix + "." + Qt.core.versionMajor + "." + Qt.core.versionMinor + "." + Qt.core.versionPatch) - list.push(libPrefix + "DBus" + libPostfix + "." + Qt.core.versionMajor) + libs.push("DBus") + libs.push("XcbQpa") - list.push(libPrefix + "XcbQpa" + libPostfix + "." + Qt.core.versionMajor + "." + Qt.core.versionMinor + "." + Qt.core.versionPatch) - list.push(libPrefix + "XcbQpa" + libPostfix + "." + Qt.core.versionMajor) + for(var it in libs) { + list.push(libPrefix + libs[it] + libPostfix + "." + Qt.core.versionMajor + "." + Qt.core.versionMinor + "." + Qt.core.versionPatch) + list.push(libPrefix + libs[it] + libPostfix + "." + Qt.core.versionMajor) + } } else { for(var it in libs) { list.push(libPrefix + libs[it] + libPostfix) } } } else { - list.push("**/QtCore.framework/**") - list.push("**/QtXml.framework/**") - list.push("**/QtNetwork.framework/**") - list.push("**/QtQml.framework/**") - list.push("**/QtQuick.framework/**") - list.push("**/QtQuickWidgets.framework/**") - list.push("**/QtSvg.framework/**") + libs.push("DBus") + libs.push("XcbQpa") + + var libPrefix = "**/Qt" + var libPostfix = ".framework/**" + for(var it in libs) { + list.push(libPrefix + libs[it] + libPostfix) + } } return list } qbs.install: true qbs.installDir: { if(qbs.targetOS.contains("darwin")) { - return install.BIN_PATH + "/" + install.bundle + "../Frameworks/" + return install.BIN_PATH + "/" + install.bundle + "/Frameworks/" } else if(qbs.targetOS.contains("windows")) { return install.BIN_PATH + "/" + install.bundle } @@ -165,7 +163,12 @@ Product { files.push("QtQuick/**/*.so") files.push("QtQml/XmlListModel/**/*.so") } else { - files.push("*") + files.push("QtQml/WorkerScript/**/*.dylib") + files.push("QtQml/WorkerScript/**/plugins.qmltypes") + files.push("QtQml/WorkerScript/**/qmldir") + + files.push("QtQuick/**/*.dylib") + files.push("QtQml/XmlListModel/**/*.dylib") } return files } diff --git a/hub/ThunderHub.qbs b/hub/ThunderHub.qbs index 0dd12d8..fcf6e1b 100644 --- a/hub/ThunderHub.qbs +++ b/hub/ThunderHub.qbs @@ -29,7 +29,7 @@ Project { bundle.infoPlist: ({ "NSHumanReadableCopyright": "(C) 2007-" + ThunderHub.COPYRIGHT_YEAR + " by " + ThunderHub.COPYRIGHT_AUTHOR }) - bundle.identifierPrefix: "com.thunderengine.hub" + bundle.identifierPrefix: "com.thunderengine" consoleApplication: false @@ -74,7 +74,7 @@ Project { files: [ "res/icons/thunder.icns" ] - qbs.installDir: ThunderHub.BIN_PATH + "/" + ThunderHub.bundle + "../Resources" + qbs.installDir: ThunderHub.QML_PATH + "/../Resources" qbs.installPrefix: ThunderHub.PREFIX } } diff --git a/hub/res/app-Info.plist b/hub/res/app-Info.plist index 853465a..f927860 100644 --- a/hub/res/app-Info.plist +++ b/hub/res/app-Info.plist @@ -46,7 +46,7 @@ NSHumanReadableCopyright (C) 2007-2018 by Evgeniy Prikazchikov CFBundleIconFile - thunder-hub + thunder CFBundlePackageType APPL CFBundleSignature diff --git a/thunder-hub.qbs b/thunder-hub.qbs index 2f936d3..5dfee31 100644 --- a/thunder-hub.qbs +++ b/thunder-hub.qbs @@ -5,14 +5,14 @@ import qbs.TextFile Project { id: thunder - property string COMPANY_NAME: "FrostSpear" + property string COMPANY_NAME: "ThunderEngine" property string PRODUCT_NAME: "Hub" property string PRODUCT_VERSION: "2026.1" property string EDITOR_NAME: "WorldEditor" property string bundle: { if(qbs.targetOS.contains("darwin")) { - return PRODUCT_NAME + ".app/Contents/MacOS/" + return "/" + PRODUCT_NAME + ".app/Contents" } return ""; } @@ -39,10 +39,10 @@ Project { property string RESOURCE_ROOT: "res" property string PREFIX: "" - property string PLATFORM_PATH: bundle + "hub" + property string PLATFORM_PATH: "hub" property string BIN_PATH: PLATFORM_PATH - property string QTPLUGINS_PATH: BIN_PATH + "/plugins" - property string QML_PATH: BIN_PATH + "/qml" + property string QTPLUGINS_PATH: BIN_PATH + bundle + "/plugins" + property string QML_PATH: BIN_PATH + bundle + "/qml" property stringList defines: { var result = [