Building LuxCoreRender: Difference between revisions

From LuxCoreRender Wiki
Jump to navigation Jump to search
Line 132: Line 132:
| <b>Samples</b>|| <code>LuxCoreRender/LuxCore</code> || Sample C++ programs, illustrating luxcore use, namely <code>luxcoreconsole</code> and <code>luxcoreui</code>
| <b>Samples</b>|| <code>LuxCoreRender/LuxCore</code> || Sample C++ programs, illustrating luxcore use, namely <code>luxcoreconsole</code> and <code>luxcoreui</code>
|-
|-
| <b>Python Wheels</b>|| <code>LuxCoreRender/LuxCore</code> || Python bindings of core binaries, in the form of Python wheels (1 per pair OS/Python version).</br> As a byproduct, a Pythonized version of LuxCore shared library is also built.
| <b>Python Wheels</b>|| <code>LuxCoreRender/LuxCore</code> || Python bindings of core binaries, in the form of Python wheels (1 per pair OS/Python version).</br> As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).
|-
|-
| <b>Plugins</b>|| <code>LuxCoreRender/<plugin-name></code> || Plugins to expose LuxCore in various external applications, notably including Blender. </br> Mostly written in Python and relying on Python Wheels as runtime dependency.
| <b>Plugins</b>|| <code>LuxCoreRender/<plugin-name></code> || Plugins to expose LuxCore in various external applications, notably including Blender. </br> Mostly written in Python and relying on Python Wheels as runtime dependency.

Revision as of 17:25, 19 April 2025

This page is under construction

This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.

LuxCoreRender's build system has been significantly modified for version 2.10. This document therefore renders obsolete all previous documents related to the compilation of older versions (<=2.9).

For most targets, there are several construction approaches, depending on the use case. This document therefore distinguishes three different construction workflows.


Audience

This document is primarily intended for:

  • LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;
  • Developers wishing to contribute to the project;
  • Package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;

This document assumes that the reader is skilled in the following areas:

  • C/C++ compilation
  • cmake
  • Python Wheels

Familiarity with Conan dependency manager may also make this document easier to understand.


This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries.

Build Targets

Synoptics

LuxCoreRender contains multiple targets, below represented with dependency links:

Details

TODO

Target Source Repository Content
Dependencies LuxCoreRender/LuxCoreDeps A bundled Conan cache populated with LuxCoreRender dependency binaries, built from sources
LuxCore LuxCoreRender/LuxCore Core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.
Samples LuxCoreRender/LuxCore Sample C++ programs, illustrating luxcore use, namely luxcoreconsole and luxcoreui
Python Wheels LuxCoreRender/LuxCore Python bindings of core binaries, in the form of Python wheels (1 per pair OS/Python version).
As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).
Plugins LuxCoreRender/<plugin-name> Plugins to expose LuxCore in various external applications, notably including Blender.
Mostly written in Python and relying on Python Wheels as runtime dependency.

Targeted platforms

We aim to make LuxCoreRender available on the following 4 platforms:

  • Linux (glibc 2.28+)
  • Windows
  • MacOS Intel (>=10.15)
  • MacOS Arm (>=12.0)

For Python-related targets, we aim to make LuxCoreRender available for all Python versions supported at a given time (https://devguide.python.org/versions/), i.e. 5 versions in general.

Build Workflows

Publisher Workflow

This workflow is designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components. This workflow takes place in a CI/CD Github pipeline.

Dependencies

Expected outputs

The expected output of Dependencies build is a bundled Conan cache populated with dependency binaries built from sources, embedded into a new Github release. Please refer to LuxCoreDeps README for more information.

Canonical build

Caveat: depending on your settings, this action can replace an existing release with a fresh one. Be cautious.

To build a new release of Dependencies:


This action will run the build, create a release (or reuse an existing one, depending on your settings) and upload the build artifacts to the release.

Python Wheels

Samples

=== Dependency

Developper Workflow

Package Maintainer Workflow

LuxCore Dependencies

Outputs

The output of this target is a Conan cache populated with binaries


Principles

LuxCore dependencies are built by LuxCoreDeps.

The process is:

  • LuxCoreDeps populates a Conan cache by building each of the required dependencies from its sources.
  • This cache is published in LuxCoreDeps releases.
  • On LuxCore side, during the build, the cache is retrieved from the release and made available (restored) for LuxCore build.


Server build

LuxCoreDeps is intended to be run by Github CI/CD pipeline.

You will find all workflows in repository actions.:

  • LuxCore Dependency Builder: build dependencies, triggered on-demand
  • LuxCore Dependency Checker: test dependency build, triggered by push (call Builder)
  • LuxCore Dependency Releaser: publish release of dependencies

In a typical workflow: Testing: Releasing

Local build

Local build is