LUMIERA.clone/doc/technical/build/BuildDependencies.txt
Ichthyostega eb4c49e1b2 Build: upgrade, tighten and document the prerequisites
Many versions enforced with this changeset are chosen such
as to support Ubuntu/Noble (24.04) and otherwise use versions
reasonably close to Debian-Trixie (≙reference-platform)

Since we now require a fairly modern compiler for C++23,
I have added now an explicit version check, which however
is performed only if the defined compiler is named `g++*`

Furthermore, I combed through all of our build tutorials and documentation pages
and updated a lot of information regarding dependencies and build practices...
2025-11-28 04:24:52 +01:00

181 lines
8.8 KiB
Text

Build Dependencies
==================
:Author: core-devs
:Date: 11/2025
:toc:
_Lumiera is written for GNU/Linux._ +
We try to get the best out of modern system programming
techniques to reach a solid performance and good throughput.
Lumiera shall scale with the provided Hardware,
the more RAM and the more/faster CPU's you have the better.
Nevertheless lower end 64bit machines are supported too.
Secondary targets will be other free operating systems which offer a decent Posix API.
Porting to other more or less similar platforms will be possible, if -- by coincidence --
Someone(TM) helps with porting.
Having said that -- for the time being, the core team won't spend much effort on porting,
be it to special hardware or some other popular OS.
Platform
--------
We develop and test on standard PC hardware, 64 bit.footnote:[
We attempt to write code mostly in a portable way, yet we have encountered
several aspects now where our solution effectively assumes 64bit layout --
and thus the code might compile on 32bit, but then not perform as expected.
A notorious example are _hash values_, which are typed as `size_t` following
the C++ idiom. We now use a hash function that is clearly optimised for 64bit,
and we know that a 32bit hash would produce collisions on a regular base, while
our solution assumes that collisions can be ruled out effectively. This is just
one example, which shows that handling such aspects in a portable fashion, while
certainly possibly, requires a significant amount of design work and incurs
additional complexity.
For the time being, we are content to document such cases as tickets.
]
It is intended to target other platforms running GNU/Linux eventually.
Lumiera expects a ``standard'' desktop installation running a XServer.footnote:[
Wayland is ``just around the corner'' since 10 years now. Well, recently it
seems it is _really_ just around the corner. We are aware of the necessary
changes, which are not very complicated to implement (since we are using
GTK-3). However, as long as Wayland simply crashes or hands in our
everyday work setup with XFCE, we will not consider this topic
a priority. In the meantime, please report any problems
you encounter with Lumiera running on XWayland.
]
Graphics::
There are no special requirements for the graphic system, other than
some GPU supported for common desktop display in the standard setup.
Hardware acceleration for video processing will likely be added later
through extensions, but will remain strictly optional.footnote:[
For the time being, we'll watch the evolution in that area
and might revisit that topic when there are more compelling
and widely supported solutions available. Support for 32bit
floating point data formats is considered more important.
]
Disks::
No special requirements. Video editing requires decent disk speed though,
so it is suggested to use a fast/big array of disks configured as raid.
Special Hardware::
Support for special hardware would be possible, but depends on certain conditions
+
* we need access / donations for the hardware
* Specs and APIs must be open.
* someone to do the actual interfacing and support needs to join the team
Compatibility
~~~~~~~~~~~~~
We try to keep our depdendencies close to Debian/stable and the most recent Ubuntu LTS.
Whenever we need more recent libraries or other dependencies not available for our reference platform,
we care to provide custom Debian / Ubuntu packages as reference. This does not mean Lumiera is
limited to Devian flavours, it should work on any current Linux distribution.
Languages and Tools
-------------------
* C / C++
- A C\+\+23 compatible compiler is required.footnote:[
In practice, we build using GCC and occasionally we check using Clang.
Right now (7/2025) Clang has fallen behind regarding support of type dependent
name resolution in templates and does not even comply with C++20 in this respect.
We have dropped most usages of the `typename` keyword recently, and as long as
Clang can not cope with that, we have to postpone further tests with Clang.
]
- GCC-**14** or better should be fine.footnote:[
Basically we try to use just the stock language.
But we actually compile with the GNU extensions, i.e. `-std=gnu++23` / `-std=gnu99`.
And any language feature is used to the degree that it is available and stable
in this build environment.
]
* BOOST (listed below are the Debian package names)
- libboost-dev (at least *1.83*)
- libboost-program-options-dev
* Script languages
- Python (*3.10*) required for building (->SCons)
- bash (some test scripts use bash specific extensions)
Build Tools
~~~~~~~~~~~
* https://www.scons.org/[SCons build system] v**4.8** footnote:[
Unfortunately, SCons still sets the conceptual standard how a modern build system should be:
It is declarative, defines the _what_ and not the _how_ and uses build scripts written in
a clean and modern language (Python).
Autotools should be considered legacy, and CMake turned out to be rather disappointing and
lacks adequate conceptual grounding. Meson has a somewhat more modern appeal, yet seems to
require us to do much more work to get even remotely to that level of clarity and flexibility
which we enjoy every day when working with SCons. +
We are aware of the shortcomings of SCons in practice however, notably that it is not widely
known and thus requires additional learning effort, and that it could become prohibitively
slow on very large projects. At the current project size, the delay on incremental builds
does not really seem relevant in practice, given that C++ compilation as such is slow anyway.
We are not aware of using any notable features of SCons beyond v2.0, and we use some SCons
plug-ins, which are all shipped in-tree (directory 'admin/scons')]
* pkg-config
* Doxygen (optional)
* Asciidoc (optional)
* Git -> https://git.lumiera.org/?p=LUMIERA;a=summary[git://git.lumiera.org/LUMIERA]
footnote:[
_Ichthyo_ maintains a repo at https://github.com/Ichthyostega/Lumiera/[Github ^~Ichthyostega/Lumiera^]
]
💡 We maintain a link:{ldoc}/technical/infra/debianDepot.html[Debian/Ubuntu package] (based on `git-buildpackage`)
Libraries
~~~~~~~~~
* https://www.boost.org/[Boost libraries]
* https://nobug.pipapo.org/[NoBug library]
* https://github.com/bplaum/gavl[GAVL] (for raw media support)
* https://www.alsa-project.org/[ALSA (libasound2-dev)]
* for the GUI: (*GTK-3*) gtkmm, glibmm-2.4, cairomm-1, gdlmm-3, Xv
- libgtkmm-3.0-dev (`>=3.20`)
- libglibmm-2.4-dev (`>= 2.66`), requiring at least glib2.0 (`>=2.80`)
- libcairomm-1.0-dev (`>= 1.14`)
- librsvg2-dev (`>=2.40`) for rendering Icons
- libxv-dev footnote:[
For the time being, this is a placeholder and fallback to integrate
any technology for displaying video frames on the dektop. It is now used in the
XV viewer widget 'stage/output/xv-displayer.hpp|cpp' -- currently expected
to be obsolete soon, but it is yet [yellow-background]#undecided as of 11/2025#
what we use as starting point for video output from the Lumiera Render Engine.
XV might be retained as a fall-back solution, the libraries GLX or EGL might be used...
]
and X-lib ^[yellow-background]#TODO 11/2025#^
- libgdl-3-dev (`>= 3.40`) through libgdlmm-3 -- the »Gnome Docking Library«footnote:[
https://gitlab.gnome.org/Archive/gdl.git[lib GDL] isn't directly related to GNOME any more.
We use this library for docking panels in the GUI with GTK-3. This solution was maintained
for some time by the »Anjuta« project -- we also contributed to the improvement of this library
in the past, and these improvements went upstream with GDL-2.27. Unfortunately, GDL was abandoned
meanwhile. and we do not see a clear pathway for the future here, short of upgrading to GTK-4,
which is possible, but would require some considerable effort. As of 2025, GDL is still usable,
but no longer available through the standard distribution channels. +
We provide a Git repository at our Website for
https://git.lumiera.org/?p=debian/gdl;a=summary[libGDL (3.40) +git://git.lumiera.org/debian/gdl+]
and the
https://git.lumiera.org/?p=debian/gdlmm;a=summary[GDL C++ bindings (3.7.3) +git://git.lumiera.org/debian/gdlmm+]
and we maintain custom Debian packages for both in our
link:/debian/[Debian DEB depot].
]
''''
.Documentation and Resources
[TIP]
--
* Tutorial link:{ldoc}/user/tutorials/building.html[Building Lumiera from source]
* Tutorial link:{ldoc}/user/tutorials/DebianBuilding.html[Building the »Debian Way«]
* About the link:{ldoc}/technical/build/LumieraDebianPackage.html[Lumiera Debian Package]
* About the link:{ldoc}/technical/build/SCons.html[SCons Build-System of Lumiera]
* About the link:{ldoc}/technical/code/index.html[Code Base Organisation]
* link:/debian/[Lumiera Debian DEB depot]
--