Distro-agnostic advice for Godot Engine packaging

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi everyone,

First of all excuse me if I'm not using the proper channel for this,
but due to the lengthy nature of this email, I thought it more
appropriate on this mailing list than as a comment in a new bug report
asking for Godot to be packaged.

TL;DR: If there's interest I can work with you to get Godot packaged
in your distro, as I'm a Mageia (RPM) packager myself and Godot dev.

---

I maintain a good deal of games and related libraries for Mageia [2],
and am also an upstream contributor to Godot Engine [3]. I just
packaged Godot's new release, 2.0-stable, the spec file (RPM) of which
can be seen here [4].

Godot is a MIT licensed 2D and 3D game engine, which comes with a
feature packed editor and scripting language to make games easily and
export them to a wide variety of platforms (most desktop platforms,
android and iOS, HTML5 via asm.js).

I wanted to share some insider tips about how to package Godot most efficiently.

The game engine comes with various components, which would ideally all
be built and packaged, though only some (marked with (*)) are really
necessary. There are no "make install" instructions, so the
installation paths used are my own choice (and to some extent
recommendation):

- /usr/bin/godot(*): The editor tools for the X11 platform, built with
`scons p=x11 tools=yes'. This binary would be the whole game engine in
itself, so it's the only required thing to have a usable Godot engine
for developers.

- /usr/bin/godot-runner(*): To actually play Godot games (especially
libre ones that you might want to package, e.g. Minilens[5] or Tanks
of Freedom[6]), one only needs a version of Godot built without the
editor tools (`scons p=x11 tools=no'). All games can therefore run
with the same binary (provided they were designed for the same Godot
version). To avoid having to build Godot again for each packaged game,
I chose to have this -runner binary that can then be used with wrapper
scripts to launch each game (`godot-runner -path
/usr/share/games/minilens' for example). Note that the games could be
run directly with the editor-enabled `godot' binary, but as it's
bigger, it's likely better for players to have a smaller binary.

- /usr/bin/godot-server: This is the headless version of the Godot
editor (`scons p=server tools=yes'), that can be used to host game
servers or to do some editor operations without the GUI (exporting
games, importing assets, etc.). One could also package the version
without the tools instead (`scons p=server tools=no') but I chose to
keep the tools for more flexibility and avoid to have to make two
binaries for this.

- /usr/libexec/godot/templates/* (or /usr/lib/godot/templates/* on
Debian probably):
Godot uses "templates" to export game binaries to all supported
platforms, which are basically the same as the `godot-runner' binary
above, but not only for the same platform and architecture as the host
system. They are usually built from source or downloaded from the
website (building all of them involves a complex buildsystem,
especially for iOS, asm.js and android), and installed in
~/.godot/templates (before the question shows up, moving Godot's
userdir to XDG_CONFIG_HOME is planned, but was not done for 2.0-stable
to avoid breaking compatibility[7]).
It is also possible to define a path to look for system-installed
templates, hence the above proposed installation path. This would be
done by building the `godot' and `godot-server' binaries with
`unix_global_settings_path=/usr/libexec/godot' (the "templates/" part
is hardcoded, and documented here [8]).
The templates need to have very specific names to be recognized, see
my above-linked spec file [4]. So far I am only building Linux 32-bit
and 64-bit templates in release and debug modes, as I did not want to
make the buildsystem too complex. It's less than what most users would
need, but it's enough to have a "working" exporter on your distro, so
that users can readily export their game in a couple clicks and test
them on their host or other Linux hosts.

Then there are the SVG icon and desktop file, that's pretty
straightforward (I'm not using the upstream SVG icon as I don't like
it's "Android app-like" background :), so I made my own without the
background).

Some binaries (the templates and `godot-runner') are compressed with
upx, which is pretty efficient and what upstream does for their
official binaries. I'd be interested to hear about experienced
packagers whether this would be a bad practice as far as Linux
packaging is concerned though.

You will probably also find some libraries that you will want to see
unbundled. This is a noble wish and I also always try to unbundle
libraries in software that I package; for Godot however one has to
remember that the binaries produced (at least for the templates) need
to run on virtually any Linux distribution, and this pushes us to the
limits of "clean" packaging practices (though I obviously chose not to
bundle openssl, even if it means that the templates produced on other
distros are broken on Fedora, and reciprocally [9][10]).
For the main editor binaries though, if you see bundled libraries that
could/should be unbundled, I'd gladly work with you to achieve this.

Sorry for the lengthy email, but I hope it contains useful information
if you have packagers interested in Godot. The packaging method I
described above is also not necessarily the best way to package Godot,
and I'd welcome any feedback about it too.

Best regards,

Rémi Verschelde / Akien

[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=793057
[2] https://people.mageia.org/u/akien.html
[3] https://godotengine.org
[4] http://svnweb.mageia.org/packages/cauldron/godot/current/SPECS/godot.spec?view=markup
[5] https://github.com/KOBUGE-Games/minilens
[6] https://github.com/w84death/Tanks-of-Freedom
[7] https://github.com/godotengine/godot/issues/3513
[8] http://docs.godotengine.org/en/latest/reference/packaging_godot.html
[9] https://github.com/godotengine/godot/issues/1391
[10] https://bugzilla.redhat.com/show_bug.cgi?id=1277662
_______________________________________________
games mailing list
games@xxxxxxxxxxxxxxxxxxxxxxx
http://lists.fedoraproject.org/admin/lists/games@xxxxxxxxxxxxxxxxxxxxxxx




[Index of Archives]     [Fedora Music]     [Fedora Extras]     [Kernel]     [Fedora Desktop]     [Fedora Directory]     [PAM]     [CentOS]     [Gimp]     [Yosemite News]     [Yosemite Camping]

  Powered by Linux