From a6f9d0b9d02b5213f3dfb1ce8e0236795d93892f Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Mon, 25 Aug 2025 15:09:26 -0700 Subject: [PATCH] Fix package/build process so it produces steamos and non-steamos arch binaries --- bin/package_kwin | 13 +++++++--- kwin/CMakeLists.txt | 3 --- kwin/bin/breezy_kwin_uninstall | 0 kwin/bin/package_kwin_plugin | 3 +++ kwin/bin/setup | 14 +++++++++-- kwin/docker-build/Dockerfile | 2 +- kwin/docker-build/Dockerfile.steamos | 37 ++++++++++++++++++++++++++++ kwin/docker-build/init.sh | 3 ++- kwin/docker-build/run-build.sh | 6 +++++ kwin/src/CMakeLists.txt | 30 ++++++++++++++++++++++ kwin/src/breezydesktopeffect.cpp | 8 ++++-- kwin/src/metadata.json | 1 - 12 files changed, 106 insertions(+), 14 deletions(-) mode change 100644 => 100755 kwin/bin/breezy_kwin_uninstall create mode 100644 kwin/docker-build/Dockerfile.steamos diff --git a/bin/package_kwin b/bin/package_kwin index 16f8d80..f176aa7 100755 --- a/bin/package_kwin +++ b/bin/package_kwin @@ -4,15 +4,20 @@ set -e ARCH=${ARCH:-$(uname -m)} +BUILD_ARCH=$ARCH +if [ -n "${STEAMOS+x}" ]; then + ARCH="x86_64" + BUILD_ARCH="steamos" +fi # https://stackoverflow.com/a/246128 SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) ROOT_DIR=$(realpath $SCRIPT_DIR/..) XR_DRIVER_DIR=$ROOT_DIR/modules/XRLinuxDriver -echo "Building Breezy KWin for $ARCH" +echo "Building Breezy KWin for $BUILD_ARCH" KWIN_DIR=$ROOT_DIR/kwin -BUILD_FILE_NAME=breezyKWin-$ARCH.tar.gz +BUILD_FILE_NAME=breezyKWin-$BUILD_ARCH.tar.gz TMP_DIR=$(mktemp -d -t breezy-kwin-XXXXXXXXXX) PACKAGE_DIR=$TMP_DIR/breezy_kwin @@ -56,9 +61,9 @@ cp $XR_DRIVER_DIR/bin/xr_driver_setup $PACKAGE_DIR/bin pushd $KWIN_DIR docker-build/init.sh -docker-build/run-build.sh $ARCH +docker-build/run-build.sh $BUILD_ARCH popd -cp $KWIN_DIR/out/breezyKWinPlugin-$ARCH.tar.gz $PACKAGE_DIR/breezyKWinPlugin.tar.gz +cp $KWIN_DIR/out/breezyKWinPlugin-$BUILD_ARCH.tar.gz $PACKAGE_DIR/breezyKWinPlugin.tar.gz pushd $TMP_DIR tar -zcvf $BUILD_FILE_NAME breezy_kwin diff --git a/kwin/CMakeLists.txt b/kwin/CMakeLists.txt index 8f3f7c6..c3e8411 100644 --- a/kwin/CMakeLists.txt +++ b/kwin/CMakeLists.txt @@ -40,9 +40,6 @@ if(${QT_MAJOR_VERSION} EQUAL 6) find_package(KF${QT_MAJOR_VERSION} ${KF_MIN_VERSION} REQUIRED COMPONENTS KCMUtils) find_package(KWin REQUIRED COMPONENTS kwineffects) message(STATUS "Found KWin Version: ${KWin_VERSION}") -else() - find_package(KWinEffects REQUIRED COMPONENTS kwineffects kwinglutils) - message(STATUS "Found KWin Version: ${KWinEffects_VERSION}") endif () include(cmake/info.cmake) find_package(epoxy REQUIRED) diff --git a/kwin/bin/breezy_kwin_uninstall b/kwin/bin/breezy_kwin_uninstall old mode 100644 new mode 100755 diff --git a/kwin/bin/package_kwin_plugin b/kwin/bin/package_kwin_plugin index 052cdf1..a5f4346 100755 --- a/kwin/bin/package_kwin_plugin +++ b/kwin/bin/package_kwin_plugin @@ -4,6 +4,9 @@ set -e ARCH=${ARCH:-$(uname -m)} +if [ -n "${STEAMOS+x}" ]; then + ARCH="steamos" +fi echo "Building Breezy KWin plugin for $ARCH" BUILD_PATH=build diff --git a/kwin/bin/setup b/kwin/bin/setup index 3cbbdce..a552f41 100755 --- a/kwin/bin/setup +++ b/kwin/bin/setup @@ -45,13 +45,23 @@ UA_EVENT_VERSION="$1" tar -xf $(pwd)/breezyKWinPlugin.tar.gz pushd breezy_desktop/usr > /dev/null +# locate the lib path that ends with qt6/plugins (handles multiarch dirs) +QT_PLUGIN_DIR_RELATIVE=$(find lib -type d -path '*/qt6/plugins' -print -quit 2>/dev/null || true) +if [ -z "$QT_PLUGIN_DIR_RELATIVE" ]; then + QT_PLUGIN_DIR_RELATIVE="lib/qt6/plugins" +fi + # directory structure matches XDG, so just recursive copy -$SUDO cp -r . "$USER_HOME/.local/" +chmod -R 755 . +cp -r . "$USER_HOME/.local/" + popd +cp bin/breezy_kwin_uninstall $XDG_BIN_HOME + # Install QT_PLUGIN_PATH snippet into ~/.bash_profile if not present BASH_PROFILE="$HOME/.bash_profile" -QT_PLUGIN_DIR="$HOME/.local/lib/qt6/plugins" +QT_PLUGIN_DIR="$HOME/.local/$QT_PLUGIN_DIR_RELATIVE" QT_PLUGIN_EXPORT="export QT_PLUGIN_PATH=\"$QT_PLUGIN_DIR\"" if [[ ! -f "$BASH_PROFILE" ]] || ! grep -Fq "$QT_PLUGIN_EXPORT" "$BASH_PROFILE" 2>/dev/null; then mkdir -p "$(dirname "$BASH_PROFILE")" diff --git a/kwin/docker-build/Dockerfile b/kwin/docker-build/Dockerfile index 49aa005..89d8677 100644 --- a/kwin/docker-build/Dockerfile +++ b/kwin/docker-build/Dockerfile @@ -3,7 +3,7 @@ # docker run --rm -t -v ./:/source -v --platform linux/amd64 "breezy-kwin:amd64" # docker run --rm -t -v ./:/source -v --platform linux/arm64 "breezy-kwin:arm64" -FROM --platform=$TARGETPLATFORM ghcr.io/steamdeckhomebrew/holo-base:3.7@sha256:8da120a3e89c750abd0090c0aab86d543a55d667c3002c8d64960f7fd82ccdd6 +FROM --platform=$TARGETPLATFORM archlinux:base-20250817.0.405639@sha256:31f0749bdb81517dc8f379feac0a3860b097f1da1f53c8315c1bae0817d6c0a1 ARG TARGETPLATFORM RUN echo "Target platform: $TARGETPLATFORM" diff --git a/kwin/docker-build/Dockerfile.steamos b/kwin/docker-build/Dockerfile.steamos new file mode 100644 index 0000000..23f32e6 --- /dev/null +++ b/kwin/docker-build/Dockerfile.steamos @@ -0,0 +1,37 @@ +# To run the build from the package root: +# docker buildx build --platform linux/amd64,linux/arm64 -f ./docker-build/Dockerfile.steamos -t "breezy-kwin-steamos" . +# docker run --rm -t -v ./:/source -v --platform linux/amd64 "breezy-kwin-steamos:amd64" +# docker run --rm -t -v ./:/source -v --platform linux/arm64 "breezy-kwin-steamos:arm64" + +FROM --platform=$TARGETPLATFORM ghcr.io/steamdeckhomebrew/holo-base:3.7@sha256:8da120a3e89c750abd0090c0aab86d543a55d667c3002c8d64960f7fd82ccdd6 + +ARG TARGETPLATFORM +ENV STEAMOS=1 +RUN echo "SteamOS build - target platform: $TARGETPLATFORM" + +RUN pacman -Sy --noconfirm --needed \ + ca-certificates \ + base-devel \ + cmake \ + pkgconf \ + git \ + curl \ + wget \ + extra-cmake-modules \ + qt6-base \ + qt6-declarative \ + qt6-tools \ + kconfig \ + kconfigwidgets \ + kcoreaddons \ + kglobalaccel \ + ki18n \ + kcmutils \ + kxmlgui \ + kwindowsystem \ + kwin \ + && pacman -Scc --noconfirm + +WORKDIR /source + +CMD bin/package_kwin_plugin \ No newline at end of file diff --git a/kwin/docker-build/init.sh b/kwin/docker-build/init.sh index 5680a00..426b088 100755 --- a/kwin/docker-build/init.sh +++ b/kwin/docker-build/init.sh @@ -19,4 +19,5 @@ fi echo "Building docker image" docker buildx build --platform linux/amd64 -f ./docker-build/Dockerfile -t "breezy-kwin:amd64" --load . -# docker buildx build --platform linux/arm64 -f ./docker-build/Dockerfile -t "breezy-kwin:arm64" --load . \ No newline at end of file +# docker buildx build --platform linux/arm64 -f ./docker-build/Dockerfile -t "breezy-kwin:arm64" --load . +docker buildx build --platform linux/amd64 -f ./docker-build/Dockerfile.steamos -t "breezy-kwin-steamos:amd64" --load . \ No newline at end of file diff --git a/kwin/docker-build/run-build.sh b/kwin/docker-build/run-build.sh index 918a9ad..ff19c84 100755 --- a/kwin/docker-build/run-build.sh +++ b/kwin/docker-build/run-build.sh @@ -18,5 +18,11 @@ if [[ "$1" == "aarch64" || -z "$1" ]]; then sudo chown -R $USER:$GROUP out/ fi +if [[ "$1" == "steamos" || -z "$1" ]]; then + sudo rm -rf build/ + docker run --rm -t -v ./:/source --platform linux/amd64 "breezy-kwin-steamos:amd64" + sudo chown -R $USER:$GROUP out/ +fi + # build directory structure is all owned by root because of docker, delete it all now sudo chown -R $USER:$GROUP build/ \ No newline at end of file diff --git a/kwin/src/CMakeLists.txt b/kwin/src/CMakeLists.txt index 603cfc5..e6ad0c2 100644 --- a/kwin/src/CMakeLists.txt +++ b/kwin/src/CMakeLists.txt @@ -7,6 +7,36 @@ target_sources(breezy_desktop PRIVATE ) kconfig_add_kcfg_files(breezy_desktop breezydesktopconfig.kcfgc) +# Split KWin version into numeric components (major, minor, patch) +string(REGEX MATCHALL "[0-9]+" KWIN_VERSION_COMPONENTS "${KWin_VERSION}") + +# defaults +set(KWIN_VERSION_MAJOR 0) +set(KWIN_VERSION_MINOR 0) +set(KWIN_VERSION_PATCH 0) + +list(LENGTH KWIN_VERSION_COMPONENTS _kwin_version_len) +if(_kwin_version_len GREATER 0) + list(GET KWIN_VERSION_COMPONENTS 0 KWIN_VERSION_MAJOR) +endif() +if(_kwin_version_len GREATER 1) + list(GET KWIN_VERSION_COMPONENTS 1 KWIN_VERSION_MINOR) +endif() +if(_kwin_version_len GREATER 2) + list(GET KWIN_VERSION_COMPONENTS 2 KWIN_VERSION_PATCH) +endif() + +# optional: a single encoded integer (major*10000 + minor*100 + patch) +math(EXPR KWIN_VERSION_ENCODED "${KWIN_VERSION_MAJOR} * 10000 + ${KWIN_VERSION_MINOR} * 100 + ${KWIN_VERSION_PATCH}") + +# Export as compile definitions. Keep the original string macro as well. +target_compile_definitions(breezy_desktop PRIVATE + KWIN_VERSION_STR=\"${KWin_VERSION}\" + KWIN_VERSION_MAJOR=${KWIN_VERSION_MAJOR} + KWIN_VERSION_MINOR=${KWIN_VERSION_MINOR} + KWIN_VERSION_PATCH=${KWIN_VERSION_PATCH} + KWIN_VERSION_ENCODED=${KWIN_VERSION_ENCODED} +) target_include_directories(breezy_desktop PRIVATE /usr/include/kwin) target_link_libraries(breezy_desktop Qt6::Core diff --git a/kwin/src/breezydesktopeffect.cpp b/kwin/src/breezydesktopeffect.cpp index 9c26963..7632cb0 100644 --- a/kwin/src/breezydesktopeffect.cpp +++ b/kwin/src/breezydesktopeffect.cpp @@ -233,8 +233,12 @@ void BreezyDesktopEffect::addVirtualDisplay(QSize size) static int virtualDisplayCount = 0; ++virtualDisplayCount; QString name = QStringLiteral("BreezyDesktop_VirtualDisplay_%1x%2_%3").arg(size.width()).arg(size.height()).arg(virtualDisplayCount); - QString description = QStringLiteral("Breezy Display %1x%2 (%3)").arg(size.width()).arg(size.height()).arg(virtualDisplayCount); - auto output = KWin::kwinApp()->outputBackend()->createVirtualOutput(name, size, 1.0); + #if defined(KWIN_VERSION_ENCODED) && KWIN_VERSION_ENCODED > 60290 + QString description = QStringLiteral("Breezy Display %1x%2 (%3)").arg(size.width()).arg(size.height()).arg(virtualDisplayCount); + auto output = KWin::kwinApp()->outputBackend()->createVirtualOutput(name, description, size, 1.0); + #else + auto output = KWin::kwinApp()->outputBackend()->createVirtualOutput(name, size, 1.0); + #endif if (output) { m_virtualOutputs.append(output); } diff --git a/kwin/src/metadata.json b/kwin/src/metadata.json index 9d12756..8d582c4 100644 --- a/kwin/src/metadata.json +++ b/kwin/src/metadata.json @@ -10,7 +10,6 @@ "Category": "Tools", "Description": "Breezy Desktop XR Effect", "EnabledByDefault": true, - "Id": "breezy_desktop", "License": "GPL", "Name": "Breezy Desktop XR" },