From 471523fb313e52b7425874af73078706aa477850 Mon Sep 17 00:00:00 2001 From: wheaney <42350981+wheaney@users.noreply.github.com> Date: Thu, 21 Aug 2025 13:02:40 -0700 Subject: [PATCH] Add docker build --- kwin/bin/package | 22 ++++++++++++++++ kwin/docker-build/Dockerfile | 43 ++++++++++++++++++++++++++++++++ kwin/docker-build/init.sh | 22 ++++++++++++++++ kwin/docker-build/run-build.sh | 22 ++++++++++++++++ kwin/src/breezydesktopeffect.cpp | 2 +- 5 files changed, 110 insertions(+), 1 deletion(-) create mode 100755 kwin/bin/package create mode 100644 kwin/docker-build/Dockerfile create mode 100755 kwin/docker-build/init.sh create mode 100755 kwin/docker-build/run-build.sh diff --git a/kwin/bin/package b/kwin/bin/package new file mode 100755 index 0000000..73fec0a --- /dev/null +++ b/kwin/bin/package @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# exit when any command fails +set -e + +ARCH=${ARCH:-$(uname -m)} +echo "Building Breezy KWin plugin for $ARCH" + +BUILD_PATH=build +mkdir $BUILD_PATH + +pushd $BUILD_PATH +cmake .. +make +cpack -G TGZ +popd + +mkdir -p out +cp $BUILD_PATH/breezy_desktop_kwin_plugin.tar.gz out/breezyKWin-$ARCH.tar.gz + +# build artifacts are needed for IDE header awareness with generated code +# rm -rf $BUILD_PATH \ No newline at end of file diff --git a/kwin/docker-build/Dockerfile b/kwin/docker-build/Dockerfile new file mode 100644 index 0000000..ad1873a --- /dev/null +++ b/kwin/docker-build/Dockerfile @@ -0,0 +1,43 @@ +# To run the build from the package root: +# docker buildx build --platform linux/amd64,linux/arm64 -f ./docker-build/Dockerfile -t "breezy-kwin" . +# 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 debian:trixie + +ARG TARGETPLATFORM +RUN echo "Target platform: $TARGETPLATFORM" + +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates \ + build-essential \ + cmake \ + pkg-config \ + git \ + curl \ + wget \ + extra-cmake-modules \ + qt6-base-dev \ + qt6-base-dev-tools \ + qt6-declarative-dev \ + qt6-tools-dev \ + qt6-tools-dev-tools \ + libkf6config-dev \ + libkf6configwidgets-dev \ + libkf6coreaddons-dev \ + libkf6globalaccel-dev \ + libkf6i18n-dev \ + libkf6kcmutils-dev \ + libkf6xmlgui-dev \ + libkf6windowsystem-dev \ + kwayland-dev \ + plasma-wayland-protocols \ + libwayland-dev \ + kwin-dev \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /source + +CMD bin/package \ No newline at end of file diff --git a/kwin/docker-build/init.sh b/kwin/docker-build/init.sh new file mode 100755 index 0000000..8ae66ad --- /dev/null +++ b/kwin/docker-build/init.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# might be needed on a fresh docker setup: +# install qemu and qemu-user-static packages +# sudo docker context rm default +# docker run --privileged --rm tonistiigi/binfmt --install all +# sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +# ls -l /proc/sys/fs/binfmt_misc/ # should contain qemu- files + +if [[ "$1" == "--init" || ! $(docker buildx inspect breezykwinbuilder &>/dev/null; echo $?) -eq 0 ]]; then + # start fresh + echo "Creating new docker builder instance" + docker buildx rm breezykwinbuilder 2>/dev/null || true + docker buildx create --use --name breezykwinbuilder --driver docker-container --driver-opt image=moby/buildkit:latest +else + echo "Using existing docker builder instance" + docker buildx use breezykwinbuilder +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 diff --git a/kwin/docker-build/run-build.sh b/kwin/docker-build/run-build.sh new file mode 100755 index 0000000..7d709e6 --- /dev/null +++ b/kwin/docker-build/run-build.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -e + +USER=${SUDO_USER:-$USER} +GROUP=$(id -gn $USER) + +# Run containers for each architecture +if [[ "$1" == "x86_64" || -z "$1" ]]; then + sudo rm -rf build/ + docker run --rm -t -v ./:/source --platform linux/amd64 "breezy-kwin:amd64" + sudo chown -R $USER:$GROUP out/ +fi + +if [[ "$1" == "aarch64" || -z "$1" ]]; then + sudo rm -rf build/ + docker run --rm -t -v ./:/source --platform linux/arm64 "breezy-kwin:arm64" + sudo chown -R $USER:$GROUP out/ +fi + +# build directory structure is all owned by root because of docker, delete it all now +sudo rm -rf build/ \ No newline at end of file diff --git a/kwin/src/breezydesktopeffect.cpp b/kwin/src/breezydesktopeffect.cpp index 2246488..f84b1b4 100644 --- a/kwin/src/breezydesktopeffect.cpp +++ b/kwin/src/breezydesktopeffect.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -20,7 +21,6 @@ #include #include -#include Q_LOGGING_CATEGORY(KWIN_XR, "kwin.xr")