MGlolenstine / gtk4-cross

A Docker container for cross-compiling gtk4 programs to Windows.
57 stars 12 forks source link

GTK4 Cross compile for Windows

Prebuilt images

Images can be found on DockerHub or GitHub container repository.

To pull from DockerHub

Example for GTK 4.8:

docker pull mglolenstine/gtk4-cross:rust-gtk-4.8

To pull from GitHub container repository

Example for GTK 4.8:

docker pull ghcr.io/mglolenstine/gtk4-cross:rust-gtk-4.8

Cross compilation

Rust project

Create a container inside your project and run it

docker run -ti -v `pwd`:/mnt gtk4-cross-rust

If your Docker host uses SELinux and you're getting errors about Cargo.toml not being found when trying to build, you may need to add :z to the end of the volume mount path, like so:

docker run -ti -v `pwd`:/mnt:z gtk4-cross-rust

Then run build to build the project and package to package it into a zip file.

package.zip will be present in your project directory.

Image building

To create required images, clone the repository and cd into the root.

To build any images other than the base one, you will need to have prebuilt the base image.

Build script

There's a file build_image.sh present in the root of the repository. It takes environment variables and one cmdline argument to build the image you want.

ENV Default Description
GTK "main" GTK version to be built
ADW "main" ADW version to be built
BASE "gtk4-cross-base-$GTK-$ADW" Base image name for Docker, only used on images built on top of the base image
TAG "$IMAGE-$GTK-$ADW" A name set for the output image
The script takes one argument, which can be Argument Description
base Which builds the base image.
rust Which builds the rust image.

Image creation

If you want to create your own project builder

ln ../package.sh package.sh
FROM gtk4-cross-base

ADD build.sh /usr/bin
RUN chmod +x /usr/bin/build.sh

ADD package.sh /usr/bin
RUN chmod +x /usr/bin/package.sh

CMD ["/bin/bash"]
docker build gtk4-cross-<language> -t gtk4-cross-<language>
docker run -ti -v `pwd`:/mnt gtk4-cross-<language>