2019-01-07 21:51:22 +01:00
|
|
|
# Godot engine build containers
|
|
|
|
|
2021-02-15 01:26:43 +01:00
|
|
|
This repository contains the Dockerfiles for the official Godot engine builds.
|
|
|
|
These containers should help you build Godot for all platforms supported on
|
|
|
|
any machine that can run Docker containers.
|
2019-01-07 21:51:22 +01:00
|
|
|
|
2021-02-15 01:26:43 +01:00
|
|
|
The in-container build scripts are in a separate repository:
|
|
|
|
https://github.com/godotengine/godot-build-scripts
|
2019-01-07 21:51:22 +01:00
|
|
|
|
2021-02-09 12:05:06 +01:00
|
|
|
|
2021-02-15 01:26:43 +01:00
|
|
|
## Introduction
|
|
|
|
|
|
|
|
These scripts build a number of containers which are then used to build final
|
|
|
|
Godot tools, templates and server packages for several platforms.
|
|
|
|
|
|
|
|
Once these containers are built, they can be used to compile different Godot
|
|
|
|
versions without the need of recreating them.
|
|
|
|
|
|
|
|
The `upload.sh` file is meant to be used by Godot Release Team and is not
|
|
|
|
documented here.
|
|
|
|
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
These containers have been tested under Fedora 33 and Ubuntu 18.04 (others may work too).
|
|
|
|
|
|
|
|
The tool used to build and manage the containers is `podman`.
|
|
|
|
|
|
|
|
See the Host OS section below for further information on how to setup your host OS before start.
|
|
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
The 'build.sh' script included is used to build the containers themselves.
|
|
|
|
|
|
|
|
Run the command using:
|
|
|
|
|
2021-03-27 12:11:23 +01:00
|
|
|
./build.sh 3.x mono-6.12.0.122
|
2021-02-15 01:26:43 +01:00
|
|
|
|
|
|
|
Note that this will also download that Mono branch (2020-02) from Mono repository.
|
2021-03-27 12:11:23 +01:00
|
|
|
That branch corresponds to the given Mono version (6.12.0.122) as per
|
2021-02-15 01:26:43 +01:00
|
|
|
https://www.mono-project.com/docs/about-mono/versioning/#mono-source-versioning .
|
|
|
|
|
|
|
|
More details can be found in the Godot https://github.com/godotengine/godot-mono-builds
|
|
|
|
repository (but you don't need this repository, as in this case Mono is built
|
|
|
|
inside the containers)
|
|
|
|
|
2021-03-27 12:11:23 +01:00
|
|
|
The above will generate images using the tag '3.x-mono-6.12.0.122'. This is convenient
|
|
|
|
since as of today, this branch can be used to compile every 3.x version or
|
2021-02-15 01:26:43 +01:00
|
|
|
your custom modifications.
|
|
|
|
|
|
|
|
### Selecting which images to build
|
|
|
|
|
|
|
|
If you don't need to build all versions or you want to try with a single target OS first,
|
|
|
|
you can comment out the corresponding lines from the script:
|
|
|
|
|
|
|
|
$podman_build_mono -t godot-windows:${img_version} -f Dockerfile.windows --ulimit nofile=65536 . 2>&1 | tee logs/windows.log
|
|
|
|
$podman_build_mono -t godot-ubuntu-64:${img_version} -f Dockerfile.ubuntu-64 . 2>&1 | tee logs/ubuntu-64.log
|
|
|
|
$podman_build_mono -t godot-ubuntu-32:${img_version} -f Dockerfile.ubuntu-32 . 2>&1 | tee logs/ubuntu-32.log
|
|
|
|
$podman_build_mono -t godot-javascript:${img_version} -f Dockerfile.javascript . 2>&1 | tee logs/javascript.log
|
|
|
|
$podman_build_mono -t godot-android:${img_version} -f Dockerfile.android . 2>&1 | tee logs/android.log
|
|
|
|
...
|
|
|
|
|
|
|
|
## Host OS preparation
|
|
|
|
|
|
|
|
### Podman Fedora image
|
|
|
|
|
|
|
|
To be extra-sure that you are building with the same base container image as the official
|
|
|
|
builds, you can use:
|
|
|
|
|
|
|
|
podman pull registry.fedoraproject.org/fedora@sha256:acc80ce6652d35f55ad220aa1cfa3787cbaf19b0016b202f1ab29dc5060f5392
|
|
|
|
podman image tag registry.fedoraproject.org/fedora@27a979020952 fedora:32
|
|
|
|
|
|
|
|
### Fedora 33 Host
|
|
|
|
|
|
|
|
Fedora 33 default configuration is able to build the containers. Ensure the tools
|
|
|
|
are installed:
|
|
|
|
|
|
|
|
sudo dnf -y install podman
|
|
|
|
|
|
|
|
### Ubuntu 18.04 Host
|
|
|
|
|
|
|
|
Install `podman` (as per https://podman.io/getting-started/installation). On
|
|
|
|
Ubuntu 18.04, podman 2.2.1 was used successfully:
|
|
|
|
|
|
|
|
. /etc/os-release
|
|
|
|
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
|
|
|
|
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
|
|
|
|
sudo apt-get update
|
|
|
|
sudo apt-get -y upgrade
|
|
|
|
sudo apt-get -y install podman
|
|
|
|
# (Ubuntu 18.04) Restart dbus for rootless podman
|
|
|
|
systemctl --user restart dbus
|
|
|
|
|
|
|
|
Modify your system default ulimit to support more open file handlers.
|
|
|
|
Add this at the end of your /etc/sysctl.conf file:
|
|
|
|
|
|
|
|
fs.file-max = 65536
|
|
|
|
|
|
|
|
Then reboot or run:
|
|
|
|
|
|
|
|
sudo sysctl -p
|
|
|
|
|
|
|
|
Install Python3 dataclasses:
|
|
|
|
|
|
|
|
pip3 install dataclasses
|
|
|
|
|
|
|
|
Install wine64, binfmt_misc, and configure it:
|
|
|
|
|
|
|
|
sudo apt install wine64 wine64-preloader binfmt-support
|
|
|
|
|
|
|
|
sudo bash -c "echo -1 > /proc/sys/fs/binfmt_misc/wine" # It's ok this command fails, eg. if you don't have wine binfmt
|
|
|
|
sudo bash -c 'echo ":windows:M::MZ::/usr/bin/wine:" > /proc/sys/fs/binfmt_misc/register'
|
|
|
|
sudo bash -c 'echo ":windowsPE:M::PE::/usr/bin/wine:" > /proc/sys/fs/binfmt_misc/register'
|
|
|
|
|
|
|
|
This `binfmt` configuration **is not persistent**, you need to do it after a reboot in order to build the containers.
|
|
|
|
|
|
|
|
(Note that this may break previous .exe binfmt support through `run-detectors`).
|
|
|
|
|
|
|
|
|
|
|
|
## Appendix: Image sizes
|
|
|
|
|
|
|
|
These are the expected container image sizes, so you can plan your disk usage in advance:
|
|
|
|
|
|
|
|
REPOSITORY TAG SIZE
|
|
|
|
localhost/godot-fedora 3.2-mono-6.12.0.114 692 MB
|
|
|
|
localhost/godot-export 3.2-mono-6.12.0.114 1.09 GB
|
|
|
|
localhost/godot-mono 3.2-mono-6.12.0.114 1.51 GB
|
|
|
|
localhost/godot-mono-glue 3.2-mono-6.12.0.114 1.73 GB
|
|
|
|
localhost/godot-msvc 3.2-mono-6.12.0.114 11.5 GB
|
|
|
|
localhost/godot-windows 3.2-mono-6.12.0.114 4.42 GB
|
|
|
|
localhost/godot-ubuntu-64 3.2-mono-6.12.0.114 1.08 GB
|
|
|
|
localhost/godot-ubuntu-32 3.2-mono-6.12.0.114 1 GB
|
|
|
|
localhost/godot-javascript 3.2-mono-6.12.0.114 4.72 GB
|
|
|
|
localhost/godot-android 3.2-mono-6.12.0.114 19.7 GB
|
|
|
|
localhost/godot-osx 3.2-mono-6.12.0.114 2.84 GB
|
|
|
|
localhost/godot-ios 3.2-mono-6.12.0.114 4.53 GB
|
|
|
|
|
|
|
|
In addition to this, generating containers will also require some host disk space (around 4.5GB)
|
|
|
|
for the downloaded Mono sources and dependencies.
|