<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.luxcorerender.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Howetuft</id>
	<title>LuxCoreRender Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.luxcorerender.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Howetuft"/>
	<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/Special:Contributions/Howetuft"/>
	<updated>2026-04-30T20:25:34Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2703</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2703"/>
		<updated>2026-04-28T03:22:34Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you will build the deps with [[Building_LuxCoreRender#Local_Plain_Build|local plain build]].&lt;br /&gt;
&lt;br /&gt;
After having built dependencies in local, you may want to inject them in LuxCore build. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
At this stage, you will be able to build LuxCore artifacts, embedding the debug information of dependencies, for instance:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test  # If the previous steps have been completed, the testing wheel will contain deps&#039; debug info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remark: in this scenario, do not build the dependencies with CI local build, as the deps source files should be inaccessible at the end of the build, what should make the deps debug info useless.&lt;br /&gt;
&lt;br /&gt;
== How can I build a sanitized version of LuxCore? ==&lt;br /&gt;
&lt;br /&gt;
It is possible to build a sanitized version of LuxCore, including &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; and the wheels.&lt;br /&gt;
It just consists in setting the environment variable &amp;lt;code&amp;gt;LUX_SANITIZE&amp;lt;/code&amp;gt; before the build:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_SANITIZE=1  # or whatever value you want&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To come back to unsanitized build, just &amp;lt;code&amp;gt;unset LUX_SANITIZE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2 caveats:&lt;br /&gt;
* You&#039;ll need to export the following before running LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;ASAN_OPTIONS=protect_shadow_gap=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
otherwise LuxCore will stop early with the following error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;terminate called after throwing an instance of &#039;std::runtime_error&#039;&lt;br /&gt;
  what():  CUDA driver API error CUDA_ERROR_NOT_INITIALIZED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Unfortunately, sanitized version of the wheel will not do with Blender, as Blender has special code to control sanitizing and will override ours.&lt;br /&gt;
&lt;br /&gt;
== In Linux, I try to set an environment variable that should control LuxCore build, but it does not work ==&lt;br /&gt;
&lt;br /&gt;
In Linux, for LuxCore build system to take them into account, the environment variables that control the build (LUX_BUILD_TYPE, LUX_SANITIZE...) should not only be set, but also exported:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug  # `set LUX_BUILD_TYPE=Debug` would be insufficient&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2702</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2702"/>
		<updated>2026-04-28T03:10:49Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Caveats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender&#039;s build system has been significantly modified for version 2.10. This document therefore renders obsolete all [[Building_LuxCoreRender_(legacy)|previous documents]] related to the compilation of older versions (&amp;lt;=2.9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;TL;DR&amp;lt;/b&amp;gt; If you are just interested in a quick, local (but platform limited) compilation of LuxCore C++ samples or Python wheels, you may want to jump directly to [[#Build LuxCore, Samples &amp;amp; Python Wheels | Build LuxCore, Samples &amp;amp; Python Wheels]].&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Audience =&lt;br /&gt;
&lt;br /&gt;
This document is intended for:&lt;br /&gt;
* LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;&lt;br /&gt;
* Developers wishing to contribute to the project;&lt;br /&gt;
* External package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;&lt;br /&gt;
&lt;br /&gt;
This document assumes that the reader is skilled in the following areas:&lt;br /&gt;
* C/C++ compilation&lt;br /&gt;
* [https://cmake.org/ cmake]&lt;br /&gt;
* [https://git-scm.com/ git]&lt;br /&gt;
* [https://docs.github.com/en/actions/writing-workflows Github Workflows]&lt;br /&gt;
* [https://packaging.python.org/en/latest/ Python Packaging], including [https://realpython.com/python-wheels/ Python Wheels format]&lt;br /&gt;
&lt;br /&gt;
Familiarity with [https://conan.io/ Conan] dependency manager may also help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries on the official [https://luxcorerender.org/download/ Download] page.&lt;br /&gt;
&lt;br /&gt;
= Build Targets =&lt;br /&gt;
&lt;br /&gt;
== Synoptic ==&lt;br /&gt;
LuxCoreRender contains several build targets, below represented with dependency links:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:&lt;br /&gt;
%%{&lt;br /&gt;
  init: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: &amp;quot;forest&amp;quot;,&lt;br /&gt;
    &amp;quot;logLevel&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
    &amp;quot;flowchart&amp;quot;: {&amp;quot;curve&amp;quot;: &amp;quot;basis&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart LR;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classDef TYPE font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGET font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCOREDEPS fill:#ffe8ff,stroke:#9488af,font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGETDEPS fill:#e4d8ff,stroke:#9488af,font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCORE fill:#bbceff,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETLUXCORE fill:#7799ee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef SAMPLES fill:#ffffdd,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETSAMPLES fill:#eeeecc,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef NEUTRAL fill:#fafafa,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETNEUTRAL fill:#eeeeee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef EXTDEP fill:#00000000,stroke:#00000000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph Dependencies[External Dependencies]&lt;br /&gt;
deps(LuxCore Dependencies)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class Dependencies LUXCOREDEPS;&lt;br /&gt;
class deps TARGETDEPS;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph LuxCore&lt;br /&gt;
lux(luxcore.so/.dll)&lt;br /&gt;
luxa(luxcore.a)&lt;br /&gt;
end&lt;br /&gt;
class LuxCore LUXCORE;&lt;br /&gt;
class lux TARGETLUXCORE;&lt;br /&gt;
class luxa TARGETLUXCORE;&lt;br /&gt;
&lt;br /&gt;
subgraph Python_Wheels[Python Wheels]&lt;br /&gt;
pylux(pyluxcore.so/.dll)&lt;br /&gt;
wheels(LuxCore Python Wheels)&lt;br /&gt;
end&lt;br /&gt;
class Python_Wheels TYPE;&lt;br /&gt;
class pylux TARGET;&lt;br /&gt;
class wheels TARGET;&lt;br /&gt;
&lt;br /&gt;
subgraph Samples&lt;br /&gt;
luxcoreui(luxcoreui)&lt;br /&gt;
luxcoreconsole(luxcoreconsole)&lt;br /&gt;
end&lt;br /&gt;
class Samples SAMPLES;&lt;br /&gt;
class luxcoreui TARGETSAMPLES;&lt;br /&gt;
class luxcoreconsole TARGETSAMPLES;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph PyLuxCoreTools&lt;br /&gt;
pyluxcon(pyluxcoreconsole)&lt;br /&gt;
pyluxothers(...)&lt;br /&gt;
end&lt;br /&gt;
class PyLuxCoreTools NEUTRAL;&lt;br /&gt;
class pyluxcon TARGETNEUTRAL;&lt;br /&gt;
class pyluxothers TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
subgraph Plugins[Python Plugins]&lt;br /&gt;
blc(BlendLuxCore)&lt;br /&gt;
otherplugins(...)&lt;br /&gt;
end&lt;br /&gt;
class blc TARGETNEUTRAL;&lt;br /&gt;
class otherplugins TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
class Plugins NEUTRAL;&lt;br /&gt;
&lt;br /&gt;
%% Warning: order matters&lt;br /&gt;
deps--&amp;gt;lux&lt;br /&gt;
deps--&amp;gt;luxa&lt;br /&gt;
deps--&amp;gt;luxcoreui&lt;br /&gt;
deps--&amp;gt;luxcoreconsole&lt;br /&gt;
&lt;br /&gt;
luxa---&amp;gt;pylux&lt;br /&gt;
lux--&amp;gt;luxcoreui&lt;br /&gt;
lux--&amp;gt;luxcoreconsole&lt;br /&gt;
deps--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pylux--&amp;gt;wheels&lt;br /&gt;
wheels-. runtime .-&amp;gt;blc&lt;br /&gt;
wheels-. runtime .-&amp;gt;otherplugins&lt;br /&gt;
&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxcon&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxothers&lt;br /&gt;
&lt;br /&gt;
Python:::EXTDEP--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Mermaid version: 8.14.0&lt;br /&gt;
%% https://github.com/mermaid-js/mermaid/blob/8.14.0/src/defaultConfig.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target !! Source Repository !! Content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;External Dependencies&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;] || A bundled Conan cache populated with LuxCoreRender external dependency binaries, built from sources. Please refer to [https://github.com/LuxCoreRender/LuxCoreDeps/blob/main/README.md LuxCoreDeps README] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;LuxCore&amp;lt;/b&amp;gt; || [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || LuxCore core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Sample C++ programs, illustrating luxcore use, namely &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python bindings of core binaries, in the form of Python wheels (1 per pair Platform/Python version).&amp;lt;/br&amp;gt; As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Plugins&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/BlendLuxCore &amp;lt;code&amp;gt;BlendLuxCore&amp;lt;/code&amp;gt;] etc. || Plugins to expose LuxCore in various external applications, notably Blender. &amp;lt;/br&amp;gt; Written in Python and relying on Python Wheels as runtime dependency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;PyLuxCoreTools&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python LuxCore Tools: set of command line tools based on pyluxcore, written in Python.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Targeted platforms ==&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender aims at being available on the following 4 platforms:&lt;br /&gt;
* Linux (glibc 2.28+)&lt;br /&gt;
* Windows&lt;br /&gt;
* MacOS Intel (&amp;gt;=10.15)&lt;br /&gt;
* MacOS Arm (&amp;gt;=12.0)&lt;br /&gt;
&lt;br /&gt;
For Python-related targets, LuxCoreRender aims at being declined for [https://devguide.python.org/versions all Python versions supported at a given time].&lt;br /&gt;
&lt;br /&gt;
= Workflow Types =&lt;br /&gt;
&lt;br /&gt;
We distinguish between two types of build workflows:&lt;br /&gt;
* Developer workflows&lt;br /&gt;
* Publisher workflows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Developer Workflows | Developer workflows]]&#039;&#039; are designed for development, debugging and test steps.&lt;br /&gt;
&lt;br /&gt;
Their purpose is to allow development and verify the code is ready for publication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Publisher Workflows | Publisher workflows]]&#039;&#039; are designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components.&lt;br /&gt;
&lt;br /&gt;
They exclusively take place in a CI/CD Github pipeline.&lt;br /&gt;
&lt;br /&gt;
These workflows are not designed for debugging or testing the underlying code. Execution of these workflows assumes that the development phase has been correctly completed and the underlying code is ready for final build and release. See [[#Developer Workflows | Developer Workflows]] to learn how to get code ready for final build.&lt;br /&gt;
&lt;br /&gt;
Running these workflows require users to be granted of extended rights on LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
= Developer Workflows =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need several build tools installed and referenced in the PATH.&lt;br /&gt;
&lt;br /&gt;
First, ensure you have a suitable toolchain:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OS !! Compiler !! Minimal version&lt;br /&gt;
|-&lt;br /&gt;
| Windows || MSVC || 194x latest version&lt;br /&gt;
|-&lt;br /&gt;
| Linux|| gcc || 14&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Intel|| XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Arm || XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toolchain compliance is a very sensitive condition for a successful build. Before filing any claim, please check that your toolchain complies with the above requirements.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then ensure the following software is also installed and available in your PATH:&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/ Git]&lt;br /&gt;
* [https://cli.github.com/ Github CLI] (optional but recommended - for dependency signature checking)&lt;br /&gt;
* [https://www.python.org/ Python 3] - any [https://devguide.python.org/versions/ currently supported version]&lt;br /&gt;
* [https://conan.io Conan] latest version (pip install conan)&lt;br /&gt;
* [https://github.com/pypa/wheel/tree/main Wheel] latest version (pip install wheel)&lt;br /&gt;
* [https://cmake.org/ CMake] &amp;gt;= 3.29&lt;br /&gt;
* [https://github.com/nektos/act nektos/act] (optional but recommended - for local build based on Github workflows)&lt;br /&gt;
* [https://pypi.org/project/repairwheel repairwheel] (optional but recommended - for local build of test wheels)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platform specifics:&lt;br /&gt;
* For Windows, ensure the command line is configured for building (&amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;).&lt;br /&gt;
* For Linux, you&#039;ll need &amp;lt;code&amp;gt;pkgconfig&amp;lt;/code&amp;gt; in addition.&lt;br /&gt;
* For MacOS, you&#039;ll need to ensure CC and CXX point to LLVM clang/clang++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Accounts&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Github account&#039;&#039; is mandatory for LuxCore development.&lt;br /&gt;
&lt;br /&gt;
Following accounts are also recommended, in order to get in touch with LuxCore community:&lt;br /&gt;
* [https://forums.luxcorerender.org/ LuxCoreRender Forums]&lt;br /&gt;
* [https://discord.gg/chPGsKV LuxCoreRender Discord channel]&lt;br /&gt;
&lt;br /&gt;
== General Developer Workflow ==&lt;br /&gt;
&lt;br /&gt;
To compile and verify LuxCore component modifications in development process, there are 3 stages:&lt;br /&gt;
* Local plain build: only run build system (cmake) on developer computer&lt;br /&gt;
* Local Continuous Integration build: run full Continuous Integration workflow on developer computer&lt;br /&gt;
* Server Continuous Integration build: run full Continuous Integration workflow on server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Local plain build&amp;lt;/i&amp;gt; is generally faster than other builds and does not require to commit changes beforehand. Plain build installs a minimal build configuration (dependencies), but heavily relies on computer build environment for the rest (build tools, system libraries etc.). As a counterpart, it builds only for the platform where it is executed and can be significantly altered by local conditions (build tools local versions, dependency local versions etc.), thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;LocalCI &amp;lt;/i&amp;gt; is generally faster than Server build, but slower than local plain build. CI workflow installs a complete build environment (compilers, sdk, build tools, containers, dependencies etc.) before running build system. It does not require to commit changes beforehand. However, it builds only for the platform where it is executed, thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;I&amp;gt;Server CI&amp;lt;/i&amp;gt;, if successful, should guarantee success when publishing, as it occurs in conditions similar to release workflow (all platforms, complete build environment). As a counterpart, it is generally significantly slower than local builds and also implies to commit and push changes beforehand, even if the code is in unstable state.&lt;br /&gt;
&lt;br /&gt;
The recommended workflow thus strives to make the most of all stages:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart TD;&lt;br /&gt;
&lt;br /&gt;
fork(Fork Source repository in your own Github space)&lt;br /&gt;
clone(&amp;quot;Clone your fork locally&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git clone...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
devel(Make modifications in your local fork)&lt;br /&gt;
localBuild(&amp;quot;&amp;lt;b&amp;gt;Run local plain build&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;...&amp;quot;)&lt;br /&gt;
localCI(&amp;quot;&amp;lt;b&amp;gt;Run local CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
git(&amp;quot;Commit, Rebase &amp;amp; Push&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git ...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
serverCI(&amp;lt;b&amp;gt;Run server CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;Github workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
PR(PR your changes to Source repository)&lt;br /&gt;
&lt;br /&gt;
fork--&amp;gt;clone&lt;br /&gt;
clone--&amp;gt;devel&lt;br /&gt;
devel--&amp;gt;localBuild&lt;br /&gt;
localBuild--&amp;gt;localCI&lt;br /&gt;
localCI-- &amp;quot;&amp;lt;i&amp;gt;Success&amp;lt;/br&amp;gt;(including debug &amp;amp; tests)&amp;lt;/i&amp;gt;&amp;quot; --&amp;gt;git&lt;br /&gt;
git--&amp;gt;serverCI&lt;br /&gt;
serverCI-- &amp;lt;i&amp;gt;Success&amp;lt;/i&amp;gt; --&amp;gt;PR&lt;br /&gt;
&lt;br /&gt;
localBuild &amp;amp; localCI &amp;amp; serverCI ----&amp;gt; |&amp;lt;i&amp;gt;Failure&amp;lt;/i&amp;gt;| devel&lt;br /&gt;
&lt;br /&gt;
classDef BUILD fill:#acc,stroke-width:4px;&lt;br /&gt;
class localBuild BUILD;&lt;br /&gt;
class localCI BUILD;&lt;br /&gt;
class serverCI BUILD;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the common process between all components. Each step will then be adapted to each component, as explained below.&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
* Running local CI relies on [https://github.com/nektos/act &amp;lt;code&amp;gt;nektos/act&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Rebase must be made against upstream directory (&amp;lt;code&amp;gt;git pull --rebase upstream &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;)before pushing&lt;br /&gt;
* Push must be made towards developer own fork. Caveat: do not try to push directly to upstream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build External Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
Dependency local plain build is possible but:&lt;br /&gt;
* Local plain build IS NOT THE RECOMMENDED BUILD FOR FINAL DEPS. This build is solely intended for intermediary development and debugging. No support will be provided when used out-of-scope.&lt;br /&gt;
* Local plain build has only been tested on Linux, with gcc &amp;gt;=14. For other platforms, adaptations should be necessary (contributions welcome). &lt;br /&gt;
* Local plain build is much impacted by local particulars (local compiler version, dependencies already in cache or in system dirs etc.) and therefore does not guarantee further success for other builds.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
In addition with general [[#Prerequisites_2 | Prerequisites]], you&#039;ll need the OneAPI ISPC compiler.&lt;br /&gt;
&lt;br /&gt;
==== Conan cache interaction ====&lt;br /&gt;
&lt;br /&gt;
The build relies on the local Conan cache, which will be modified by the process. You may want to make a copy beforehand.&lt;br /&gt;
&lt;br /&gt;
In some scenarios, you may also want to reset your Conan cache (warning: may remove files unrelated to LuxCoreDeps):&lt;br /&gt;
&amp;lt;pre&amp;gt;conan remove -c &amp;quot;*&amp;quot;  # Be careful: may remove packages unrelated to LuxCoreDeps!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Run ====&lt;br /&gt;
&lt;br /&gt;
To run a plain local build, run the following statements in a console, from the root of LuxCoreDeps repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export RUNNER_OS=&amp;lt;os&amp;gt;&lt;br /&gt;
export RUNNER_ARCH=&amp;lt;arch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LUXDEPS_VERSION=test&lt;br /&gt;
export GCC_VERSION=14   # Note: even for gcc &amp;gt; 14&lt;br /&gt;
export WORKSPACE=.&lt;br /&gt;
export CXX_VERSION=20&lt;br /&gt;
export CMAKE_POLICY_VERSION_MINIMUM=3.25&lt;br /&gt;
export DEPS_BUILD_TYPE=Debug  # Or Release/RelWithDebInfo/MinSizeRel, as needed&lt;br /&gt;
export cache_dir&lt;br /&gt;
&lt;br /&gt;
./run_conan.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;code&amp;gt;RUNNER_OS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RUNNER_ARCH&amp;lt;/code&amp;gt; in:&lt;br /&gt;
* &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
reflecting your build platform.&lt;br /&gt;
&lt;br /&gt;
No detection is made (compiler, OS, arch...) . You&#039;ll have to do it on your own and set environment variables accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
Conan will produce a bunch of scripts in the root of LuxCoreDeps repo. You can clean them with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt; ./utils/clean-conan-files.sh &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; on workflows located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder, for instance &amp;lt;code&amp;gt;.github/workflows/build.yml&amp;lt;/code&amp;gt; workflow.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more convenience, a wrapper script is also provided in &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt; repository (Linux only, at the moment): &amp;lt;pre&amp;gt;./utils/local-CI-build.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This process relies on the following Github workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/checker.yml &amp;lt;code&amp;gt;LuxCore Dependency Checker&amp;lt;/code&amp;gt;].&lt;br /&gt;
&amp;lt;/br&amp;gt;Important points:&lt;br /&gt;
* Your changes must have been committed and pushed to repository before.&lt;br /&gt;
* The Checker workflow is actually also triggered on push event, so you may not have to run it by yourself&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
== Build LuxCore, Samples &amp;amp; Python Wheels ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First, we will assume you have correctly completed the [[#Prerequisites_2 | Prerequisites]]. &lt;br /&gt;
&lt;br /&gt;
Second, we will also assume you&#039;ve already git-cloned LuxCore on your local machine, opened a terminal, changed directory to LuxCore folder and git-checked out the branch that you want to build (+ for Windows: initialized build environment with &amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Basic build ====&lt;br /&gt;
&lt;br /&gt;
Our build system internally relies on &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt; but, for more convenience, everything has been wrapped into &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-like statements.&lt;br /&gt;
&lt;br /&gt;
So, to build LuxCore, one just have to enter the following magic words:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make deps&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should retrieve and install LuxCore dependencies, configure the project and run the build. That&#039;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For subsequent builds, if no modification have been made to dependencies, you&#039;ll just have to re-enter: &amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Specific targets ====&lt;br /&gt;
&lt;br /&gt;
If you want to target a specific component, you can replace the above plain &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; by one of the following verbs:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make pyluxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreconsole&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starting from version 2.11, this method can build a &amp;quot;test wheel&amp;quot;. This is a simplified wheel, only for current platform and current Python version, for testing purpose. The test wheel is particularly useful for developing/debugging LuxCore/BlendLuxCore integration.&lt;br /&gt;
The verb is:&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also build Doxygen documentation with the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make doc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Build type ====&lt;br /&gt;
&lt;br /&gt;
By default, this method builds a release version, striped from all symbols. If you want to build a debug version, enter the following before any &amp;lt;code&amp;gt;make ...&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Local dependency set ====&lt;br /&gt;
&lt;br /&gt;
It is possible to use a local dependency set, rather than relying on automatic downloading. It is especially useful for developing/debugging of LuxCoreDeps/LuxCore integration. In this case, one can replace the &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt; statement by the following one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m build-system.luxmake.deps --local &amp;lt;path/to/local/deps&amp;gt; --release &amp;lt;release&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: &amp;lt;code&amp;gt;&amp;lt;release&amp;gt;&amp;lt;/code&amp;gt; is the release tag used by your local dependency set. If you build this set locally, it should likely be &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
You can remove build outputs with one of the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
The former will remove build files, however preserving dependencies. &lt;br /&gt;
The latter will remove everything and will require to reinstall dependencies (&amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This method is complementary to Local plain build, with the following additional capabilities:&lt;br /&gt;
* test the LuxCore build in an environment close to the release environment (manylinux container, for instance)&lt;br /&gt;
* can build wheels&lt;br /&gt;
* debug any changes made to the build workflow&lt;br /&gt;
&lt;br /&gt;
It consists in running Github workflows locally, via &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;. Github workflows are located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; invokation can be made on command line but, for convenience, a wrapper script is provided (for Linux): &amp;lt;pre&amp;gt;./build-helpers/debug/debug_wheels.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Caveat: this build can produce wheels, but only for the host platform (no cross-compiling).&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
The process is nearly the same as publisher build, but the release steps are skipped. For that purpose, another Github workflow has to be executed: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-builder.yml &amp;lt;code&amp;gt;LuxCore Python Wheels Builder&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Please note that your changes must have been committed to repository before running the workflow.&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
= Publisher Workflows =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
For these workflows, a Github account is required, with extended rights on the source repositories.&lt;br /&gt;
&lt;br /&gt;
== General Workflow ==&lt;br /&gt;
&lt;br /&gt;
The general workflow for publishing is in 3 parts:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
flowchart TD;&lt;br /&gt;
subgraph Build[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;BUILD &amp;amp; RELEASE DRAFT &amp;lt;/br&amp;gt;(Run Releaser workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padBuild(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
repo(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;Actions menu&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
select(&amp;quot;Select &amp;lt;code&amp;gt;[Releaser workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwf(Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button, in the upper-right corner)&lt;br /&gt;
branch(Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt; in drop-down menu)&lt;br /&gt;
options(Set workflow options)&lt;br /&gt;
validate(Click &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
wait(Wait for build to complete)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Release[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;MAKE FINAL RELEASE&amp;lt;/br&amp;gt;(Switch release to final status)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padRelease(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
release(&amp;quot;Open &amp;lt;code&amp;gt;[Release folder]&amp;lt;/code&amp;gt;,&amp;lt;/br&amp;gt; find the newly-built release (in Draft mode) &amp;lt;/br&amp;gt; and edit it&amp;quot;)&lt;br /&gt;
complete(Add relevant information: change log, comments on version etc.)&lt;br /&gt;
dedraft(Unset &amp;lt;code&amp;gt;Draft&amp;lt;/code&amp;gt; checkbox)&lt;br /&gt;
update(Click &amp;lt;code&amp;gt;Publish release&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Update release&amp;lt;/code&amp;gt; to finalize)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Deploy[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;PUBLISH&amp;lt;/br&amp;gt;(Run Publisher workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padDeploy(&amp;quot; &amp;quot;)&lt;br /&gt;
repoDeploy(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;[Actions menu]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
selectDeploy(&amp;quot;Select &amp;lt;code&amp;gt;[Publisher workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwfDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; drop-down button, in the upper-right corner&amp;quot;)&lt;br /&gt;
choiceDeploy(&amp;quot;Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt;, set the &amp;lt;code&amp;gt;Tag to publish&amp;lt;/code&amp;gt; and uncheck &amp;lt;code&amp;gt;Publish on Pypi Test&amp;lt;/code&amp;gt; if needed&amp;quot;)&lt;br /&gt;
validateDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button&amp;quot;)&lt;br /&gt;
waitDeploy(&amp;quot;Wait for deployment to complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
padBuild---repo&lt;br /&gt;
repo--&amp;gt;select&lt;br /&gt;
select--&amp;gt;runwf&lt;br /&gt;
runwf--&amp;gt;branch&lt;br /&gt;
branch--&amp;gt;options&lt;br /&gt;
options--&amp;gt;validate&lt;br /&gt;
validate--&amp;gt;wait:::WAIT&lt;br /&gt;
linkStyle 0 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padRelease---release&lt;br /&gt;
release--&amp;gt;complete&lt;br /&gt;
complete--&amp;gt;dedraft&lt;br /&gt;
dedraft--&amp;gt;update&lt;br /&gt;
linkStyle 7 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padDeploy:::INVISIBLE---repoDeploy&lt;br /&gt;
repoDeploy--&amp;gt;selectDeploy&lt;br /&gt;
selectDeploy--&amp;gt;runwfDeploy&lt;br /&gt;
runwfDeploy--&amp;gt;choiceDeploy&lt;br /&gt;
choiceDeploy--&amp;gt;validateDeploy&lt;br /&gt;
validateDeploy--&amp;gt;waitDeploy:::WAIT&lt;br /&gt;
linkStyle 11 stroke:#fff,color:blue,stroke-width:0px;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build-- &amp;lt;i&amp;gt;if success&amp;lt;/i&amp;gt; --&amp;gt;Release&lt;br /&gt;
Release-- &amp;lt;i&amp;gt;if success &amp;amp; if needed&amp;lt;/i&amp;gt; --&amp;gt;Deploy&lt;br /&gt;
&lt;br /&gt;
classDef WAIT fill:#ddd;&lt;br /&gt;
classDef DEPS fill:#e4d8ff,stroke:#9488af;&lt;br /&gt;
classDef INVISIBLE fill:#ffffffff,stroke:#ffffffff,stroke-width:0px,font-color:#ffffffff;&lt;br /&gt;
classDef OPTIONAL stroke-dasharray: 5 5;&lt;br /&gt;
&lt;br /&gt;
class Deploy OPTIONAL;&lt;br /&gt;
&lt;br /&gt;
%% Note: padXXX is a poor hack to create a top-margin in subgraph...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A few comments:&lt;br /&gt;
* &amp;lt;code&amp;gt;[bracketed tokens]&amp;lt;/code&amp;gt; refer to data specific to each component, which will be detailed below.&lt;br /&gt;
* Publish part is optional, it will depends on the target&lt;br /&gt;
* &#039;&#039;Caveat: if you provide an already-existing release version number during the process, the workflow will replace the existing release with the newly-built one. This can be what you expected... or not. Be cautious.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Per-target details ==&lt;br /&gt;
&lt;br /&gt;
=== External Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreRender/LuxCoreDeps&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/release.yml &amp;lt;code&amp;gt;LuxCore Dependency Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCoreDeps/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
As a byproduct, External Dependencies are not intended to be deployed, so no Publisher workflow is provided.&lt;br /&gt;
&lt;br /&gt;
=== Python Wheels ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As far as wheels are concerned, in addition to building them, it is also necessary to upload them to [https://pypi.org/ PyPi] (&amp;quot;publish&amp;quot; them), so that they are available for [https://pypi.org/project/pip pip] installation.&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-releaser.yml &amp;lt;code&amp;gt;LuxCore Wheels Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-publisher.yml &amp;lt;code&amp;gt;LuxCore Wheels Publisher&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Prerequisite: you must have released a compatible version of External Dependencies (LuxCoreDeps) before building Python Wheels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Samples ===&lt;br /&gt;
&lt;br /&gt;
As we plan to replace Samples by equivalent Python tools and thus deprecate them, the workflow has been limited to the Release part (no publish).&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/sample-releaser.yml &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
=== BlendLuxCore ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;TODO&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Version Management =&lt;br /&gt;
&lt;br /&gt;
== Semantic Versioning ==&lt;br /&gt;
&lt;br /&gt;
Starting for LuxCore version 2.10.0, we require that LuxCoreRender applies [https://semver.org/ Semantic Versioning]. Please strictly enforce this rule when incrementing version numbers.&lt;br /&gt;
&lt;br /&gt;
Remark: component versions does not have to be synced. For instance, in strict application of the standard, the newly created LuxCoreDeps will start at 1.0.0, while at the same time LuxCore is already at 2.10.0&lt;br /&gt;
&lt;br /&gt;
== Dependency Version pointer ==&lt;br /&gt;
&lt;br /&gt;
To make LuxCore know which version of dependencies it must be built against, we use a pointer.&lt;br /&gt;
&lt;br /&gt;
This pointer is stored in the file &amp;lt;code&amp;gt;build-helpers/build-settings.json&amp;lt;/code&amp;gt;, under the path &amp;lt;code&amp;gt;Dependencies/release&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you keep it up-to-date when you upgrade LuxCore components.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2701</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2701"/>
		<updated>2026-04-28T03:10:04Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Caveats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender&#039;s build system has been significantly modified for version 2.10. This document therefore renders obsolete all [[Building_LuxCoreRender_(legacy)|previous documents]] related to the compilation of older versions (&amp;lt;=2.9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;TL;DR&amp;lt;/b&amp;gt; If you are just interested in a quick, local (but platform limited) compilation of LuxCore C++ samples or Python wheels, you may want to jump directly to [[#Build LuxCore, Samples &amp;amp; Python Wheels | Build LuxCore, Samples &amp;amp; Python Wheels]].&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Audience =&lt;br /&gt;
&lt;br /&gt;
This document is intended for:&lt;br /&gt;
* LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;&lt;br /&gt;
* Developers wishing to contribute to the project;&lt;br /&gt;
* External package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;&lt;br /&gt;
&lt;br /&gt;
This document assumes that the reader is skilled in the following areas:&lt;br /&gt;
* C/C++ compilation&lt;br /&gt;
* [https://cmake.org/ cmake]&lt;br /&gt;
* [https://git-scm.com/ git]&lt;br /&gt;
* [https://docs.github.com/en/actions/writing-workflows Github Workflows]&lt;br /&gt;
* [https://packaging.python.org/en/latest/ Python Packaging], including [https://realpython.com/python-wheels/ Python Wheels format]&lt;br /&gt;
&lt;br /&gt;
Familiarity with [https://conan.io/ Conan] dependency manager may also help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries on the official [https://luxcorerender.org/download/ Download] page.&lt;br /&gt;
&lt;br /&gt;
= Build Targets =&lt;br /&gt;
&lt;br /&gt;
== Synoptic ==&lt;br /&gt;
LuxCoreRender contains several build targets, below represented with dependency links:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:&lt;br /&gt;
%%{&lt;br /&gt;
  init: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: &amp;quot;forest&amp;quot;,&lt;br /&gt;
    &amp;quot;logLevel&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
    &amp;quot;flowchart&amp;quot;: {&amp;quot;curve&amp;quot;: &amp;quot;basis&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart LR;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classDef TYPE font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGET font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCOREDEPS fill:#ffe8ff,stroke:#9488af,font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGETDEPS fill:#e4d8ff,stroke:#9488af,font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCORE fill:#bbceff,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETLUXCORE fill:#7799ee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef SAMPLES fill:#ffffdd,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETSAMPLES fill:#eeeecc,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef NEUTRAL fill:#fafafa,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETNEUTRAL fill:#eeeeee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef EXTDEP fill:#00000000,stroke:#00000000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph Dependencies[External Dependencies]&lt;br /&gt;
deps(LuxCore Dependencies)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class Dependencies LUXCOREDEPS;&lt;br /&gt;
class deps TARGETDEPS;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph LuxCore&lt;br /&gt;
lux(luxcore.so/.dll)&lt;br /&gt;
luxa(luxcore.a)&lt;br /&gt;
end&lt;br /&gt;
class LuxCore LUXCORE;&lt;br /&gt;
class lux TARGETLUXCORE;&lt;br /&gt;
class luxa TARGETLUXCORE;&lt;br /&gt;
&lt;br /&gt;
subgraph Python_Wheels[Python Wheels]&lt;br /&gt;
pylux(pyluxcore.so/.dll)&lt;br /&gt;
wheels(LuxCore Python Wheels)&lt;br /&gt;
end&lt;br /&gt;
class Python_Wheels TYPE;&lt;br /&gt;
class pylux TARGET;&lt;br /&gt;
class wheels TARGET;&lt;br /&gt;
&lt;br /&gt;
subgraph Samples&lt;br /&gt;
luxcoreui(luxcoreui)&lt;br /&gt;
luxcoreconsole(luxcoreconsole)&lt;br /&gt;
end&lt;br /&gt;
class Samples SAMPLES;&lt;br /&gt;
class luxcoreui TARGETSAMPLES;&lt;br /&gt;
class luxcoreconsole TARGETSAMPLES;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph PyLuxCoreTools&lt;br /&gt;
pyluxcon(pyluxcoreconsole)&lt;br /&gt;
pyluxothers(...)&lt;br /&gt;
end&lt;br /&gt;
class PyLuxCoreTools NEUTRAL;&lt;br /&gt;
class pyluxcon TARGETNEUTRAL;&lt;br /&gt;
class pyluxothers TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
subgraph Plugins[Python Plugins]&lt;br /&gt;
blc(BlendLuxCore)&lt;br /&gt;
otherplugins(...)&lt;br /&gt;
end&lt;br /&gt;
class blc TARGETNEUTRAL;&lt;br /&gt;
class otherplugins TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
class Plugins NEUTRAL;&lt;br /&gt;
&lt;br /&gt;
%% Warning: order matters&lt;br /&gt;
deps--&amp;gt;lux&lt;br /&gt;
deps--&amp;gt;luxa&lt;br /&gt;
deps--&amp;gt;luxcoreui&lt;br /&gt;
deps--&amp;gt;luxcoreconsole&lt;br /&gt;
&lt;br /&gt;
luxa---&amp;gt;pylux&lt;br /&gt;
lux--&amp;gt;luxcoreui&lt;br /&gt;
lux--&amp;gt;luxcoreconsole&lt;br /&gt;
deps--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pylux--&amp;gt;wheels&lt;br /&gt;
wheels-. runtime .-&amp;gt;blc&lt;br /&gt;
wheels-. runtime .-&amp;gt;otherplugins&lt;br /&gt;
&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxcon&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxothers&lt;br /&gt;
&lt;br /&gt;
Python:::EXTDEP--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Mermaid version: 8.14.0&lt;br /&gt;
%% https://github.com/mermaid-js/mermaid/blob/8.14.0/src/defaultConfig.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target !! Source Repository !! Content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;External Dependencies&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;] || A bundled Conan cache populated with LuxCoreRender external dependency binaries, built from sources. Please refer to [https://github.com/LuxCoreRender/LuxCoreDeps/blob/main/README.md LuxCoreDeps README] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;LuxCore&amp;lt;/b&amp;gt; || [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || LuxCore core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Sample C++ programs, illustrating luxcore use, namely &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python bindings of core binaries, in the form of Python wheels (1 per pair Platform/Python version).&amp;lt;/br&amp;gt; As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Plugins&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/BlendLuxCore &amp;lt;code&amp;gt;BlendLuxCore&amp;lt;/code&amp;gt;] etc. || Plugins to expose LuxCore in various external applications, notably Blender. &amp;lt;/br&amp;gt; Written in Python and relying on Python Wheels as runtime dependency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;PyLuxCoreTools&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python LuxCore Tools: set of command line tools based on pyluxcore, written in Python.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Targeted platforms ==&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender aims at being available on the following 4 platforms:&lt;br /&gt;
* Linux (glibc 2.28+)&lt;br /&gt;
* Windows&lt;br /&gt;
* MacOS Intel (&amp;gt;=10.15)&lt;br /&gt;
* MacOS Arm (&amp;gt;=12.0)&lt;br /&gt;
&lt;br /&gt;
For Python-related targets, LuxCoreRender aims at being declined for [https://devguide.python.org/versions all Python versions supported at a given time].&lt;br /&gt;
&lt;br /&gt;
= Workflow Types =&lt;br /&gt;
&lt;br /&gt;
We distinguish between two types of build workflows:&lt;br /&gt;
* Developer workflows&lt;br /&gt;
* Publisher workflows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Developer Workflows | Developer workflows]]&#039;&#039; are designed for development, debugging and test steps.&lt;br /&gt;
&lt;br /&gt;
Their purpose is to allow development and verify the code is ready for publication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Publisher Workflows | Publisher workflows]]&#039;&#039; are designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components.&lt;br /&gt;
&lt;br /&gt;
They exclusively take place in a CI/CD Github pipeline.&lt;br /&gt;
&lt;br /&gt;
These workflows are not designed for debugging or testing the underlying code. Execution of these workflows assumes that the development phase has been correctly completed and the underlying code is ready for final build and release. See [[#Developer Workflows | Developer Workflows]] to learn how to get code ready for final build.&lt;br /&gt;
&lt;br /&gt;
Running these workflows require users to be granted of extended rights on LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
= Developer Workflows =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need several build tools installed and referenced in the PATH.&lt;br /&gt;
&lt;br /&gt;
First, ensure you have a suitable toolchain:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OS !! Compiler !! Minimal version&lt;br /&gt;
|-&lt;br /&gt;
| Windows || MSVC || 194x latest version&lt;br /&gt;
|-&lt;br /&gt;
| Linux|| gcc || 14&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Intel|| XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Arm || XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toolchain compliance is a very sensitive condition for a successful build. Before filing any claim, please check that your toolchain complies with the above requirements.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then ensure the following software is also installed and available in your PATH:&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/ Git]&lt;br /&gt;
* [https://cli.github.com/ Github CLI] (optional but recommended - for dependency signature checking)&lt;br /&gt;
* [https://www.python.org/ Python 3] - any [https://devguide.python.org/versions/ currently supported version]&lt;br /&gt;
* [https://conan.io Conan] latest version (pip install conan)&lt;br /&gt;
* [https://github.com/pypa/wheel/tree/main Wheel] latest version (pip install wheel)&lt;br /&gt;
* [https://cmake.org/ CMake] &amp;gt;= 3.29&lt;br /&gt;
* [https://github.com/nektos/act nektos/act] (optional but recommended - for local build based on Github workflows)&lt;br /&gt;
* [https://pypi.org/project/repairwheel repairwheel] (optional but recommended - for local build of test wheels)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platform specifics:&lt;br /&gt;
* For Windows, ensure the command line is configured for building (&amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;).&lt;br /&gt;
* For Linux, you&#039;ll need &amp;lt;code&amp;gt;pkgconfig&amp;lt;/code&amp;gt; in addition.&lt;br /&gt;
* For MacOS, you&#039;ll need to ensure CC and CXX point to LLVM clang/clang++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Accounts&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Github account&#039;&#039; is mandatory for LuxCore development.&lt;br /&gt;
&lt;br /&gt;
Following accounts are also recommended, in order to get in touch with LuxCore community:&lt;br /&gt;
* [https://forums.luxcorerender.org/ LuxCoreRender Forums]&lt;br /&gt;
* [https://discord.gg/chPGsKV LuxCoreRender Discord channel]&lt;br /&gt;
&lt;br /&gt;
== General Developer Workflow ==&lt;br /&gt;
&lt;br /&gt;
To compile and verify LuxCore component modifications in development process, there are 3 stages:&lt;br /&gt;
* Local plain build: only run build system (cmake) on developer computer&lt;br /&gt;
* Local Continuous Integration build: run full Continuous Integration workflow on developer computer&lt;br /&gt;
* Server Continuous Integration build: run full Continuous Integration workflow on server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Local plain build&amp;lt;/i&amp;gt; is generally faster than other builds and does not require to commit changes beforehand. Plain build installs a minimal build configuration (dependencies), but heavily relies on computer build environment for the rest (build tools, system libraries etc.). As a counterpart, it builds only for the platform where it is executed and can be significantly altered by local conditions (build tools local versions, dependency local versions etc.), thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;LocalCI &amp;lt;/i&amp;gt; is generally faster than Server build, but slower than local plain build. CI workflow installs a complete build environment (compilers, sdk, build tools, containers, dependencies etc.) before running build system. It does not require to commit changes beforehand. However, it builds only for the platform where it is executed, thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;I&amp;gt;Server CI&amp;lt;/i&amp;gt;, if successful, should guarantee success when publishing, as it occurs in conditions similar to release workflow (all platforms, complete build environment). As a counterpart, it is generally significantly slower than local builds and also implies to commit and push changes beforehand, even if the code is in unstable state.&lt;br /&gt;
&lt;br /&gt;
The recommended workflow thus strives to make the most of all stages:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart TD;&lt;br /&gt;
&lt;br /&gt;
fork(Fork Source repository in your own Github space)&lt;br /&gt;
clone(&amp;quot;Clone your fork locally&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git clone...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
devel(Make modifications in your local fork)&lt;br /&gt;
localBuild(&amp;quot;&amp;lt;b&amp;gt;Run local plain build&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;...&amp;quot;)&lt;br /&gt;
localCI(&amp;quot;&amp;lt;b&amp;gt;Run local CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
git(&amp;quot;Commit, Rebase &amp;amp; Push&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git ...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
serverCI(&amp;lt;b&amp;gt;Run server CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;Github workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
PR(PR your changes to Source repository)&lt;br /&gt;
&lt;br /&gt;
fork--&amp;gt;clone&lt;br /&gt;
clone--&amp;gt;devel&lt;br /&gt;
devel--&amp;gt;localBuild&lt;br /&gt;
localBuild--&amp;gt;localCI&lt;br /&gt;
localCI-- &amp;quot;&amp;lt;i&amp;gt;Success&amp;lt;/br&amp;gt;(including debug &amp;amp; tests)&amp;lt;/i&amp;gt;&amp;quot; --&amp;gt;git&lt;br /&gt;
git--&amp;gt;serverCI&lt;br /&gt;
serverCI-- &amp;lt;i&amp;gt;Success&amp;lt;/i&amp;gt; --&amp;gt;PR&lt;br /&gt;
&lt;br /&gt;
localBuild &amp;amp; localCI &amp;amp; serverCI ----&amp;gt; |&amp;lt;i&amp;gt;Failure&amp;lt;/i&amp;gt;| devel&lt;br /&gt;
&lt;br /&gt;
classDef BUILD fill:#acc,stroke-width:4px;&lt;br /&gt;
class localBuild BUILD;&lt;br /&gt;
class localCI BUILD;&lt;br /&gt;
class serverCI BUILD;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the common process between all components. Each step will then be adapted to each component, as explained below.&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
* Running local CI relies on [https://github.com/nektos/act &amp;lt;code&amp;gt;nektos/act&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Rebase must be made against upstream directory (&amp;lt;code&amp;gt;git pull --rebase upstream &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;)before pushing&lt;br /&gt;
* Push must be made towards developer own fork. Caveat: do not try to push directly to upstream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build External Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
Dependency local plain build is possible but:&lt;br /&gt;
* Local plain build IS NOT THE RECOMMENDED BUILD FOR FINAL DEPS. This build is solely intended for intermediary development and debugging. No support will be provided when used out-of-scope.&lt;br /&gt;
* Local plain build has only be tested on Linux, with gcc &amp;gt;=14. For other platforms, adaptations should be necessary (contributions welcome). &lt;br /&gt;
* Local plain build is much impacted by local particulars (local compiler version, dependencies already in cache or in system dirs etc.) and therefore does not guarantee further success for other (recommended) builds.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
In addition with general [[#Prerequisites_2 | Prerequisites]], you&#039;ll need the OneAPI ISPC compiler.&lt;br /&gt;
&lt;br /&gt;
==== Conan cache interaction ====&lt;br /&gt;
&lt;br /&gt;
The build relies on the local Conan cache, which will be modified by the process. You may want to make a copy beforehand.&lt;br /&gt;
&lt;br /&gt;
In some scenarios, you may also want to reset your Conan cache (warning: may remove files unrelated to LuxCoreDeps):&lt;br /&gt;
&amp;lt;pre&amp;gt;conan remove -c &amp;quot;*&amp;quot;  # Be careful: may remove packages unrelated to LuxCoreDeps!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Run ====&lt;br /&gt;
&lt;br /&gt;
To run a plain local build, run the following statements in a console, from the root of LuxCoreDeps repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export RUNNER_OS=&amp;lt;os&amp;gt;&lt;br /&gt;
export RUNNER_ARCH=&amp;lt;arch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LUXDEPS_VERSION=test&lt;br /&gt;
export GCC_VERSION=14   # Note: even for gcc &amp;gt; 14&lt;br /&gt;
export WORKSPACE=.&lt;br /&gt;
export CXX_VERSION=20&lt;br /&gt;
export CMAKE_POLICY_VERSION_MINIMUM=3.25&lt;br /&gt;
export DEPS_BUILD_TYPE=Debug  # Or Release/RelWithDebInfo/MinSizeRel, as needed&lt;br /&gt;
export cache_dir&lt;br /&gt;
&lt;br /&gt;
./run_conan.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;code&amp;gt;RUNNER_OS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RUNNER_ARCH&amp;lt;/code&amp;gt; in:&lt;br /&gt;
* &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
reflecting your build platform.&lt;br /&gt;
&lt;br /&gt;
No detection is made (compiler, OS, arch...) . You&#039;ll have to do it on your own and set environment variables accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
Conan will produce a bunch of scripts in the root of LuxCoreDeps repo. You can clean them with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt; ./utils/clean-conan-files.sh &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; on workflows located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder, for instance &amp;lt;code&amp;gt;.github/workflows/build.yml&amp;lt;/code&amp;gt; workflow.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more convenience, a wrapper script is also provided in &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt; repository (Linux only, at the moment): &amp;lt;pre&amp;gt;./utils/local-CI-build.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This process relies on the following Github workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/checker.yml &amp;lt;code&amp;gt;LuxCore Dependency Checker&amp;lt;/code&amp;gt;].&lt;br /&gt;
&amp;lt;/br&amp;gt;Important points:&lt;br /&gt;
* Your changes must have been committed and pushed to repository before.&lt;br /&gt;
* The Checker workflow is actually also triggered on push event, so you may not have to run it by yourself&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
== Build LuxCore, Samples &amp;amp; Python Wheels ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First, we will assume you have correctly completed the [[#Prerequisites_2 | Prerequisites]]. &lt;br /&gt;
&lt;br /&gt;
Second, we will also assume you&#039;ve already git-cloned LuxCore on your local machine, opened a terminal, changed directory to LuxCore folder and git-checked out the branch that you want to build (+ for Windows: initialized build environment with &amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Basic build ====&lt;br /&gt;
&lt;br /&gt;
Our build system internally relies on &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt; but, for more convenience, everything has been wrapped into &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-like statements.&lt;br /&gt;
&lt;br /&gt;
So, to build LuxCore, one just have to enter the following magic words:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make deps&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should retrieve and install LuxCore dependencies, configure the project and run the build. That&#039;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For subsequent builds, if no modification have been made to dependencies, you&#039;ll just have to re-enter: &amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Specific targets ====&lt;br /&gt;
&lt;br /&gt;
If you want to target a specific component, you can replace the above plain &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; by one of the following verbs:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make pyluxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreconsole&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starting from version 2.11, this method can build a &amp;quot;test wheel&amp;quot;. This is a simplified wheel, only for current platform and current Python version, for testing purpose. The test wheel is particularly useful for developing/debugging LuxCore/BlendLuxCore integration.&lt;br /&gt;
The verb is:&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also build Doxygen documentation with the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make doc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Build type ====&lt;br /&gt;
&lt;br /&gt;
By default, this method builds a release version, striped from all symbols. If you want to build a debug version, enter the following before any &amp;lt;code&amp;gt;make ...&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Local dependency set ====&lt;br /&gt;
&lt;br /&gt;
It is possible to use a local dependency set, rather than relying on automatic downloading. It is especially useful for developing/debugging of LuxCoreDeps/LuxCore integration. In this case, one can replace the &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt; statement by the following one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m build-system.luxmake.deps --local &amp;lt;path/to/local/deps&amp;gt; --release &amp;lt;release&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: &amp;lt;code&amp;gt;&amp;lt;release&amp;gt;&amp;lt;/code&amp;gt; is the release tag used by your local dependency set. If you build this set locally, it should likely be &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
You can remove build outputs with one of the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
The former will remove build files, however preserving dependencies. &lt;br /&gt;
The latter will remove everything and will require to reinstall dependencies (&amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This method is complementary to Local plain build, with the following additional capabilities:&lt;br /&gt;
* test the LuxCore build in an environment close to the release environment (manylinux container, for instance)&lt;br /&gt;
* can build wheels&lt;br /&gt;
* debug any changes made to the build workflow&lt;br /&gt;
&lt;br /&gt;
It consists in running Github workflows locally, via &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;. Github workflows are located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; invokation can be made on command line but, for convenience, a wrapper script is provided (for Linux): &amp;lt;pre&amp;gt;./build-helpers/debug/debug_wheels.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Caveat: this build can produce wheels, but only for the host platform (no cross-compiling).&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
The process is nearly the same as publisher build, but the release steps are skipped. For that purpose, another Github workflow has to be executed: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-builder.yml &amp;lt;code&amp;gt;LuxCore Python Wheels Builder&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Please note that your changes must have been committed to repository before running the workflow.&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
= Publisher Workflows =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
For these workflows, a Github account is required, with extended rights on the source repositories.&lt;br /&gt;
&lt;br /&gt;
== General Workflow ==&lt;br /&gt;
&lt;br /&gt;
The general workflow for publishing is in 3 parts:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
flowchart TD;&lt;br /&gt;
subgraph Build[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;BUILD &amp;amp; RELEASE DRAFT &amp;lt;/br&amp;gt;(Run Releaser workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padBuild(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
repo(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;Actions menu&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
select(&amp;quot;Select &amp;lt;code&amp;gt;[Releaser workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwf(Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button, in the upper-right corner)&lt;br /&gt;
branch(Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt; in drop-down menu)&lt;br /&gt;
options(Set workflow options)&lt;br /&gt;
validate(Click &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
wait(Wait for build to complete)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Release[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;MAKE FINAL RELEASE&amp;lt;/br&amp;gt;(Switch release to final status)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padRelease(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
release(&amp;quot;Open &amp;lt;code&amp;gt;[Release folder]&amp;lt;/code&amp;gt;,&amp;lt;/br&amp;gt; find the newly-built release (in Draft mode) &amp;lt;/br&amp;gt; and edit it&amp;quot;)&lt;br /&gt;
complete(Add relevant information: change log, comments on version etc.)&lt;br /&gt;
dedraft(Unset &amp;lt;code&amp;gt;Draft&amp;lt;/code&amp;gt; checkbox)&lt;br /&gt;
update(Click &amp;lt;code&amp;gt;Publish release&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Update release&amp;lt;/code&amp;gt; to finalize)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Deploy[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;PUBLISH&amp;lt;/br&amp;gt;(Run Publisher workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padDeploy(&amp;quot; &amp;quot;)&lt;br /&gt;
repoDeploy(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;[Actions menu]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
selectDeploy(&amp;quot;Select &amp;lt;code&amp;gt;[Publisher workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwfDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; drop-down button, in the upper-right corner&amp;quot;)&lt;br /&gt;
choiceDeploy(&amp;quot;Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt;, set the &amp;lt;code&amp;gt;Tag to publish&amp;lt;/code&amp;gt; and uncheck &amp;lt;code&amp;gt;Publish on Pypi Test&amp;lt;/code&amp;gt; if needed&amp;quot;)&lt;br /&gt;
validateDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button&amp;quot;)&lt;br /&gt;
waitDeploy(&amp;quot;Wait for deployment to complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
padBuild---repo&lt;br /&gt;
repo--&amp;gt;select&lt;br /&gt;
select--&amp;gt;runwf&lt;br /&gt;
runwf--&amp;gt;branch&lt;br /&gt;
branch--&amp;gt;options&lt;br /&gt;
options--&amp;gt;validate&lt;br /&gt;
validate--&amp;gt;wait:::WAIT&lt;br /&gt;
linkStyle 0 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padRelease---release&lt;br /&gt;
release--&amp;gt;complete&lt;br /&gt;
complete--&amp;gt;dedraft&lt;br /&gt;
dedraft--&amp;gt;update&lt;br /&gt;
linkStyle 7 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padDeploy:::INVISIBLE---repoDeploy&lt;br /&gt;
repoDeploy--&amp;gt;selectDeploy&lt;br /&gt;
selectDeploy--&amp;gt;runwfDeploy&lt;br /&gt;
runwfDeploy--&amp;gt;choiceDeploy&lt;br /&gt;
choiceDeploy--&amp;gt;validateDeploy&lt;br /&gt;
validateDeploy--&amp;gt;waitDeploy:::WAIT&lt;br /&gt;
linkStyle 11 stroke:#fff,color:blue,stroke-width:0px;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build-- &amp;lt;i&amp;gt;if success&amp;lt;/i&amp;gt; --&amp;gt;Release&lt;br /&gt;
Release-- &amp;lt;i&amp;gt;if success &amp;amp; if needed&amp;lt;/i&amp;gt; --&amp;gt;Deploy&lt;br /&gt;
&lt;br /&gt;
classDef WAIT fill:#ddd;&lt;br /&gt;
classDef DEPS fill:#e4d8ff,stroke:#9488af;&lt;br /&gt;
classDef INVISIBLE fill:#ffffffff,stroke:#ffffffff,stroke-width:0px,font-color:#ffffffff;&lt;br /&gt;
classDef OPTIONAL stroke-dasharray: 5 5;&lt;br /&gt;
&lt;br /&gt;
class Deploy OPTIONAL;&lt;br /&gt;
&lt;br /&gt;
%% Note: padXXX is a poor hack to create a top-margin in subgraph...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A few comments:&lt;br /&gt;
* &amp;lt;code&amp;gt;[bracketed tokens]&amp;lt;/code&amp;gt; refer to data specific to each component, which will be detailed below.&lt;br /&gt;
* Publish part is optional, it will depends on the target&lt;br /&gt;
* &#039;&#039;Caveat: if you provide an already-existing release version number during the process, the workflow will replace the existing release with the newly-built one. This can be what you expected... or not. Be cautious.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Per-target details ==&lt;br /&gt;
&lt;br /&gt;
=== External Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreRender/LuxCoreDeps&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/release.yml &amp;lt;code&amp;gt;LuxCore Dependency Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCoreDeps/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
As a byproduct, External Dependencies are not intended to be deployed, so no Publisher workflow is provided.&lt;br /&gt;
&lt;br /&gt;
=== Python Wheels ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As far as wheels are concerned, in addition to building them, it is also necessary to upload them to [https://pypi.org/ PyPi] (&amp;quot;publish&amp;quot; them), so that they are available for [https://pypi.org/project/pip pip] installation.&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-releaser.yml &amp;lt;code&amp;gt;LuxCore Wheels Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-publisher.yml &amp;lt;code&amp;gt;LuxCore Wheels Publisher&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Prerequisite: you must have released a compatible version of External Dependencies (LuxCoreDeps) before building Python Wheels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Samples ===&lt;br /&gt;
&lt;br /&gt;
As we plan to replace Samples by equivalent Python tools and thus deprecate them, the workflow has been limited to the Release part (no publish).&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/sample-releaser.yml &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
=== BlendLuxCore ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;TODO&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Version Management =&lt;br /&gt;
&lt;br /&gt;
== Semantic Versioning ==&lt;br /&gt;
&lt;br /&gt;
Starting for LuxCore version 2.10.0, we require that LuxCoreRender applies [https://semver.org/ Semantic Versioning]. Please strictly enforce this rule when incrementing version numbers.&lt;br /&gt;
&lt;br /&gt;
Remark: component versions does not have to be synced. For instance, in strict application of the standard, the newly created LuxCoreDeps will start at 1.0.0, while at the same time LuxCore is already at 2.10.0&lt;br /&gt;
&lt;br /&gt;
== Dependency Version pointer ==&lt;br /&gt;
&lt;br /&gt;
To make LuxCore know which version of dependencies it must be built against, we use a pointer.&lt;br /&gt;
&lt;br /&gt;
This pointer is stored in the file &amp;lt;code&amp;gt;build-helpers/build-settings.json&amp;lt;/code&amp;gt;, under the path &amp;lt;code&amp;gt;Dependencies/release&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you keep it up-to-date when you upgrade LuxCore components.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2700</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2700"/>
		<updated>2026-04-26T15:05:45Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Run */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender&#039;s build system has been significantly modified for version 2.10. This document therefore renders obsolete all [[Building_LuxCoreRender_(legacy)|previous documents]] related to the compilation of older versions (&amp;lt;=2.9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;TL;DR&amp;lt;/b&amp;gt; If you are just interested in a quick, local (but platform limited) compilation of LuxCore C++ samples or Python wheels, you may want to jump directly to [[#Build LuxCore, Samples &amp;amp; Python Wheels | Build LuxCore, Samples &amp;amp; Python Wheels]].&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Audience =&lt;br /&gt;
&lt;br /&gt;
This document is intended for:&lt;br /&gt;
* LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;&lt;br /&gt;
* Developers wishing to contribute to the project;&lt;br /&gt;
* External package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;&lt;br /&gt;
&lt;br /&gt;
This document assumes that the reader is skilled in the following areas:&lt;br /&gt;
* C/C++ compilation&lt;br /&gt;
* [https://cmake.org/ cmake]&lt;br /&gt;
* [https://git-scm.com/ git]&lt;br /&gt;
* [https://docs.github.com/en/actions/writing-workflows Github Workflows]&lt;br /&gt;
* [https://packaging.python.org/en/latest/ Python Packaging], including [https://realpython.com/python-wheels/ Python Wheels format]&lt;br /&gt;
&lt;br /&gt;
Familiarity with [https://conan.io/ Conan] dependency manager may also help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries on the official [https://luxcorerender.org/download/ Download] page.&lt;br /&gt;
&lt;br /&gt;
= Build Targets =&lt;br /&gt;
&lt;br /&gt;
== Synoptic ==&lt;br /&gt;
LuxCoreRender contains several build targets, below represented with dependency links:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:&lt;br /&gt;
%%{&lt;br /&gt;
  init: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: &amp;quot;forest&amp;quot;,&lt;br /&gt;
    &amp;quot;logLevel&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
    &amp;quot;flowchart&amp;quot;: {&amp;quot;curve&amp;quot;: &amp;quot;basis&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart LR;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classDef TYPE font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGET font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCOREDEPS fill:#ffe8ff,stroke:#9488af,font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGETDEPS fill:#e4d8ff,stroke:#9488af,font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCORE fill:#bbceff,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETLUXCORE fill:#7799ee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef SAMPLES fill:#ffffdd,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETSAMPLES fill:#eeeecc,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef NEUTRAL fill:#fafafa,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETNEUTRAL fill:#eeeeee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef EXTDEP fill:#00000000,stroke:#00000000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph Dependencies[External Dependencies]&lt;br /&gt;
deps(LuxCore Dependencies)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class Dependencies LUXCOREDEPS;&lt;br /&gt;
class deps TARGETDEPS;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph LuxCore&lt;br /&gt;
lux(luxcore.so/.dll)&lt;br /&gt;
luxa(luxcore.a)&lt;br /&gt;
end&lt;br /&gt;
class LuxCore LUXCORE;&lt;br /&gt;
class lux TARGETLUXCORE;&lt;br /&gt;
class luxa TARGETLUXCORE;&lt;br /&gt;
&lt;br /&gt;
subgraph Python_Wheels[Python Wheels]&lt;br /&gt;
pylux(pyluxcore.so/.dll)&lt;br /&gt;
wheels(LuxCore Python Wheels)&lt;br /&gt;
end&lt;br /&gt;
class Python_Wheels TYPE;&lt;br /&gt;
class pylux TARGET;&lt;br /&gt;
class wheels TARGET;&lt;br /&gt;
&lt;br /&gt;
subgraph Samples&lt;br /&gt;
luxcoreui(luxcoreui)&lt;br /&gt;
luxcoreconsole(luxcoreconsole)&lt;br /&gt;
end&lt;br /&gt;
class Samples SAMPLES;&lt;br /&gt;
class luxcoreui TARGETSAMPLES;&lt;br /&gt;
class luxcoreconsole TARGETSAMPLES;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph PyLuxCoreTools&lt;br /&gt;
pyluxcon(pyluxcoreconsole)&lt;br /&gt;
pyluxothers(...)&lt;br /&gt;
end&lt;br /&gt;
class PyLuxCoreTools NEUTRAL;&lt;br /&gt;
class pyluxcon TARGETNEUTRAL;&lt;br /&gt;
class pyluxothers TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
subgraph Plugins[Python Plugins]&lt;br /&gt;
blc(BlendLuxCore)&lt;br /&gt;
otherplugins(...)&lt;br /&gt;
end&lt;br /&gt;
class blc TARGETNEUTRAL;&lt;br /&gt;
class otherplugins TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
class Plugins NEUTRAL;&lt;br /&gt;
&lt;br /&gt;
%% Warning: order matters&lt;br /&gt;
deps--&amp;gt;lux&lt;br /&gt;
deps--&amp;gt;luxa&lt;br /&gt;
deps--&amp;gt;luxcoreui&lt;br /&gt;
deps--&amp;gt;luxcoreconsole&lt;br /&gt;
&lt;br /&gt;
luxa---&amp;gt;pylux&lt;br /&gt;
lux--&amp;gt;luxcoreui&lt;br /&gt;
lux--&amp;gt;luxcoreconsole&lt;br /&gt;
deps--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pylux--&amp;gt;wheels&lt;br /&gt;
wheels-. runtime .-&amp;gt;blc&lt;br /&gt;
wheels-. runtime .-&amp;gt;otherplugins&lt;br /&gt;
&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxcon&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxothers&lt;br /&gt;
&lt;br /&gt;
Python:::EXTDEP--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Mermaid version: 8.14.0&lt;br /&gt;
%% https://github.com/mermaid-js/mermaid/blob/8.14.0/src/defaultConfig.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target !! Source Repository !! Content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;External Dependencies&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;] || A bundled Conan cache populated with LuxCoreRender external dependency binaries, built from sources. Please refer to [https://github.com/LuxCoreRender/LuxCoreDeps/blob/main/README.md LuxCoreDeps README] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;LuxCore&amp;lt;/b&amp;gt; || [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || LuxCore core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Sample C++ programs, illustrating luxcore use, namely &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python bindings of core binaries, in the form of Python wheels (1 per pair Platform/Python version).&amp;lt;/br&amp;gt; As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Plugins&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/BlendLuxCore &amp;lt;code&amp;gt;BlendLuxCore&amp;lt;/code&amp;gt;] etc. || Plugins to expose LuxCore in various external applications, notably Blender. &amp;lt;/br&amp;gt; Written in Python and relying on Python Wheels as runtime dependency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;PyLuxCoreTools&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python LuxCore Tools: set of command line tools based on pyluxcore, written in Python.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Targeted platforms ==&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender aims at being available on the following 4 platforms:&lt;br /&gt;
* Linux (glibc 2.28+)&lt;br /&gt;
* Windows&lt;br /&gt;
* MacOS Intel (&amp;gt;=10.15)&lt;br /&gt;
* MacOS Arm (&amp;gt;=12.0)&lt;br /&gt;
&lt;br /&gt;
For Python-related targets, LuxCoreRender aims at being declined for [https://devguide.python.org/versions all Python versions supported at a given time].&lt;br /&gt;
&lt;br /&gt;
= Workflow Types =&lt;br /&gt;
&lt;br /&gt;
We distinguish between two types of build workflows:&lt;br /&gt;
* Developer workflows&lt;br /&gt;
* Publisher workflows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Developer Workflows | Developer workflows]]&#039;&#039; are designed for development, debugging and test steps.&lt;br /&gt;
&lt;br /&gt;
Their purpose is to allow development and verify the code is ready for publication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Publisher Workflows | Publisher workflows]]&#039;&#039; are designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components.&lt;br /&gt;
&lt;br /&gt;
They exclusively take place in a CI/CD Github pipeline.&lt;br /&gt;
&lt;br /&gt;
These workflows are not designed for debugging or testing the underlying code. Execution of these workflows assumes that the development phase has been correctly completed and the underlying code is ready for final build and release. See [[#Developer Workflows | Developer Workflows]] to learn how to get code ready for final build.&lt;br /&gt;
&lt;br /&gt;
Running these workflows require users to be granted of extended rights on LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
= Developer Workflows =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need several build tools installed and referenced in the PATH.&lt;br /&gt;
&lt;br /&gt;
First, ensure you have a suitable toolchain:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OS !! Compiler !! Minimal version&lt;br /&gt;
|-&lt;br /&gt;
| Windows || MSVC || 194x latest version&lt;br /&gt;
|-&lt;br /&gt;
| Linux|| gcc || 14&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Intel|| XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Arm || XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toolchain compliance is a very sensitive condition for a successful build. Before filing any claim, please check that your toolchain complies with the above requirements.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then ensure the following software is also installed and available in your PATH:&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/ Git]&lt;br /&gt;
* [https://cli.github.com/ Github CLI] (optional but recommended - for dependency signature checking)&lt;br /&gt;
* [https://www.python.org/ Python 3] - any [https://devguide.python.org/versions/ currently supported version]&lt;br /&gt;
* [https://conan.io Conan] latest version (pip install conan)&lt;br /&gt;
* [https://github.com/pypa/wheel/tree/main Wheel] latest version (pip install wheel)&lt;br /&gt;
* [https://cmake.org/ CMake] &amp;gt;= 3.29&lt;br /&gt;
* [https://github.com/nektos/act nektos/act] (optional but recommended - for local build based on Github workflows)&lt;br /&gt;
* [https://pypi.org/project/repairwheel repairwheel] (optional but recommended - for local build of test wheels)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platform specifics:&lt;br /&gt;
* For Windows, ensure the command line is configured for building (&amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;).&lt;br /&gt;
* For Linux, you&#039;ll need &amp;lt;code&amp;gt;pkgconfig&amp;lt;/code&amp;gt; in addition.&lt;br /&gt;
* For MacOS, you&#039;ll need to ensure CC and CXX point to LLVM clang/clang++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Accounts&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Github account&#039;&#039; is mandatory for LuxCore development.&lt;br /&gt;
&lt;br /&gt;
Following accounts are also recommended, in order to get in touch with LuxCore community:&lt;br /&gt;
* [https://forums.luxcorerender.org/ LuxCoreRender Forums]&lt;br /&gt;
* [https://discord.gg/chPGsKV LuxCoreRender Discord channel]&lt;br /&gt;
&lt;br /&gt;
== General Developer Workflow ==&lt;br /&gt;
&lt;br /&gt;
To compile and verify LuxCore component modifications in development process, there are 3 stages:&lt;br /&gt;
* Local plain build: only run build system (cmake) on developer computer&lt;br /&gt;
* Local Continuous Integration build: run full Continuous Integration workflow on developer computer&lt;br /&gt;
* Server Continuous Integration build: run full Continuous Integration workflow on server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Local plain build&amp;lt;/i&amp;gt; is generally faster than other builds and does not require to commit changes beforehand. Plain build installs a minimal build configuration (dependencies), but heavily relies on computer build environment for the rest (build tools, system libraries etc.). As a counterpart, it builds only for the platform where it is executed and can be significantly altered by local conditions (build tools local versions, dependency local versions etc.), thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;LocalCI &amp;lt;/i&amp;gt; is generally faster than Server build, but slower than local plain build. CI workflow installs a complete build environment (compilers, sdk, build tools, containers, dependencies etc.) before running build system. It does not require to commit changes beforehand. However, it builds only for the platform where it is executed, thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;I&amp;gt;Server CI&amp;lt;/i&amp;gt;, if successful, should guarantee success when publishing, as it occurs in conditions similar to release workflow (all platforms, complete build environment). As a counterpart, it is generally significantly slower than local builds and also implies to commit and push changes beforehand, even if the code is in unstable state.&lt;br /&gt;
&lt;br /&gt;
The recommended workflow thus strives to make the most of all stages:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart TD;&lt;br /&gt;
&lt;br /&gt;
fork(Fork Source repository in your own Github space)&lt;br /&gt;
clone(&amp;quot;Clone your fork locally&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git clone...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
devel(Make modifications in your local fork)&lt;br /&gt;
localBuild(&amp;quot;&amp;lt;b&amp;gt;Run local plain build&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;...&amp;quot;)&lt;br /&gt;
localCI(&amp;quot;&amp;lt;b&amp;gt;Run local CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
git(&amp;quot;Commit, Rebase &amp;amp; Push&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git ...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
serverCI(&amp;lt;b&amp;gt;Run server CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;Github workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
PR(PR your changes to Source repository)&lt;br /&gt;
&lt;br /&gt;
fork--&amp;gt;clone&lt;br /&gt;
clone--&amp;gt;devel&lt;br /&gt;
devel--&amp;gt;localBuild&lt;br /&gt;
localBuild--&amp;gt;localCI&lt;br /&gt;
localCI-- &amp;quot;&amp;lt;i&amp;gt;Success&amp;lt;/br&amp;gt;(including debug &amp;amp; tests)&amp;lt;/i&amp;gt;&amp;quot; --&amp;gt;git&lt;br /&gt;
git--&amp;gt;serverCI&lt;br /&gt;
serverCI-- &amp;lt;i&amp;gt;Success&amp;lt;/i&amp;gt; --&amp;gt;PR&lt;br /&gt;
&lt;br /&gt;
localBuild &amp;amp; localCI &amp;amp; serverCI ----&amp;gt; |&amp;lt;i&amp;gt;Failure&amp;lt;/i&amp;gt;| devel&lt;br /&gt;
&lt;br /&gt;
classDef BUILD fill:#acc,stroke-width:4px;&lt;br /&gt;
class localBuild BUILD;&lt;br /&gt;
class localCI BUILD;&lt;br /&gt;
class serverCI BUILD;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the common process between all components. Each step will then be adapted to each component, as explained below.&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
* Running local CI relies on [https://github.com/nektos/act &amp;lt;code&amp;gt;nektos/act&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Rebase must be made against upstream directory (&amp;lt;code&amp;gt;git pull --rebase upstream &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;)before pushing&lt;br /&gt;
* Push must be made towards developer own fork. Caveat: do not try to push directly to upstream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build External Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
Dependency local plain build is possible but:&lt;br /&gt;
* Local plain build IS NOT THE RECOMMENDED BUILD for final deps. This build is solely intended for intermediary development and debugging. No support will be provided when used out-of-scope.&lt;br /&gt;
* Local plain build has only be tested on Linux, with gcc &amp;gt;=14. For other platforms, adaptations should be necessary (contributions welcome). &lt;br /&gt;
* Local plain build is much impacted by local particulars (local compiler version, dependencies already in cache or in system dirs etc.) and therefore does not guarantee further success for other (recommended) builds.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
In addition with general [[#Prerequisites_2 | Prerequisites]], you&#039;ll need the OneAPI ISPC compiler.&lt;br /&gt;
&lt;br /&gt;
==== Conan cache interaction ====&lt;br /&gt;
&lt;br /&gt;
The build relies on the local Conan cache, which will be modified by the process. You may want to make a copy beforehand.&lt;br /&gt;
&lt;br /&gt;
In some scenarios, you may also want to reset your Conan cache (warning: may remove files unrelated to LuxCoreDeps):&lt;br /&gt;
&amp;lt;pre&amp;gt;conan remove -c &amp;quot;*&amp;quot;  # Be careful: may remove packages unrelated to LuxCoreDeps!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Run ====&lt;br /&gt;
&lt;br /&gt;
To run a plain local build, run the following statements in a console, from the root of LuxCoreDeps repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export RUNNER_OS=&amp;lt;os&amp;gt;&lt;br /&gt;
export RUNNER_ARCH=&amp;lt;arch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LUXDEPS_VERSION=test&lt;br /&gt;
export GCC_VERSION=14   # Note: even for gcc &amp;gt; 14&lt;br /&gt;
export WORKSPACE=.&lt;br /&gt;
export CXX_VERSION=20&lt;br /&gt;
export CMAKE_POLICY_VERSION_MINIMUM=3.25&lt;br /&gt;
export DEPS_BUILD_TYPE=Debug  # Or Release/RelWithDebInfo/MinSizeRel, as needed&lt;br /&gt;
export cache_dir&lt;br /&gt;
&lt;br /&gt;
./run_conan.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;code&amp;gt;RUNNER_OS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RUNNER_ARCH&amp;lt;/code&amp;gt; in:&lt;br /&gt;
* &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
reflecting your build platform.&lt;br /&gt;
&lt;br /&gt;
No detection is made (compiler, OS, arch...) . You&#039;ll have to do it on your own and set environment variables accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
Conan will produce a bunch of scripts in the root of LuxCoreDeps repo. You can clean them with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt; ./utils/clean-conan-files.sh &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; on workflows located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder, for instance &amp;lt;code&amp;gt;.github/workflows/build.yml&amp;lt;/code&amp;gt; workflow.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more convenience, a wrapper script is also provided in &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt; repository (Linux only, at the moment): &amp;lt;pre&amp;gt;./utils/local-CI-build.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This process relies on the following Github workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/checker.yml &amp;lt;code&amp;gt;LuxCore Dependency Checker&amp;lt;/code&amp;gt;].&lt;br /&gt;
&amp;lt;/br&amp;gt;Important points:&lt;br /&gt;
* Your changes must have been committed and pushed to repository before.&lt;br /&gt;
* The Checker workflow is actually also triggered on push event, so you may not have to run it by yourself&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
== Build LuxCore, Samples &amp;amp; Python Wheels ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First, we will assume you have correctly completed the [[#Prerequisites_2 | Prerequisites]]. &lt;br /&gt;
&lt;br /&gt;
Second, we will also assume you&#039;ve already git-cloned LuxCore on your local machine, opened a terminal, changed directory to LuxCore folder and git-checked out the branch that you want to build (+ for Windows: initialized build environment with &amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Basic build ====&lt;br /&gt;
&lt;br /&gt;
Our build system internally relies on &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt; but, for more convenience, everything has been wrapped into &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-like statements.&lt;br /&gt;
&lt;br /&gt;
So, to build LuxCore, one just have to enter the following magic words:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make deps&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should retrieve and install LuxCore dependencies, configure the project and run the build. That&#039;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For subsequent builds, if no modification have been made to dependencies, you&#039;ll just have to re-enter: &amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Specific targets ====&lt;br /&gt;
&lt;br /&gt;
If you want to target a specific component, you can replace the above plain &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; by one of the following verbs:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make pyluxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreconsole&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starting from version 2.11, this method can build a &amp;quot;test wheel&amp;quot;. This is a simplified wheel, only for current platform and current Python version, for testing purpose. The test wheel is particularly useful for developing/debugging LuxCore/BlendLuxCore integration.&lt;br /&gt;
The verb is:&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also build Doxygen documentation with the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make doc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Build type ====&lt;br /&gt;
&lt;br /&gt;
By default, this method builds a release version, striped from all symbols. If you want to build a debug version, enter the following before any &amp;lt;code&amp;gt;make ...&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Local dependency set ====&lt;br /&gt;
&lt;br /&gt;
It is possible to use a local dependency set, rather than relying on automatic downloading. It is especially useful for developing/debugging of LuxCoreDeps/LuxCore integration. In this case, one can replace the &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt; statement by the following one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m build-system.luxmake.deps --local &amp;lt;path/to/local/deps&amp;gt; --release &amp;lt;release&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: &amp;lt;code&amp;gt;&amp;lt;release&amp;gt;&amp;lt;/code&amp;gt; is the release tag used by your local dependency set. If you build this set locally, it should likely be &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
You can remove build outputs with one of the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
The former will remove build files, however preserving dependencies. &lt;br /&gt;
The latter will remove everything and will require to reinstall dependencies (&amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This method is complementary to Local plain build, with the following additional capabilities:&lt;br /&gt;
* test the LuxCore build in an environment close to the release environment (manylinux container, for instance)&lt;br /&gt;
* can build wheels&lt;br /&gt;
* debug any changes made to the build workflow&lt;br /&gt;
&lt;br /&gt;
It consists in running Github workflows locally, via &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;. Github workflows are located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; invokation can be made on command line but, for convenience, a wrapper script is provided (for Linux): &amp;lt;pre&amp;gt;./build-helpers/debug/debug_wheels.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Caveat: this build can produce wheels, but only for the host platform (no cross-compiling).&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
The process is nearly the same as publisher build, but the release steps are skipped. For that purpose, another Github workflow has to be executed: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-builder.yml &amp;lt;code&amp;gt;LuxCore Python Wheels Builder&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Please note that your changes must have been committed to repository before running the workflow.&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
= Publisher Workflows =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
For these workflows, a Github account is required, with extended rights on the source repositories.&lt;br /&gt;
&lt;br /&gt;
== General Workflow ==&lt;br /&gt;
&lt;br /&gt;
The general workflow for publishing is in 3 parts:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
flowchart TD;&lt;br /&gt;
subgraph Build[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;BUILD &amp;amp; RELEASE DRAFT &amp;lt;/br&amp;gt;(Run Releaser workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padBuild(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
repo(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;Actions menu&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
select(&amp;quot;Select &amp;lt;code&amp;gt;[Releaser workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwf(Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button, in the upper-right corner)&lt;br /&gt;
branch(Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt; in drop-down menu)&lt;br /&gt;
options(Set workflow options)&lt;br /&gt;
validate(Click &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
wait(Wait for build to complete)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Release[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;MAKE FINAL RELEASE&amp;lt;/br&amp;gt;(Switch release to final status)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padRelease(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
release(&amp;quot;Open &amp;lt;code&amp;gt;[Release folder]&amp;lt;/code&amp;gt;,&amp;lt;/br&amp;gt; find the newly-built release (in Draft mode) &amp;lt;/br&amp;gt; and edit it&amp;quot;)&lt;br /&gt;
complete(Add relevant information: change log, comments on version etc.)&lt;br /&gt;
dedraft(Unset &amp;lt;code&amp;gt;Draft&amp;lt;/code&amp;gt; checkbox)&lt;br /&gt;
update(Click &amp;lt;code&amp;gt;Publish release&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Update release&amp;lt;/code&amp;gt; to finalize)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Deploy[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;PUBLISH&amp;lt;/br&amp;gt;(Run Publisher workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padDeploy(&amp;quot; &amp;quot;)&lt;br /&gt;
repoDeploy(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;[Actions menu]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
selectDeploy(&amp;quot;Select &amp;lt;code&amp;gt;[Publisher workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwfDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; drop-down button, in the upper-right corner&amp;quot;)&lt;br /&gt;
choiceDeploy(&amp;quot;Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt;, set the &amp;lt;code&amp;gt;Tag to publish&amp;lt;/code&amp;gt; and uncheck &amp;lt;code&amp;gt;Publish on Pypi Test&amp;lt;/code&amp;gt; if needed&amp;quot;)&lt;br /&gt;
validateDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button&amp;quot;)&lt;br /&gt;
waitDeploy(&amp;quot;Wait for deployment to complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
padBuild---repo&lt;br /&gt;
repo--&amp;gt;select&lt;br /&gt;
select--&amp;gt;runwf&lt;br /&gt;
runwf--&amp;gt;branch&lt;br /&gt;
branch--&amp;gt;options&lt;br /&gt;
options--&amp;gt;validate&lt;br /&gt;
validate--&amp;gt;wait:::WAIT&lt;br /&gt;
linkStyle 0 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padRelease---release&lt;br /&gt;
release--&amp;gt;complete&lt;br /&gt;
complete--&amp;gt;dedraft&lt;br /&gt;
dedraft--&amp;gt;update&lt;br /&gt;
linkStyle 7 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padDeploy:::INVISIBLE---repoDeploy&lt;br /&gt;
repoDeploy--&amp;gt;selectDeploy&lt;br /&gt;
selectDeploy--&amp;gt;runwfDeploy&lt;br /&gt;
runwfDeploy--&amp;gt;choiceDeploy&lt;br /&gt;
choiceDeploy--&amp;gt;validateDeploy&lt;br /&gt;
validateDeploy--&amp;gt;waitDeploy:::WAIT&lt;br /&gt;
linkStyle 11 stroke:#fff,color:blue,stroke-width:0px;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build-- &amp;lt;i&amp;gt;if success&amp;lt;/i&amp;gt; --&amp;gt;Release&lt;br /&gt;
Release-- &amp;lt;i&amp;gt;if success &amp;amp; if needed&amp;lt;/i&amp;gt; --&amp;gt;Deploy&lt;br /&gt;
&lt;br /&gt;
classDef WAIT fill:#ddd;&lt;br /&gt;
classDef DEPS fill:#e4d8ff,stroke:#9488af;&lt;br /&gt;
classDef INVISIBLE fill:#ffffffff,stroke:#ffffffff,stroke-width:0px,font-color:#ffffffff;&lt;br /&gt;
classDef OPTIONAL stroke-dasharray: 5 5;&lt;br /&gt;
&lt;br /&gt;
class Deploy OPTIONAL;&lt;br /&gt;
&lt;br /&gt;
%% Note: padXXX is a poor hack to create a top-margin in subgraph...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A few comments:&lt;br /&gt;
* &amp;lt;code&amp;gt;[bracketed tokens]&amp;lt;/code&amp;gt; refer to data specific to each component, which will be detailed below.&lt;br /&gt;
* Publish part is optional, it will depends on the target&lt;br /&gt;
* &#039;&#039;Caveat: if you provide an already-existing release version number during the process, the workflow will replace the existing release with the newly-built one. This can be what you expected... or not. Be cautious.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Per-target details ==&lt;br /&gt;
&lt;br /&gt;
=== External Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreRender/LuxCoreDeps&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/release.yml &amp;lt;code&amp;gt;LuxCore Dependency Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCoreDeps/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
As a byproduct, External Dependencies are not intended to be deployed, so no Publisher workflow is provided.&lt;br /&gt;
&lt;br /&gt;
=== Python Wheels ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As far as wheels are concerned, in addition to building them, it is also necessary to upload them to [https://pypi.org/ PyPi] (&amp;quot;publish&amp;quot; them), so that they are available for [https://pypi.org/project/pip pip] installation.&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-releaser.yml &amp;lt;code&amp;gt;LuxCore Wheels Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-publisher.yml &amp;lt;code&amp;gt;LuxCore Wheels Publisher&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Prerequisite: you must have released a compatible version of External Dependencies (LuxCoreDeps) before building Python Wheels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Samples ===&lt;br /&gt;
&lt;br /&gt;
As we plan to replace Samples by equivalent Python tools and thus deprecate them, the workflow has been limited to the Release part (no publish).&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/sample-releaser.yml &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
=== BlendLuxCore ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;TODO&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Version Management =&lt;br /&gt;
&lt;br /&gt;
== Semantic Versioning ==&lt;br /&gt;
&lt;br /&gt;
Starting for LuxCore version 2.10.0, we require that LuxCoreRender applies [https://semver.org/ Semantic Versioning]. Please strictly enforce this rule when incrementing version numbers.&lt;br /&gt;
&lt;br /&gt;
Remark: component versions does not have to be synced. For instance, in strict application of the standard, the newly created LuxCoreDeps will start at 1.0.0, while at the same time LuxCore is already at 2.10.0&lt;br /&gt;
&lt;br /&gt;
== Dependency Version pointer ==&lt;br /&gt;
&lt;br /&gt;
To make LuxCore know which version of dependencies it must be built against, we use a pointer.&lt;br /&gt;
&lt;br /&gt;
This pointer is stored in the file &amp;lt;code&amp;gt;build-helpers/build-settings.json&amp;lt;/code&amp;gt;, under the path &amp;lt;code&amp;gt;Dependencies/release&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you keep it up-to-date when you upgrade LuxCore components.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2699</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2699"/>
		<updated>2026-04-26T14:44:07Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* How can I build a sanitized version of LuxCore? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies in local, you may want to inject them in LuxCore build. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== How can I build a sanitized version of LuxCore? ==&lt;br /&gt;
&lt;br /&gt;
It is possible to build a sanitized version of LuxCore, including &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; and the wheels.&lt;br /&gt;
It just consists in setting the environment variable &amp;lt;code&amp;gt;LUX_SANITIZE&amp;lt;/code&amp;gt; before the build:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_SANITIZE=1  # or whatever value you want&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To come back to unsanitized build, just &amp;lt;code&amp;gt;unset LUX_SANITIZE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2 caveats:&lt;br /&gt;
* You&#039;ll need to export the following before running LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;ASAN_OPTIONS=protect_shadow_gap=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
otherwise LuxCore will stop early with the following error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;terminate called after throwing an instance of &#039;std::runtime_error&#039;&lt;br /&gt;
  what():  CUDA driver API error CUDA_ERROR_NOT_INITIALIZED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Unfortunately, sanitized version of the wheel will not do with Blender, as Blender has special code to control sanitizing and will override ours.&lt;br /&gt;
&lt;br /&gt;
== In Linux, I try to set an environment variable that should control LuxCore build, but it does not work ==&lt;br /&gt;
&lt;br /&gt;
In Linux, for LuxCore build system to take them into account, the environment variables that control the build (LUX_BUILD_TYPE, LUX_SANITIZE...) should not only be set, but also exported:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug  # `set LUX_BUILD_TYPE=Debug` would be insufficient&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2698</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2698"/>
		<updated>2026-04-26T14:42:31Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I generate debug information for dependencies (LuxCoreDeps)? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies in local, you may want to inject them in LuxCore build. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== How can I build a sanitized version of LuxCore? ==&lt;br /&gt;
&lt;br /&gt;
It is possible to build a sanitized version of LuxCore, including &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; and the wheels.&lt;br /&gt;
It just consists in setting the environment variable &amp;lt;code&amp;gt;LUX_SANITIZE&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_SANITIZE=1  # or whatever value you want&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To come back to unsanitized build, just &amp;lt;code&amp;gt;unset LUX_SANITIZE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2 caveats:&lt;br /&gt;
* You&#039;ll need to export the following before running LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;ASAN_OPTIONS=protect_shadow_gap=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
otherwise LuxCore will stop early with the following error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;terminate called after throwing an instance of &#039;std::runtime_error&#039;&lt;br /&gt;
  what():  CUDA driver API error CUDA_ERROR_NOT_INITIALIZED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Unfortunately, sanitized version of the wheel will not do with Blender, as Blender has special code to control sanitizing and will override ours.&lt;br /&gt;
&lt;br /&gt;
== In Linux, I try to set an environment variable that should control LuxCore build, but it does not work ==&lt;br /&gt;
&lt;br /&gt;
In Linux, for LuxCore build system to take them into account, the environment variables that control the build (LUX_BUILD_TYPE, LUX_SANITIZE...) should not only be set, but also exported:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug  # `set LUX_BUILD_TYPE=Debug` would be insufficient&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2697</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2697"/>
		<updated>2026-04-26T09:07:17Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* How can I build a sanitized version of LuxCore? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies in local, you may want to inject them in LuxCore. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== How can I build a sanitized version of LuxCore? ==&lt;br /&gt;
&lt;br /&gt;
It is possible to build a sanitized version of LuxCore, including &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; and the wheels.&lt;br /&gt;
It just consists in setting the environment variable &amp;lt;code&amp;gt;LUX_SANITIZE&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_SANITIZE=1  # or whatever value you want&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To come back to unsanitized build, just &amp;lt;code&amp;gt;unset LUX_SANITIZE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2 caveats:&lt;br /&gt;
* You&#039;ll need to export the following before running LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;ASAN_OPTIONS=protect_shadow_gap=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
otherwise LuxCore will stop early with the following error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;terminate called after throwing an instance of &#039;std::runtime_error&#039;&lt;br /&gt;
  what():  CUDA driver API error CUDA_ERROR_NOT_INITIALIZED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Unfortunately, sanitized version of the wheel will not do with Blender, as Blender has special code to control sanitizing and will override ours.&lt;br /&gt;
&lt;br /&gt;
== In Linux, I try to set an environment variable that should control LuxCore build, but it does not work ==&lt;br /&gt;
&lt;br /&gt;
In Linux, for LuxCore build system to take them into account, the environment variables that control the build (LUX_BUILD_TYPE, LUX_SANITIZE...) should not only be set, but also exported:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug  # `set LUX_BUILD_TYPE=Debug` would be insufficient&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2696</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2696"/>
		<updated>2026-04-26T09:06:33Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I build a sanitized version of LuxCore? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies in local, you may want to inject them in LuxCore. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== How can I build a sanitized version of LuxCore? ==&lt;br /&gt;
&lt;br /&gt;
It is possible to build a sanitized version of LuxCore, including &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; and the wheels.&lt;br /&gt;
It just consists in setting the environment variable &amp;lt;code&amp;gt;LUX_SANITIZE&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_SANITIZE=1  # or whatever value you want&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 caveats:&lt;br /&gt;
* To come back to unsanitized build, you must &amp;lt;code&amp;gt;unset LUX_SANITIZE&amp;lt;/code&amp;gt;.&lt;br /&gt;
* You&#039;ll need to export the following before running LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;ASAN_OPTIONS=protect_shadow_gap=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
otherwise LuxCore will stop early with the following error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;terminate called after throwing an instance of &#039;std::runtime_error&#039;&lt;br /&gt;
  what():  CUDA driver API error CUDA_ERROR_NOT_INITIALIZED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Unfortunately, sanitized version of the wheel will not do with Blender, as Blender has special code to control sanitizing and will override ours.&lt;br /&gt;
&lt;br /&gt;
== In Linux, I try to set an environment variable that should control LuxCore build, but it does not work ==&lt;br /&gt;
&lt;br /&gt;
In Linux, for LuxCore build system to take them into account, the environment variables that control the build (LUX_BUILD_TYPE, LUX_SANITIZE...) should not only be set, but also exported:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug  # `set LUX_BUILD_TYPE=Debug` would be insufficient&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2695</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2695"/>
		<updated>2026-04-26T09:05:42Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies in local, you may want to inject them in LuxCore. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Can I build a sanitized version of LuxCore? ==&lt;br /&gt;
&lt;br /&gt;
It is possible to build a sanitized version of LuxCore, including &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; and the wheels.&lt;br /&gt;
It just consists in setting the environment variable &amp;lt;code&amp;gt;LUX_SANITIZE&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_SANITIZE=1  # or whatever value you want&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 caveats:&lt;br /&gt;
* To come back to unsanitized build, you must &amp;lt;code&amp;gt;unset LUX_SANITIZE&amp;lt;/code&amp;gt;.&lt;br /&gt;
* You&#039;ll need to export the following before running LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;ASAN_OPTIONS=protect_shadow_gap=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
otherwise LuxCore will stop early with the following error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;terminate called after throwing an instance of &#039;std::runtime_error&#039;&lt;br /&gt;
  what():  CUDA driver API error CUDA_ERROR_NOT_INITIALIZED&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Unfortunately, sanitized version of the wheel will not do with Blender, as Blender has special code to control sanitizing and will override ours.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== In Linux, I try to set an environment variable that should control LuxCore build, but it does not work ==&lt;br /&gt;
&lt;br /&gt;
In Linux, for LuxCore build system to take them into account, the environment variables that control the build (LUX_BUILD_TYPE, LUX_SANITIZE...) should not only be set, but also exported:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug  # `set LUX_BUILD_TYPE=Debug` would be insufficient&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2694</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2694"/>
		<updated>2026-04-26T08:45:35Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies in local, you may want to inject them in LuxCore. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Can I build a sanitized version of LuxCore? ==&lt;br /&gt;
&lt;br /&gt;
It is possible to build a sanitized version of LuxCore, including &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; and the wheels.&lt;br /&gt;
It just consists in setting the environment variable &amp;lt;code&amp;gt;LUX_SANITIZE&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_SANITIZE=1  # or whatever value you want&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 caveats:&lt;br /&gt;
- To come back to unsanitized build, you must &amp;lt;code&amp;gt;unset LUX_SANITIZE&amp;lt;/code&amp;gt;.&lt;br /&gt;
- Unfortunately, sanitized version of the wheel will not do with Blender, as Blender has special code to control sanitizing and will override our settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== In Linux, I try to set an environment variable that should control LuxCore build, but it does not work ==&lt;br /&gt;
&lt;br /&gt;
In Linux, for LuxCore build system to take them into account, the environment variables that control the build (LUX_BUILD_TYPE, LUX_SANITIZE...) should not only be set, but also exported:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug  # `set LUX_BUILD_TYPE=Debug` would be insufficient&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2693</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2693"/>
		<updated>2026-04-26T08:40:01Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I build a sanitized version of LuxCore? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies in local, you may want to inject them in LuxCore. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Can I build a sanitized version of LuxCore? ==&lt;br /&gt;
&lt;br /&gt;
It is possible to build a sanitized version of LuxCore, including &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; and the wheels.&lt;br /&gt;
It just consists in setting the environment variable &amp;lt;code&amp;gt;LUX_SANITIZE&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_SANITIZE=1  # or whatever value you want&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 caveats:&lt;br /&gt;
- To come back to unsanitized build, you must &amp;lt;code&amp;gt;unset LUX_SANITIZE&amp;lt;/code&amp;gt;.&lt;br /&gt;
- Unfortunately, sanitized version of the wheel will not do with Blender, as Blender has special code to control sanitizing and will override our settings.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2692</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2692"/>
		<updated>2026-04-26T08:39:17Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies in local, you may want to inject them in LuxCore. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Can I build a sanitized version of LuxCore? ==&lt;br /&gt;
&lt;br /&gt;
It is possible to build a sanitized version of LuxCore, including `luxcoreui`, `luxcoreconsole`, `pyluxcore` and the wheels.&lt;br /&gt;
It just consists in setting the environment variable &amp;lt;code&amp;gt;LUX_SANITIZE&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_SANITIZE=1  # or whatever value you want&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2 caveats:&lt;br /&gt;
- To come back to unsanitized build, you must &amp;lt;code&amp;gt;unset LUX_SANITIZE&amp;lt;/code&amp;gt;.&lt;br /&gt;
- Unfortunately, sanitized version of the wheel will not do with Blender, as Blender has special code to control sanitizing and will override our settings.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2691</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2691"/>
		<updated>2026-04-26T08:31:29Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I generate debug information for dependencies (LuxCoreDeps)? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies in local, you may want to inject them in LuxCore. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2690</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2690"/>
		<updated>2026-04-26T08:31:01Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I generate debug information for dependencies (LuxCoreDeps)? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies, you may want to inject them in LuxCore. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2689</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2689"/>
		<updated>2026-04-24T19:43:11Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I generate debug information for dependencies (LuxCoreDeps)? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local dependency build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies, you may want to inject them in LuxCore. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(this replaces &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;)&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2688</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2688"/>
		<updated>2026-04-24T19:42:37Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I generate debug information for dependencies (LuxCoreDeps)? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local dependency build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies, you may want to inject them in LuxCore. This can be done with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test --build-type=Debug&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2687</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2687"/>
		<updated>2026-04-24T19:41:27Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I generate debug information for dependencies (LuxCoreDeps)? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local dependency build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After having built dependencies, you may want to inject them in LuxCore. This can be done with the following&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2686</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2686"/>
		<updated>2026-04-24T19:01:01Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I use git bisect? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit in &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local dependency build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2685</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2685"/>
		<updated>2026-04-24T18:50:22Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Is it possible to set-up a local-only, end-to-end, build chain? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake.deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local dependency build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2684</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2684"/>
		<updated>2026-04-24T04:19:31Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Run */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender&#039;s build system has been significantly modified for version 2.10. This document therefore renders obsolete all [[Building_LuxCoreRender_(legacy)|previous documents]] related to the compilation of older versions (&amp;lt;=2.9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;TL;DR&amp;lt;/b&amp;gt; If you are just interested in a quick, local (but platform limited) compilation of LuxCore C++ samples or Python wheels, you may want to jump directly to [[#Build LuxCore, Samples &amp;amp; Python Wheels | Build LuxCore, Samples &amp;amp; Python Wheels]].&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Audience =&lt;br /&gt;
&lt;br /&gt;
This document is intended for:&lt;br /&gt;
* LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;&lt;br /&gt;
* Developers wishing to contribute to the project;&lt;br /&gt;
* External package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;&lt;br /&gt;
&lt;br /&gt;
This document assumes that the reader is skilled in the following areas:&lt;br /&gt;
* C/C++ compilation&lt;br /&gt;
* [https://cmake.org/ cmake]&lt;br /&gt;
* [https://git-scm.com/ git]&lt;br /&gt;
* [https://docs.github.com/en/actions/writing-workflows Github Workflows]&lt;br /&gt;
* [https://packaging.python.org/en/latest/ Python Packaging], including [https://realpython.com/python-wheels/ Python Wheels format]&lt;br /&gt;
&lt;br /&gt;
Familiarity with [https://conan.io/ Conan] dependency manager may also help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries on the official [https://luxcorerender.org/download/ Download] page.&lt;br /&gt;
&lt;br /&gt;
= Build Targets =&lt;br /&gt;
&lt;br /&gt;
== Synoptic ==&lt;br /&gt;
LuxCoreRender contains several build targets, below represented with dependency links:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:&lt;br /&gt;
%%{&lt;br /&gt;
  init: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: &amp;quot;forest&amp;quot;,&lt;br /&gt;
    &amp;quot;logLevel&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
    &amp;quot;flowchart&amp;quot;: {&amp;quot;curve&amp;quot;: &amp;quot;basis&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart LR;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classDef TYPE font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGET font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCOREDEPS fill:#ffe8ff,stroke:#9488af,font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGETDEPS fill:#e4d8ff,stroke:#9488af,font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCORE fill:#bbceff,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETLUXCORE fill:#7799ee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef SAMPLES fill:#ffffdd,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETSAMPLES fill:#eeeecc,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef NEUTRAL fill:#fafafa,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETNEUTRAL fill:#eeeeee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef EXTDEP fill:#00000000,stroke:#00000000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph Dependencies[External Dependencies]&lt;br /&gt;
deps(LuxCore Dependencies)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class Dependencies LUXCOREDEPS;&lt;br /&gt;
class deps TARGETDEPS;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph LuxCore&lt;br /&gt;
lux(luxcore.so/.dll)&lt;br /&gt;
luxa(luxcore.a)&lt;br /&gt;
end&lt;br /&gt;
class LuxCore LUXCORE;&lt;br /&gt;
class lux TARGETLUXCORE;&lt;br /&gt;
class luxa TARGETLUXCORE;&lt;br /&gt;
&lt;br /&gt;
subgraph Python_Wheels[Python Wheels]&lt;br /&gt;
pylux(pyluxcore.so/.dll)&lt;br /&gt;
wheels(LuxCore Python Wheels)&lt;br /&gt;
end&lt;br /&gt;
class Python_Wheels TYPE;&lt;br /&gt;
class pylux TARGET;&lt;br /&gt;
class wheels TARGET;&lt;br /&gt;
&lt;br /&gt;
subgraph Samples&lt;br /&gt;
luxcoreui(luxcoreui)&lt;br /&gt;
luxcoreconsole(luxcoreconsole)&lt;br /&gt;
end&lt;br /&gt;
class Samples SAMPLES;&lt;br /&gt;
class luxcoreui TARGETSAMPLES;&lt;br /&gt;
class luxcoreconsole TARGETSAMPLES;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph PyLuxCoreTools&lt;br /&gt;
pyluxcon(pyluxcoreconsole)&lt;br /&gt;
pyluxothers(...)&lt;br /&gt;
end&lt;br /&gt;
class PyLuxCoreTools NEUTRAL;&lt;br /&gt;
class pyluxcon TARGETNEUTRAL;&lt;br /&gt;
class pyluxothers TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
subgraph Plugins[Python Plugins]&lt;br /&gt;
blc(BlendLuxCore)&lt;br /&gt;
otherplugins(...)&lt;br /&gt;
end&lt;br /&gt;
class blc TARGETNEUTRAL;&lt;br /&gt;
class otherplugins TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
class Plugins NEUTRAL;&lt;br /&gt;
&lt;br /&gt;
%% Warning: order matters&lt;br /&gt;
deps--&amp;gt;lux&lt;br /&gt;
deps--&amp;gt;luxa&lt;br /&gt;
deps--&amp;gt;luxcoreui&lt;br /&gt;
deps--&amp;gt;luxcoreconsole&lt;br /&gt;
&lt;br /&gt;
luxa---&amp;gt;pylux&lt;br /&gt;
lux--&amp;gt;luxcoreui&lt;br /&gt;
lux--&amp;gt;luxcoreconsole&lt;br /&gt;
deps--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pylux--&amp;gt;wheels&lt;br /&gt;
wheels-. runtime .-&amp;gt;blc&lt;br /&gt;
wheels-. runtime .-&amp;gt;otherplugins&lt;br /&gt;
&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxcon&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxothers&lt;br /&gt;
&lt;br /&gt;
Python:::EXTDEP--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Mermaid version: 8.14.0&lt;br /&gt;
%% https://github.com/mermaid-js/mermaid/blob/8.14.0/src/defaultConfig.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target !! Source Repository !! Content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;External Dependencies&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;] || A bundled Conan cache populated with LuxCoreRender external dependency binaries, built from sources. Please refer to [https://github.com/LuxCoreRender/LuxCoreDeps/blob/main/README.md LuxCoreDeps README] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;LuxCore&amp;lt;/b&amp;gt; || [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || LuxCore core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Sample C++ programs, illustrating luxcore use, namely &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python bindings of core binaries, in the form of Python wheels (1 per pair Platform/Python version).&amp;lt;/br&amp;gt; As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Plugins&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/BlendLuxCore &amp;lt;code&amp;gt;BlendLuxCore&amp;lt;/code&amp;gt;] etc. || Plugins to expose LuxCore in various external applications, notably Blender. &amp;lt;/br&amp;gt; Written in Python and relying on Python Wheels as runtime dependency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;PyLuxCoreTools&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python LuxCore Tools: set of command line tools based on pyluxcore, written in Python.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Targeted platforms ==&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender aims at being available on the following 4 platforms:&lt;br /&gt;
* Linux (glibc 2.28+)&lt;br /&gt;
* Windows&lt;br /&gt;
* MacOS Intel (&amp;gt;=10.15)&lt;br /&gt;
* MacOS Arm (&amp;gt;=12.0)&lt;br /&gt;
&lt;br /&gt;
For Python-related targets, LuxCoreRender aims at being declined for [https://devguide.python.org/versions all Python versions supported at a given time].&lt;br /&gt;
&lt;br /&gt;
= Workflow Types =&lt;br /&gt;
&lt;br /&gt;
We distinguish between two types of build workflows:&lt;br /&gt;
* Developer workflows&lt;br /&gt;
* Publisher workflows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Developer Workflows | Developer workflows]]&#039;&#039; are designed for development, debugging and test steps.&lt;br /&gt;
&lt;br /&gt;
Their purpose is to allow development and verify the code is ready for publication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Publisher Workflows | Publisher workflows]]&#039;&#039; are designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components.&lt;br /&gt;
&lt;br /&gt;
They exclusively take place in a CI/CD Github pipeline.&lt;br /&gt;
&lt;br /&gt;
These workflows are not designed for debugging or testing the underlying code. Execution of these workflows assumes that the development phase has been correctly completed and the underlying code is ready for final build and release. See [[#Developer Workflows | Developer Workflows]] to learn how to get code ready for final build.&lt;br /&gt;
&lt;br /&gt;
Running these workflows require users to be granted of extended rights on LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
= Developer Workflows =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need several build tools installed and referenced in the PATH.&lt;br /&gt;
&lt;br /&gt;
First, ensure you have a suitable toolchain:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OS !! Compiler !! Minimal version&lt;br /&gt;
|-&lt;br /&gt;
| Windows || MSVC || 194x latest version&lt;br /&gt;
|-&lt;br /&gt;
| Linux|| gcc || 14&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Intel|| XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Arm || XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toolchain compliance is a very sensitive condition for a successful build. Before filing any claim, please check that your toolchain complies with the above requirements.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then ensure the following software is also installed and available in your PATH:&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/ Git]&lt;br /&gt;
* [https://cli.github.com/ Github CLI] (optional but recommended - for dependency signature checking)&lt;br /&gt;
* [https://www.python.org/ Python 3] - any [https://devguide.python.org/versions/ currently supported version]&lt;br /&gt;
* [https://conan.io Conan] latest version (pip install conan)&lt;br /&gt;
* [https://github.com/pypa/wheel/tree/main Wheel] latest version (pip install wheel)&lt;br /&gt;
* [https://cmake.org/ CMake] &amp;gt;= 3.29&lt;br /&gt;
* [https://github.com/nektos/act nektos/act] (optional but recommended - for local build based on Github workflows)&lt;br /&gt;
* [https://pypi.org/project/repairwheel repairwheel] (optional but recommended - for local build of test wheels)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platform specifics:&lt;br /&gt;
* For Windows, ensure the command line is configured for building (&amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;).&lt;br /&gt;
* For Linux, you&#039;ll need &amp;lt;code&amp;gt;pkgconfig&amp;lt;/code&amp;gt; in addition.&lt;br /&gt;
* For MacOS, you&#039;ll need to ensure CC and CXX point to LLVM clang/clang++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Accounts&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Github account&#039;&#039; is mandatory for LuxCore development.&lt;br /&gt;
&lt;br /&gt;
Following accounts are also recommended, in order to get in touch with LuxCore community:&lt;br /&gt;
* [https://forums.luxcorerender.org/ LuxCoreRender Forums]&lt;br /&gt;
* [https://discord.gg/chPGsKV LuxCoreRender Discord channel]&lt;br /&gt;
&lt;br /&gt;
== General Developer Workflow ==&lt;br /&gt;
&lt;br /&gt;
To compile and verify LuxCore component modifications in development process, there are 3 stages:&lt;br /&gt;
* Local plain build: only run build system (cmake) on developer computer&lt;br /&gt;
* Local Continuous Integration build: run full Continuous Integration workflow on developer computer&lt;br /&gt;
* Server Continuous Integration build: run full Continuous Integration workflow on server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Local plain build&amp;lt;/i&amp;gt; is generally faster than other builds and does not require to commit changes beforehand. Plain build installs a minimal build configuration (dependencies), but heavily relies on computer build environment for the rest (build tools, system libraries etc.). As a counterpart, it builds only for the platform where it is executed and can be significantly altered by local conditions (build tools local versions, dependency local versions etc.), thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;LocalCI &amp;lt;/i&amp;gt; is generally faster than Server build, but slower than local plain build. CI workflow installs a complete build environment (compilers, sdk, build tools, containers, dependencies etc.) before running build system. It does not require to commit changes beforehand. However, it builds only for the platform where it is executed, thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;I&amp;gt;Server CI&amp;lt;/i&amp;gt;, if successful, should guarantee success when publishing, as it occurs in conditions similar to release workflow (all platforms, complete build environment). As a counterpart, it is generally significantly slower than local builds and also implies to commit and push changes beforehand, even if the code is in unstable state.&lt;br /&gt;
&lt;br /&gt;
The recommended workflow thus strives to make the most of all stages:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart TD;&lt;br /&gt;
&lt;br /&gt;
fork(Fork Source repository in your own Github space)&lt;br /&gt;
clone(&amp;quot;Clone your fork locally&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git clone...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
devel(Make modifications in your local fork)&lt;br /&gt;
localBuild(&amp;quot;&amp;lt;b&amp;gt;Run local plain build&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;...&amp;quot;)&lt;br /&gt;
localCI(&amp;quot;&amp;lt;b&amp;gt;Run local CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
git(&amp;quot;Commit, Rebase &amp;amp; Push&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git ...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
serverCI(&amp;lt;b&amp;gt;Run server CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;Github workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
PR(PR your changes to Source repository)&lt;br /&gt;
&lt;br /&gt;
fork--&amp;gt;clone&lt;br /&gt;
clone--&amp;gt;devel&lt;br /&gt;
devel--&amp;gt;localBuild&lt;br /&gt;
localBuild--&amp;gt;localCI&lt;br /&gt;
localCI-- &amp;quot;&amp;lt;i&amp;gt;Success&amp;lt;/br&amp;gt;(including debug &amp;amp; tests)&amp;lt;/i&amp;gt;&amp;quot; --&amp;gt;git&lt;br /&gt;
git--&amp;gt;serverCI&lt;br /&gt;
serverCI-- &amp;lt;i&amp;gt;Success&amp;lt;/i&amp;gt; --&amp;gt;PR&lt;br /&gt;
&lt;br /&gt;
localBuild &amp;amp; localCI &amp;amp; serverCI ----&amp;gt; |&amp;lt;i&amp;gt;Failure&amp;lt;/i&amp;gt;| devel&lt;br /&gt;
&lt;br /&gt;
classDef BUILD fill:#acc,stroke-width:4px;&lt;br /&gt;
class localBuild BUILD;&lt;br /&gt;
class localCI BUILD;&lt;br /&gt;
class serverCI BUILD;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the common process between all components. Each step will then be adapted to each component, as explained below.&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
* Running local CI relies on [https://github.com/nektos/act &amp;lt;code&amp;gt;nektos/act&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Rebase must be made against upstream directory (&amp;lt;code&amp;gt;git pull --rebase upstream &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;)before pushing&lt;br /&gt;
* Push must be made towards developer own fork. Caveat: do not try to push directly to upstream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build External Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
Dependency local plain build is possible but:&lt;br /&gt;
* Local plain build IS NOT THE RECOMMENDED BUILD for final deps. This build is solely intended for intermediary development and debugging. No support will be provided when used out-of-scope.&lt;br /&gt;
* Local plain build has only be tested on Linux, with gcc &amp;gt;=14. For other platforms, adaptations should be necessary (contributions welcome). &lt;br /&gt;
* Local plain build is much impacted by local particulars (local compiler version, dependencies already in cache or in system dirs etc.) and therefore does not guarantee further success for other (recommended) builds.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
In addition with general [[#Prerequisites_2 | Prerequisites]], you&#039;ll need the OneAPI ISPC compiler.&lt;br /&gt;
&lt;br /&gt;
==== Conan cache interaction ====&lt;br /&gt;
&lt;br /&gt;
The build relies on the local Conan cache, which will be modified by the process. You may want to make a copy beforehand.&lt;br /&gt;
&lt;br /&gt;
In some scenarios, you may also want to reset your Conan cache (warning: may remove files unrelated to LuxCoreDeps):&lt;br /&gt;
&amp;lt;pre&amp;gt;conan remove -c &amp;quot;*&amp;quot;  # Be careful: may remove packages unrelated to LuxCoreDeps!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Run ====&lt;br /&gt;
&lt;br /&gt;
To run a plain local build, run the following statements in a console, from the root of LuxCoreDeps repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export RUNNER_OS=&amp;lt;os&amp;gt;&lt;br /&gt;
export RUNNER_ARCH=&amp;lt;arch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LUXDEPS_VERSION=test&lt;br /&gt;
export GCC_VERSION=14   # Note: even for gcc &amp;gt; 14&lt;br /&gt;
export WORKSPACE=.&lt;br /&gt;
export CXX_VERSION=20&lt;br /&gt;
export CMAKE_POLICY_VERSION_MINIMUM=3.25&lt;br /&gt;
export DEPS_BUILD_TYPE=Release  # Or Debug/RelWithDebInfo/MinSizeRel, as needed&lt;br /&gt;
export cache_dir&lt;br /&gt;
&lt;br /&gt;
./run_conan.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;code&amp;gt;RUNNER_OS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RUNNER_ARCH&amp;lt;/code&amp;gt; in:&lt;br /&gt;
* &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
reflecting your build platform.&lt;br /&gt;
&lt;br /&gt;
No detection is made (compiler, OS, arch...) . You&#039;ll have to do it on your own and set environment variables accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
Conan will produce a bunch of scripts in the root of LuxCoreDeps repo. You can clean them with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt; ./utils/clean-conan-files.sh &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; on workflows located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder, for instance &amp;lt;code&amp;gt;.github/workflows/build.yml&amp;lt;/code&amp;gt; workflow.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more convenience, a wrapper script is also provided in &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt; repository (Linux only, at the moment): &amp;lt;pre&amp;gt;./utils/local-CI-build.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This process relies on the following Github workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/checker.yml &amp;lt;code&amp;gt;LuxCore Dependency Checker&amp;lt;/code&amp;gt;].&lt;br /&gt;
&amp;lt;/br&amp;gt;Important points:&lt;br /&gt;
* Your changes must have been committed and pushed to repository before.&lt;br /&gt;
* The Checker workflow is actually also triggered on push event, so you may not have to run it by yourself&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
== Build LuxCore, Samples &amp;amp; Python Wheels ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First, we will assume you have correctly completed the [[#Prerequisites_2 | Prerequisites]]. &lt;br /&gt;
&lt;br /&gt;
Second, we will also assume you&#039;ve already git-cloned LuxCore on your local machine, opened a terminal, changed directory to LuxCore folder and git-checked out the branch that you want to build (+ for Windows: initialized build environment with &amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Basic build ====&lt;br /&gt;
&lt;br /&gt;
Our build system internally relies on &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt; but, for more convenience, everything has been wrapped into &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-like statements.&lt;br /&gt;
&lt;br /&gt;
So, to build LuxCore, one just have to enter the following magic words:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make deps&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should retrieve and install LuxCore dependencies, configure the project and run the build. That&#039;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For subsequent builds, if no modification have been made to dependencies, you&#039;ll just have to re-enter: &amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Specific targets ====&lt;br /&gt;
&lt;br /&gt;
If you want to target a specific component, you can replace the above plain &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; by one of the following verbs:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make pyluxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreconsole&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starting from version 2.11, this method can build a &amp;quot;test wheel&amp;quot;. This is a simplified wheel, only for current platform and current Python version, for testing purpose. The test wheel is particularly useful for developing/debugging LuxCore/BlendLuxCore integration.&lt;br /&gt;
The verb is:&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also build Doxygen documentation with the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make doc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Build type ====&lt;br /&gt;
&lt;br /&gt;
By default, this method builds a release version, striped from all symbols. If you want to build a debug version, enter the following before any &amp;lt;code&amp;gt;make ...&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Local dependency set ====&lt;br /&gt;
&lt;br /&gt;
It is possible to use a local dependency set, rather than relying on automatic downloading. It is especially useful for developing/debugging of LuxCoreDeps/LuxCore integration. In this case, one can replace the &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt; statement by the following one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m build-system.luxmake.deps --local &amp;lt;path/to/local/deps&amp;gt; --release &amp;lt;release&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: &amp;lt;code&amp;gt;&amp;lt;release&amp;gt;&amp;lt;/code&amp;gt; is the release tag used by your local dependency set. If you build this set locally, it should likely be &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
You can remove build outputs with one of the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
The former will remove build files, however preserving dependencies. &lt;br /&gt;
The latter will remove everything and will require to reinstall dependencies (&amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This method is complementary to Local plain build, with the following additional capabilities:&lt;br /&gt;
* test the LuxCore build in an environment close to the release environment (manylinux container, for instance)&lt;br /&gt;
* can build wheels&lt;br /&gt;
* debug any changes made to the build workflow&lt;br /&gt;
&lt;br /&gt;
It consists in running Github workflows locally, via &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;. Github workflows are located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; invokation can be made on command line but, for convenience, a wrapper script is provided (for Linux): &amp;lt;pre&amp;gt;./build-helpers/debug/debug_wheels.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Caveat: this build can produce wheels, but only for the host platform (no cross-compiling).&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
The process is nearly the same as publisher build, but the release steps are skipped. For that purpose, another Github workflow has to be executed: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-builder.yml &amp;lt;code&amp;gt;LuxCore Python Wheels Builder&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Please note that your changes must have been committed to repository before running the workflow.&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
= Publisher Workflows =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
For these workflows, a Github account is required, with extended rights on the source repositories.&lt;br /&gt;
&lt;br /&gt;
== General Workflow ==&lt;br /&gt;
&lt;br /&gt;
The general workflow for publishing is in 3 parts:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
flowchart TD;&lt;br /&gt;
subgraph Build[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;BUILD &amp;amp; RELEASE DRAFT &amp;lt;/br&amp;gt;(Run Releaser workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padBuild(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
repo(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;Actions menu&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
select(&amp;quot;Select &amp;lt;code&amp;gt;[Releaser workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwf(Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button, in the upper-right corner)&lt;br /&gt;
branch(Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt; in drop-down menu)&lt;br /&gt;
options(Set workflow options)&lt;br /&gt;
validate(Click &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
wait(Wait for build to complete)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Release[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;MAKE FINAL RELEASE&amp;lt;/br&amp;gt;(Switch release to final status)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padRelease(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
release(&amp;quot;Open &amp;lt;code&amp;gt;[Release folder]&amp;lt;/code&amp;gt;,&amp;lt;/br&amp;gt; find the newly-built release (in Draft mode) &amp;lt;/br&amp;gt; and edit it&amp;quot;)&lt;br /&gt;
complete(Add relevant information: change log, comments on version etc.)&lt;br /&gt;
dedraft(Unset &amp;lt;code&amp;gt;Draft&amp;lt;/code&amp;gt; checkbox)&lt;br /&gt;
update(Click &amp;lt;code&amp;gt;Publish release&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Update release&amp;lt;/code&amp;gt; to finalize)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Deploy[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;PUBLISH&amp;lt;/br&amp;gt;(Run Publisher workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padDeploy(&amp;quot; &amp;quot;)&lt;br /&gt;
repoDeploy(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;[Actions menu]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
selectDeploy(&amp;quot;Select &amp;lt;code&amp;gt;[Publisher workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwfDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; drop-down button, in the upper-right corner&amp;quot;)&lt;br /&gt;
choiceDeploy(&amp;quot;Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt;, set the &amp;lt;code&amp;gt;Tag to publish&amp;lt;/code&amp;gt; and uncheck &amp;lt;code&amp;gt;Publish on Pypi Test&amp;lt;/code&amp;gt; if needed&amp;quot;)&lt;br /&gt;
validateDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button&amp;quot;)&lt;br /&gt;
waitDeploy(&amp;quot;Wait for deployment to complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
padBuild---repo&lt;br /&gt;
repo--&amp;gt;select&lt;br /&gt;
select--&amp;gt;runwf&lt;br /&gt;
runwf--&amp;gt;branch&lt;br /&gt;
branch--&amp;gt;options&lt;br /&gt;
options--&amp;gt;validate&lt;br /&gt;
validate--&amp;gt;wait:::WAIT&lt;br /&gt;
linkStyle 0 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padRelease---release&lt;br /&gt;
release--&amp;gt;complete&lt;br /&gt;
complete--&amp;gt;dedraft&lt;br /&gt;
dedraft--&amp;gt;update&lt;br /&gt;
linkStyle 7 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padDeploy:::INVISIBLE---repoDeploy&lt;br /&gt;
repoDeploy--&amp;gt;selectDeploy&lt;br /&gt;
selectDeploy--&amp;gt;runwfDeploy&lt;br /&gt;
runwfDeploy--&amp;gt;choiceDeploy&lt;br /&gt;
choiceDeploy--&amp;gt;validateDeploy&lt;br /&gt;
validateDeploy--&amp;gt;waitDeploy:::WAIT&lt;br /&gt;
linkStyle 11 stroke:#fff,color:blue,stroke-width:0px;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build-- &amp;lt;i&amp;gt;if success&amp;lt;/i&amp;gt; --&amp;gt;Release&lt;br /&gt;
Release-- &amp;lt;i&amp;gt;if success &amp;amp; if needed&amp;lt;/i&amp;gt; --&amp;gt;Deploy&lt;br /&gt;
&lt;br /&gt;
classDef WAIT fill:#ddd;&lt;br /&gt;
classDef DEPS fill:#e4d8ff,stroke:#9488af;&lt;br /&gt;
classDef INVISIBLE fill:#ffffffff,stroke:#ffffffff,stroke-width:0px,font-color:#ffffffff;&lt;br /&gt;
classDef OPTIONAL stroke-dasharray: 5 5;&lt;br /&gt;
&lt;br /&gt;
class Deploy OPTIONAL;&lt;br /&gt;
&lt;br /&gt;
%% Note: padXXX is a poor hack to create a top-margin in subgraph...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A few comments:&lt;br /&gt;
* &amp;lt;code&amp;gt;[bracketed tokens]&amp;lt;/code&amp;gt; refer to data specific to each component, which will be detailed below.&lt;br /&gt;
* Publish part is optional, it will depends on the target&lt;br /&gt;
* &#039;&#039;Caveat: if you provide an already-existing release version number during the process, the workflow will replace the existing release with the newly-built one. This can be what you expected... or not. Be cautious.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Per-target details ==&lt;br /&gt;
&lt;br /&gt;
=== External Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreRender/LuxCoreDeps&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/release.yml &amp;lt;code&amp;gt;LuxCore Dependency Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCoreDeps/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
As a byproduct, External Dependencies are not intended to be deployed, so no Publisher workflow is provided.&lt;br /&gt;
&lt;br /&gt;
=== Python Wheels ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As far as wheels are concerned, in addition to building them, it is also necessary to upload them to [https://pypi.org/ PyPi] (&amp;quot;publish&amp;quot; them), so that they are available for [https://pypi.org/project/pip pip] installation.&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-releaser.yml &amp;lt;code&amp;gt;LuxCore Wheels Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-publisher.yml &amp;lt;code&amp;gt;LuxCore Wheels Publisher&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Prerequisite: you must have released a compatible version of External Dependencies (LuxCoreDeps) before building Python Wheels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Samples ===&lt;br /&gt;
&lt;br /&gt;
As we plan to replace Samples by equivalent Python tools and thus deprecate them, the workflow has been limited to the Release part (no publish).&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/sample-releaser.yml &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
=== BlendLuxCore ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;TODO&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Version Management =&lt;br /&gt;
&lt;br /&gt;
== Semantic Versioning ==&lt;br /&gt;
&lt;br /&gt;
Starting for LuxCore version 2.10.0, we require that LuxCoreRender applies [https://semver.org/ Semantic Versioning]. Please strictly enforce this rule when incrementing version numbers.&lt;br /&gt;
&lt;br /&gt;
Remark: component versions does not have to be synced. For instance, in strict application of the standard, the newly created LuxCoreDeps will start at 1.0.0, while at the same time LuxCore is already at 2.10.0&lt;br /&gt;
&lt;br /&gt;
== Dependency Version pointer ==&lt;br /&gt;
&lt;br /&gt;
To make LuxCore know which version of dependencies it must be built against, we use a pointer.&lt;br /&gt;
&lt;br /&gt;
This pointer is stored in the file &amp;lt;code&amp;gt;build-helpers/build-settings.json&amp;lt;/code&amp;gt;, under the path &amp;lt;code&amp;gt;Dependencies/release&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you keep it up-to-date when you upgrade LuxCore components.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2683</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2683"/>
		<updated>2026-04-24T04:19:15Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Run */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender&#039;s build system has been significantly modified for version 2.10. This document therefore renders obsolete all [[Building_LuxCoreRender_(legacy)|previous documents]] related to the compilation of older versions (&amp;lt;=2.9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;TL;DR&amp;lt;/b&amp;gt; If you are just interested in a quick, local (but platform limited) compilation of LuxCore C++ samples or Python wheels, you may want to jump directly to [[#Build LuxCore, Samples &amp;amp; Python Wheels | Build LuxCore, Samples &amp;amp; Python Wheels]].&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Audience =&lt;br /&gt;
&lt;br /&gt;
This document is intended for:&lt;br /&gt;
* LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;&lt;br /&gt;
* Developers wishing to contribute to the project;&lt;br /&gt;
* External package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;&lt;br /&gt;
&lt;br /&gt;
This document assumes that the reader is skilled in the following areas:&lt;br /&gt;
* C/C++ compilation&lt;br /&gt;
* [https://cmake.org/ cmake]&lt;br /&gt;
* [https://git-scm.com/ git]&lt;br /&gt;
* [https://docs.github.com/en/actions/writing-workflows Github Workflows]&lt;br /&gt;
* [https://packaging.python.org/en/latest/ Python Packaging], including [https://realpython.com/python-wheels/ Python Wheels format]&lt;br /&gt;
&lt;br /&gt;
Familiarity with [https://conan.io/ Conan] dependency manager may also help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries on the official [https://luxcorerender.org/download/ Download] page.&lt;br /&gt;
&lt;br /&gt;
= Build Targets =&lt;br /&gt;
&lt;br /&gt;
== Synoptic ==&lt;br /&gt;
LuxCoreRender contains several build targets, below represented with dependency links:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:&lt;br /&gt;
%%{&lt;br /&gt;
  init: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: &amp;quot;forest&amp;quot;,&lt;br /&gt;
    &amp;quot;logLevel&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
    &amp;quot;flowchart&amp;quot;: {&amp;quot;curve&amp;quot;: &amp;quot;basis&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart LR;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classDef TYPE font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGET font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCOREDEPS fill:#ffe8ff,stroke:#9488af,font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGETDEPS fill:#e4d8ff,stroke:#9488af,font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCORE fill:#bbceff,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETLUXCORE fill:#7799ee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef SAMPLES fill:#ffffdd,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETSAMPLES fill:#eeeecc,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef NEUTRAL fill:#fafafa,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETNEUTRAL fill:#eeeeee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef EXTDEP fill:#00000000,stroke:#00000000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph Dependencies[External Dependencies]&lt;br /&gt;
deps(LuxCore Dependencies)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class Dependencies LUXCOREDEPS;&lt;br /&gt;
class deps TARGETDEPS;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph LuxCore&lt;br /&gt;
lux(luxcore.so/.dll)&lt;br /&gt;
luxa(luxcore.a)&lt;br /&gt;
end&lt;br /&gt;
class LuxCore LUXCORE;&lt;br /&gt;
class lux TARGETLUXCORE;&lt;br /&gt;
class luxa TARGETLUXCORE;&lt;br /&gt;
&lt;br /&gt;
subgraph Python_Wheels[Python Wheels]&lt;br /&gt;
pylux(pyluxcore.so/.dll)&lt;br /&gt;
wheels(LuxCore Python Wheels)&lt;br /&gt;
end&lt;br /&gt;
class Python_Wheels TYPE;&lt;br /&gt;
class pylux TARGET;&lt;br /&gt;
class wheels TARGET;&lt;br /&gt;
&lt;br /&gt;
subgraph Samples&lt;br /&gt;
luxcoreui(luxcoreui)&lt;br /&gt;
luxcoreconsole(luxcoreconsole)&lt;br /&gt;
end&lt;br /&gt;
class Samples SAMPLES;&lt;br /&gt;
class luxcoreui TARGETSAMPLES;&lt;br /&gt;
class luxcoreconsole TARGETSAMPLES;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph PyLuxCoreTools&lt;br /&gt;
pyluxcon(pyluxcoreconsole)&lt;br /&gt;
pyluxothers(...)&lt;br /&gt;
end&lt;br /&gt;
class PyLuxCoreTools NEUTRAL;&lt;br /&gt;
class pyluxcon TARGETNEUTRAL;&lt;br /&gt;
class pyluxothers TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
subgraph Plugins[Python Plugins]&lt;br /&gt;
blc(BlendLuxCore)&lt;br /&gt;
otherplugins(...)&lt;br /&gt;
end&lt;br /&gt;
class blc TARGETNEUTRAL;&lt;br /&gt;
class otherplugins TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
class Plugins NEUTRAL;&lt;br /&gt;
&lt;br /&gt;
%% Warning: order matters&lt;br /&gt;
deps--&amp;gt;lux&lt;br /&gt;
deps--&amp;gt;luxa&lt;br /&gt;
deps--&amp;gt;luxcoreui&lt;br /&gt;
deps--&amp;gt;luxcoreconsole&lt;br /&gt;
&lt;br /&gt;
luxa---&amp;gt;pylux&lt;br /&gt;
lux--&amp;gt;luxcoreui&lt;br /&gt;
lux--&amp;gt;luxcoreconsole&lt;br /&gt;
deps--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pylux--&amp;gt;wheels&lt;br /&gt;
wheels-. runtime .-&amp;gt;blc&lt;br /&gt;
wheels-. runtime .-&amp;gt;otherplugins&lt;br /&gt;
&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxcon&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxothers&lt;br /&gt;
&lt;br /&gt;
Python:::EXTDEP--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Mermaid version: 8.14.0&lt;br /&gt;
%% https://github.com/mermaid-js/mermaid/blob/8.14.0/src/defaultConfig.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target !! Source Repository !! Content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;External Dependencies&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;] || A bundled Conan cache populated with LuxCoreRender external dependency binaries, built from sources. Please refer to [https://github.com/LuxCoreRender/LuxCoreDeps/blob/main/README.md LuxCoreDeps README] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;LuxCore&amp;lt;/b&amp;gt; || [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || LuxCore core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Sample C++ programs, illustrating luxcore use, namely &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python bindings of core binaries, in the form of Python wheels (1 per pair Platform/Python version).&amp;lt;/br&amp;gt; As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Plugins&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/BlendLuxCore &amp;lt;code&amp;gt;BlendLuxCore&amp;lt;/code&amp;gt;] etc. || Plugins to expose LuxCore in various external applications, notably Blender. &amp;lt;/br&amp;gt; Written in Python and relying on Python Wheels as runtime dependency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;PyLuxCoreTools&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python LuxCore Tools: set of command line tools based on pyluxcore, written in Python.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Targeted platforms ==&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender aims at being available on the following 4 platforms:&lt;br /&gt;
* Linux (glibc 2.28+)&lt;br /&gt;
* Windows&lt;br /&gt;
* MacOS Intel (&amp;gt;=10.15)&lt;br /&gt;
* MacOS Arm (&amp;gt;=12.0)&lt;br /&gt;
&lt;br /&gt;
For Python-related targets, LuxCoreRender aims at being declined for [https://devguide.python.org/versions all Python versions supported at a given time].&lt;br /&gt;
&lt;br /&gt;
= Workflow Types =&lt;br /&gt;
&lt;br /&gt;
We distinguish between two types of build workflows:&lt;br /&gt;
* Developer workflows&lt;br /&gt;
* Publisher workflows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Developer Workflows | Developer workflows]]&#039;&#039; are designed for development, debugging and test steps.&lt;br /&gt;
&lt;br /&gt;
Their purpose is to allow development and verify the code is ready for publication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Publisher Workflows | Publisher workflows]]&#039;&#039; are designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components.&lt;br /&gt;
&lt;br /&gt;
They exclusively take place in a CI/CD Github pipeline.&lt;br /&gt;
&lt;br /&gt;
These workflows are not designed for debugging or testing the underlying code. Execution of these workflows assumes that the development phase has been correctly completed and the underlying code is ready for final build and release. See [[#Developer Workflows | Developer Workflows]] to learn how to get code ready for final build.&lt;br /&gt;
&lt;br /&gt;
Running these workflows require users to be granted of extended rights on LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
= Developer Workflows =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need several build tools installed and referenced in the PATH.&lt;br /&gt;
&lt;br /&gt;
First, ensure you have a suitable toolchain:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OS !! Compiler !! Minimal version&lt;br /&gt;
|-&lt;br /&gt;
| Windows || MSVC || 194x latest version&lt;br /&gt;
|-&lt;br /&gt;
| Linux|| gcc || 14&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Intel|| XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Arm || XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toolchain compliance is a very sensitive condition for a successful build. Before filing any claim, please check that your toolchain complies with the above requirements.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then ensure the following software is also installed and available in your PATH:&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/ Git]&lt;br /&gt;
* [https://cli.github.com/ Github CLI] (optional but recommended - for dependency signature checking)&lt;br /&gt;
* [https://www.python.org/ Python 3] - any [https://devguide.python.org/versions/ currently supported version]&lt;br /&gt;
* [https://conan.io Conan] latest version (pip install conan)&lt;br /&gt;
* [https://github.com/pypa/wheel/tree/main Wheel] latest version (pip install wheel)&lt;br /&gt;
* [https://cmake.org/ CMake] &amp;gt;= 3.29&lt;br /&gt;
* [https://github.com/nektos/act nektos/act] (optional but recommended - for local build based on Github workflows)&lt;br /&gt;
* [https://pypi.org/project/repairwheel repairwheel] (optional but recommended - for local build of test wheels)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platform specifics:&lt;br /&gt;
* For Windows, ensure the command line is configured for building (&amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;).&lt;br /&gt;
* For Linux, you&#039;ll need &amp;lt;code&amp;gt;pkgconfig&amp;lt;/code&amp;gt; in addition.&lt;br /&gt;
* For MacOS, you&#039;ll need to ensure CC and CXX point to LLVM clang/clang++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Accounts&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Github account&#039;&#039; is mandatory for LuxCore development.&lt;br /&gt;
&lt;br /&gt;
Following accounts are also recommended, in order to get in touch with LuxCore community:&lt;br /&gt;
* [https://forums.luxcorerender.org/ LuxCoreRender Forums]&lt;br /&gt;
* [https://discord.gg/chPGsKV LuxCoreRender Discord channel]&lt;br /&gt;
&lt;br /&gt;
== General Developer Workflow ==&lt;br /&gt;
&lt;br /&gt;
To compile and verify LuxCore component modifications in development process, there are 3 stages:&lt;br /&gt;
* Local plain build: only run build system (cmake) on developer computer&lt;br /&gt;
* Local Continuous Integration build: run full Continuous Integration workflow on developer computer&lt;br /&gt;
* Server Continuous Integration build: run full Continuous Integration workflow on server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Local plain build&amp;lt;/i&amp;gt; is generally faster than other builds and does not require to commit changes beforehand. Plain build installs a minimal build configuration (dependencies), but heavily relies on computer build environment for the rest (build tools, system libraries etc.). As a counterpart, it builds only for the platform where it is executed and can be significantly altered by local conditions (build tools local versions, dependency local versions etc.), thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;LocalCI &amp;lt;/i&amp;gt; is generally faster than Server build, but slower than local plain build. CI workflow installs a complete build environment (compilers, sdk, build tools, containers, dependencies etc.) before running build system. It does not require to commit changes beforehand. However, it builds only for the platform where it is executed, thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;I&amp;gt;Server CI&amp;lt;/i&amp;gt;, if successful, should guarantee success when publishing, as it occurs in conditions similar to release workflow (all platforms, complete build environment). As a counterpart, it is generally significantly slower than local builds and also implies to commit and push changes beforehand, even if the code is in unstable state.&lt;br /&gt;
&lt;br /&gt;
The recommended workflow thus strives to make the most of all stages:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart TD;&lt;br /&gt;
&lt;br /&gt;
fork(Fork Source repository in your own Github space)&lt;br /&gt;
clone(&amp;quot;Clone your fork locally&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git clone...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
devel(Make modifications in your local fork)&lt;br /&gt;
localBuild(&amp;quot;&amp;lt;b&amp;gt;Run local plain build&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;...&amp;quot;)&lt;br /&gt;
localCI(&amp;quot;&amp;lt;b&amp;gt;Run local CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
git(&amp;quot;Commit, Rebase &amp;amp; Push&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git ...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
serverCI(&amp;lt;b&amp;gt;Run server CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;Github workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
PR(PR your changes to Source repository)&lt;br /&gt;
&lt;br /&gt;
fork--&amp;gt;clone&lt;br /&gt;
clone--&amp;gt;devel&lt;br /&gt;
devel--&amp;gt;localBuild&lt;br /&gt;
localBuild--&amp;gt;localCI&lt;br /&gt;
localCI-- &amp;quot;&amp;lt;i&amp;gt;Success&amp;lt;/br&amp;gt;(including debug &amp;amp; tests)&amp;lt;/i&amp;gt;&amp;quot; --&amp;gt;git&lt;br /&gt;
git--&amp;gt;serverCI&lt;br /&gt;
serverCI-- &amp;lt;i&amp;gt;Success&amp;lt;/i&amp;gt; --&amp;gt;PR&lt;br /&gt;
&lt;br /&gt;
localBuild &amp;amp; localCI &amp;amp; serverCI ----&amp;gt; |&amp;lt;i&amp;gt;Failure&amp;lt;/i&amp;gt;| devel&lt;br /&gt;
&lt;br /&gt;
classDef BUILD fill:#acc,stroke-width:4px;&lt;br /&gt;
class localBuild BUILD;&lt;br /&gt;
class localCI BUILD;&lt;br /&gt;
class serverCI BUILD;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the common process between all components. Each step will then be adapted to each component, as explained below.&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
* Running local CI relies on [https://github.com/nektos/act &amp;lt;code&amp;gt;nektos/act&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Rebase must be made against upstream directory (&amp;lt;code&amp;gt;git pull --rebase upstream &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;)before pushing&lt;br /&gt;
* Push must be made towards developer own fork. Caveat: do not try to push directly to upstream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build External Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
Dependency local plain build is possible but:&lt;br /&gt;
* Local plain build IS NOT THE RECOMMENDED BUILD for final deps. This build is solely intended for intermediary development and debugging. No support will be provided when used out-of-scope.&lt;br /&gt;
* Local plain build has only be tested on Linux, with gcc &amp;gt;=14. For other platforms, adaptations should be necessary (contributions welcome). &lt;br /&gt;
* Local plain build is much impacted by local particulars (local compiler version, dependencies already in cache or in system dirs etc.) and therefore does not guarantee further success for other (recommended) builds.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
In addition with general [[#Prerequisites_2 | Prerequisites]], you&#039;ll need the OneAPI ISPC compiler.&lt;br /&gt;
&lt;br /&gt;
==== Conan cache interaction ====&lt;br /&gt;
&lt;br /&gt;
The build relies on the local Conan cache, which will be modified by the process. You may want to make a copy beforehand.&lt;br /&gt;
&lt;br /&gt;
In some scenarios, you may also want to reset your Conan cache (warning: may remove files unrelated to LuxCoreDeps):&lt;br /&gt;
&amp;lt;pre&amp;gt;conan remove -c &amp;quot;*&amp;quot;  # Be careful: may remove packages unrelated to LuxCoreDeps!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Run ====&lt;br /&gt;
&lt;br /&gt;
To run a plain local build, run the following statements in a console, from the root of LuxCoreDeps repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export RUNNER_OS=&amp;lt;os&amp;gt;&lt;br /&gt;
export RUNNER_ARCH=&amp;lt;arch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LUXDEPS_VERSION=test&lt;br /&gt;
export GCC_VERSION=14   # Note: even for gcc &amp;gt; 14&lt;br /&gt;
export WORKSPACE=.&lt;br /&gt;
export CXX_VERSION=20&lt;br /&gt;
export CMAKE_POLICY_VERSION_MINIMUM=3.25&lt;br /&gt;
export DEPS_BUILD_TYPE=Release  # Or Debug/RelWithDebInfo/MinSizeRel, if needed&lt;br /&gt;
export cache_dir&lt;br /&gt;
&lt;br /&gt;
./run_conan.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;code&amp;gt;RUNNER_OS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RUNNER_ARCH&amp;lt;/code&amp;gt; in:&lt;br /&gt;
* &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
reflecting your build platform.&lt;br /&gt;
&lt;br /&gt;
No detection is made (compiler, OS, arch...) . You&#039;ll have to do it on your own and set environment variables accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
Conan will produce a bunch of scripts in the root of LuxCoreDeps repo. You can clean them with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt; ./utils/clean-conan-files.sh &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; on workflows located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder, for instance &amp;lt;code&amp;gt;.github/workflows/build.yml&amp;lt;/code&amp;gt; workflow.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more convenience, a wrapper script is also provided in &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt; repository (Linux only, at the moment): &amp;lt;pre&amp;gt;./utils/local-CI-build.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This process relies on the following Github workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/checker.yml &amp;lt;code&amp;gt;LuxCore Dependency Checker&amp;lt;/code&amp;gt;].&lt;br /&gt;
&amp;lt;/br&amp;gt;Important points:&lt;br /&gt;
* Your changes must have been committed and pushed to repository before.&lt;br /&gt;
* The Checker workflow is actually also triggered on push event, so you may not have to run it by yourself&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
== Build LuxCore, Samples &amp;amp; Python Wheels ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First, we will assume you have correctly completed the [[#Prerequisites_2 | Prerequisites]]. &lt;br /&gt;
&lt;br /&gt;
Second, we will also assume you&#039;ve already git-cloned LuxCore on your local machine, opened a terminal, changed directory to LuxCore folder and git-checked out the branch that you want to build (+ for Windows: initialized build environment with &amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Basic build ====&lt;br /&gt;
&lt;br /&gt;
Our build system internally relies on &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt; but, for more convenience, everything has been wrapped into &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-like statements.&lt;br /&gt;
&lt;br /&gt;
So, to build LuxCore, one just have to enter the following magic words:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make deps&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should retrieve and install LuxCore dependencies, configure the project and run the build. That&#039;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For subsequent builds, if no modification have been made to dependencies, you&#039;ll just have to re-enter: &amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Specific targets ====&lt;br /&gt;
&lt;br /&gt;
If you want to target a specific component, you can replace the above plain &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; by one of the following verbs:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make pyluxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreconsole&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starting from version 2.11, this method can build a &amp;quot;test wheel&amp;quot;. This is a simplified wheel, only for current platform and current Python version, for testing purpose. The test wheel is particularly useful for developing/debugging LuxCore/BlendLuxCore integration.&lt;br /&gt;
The verb is:&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also build Doxygen documentation with the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make doc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Build type ====&lt;br /&gt;
&lt;br /&gt;
By default, this method builds a release version, striped from all symbols. If you want to build a debug version, enter the following before any &amp;lt;code&amp;gt;make ...&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Local dependency set ====&lt;br /&gt;
&lt;br /&gt;
It is possible to use a local dependency set, rather than relying on automatic downloading. It is especially useful for developing/debugging of LuxCoreDeps/LuxCore integration. In this case, one can replace the &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt; statement by the following one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m build-system.luxmake.deps --local &amp;lt;path/to/local/deps&amp;gt; --release &amp;lt;release&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: &amp;lt;code&amp;gt;&amp;lt;release&amp;gt;&amp;lt;/code&amp;gt; is the release tag used by your local dependency set. If you build this set locally, it should likely be &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
You can remove build outputs with one of the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
The former will remove build files, however preserving dependencies. &lt;br /&gt;
The latter will remove everything and will require to reinstall dependencies (&amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This method is complementary to Local plain build, with the following additional capabilities:&lt;br /&gt;
* test the LuxCore build in an environment close to the release environment (manylinux container, for instance)&lt;br /&gt;
* can build wheels&lt;br /&gt;
* debug any changes made to the build workflow&lt;br /&gt;
&lt;br /&gt;
It consists in running Github workflows locally, via &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;. Github workflows are located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; invokation can be made on command line but, for convenience, a wrapper script is provided (for Linux): &amp;lt;pre&amp;gt;./build-helpers/debug/debug_wheels.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Caveat: this build can produce wheels, but only for the host platform (no cross-compiling).&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
The process is nearly the same as publisher build, but the release steps are skipped. For that purpose, another Github workflow has to be executed: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-builder.yml &amp;lt;code&amp;gt;LuxCore Python Wheels Builder&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Please note that your changes must have been committed to repository before running the workflow.&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
= Publisher Workflows =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
For these workflows, a Github account is required, with extended rights on the source repositories.&lt;br /&gt;
&lt;br /&gt;
== General Workflow ==&lt;br /&gt;
&lt;br /&gt;
The general workflow for publishing is in 3 parts:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
flowchart TD;&lt;br /&gt;
subgraph Build[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;BUILD &amp;amp; RELEASE DRAFT &amp;lt;/br&amp;gt;(Run Releaser workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padBuild(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
repo(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;Actions menu&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
select(&amp;quot;Select &amp;lt;code&amp;gt;[Releaser workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwf(Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button, in the upper-right corner)&lt;br /&gt;
branch(Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt; in drop-down menu)&lt;br /&gt;
options(Set workflow options)&lt;br /&gt;
validate(Click &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
wait(Wait for build to complete)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Release[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;MAKE FINAL RELEASE&amp;lt;/br&amp;gt;(Switch release to final status)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padRelease(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
release(&amp;quot;Open &amp;lt;code&amp;gt;[Release folder]&amp;lt;/code&amp;gt;,&amp;lt;/br&amp;gt; find the newly-built release (in Draft mode) &amp;lt;/br&amp;gt; and edit it&amp;quot;)&lt;br /&gt;
complete(Add relevant information: change log, comments on version etc.)&lt;br /&gt;
dedraft(Unset &amp;lt;code&amp;gt;Draft&amp;lt;/code&amp;gt; checkbox)&lt;br /&gt;
update(Click &amp;lt;code&amp;gt;Publish release&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Update release&amp;lt;/code&amp;gt; to finalize)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Deploy[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;PUBLISH&amp;lt;/br&amp;gt;(Run Publisher workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padDeploy(&amp;quot; &amp;quot;)&lt;br /&gt;
repoDeploy(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;[Actions menu]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
selectDeploy(&amp;quot;Select &amp;lt;code&amp;gt;[Publisher workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwfDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; drop-down button, in the upper-right corner&amp;quot;)&lt;br /&gt;
choiceDeploy(&amp;quot;Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt;, set the &amp;lt;code&amp;gt;Tag to publish&amp;lt;/code&amp;gt; and uncheck &amp;lt;code&amp;gt;Publish on Pypi Test&amp;lt;/code&amp;gt; if needed&amp;quot;)&lt;br /&gt;
validateDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button&amp;quot;)&lt;br /&gt;
waitDeploy(&amp;quot;Wait for deployment to complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
padBuild---repo&lt;br /&gt;
repo--&amp;gt;select&lt;br /&gt;
select--&amp;gt;runwf&lt;br /&gt;
runwf--&amp;gt;branch&lt;br /&gt;
branch--&amp;gt;options&lt;br /&gt;
options--&amp;gt;validate&lt;br /&gt;
validate--&amp;gt;wait:::WAIT&lt;br /&gt;
linkStyle 0 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padRelease---release&lt;br /&gt;
release--&amp;gt;complete&lt;br /&gt;
complete--&amp;gt;dedraft&lt;br /&gt;
dedraft--&amp;gt;update&lt;br /&gt;
linkStyle 7 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padDeploy:::INVISIBLE---repoDeploy&lt;br /&gt;
repoDeploy--&amp;gt;selectDeploy&lt;br /&gt;
selectDeploy--&amp;gt;runwfDeploy&lt;br /&gt;
runwfDeploy--&amp;gt;choiceDeploy&lt;br /&gt;
choiceDeploy--&amp;gt;validateDeploy&lt;br /&gt;
validateDeploy--&amp;gt;waitDeploy:::WAIT&lt;br /&gt;
linkStyle 11 stroke:#fff,color:blue,stroke-width:0px;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build-- &amp;lt;i&amp;gt;if success&amp;lt;/i&amp;gt; --&amp;gt;Release&lt;br /&gt;
Release-- &amp;lt;i&amp;gt;if success &amp;amp; if needed&amp;lt;/i&amp;gt; --&amp;gt;Deploy&lt;br /&gt;
&lt;br /&gt;
classDef WAIT fill:#ddd;&lt;br /&gt;
classDef DEPS fill:#e4d8ff,stroke:#9488af;&lt;br /&gt;
classDef INVISIBLE fill:#ffffffff,stroke:#ffffffff,stroke-width:0px,font-color:#ffffffff;&lt;br /&gt;
classDef OPTIONAL stroke-dasharray: 5 5;&lt;br /&gt;
&lt;br /&gt;
class Deploy OPTIONAL;&lt;br /&gt;
&lt;br /&gt;
%% Note: padXXX is a poor hack to create a top-margin in subgraph...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A few comments:&lt;br /&gt;
* &amp;lt;code&amp;gt;[bracketed tokens]&amp;lt;/code&amp;gt; refer to data specific to each component, which will be detailed below.&lt;br /&gt;
* Publish part is optional, it will depends on the target&lt;br /&gt;
* &#039;&#039;Caveat: if you provide an already-existing release version number during the process, the workflow will replace the existing release with the newly-built one. This can be what you expected... or not. Be cautious.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Per-target details ==&lt;br /&gt;
&lt;br /&gt;
=== External Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreRender/LuxCoreDeps&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/release.yml &amp;lt;code&amp;gt;LuxCore Dependency Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCoreDeps/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
As a byproduct, External Dependencies are not intended to be deployed, so no Publisher workflow is provided.&lt;br /&gt;
&lt;br /&gt;
=== Python Wheels ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As far as wheels are concerned, in addition to building them, it is also necessary to upload them to [https://pypi.org/ PyPi] (&amp;quot;publish&amp;quot; them), so that they are available for [https://pypi.org/project/pip pip] installation.&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-releaser.yml &amp;lt;code&amp;gt;LuxCore Wheels Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-publisher.yml &amp;lt;code&amp;gt;LuxCore Wheels Publisher&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Prerequisite: you must have released a compatible version of External Dependencies (LuxCoreDeps) before building Python Wheels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Samples ===&lt;br /&gt;
&lt;br /&gt;
As we plan to replace Samples by equivalent Python tools and thus deprecate them, the workflow has been limited to the Release part (no publish).&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/sample-releaser.yml &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
=== BlendLuxCore ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;TODO&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Version Management =&lt;br /&gt;
&lt;br /&gt;
== Semantic Versioning ==&lt;br /&gt;
&lt;br /&gt;
Starting for LuxCore version 2.10.0, we require that LuxCoreRender applies [https://semver.org/ Semantic Versioning]. Please strictly enforce this rule when incrementing version numbers.&lt;br /&gt;
&lt;br /&gt;
Remark: component versions does not have to be synced. For instance, in strict application of the standard, the newly created LuxCoreDeps will start at 1.0.0, while at the same time LuxCore is already at 2.10.0&lt;br /&gt;
&lt;br /&gt;
== Dependency Version pointer ==&lt;br /&gt;
&lt;br /&gt;
To make LuxCore know which version of dependencies it must be built against, we use a pointer.&lt;br /&gt;
&lt;br /&gt;
This pointer is stored in the file &amp;lt;code&amp;gt;build-helpers/build-settings.json&amp;lt;/code&amp;gt;, under the path &amp;lt;code&amp;gt;Dependencies/release&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you keep it up-to-date when you upgrade LuxCore components.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2682</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2682"/>
		<updated>2026-04-24T04:18:51Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Run */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender&#039;s build system has been significantly modified for version 2.10. This document therefore renders obsolete all [[Building_LuxCoreRender_(legacy)|previous documents]] related to the compilation of older versions (&amp;lt;=2.9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;TL;DR&amp;lt;/b&amp;gt; If you are just interested in a quick, local (but platform limited) compilation of LuxCore C++ samples or Python wheels, you may want to jump directly to [[#Build LuxCore, Samples &amp;amp; Python Wheels | Build LuxCore, Samples &amp;amp; Python Wheels]].&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Audience =&lt;br /&gt;
&lt;br /&gt;
This document is intended for:&lt;br /&gt;
* LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;&lt;br /&gt;
* Developers wishing to contribute to the project;&lt;br /&gt;
* External package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;&lt;br /&gt;
&lt;br /&gt;
This document assumes that the reader is skilled in the following areas:&lt;br /&gt;
* C/C++ compilation&lt;br /&gt;
* [https://cmake.org/ cmake]&lt;br /&gt;
* [https://git-scm.com/ git]&lt;br /&gt;
* [https://docs.github.com/en/actions/writing-workflows Github Workflows]&lt;br /&gt;
* [https://packaging.python.org/en/latest/ Python Packaging], including [https://realpython.com/python-wheels/ Python Wheels format]&lt;br /&gt;
&lt;br /&gt;
Familiarity with [https://conan.io/ Conan] dependency manager may also help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries on the official [https://luxcorerender.org/download/ Download] page.&lt;br /&gt;
&lt;br /&gt;
= Build Targets =&lt;br /&gt;
&lt;br /&gt;
== Synoptic ==&lt;br /&gt;
LuxCoreRender contains several build targets, below represented with dependency links:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:&lt;br /&gt;
%%{&lt;br /&gt;
  init: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: &amp;quot;forest&amp;quot;,&lt;br /&gt;
    &amp;quot;logLevel&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
    &amp;quot;flowchart&amp;quot;: {&amp;quot;curve&amp;quot;: &amp;quot;basis&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart LR;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classDef TYPE font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGET font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCOREDEPS fill:#ffe8ff,stroke:#9488af,font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGETDEPS fill:#e4d8ff,stroke:#9488af,font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCORE fill:#bbceff,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETLUXCORE fill:#7799ee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef SAMPLES fill:#ffffdd,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETSAMPLES fill:#eeeecc,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef NEUTRAL fill:#fafafa,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETNEUTRAL fill:#eeeeee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef EXTDEP fill:#00000000,stroke:#00000000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph Dependencies[External Dependencies]&lt;br /&gt;
deps(LuxCore Dependencies)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class Dependencies LUXCOREDEPS;&lt;br /&gt;
class deps TARGETDEPS;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph LuxCore&lt;br /&gt;
lux(luxcore.so/.dll)&lt;br /&gt;
luxa(luxcore.a)&lt;br /&gt;
end&lt;br /&gt;
class LuxCore LUXCORE;&lt;br /&gt;
class lux TARGETLUXCORE;&lt;br /&gt;
class luxa TARGETLUXCORE;&lt;br /&gt;
&lt;br /&gt;
subgraph Python_Wheels[Python Wheels]&lt;br /&gt;
pylux(pyluxcore.so/.dll)&lt;br /&gt;
wheels(LuxCore Python Wheels)&lt;br /&gt;
end&lt;br /&gt;
class Python_Wheels TYPE;&lt;br /&gt;
class pylux TARGET;&lt;br /&gt;
class wheels TARGET;&lt;br /&gt;
&lt;br /&gt;
subgraph Samples&lt;br /&gt;
luxcoreui(luxcoreui)&lt;br /&gt;
luxcoreconsole(luxcoreconsole)&lt;br /&gt;
end&lt;br /&gt;
class Samples SAMPLES;&lt;br /&gt;
class luxcoreui TARGETSAMPLES;&lt;br /&gt;
class luxcoreconsole TARGETSAMPLES;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph PyLuxCoreTools&lt;br /&gt;
pyluxcon(pyluxcoreconsole)&lt;br /&gt;
pyluxothers(...)&lt;br /&gt;
end&lt;br /&gt;
class PyLuxCoreTools NEUTRAL;&lt;br /&gt;
class pyluxcon TARGETNEUTRAL;&lt;br /&gt;
class pyluxothers TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
subgraph Plugins[Python Plugins]&lt;br /&gt;
blc(BlendLuxCore)&lt;br /&gt;
otherplugins(...)&lt;br /&gt;
end&lt;br /&gt;
class blc TARGETNEUTRAL;&lt;br /&gt;
class otherplugins TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
class Plugins NEUTRAL;&lt;br /&gt;
&lt;br /&gt;
%% Warning: order matters&lt;br /&gt;
deps--&amp;gt;lux&lt;br /&gt;
deps--&amp;gt;luxa&lt;br /&gt;
deps--&amp;gt;luxcoreui&lt;br /&gt;
deps--&amp;gt;luxcoreconsole&lt;br /&gt;
&lt;br /&gt;
luxa---&amp;gt;pylux&lt;br /&gt;
lux--&amp;gt;luxcoreui&lt;br /&gt;
lux--&amp;gt;luxcoreconsole&lt;br /&gt;
deps--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pylux--&amp;gt;wheels&lt;br /&gt;
wheels-. runtime .-&amp;gt;blc&lt;br /&gt;
wheels-. runtime .-&amp;gt;otherplugins&lt;br /&gt;
&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxcon&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxothers&lt;br /&gt;
&lt;br /&gt;
Python:::EXTDEP--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Mermaid version: 8.14.0&lt;br /&gt;
%% https://github.com/mermaid-js/mermaid/blob/8.14.0/src/defaultConfig.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target !! Source Repository !! Content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;External Dependencies&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;] || A bundled Conan cache populated with LuxCoreRender external dependency binaries, built from sources. Please refer to [https://github.com/LuxCoreRender/LuxCoreDeps/blob/main/README.md LuxCoreDeps README] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;LuxCore&amp;lt;/b&amp;gt; || [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || LuxCore core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Sample C++ programs, illustrating luxcore use, namely &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python bindings of core binaries, in the form of Python wheels (1 per pair Platform/Python version).&amp;lt;/br&amp;gt; As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Plugins&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/BlendLuxCore &amp;lt;code&amp;gt;BlendLuxCore&amp;lt;/code&amp;gt;] etc. || Plugins to expose LuxCore in various external applications, notably Blender. &amp;lt;/br&amp;gt; Written in Python and relying on Python Wheels as runtime dependency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;PyLuxCoreTools&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python LuxCore Tools: set of command line tools based on pyluxcore, written in Python.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Targeted platforms ==&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender aims at being available on the following 4 platforms:&lt;br /&gt;
* Linux (glibc 2.28+)&lt;br /&gt;
* Windows&lt;br /&gt;
* MacOS Intel (&amp;gt;=10.15)&lt;br /&gt;
* MacOS Arm (&amp;gt;=12.0)&lt;br /&gt;
&lt;br /&gt;
For Python-related targets, LuxCoreRender aims at being declined for [https://devguide.python.org/versions all Python versions supported at a given time].&lt;br /&gt;
&lt;br /&gt;
= Workflow Types =&lt;br /&gt;
&lt;br /&gt;
We distinguish between two types of build workflows:&lt;br /&gt;
* Developer workflows&lt;br /&gt;
* Publisher workflows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Developer Workflows | Developer workflows]]&#039;&#039; are designed for development, debugging and test steps.&lt;br /&gt;
&lt;br /&gt;
Their purpose is to allow development and verify the code is ready for publication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Publisher Workflows | Publisher workflows]]&#039;&#039; are designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components.&lt;br /&gt;
&lt;br /&gt;
They exclusively take place in a CI/CD Github pipeline.&lt;br /&gt;
&lt;br /&gt;
These workflows are not designed for debugging or testing the underlying code. Execution of these workflows assumes that the development phase has been correctly completed and the underlying code is ready for final build and release. See [[#Developer Workflows | Developer Workflows]] to learn how to get code ready for final build.&lt;br /&gt;
&lt;br /&gt;
Running these workflows require users to be granted of extended rights on LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
= Developer Workflows =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need several build tools installed and referenced in the PATH.&lt;br /&gt;
&lt;br /&gt;
First, ensure you have a suitable toolchain:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OS !! Compiler !! Minimal version&lt;br /&gt;
|-&lt;br /&gt;
| Windows || MSVC || 194x latest version&lt;br /&gt;
|-&lt;br /&gt;
| Linux|| gcc || 14&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Intel|| XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Arm || XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toolchain compliance is a very sensitive condition for a successful build. Before filing any claim, please check that your toolchain complies with the above requirements.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then ensure the following software is also installed and available in your PATH:&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/ Git]&lt;br /&gt;
* [https://cli.github.com/ Github CLI] (optional but recommended - for dependency signature checking)&lt;br /&gt;
* [https://www.python.org/ Python 3] - any [https://devguide.python.org/versions/ currently supported version]&lt;br /&gt;
* [https://conan.io Conan] latest version (pip install conan)&lt;br /&gt;
* [https://github.com/pypa/wheel/tree/main Wheel] latest version (pip install wheel)&lt;br /&gt;
* [https://cmake.org/ CMake] &amp;gt;= 3.29&lt;br /&gt;
* [https://github.com/nektos/act nektos/act] (optional but recommended - for local build based on Github workflows)&lt;br /&gt;
* [https://pypi.org/project/repairwheel repairwheel] (optional but recommended - for local build of test wheels)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platform specifics:&lt;br /&gt;
* For Windows, ensure the command line is configured for building (&amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;).&lt;br /&gt;
* For Linux, you&#039;ll need &amp;lt;code&amp;gt;pkgconfig&amp;lt;/code&amp;gt; in addition.&lt;br /&gt;
* For MacOS, you&#039;ll need to ensure CC and CXX point to LLVM clang/clang++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Accounts&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Github account&#039;&#039; is mandatory for LuxCore development.&lt;br /&gt;
&lt;br /&gt;
Following accounts are also recommended, in order to get in touch with LuxCore community:&lt;br /&gt;
* [https://forums.luxcorerender.org/ LuxCoreRender Forums]&lt;br /&gt;
* [https://discord.gg/chPGsKV LuxCoreRender Discord channel]&lt;br /&gt;
&lt;br /&gt;
== General Developer Workflow ==&lt;br /&gt;
&lt;br /&gt;
To compile and verify LuxCore component modifications in development process, there are 3 stages:&lt;br /&gt;
* Local plain build: only run build system (cmake) on developer computer&lt;br /&gt;
* Local Continuous Integration build: run full Continuous Integration workflow on developer computer&lt;br /&gt;
* Server Continuous Integration build: run full Continuous Integration workflow on server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Local plain build&amp;lt;/i&amp;gt; is generally faster than other builds and does not require to commit changes beforehand. Plain build installs a minimal build configuration (dependencies), but heavily relies on computer build environment for the rest (build tools, system libraries etc.). As a counterpart, it builds only for the platform where it is executed and can be significantly altered by local conditions (build tools local versions, dependency local versions etc.), thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;LocalCI &amp;lt;/i&amp;gt; is generally faster than Server build, but slower than local plain build. CI workflow installs a complete build environment (compilers, sdk, build tools, containers, dependencies etc.) before running build system. It does not require to commit changes beforehand. However, it builds only for the platform where it is executed, thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;I&amp;gt;Server CI&amp;lt;/i&amp;gt;, if successful, should guarantee success when publishing, as it occurs in conditions similar to release workflow (all platforms, complete build environment). As a counterpart, it is generally significantly slower than local builds and also implies to commit and push changes beforehand, even if the code is in unstable state.&lt;br /&gt;
&lt;br /&gt;
The recommended workflow thus strives to make the most of all stages:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart TD;&lt;br /&gt;
&lt;br /&gt;
fork(Fork Source repository in your own Github space)&lt;br /&gt;
clone(&amp;quot;Clone your fork locally&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git clone...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
devel(Make modifications in your local fork)&lt;br /&gt;
localBuild(&amp;quot;&amp;lt;b&amp;gt;Run local plain build&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;...&amp;quot;)&lt;br /&gt;
localCI(&amp;quot;&amp;lt;b&amp;gt;Run local CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
git(&amp;quot;Commit, Rebase &amp;amp; Push&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git ...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
serverCI(&amp;lt;b&amp;gt;Run server CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;Github workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
PR(PR your changes to Source repository)&lt;br /&gt;
&lt;br /&gt;
fork--&amp;gt;clone&lt;br /&gt;
clone--&amp;gt;devel&lt;br /&gt;
devel--&amp;gt;localBuild&lt;br /&gt;
localBuild--&amp;gt;localCI&lt;br /&gt;
localCI-- &amp;quot;&amp;lt;i&amp;gt;Success&amp;lt;/br&amp;gt;(including debug &amp;amp; tests)&amp;lt;/i&amp;gt;&amp;quot; --&amp;gt;git&lt;br /&gt;
git--&amp;gt;serverCI&lt;br /&gt;
serverCI-- &amp;lt;i&amp;gt;Success&amp;lt;/i&amp;gt; --&amp;gt;PR&lt;br /&gt;
&lt;br /&gt;
localBuild &amp;amp; localCI &amp;amp; serverCI ----&amp;gt; |&amp;lt;i&amp;gt;Failure&amp;lt;/i&amp;gt;| devel&lt;br /&gt;
&lt;br /&gt;
classDef BUILD fill:#acc,stroke-width:4px;&lt;br /&gt;
class localBuild BUILD;&lt;br /&gt;
class localCI BUILD;&lt;br /&gt;
class serverCI BUILD;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the common process between all components. Each step will then be adapted to each component, as explained below.&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
* Running local CI relies on [https://github.com/nektos/act &amp;lt;code&amp;gt;nektos/act&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Rebase must be made against upstream directory (&amp;lt;code&amp;gt;git pull --rebase upstream &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;)before pushing&lt;br /&gt;
* Push must be made towards developer own fork. Caveat: do not try to push directly to upstream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build External Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
Dependency local plain build is possible but:&lt;br /&gt;
* Local plain build IS NOT THE RECOMMENDED BUILD for final deps. This build is solely intended for intermediary development and debugging. No support will be provided when used out-of-scope.&lt;br /&gt;
* Local plain build has only be tested on Linux, with gcc &amp;gt;=14. For other platforms, adaptations should be necessary (contributions welcome). &lt;br /&gt;
* Local plain build is much impacted by local particulars (local compiler version, dependencies already in cache or in system dirs etc.) and therefore does not guarantee further success for other (recommended) builds.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
In addition with general [[#Prerequisites_2 | Prerequisites]], you&#039;ll need the OneAPI ISPC compiler.&lt;br /&gt;
&lt;br /&gt;
==== Conan cache interaction ====&lt;br /&gt;
&lt;br /&gt;
The build relies on the local Conan cache, which will be modified by the process. You may want to make a copy beforehand.&lt;br /&gt;
&lt;br /&gt;
In some scenarios, you may also want to reset your Conan cache (warning: may remove files unrelated to LuxCoreDeps):&lt;br /&gt;
&amp;lt;pre&amp;gt;conan remove -c &amp;quot;*&amp;quot;  # Be careful: may remove packages unrelated to LuxCoreDeps!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Run ====&lt;br /&gt;
&lt;br /&gt;
To run a plain local build, run the following statements in a console, from the root of LuxCoreDeps repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
export RUNNER_OS=&amp;lt;os&amp;gt;&lt;br /&gt;
export RUNNER_ARCH=&amp;lt;arch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LUXDEPS_VERSION=test&lt;br /&gt;
export GCC_VERSION=14   # Note: even for gcc &amp;gt; 14&lt;br /&gt;
export WORKSPACE=.&lt;br /&gt;
export CXX_VERSION=20&lt;br /&gt;
export CMAKE_POLICY_VERSION_MINIMUM=3.25&lt;br /&gt;
export DEPS_BUILD_TYPE=Release  # Or Debug/RelWithDebInfo/MinSizeRel, if needed&lt;br /&gt;
export cache_dir&lt;br /&gt;
&lt;br /&gt;
./run_conan.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;code&amp;gt;RUNNER_OS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RUNNER_ARCH&amp;lt;/code&amp;gt; in:&lt;br /&gt;
* &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
reflecting your build platform.&lt;br /&gt;
&lt;br /&gt;
No detection is made (compiler, OS, arch...) . You&#039;ll have to do it on your own and set environment variables accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
Conan will produce a bunch of scripts in the root of LuxCoreDeps repo. You can clean them with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt; ./utils/clean-conan-files.sh &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; on workflows located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder, for instance &amp;lt;code&amp;gt;.github/workflows/build.yml&amp;lt;/code&amp;gt; workflow.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more convenience, a wrapper script is also provided in &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt; repository (Linux only, at the moment): &amp;lt;pre&amp;gt;./utils/local-CI-build.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This process relies on the following Github workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/checker.yml &amp;lt;code&amp;gt;LuxCore Dependency Checker&amp;lt;/code&amp;gt;].&lt;br /&gt;
&amp;lt;/br&amp;gt;Important points:&lt;br /&gt;
* Your changes must have been committed and pushed to repository before.&lt;br /&gt;
* The Checker workflow is actually also triggered on push event, so you may not have to run it by yourself&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
== Build LuxCore, Samples &amp;amp; Python Wheels ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First, we will assume you have correctly completed the [[#Prerequisites_2 | Prerequisites]]. &lt;br /&gt;
&lt;br /&gt;
Second, we will also assume you&#039;ve already git-cloned LuxCore on your local machine, opened a terminal, changed directory to LuxCore folder and git-checked out the branch that you want to build (+ for Windows: initialized build environment with &amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Basic build ====&lt;br /&gt;
&lt;br /&gt;
Our build system internally relies on &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt; but, for more convenience, everything has been wrapped into &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-like statements.&lt;br /&gt;
&lt;br /&gt;
So, to build LuxCore, one just have to enter the following magic words:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make deps&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should retrieve and install LuxCore dependencies, configure the project and run the build. That&#039;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For subsequent builds, if no modification have been made to dependencies, you&#039;ll just have to re-enter: &amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Specific targets ====&lt;br /&gt;
&lt;br /&gt;
If you want to target a specific component, you can replace the above plain &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; by one of the following verbs:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make pyluxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreconsole&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starting from version 2.11, this method can build a &amp;quot;test wheel&amp;quot;. This is a simplified wheel, only for current platform and current Python version, for testing purpose. The test wheel is particularly useful for developing/debugging LuxCore/BlendLuxCore integration.&lt;br /&gt;
The verb is:&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also build Doxygen documentation with the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make doc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Build type ====&lt;br /&gt;
&lt;br /&gt;
By default, this method builds a release version, striped from all symbols. If you want to build a debug version, enter the following before any &amp;lt;code&amp;gt;make ...&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Local dependency set ====&lt;br /&gt;
&lt;br /&gt;
It is possible to use a local dependency set, rather than relying on automatic downloading. It is especially useful for developing/debugging of LuxCoreDeps/LuxCore integration. In this case, one can replace the &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt; statement by the following one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m build-system.luxmake.deps --local &amp;lt;path/to/local/deps&amp;gt; --release &amp;lt;release&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: &amp;lt;code&amp;gt;&amp;lt;release&amp;gt;&amp;lt;/code&amp;gt; is the release tag used by your local dependency set. If you build this set locally, it should likely be &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
You can remove build outputs with one of the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
The former will remove build files, however preserving dependencies. &lt;br /&gt;
The latter will remove everything and will require to reinstall dependencies (&amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This method is complementary to Local plain build, with the following additional capabilities:&lt;br /&gt;
* test the LuxCore build in an environment close to the release environment (manylinux container, for instance)&lt;br /&gt;
* can build wheels&lt;br /&gt;
* debug any changes made to the build workflow&lt;br /&gt;
&lt;br /&gt;
It consists in running Github workflows locally, via &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;. Github workflows are located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; invokation can be made on command line but, for convenience, a wrapper script is provided (for Linux): &amp;lt;pre&amp;gt;./build-helpers/debug/debug_wheels.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Caveat: this build can produce wheels, but only for the host platform (no cross-compiling).&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
The process is nearly the same as publisher build, but the release steps are skipped. For that purpose, another Github workflow has to be executed: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-builder.yml &amp;lt;code&amp;gt;LuxCore Python Wheels Builder&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Please note that your changes must have been committed to repository before running the workflow.&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
= Publisher Workflows =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
For these workflows, a Github account is required, with extended rights on the source repositories.&lt;br /&gt;
&lt;br /&gt;
== General Workflow ==&lt;br /&gt;
&lt;br /&gt;
The general workflow for publishing is in 3 parts:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
flowchart TD;&lt;br /&gt;
subgraph Build[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;BUILD &amp;amp; RELEASE DRAFT &amp;lt;/br&amp;gt;(Run Releaser workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padBuild(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
repo(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;Actions menu&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
select(&amp;quot;Select &amp;lt;code&amp;gt;[Releaser workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwf(Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button, in the upper-right corner)&lt;br /&gt;
branch(Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt; in drop-down menu)&lt;br /&gt;
options(Set workflow options)&lt;br /&gt;
validate(Click &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
wait(Wait for build to complete)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Release[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;MAKE FINAL RELEASE&amp;lt;/br&amp;gt;(Switch release to final status)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padRelease(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
release(&amp;quot;Open &amp;lt;code&amp;gt;[Release folder]&amp;lt;/code&amp;gt;,&amp;lt;/br&amp;gt; find the newly-built release (in Draft mode) &amp;lt;/br&amp;gt; and edit it&amp;quot;)&lt;br /&gt;
complete(Add relevant information: change log, comments on version etc.)&lt;br /&gt;
dedraft(Unset &amp;lt;code&amp;gt;Draft&amp;lt;/code&amp;gt; checkbox)&lt;br /&gt;
update(Click &amp;lt;code&amp;gt;Publish release&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Update release&amp;lt;/code&amp;gt; to finalize)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Deploy[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;PUBLISH&amp;lt;/br&amp;gt;(Run Publisher workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padDeploy(&amp;quot; &amp;quot;)&lt;br /&gt;
repoDeploy(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;[Actions menu]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
selectDeploy(&amp;quot;Select &amp;lt;code&amp;gt;[Publisher workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwfDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; drop-down button, in the upper-right corner&amp;quot;)&lt;br /&gt;
choiceDeploy(&amp;quot;Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt;, set the &amp;lt;code&amp;gt;Tag to publish&amp;lt;/code&amp;gt; and uncheck &amp;lt;code&amp;gt;Publish on Pypi Test&amp;lt;/code&amp;gt; if needed&amp;quot;)&lt;br /&gt;
validateDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button&amp;quot;)&lt;br /&gt;
waitDeploy(&amp;quot;Wait for deployment to complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
padBuild---repo&lt;br /&gt;
repo--&amp;gt;select&lt;br /&gt;
select--&amp;gt;runwf&lt;br /&gt;
runwf--&amp;gt;branch&lt;br /&gt;
branch--&amp;gt;options&lt;br /&gt;
options--&amp;gt;validate&lt;br /&gt;
validate--&amp;gt;wait:::WAIT&lt;br /&gt;
linkStyle 0 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padRelease---release&lt;br /&gt;
release--&amp;gt;complete&lt;br /&gt;
complete--&amp;gt;dedraft&lt;br /&gt;
dedraft--&amp;gt;update&lt;br /&gt;
linkStyle 7 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padDeploy:::INVISIBLE---repoDeploy&lt;br /&gt;
repoDeploy--&amp;gt;selectDeploy&lt;br /&gt;
selectDeploy--&amp;gt;runwfDeploy&lt;br /&gt;
runwfDeploy--&amp;gt;choiceDeploy&lt;br /&gt;
choiceDeploy--&amp;gt;validateDeploy&lt;br /&gt;
validateDeploy--&amp;gt;waitDeploy:::WAIT&lt;br /&gt;
linkStyle 11 stroke:#fff,color:blue,stroke-width:0px;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build-- &amp;lt;i&amp;gt;if success&amp;lt;/i&amp;gt; --&amp;gt;Release&lt;br /&gt;
Release-- &amp;lt;i&amp;gt;if success &amp;amp; if needed&amp;lt;/i&amp;gt; --&amp;gt;Deploy&lt;br /&gt;
&lt;br /&gt;
classDef WAIT fill:#ddd;&lt;br /&gt;
classDef DEPS fill:#e4d8ff,stroke:#9488af;&lt;br /&gt;
classDef INVISIBLE fill:#ffffffff,stroke:#ffffffff,stroke-width:0px,font-color:#ffffffff;&lt;br /&gt;
classDef OPTIONAL stroke-dasharray: 5 5;&lt;br /&gt;
&lt;br /&gt;
class Deploy OPTIONAL;&lt;br /&gt;
&lt;br /&gt;
%% Note: padXXX is a poor hack to create a top-margin in subgraph...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A few comments:&lt;br /&gt;
* &amp;lt;code&amp;gt;[bracketed tokens]&amp;lt;/code&amp;gt; refer to data specific to each component, which will be detailed below.&lt;br /&gt;
* Publish part is optional, it will depends on the target&lt;br /&gt;
* &#039;&#039;Caveat: if you provide an already-existing release version number during the process, the workflow will replace the existing release with the newly-built one. This can be what you expected... or not. Be cautious.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Per-target details ==&lt;br /&gt;
&lt;br /&gt;
=== External Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreRender/LuxCoreDeps&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/release.yml &amp;lt;code&amp;gt;LuxCore Dependency Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCoreDeps/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
As a byproduct, External Dependencies are not intended to be deployed, so no Publisher workflow is provided.&lt;br /&gt;
&lt;br /&gt;
=== Python Wheels ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As far as wheels are concerned, in addition to building them, it is also necessary to upload them to [https://pypi.org/ PyPi] (&amp;quot;publish&amp;quot; them), so that they are available for [https://pypi.org/project/pip pip] installation.&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-releaser.yml &amp;lt;code&amp;gt;LuxCore Wheels Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-publisher.yml &amp;lt;code&amp;gt;LuxCore Wheels Publisher&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Prerequisite: you must have released a compatible version of External Dependencies (LuxCoreDeps) before building Python Wheels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Samples ===&lt;br /&gt;
&lt;br /&gt;
As we plan to replace Samples by equivalent Python tools and thus deprecate them, the workflow has been limited to the Release part (no publish).&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/sample-releaser.yml &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
=== BlendLuxCore ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;TODO&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Version Management =&lt;br /&gt;
&lt;br /&gt;
== Semantic Versioning ==&lt;br /&gt;
&lt;br /&gt;
Starting for LuxCore version 2.10.0, we require that LuxCoreRender applies [https://semver.org/ Semantic Versioning]. Please strictly enforce this rule when incrementing version numbers.&lt;br /&gt;
&lt;br /&gt;
Remark: component versions does not have to be synced. For instance, in strict application of the standard, the newly created LuxCoreDeps will start at 1.0.0, while at the same time LuxCore is already at 2.10.0&lt;br /&gt;
&lt;br /&gt;
== Dependency Version pointer ==&lt;br /&gt;
&lt;br /&gt;
To make LuxCore know which version of dependencies it must be built against, we use a pointer.&lt;br /&gt;
&lt;br /&gt;
This pointer is stored in the file &amp;lt;code&amp;gt;build-helpers/build-settings.json&amp;lt;/code&amp;gt;, under the path &amp;lt;code&amp;gt;Dependencies/release&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you keep it up-to-date when you upgrade LuxCore components.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2681</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2681"/>
		<updated>2026-04-24T04:16:04Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Run */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender&#039;s build system has been significantly modified for version 2.10. This document therefore renders obsolete all [[Building_LuxCoreRender_(legacy)|previous documents]] related to the compilation of older versions (&amp;lt;=2.9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;TL;DR&amp;lt;/b&amp;gt; If you are just interested in a quick, local (but platform limited) compilation of LuxCore C++ samples or Python wheels, you may want to jump directly to [[#Build LuxCore, Samples &amp;amp; Python Wheels | Build LuxCore, Samples &amp;amp; Python Wheels]].&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Audience =&lt;br /&gt;
&lt;br /&gt;
This document is intended for:&lt;br /&gt;
* LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;&lt;br /&gt;
* Developers wishing to contribute to the project;&lt;br /&gt;
* External package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;&lt;br /&gt;
&lt;br /&gt;
This document assumes that the reader is skilled in the following areas:&lt;br /&gt;
* C/C++ compilation&lt;br /&gt;
* [https://cmake.org/ cmake]&lt;br /&gt;
* [https://git-scm.com/ git]&lt;br /&gt;
* [https://docs.github.com/en/actions/writing-workflows Github Workflows]&lt;br /&gt;
* [https://packaging.python.org/en/latest/ Python Packaging], including [https://realpython.com/python-wheels/ Python Wheels format]&lt;br /&gt;
&lt;br /&gt;
Familiarity with [https://conan.io/ Conan] dependency manager may also help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries on the official [https://luxcorerender.org/download/ Download] page.&lt;br /&gt;
&lt;br /&gt;
= Build Targets =&lt;br /&gt;
&lt;br /&gt;
== Synoptic ==&lt;br /&gt;
LuxCoreRender contains several build targets, below represented with dependency links:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:&lt;br /&gt;
%%{&lt;br /&gt;
  init: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: &amp;quot;forest&amp;quot;,&lt;br /&gt;
    &amp;quot;logLevel&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
    &amp;quot;flowchart&amp;quot;: {&amp;quot;curve&amp;quot;: &amp;quot;basis&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart LR;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classDef TYPE font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGET font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCOREDEPS fill:#ffe8ff,stroke:#9488af,font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGETDEPS fill:#e4d8ff,stroke:#9488af,font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCORE fill:#bbceff,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETLUXCORE fill:#7799ee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef SAMPLES fill:#ffffdd,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETSAMPLES fill:#eeeecc,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef NEUTRAL fill:#fafafa,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETNEUTRAL fill:#eeeeee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef EXTDEP fill:#00000000,stroke:#00000000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph Dependencies[External Dependencies]&lt;br /&gt;
deps(LuxCore Dependencies)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class Dependencies LUXCOREDEPS;&lt;br /&gt;
class deps TARGETDEPS;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph LuxCore&lt;br /&gt;
lux(luxcore.so/.dll)&lt;br /&gt;
luxa(luxcore.a)&lt;br /&gt;
end&lt;br /&gt;
class LuxCore LUXCORE;&lt;br /&gt;
class lux TARGETLUXCORE;&lt;br /&gt;
class luxa TARGETLUXCORE;&lt;br /&gt;
&lt;br /&gt;
subgraph Python_Wheels[Python Wheels]&lt;br /&gt;
pylux(pyluxcore.so/.dll)&lt;br /&gt;
wheels(LuxCore Python Wheels)&lt;br /&gt;
end&lt;br /&gt;
class Python_Wheels TYPE;&lt;br /&gt;
class pylux TARGET;&lt;br /&gt;
class wheels TARGET;&lt;br /&gt;
&lt;br /&gt;
subgraph Samples&lt;br /&gt;
luxcoreui(luxcoreui)&lt;br /&gt;
luxcoreconsole(luxcoreconsole)&lt;br /&gt;
end&lt;br /&gt;
class Samples SAMPLES;&lt;br /&gt;
class luxcoreui TARGETSAMPLES;&lt;br /&gt;
class luxcoreconsole TARGETSAMPLES;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph PyLuxCoreTools&lt;br /&gt;
pyluxcon(pyluxcoreconsole)&lt;br /&gt;
pyluxothers(...)&lt;br /&gt;
end&lt;br /&gt;
class PyLuxCoreTools NEUTRAL;&lt;br /&gt;
class pyluxcon TARGETNEUTRAL;&lt;br /&gt;
class pyluxothers TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
subgraph Plugins[Python Plugins]&lt;br /&gt;
blc(BlendLuxCore)&lt;br /&gt;
otherplugins(...)&lt;br /&gt;
end&lt;br /&gt;
class blc TARGETNEUTRAL;&lt;br /&gt;
class otherplugins TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
class Plugins NEUTRAL;&lt;br /&gt;
&lt;br /&gt;
%% Warning: order matters&lt;br /&gt;
deps--&amp;gt;lux&lt;br /&gt;
deps--&amp;gt;luxa&lt;br /&gt;
deps--&amp;gt;luxcoreui&lt;br /&gt;
deps--&amp;gt;luxcoreconsole&lt;br /&gt;
&lt;br /&gt;
luxa---&amp;gt;pylux&lt;br /&gt;
lux--&amp;gt;luxcoreui&lt;br /&gt;
lux--&amp;gt;luxcoreconsole&lt;br /&gt;
deps--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pylux--&amp;gt;wheels&lt;br /&gt;
wheels-. runtime .-&amp;gt;blc&lt;br /&gt;
wheels-. runtime .-&amp;gt;otherplugins&lt;br /&gt;
&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxcon&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxothers&lt;br /&gt;
&lt;br /&gt;
Python:::EXTDEP--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Mermaid version: 8.14.0&lt;br /&gt;
%% https://github.com/mermaid-js/mermaid/blob/8.14.0/src/defaultConfig.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target !! Source Repository !! Content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;External Dependencies&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;] || A bundled Conan cache populated with LuxCoreRender external dependency binaries, built from sources. Please refer to [https://github.com/LuxCoreRender/LuxCoreDeps/blob/main/README.md LuxCoreDeps README] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;LuxCore&amp;lt;/b&amp;gt; || [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || LuxCore core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Sample C++ programs, illustrating luxcore use, namely &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python bindings of core binaries, in the form of Python wheels (1 per pair Platform/Python version).&amp;lt;/br&amp;gt; As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Plugins&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/BlendLuxCore &amp;lt;code&amp;gt;BlendLuxCore&amp;lt;/code&amp;gt;] etc. || Plugins to expose LuxCore in various external applications, notably Blender. &amp;lt;/br&amp;gt; Written in Python and relying on Python Wheels as runtime dependency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;PyLuxCoreTools&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python LuxCore Tools: set of command line tools based on pyluxcore, written in Python.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Targeted platforms ==&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender aims at being available on the following 4 platforms:&lt;br /&gt;
* Linux (glibc 2.28+)&lt;br /&gt;
* Windows&lt;br /&gt;
* MacOS Intel (&amp;gt;=10.15)&lt;br /&gt;
* MacOS Arm (&amp;gt;=12.0)&lt;br /&gt;
&lt;br /&gt;
For Python-related targets, LuxCoreRender aims at being declined for [https://devguide.python.org/versions all Python versions supported at a given time].&lt;br /&gt;
&lt;br /&gt;
= Workflow Types =&lt;br /&gt;
&lt;br /&gt;
We distinguish between two types of build workflows:&lt;br /&gt;
* Developer workflows&lt;br /&gt;
* Publisher workflows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Developer Workflows | Developer workflows]]&#039;&#039; are designed for development, debugging and test steps.&lt;br /&gt;
&lt;br /&gt;
Their purpose is to allow development and verify the code is ready for publication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Publisher Workflows | Publisher workflows]]&#039;&#039; are designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components.&lt;br /&gt;
&lt;br /&gt;
They exclusively take place in a CI/CD Github pipeline.&lt;br /&gt;
&lt;br /&gt;
These workflows are not designed for debugging or testing the underlying code. Execution of these workflows assumes that the development phase has been correctly completed and the underlying code is ready for final build and release. See [[#Developer Workflows | Developer Workflows]] to learn how to get code ready for final build.&lt;br /&gt;
&lt;br /&gt;
Running these workflows require users to be granted of extended rights on LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
= Developer Workflows =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need several build tools installed and referenced in the PATH.&lt;br /&gt;
&lt;br /&gt;
First, ensure you have a suitable toolchain:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OS !! Compiler !! Minimal version&lt;br /&gt;
|-&lt;br /&gt;
| Windows || MSVC || 194x latest version&lt;br /&gt;
|-&lt;br /&gt;
| Linux|| gcc || 14&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Intel|| XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Arm || XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toolchain compliance is a very sensitive condition for a successful build. Before filing any claim, please check that your toolchain complies with the above requirements.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then ensure the following software is also installed and available in your PATH:&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/ Git]&lt;br /&gt;
* [https://cli.github.com/ Github CLI] (optional but recommended - for dependency signature checking)&lt;br /&gt;
* [https://www.python.org/ Python 3] - any [https://devguide.python.org/versions/ currently supported version]&lt;br /&gt;
* [https://conan.io Conan] latest version (pip install conan)&lt;br /&gt;
* [https://github.com/pypa/wheel/tree/main Wheel] latest version (pip install wheel)&lt;br /&gt;
* [https://cmake.org/ CMake] &amp;gt;= 3.29&lt;br /&gt;
* [https://github.com/nektos/act nektos/act] (optional but recommended - for local build based on Github workflows)&lt;br /&gt;
* [https://pypi.org/project/repairwheel repairwheel] (optional but recommended - for local build of test wheels)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platform specifics:&lt;br /&gt;
* For Windows, ensure the command line is configured for building (&amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;).&lt;br /&gt;
* For Linux, you&#039;ll need &amp;lt;code&amp;gt;pkgconfig&amp;lt;/code&amp;gt; in addition.&lt;br /&gt;
* For MacOS, you&#039;ll need to ensure CC and CXX point to LLVM clang/clang++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Accounts&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Github account&#039;&#039; is mandatory for LuxCore development.&lt;br /&gt;
&lt;br /&gt;
Following accounts are also recommended, in order to get in touch with LuxCore community:&lt;br /&gt;
* [https://forums.luxcorerender.org/ LuxCoreRender Forums]&lt;br /&gt;
* [https://discord.gg/chPGsKV LuxCoreRender Discord channel]&lt;br /&gt;
&lt;br /&gt;
== General Developer Workflow ==&lt;br /&gt;
&lt;br /&gt;
To compile and verify LuxCore component modifications in development process, there are 3 stages:&lt;br /&gt;
* Local plain build: only run build system (cmake) on developer computer&lt;br /&gt;
* Local Continuous Integration build: run full Continuous Integration workflow on developer computer&lt;br /&gt;
* Server Continuous Integration build: run full Continuous Integration workflow on server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Local plain build&amp;lt;/i&amp;gt; is generally faster than other builds and does not require to commit changes beforehand. Plain build installs a minimal build configuration (dependencies), but heavily relies on computer build environment for the rest (build tools, system libraries etc.). As a counterpart, it builds only for the platform where it is executed and can be significantly altered by local conditions (build tools local versions, dependency local versions etc.), thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;LocalCI &amp;lt;/i&amp;gt; is generally faster than Server build, but slower than local plain build. CI workflow installs a complete build environment (compilers, sdk, build tools, containers, dependencies etc.) before running build system. It does not require to commit changes beforehand. However, it builds only for the platform where it is executed, thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;I&amp;gt;Server CI&amp;lt;/i&amp;gt;, if successful, should guarantee success when publishing, as it occurs in conditions similar to release workflow (all platforms, complete build environment). As a counterpart, it is generally significantly slower than local builds and also implies to commit and push changes beforehand, even if the code is in unstable state.&lt;br /&gt;
&lt;br /&gt;
The recommended workflow thus strives to make the most of all stages:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart TD;&lt;br /&gt;
&lt;br /&gt;
fork(Fork Source repository in your own Github space)&lt;br /&gt;
clone(&amp;quot;Clone your fork locally&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git clone...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
devel(Make modifications in your local fork)&lt;br /&gt;
localBuild(&amp;quot;&amp;lt;b&amp;gt;Run local plain build&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;...&amp;quot;)&lt;br /&gt;
localCI(&amp;quot;&amp;lt;b&amp;gt;Run local CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
git(&amp;quot;Commit, Rebase &amp;amp; Push&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git ...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
serverCI(&amp;lt;b&amp;gt;Run server CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;Github workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
PR(PR your changes to Source repository)&lt;br /&gt;
&lt;br /&gt;
fork--&amp;gt;clone&lt;br /&gt;
clone--&amp;gt;devel&lt;br /&gt;
devel--&amp;gt;localBuild&lt;br /&gt;
localBuild--&amp;gt;localCI&lt;br /&gt;
localCI-- &amp;quot;&amp;lt;i&amp;gt;Success&amp;lt;/br&amp;gt;(including debug &amp;amp; tests)&amp;lt;/i&amp;gt;&amp;quot; --&amp;gt;git&lt;br /&gt;
git--&amp;gt;serverCI&lt;br /&gt;
serverCI-- &amp;lt;i&amp;gt;Success&amp;lt;/i&amp;gt; --&amp;gt;PR&lt;br /&gt;
&lt;br /&gt;
localBuild &amp;amp; localCI &amp;amp; serverCI ----&amp;gt; |&amp;lt;i&amp;gt;Failure&amp;lt;/i&amp;gt;| devel&lt;br /&gt;
&lt;br /&gt;
classDef BUILD fill:#acc,stroke-width:4px;&lt;br /&gt;
class localBuild BUILD;&lt;br /&gt;
class localCI BUILD;&lt;br /&gt;
class serverCI BUILD;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the common process between all components. Each step will then be adapted to each component, as explained below.&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
* Running local CI relies on [https://github.com/nektos/act &amp;lt;code&amp;gt;nektos/act&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Rebase must be made against upstream directory (&amp;lt;code&amp;gt;git pull --rebase upstream &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;)before pushing&lt;br /&gt;
* Push must be made towards developer own fork. Caveat: do not try to push directly to upstream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build External Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
Dependency local plain build is possible but:&lt;br /&gt;
* Local plain build IS NOT THE RECOMMENDED BUILD for final deps. This build is solely intended for intermediary development and debugging. No support will be provided when used out-of-scope.&lt;br /&gt;
* Local plain build has only be tested on Linux, with gcc &amp;gt;=14. For other platforms, adaptations should be necessary (contributions welcome). &lt;br /&gt;
* Local plain build is much impacted by local particulars (local compiler version, dependencies already in cache or in system dirs etc.) and therefore does not guarantee further success for other (recommended) builds.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
In addition with general [[#Prerequisites_2 | Prerequisites]], you&#039;ll need the OneAPI ISPC compiler.&lt;br /&gt;
&lt;br /&gt;
==== Conan cache interaction ====&lt;br /&gt;
&lt;br /&gt;
The build relies on the local Conan cache, which will be modified by the process. You may want to make a copy beforehand.&lt;br /&gt;
&lt;br /&gt;
In some scenarios, you may also want to reset your Conan cache (warning: may remove files unrelated to LuxCoreDeps):&lt;br /&gt;
&amp;lt;pre&amp;gt;conan remove -c &amp;quot;*&amp;quot;  # Be careful: may remove packages unrelated to LuxCoreDeps!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Run ====&lt;br /&gt;
&lt;br /&gt;
To run a plain local build, run the following statements in a console, from the root of LuxCoreDeps repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export RUNNER_OS=&amp;lt;os&amp;gt;&lt;br /&gt;
export RUNNER_ARCH=&amp;lt;arch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LUXDEPS_VERSION=test&lt;br /&gt;
export GCC_VERSION=14   # Note: even for gcc &amp;gt; 14&lt;br /&gt;
export WORKSPACE=.&lt;br /&gt;
export CXX_VERSION=20&lt;br /&gt;
export CMAKE_POLICY_VERSION_MINIMUM=3.25&lt;br /&gt;
export DEPS_BUILD_TYPE=Release  # Or Debug/RelWithDebInfo/MinSizeRel, if needed&lt;br /&gt;
export cache_dir&lt;br /&gt;
&lt;br /&gt;
./run_conan.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;code&amp;gt;RUNNER_OS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RUNNER_ARCH&amp;lt;/code&amp;gt; in:&lt;br /&gt;
* &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
reflecting your build platform.&lt;br /&gt;
&lt;br /&gt;
No detection is made (compiler, OS, arch...) . You&#039;ll have to do it on your own and set environment variables accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
Conan will produce a bunch of scripts in the root of LuxCoreDeps repo. You can clean them with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt; ./utils/clean-conan-files.sh &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; on workflows located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder, for instance &amp;lt;code&amp;gt;.github/workflows/build.yml&amp;lt;/code&amp;gt; workflow.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more convenience, a wrapper script is also provided in &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt; repository (Linux only, at the moment): &amp;lt;pre&amp;gt;./utils/local-CI-build.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This process relies on the following Github workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/checker.yml &amp;lt;code&amp;gt;LuxCore Dependency Checker&amp;lt;/code&amp;gt;].&lt;br /&gt;
&amp;lt;/br&amp;gt;Important points:&lt;br /&gt;
* Your changes must have been committed and pushed to repository before.&lt;br /&gt;
* The Checker workflow is actually also triggered on push event, so you may not have to run it by yourself&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
== Build LuxCore, Samples &amp;amp; Python Wheels ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First, we will assume you have correctly completed the [[#Prerequisites_2 | Prerequisites]]. &lt;br /&gt;
&lt;br /&gt;
Second, we will also assume you&#039;ve already git-cloned LuxCore on your local machine, opened a terminal, changed directory to LuxCore folder and git-checked out the branch that you want to build (+ for Windows: initialized build environment with &amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Basic build ====&lt;br /&gt;
&lt;br /&gt;
Our build system internally relies on &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt; but, for more convenience, everything has been wrapped into &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-like statements.&lt;br /&gt;
&lt;br /&gt;
So, to build LuxCore, one just have to enter the following magic words:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make deps&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should retrieve and install LuxCore dependencies, configure the project and run the build. That&#039;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For subsequent builds, if no modification have been made to dependencies, you&#039;ll just have to re-enter: &amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Specific targets ====&lt;br /&gt;
&lt;br /&gt;
If you want to target a specific component, you can replace the above plain &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; by one of the following verbs:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make pyluxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreconsole&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starting from version 2.11, this method can build a &amp;quot;test wheel&amp;quot;. This is a simplified wheel, only for current platform and current Python version, for testing purpose. The test wheel is particularly useful for developing/debugging LuxCore/BlendLuxCore integration.&lt;br /&gt;
The verb is:&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also build Doxygen documentation with the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make doc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Build type ====&lt;br /&gt;
&lt;br /&gt;
By default, this method builds a release version, striped from all symbols. If you want to build a debug version, enter the following before any &amp;lt;code&amp;gt;make ...&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Local dependency set ====&lt;br /&gt;
&lt;br /&gt;
It is possible to use a local dependency set, rather than relying on automatic downloading. It is especially useful for developing/debugging of LuxCoreDeps/LuxCore integration. In this case, one can replace the &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt; statement by the following one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m build-system.luxmake.deps --local &amp;lt;path/to/local/deps&amp;gt; --release &amp;lt;release&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: &amp;lt;code&amp;gt;&amp;lt;release&amp;gt;&amp;lt;/code&amp;gt; is the release tag used by your local dependency set. If you build this set locally, it should likely be &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
You can remove build outputs with one of the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
The former will remove build files, however preserving dependencies. &lt;br /&gt;
The latter will remove everything and will require to reinstall dependencies (&amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This method is complementary to Local plain build, with the following additional capabilities:&lt;br /&gt;
* test the LuxCore build in an environment close to the release environment (manylinux container, for instance)&lt;br /&gt;
* can build wheels&lt;br /&gt;
* debug any changes made to the build workflow&lt;br /&gt;
&lt;br /&gt;
It consists in running Github workflows locally, via &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;. Github workflows are located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; invokation can be made on command line but, for convenience, a wrapper script is provided (for Linux): &amp;lt;pre&amp;gt;./build-helpers/debug/debug_wheels.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Caveat: this build can produce wheels, but only for the host platform (no cross-compiling).&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
The process is nearly the same as publisher build, but the release steps are skipped. For that purpose, another Github workflow has to be executed: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-builder.yml &amp;lt;code&amp;gt;LuxCore Python Wheels Builder&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Please note that your changes must have been committed to repository before running the workflow.&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
= Publisher Workflows =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
For these workflows, a Github account is required, with extended rights on the source repositories.&lt;br /&gt;
&lt;br /&gt;
== General Workflow ==&lt;br /&gt;
&lt;br /&gt;
The general workflow for publishing is in 3 parts:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
flowchart TD;&lt;br /&gt;
subgraph Build[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;BUILD &amp;amp; RELEASE DRAFT &amp;lt;/br&amp;gt;(Run Releaser workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padBuild(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
repo(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;Actions menu&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
select(&amp;quot;Select &amp;lt;code&amp;gt;[Releaser workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwf(Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button, in the upper-right corner)&lt;br /&gt;
branch(Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt; in drop-down menu)&lt;br /&gt;
options(Set workflow options)&lt;br /&gt;
validate(Click &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
wait(Wait for build to complete)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Release[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;MAKE FINAL RELEASE&amp;lt;/br&amp;gt;(Switch release to final status)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padRelease(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
release(&amp;quot;Open &amp;lt;code&amp;gt;[Release folder]&amp;lt;/code&amp;gt;,&amp;lt;/br&amp;gt; find the newly-built release (in Draft mode) &amp;lt;/br&amp;gt; and edit it&amp;quot;)&lt;br /&gt;
complete(Add relevant information: change log, comments on version etc.)&lt;br /&gt;
dedraft(Unset &amp;lt;code&amp;gt;Draft&amp;lt;/code&amp;gt; checkbox)&lt;br /&gt;
update(Click &amp;lt;code&amp;gt;Publish release&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Update release&amp;lt;/code&amp;gt; to finalize)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Deploy[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;PUBLISH&amp;lt;/br&amp;gt;(Run Publisher workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padDeploy(&amp;quot; &amp;quot;)&lt;br /&gt;
repoDeploy(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;[Actions menu]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
selectDeploy(&amp;quot;Select &amp;lt;code&amp;gt;[Publisher workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwfDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; drop-down button, in the upper-right corner&amp;quot;)&lt;br /&gt;
choiceDeploy(&amp;quot;Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt;, set the &amp;lt;code&amp;gt;Tag to publish&amp;lt;/code&amp;gt; and uncheck &amp;lt;code&amp;gt;Publish on Pypi Test&amp;lt;/code&amp;gt; if needed&amp;quot;)&lt;br /&gt;
validateDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button&amp;quot;)&lt;br /&gt;
waitDeploy(&amp;quot;Wait for deployment to complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
padBuild---repo&lt;br /&gt;
repo--&amp;gt;select&lt;br /&gt;
select--&amp;gt;runwf&lt;br /&gt;
runwf--&amp;gt;branch&lt;br /&gt;
branch--&amp;gt;options&lt;br /&gt;
options--&amp;gt;validate&lt;br /&gt;
validate--&amp;gt;wait:::WAIT&lt;br /&gt;
linkStyle 0 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padRelease---release&lt;br /&gt;
release--&amp;gt;complete&lt;br /&gt;
complete--&amp;gt;dedraft&lt;br /&gt;
dedraft--&amp;gt;update&lt;br /&gt;
linkStyle 7 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padDeploy:::INVISIBLE---repoDeploy&lt;br /&gt;
repoDeploy--&amp;gt;selectDeploy&lt;br /&gt;
selectDeploy--&amp;gt;runwfDeploy&lt;br /&gt;
runwfDeploy--&amp;gt;choiceDeploy&lt;br /&gt;
choiceDeploy--&amp;gt;validateDeploy&lt;br /&gt;
validateDeploy--&amp;gt;waitDeploy:::WAIT&lt;br /&gt;
linkStyle 11 stroke:#fff,color:blue,stroke-width:0px;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build-- &amp;lt;i&amp;gt;if success&amp;lt;/i&amp;gt; --&amp;gt;Release&lt;br /&gt;
Release-- &amp;lt;i&amp;gt;if success &amp;amp; if needed&amp;lt;/i&amp;gt; --&amp;gt;Deploy&lt;br /&gt;
&lt;br /&gt;
classDef WAIT fill:#ddd;&lt;br /&gt;
classDef DEPS fill:#e4d8ff,stroke:#9488af;&lt;br /&gt;
classDef INVISIBLE fill:#ffffffff,stroke:#ffffffff,stroke-width:0px,font-color:#ffffffff;&lt;br /&gt;
classDef OPTIONAL stroke-dasharray: 5 5;&lt;br /&gt;
&lt;br /&gt;
class Deploy OPTIONAL;&lt;br /&gt;
&lt;br /&gt;
%% Note: padXXX is a poor hack to create a top-margin in subgraph...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A few comments:&lt;br /&gt;
* &amp;lt;code&amp;gt;[bracketed tokens]&amp;lt;/code&amp;gt; refer to data specific to each component, which will be detailed below.&lt;br /&gt;
* Publish part is optional, it will depends on the target&lt;br /&gt;
* &#039;&#039;Caveat: if you provide an already-existing release version number during the process, the workflow will replace the existing release with the newly-built one. This can be what you expected... or not. Be cautious.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Per-target details ==&lt;br /&gt;
&lt;br /&gt;
=== External Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreRender/LuxCoreDeps&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/release.yml &amp;lt;code&amp;gt;LuxCore Dependency Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCoreDeps/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
As a byproduct, External Dependencies are not intended to be deployed, so no Publisher workflow is provided.&lt;br /&gt;
&lt;br /&gt;
=== Python Wheels ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As far as wheels are concerned, in addition to building them, it is also necessary to upload them to [https://pypi.org/ PyPi] (&amp;quot;publish&amp;quot; them), so that they are available for [https://pypi.org/project/pip pip] installation.&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-releaser.yml &amp;lt;code&amp;gt;LuxCore Wheels Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-publisher.yml &amp;lt;code&amp;gt;LuxCore Wheels Publisher&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Prerequisite: you must have released a compatible version of External Dependencies (LuxCoreDeps) before building Python Wheels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Samples ===&lt;br /&gt;
&lt;br /&gt;
As we plan to replace Samples by equivalent Python tools and thus deprecate them, the workflow has been limited to the Release part (no publish).&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/sample-releaser.yml &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
=== BlendLuxCore ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;TODO&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Version Management =&lt;br /&gt;
&lt;br /&gt;
== Semantic Versioning ==&lt;br /&gt;
&lt;br /&gt;
Starting for LuxCore version 2.10.0, we require that LuxCoreRender applies [https://semver.org/ Semantic Versioning]. Please strictly enforce this rule when incrementing version numbers.&lt;br /&gt;
&lt;br /&gt;
Remark: component versions does not have to be synced. For instance, in strict application of the standard, the newly created LuxCoreDeps will start at 1.0.0, while at the same time LuxCore is already at 2.10.0&lt;br /&gt;
&lt;br /&gt;
== Dependency Version pointer ==&lt;br /&gt;
&lt;br /&gt;
To make LuxCore know which version of dependencies it must be built against, we use a pointer.&lt;br /&gt;
&lt;br /&gt;
This pointer is stored in the file &amp;lt;code&amp;gt;build-helpers/build-settings.json&amp;lt;/code&amp;gt;, under the path &amp;lt;code&amp;gt;Dependencies/release&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you keep it up-to-date when you upgrade LuxCore components.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2680</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2680"/>
		<updated>2026-04-24T04:13:07Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender&#039;s build system has been significantly modified for version 2.10. This document therefore renders obsolete all [[Building_LuxCoreRender_(legacy)|previous documents]] related to the compilation of older versions (&amp;lt;=2.9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;TL;DR&amp;lt;/b&amp;gt; If you are just interested in a quick, local (but platform limited) compilation of LuxCore C++ samples or Python wheels, you may want to jump directly to [[#Build LuxCore, Samples &amp;amp; Python Wheels | Build LuxCore, Samples &amp;amp; Python Wheels]].&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Audience =&lt;br /&gt;
&lt;br /&gt;
This document is intended for:&lt;br /&gt;
* LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;&lt;br /&gt;
* Developers wishing to contribute to the project;&lt;br /&gt;
* External package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;&lt;br /&gt;
&lt;br /&gt;
This document assumes that the reader is skilled in the following areas:&lt;br /&gt;
* C/C++ compilation&lt;br /&gt;
* [https://cmake.org/ cmake]&lt;br /&gt;
* [https://git-scm.com/ git]&lt;br /&gt;
* [https://docs.github.com/en/actions/writing-workflows Github Workflows]&lt;br /&gt;
* [https://packaging.python.org/en/latest/ Python Packaging], including [https://realpython.com/python-wheels/ Python Wheels format]&lt;br /&gt;
&lt;br /&gt;
Familiarity with [https://conan.io/ Conan] dependency manager may also help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries on the official [https://luxcorerender.org/download/ Download] page.&lt;br /&gt;
&lt;br /&gt;
= Build Targets =&lt;br /&gt;
&lt;br /&gt;
== Synoptic ==&lt;br /&gt;
LuxCoreRender contains several build targets, below represented with dependency links:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:&lt;br /&gt;
%%{&lt;br /&gt;
  init: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: &amp;quot;forest&amp;quot;,&lt;br /&gt;
    &amp;quot;logLevel&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
    &amp;quot;flowchart&amp;quot;: {&amp;quot;curve&amp;quot;: &amp;quot;basis&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart LR;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classDef TYPE font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGET font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCOREDEPS fill:#ffe8ff,stroke:#9488af,font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGETDEPS fill:#e4d8ff,stroke:#9488af,font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCORE fill:#bbceff,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETLUXCORE fill:#7799ee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef SAMPLES fill:#ffffdd,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETSAMPLES fill:#eeeecc,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef NEUTRAL fill:#fafafa,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETNEUTRAL fill:#eeeeee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef EXTDEP fill:#00000000,stroke:#00000000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph Dependencies[External Dependencies]&lt;br /&gt;
deps(LuxCore Dependencies)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class Dependencies LUXCOREDEPS;&lt;br /&gt;
class deps TARGETDEPS;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph LuxCore&lt;br /&gt;
lux(luxcore.so/.dll)&lt;br /&gt;
luxa(luxcore.a)&lt;br /&gt;
end&lt;br /&gt;
class LuxCore LUXCORE;&lt;br /&gt;
class lux TARGETLUXCORE;&lt;br /&gt;
class luxa TARGETLUXCORE;&lt;br /&gt;
&lt;br /&gt;
subgraph Python_Wheels[Python Wheels]&lt;br /&gt;
pylux(pyluxcore.so/.dll)&lt;br /&gt;
wheels(LuxCore Python Wheels)&lt;br /&gt;
end&lt;br /&gt;
class Python_Wheels TYPE;&lt;br /&gt;
class pylux TARGET;&lt;br /&gt;
class wheels TARGET;&lt;br /&gt;
&lt;br /&gt;
subgraph Samples&lt;br /&gt;
luxcoreui(luxcoreui)&lt;br /&gt;
luxcoreconsole(luxcoreconsole)&lt;br /&gt;
end&lt;br /&gt;
class Samples SAMPLES;&lt;br /&gt;
class luxcoreui TARGETSAMPLES;&lt;br /&gt;
class luxcoreconsole TARGETSAMPLES;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph PyLuxCoreTools&lt;br /&gt;
pyluxcon(pyluxcoreconsole)&lt;br /&gt;
pyluxothers(...)&lt;br /&gt;
end&lt;br /&gt;
class PyLuxCoreTools NEUTRAL;&lt;br /&gt;
class pyluxcon TARGETNEUTRAL;&lt;br /&gt;
class pyluxothers TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
subgraph Plugins[Python Plugins]&lt;br /&gt;
blc(BlendLuxCore)&lt;br /&gt;
otherplugins(...)&lt;br /&gt;
end&lt;br /&gt;
class blc TARGETNEUTRAL;&lt;br /&gt;
class otherplugins TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
class Plugins NEUTRAL;&lt;br /&gt;
&lt;br /&gt;
%% Warning: order matters&lt;br /&gt;
deps--&amp;gt;lux&lt;br /&gt;
deps--&amp;gt;luxa&lt;br /&gt;
deps--&amp;gt;luxcoreui&lt;br /&gt;
deps--&amp;gt;luxcoreconsole&lt;br /&gt;
&lt;br /&gt;
luxa---&amp;gt;pylux&lt;br /&gt;
lux--&amp;gt;luxcoreui&lt;br /&gt;
lux--&amp;gt;luxcoreconsole&lt;br /&gt;
deps--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pylux--&amp;gt;wheels&lt;br /&gt;
wheels-. runtime .-&amp;gt;blc&lt;br /&gt;
wheels-. runtime .-&amp;gt;otherplugins&lt;br /&gt;
&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxcon&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxothers&lt;br /&gt;
&lt;br /&gt;
Python:::EXTDEP--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Mermaid version: 8.14.0&lt;br /&gt;
%% https://github.com/mermaid-js/mermaid/blob/8.14.0/src/defaultConfig.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target !! Source Repository !! Content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;External Dependencies&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;] || A bundled Conan cache populated with LuxCoreRender external dependency binaries, built from sources. Please refer to [https://github.com/LuxCoreRender/LuxCoreDeps/blob/main/README.md LuxCoreDeps README] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;LuxCore&amp;lt;/b&amp;gt; || [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || LuxCore core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Sample C++ programs, illustrating luxcore use, namely &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python bindings of core binaries, in the form of Python wheels (1 per pair Platform/Python version).&amp;lt;/br&amp;gt; As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Plugins&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/BlendLuxCore &amp;lt;code&amp;gt;BlendLuxCore&amp;lt;/code&amp;gt;] etc. || Plugins to expose LuxCore in various external applications, notably Blender. &amp;lt;/br&amp;gt; Written in Python and relying on Python Wheels as runtime dependency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;PyLuxCoreTools&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python LuxCore Tools: set of command line tools based on pyluxcore, written in Python.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Targeted platforms ==&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender aims at being available on the following 4 platforms:&lt;br /&gt;
* Linux (glibc 2.28+)&lt;br /&gt;
* Windows&lt;br /&gt;
* MacOS Intel (&amp;gt;=10.15)&lt;br /&gt;
* MacOS Arm (&amp;gt;=12.0)&lt;br /&gt;
&lt;br /&gt;
For Python-related targets, LuxCoreRender aims at being declined for [https://devguide.python.org/versions all Python versions supported at a given time].&lt;br /&gt;
&lt;br /&gt;
= Workflow Types =&lt;br /&gt;
&lt;br /&gt;
We distinguish between two types of build workflows:&lt;br /&gt;
* Developer workflows&lt;br /&gt;
* Publisher workflows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Developer Workflows | Developer workflows]]&#039;&#039; are designed for development, debugging and test steps.&lt;br /&gt;
&lt;br /&gt;
Their purpose is to allow development and verify the code is ready for publication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Publisher Workflows | Publisher workflows]]&#039;&#039; are designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components.&lt;br /&gt;
&lt;br /&gt;
They exclusively take place in a CI/CD Github pipeline.&lt;br /&gt;
&lt;br /&gt;
These workflows are not designed for debugging or testing the underlying code. Execution of these workflows assumes that the development phase has been correctly completed and the underlying code is ready for final build and release. See [[#Developer Workflows | Developer Workflows]] to learn how to get code ready for final build.&lt;br /&gt;
&lt;br /&gt;
Running these workflows require users to be granted of extended rights on LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
= Developer Workflows =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need several build tools installed and referenced in the PATH.&lt;br /&gt;
&lt;br /&gt;
First, ensure you have a suitable toolchain:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OS !! Compiler !! Minimal version&lt;br /&gt;
|-&lt;br /&gt;
| Windows || MSVC || 194x latest version&lt;br /&gt;
|-&lt;br /&gt;
| Linux|| gcc || 14&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Intel|| XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Arm || XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toolchain compliance is a very sensitive condition for a successful build. Before filing any claim, please check that your toolchain complies with the above requirements.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then ensure the following software is also installed and available in your PATH:&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/ Git]&lt;br /&gt;
* [https://cli.github.com/ Github CLI] (optional but recommended - for dependency signature checking)&lt;br /&gt;
* [https://www.python.org/ Python 3] - any [https://devguide.python.org/versions/ currently supported version]&lt;br /&gt;
* [https://conan.io Conan] latest version (pip install conan)&lt;br /&gt;
* [https://github.com/pypa/wheel/tree/main Wheel] latest version (pip install wheel)&lt;br /&gt;
* [https://cmake.org/ CMake] &amp;gt;= 3.29&lt;br /&gt;
* [https://github.com/nektos/act nektos/act] (optional but recommended - for local build based on Github workflows)&lt;br /&gt;
* [https://pypi.org/project/repairwheel repairwheel] (optional but recommended - for local build of test wheels)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platform specifics:&lt;br /&gt;
* For Windows, ensure the command line is configured for building (&amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;).&lt;br /&gt;
* For Linux, you&#039;ll need &amp;lt;code&amp;gt;pkgconfig&amp;lt;/code&amp;gt; in addition.&lt;br /&gt;
* For MacOS, you&#039;ll need to ensure CC and CXX point to LLVM clang/clang++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Accounts&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Github account&#039;&#039; is mandatory for LuxCore development.&lt;br /&gt;
&lt;br /&gt;
Following accounts are also recommended, in order to get in touch with LuxCore community:&lt;br /&gt;
* [https://forums.luxcorerender.org/ LuxCoreRender Forums]&lt;br /&gt;
* [https://discord.gg/chPGsKV LuxCoreRender Discord channel]&lt;br /&gt;
&lt;br /&gt;
== General Developer Workflow ==&lt;br /&gt;
&lt;br /&gt;
To compile and verify LuxCore component modifications in development process, there are 3 stages:&lt;br /&gt;
* Local plain build: only run build system (cmake) on developer computer&lt;br /&gt;
* Local Continuous Integration build: run full Continuous Integration workflow on developer computer&lt;br /&gt;
* Server Continuous Integration build: run full Continuous Integration workflow on server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Local plain build&amp;lt;/i&amp;gt; is generally faster than other builds and does not require to commit changes beforehand. Plain build installs a minimal build configuration (dependencies), but heavily relies on computer build environment for the rest (build tools, system libraries etc.). As a counterpart, it builds only for the platform where it is executed and can be significantly altered by local conditions (build tools local versions, dependency local versions etc.), thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;LocalCI &amp;lt;/i&amp;gt; is generally faster than Server build, but slower than local plain build. CI workflow installs a complete build environment (compilers, sdk, build tools, containers, dependencies etc.) before running build system. It does not require to commit changes beforehand. However, it builds only for the platform where it is executed, thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;I&amp;gt;Server CI&amp;lt;/i&amp;gt;, if successful, should guarantee success when publishing, as it occurs in conditions similar to release workflow (all platforms, complete build environment). As a counterpart, it is generally significantly slower than local builds and also implies to commit and push changes beforehand, even if the code is in unstable state.&lt;br /&gt;
&lt;br /&gt;
The recommended workflow thus strives to make the most of all stages:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart TD;&lt;br /&gt;
&lt;br /&gt;
fork(Fork Source repository in your own Github space)&lt;br /&gt;
clone(&amp;quot;Clone your fork locally&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git clone...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
devel(Make modifications in your local fork)&lt;br /&gt;
localBuild(&amp;quot;&amp;lt;b&amp;gt;Run local plain build&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;...&amp;quot;)&lt;br /&gt;
localCI(&amp;quot;&amp;lt;b&amp;gt;Run local CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
git(&amp;quot;Commit, Rebase &amp;amp; Push&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git ...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
serverCI(&amp;lt;b&amp;gt;Run server CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;Github workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
PR(PR your changes to Source repository)&lt;br /&gt;
&lt;br /&gt;
fork--&amp;gt;clone&lt;br /&gt;
clone--&amp;gt;devel&lt;br /&gt;
devel--&amp;gt;localBuild&lt;br /&gt;
localBuild--&amp;gt;localCI&lt;br /&gt;
localCI-- &amp;quot;&amp;lt;i&amp;gt;Success&amp;lt;/br&amp;gt;(including debug &amp;amp; tests)&amp;lt;/i&amp;gt;&amp;quot; --&amp;gt;git&lt;br /&gt;
git--&amp;gt;serverCI&lt;br /&gt;
serverCI-- &amp;lt;i&amp;gt;Success&amp;lt;/i&amp;gt; --&amp;gt;PR&lt;br /&gt;
&lt;br /&gt;
localBuild &amp;amp; localCI &amp;amp; serverCI ----&amp;gt; |&amp;lt;i&amp;gt;Failure&amp;lt;/i&amp;gt;| devel&lt;br /&gt;
&lt;br /&gt;
classDef BUILD fill:#acc,stroke-width:4px;&lt;br /&gt;
class localBuild BUILD;&lt;br /&gt;
class localCI BUILD;&lt;br /&gt;
class serverCI BUILD;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the common process between all components. Each step will then be adapted to each component, as explained below.&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
* Running local CI relies on [https://github.com/nektos/act &amp;lt;code&amp;gt;nektos/act&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Rebase must be made against upstream directory (&amp;lt;code&amp;gt;git pull --rebase upstream &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;)before pushing&lt;br /&gt;
* Push must be made towards developer own fork. Caveat: do not try to push directly to upstream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build External Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
Dependency local plain build is possible but:&lt;br /&gt;
* Local plain build IS NOT THE RECOMMENDED BUILD for final deps. This build is solely intended for intermediary development and debugging. No support will be provided when used out-of-scope.&lt;br /&gt;
* Local plain build has only be tested on Linux, with gcc &amp;gt;=14. For other platforms, adaptations should be necessary (contributions welcome). &lt;br /&gt;
* Local plain build is much impacted by local particulars (local compiler version, dependencies already in cache or in system dirs etc.) and therefore does not guarantee further success for other (recommended) builds.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
In addition with general [[#Prerequisites_2 | Prerequisites]], you&#039;ll need the OneAPI ISPC compiler.&lt;br /&gt;
&lt;br /&gt;
==== Conan cache interaction ====&lt;br /&gt;
&lt;br /&gt;
The build relies on the local Conan cache, which will be modified by the process. You may want to make a copy beforehand.&lt;br /&gt;
&lt;br /&gt;
In some scenarios, you may also want to reset your Conan cache (warning: may remove files unrelated to LuxCoreDeps):&lt;br /&gt;
&amp;lt;pre&amp;gt;conan remove -c &amp;quot;*&amp;quot;  # Be careful: may remove packages unrelated to LuxCoreDeps!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Run ====&lt;br /&gt;
&lt;br /&gt;
To run a plain local build, run the following statements in a console, from the root of LuxCoreDeps repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export RUNNER_OS=&amp;lt;os&amp;gt;&lt;br /&gt;
export RUNNER_ARCH=&amp;lt;arch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LUXDEPS_VERSION=test&lt;br /&gt;
export GCC_VERSION=14   # Note: even for gcc &amp;gt; 14&lt;br /&gt;
export WORKSPACE=.&lt;br /&gt;
export CXX_VERSION=20&lt;br /&gt;
export CMAKE_POLICY_VERSION_MINIMUM=3.25&lt;br /&gt;
export cache_dir&lt;br /&gt;
&lt;br /&gt;
./run_conan.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;code&amp;gt;RUNNER_OS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RUNNER_ARCH&amp;lt;/code&amp;gt; in:&lt;br /&gt;
* &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
reflecting your build platform.&lt;br /&gt;
&lt;br /&gt;
No detection is made (compiler, OS, arch...) . You&#039;ll have to do it on your own and set environment variables accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
Conan will produce a bunch of scripts in the root of LuxCoreDeps repo. You can clean them with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt; ./utils/clean-conan-files.sh &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; on workflows located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder, for instance &amp;lt;code&amp;gt;.github/workflows/build.yml&amp;lt;/code&amp;gt; workflow.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more convenience, a wrapper script is also provided in &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt; repository (Linux only, at the moment): &amp;lt;pre&amp;gt;./utils/local-CI-build.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This process relies on the following Github workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/checker.yml &amp;lt;code&amp;gt;LuxCore Dependency Checker&amp;lt;/code&amp;gt;].&lt;br /&gt;
&amp;lt;/br&amp;gt;Important points:&lt;br /&gt;
* Your changes must have been committed and pushed to repository before.&lt;br /&gt;
* The Checker workflow is actually also triggered on push event, so you may not have to run it by yourself&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
== Build LuxCore, Samples &amp;amp; Python Wheels ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First, we will assume you have correctly completed the [[#Prerequisites_2 | Prerequisites]]. &lt;br /&gt;
&lt;br /&gt;
Second, we will also assume you&#039;ve already git-cloned LuxCore on your local machine, opened a terminal, changed directory to LuxCore folder and git-checked out the branch that you want to build (+ for Windows: initialized build environment with &amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Basic build ====&lt;br /&gt;
&lt;br /&gt;
Our build system internally relies on &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt; but, for more convenience, everything has been wrapped into &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-like statements.&lt;br /&gt;
&lt;br /&gt;
So, to build LuxCore, one just have to enter the following magic words:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make deps&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should retrieve and install LuxCore dependencies, configure the project and run the build. That&#039;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For subsequent builds, if no modification have been made to dependencies, you&#039;ll just have to re-enter: &amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Specific targets ====&lt;br /&gt;
&lt;br /&gt;
If you want to target a specific component, you can replace the above plain &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; by one of the following verbs:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make pyluxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreconsole&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starting from version 2.11, this method can build a &amp;quot;test wheel&amp;quot;. This is a simplified wheel, only for current platform and current Python version, for testing purpose. The test wheel is particularly useful for developing/debugging LuxCore/BlendLuxCore integration.&lt;br /&gt;
The verb is:&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also build Doxygen documentation with the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make doc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Build type ====&lt;br /&gt;
&lt;br /&gt;
By default, this method builds a release version, striped from all symbols. If you want to build a debug version, enter the following before any &amp;lt;code&amp;gt;make ...&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Local dependency set ====&lt;br /&gt;
&lt;br /&gt;
It is possible to use a local dependency set, rather than relying on automatic downloading. It is especially useful for developing/debugging of LuxCoreDeps/LuxCore integration. In this case, one can replace the &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt; statement by the following one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m build-system.luxmake.deps --local &amp;lt;path/to/local/deps&amp;gt; --release &amp;lt;release&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: &amp;lt;code&amp;gt;&amp;lt;release&amp;gt;&amp;lt;/code&amp;gt; is the release tag used by your local dependency set. If you build this set locally, it should likely be &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
You can remove build outputs with one of the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
The former will remove build files, however preserving dependencies. &lt;br /&gt;
The latter will remove everything and will require to reinstall dependencies (&amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This method is complementary to Local plain build, with the following additional capabilities:&lt;br /&gt;
* test the LuxCore build in an environment close to the release environment (manylinux container, for instance)&lt;br /&gt;
* can build wheels&lt;br /&gt;
* debug any changes made to the build workflow&lt;br /&gt;
&lt;br /&gt;
It consists in running Github workflows locally, via &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;. Github workflows are located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; invokation can be made on command line but, for convenience, a wrapper script is provided (for Linux): &amp;lt;pre&amp;gt;./build-helpers/debug/debug_wheels.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Caveat: this build can produce wheels, but only for the host platform (no cross-compiling).&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
The process is nearly the same as publisher build, but the release steps are skipped. For that purpose, another Github workflow has to be executed: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-builder.yml &amp;lt;code&amp;gt;LuxCore Python Wheels Builder&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Please note that your changes must have been committed to repository before running the workflow.&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
= Publisher Workflows =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
For these workflows, a Github account is required, with extended rights on the source repositories.&lt;br /&gt;
&lt;br /&gt;
== General Workflow ==&lt;br /&gt;
&lt;br /&gt;
The general workflow for publishing is in 3 parts:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
flowchart TD;&lt;br /&gt;
subgraph Build[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;BUILD &amp;amp; RELEASE DRAFT &amp;lt;/br&amp;gt;(Run Releaser workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padBuild(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
repo(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;Actions menu&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
select(&amp;quot;Select &amp;lt;code&amp;gt;[Releaser workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwf(Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button, in the upper-right corner)&lt;br /&gt;
branch(Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt; in drop-down menu)&lt;br /&gt;
options(Set workflow options)&lt;br /&gt;
validate(Click &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
wait(Wait for build to complete)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Release[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;MAKE FINAL RELEASE&amp;lt;/br&amp;gt;(Switch release to final status)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padRelease(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
release(&amp;quot;Open &amp;lt;code&amp;gt;[Release folder]&amp;lt;/code&amp;gt;,&amp;lt;/br&amp;gt; find the newly-built release (in Draft mode) &amp;lt;/br&amp;gt; and edit it&amp;quot;)&lt;br /&gt;
complete(Add relevant information: change log, comments on version etc.)&lt;br /&gt;
dedraft(Unset &amp;lt;code&amp;gt;Draft&amp;lt;/code&amp;gt; checkbox)&lt;br /&gt;
update(Click &amp;lt;code&amp;gt;Publish release&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Update release&amp;lt;/code&amp;gt; to finalize)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Deploy[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;PUBLISH&amp;lt;/br&amp;gt;(Run Publisher workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padDeploy(&amp;quot; &amp;quot;)&lt;br /&gt;
repoDeploy(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;[Actions menu]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
selectDeploy(&amp;quot;Select &amp;lt;code&amp;gt;[Publisher workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwfDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; drop-down button, in the upper-right corner&amp;quot;)&lt;br /&gt;
choiceDeploy(&amp;quot;Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt;, set the &amp;lt;code&amp;gt;Tag to publish&amp;lt;/code&amp;gt; and uncheck &amp;lt;code&amp;gt;Publish on Pypi Test&amp;lt;/code&amp;gt; if needed&amp;quot;)&lt;br /&gt;
validateDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button&amp;quot;)&lt;br /&gt;
waitDeploy(&amp;quot;Wait for deployment to complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
padBuild---repo&lt;br /&gt;
repo--&amp;gt;select&lt;br /&gt;
select--&amp;gt;runwf&lt;br /&gt;
runwf--&amp;gt;branch&lt;br /&gt;
branch--&amp;gt;options&lt;br /&gt;
options--&amp;gt;validate&lt;br /&gt;
validate--&amp;gt;wait:::WAIT&lt;br /&gt;
linkStyle 0 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padRelease---release&lt;br /&gt;
release--&amp;gt;complete&lt;br /&gt;
complete--&amp;gt;dedraft&lt;br /&gt;
dedraft--&amp;gt;update&lt;br /&gt;
linkStyle 7 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padDeploy:::INVISIBLE---repoDeploy&lt;br /&gt;
repoDeploy--&amp;gt;selectDeploy&lt;br /&gt;
selectDeploy--&amp;gt;runwfDeploy&lt;br /&gt;
runwfDeploy--&amp;gt;choiceDeploy&lt;br /&gt;
choiceDeploy--&amp;gt;validateDeploy&lt;br /&gt;
validateDeploy--&amp;gt;waitDeploy:::WAIT&lt;br /&gt;
linkStyle 11 stroke:#fff,color:blue,stroke-width:0px;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build-- &amp;lt;i&amp;gt;if success&amp;lt;/i&amp;gt; --&amp;gt;Release&lt;br /&gt;
Release-- &amp;lt;i&amp;gt;if success &amp;amp; if needed&amp;lt;/i&amp;gt; --&amp;gt;Deploy&lt;br /&gt;
&lt;br /&gt;
classDef WAIT fill:#ddd;&lt;br /&gt;
classDef DEPS fill:#e4d8ff,stroke:#9488af;&lt;br /&gt;
classDef INVISIBLE fill:#ffffffff,stroke:#ffffffff,stroke-width:0px,font-color:#ffffffff;&lt;br /&gt;
classDef OPTIONAL stroke-dasharray: 5 5;&lt;br /&gt;
&lt;br /&gt;
class Deploy OPTIONAL;&lt;br /&gt;
&lt;br /&gt;
%% Note: padXXX is a poor hack to create a top-margin in subgraph...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A few comments:&lt;br /&gt;
* &amp;lt;code&amp;gt;[bracketed tokens]&amp;lt;/code&amp;gt; refer to data specific to each component, which will be detailed below.&lt;br /&gt;
* Publish part is optional, it will depends on the target&lt;br /&gt;
* &#039;&#039;Caveat: if you provide an already-existing release version number during the process, the workflow will replace the existing release with the newly-built one. This can be what you expected... or not. Be cautious.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Per-target details ==&lt;br /&gt;
&lt;br /&gt;
=== External Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreRender/LuxCoreDeps&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/release.yml &amp;lt;code&amp;gt;LuxCore Dependency Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCoreDeps/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
As a byproduct, External Dependencies are not intended to be deployed, so no Publisher workflow is provided.&lt;br /&gt;
&lt;br /&gt;
=== Python Wheels ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As far as wheels are concerned, in addition to building them, it is also necessary to upload them to [https://pypi.org/ PyPi] (&amp;quot;publish&amp;quot; them), so that they are available for [https://pypi.org/project/pip pip] installation.&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-releaser.yml &amp;lt;code&amp;gt;LuxCore Wheels Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-publisher.yml &amp;lt;code&amp;gt;LuxCore Wheels Publisher&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Prerequisite: you must have released a compatible version of External Dependencies (LuxCoreDeps) before building Python Wheels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Samples ===&lt;br /&gt;
&lt;br /&gt;
As we plan to replace Samples by equivalent Python tools and thus deprecate them, the workflow has been limited to the Release part (no publish).&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/sample-releaser.yml &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
=== BlendLuxCore ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;TODO&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Version Management =&lt;br /&gt;
&lt;br /&gt;
== Semantic Versioning ==&lt;br /&gt;
&lt;br /&gt;
Starting for LuxCore version 2.10.0, we require that LuxCoreRender applies [https://semver.org/ Semantic Versioning]. Please strictly enforce this rule when incrementing version numbers.&lt;br /&gt;
&lt;br /&gt;
Remark: component versions does not have to be synced. For instance, in strict application of the standard, the newly created LuxCoreDeps will start at 1.0.0, while at the same time LuxCore is already at 2.10.0&lt;br /&gt;
&lt;br /&gt;
== Dependency Version pointer ==&lt;br /&gt;
&lt;br /&gt;
To make LuxCore know which version of dependencies it must be built against, we use a pointer.&lt;br /&gt;
&lt;br /&gt;
This pointer is stored in the file &amp;lt;code&amp;gt;build-helpers/build-settings.json&amp;lt;/code&amp;gt;, under the path &amp;lt;code&amp;gt;Dependencies/release&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you keep it up-to-date when you upgrade LuxCore components.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2679</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2679"/>
		<updated>2026-04-24T04:12:42Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Caveats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender&#039;s build system has been significantly modified for version 2.10. This document therefore renders obsolete all [[Building_LuxCoreRender_(legacy)|previous documents]] related to the compilation of older versions (&amp;lt;=2.9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;TL;DR&amp;lt;/b&amp;gt; If you are just interested in a quick, local (but platform limited) compilation of LuxCore C++ samples or Python wheels, you may want to jump directly to [[#Build LuxCore, Samples &amp;amp; Python Wheels | Build LuxCore, Samples &amp;amp; Python Wheels]].&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Audience =&lt;br /&gt;
&lt;br /&gt;
This document is intended for:&lt;br /&gt;
* LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;&lt;br /&gt;
* Developers wishing to contribute to the project;&lt;br /&gt;
* External package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;&lt;br /&gt;
&lt;br /&gt;
This document assumes that the reader is skilled in the following areas:&lt;br /&gt;
* C/C++ compilation&lt;br /&gt;
* [https://cmake.org/ cmake]&lt;br /&gt;
* [https://git-scm.com/ git]&lt;br /&gt;
* [https://docs.github.com/en/actions/writing-workflows Github Workflows]&lt;br /&gt;
* [https://packaging.python.org/en/latest/ Python Packaging], including [https://realpython.com/python-wheels/ Python Wheels format]&lt;br /&gt;
&lt;br /&gt;
Familiarity with [https://conan.io/ Conan] dependency manager may also help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries on the official [https://luxcorerender.org/download/ Download] page.&lt;br /&gt;
&lt;br /&gt;
= Build Targets =&lt;br /&gt;
&lt;br /&gt;
== Synoptic ==&lt;br /&gt;
LuxCoreRender contains several build targets, below represented with dependency links:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:&lt;br /&gt;
%%{&lt;br /&gt;
  init: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: &amp;quot;forest&amp;quot;,&lt;br /&gt;
    &amp;quot;logLevel&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
    &amp;quot;flowchart&amp;quot;: {&amp;quot;curve&amp;quot;: &amp;quot;basis&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart LR;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classDef TYPE font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGET font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCOREDEPS fill:#ffe8ff,stroke:#9488af,font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGETDEPS fill:#e4d8ff,stroke:#9488af,font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCORE fill:#bbceff,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETLUXCORE fill:#7799ee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef SAMPLES fill:#ffffdd,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETSAMPLES fill:#eeeecc,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef NEUTRAL fill:#fafafa,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETNEUTRAL fill:#eeeeee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef EXTDEP fill:#00000000,stroke:#00000000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph Dependencies[External Dependencies]&lt;br /&gt;
deps(LuxCore Dependencies)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class Dependencies LUXCOREDEPS;&lt;br /&gt;
class deps TARGETDEPS;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph LuxCore&lt;br /&gt;
lux(luxcore.so/.dll)&lt;br /&gt;
luxa(luxcore.a)&lt;br /&gt;
end&lt;br /&gt;
class LuxCore LUXCORE;&lt;br /&gt;
class lux TARGETLUXCORE;&lt;br /&gt;
class luxa TARGETLUXCORE;&lt;br /&gt;
&lt;br /&gt;
subgraph Python_Wheels[Python Wheels]&lt;br /&gt;
pylux(pyluxcore.so/.dll)&lt;br /&gt;
wheels(LuxCore Python Wheels)&lt;br /&gt;
end&lt;br /&gt;
class Python_Wheels TYPE;&lt;br /&gt;
class pylux TARGET;&lt;br /&gt;
class wheels TARGET;&lt;br /&gt;
&lt;br /&gt;
subgraph Samples&lt;br /&gt;
luxcoreui(luxcoreui)&lt;br /&gt;
luxcoreconsole(luxcoreconsole)&lt;br /&gt;
end&lt;br /&gt;
class Samples SAMPLES;&lt;br /&gt;
class luxcoreui TARGETSAMPLES;&lt;br /&gt;
class luxcoreconsole TARGETSAMPLES;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph PyLuxCoreTools&lt;br /&gt;
pyluxcon(pyluxcoreconsole)&lt;br /&gt;
pyluxothers(...)&lt;br /&gt;
end&lt;br /&gt;
class PyLuxCoreTools NEUTRAL;&lt;br /&gt;
class pyluxcon TARGETNEUTRAL;&lt;br /&gt;
class pyluxothers TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
subgraph Plugins[Python Plugins]&lt;br /&gt;
blc(BlendLuxCore)&lt;br /&gt;
otherplugins(...)&lt;br /&gt;
end&lt;br /&gt;
class blc TARGETNEUTRAL;&lt;br /&gt;
class otherplugins TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
class Plugins NEUTRAL;&lt;br /&gt;
&lt;br /&gt;
%% Warning: order matters&lt;br /&gt;
deps--&amp;gt;lux&lt;br /&gt;
deps--&amp;gt;luxa&lt;br /&gt;
deps--&amp;gt;luxcoreui&lt;br /&gt;
deps--&amp;gt;luxcoreconsole&lt;br /&gt;
&lt;br /&gt;
luxa---&amp;gt;pylux&lt;br /&gt;
lux--&amp;gt;luxcoreui&lt;br /&gt;
lux--&amp;gt;luxcoreconsole&lt;br /&gt;
deps--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pylux--&amp;gt;wheels&lt;br /&gt;
wheels-. runtime .-&amp;gt;blc&lt;br /&gt;
wheels-. runtime .-&amp;gt;otherplugins&lt;br /&gt;
&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxcon&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxothers&lt;br /&gt;
&lt;br /&gt;
Python:::EXTDEP--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Mermaid version: 8.14.0&lt;br /&gt;
%% https://github.com/mermaid-js/mermaid/blob/8.14.0/src/defaultConfig.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target !! Source Repository !! Content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;External Dependencies&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;] || A bundled Conan cache populated with LuxCoreRender external dependency binaries, built from sources. Please refer to [https://github.com/LuxCoreRender/LuxCoreDeps/blob/main/README.md LuxCoreDeps README] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;LuxCore&amp;lt;/b&amp;gt; || [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || LuxCore core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Sample C++ programs, illustrating luxcore use, namely &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python bindings of core binaries, in the form of Python wheels (1 per pair Platform/Python version).&amp;lt;/br&amp;gt; As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Plugins&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/BlendLuxCore &amp;lt;code&amp;gt;BlendLuxCore&amp;lt;/code&amp;gt;] etc. || Plugins to expose LuxCore in various external applications, notably Blender. &amp;lt;/br&amp;gt; Written in Python and relying on Python Wheels as runtime dependency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;PyLuxCoreTools&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python LuxCore Tools: set of command line tools based on pyluxcore, written in Python.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Targeted platforms ==&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender aims at being available on the following 4 platforms:&lt;br /&gt;
* Linux (glibc 2.28+)&lt;br /&gt;
* Windows&lt;br /&gt;
* MacOS Intel (&amp;gt;=10.15)&lt;br /&gt;
* MacOS Arm (&amp;gt;=12.0)&lt;br /&gt;
&lt;br /&gt;
For Python-related targets, LuxCoreRender aims at being declined for [https://devguide.python.org/versions all Python versions supported at a given time].&lt;br /&gt;
&lt;br /&gt;
= Workflow Types =&lt;br /&gt;
&lt;br /&gt;
We distinguish between two types of build workflows:&lt;br /&gt;
* Developer workflows&lt;br /&gt;
* Publisher workflows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Developer Workflows | Developer workflows]]&#039;&#039; are designed for development, debugging and test steps.&lt;br /&gt;
&lt;br /&gt;
Their purpose is to allow development and verify the code is ready for publication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Publisher Workflows | Publisher workflows]]&#039;&#039; are designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components.&lt;br /&gt;
&lt;br /&gt;
They exclusively take place in a CI/CD Github pipeline.&lt;br /&gt;
&lt;br /&gt;
These workflows are not designed for debugging or testing the underlying code. Execution of these workflows assumes that the development phase has been correctly completed and the underlying code is ready for final build and release. See [[#Developer Workflows | Developer Workflows]] to learn how to get code ready for final build.&lt;br /&gt;
&lt;br /&gt;
Running these workflows require users to be granted of extended rights on LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
= Developer Workflows =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need several build tools installed and referenced in the PATH.&lt;br /&gt;
&lt;br /&gt;
First, ensure you have a suitable toolchain:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OS !! Compiler !! Minimal version&lt;br /&gt;
|-&lt;br /&gt;
| Windows || MSVC || 194x latest version&lt;br /&gt;
|-&lt;br /&gt;
| Linux|| gcc || 14&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Intel|| XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Arm || XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toolchain compliance is a very sensitive condition for a successful build. Before filing any claim, please check that your toolchain complies with the above requirements.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then ensure the following software is also installed and available in your PATH:&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/ Git]&lt;br /&gt;
* [https://cli.github.com/ Github CLI] (optional but recommended - for dependency signature checking)&lt;br /&gt;
* [https://www.python.org/ Python 3] - any [https://devguide.python.org/versions/ currently supported version]&lt;br /&gt;
* [https://conan.io Conan] latest version (pip install conan)&lt;br /&gt;
* [https://github.com/pypa/wheel/tree/main Wheel] latest version (pip install wheel)&lt;br /&gt;
* [https://cmake.org/ CMake] &amp;gt;= 3.29&lt;br /&gt;
* [https://github.com/nektos/act nektos/act] (optional but recommended - for local build based on Github workflows)&lt;br /&gt;
* [https://pypi.org/project/repairwheel repairwheel] (optional but recommended - for local build of test wheels)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platform specifics:&lt;br /&gt;
* For Windows, ensure the command line is configured for building (&amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;).&lt;br /&gt;
* For Linux, you&#039;ll need &amp;lt;code&amp;gt;pkgconfig&amp;lt;/code&amp;gt; in addition.&lt;br /&gt;
* For MacOS, you&#039;ll need to ensure CC and CXX point to LLVM clang/clang++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Accounts&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Github account&#039;&#039; is mandatory for LuxCore development.&lt;br /&gt;
&lt;br /&gt;
Following accounts are also recommended, in order to get in touch with LuxCore community:&lt;br /&gt;
* [https://forums.luxcorerender.org/ LuxCoreRender Forums]&lt;br /&gt;
* [https://discord.gg/chPGsKV LuxCoreRender Discord channel]&lt;br /&gt;
&lt;br /&gt;
== General Developer Workflow ==&lt;br /&gt;
&lt;br /&gt;
To compile and verify LuxCore component modifications in development process, there are 3 stages:&lt;br /&gt;
* Local plain build: only run build system (cmake) on developer computer&lt;br /&gt;
* Local Continuous Integration build: run full Continuous Integration workflow on developer computer&lt;br /&gt;
* Server Continuous Integration build: run full Continuous Integration workflow on server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Local plain build&amp;lt;/i&amp;gt; is generally faster than other builds and does not require to commit changes beforehand. Plain build installs a minimal build configuration (dependencies), but heavily relies on computer build environment for the rest (build tools, system libraries etc.). As a counterpart, it builds only for the platform where it is executed and can be significantly altered by local conditions (build tools local versions, dependency local versions etc.), thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;LocalCI &amp;lt;/i&amp;gt; is generally faster than Server build, but slower than local plain build. CI workflow installs a complete build environment (compilers, sdk, build tools, containers, dependencies etc.) before running build system. It does not require to commit changes beforehand. However, it builds only for the platform where it is executed, thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;I&amp;gt;Server CI&amp;lt;/i&amp;gt;, if successful, should guarantee success when publishing, as it occurs in conditions similar to release workflow (all platforms, complete build environment). As a counterpart, it is generally significantly slower than local builds and also implies to commit and push changes beforehand, even if the code is in unstable state.&lt;br /&gt;
&lt;br /&gt;
The recommended workflow thus strives to make the most of all stages:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart TD;&lt;br /&gt;
&lt;br /&gt;
fork(Fork Source repository in your own Github space)&lt;br /&gt;
clone(&amp;quot;Clone your fork locally&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git clone...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
devel(Make modifications in your local fork)&lt;br /&gt;
localBuild(&amp;quot;&amp;lt;b&amp;gt;Run local plain build&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;...&amp;quot;)&lt;br /&gt;
localCI(&amp;quot;&amp;lt;b&amp;gt;Run local CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
git(&amp;quot;Commit, Rebase &amp;amp; Push&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git ...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
serverCI(&amp;lt;b&amp;gt;Run server CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;Github workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
PR(PR your changes to Source repository)&lt;br /&gt;
&lt;br /&gt;
fork--&amp;gt;clone&lt;br /&gt;
clone--&amp;gt;devel&lt;br /&gt;
devel--&amp;gt;localBuild&lt;br /&gt;
localBuild--&amp;gt;localCI&lt;br /&gt;
localCI-- &amp;quot;&amp;lt;i&amp;gt;Success&amp;lt;/br&amp;gt;(including debug &amp;amp; tests)&amp;lt;/i&amp;gt;&amp;quot; --&amp;gt;git&lt;br /&gt;
git--&amp;gt;serverCI&lt;br /&gt;
serverCI-- &amp;lt;i&amp;gt;Success&amp;lt;/i&amp;gt; --&amp;gt;PR&lt;br /&gt;
&lt;br /&gt;
localBuild &amp;amp; localCI &amp;amp; serverCI ----&amp;gt; |&amp;lt;i&amp;gt;Failure&amp;lt;/i&amp;gt;| devel&lt;br /&gt;
&lt;br /&gt;
classDef BUILD fill:#acc,stroke-width:4px;&lt;br /&gt;
class localBuild BUILD;&lt;br /&gt;
class localCI BUILD;&lt;br /&gt;
class serverCI BUILD;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the common process between all components. Each step will then be adapted to each component, as explained below.&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
* Running local CI relies on [https://github.com/nektos/act &amp;lt;code&amp;gt;nektos/act&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Rebase must be made against upstream directory (&amp;lt;code&amp;gt;git pull --rebase upstream &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;)before pushing&lt;br /&gt;
* Push must be made towards developer own fork. Caveat: do not try to push directly to upstream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build External Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
Dependency local plain build is possible but:&lt;br /&gt;
* Local plain build IS NOT THE RECOMMENDED BUILD for final deps. This build is solely intended for intermediary development and debugging. No support will be provided when used out-of-scope.&lt;br /&gt;
* Local plain build has only be tested on Linux, with gcc &amp;gt;=14. For other platforms, adaptations should be necessary (contributions welcome). &lt;br /&gt;
* Local plain build is much impacted by local particulars (local compiler version, dependencies already in cache or in system dirs etc.) and therefore does not guarantee further success for other (recommended) builds.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
In addition with general [[#Prerequisites_2 | Prerequisites]], you&#039;ll need oneAPI ISPC compiler.&lt;br /&gt;
&lt;br /&gt;
==== Conan cache interaction ====&lt;br /&gt;
&lt;br /&gt;
The build relies on the local Conan cache, which will be modified by the process. You may want to make a copy beforehand.&lt;br /&gt;
&lt;br /&gt;
In some scenarios, you may also want to reset your Conan cache (warning: may remove files unrelated to LuxCoreDeps):&lt;br /&gt;
&amp;lt;pre&amp;gt;conan remove -c &amp;quot;*&amp;quot;  # Be careful: may remove packages unrelated to LuxCoreDeps!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Run ====&lt;br /&gt;
&lt;br /&gt;
To run a plain local build, run the following statements in a console, from the root of LuxCoreDeps repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export RUNNER_OS=&amp;lt;os&amp;gt;&lt;br /&gt;
export RUNNER_ARCH=&amp;lt;arch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LUXDEPS_VERSION=test&lt;br /&gt;
export GCC_VERSION=14   # Note: even for gcc &amp;gt; 14&lt;br /&gt;
export WORKSPACE=.&lt;br /&gt;
export CXX_VERSION=20&lt;br /&gt;
export CMAKE_POLICY_VERSION_MINIMUM=3.25&lt;br /&gt;
export cache_dir&lt;br /&gt;
&lt;br /&gt;
./run_conan.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;code&amp;gt;RUNNER_OS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RUNNER_ARCH&amp;lt;/code&amp;gt; in:&lt;br /&gt;
* &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
reflecting your build platform.&lt;br /&gt;
&lt;br /&gt;
No detection is made (compiler, OS, arch...) . You&#039;ll have to do it on your own and set environment variables accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
Conan will produce a bunch of scripts in the root of LuxCoreDeps repo. You can clean them with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt; ./utils/clean-conan-files.sh &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; on workflows located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder, for instance &amp;lt;code&amp;gt;.github/workflows/build.yml&amp;lt;/code&amp;gt; workflow.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more convenience, a wrapper script is also provided in &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt; repository (Linux only, at the moment): &amp;lt;pre&amp;gt;./utils/local-CI-build.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This process relies on the following Github workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/checker.yml &amp;lt;code&amp;gt;LuxCore Dependency Checker&amp;lt;/code&amp;gt;].&lt;br /&gt;
&amp;lt;/br&amp;gt;Important points:&lt;br /&gt;
* Your changes must have been committed and pushed to repository before.&lt;br /&gt;
* The Checker workflow is actually also triggered on push event, so you may not have to run it by yourself&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
== Build LuxCore, Samples &amp;amp; Python Wheels ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First, we will assume you have correctly completed the [[#Prerequisites_2 | Prerequisites]]. &lt;br /&gt;
&lt;br /&gt;
Second, we will also assume you&#039;ve already git-cloned LuxCore on your local machine, opened a terminal, changed directory to LuxCore folder and git-checked out the branch that you want to build (+ for Windows: initialized build environment with &amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Basic build ====&lt;br /&gt;
&lt;br /&gt;
Our build system internally relies on &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt; but, for more convenience, everything has been wrapped into &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-like statements.&lt;br /&gt;
&lt;br /&gt;
So, to build LuxCore, one just have to enter the following magic words:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make deps&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should retrieve and install LuxCore dependencies, configure the project and run the build. That&#039;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For subsequent builds, if no modification have been made to dependencies, you&#039;ll just have to re-enter: &amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Specific targets ====&lt;br /&gt;
&lt;br /&gt;
If you want to target a specific component, you can replace the above plain &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; by one of the following verbs:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make pyluxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreconsole&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starting from version 2.11, this method can build a &amp;quot;test wheel&amp;quot;. This is a simplified wheel, only for current platform and current Python version, for testing purpose. The test wheel is particularly useful for developing/debugging LuxCore/BlendLuxCore integration.&lt;br /&gt;
The verb is:&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also build Doxygen documentation with the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make doc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Build type ====&lt;br /&gt;
&lt;br /&gt;
By default, this method builds a release version, striped from all symbols. If you want to build a debug version, enter the following before any &amp;lt;code&amp;gt;make ...&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Local dependency set ====&lt;br /&gt;
&lt;br /&gt;
It is possible to use a local dependency set, rather than relying on automatic downloading. It is especially useful for developing/debugging of LuxCoreDeps/LuxCore integration. In this case, one can replace the &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt; statement by the following one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m build-system.luxmake.deps --local &amp;lt;path/to/local/deps&amp;gt; --release &amp;lt;release&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: &amp;lt;code&amp;gt;&amp;lt;release&amp;gt;&amp;lt;/code&amp;gt; is the release tag used by your local dependency set. If you build this set locally, it should likely be &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
You can remove build outputs with one of the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
The former will remove build files, however preserving dependencies. &lt;br /&gt;
The latter will remove everything and will require to reinstall dependencies (&amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This method is complementary to Local plain build, with the following additional capabilities:&lt;br /&gt;
* test the LuxCore build in an environment close to the release environment (manylinux container, for instance)&lt;br /&gt;
* can build wheels&lt;br /&gt;
* debug any changes made to the build workflow&lt;br /&gt;
&lt;br /&gt;
It consists in running Github workflows locally, via &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;. Github workflows are located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; invokation can be made on command line but, for convenience, a wrapper script is provided (for Linux): &amp;lt;pre&amp;gt;./build-helpers/debug/debug_wheels.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Caveat: this build can produce wheels, but only for the host platform (no cross-compiling).&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
The process is nearly the same as publisher build, but the release steps are skipped. For that purpose, another Github workflow has to be executed: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-builder.yml &amp;lt;code&amp;gt;LuxCore Python Wheels Builder&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Please note that your changes must have been committed to repository before running the workflow.&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
= Publisher Workflows =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
For these workflows, a Github account is required, with extended rights on the source repositories.&lt;br /&gt;
&lt;br /&gt;
== General Workflow ==&lt;br /&gt;
&lt;br /&gt;
The general workflow for publishing is in 3 parts:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
flowchart TD;&lt;br /&gt;
subgraph Build[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;BUILD &amp;amp; RELEASE DRAFT &amp;lt;/br&amp;gt;(Run Releaser workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padBuild(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
repo(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;Actions menu&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
select(&amp;quot;Select &amp;lt;code&amp;gt;[Releaser workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwf(Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button, in the upper-right corner)&lt;br /&gt;
branch(Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt; in drop-down menu)&lt;br /&gt;
options(Set workflow options)&lt;br /&gt;
validate(Click &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
wait(Wait for build to complete)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Release[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;MAKE FINAL RELEASE&amp;lt;/br&amp;gt;(Switch release to final status)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padRelease(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
release(&amp;quot;Open &amp;lt;code&amp;gt;[Release folder]&amp;lt;/code&amp;gt;,&amp;lt;/br&amp;gt; find the newly-built release (in Draft mode) &amp;lt;/br&amp;gt; and edit it&amp;quot;)&lt;br /&gt;
complete(Add relevant information: change log, comments on version etc.)&lt;br /&gt;
dedraft(Unset &amp;lt;code&amp;gt;Draft&amp;lt;/code&amp;gt; checkbox)&lt;br /&gt;
update(Click &amp;lt;code&amp;gt;Publish release&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Update release&amp;lt;/code&amp;gt; to finalize)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Deploy[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;PUBLISH&amp;lt;/br&amp;gt;(Run Publisher workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padDeploy(&amp;quot; &amp;quot;)&lt;br /&gt;
repoDeploy(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;[Actions menu]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
selectDeploy(&amp;quot;Select &amp;lt;code&amp;gt;[Publisher workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwfDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; drop-down button, in the upper-right corner&amp;quot;)&lt;br /&gt;
choiceDeploy(&amp;quot;Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt;, set the &amp;lt;code&amp;gt;Tag to publish&amp;lt;/code&amp;gt; and uncheck &amp;lt;code&amp;gt;Publish on Pypi Test&amp;lt;/code&amp;gt; if needed&amp;quot;)&lt;br /&gt;
validateDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button&amp;quot;)&lt;br /&gt;
waitDeploy(&amp;quot;Wait for deployment to complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
padBuild---repo&lt;br /&gt;
repo--&amp;gt;select&lt;br /&gt;
select--&amp;gt;runwf&lt;br /&gt;
runwf--&amp;gt;branch&lt;br /&gt;
branch--&amp;gt;options&lt;br /&gt;
options--&amp;gt;validate&lt;br /&gt;
validate--&amp;gt;wait:::WAIT&lt;br /&gt;
linkStyle 0 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padRelease---release&lt;br /&gt;
release--&amp;gt;complete&lt;br /&gt;
complete--&amp;gt;dedraft&lt;br /&gt;
dedraft--&amp;gt;update&lt;br /&gt;
linkStyle 7 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padDeploy:::INVISIBLE---repoDeploy&lt;br /&gt;
repoDeploy--&amp;gt;selectDeploy&lt;br /&gt;
selectDeploy--&amp;gt;runwfDeploy&lt;br /&gt;
runwfDeploy--&amp;gt;choiceDeploy&lt;br /&gt;
choiceDeploy--&amp;gt;validateDeploy&lt;br /&gt;
validateDeploy--&amp;gt;waitDeploy:::WAIT&lt;br /&gt;
linkStyle 11 stroke:#fff,color:blue,stroke-width:0px;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build-- &amp;lt;i&amp;gt;if success&amp;lt;/i&amp;gt; --&amp;gt;Release&lt;br /&gt;
Release-- &amp;lt;i&amp;gt;if success &amp;amp; if needed&amp;lt;/i&amp;gt; --&amp;gt;Deploy&lt;br /&gt;
&lt;br /&gt;
classDef WAIT fill:#ddd;&lt;br /&gt;
classDef DEPS fill:#e4d8ff,stroke:#9488af;&lt;br /&gt;
classDef INVISIBLE fill:#ffffffff,stroke:#ffffffff,stroke-width:0px,font-color:#ffffffff;&lt;br /&gt;
classDef OPTIONAL stroke-dasharray: 5 5;&lt;br /&gt;
&lt;br /&gt;
class Deploy OPTIONAL;&lt;br /&gt;
&lt;br /&gt;
%% Note: padXXX is a poor hack to create a top-margin in subgraph...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A few comments:&lt;br /&gt;
* &amp;lt;code&amp;gt;[bracketed tokens]&amp;lt;/code&amp;gt; refer to data specific to each component, which will be detailed below.&lt;br /&gt;
* Publish part is optional, it will depends on the target&lt;br /&gt;
* &#039;&#039;Caveat: if you provide an already-existing release version number during the process, the workflow will replace the existing release with the newly-built one. This can be what you expected... or not. Be cautious.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Per-target details ==&lt;br /&gt;
&lt;br /&gt;
=== External Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreRender/LuxCoreDeps&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/release.yml &amp;lt;code&amp;gt;LuxCore Dependency Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCoreDeps/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
As a byproduct, External Dependencies are not intended to be deployed, so no Publisher workflow is provided.&lt;br /&gt;
&lt;br /&gt;
=== Python Wheels ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As far as wheels are concerned, in addition to building them, it is also necessary to upload them to [https://pypi.org/ PyPi] (&amp;quot;publish&amp;quot; them), so that they are available for [https://pypi.org/project/pip pip] installation.&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-releaser.yml &amp;lt;code&amp;gt;LuxCore Wheels Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-publisher.yml &amp;lt;code&amp;gt;LuxCore Wheels Publisher&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Prerequisite: you must have released a compatible version of External Dependencies (LuxCoreDeps) before building Python Wheels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Samples ===&lt;br /&gt;
&lt;br /&gt;
As we plan to replace Samples by equivalent Python tools and thus deprecate them, the workflow has been limited to the Release part (no publish).&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/sample-releaser.yml &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
=== BlendLuxCore ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;TODO&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Version Management =&lt;br /&gt;
&lt;br /&gt;
== Semantic Versioning ==&lt;br /&gt;
&lt;br /&gt;
Starting for LuxCore version 2.10.0, we require that LuxCoreRender applies [https://semver.org/ Semantic Versioning]. Please strictly enforce this rule when incrementing version numbers.&lt;br /&gt;
&lt;br /&gt;
Remark: component versions does not have to be synced. For instance, in strict application of the standard, the newly created LuxCoreDeps will start at 1.0.0, while at the same time LuxCore is already at 2.10.0&lt;br /&gt;
&lt;br /&gt;
== Dependency Version pointer ==&lt;br /&gt;
&lt;br /&gt;
To make LuxCore know which version of dependencies it must be built against, we use a pointer.&lt;br /&gt;
&lt;br /&gt;
This pointer is stored in the file &amp;lt;code&amp;gt;build-helpers/build-settings.json&amp;lt;/code&amp;gt;, under the path &amp;lt;code&amp;gt;Dependencies/release&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you keep it up-to-date when you upgrade LuxCore components.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2678</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2678"/>
		<updated>2026-04-24T04:12:33Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Caveats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the various processes involved in building LuxCoreRender, starting with version 2.10 “Back-on-track”.&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender&#039;s build system has been significantly modified for version 2.10. This document therefore renders obsolete all [[Building_LuxCoreRender_(legacy)|previous documents]] related to the compilation of older versions (&amp;lt;=2.9).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;TL;DR&amp;lt;/b&amp;gt; If you are just interested in a quick, local (but platform limited) compilation of LuxCore C++ samples or Python wheels, you may want to jump directly to [[#Build LuxCore, Samples &amp;amp; Python Wheels | Build LuxCore, Samples &amp;amp; Python Wheels]].&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Audience =&lt;br /&gt;
&lt;br /&gt;
This document is intended for:&lt;br /&gt;
* LuxCoreRender administrators in charge of releasing the various LuxCoreRender end-products;&lt;br /&gt;
* Developers wishing to contribute to the project;&lt;br /&gt;
* External package maintainers wishing to integrate all or part of LuxCoreRender into a distribution;&lt;br /&gt;
&lt;br /&gt;
This document assumes that the reader is skilled in the following areas:&lt;br /&gt;
* C/C++ compilation&lt;br /&gt;
* [https://cmake.org/ cmake]&lt;br /&gt;
* [https://git-scm.com/ git]&lt;br /&gt;
* [https://docs.github.com/en/actions/writing-workflows Github Workflows]&lt;br /&gt;
* [https://packaging.python.org/en/latest/ Python Packaging], including [https://realpython.com/python-wheels/ Python Wheels format]&lt;br /&gt;
&lt;br /&gt;
Familiarity with [https://conan.io/ Conan] dependency manager may also help.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/br&amp;gt;&lt;br /&gt;
This document is not intended for end-users without any knowledge about application building. Such users are invited to look for already compiled binaries on the official [https://luxcorerender.org/download/ Download] page.&lt;br /&gt;
&lt;br /&gt;
= Build Targets =&lt;br /&gt;
&lt;br /&gt;
== Synoptic ==&lt;br /&gt;
LuxCoreRender contains several build targets, below represented with dependency links:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid:&lt;br /&gt;
%%{&lt;br /&gt;
  init: {&lt;br /&gt;
    &amp;quot;theme&amp;quot;: &amp;quot;forest&amp;quot;,&lt;br /&gt;
    &amp;quot;logLevel&amp;quot;: &amp;quot;info&amp;quot;,&lt;br /&gt;
    &amp;quot;flowchart&amp;quot;: {&amp;quot;curve&amp;quot;: &amp;quot;basis&amp;quot;}&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart LR;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classDef TYPE font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGET font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCOREDEPS fill:#ffe8ff,stroke:#9488af,font-weight:bold,font-size:1.1rem;&lt;br /&gt;
classDef TARGETDEPS fill:#e4d8ff,stroke:#9488af,font-weight:bold,font-size:0.9rem;&lt;br /&gt;
&lt;br /&gt;
classDef LUXCORE fill:#bbceff,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETLUXCORE fill:#7799ee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef SAMPLES fill:#ffffdd,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETSAMPLES fill:#eeeecc,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef NEUTRAL fill:#fafafa,font-weight:bold,font-size:1.1rem,stroke:#999999;&lt;br /&gt;
classDef TARGETNEUTRAL fill:#eeeeee,font-weight:bold,font-size:0.9rem,stroke:#999999;&lt;br /&gt;
&lt;br /&gt;
classDef EXTDEP fill:#00000000,stroke:#00000000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph Dependencies[External Dependencies]&lt;br /&gt;
deps(LuxCore Dependencies)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
class Dependencies LUXCOREDEPS;&lt;br /&gt;
class deps TARGETDEPS;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph LuxCore&lt;br /&gt;
lux(luxcore.so/.dll)&lt;br /&gt;
luxa(luxcore.a)&lt;br /&gt;
end&lt;br /&gt;
class LuxCore LUXCORE;&lt;br /&gt;
class lux TARGETLUXCORE;&lt;br /&gt;
class luxa TARGETLUXCORE;&lt;br /&gt;
&lt;br /&gt;
subgraph Python_Wheels[Python Wheels]&lt;br /&gt;
pylux(pyluxcore.so/.dll)&lt;br /&gt;
wheels(LuxCore Python Wheels)&lt;br /&gt;
end&lt;br /&gt;
class Python_Wheels TYPE;&lt;br /&gt;
class pylux TARGET;&lt;br /&gt;
class wheels TARGET;&lt;br /&gt;
&lt;br /&gt;
subgraph Samples&lt;br /&gt;
luxcoreui(luxcoreui)&lt;br /&gt;
luxcoreconsole(luxcoreconsole)&lt;br /&gt;
end&lt;br /&gt;
class Samples SAMPLES;&lt;br /&gt;
class luxcoreui TARGETSAMPLES;&lt;br /&gt;
class luxcoreconsole TARGETSAMPLES;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
subgraph PyLuxCoreTools&lt;br /&gt;
pyluxcon(pyluxcoreconsole)&lt;br /&gt;
pyluxothers(...)&lt;br /&gt;
end&lt;br /&gt;
class PyLuxCoreTools NEUTRAL;&lt;br /&gt;
class pyluxcon TARGETNEUTRAL;&lt;br /&gt;
class pyluxothers TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
subgraph Plugins[Python Plugins]&lt;br /&gt;
blc(BlendLuxCore)&lt;br /&gt;
otherplugins(...)&lt;br /&gt;
end&lt;br /&gt;
class blc TARGETNEUTRAL;&lt;br /&gt;
class otherplugins TARGETNEUTRAL;&lt;br /&gt;
&lt;br /&gt;
class Plugins NEUTRAL;&lt;br /&gt;
&lt;br /&gt;
%% Warning: order matters&lt;br /&gt;
deps--&amp;gt;lux&lt;br /&gt;
deps--&amp;gt;luxa&lt;br /&gt;
deps--&amp;gt;luxcoreui&lt;br /&gt;
deps--&amp;gt;luxcoreconsole&lt;br /&gt;
&lt;br /&gt;
luxa---&amp;gt;pylux&lt;br /&gt;
lux--&amp;gt;luxcoreui&lt;br /&gt;
lux--&amp;gt;luxcoreconsole&lt;br /&gt;
deps--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pylux--&amp;gt;wheels&lt;br /&gt;
wheels-. runtime .-&amp;gt;blc&lt;br /&gt;
wheels-. runtime .-&amp;gt;otherplugins&lt;br /&gt;
&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxcon&lt;br /&gt;
wheels-. runtime .-&amp;gt;pyluxothers&lt;br /&gt;
&lt;br /&gt;
Python:::EXTDEP--&amp;gt;pylux&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% Mermaid version: 8.14.0&lt;br /&gt;
%% https://github.com/mermaid-js/mermaid/blob/8.14.0/src/defaultConfig.js&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Target !! Source Repository !! Content&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;External Dependencies&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;] || A bundled Conan cache populated with LuxCoreRender external dependency binaries, built from sources. Please refer to [https://github.com/LuxCoreRender/LuxCoreDeps/blob/main/README.md LuxCoreDeps README] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;LuxCore&amp;lt;/b&amp;gt; || [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || LuxCore core binaries, in the form of static and shared libraries: luxcore.so, luxcore_static.lib, luxcore.dll etc.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Sample C++ programs, illustrating luxcore use, namely &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python bindings of core binaries, in the form of Python wheels (1 per pair Platform/Python version).&amp;lt;/br&amp;gt; As a byproduct, a Pythonized version of LuxCore shared library is also built (pyluxcore.so).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;Python Plugins&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/BlendLuxCore &amp;lt;code&amp;gt;BlendLuxCore&amp;lt;/code&amp;gt;] etc. || Plugins to expose LuxCore in various external applications, notably Blender. &amp;lt;/br&amp;gt; Written in Python and relying on Python Wheels as runtime dependency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;b&amp;gt;PyLuxCoreTools&amp;lt;/b&amp;gt;|| [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCore&amp;lt;/code&amp;gt;] || Python LuxCore Tools: set of command line tools based on pyluxcore, written in Python.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Targeted platforms ==&lt;br /&gt;
&lt;br /&gt;
LuxCoreRender aims at being available on the following 4 platforms:&lt;br /&gt;
* Linux (glibc 2.28+)&lt;br /&gt;
* Windows&lt;br /&gt;
* MacOS Intel (&amp;gt;=10.15)&lt;br /&gt;
* MacOS Arm (&amp;gt;=12.0)&lt;br /&gt;
&lt;br /&gt;
For Python-related targets, LuxCoreRender aims at being declined for [https://devguide.python.org/versions all Python versions supported at a given time].&lt;br /&gt;
&lt;br /&gt;
= Workflow Types =&lt;br /&gt;
&lt;br /&gt;
We distinguish between two types of build workflows:&lt;br /&gt;
* Developer workflows&lt;br /&gt;
* Publisher workflows&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Developer Workflows | Developer workflows]]&#039;&#039; are designed for development, debugging and test steps.&lt;br /&gt;
&lt;br /&gt;
Their purpose is to allow development and verify the code is ready for publication.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[[#Publisher Workflows | Publisher workflows]]&#039;&#039; are designed to be used by LuxCoreRender administrators to publish a new release of one or more LuxCoreRender components.&lt;br /&gt;
&lt;br /&gt;
They exclusively take place in a CI/CD Github pipeline.&lt;br /&gt;
&lt;br /&gt;
These workflows are not designed for debugging or testing the underlying code. Execution of these workflows assumes that the development phase has been correctly completed and the underlying code is ready for final build and release. See [[#Developer Workflows | Developer Workflows]] to learn how to get code ready for final build.&lt;br /&gt;
&lt;br /&gt;
Running these workflows require users to be granted of extended rights on LuxCoreRender repositories.&lt;br /&gt;
&lt;br /&gt;
= Developer Workflows =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Tools&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need several build tools installed and referenced in the PATH.&lt;br /&gt;
&lt;br /&gt;
First, ensure you have a suitable toolchain:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OS !! Compiler !! Minimal version&lt;br /&gt;
|-&lt;br /&gt;
| Windows || MSVC || 194x latest version&lt;br /&gt;
|-&lt;br /&gt;
| Linux|| gcc || 14&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Intel|| XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| MacOS Arm || XCode + llvm + libomp || llvm &amp;gt;= 20 &amp;lt;br&amp;gt; (&amp;lt;code&amp;gt;brew install llvm &amp;amp;&amp;amp; brew install libomp&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toolchain compliance is a very sensitive condition for a successful build. Before filing any claim, please check that your toolchain complies with the above requirements.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then ensure the following software is also installed and available in your PATH:&lt;br /&gt;
&lt;br /&gt;
* [https://git-scm.com/ Git]&lt;br /&gt;
* [https://cli.github.com/ Github CLI] (optional but recommended - for dependency signature checking)&lt;br /&gt;
* [https://www.python.org/ Python 3] - any [https://devguide.python.org/versions/ currently supported version]&lt;br /&gt;
* [https://conan.io Conan] latest version (pip install conan)&lt;br /&gt;
* [https://github.com/pypa/wheel/tree/main Wheel] latest version (pip install wheel)&lt;br /&gt;
* [https://cmake.org/ CMake] &amp;gt;= 3.29&lt;br /&gt;
* [https://github.com/nektos/act nektos/act] (optional but recommended - for local build based on Github workflows)&lt;br /&gt;
* [https://pypi.org/project/repairwheel repairwheel] (optional but recommended - for local build of test wheels)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Platform specifics:&lt;br /&gt;
* For Windows, ensure the command line is configured for building (&amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;).&lt;br /&gt;
* For Linux, you&#039;ll need &amp;lt;code&amp;gt;pkgconfig&amp;lt;/code&amp;gt; in addition.&lt;br /&gt;
* For MacOS, you&#039;ll need to ensure CC and CXX point to LLVM clang/clang++&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Accounts&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;Github account&#039;&#039; is mandatory for LuxCore development.&lt;br /&gt;
&lt;br /&gt;
Following accounts are also recommended, in order to get in touch with LuxCore community:&lt;br /&gt;
* [https://forums.luxcorerender.org/ LuxCoreRender Forums]&lt;br /&gt;
* [https://discord.gg/chPGsKV LuxCoreRender Discord channel]&lt;br /&gt;
&lt;br /&gt;
== General Developer Workflow ==&lt;br /&gt;
&lt;br /&gt;
To compile and verify LuxCore component modifications in development process, there are 3 stages:&lt;br /&gt;
* Local plain build: only run build system (cmake) on developer computer&lt;br /&gt;
* Local Continuous Integration build: run full Continuous Integration workflow on developer computer&lt;br /&gt;
* Server Continuous Integration build: run full Continuous Integration workflow on server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Local plain build&amp;lt;/i&amp;gt; is generally faster than other builds and does not require to commit changes beforehand. Plain build installs a minimal build configuration (dependencies), but heavily relies on computer build environment for the rest (build tools, system libraries etc.). As a counterpart, it builds only for the platform where it is executed and can be significantly altered by local conditions (build tools local versions, dependency local versions etc.), thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;LocalCI &amp;lt;/i&amp;gt; is generally faster than Server build, but slower than local plain build. CI workflow installs a complete build environment (compilers, sdk, build tools, containers, dependencies etc.) before running build system. It does not require to commit changes beforehand. However, it builds only for the platform where it is executed, thus not fully guaranteeing that final publish workflow will succeed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;I&amp;gt;Server CI&amp;lt;/i&amp;gt;, if successful, should guarantee success when publishing, as it occurs in conditions similar to release workflow (all platforms, complete build environment). As a counterpart, it is generally significantly slower than local builds and also implies to commit and push changes beforehand, even if the code is in unstable state.&lt;br /&gt;
&lt;br /&gt;
The recommended workflow thus strives to make the most of all stages:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
&lt;br /&gt;
flowchart TD;&lt;br /&gt;
&lt;br /&gt;
fork(Fork Source repository in your own Github space)&lt;br /&gt;
clone(&amp;quot;Clone your fork locally&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git clone...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
devel(Make modifications in your local fork)&lt;br /&gt;
localBuild(&amp;quot;&amp;lt;b&amp;gt;Run local plain build&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;...&amp;quot;)&lt;br /&gt;
localCI(&amp;quot;&amp;lt;b&amp;gt;Run local CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
git(&amp;quot;Commit, Rebase &amp;amp; Push&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;git ...&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
serverCI(&amp;lt;b&amp;gt;Run server CI&amp;lt;/b&amp;gt;&amp;lt;/br&amp;gt;&amp;lt;code&amp;gt;Github workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
PR(PR your changes to Source repository)&lt;br /&gt;
&lt;br /&gt;
fork--&amp;gt;clone&lt;br /&gt;
clone--&amp;gt;devel&lt;br /&gt;
devel--&amp;gt;localBuild&lt;br /&gt;
localBuild--&amp;gt;localCI&lt;br /&gt;
localCI-- &amp;quot;&amp;lt;i&amp;gt;Success&amp;lt;/br&amp;gt;(including debug &amp;amp; tests)&amp;lt;/i&amp;gt;&amp;quot; --&amp;gt;git&lt;br /&gt;
git--&amp;gt;serverCI&lt;br /&gt;
serverCI-- &amp;lt;i&amp;gt;Success&amp;lt;/i&amp;gt; --&amp;gt;PR&lt;br /&gt;
&lt;br /&gt;
localBuild &amp;amp; localCI &amp;amp; serverCI ----&amp;gt; |&amp;lt;i&amp;gt;Failure&amp;lt;/i&amp;gt;| devel&lt;br /&gt;
&lt;br /&gt;
classDef BUILD fill:#acc,stroke-width:4px;&lt;br /&gt;
class localBuild BUILD;&lt;br /&gt;
class localCI BUILD;&lt;br /&gt;
class serverCI BUILD;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the common process between all components. Each step will then be adapted to each component, as explained below.&lt;br /&gt;
&lt;br /&gt;
Comments:&lt;br /&gt;
* Running local CI relies on [https://github.com/nektos/act &amp;lt;code&amp;gt;nektos/act&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Rebase must be made against upstream directory (&amp;lt;code&amp;gt;git pull --rebase upstream &amp;lt;branch&amp;gt;&amp;lt;/code&amp;gt;)before pushing&lt;br /&gt;
* Push must be made towards developer own fork. Caveat: do not try to push directly to upstream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build External Dependencies ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
==== Caveats ====&lt;br /&gt;
Dependeny local plain build is possible but:&lt;br /&gt;
* Local plain build IS NOT THE RECOMMENDED BUILD for final deps. This build is solely intended for intermediary development and debugging. No support will be provided when used out-of-scope.&lt;br /&gt;
* Local plain build has only be tested on Linux, with gcc &amp;gt;=14. For other platforms, adaptations should be necessary (contributions welcome). &lt;br /&gt;
* Local plain build is much impacted by local particulars (local compiler version, dependencies already in cache or in system dirs etc.) and therefore does not guarantee further success for other (recommended) builds.&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
In addition with general [[#Prerequisites_2 | Prerequisites]], you&#039;ll need oneAPI ISPC compiler.&lt;br /&gt;
&lt;br /&gt;
==== Conan cache interaction ====&lt;br /&gt;
&lt;br /&gt;
The build relies on the local Conan cache, which will be modified by the process. You may want to make a copy beforehand.&lt;br /&gt;
&lt;br /&gt;
In some scenarios, you may also want to reset your Conan cache (warning: may remove files unrelated to LuxCoreDeps):&lt;br /&gt;
&amp;lt;pre&amp;gt;conan remove -c &amp;quot;*&amp;quot;  # Be careful: may remove packages unrelated to LuxCoreDeps!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Run ====&lt;br /&gt;
&lt;br /&gt;
To run a plain local build, run the following statements in a console, from the root of LuxCoreDeps repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export RUNNER_OS=&amp;lt;os&amp;gt;&lt;br /&gt;
export RUNNER_ARCH=&amp;lt;arch&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export LUXDEPS_VERSION=test&lt;br /&gt;
export GCC_VERSION=14   # Note: even for gcc &amp;gt; 14&lt;br /&gt;
export WORKSPACE=.&lt;br /&gt;
export CXX_VERSION=20&lt;br /&gt;
export CMAKE_POLICY_VERSION_MINIMUM=3.25&lt;br /&gt;
export cache_dir&lt;br /&gt;
&lt;br /&gt;
./run_conan.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;code&amp;gt;RUNNER_OS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RUNNER_ARCH&amp;lt;/code&amp;gt; in:&lt;br /&gt;
* &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Windows&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;X64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;macOS&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
reflecting your build platform.&lt;br /&gt;
&lt;br /&gt;
No detection is made (compiler, OS, arch...) . You&#039;ll have to do it on your own and set environment variables accordingly.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
Conan will produce a bunch of scripts in the root of LuxCoreDeps repo. You can clean them with the following:&lt;br /&gt;
&amp;lt;pre&amp;gt; ./utils/clean-conan-files.sh &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; on workflows located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder, for instance &amp;lt;code&amp;gt;.github/workflows/build.yml&amp;lt;/code&amp;gt; workflow.&amp;lt;/br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more convenience, a wrapper script is also provided in &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt; repository (Linux only, at the moment): &amp;lt;pre&amp;gt;./utils/local-CI-build.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This process relies on the following Github workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/checker.yml &amp;lt;code&amp;gt;LuxCore Dependency Checker&amp;lt;/code&amp;gt;].&lt;br /&gt;
&amp;lt;/br&amp;gt;Important points:&lt;br /&gt;
* Your changes must have been committed and pushed to repository before.&lt;br /&gt;
* The Checker workflow is actually also triggered on push event, so you may not have to run it by yourself&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
== Build LuxCore, Samples &amp;amp; Python Wheels ==&lt;br /&gt;
&lt;br /&gt;
=== Local Plain Build ===&lt;br /&gt;
&lt;br /&gt;
==== Prerequisites ====&lt;br /&gt;
&lt;br /&gt;
First, we will assume you have correctly completed the [[#Prerequisites_2 | Prerequisites]]. &lt;br /&gt;
&lt;br /&gt;
Second, we will also assume you&#039;ve already git-cloned LuxCore on your local machine, opened a terminal, changed directory to LuxCore folder and git-checked out the branch that you want to build (+ for Windows: initialized build environment with &amp;lt;code&amp;gt;vcvarsall.bat&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==== Basic build ====&lt;br /&gt;
&lt;br /&gt;
Our build system internally relies on &amp;lt;code&amp;gt;cmake&amp;lt;/code&amp;gt; but, for more convenience, everything has been wrapped into &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;-like statements.&lt;br /&gt;
&lt;br /&gt;
So, to build LuxCore, one just have to enter the following magic words:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make deps&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should retrieve and install LuxCore dependencies, configure the project and run the build. That&#039;s all!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For subsequent builds, if no modification have been made to dependencies, you&#039;ll just have to re-enter: &amp;lt;pre&amp;gt;make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Specific targets ====&lt;br /&gt;
&lt;br /&gt;
If you want to target a specific component, you can replace the above plain &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; by one of the following verbs:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make pyluxcore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreconsole&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Starting from version 2.11, this method can build a &amp;quot;test wheel&amp;quot;. This is a simplified wheel, only for current platform and current Python version, for testing purpose. The test wheel is particularly useful for developing/debugging LuxCore/BlendLuxCore integration.&lt;br /&gt;
The verb is:&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also build Doxygen documentation with the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make doc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Build type ====&lt;br /&gt;
&lt;br /&gt;
By default, this method builds a release version, striped from all symbols. If you want to build a debug version, enter the following before any &amp;lt;code&amp;gt;make ...&amp;lt;/code&amp;gt; command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Local dependency set ====&lt;br /&gt;
&lt;br /&gt;
It is possible to use a local dependency set, rather than relying on automatic downloading. It is especially useful for developing/debugging of LuxCoreDeps/LuxCore integration. In this case, one can replace the &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt; statement by the following one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m build-system.luxmake.deps --local &amp;lt;path/to/local/deps&amp;gt; --release &amp;lt;release&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nota: &amp;lt;code&amp;gt;&amp;lt;release&amp;gt;&amp;lt;/code&amp;gt; is the release tag used by your local dependency set. If you build this set locally, it should likely be &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Cleaning ====&lt;br /&gt;
&lt;br /&gt;
You can remove build outputs with one of the following statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;make clean&amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
The former will remove build files, however preserving dependencies. &lt;br /&gt;
The latter will remove everything and will require to reinstall dependencies (&amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Local Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
This method is complementary to Local plain build, with the following additional capabilities:&lt;br /&gt;
* test the LuxCore build in an environment close to the release environment (manylinux container, for instance)&lt;br /&gt;
* can build wheels&lt;br /&gt;
* debug any changes made to the build workflow&lt;br /&gt;
&lt;br /&gt;
It consists in running Github workflows locally, via &amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt;. Github workflows are located in &amp;lt;code&amp;gt;.github/workflows&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;act&amp;lt;/code&amp;gt; invokation can be made on command line but, for convenience, a wrapper script is provided (for Linux): &amp;lt;pre&amp;gt;./build-helpers/debug/debug_wheels.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;Caveat: this build can produce wheels, but only for the host platform (no cross-compiling).&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server Continuous Integration ===&lt;br /&gt;
&lt;br /&gt;
The process is nearly the same as publisher build, but the release steps are skipped. For that purpose, another Github workflow has to be executed: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-builder.yml &amp;lt;code&amp;gt;LuxCore Python Wheels Builder&amp;lt;/code&amp;gt;].&lt;br /&gt;
&lt;br /&gt;
Please note that your changes must have been committed to repository before running the workflow.&lt;br /&gt;
&lt;br /&gt;
If build succeeds, you will find the expected outputs in Artifacts section of the action run.&lt;br /&gt;
&lt;br /&gt;
= Publisher Workflows =&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
For these workflows, a Github account is required, with extended rights on the source repositories.&lt;br /&gt;
&lt;br /&gt;
== General Workflow ==&lt;br /&gt;
&lt;br /&gt;
The general workflow for publishing is in 3 parts:&lt;br /&gt;
&lt;br /&gt;
{{#mermaid: &lt;br /&gt;
&lt;br /&gt;
%%{ init: {&lt;br /&gt;
  &#039;theme&#039;: &#039;neutral&#039;,&lt;br /&gt;
  &#039;flowchart&#039;: { &#039;curve&#039;: &#039;monotoneX&#039; }&lt;br /&gt;
  }&lt;br /&gt;
}%%&lt;br /&gt;
flowchart TD;&lt;br /&gt;
subgraph Build[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;BUILD &amp;amp; RELEASE DRAFT &amp;lt;/br&amp;gt;(Run Releaser workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padBuild(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
repo(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;Actions menu&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
select(&amp;quot;Select &amp;lt;code&amp;gt;[Releaser workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwf(Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button, in the upper-right corner)&lt;br /&gt;
branch(Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt; in drop-down menu)&lt;br /&gt;
options(Set workflow options)&lt;br /&gt;
validate(Click &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt;)&lt;br /&gt;
wait(Wait for build to complete)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Release[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;MAKE FINAL RELEASE&amp;lt;/br&amp;gt;(Switch release to final status)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padRelease(&amp;quot; &amp;quot;):::INVISIBLE&lt;br /&gt;
release(&amp;quot;Open &amp;lt;code&amp;gt;[Release folder]&amp;lt;/code&amp;gt;,&amp;lt;/br&amp;gt; find the newly-built release (in Draft mode) &amp;lt;/br&amp;gt; and edit it&amp;quot;)&lt;br /&gt;
complete(Add relevant information: change log, comments on version etc.)&lt;br /&gt;
dedraft(Unset &amp;lt;code&amp;gt;Draft&amp;lt;/code&amp;gt; checkbox)&lt;br /&gt;
update(Click &amp;lt;code&amp;gt;Publish release&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;Update release&amp;lt;/code&amp;gt; to finalize)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
subgraph Deploy[&amp;quot;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;PUBLISH&amp;lt;/br&amp;gt;(Run Publisher workflow)&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;quot;]&lt;br /&gt;
padDeploy(&amp;quot; &amp;quot;)&lt;br /&gt;
repoDeploy(&amp;quot;Go to &amp;lt;code&amp;gt;[Source repository]&amp;lt;/code&amp;gt; on Github and open &amp;lt;code&amp;gt;[Actions menu]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
selectDeploy(&amp;quot;Select &amp;lt;code&amp;gt;[Publisher workflow]&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
runwfDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; drop-down button, in the upper-right corner&amp;quot;)&lt;br /&gt;
choiceDeploy(&amp;quot;Select &amp;lt;code&amp;gt;Branch&amp;lt;/code&amp;gt;, set the &amp;lt;code&amp;gt;Tag to publish&amp;lt;/code&amp;gt; and uncheck &amp;lt;code&amp;gt;Publish on Pypi Test&amp;lt;/code&amp;gt; if needed&amp;quot;)&lt;br /&gt;
validateDeploy(&amp;quot;Click on &amp;lt;code&amp;gt;Run workflow&amp;lt;/code&amp;gt; button&amp;quot;)&lt;br /&gt;
waitDeploy(&amp;quot;Wait for deployment to complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
padBuild---repo&lt;br /&gt;
repo--&amp;gt;select&lt;br /&gt;
select--&amp;gt;runwf&lt;br /&gt;
runwf--&amp;gt;branch&lt;br /&gt;
branch--&amp;gt;options&lt;br /&gt;
options--&amp;gt;validate&lt;br /&gt;
validate--&amp;gt;wait:::WAIT&lt;br /&gt;
linkStyle 0 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padRelease---release&lt;br /&gt;
release--&amp;gt;complete&lt;br /&gt;
complete--&amp;gt;dedraft&lt;br /&gt;
dedraft--&amp;gt;update&lt;br /&gt;
linkStyle 7 stroke:#fff,stroke-width:0px,color:blue;&lt;br /&gt;
&lt;br /&gt;
padDeploy:::INVISIBLE---repoDeploy&lt;br /&gt;
repoDeploy--&amp;gt;selectDeploy&lt;br /&gt;
selectDeploy--&amp;gt;runwfDeploy&lt;br /&gt;
runwfDeploy--&amp;gt;choiceDeploy&lt;br /&gt;
choiceDeploy--&amp;gt;validateDeploy&lt;br /&gt;
validateDeploy--&amp;gt;waitDeploy:::WAIT&lt;br /&gt;
linkStyle 11 stroke:#fff,color:blue,stroke-width:0px;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build-- &amp;lt;i&amp;gt;if success&amp;lt;/i&amp;gt; --&amp;gt;Release&lt;br /&gt;
Release-- &amp;lt;i&amp;gt;if success &amp;amp; if needed&amp;lt;/i&amp;gt; --&amp;gt;Deploy&lt;br /&gt;
&lt;br /&gt;
classDef WAIT fill:#ddd;&lt;br /&gt;
classDef DEPS fill:#e4d8ff,stroke:#9488af;&lt;br /&gt;
classDef INVISIBLE fill:#ffffffff,stroke:#ffffffff,stroke-width:0px,font-color:#ffffffff;&lt;br /&gt;
classDef OPTIONAL stroke-dasharray: 5 5;&lt;br /&gt;
&lt;br /&gt;
class Deploy OPTIONAL;&lt;br /&gt;
&lt;br /&gt;
%% Note: padXXX is a poor hack to create a top-margin in subgraph...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A few comments:&lt;br /&gt;
* &amp;lt;code&amp;gt;[bracketed tokens]&amp;lt;/code&amp;gt; refer to data specific to each component, which will be detailed below.&lt;br /&gt;
* Publish part is optional, it will depends on the target&lt;br /&gt;
* &#039;&#039;Caveat: if you provide an already-existing release version number during the process, the workflow will replace the existing release with the newly-built one. This can be what you expected... or not. Be cautious.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Per-target details ==&lt;br /&gt;
&lt;br /&gt;
=== External Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCoreDeps &amp;lt;code&amp;gt;LuxCoreRender/LuxCoreDeps&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCoreDeps/actions/workflows/release.yml &amp;lt;code&amp;gt;LuxCore Dependency Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCoreDeps/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
As a byproduct, External Dependencies are not intended to be deployed, so no Publisher workflow is provided.&lt;br /&gt;
&lt;br /&gt;
=== Python Wheels ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As far as wheels are concerned, in addition to building them, it is also necessary to upload them to [https://pypi.org/ PyPi] (&amp;quot;publish&amp;quot; them), so that they are available for [https://pypi.org/project/pip pip] installation.&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-releaser.yml &amp;lt;code&amp;gt;LuxCore Wheels Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/wheel-publisher.yml &amp;lt;code&amp;gt;LuxCore Wheels Publisher&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Prerequisite: you must have released a compatible version of External Dependencies (LuxCoreDeps) before building Python Wheels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Samples ===&lt;br /&gt;
&lt;br /&gt;
As we plan to replace Samples by equivalent Python tools and thus deprecate them, the workflow has been limited to the Release part (no publish).&lt;br /&gt;
&lt;br /&gt;
* Source repository: [https://github.com/LuxCoreRender/LuxCore &amp;lt;code&amp;gt;LuxCoreRender/LuxCore&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Releaser workflow: [https://github.com/LuxCoreRender/LuxCore/actions/workflows/sample-releaser.yml &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Release folder: [https://github.com/LuxCoreRender/LuxCore/releases &amp;lt;code&amp;gt;Releases&amp;lt;/code&amp;gt;]&lt;br /&gt;
* Publisher workflow: ∅&lt;br /&gt;
&lt;br /&gt;
=== BlendLuxCore ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;TODO&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Version Management =&lt;br /&gt;
&lt;br /&gt;
== Semantic Versioning ==&lt;br /&gt;
&lt;br /&gt;
Starting for LuxCore version 2.10.0, we require that LuxCoreRender applies [https://semver.org/ Semantic Versioning]. Please strictly enforce this rule when incrementing version numbers.&lt;br /&gt;
&lt;br /&gt;
Remark: component versions does not have to be synced. For instance, in strict application of the standard, the newly created LuxCoreDeps will start at 1.0.0, while at the same time LuxCore is already at 2.10.0&lt;br /&gt;
&lt;br /&gt;
== Dependency Version pointer ==&lt;br /&gt;
&lt;br /&gt;
To make LuxCore know which version of dependencies it must be built against, we use a pointer.&lt;br /&gt;
&lt;br /&gt;
This pointer is stored in the file &amp;lt;code&amp;gt;build-helpers/build-settings.json&amp;lt;/code&amp;gt;, under the path &amp;lt;code&amp;gt;Dependencies/release&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Make sure you keep it up-to-date when you upgrade LuxCore components.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2677</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2677"/>
		<updated>2026-04-24T04:10:57Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I generate debug information for dependencies (LuxCoreDeps)? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local dependency build, at the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2676</id>
		<title>Building LuxCoreRender - FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2676"/>
		<updated>2026-04-24T04:10:23Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is it possible to set-up a local-only, end-to-end, build chain? ==&lt;br /&gt;
&lt;br /&gt;
Yes it is, but for Linux only, at the moment, and starting with v2.11.&lt;br /&gt;
&amp;lt;p&amp;gt;Also, important caveat: this kind of build is solely intended for development and tests. Do not use in production&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#1: Build dependencies locally&lt;br /&gt;
&lt;br /&gt;
Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#2: Inject local dependencies in LuxCore build&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m build-system.luxmake deps --local &amp;lt;path/to/deps&amp;gt; --release test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#3: Build a testing wheel&lt;br /&gt;
&amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Step#4: Inject testing wheel in Blender:&lt;br /&gt;
&lt;br /&gt;
Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
&lt;br /&gt;
* Step#3bis: Build luxcoreui:&lt;br /&gt;
&amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;? ==&lt;br /&gt;
&lt;br /&gt;
Yes, if you need to find a faulty commit, you can use &amp;lt;code&amp;gt;git bisect&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In that case, please note the correct verb to build LuxCoreRender at each step is&lt;br /&gt;
&amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Caveat: this method only works for version &amp;gt;= v2.10.0&lt;br /&gt;
&lt;br /&gt;
Example for Linux (please adapt to other contexts):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Start git bisecting&lt;br /&gt;
git bisect start&lt;br /&gt;
&lt;br /&gt;
# Define bounds&lt;br /&gt;
git bisect good samples-v2.10.0  # For instance&lt;br /&gt;
git bisect bad HEAD&lt;br /&gt;
&lt;br /&gt;
# Build the app, test it and report status to git bisect&lt;br /&gt;
make clear &amp;amp;&amp;amp; make deps &amp;amp;&amp;amp; make  # Build at this stage&lt;br /&gt;
./out/install/Release/bin/luxcoreui mytestscene/render.cfg&lt;br /&gt;
git bisect &amp;lt;good|bad|skip&amp;gt;  # Depending on above test...&lt;br /&gt;
&lt;br /&gt;
# Bisection loop&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
# At a certain point, the bisection stops and points at the faulty commit&lt;br /&gt;
# You can reset bisection&lt;br /&gt;
git bisect reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I generate debug information for dependencies (LuxCoreDeps)? ==&lt;br /&gt;
Yes, it&#039;s possible, but only for local dependency build, for the moment.&lt;br /&gt;
&lt;br /&gt;
In this context, the build type is controlled by &amp;lt;code&amp;gt;DEPS_BUILD_TYPE&amp;lt;/code&amp;gt; environment variable, so set it to your target build type before building:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export DEPS_BUILD_TYPE=Debug&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2675</id>
		<title>LuxCoreRender Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2675"/>
		<updated>2026-04-24T04:02:53Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* LuxCore and BlendLuxCore Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* [[ BlendLuxCore_Installation | BlendLuxCore Installation]]&lt;br /&gt;
* [[ BlendLuxCore_FAQ | BlendLuxCore FAQ]]&lt;br /&gt;
* [[ LuxCoreRender_Tutorials | Tutorials ]]&lt;br /&gt;
* [[ LuxCoreRender_User%27s_Manual | LuxCoreRender User&#039;s Manual]]&lt;br /&gt;
* [[ :Category:BlendLuxCore | Blender Addon User&#039;s Manual ]]&lt;br /&gt;
* [[ PyLuxCoreTools | Command Line Tools ]]&lt;br /&gt;
* [[ LuxMark | LuxMark Benchmark]]&lt;br /&gt;
&lt;br /&gt;
=== Useful links ===&lt;br /&gt;
&lt;br /&gt;
* [https://luxcorerender.org/ &#039;&#039;LuxCoreRender Home Page&#039;&#039;]&lt;br /&gt;
* [https://forums.luxcorerender.org/ &#039;&#039;LuxCoreRender Forums&#039;&#039;]&lt;br /&gt;
* [[ External_Resources | External Resources ]]&lt;br /&gt;
* [[ Previous_Version | Previous Version (LuxRender) ]]&lt;br /&gt;
&lt;br /&gt;
== Developers &amp;amp; Admins ==&lt;br /&gt;
&lt;br /&gt;
=== LuxCore and BlendLuxCore Documentation ===&lt;br /&gt;
&lt;br /&gt;
==== Building &amp;amp; Debugging ====&lt;br /&gt;
* [[ Building_LuxCoreRender | Building LuxCoreRender ]]&lt;br /&gt;
* [[ Developing and debugging BlendLuxCore ]]&lt;br /&gt;
* [[ Building LuxCoreRender - FAQ | FAQ - Building &amp;amp; Debugging ]]&lt;br /&gt;
* [[ C++ Coding Guidelines ]]&lt;br /&gt;
&lt;br /&gt;
==== Releasing &amp;amp; Deploying ====&lt;br /&gt;
* [[ Deploying LuxCoreRender | Releasing and Deploying LuxCoreRender ]]&lt;br /&gt;
* [[ LuxCoreRender_Release_Notes | LuxCoreRender Release Notes ]]&lt;br /&gt;
&lt;br /&gt;
==== Maintaining ====&lt;br /&gt;
* [[ Regular Maintenance Tasks ]]&lt;br /&gt;
&lt;br /&gt;
==== Interfacing ====&lt;br /&gt;
* [[ LuxCore_API | LuxCore API ]]&lt;br /&gt;
* [[ LuxCore_API_Reference_Manual | LuxCore API Reference Manual]]&lt;br /&gt;
* [[ LuxCore_SDL_Reference_Manual | LuxCore SDL Reference Manual ]]&lt;br /&gt;
&lt;br /&gt;
==== Legacy ====&lt;br /&gt;
* [[ Compiling_LuxCore | Building LuxCoreRender (legacy) ]]&lt;br /&gt;
&lt;br /&gt;
=== MaxToLux Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ MaxToLux_Plugin_Release_Notes | MaxToLux Plugin Release Notes]]&lt;br /&gt;
* [[ MaxToLux_Plugin_Reference_Manual | MaxToLux Plugin Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[ Writing_an_Imagepipeline_Plugin | How to Write an Imagepipeline Plugin ]]&lt;br /&gt;
* [[ Implementing_a_Texture | How to Implement a Texture ]]&lt;br /&gt;
&lt;br /&gt;
=== Information for Wiki Editors ===&lt;br /&gt;
&lt;br /&gt;
We had to close the wiki registration because of too many spambots.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to contribute to the wiki, please request an account in our [https://forums.luxcorerender.org/viewforum.php?f=10 general discussion forum].&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2673</id>
		<title>LuxCoreRender Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2673"/>
		<updated>2026-04-22T19:04:24Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* [[ BlendLuxCore_Installation | BlendLuxCore Installation]]&lt;br /&gt;
* [[ BlendLuxCore_FAQ | BlendLuxCore FAQ]]&lt;br /&gt;
* [[ LuxCoreRender_Tutorials | Tutorials ]]&lt;br /&gt;
* [[ LuxCoreRender_User%27s_Manual | LuxCoreRender User&#039;s Manual]]&lt;br /&gt;
* [[ :Category:BlendLuxCore | Blender Addon User&#039;s Manual ]]&lt;br /&gt;
* [[ PyLuxCoreTools | Command Line Tools ]]&lt;br /&gt;
* [[ LuxMark | LuxMark Benchmark]]&lt;br /&gt;
&lt;br /&gt;
=== Useful links ===&lt;br /&gt;
&lt;br /&gt;
* [https://luxcorerender.org/ &#039;&#039;LuxCoreRender Home Page&#039;&#039;]&lt;br /&gt;
* [https://forums.luxcorerender.org/ &#039;&#039;LuxCoreRender Forums&#039;&#039;]&lt;br /&gt;
* [[ External_Resources | External Resources ]]&lt;br /&gt;
* [[ Previous_Version | Previous Version (LuxRender) ]]&lt;br /&gt;
&lt;br /&gt;
== Developers &amp;amp; Admins ==&lt;br /&gt;
&lt;br /&gt;
=== LuxCore and BlendLuxCore Documentation ===&lt;br /&gt;
&lt;br /&gt;
==== Building &amp;amp; Debugging ====&lt;br /&gt;
* [[ Building_LuxCoreRender | Building LuxCoreRender ]]&lt;br /&gt;
* [[ Developing and debugging BlendLuxCore ]]&lt;br /&gt;
* [[ Building LuxCoreRender - FAQ | FAQ - Building &amp;amp; Debugging ]]&lt;br /&gt;
* [[ C++ Coding Guidelines ]]&lt;br /&gt;
&lt;br /&gt;
==== Deploying ====&lt;br /&gt;
* [[ Deploying LuxCoreRender | Releasing and Deploying LuxCoreRender ]]&lt;br /&gt;
* [[ LuxCoreRender_Release_Notes | LuxCoreRender Release Notes ]]&lt;br /&gt;
&lt;br /&gt;
==== Maintaining ====&lt;br /&gt;
* [[ Regular Maintenance Tasks ]]&lt;br /&gt;
&lt;br /&gt;
==== Interfacing ====&lt;br /&gt;
* [[ LuxCore_API | LuxCore API ]]&lt;br /&gt;
* [[ LuxCore_API_Reference_Manual | LuxCore API Reference Manual]]&lt;br /&gt;
* [[ LuxCore_SDL_Reference_Manual | LuxCore SDL Reference Manual ]]&lt;br /&gt;
&lt;br /&gt;
==== Legacy ====&lt;br /&gt;
* [[ Compiling_LuxCore | Building LuxCoreRender (legacy) ]]&lt;br /&gt;
&lt;br /&gt;
=== MaxToLux Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ MaxToLux_Plugin_Release_Notes | MaxToLux Plugin Release Notes]]&lt;br /&gt;
* [[ MaxToLux_Plugin_Reference_Manual | MaxToLux Plugin Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[ Writing_an_Imagepipeline_Plugin | How to Write an Imagepipeline Plugin ]]&lt;br /&gt;
* [[ Implementing_a_Texture | How to Implement a Texture ]]&lt;br /&gt;
&lt;br /&gt;
=== Information for Wiki Editors ===&lt;br /&gt;
&lt;br /&gt;
We had to close the wiki registration because of too many spambots.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to contribute to the wiki, please request an account in our [https://forums.luxcorerender.org/viewforum.php?f=10 general discussion forum].&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2672</id>
		<title>LuxCoreRender Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2672"/>
		<updated>2026-04-22T19:03:55Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* [[ BlendLuxCore_Installation | BlendLuxCore Installation]]&lt;br /&gt;
* [[ BlendLuxCore_FAQ | BlendLuxCore FAQ]]&lt;br /&gt;
* [[ LuxCoreRender_Tutorials | Tutorials ]]&lt;br /&gt;
* [[ LuxCoreRender_User%27s_Manual | LuxCoreRender User&#039;s Manual]]&lt;br /&gt;
* [[ :Category:BlendLuxCore | Blender Addon User&#039;s Manual ]]&lt;br /&gt;
* [[ PyLuxCoreTools | Command Line Tools ]]&lt;br /&gt;
* [[ LuxMark | LuxMark Benchmark]]&lt;br /&gt;
&lt;br /&gt;
=== Useful links ===&lt;br /&gt;
&lt;br /&gt;
* [https://luxcorerender.org/ &#039;&#039;LuxCoreRender Home Page&#039;&#039;]&lt;br /&gt;
* [https://forums.luxcorerender.org/ &#039;&#039;LuxCoreRender Forums&#039;&#039;]&lt;br /&gt;
* [[ External_Resources | External Resources ]]&lt;br /&gt;
* [[ Previous_Version | Previous Version (LuxRender) ]]&lt;br /&gt;
&lt;br /&gt;
== Developers &amp;amp; Admins ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
==== Building &amp;amp; Debugging ====&lt;br /&gt;
* [[ Building_LuxCoreRender | Building LuxCoreRender ]]&lt;br /&gt;
* [[ Developing and debugging BlendLuxCore ]]&lt;br /&gt;
* [[ Building LuxCoreRender - FAQ | FAQ - Building &amp;amp; Debugging ]]&lt;br /&gt;
* [[ C++ Coding Guidelines ]]&lt;br /&gt;
&lt;br /&gt;
==== Deploying ====&lt;br /&gt;
* [[ Deploying LuxCoreRender | Releasing and Deploying LuxCoreRender ]]&lt;br /&gt;
* [[ LuxCoreRender_Release_Notes | LuxCoreRender Release Notes ]]&lt;br /&gt;
&lt;br /&gt;
==== Maintaining ====&lt;br /&gt;
* [[ Regular Maintenance Tasks ]]&lt;br /&gt;
&lt;br /&gt;
==== Interfacing ====&lt;br /&gt;
* [[ LuxCore_API | LuxCore API ]]&lt;br /&gt;
* [[ LuxCore_API_Reference_Manual | LuxCore API Reference Manual]]&lt;br /&gt;
* [[ LuxCore_SDL_Reference_Manual | LuxCore SDL Reference Manual ]]&lt;br /&gt;
&lt;br /&gt;
==== Legacy ====&lt;br /&gt;
* [[ Compiling_LuxCore | Building LuxCoreRender (legacy) ]]&lt;br /&gt;
&lt;br /&gt;
=== MaxToLux Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ MaxToLux_Plugin_Release_Notes | MaxToLux Plugin Release Notes]]&lt;br /&gt;
* [[ MaxToLux_Plugin_Reference_Manual | MaxToLux Plugin Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[ Writing_an_Imagepipeline_Plugin | How to Write an Imagepipeline Plugin ]]&lt;br /&gt;
* [[ Implementing_a_Texture | How to Implement a Texture ]]&lt;br /&gt;
&lt;br /&gt;
=== Information for Wiki Editors ===&lt;br /&gt;
&lt;br /&gt;
We had to close the wiki registration because of too many spambots.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to contribute to the wiki, please request an account in our [https://forums.luxcorerender.org/viewforum.php?f=10 general discussion forum].&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2671</id>
		<title>LuxCoreRender Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2671"/>
		<updated>2026-04-22T19:03:27Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* [[ BlendLuxCore_Installation | BlendLuxCore Installation]]&lt;br /&gt;
* [[ BlendLuxCore_FAQ | BlendLuxCore FAQ]]&lt;br /&gt;
* [[ LuxCoreRender_Tutorials | Tutorials ]]&lt;br /&gt;
* [[ LuxCoreRender_User%27s_Manual | LuxCoreRender User&#039;s Manual]]&lt;br /&gt;
* [[ :Category:BlendLuxCore | Blender Addon User&#039;s Manual ]]&lt;br /&gt;
* [[ PyLuxCoreTools | Command Line Tools ]]&lt;br /&gt;
* [[ LuxMark | LuxMark Benchmark]]&lt;br /&gt;
&lt;br /&gt;
=== Useful links ===&lt;br /&gt;
&lt;br /&gt;
* [https://luxcorerender.org/ &#039;&#039;LuxCoreRender Home Page&#039;&#039;]&lt;br /&gt;
* [https://forums.luxcorerender.org/ &#039;&#039;LuxCoreRender Forums&#039;&#039;]&lt;br /&gt;
* [[ External_Resources | External Resources ]]&lt;br /&gt;
* [[ Previous_Version | Previous Version (LuxRender) ]]&lt;br /&gt;
&lt;br /&gt;
== Developers &amp;amp; Admins ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
==== Building &amp;amp; Debugging ====&lt;br /&gt;
* [[ Building_LuxCoreRender | Building LuxCoreRender ]]&lt;br /&gt;
* [[ Developing and debugging BlendLuxCore ]]&lt;br /&gt;
* [[ Building LuxCoreRender - FAQ | FAQ - Building &amp;amp; Debugging ]]&lt;br /&gt;
* [[ C++ Coding Guidelines ]]&lt;br /&gt;
&lt;br /&gt;
==== Deploying ====&lt;br /&gt;
* [[ Deploying LuxCoreRender | Releasing and Deploying LuxCoreRender ]]&lt;br /&gt;
* [[ LuxCoreRender_Release_Notes | LuxCoreRender Release Notes ]]&lt;br /&gt;
&lt;br /&gt;
==== Maintaining ====&lt;br /&gt;
* [[ Regular Maintenance Tasks ]]&lt;br /&gt;
&lt;br /&gt;
==== Interfacing ====&lt;br /&gt;
* [[ LuxCore_API | LuxCore API ]]&lt;br /&gt;
* [[ LuxCore_API_Reference_Manual | LuxCore API Reference Manual]]&lt;br /&gt;
* [[ LuxCore_SDL_Reference_Manual | LuxCore SDL Reference Manual ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Legacy ====&lt;br /&gt;
* [[ Compiling_LuxCore | Building LuxCoreRender (legacy) ]]&lt;br /&gt;
&lt;br /&gt;
=== MaxToLux Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ MaxToLux_Plugin_Release_Notes | MaxToLux Plugin Release Notes]]&lt;br /&gt;
* [[ MaxToLux_Plugin_Reference_Manual | MaxToLux Plugin Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[ Writing_an_Imagepipeline_Plugin | How to Write an Imagepipeline Plugin ]]&lt;br /&gt;
* [[ Implementing_a_Texture | How to Implement a Texture ]]&lt;br /&gt;
&lt;br /&gt;
=== Information for Wiki Editors ===&lt;br /&gt;
&lt;br /&gt;
We had to close the wiki registration because of too many spambots.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to contribute to the wiki, please request an account in our [https://forums.luxcorerender.org/viewforum.php?f=10 general discussion forum].&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2670</id>
		<title>LuxCoreRender Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2670"/>
		<updated>2026-04-22T18:59:21Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* LuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* [[ BlendLuxCore_Installation | BlendLuxCore Installation]]&lt;br /&gt;
* [[ BlendLuxCore_FAQ | BlendLuxCore FAQ]]&lt;br /&gt;
* [[ LuxCoreRender_Tutorials | Tutorials ]]&lt;br /&gt;
* [[ LuxCoreRender_User%27s_Manual | LuxCoreRender User&#039;s Manual]]&lt;br /&gt;
* [[ :Category:BlendLuxCore | Blender Addon User&#039;s Manual ]]&lt;br /&gt;
* [[ PyLuxCoreTools | Command Line Tools ]]&lt;br /&gt;
* [[ LuxMark | LuxMark Benchmark]]&lt;br /&gt;
&lt;br /&gt;
=== Useful links ===&lt;br /&gt;
&lt;br /&gt;
* [https://luxcorerender.org/ &#039;&#039;LuxCoreRender Home Page&#039;&#039;]&lt;br /&gt;
* [https://forums.luxcorerender.org/ &#039;&#039;LuxCoreRender Forums&#039;&#039;]&lt;br /&gt;
* [[ External_Resources | External Resources ]]&lt;br /&gt;
* [[ Previous_Version | Previous Version (LuxRender) ]]&lt;br /&gt;
&lt;br /&gt;
== Developers &amp;amp; Admins ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
==== pyLuxCore ====&lt;br /&gt;
* [[ Building_LuxCoreRender | Building pyLuxCore ]]&lt;br /&gt;
&lt;br /&gt;
* [[ C++ Coding Guidelines ]]&lt;br /&gt;
* [[ Regular Maintenance Tasks ]]&lt;br /&gt;
&lt;br /&gt;
==== BlendLuxCore ====&lt;br /&gt;
* [[ Developing and debugging BlendLuxCore ]]&lt;br /&gt;
&lt;br /&gt;
==== Common ====&lt;br /&gt;
* [[ Deploying LuxCoreRender | Releasing and Deploying LuxCoreRender ]]&lt;br /&gt;
* [[ LuxCoreRender_Release_Notes | LuxCoreRender Release Notes ]]&lt;br /&gt;
* [[ Building LuxCoreRender - FAQ | FAQ - Building &amp;amp; Debugging ]]&lt;br /&gt;
* [[ LuxCore_API | LuxCore API ]]&lt;br /&gt;
* [[ LuxCore_API_Reference_Manual | LuxCore API Reference Manual]]&lt;br /&gt;
* [[ LuxCore_SDL_Reference_Manual | LuxCore SDL Reference Manual ]]&lt;br /&gt;
* [[ Compiling_LuxCore | Building LuxCoreRender (legacy) ]]&lt;br /&gt;
&lt;br /&gt;
=== MaxToLux Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ MaxToLux_Plugin_Release_Notes | MaxToLux Plugin Release Notes]]&lt;br /&gt;
* [[ MaxToLux_Plugin_Reference_Manual | MaxToLux Plugin Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[ Writing_an_Imagepipeline_Plugin | How to Write an Imagepipeline Plugin ]]&lt;br /&gt;
* [[ Implementing_a_Texture | How to Implement a Texture ]]&lt;br /&gt;
&lt;br /&gt;
=== Information for Wiki Editors ===&lt;br /&gt;
&lt;br /&gt;
We had to close the wiki registration because of too many spambots.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to contribute to the wiki, please request an account in our [https://forums.luxcorerender.org/viewforum.php?f=10 general discussion forum].&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2669</id>
		<title>LuxCoreRender Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2669"/>
		<updated>2026-04-22T18:59:02Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* [[ BlendLuxCore_Installation | BlendLuxCore Installation]]&lt;br /&gt;
* [[ BlendLuxCore_FAQ | BlendLuxCore FAQ]]&lt;br /&gt;
* [[ LuxCoreRender_Tutorials | Tutorials ]]&lt;br /&gt;
* [[ LuxCoreRender_User%27s_Manual | LuxCoreRender User&#039;s Manual]]&lt;br /&gt;
* [[ :Category:BlendLuxCore | Blender Addon User&#039;s Manual ]]&lt;br /&gt;
* [[ PyLuxCoreTools | Command Line Tools ]]&lt;br /&gt;
* [[ LuxMark | LuxMark Benchmark]]&lt;br /&gt;
&lt;br /&gt;
=== Useful links ===&lt;br /&gt;
&lt;br /&gt;
* [https://luxcorerender.org/ &#039;&#039;LuxCoreRender Home Page&#039;&#039;]&lt;br /&gt;
* [https://forums.luxcorerender.org/ &#039;&#039;LuxCoreRender Forums&#039;&#039;]&lt;br /&gt;
* [[ External_Resources | External Resources ]]&lt;br /&gt;
* [[ Previous_Version | Previous Version (LuxRender) ]]&lt;br /&gt;
&lt;br /&gt;
== Developers &amp;amp; Admins ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
==== LuxCore ====&lt;br /&gt;
* [[ Building_LuxCoreRender | Building LuxCore ]]&lt;br /&gt;
&lt;br /&gt;
* [[ C++ Coding Guidelines ]]&lt;br /&gt;
* [[ Regular Maintenance Tasks ]]&lt;br /&gt;
&lt;br /&gt;
==== BlendLuxCore ====&lt;br /&gt;
* [[ Developing and debugging BlendLuxCore ]]&lt;br /&gt;
&lt;br /&gt;
==== Common ====&lt;br /&gt;
* [[ Deploying LuxCoreRender | Releasing and Deploying LuxCoreRender ]]&lt;br /&gt;
* [[ LuxCoreRender_Release_Notes | LuxCoreRender Release Notes ]]&lt;br /&gt;
* [[ Building LuxCoreRender - FAQ | FAQ - Building &amp;amp; Debugging ]]&lt;br /&gt;
* [[ LuxCore_API | LuxCore API ]]&lt;br /&gt;
* [[ LuxCore_API_Reference_Manual | LuxCore API Reference Manual]]&lt;br /&gt;
* [[ LuxCore_SDL_Reference_Manual | LuxCore SDL Reference Manual ]]&lt;br /&gt;
* [[ Compiling_LuxCore | Building LuxCoreRender (legacy) ]]&lt;br /&gt;
&lt;br /&gt;
=== MaxToLux Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ MaxToLux_Plugin_Release_Notes | MaxToLux Plugin Release Notes]]&lt;br /&gt;
* [[ MaxToLux_Plugin_Reference_Manual | MaxToLux Plugin Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[ Writing_an_Imagepipeline_Plugin | How to Write an Imagepipeline Plugin ]]&lt;br /&gt;
* [[ Implementing_a_Texture | How to Implement a Texture ]]&lt;br /&gt;
&lt;br /&gt;
=== Information for Wiki Editors ===&lt;br /&gt;
&lt;br /&gt;
We had to close the wiki registration because of too many spambots.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to contribute to the wiki, please request an account in our [https://forums.luxcorerender.org/viewforum.php?f=10 general discussion forum].&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2668</id>
		<title>LuxCoreRender Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2668"/>
		<updated>2026-04-22T18:57:29Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* [[ BlendLuxCore_Installation | BlendLuxCore Installation]]&lt;br /&gt;
* [[ BlendLuxCore_FAQ | BlendLuxCore FAQ]]&lt;br /&gt;
* [[ LuxCoreRender_Tutorials | Tutorials ]]&lt;br /&gt;
* [[ LuxCoreRender_User%27s_Manual | LuxCoreRender User&#039;s Manual]]&lt;br /&gt;
* [[ :Category:BlendLuxCore | Blender Addon User&#039;s Manual ]]&lt;br /&gt;
* [[ PyLuxCoreTools | Command Line Tools ]]&lt;br /&gt;
* [[ LuxMark | LuxMark Benchmark]]&lt;br /&gt;
&lt;br /&gt;
=== Useful links ===&lt;br /&gt;
&lt;br /&gt;
* [https://luxcorerender.org/ &#039;&#039;LuxCoreRender Home Page&#039;&#039;]&lt;br /&gt;
* [https://forums.luxcorerender.org/ &#039;&#039;LuxCoreRender Forums&#039;&#039;]&lt;br /&gt;
* [[ External_Resources | External Resources ]]&lt;br /&gt;
* [[ Previous_Version | Previous Version (LuxRender) ]]&lt;br /&gt;
&lt;br /&gt;
== Developers &amp;amp; Admins ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
==== LuxCore ====&lt;br /&gt;
* [[ Building_LuxCoreRender | Building LuxCoreRender ]]&lt;br /&gt;
* [[ Deploying LuxCoreRender | Releasing and Deploying LuxCoreRender ]]&lt;br /&gt;
* [[ C++ Coding Guidelines ]]&lt;br /&gt;
* [[ Regular Maintenance Tasks ]]&lt;br /&gt;
&lt;br /&gt;
==== BlendLuxCore ====&lt;br /&gt;
* [[ Developing and debugging BlendLuxCore ]]&lt;br /&gt;
&lt;br /&gt;
==== Common ====&lt;br /&gt;
* [[ LuxCoreRender_Release_Notes | LuxCoreRender Release Notes ]]&lt;br /&gt;
* [[ Building LuxCoreRender - FAQ | FAQ - Building &amp;amp; Debugging ]]&lt;br /&gt;
* [[ LuxCore_API | LuxCore API ]]&lt;br /&gt;
* [[ LuxCore_API_Reference_Manual | LuxCore API Reference Manual]]&lt;br /&gt;
* [[ LuxCore_SDL_Reference_Manual | LuxCore SDL Reference Manual ]]&lt;br /&gt;
* [[ Compiling_LuxCore | Building LuxCoreRender (legacy) ]]&lt;br /&gt;
&lt;br /&gt;
=== MaxToLux Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ MaxToLux_Plugin_Release_Notes | MaxToLux Plugin Release Notes]]&lt;br /&gt;
* [[ MaxToLux_Plugin_Reference_Manual | MaxToLux Plugin Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[ Writing_an_Imagepipeline_Plugin | How to Write an Imagepipeline Plugin ]]&lt;br /&gt;
* [[ Implementing_a_Texture | How to Implement a Texture ]]&lt;br /&gt;
&lt;br /&gt;
=== Information for Wiki Editors ===&lt;br /&gt;
&lt;br /&gt;
We had to close the wiki registration because of too many spambots.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to contribute to the wiki, please request an account in our [https://forums.luxcorerender.org/viewforum.php?f=10 general discussion forum].&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2667</id>
		<title>LuxCoreRender Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2667"/>
		<updated>2026-04-22T18:55:50Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* [[ BlendLuxCore_Installation | BlendLuxCore Installation]]&lt;br /&gt;
* [[ BlendLuxCore_FAQ | BlendLuxCore FAQ]]&lt;br /&gt;
* [[ LuxCoreRender_Tutorials | Tutorials ]]&lt;br /&gt;
* [[ LuxCoreRender_User%27s_Manual | LuxCoreRender User&#039;s Manual]]&lt;br /&gt;
* [[ :Category:BlendLuxCore | Blender Addon User&#039;s Manual ]]&lt;br /&gt;
* [[ PyLuxCoreTools | Command Line Tools ]]&lt;br /&gt;
* [[ LuxMark | LuxMark Benchmark]]&lt;br /&gt;
&lt;br /&gt;
=== Useful links ===&lt;br /&gt;
&lt;br /&gt;
* [https://luxcorerender.org/ &#039;&#039;LuxCoreRender Home Page&#039;&#039;]&lt;br /&gt;
* [https://forums.luxcorerender.org/ &#039;&#039;LuxCoreRender Forums&#039;&#039;]&lt;br /&gt;
* [[ External_Resources | External Resources ]]&lt;br /&gt;
* [[ Previous_Version | Previous Version (LuxRender) ]]&lt;br /&gt;
&lt;br /&gt;
== Developers &amp;amp; Admins ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
==== LuxCore ====&lt;br /&gt;
* [[ Building_LuxCoreRender | Building LuxCoreRender ]]&lt;br /&gt;
* [[ Deploying LuxCoreRender | Releasing and Deploying LuxCoreRender ]]&lt;br /&gt;
* [[ Building LuxCoreRender - FAQ | FAQ - Building &amp;amp; Debugging LuxCoreRender ]]&lt;br /&gt;
* [[ C++ Coding Guidelines ]]&lt;br /&gt;
* [[ Regular Maintenance Tasks ]]&lt;br /&gt;
&lt;br /&gt;
==== BlendLuxCore ====&lt;br /&gt;
* [[ Developing and debugging BlendLuxCore ]]&lt;br /&gt;
&lt;br /&gt;
==== Common ====&lt;br /&gt;
* [[ LuxCoreRender_Release_Notes | LuxCoreRender Release Notes ]]&lt;br /&gt;
* [[ LuxCore_API | LuxCore API ]]&lt;br /&gt;
* [[ LuxCore_API_Reference_Manual | LuxCore API Reference Manual]]&lt;br /&gt;
* [[ LuxCore_SDL_Reference_Manual | LuxCore SDL Reference Manual ]]&lt;br /&gt;
* [[ Compiling_LuxCore | Building LuxCoreRender (legacy) ]]&lt;br /&gt;
&lt;br /&gt;
=== MaxToLux Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ MaxToLux_Plugin_Release_Notes | MaxToLux Plugin Release Notes]]&lt;br /&gt;
* [[ MaxToLux_Plugin_Reference_Manual | MaxToLux Plugin Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[ Writing_an_Imagepipeline_Plugin | How to Write an Imagepipeline Plugin ]]&lt;br /&gt;
* [[ Implementing_a_Texture | How to Implement a Texture ]]&lt;br /&gt;
&lt;br /&gt;
=== Information for Wiki Editors ===&lt;br /&gt;
&lt;br /&gt;
We had to close the wiki registration because of too many spambots.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to contribute to the wiki, please request an account in our [https://forums.luxcorerender.org/viewforum.php?f=10 general discussion forum].&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2666</id>
		<title>LuxCoreRender Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2666"/>
		<updated>2026-04-22T18:54:30Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* [[ BlendLuxCore_Installation | BlendLuxCore Installation]]&lt;br /&gt;
* [[ BlendLuxCore_FAQ | BlendLuxCore FAQ]]&lt;br /&gt;
* [[ LuxCoreRender_Tutorials | Tutorials ]]&lt;br /&gt;
* [[ LuxCoreRender_User%27s_Manual | LuxCoreRender User&#039;s Manual]]&lt;br /&gt;
* [[ :Category:BlendLuxCore | Blender Addon User&#039;s Manual ]]&lt;br /&gt;
* [[ PyLuxCoreTools | Command Line Tools ]]&lt;br /&gt;
* [[ LuxMark | LuxMark Benchmark]]&lt;br /&gt;
&lt;br /&gt;
=== Useful links ===&lt;br /&gt;
&lt;br /&gt;
* [https://luxcorerender.org/ &#039;&#039;LuxCoreRender Home Page&#039;&#039;]&lt;br /&gt;
* [https://forums.luxcorerender.org/ &#039;&#039;LuxCoreRender Forums&#039;&#039;]&lt;br /&gt;
* [[ External_Resources | External Resources ]]&lt;br /&gt;
* [[ Previous_Version | Previous Version (LuxRender) ]]&lt;br /&gt;
&lt;br /&gt;
== Developers &amp;amp; Admins ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
==== LuxCore ====&lt;br /&gt;
* [[ Building_LuxCoreRender | Building LuxCoreRender ]]&lt;br /&gt;
* [[ Deploying LuxCoreRender | Releasing and Deploying LuxCoreRender ]]&lt;br /&gt;
* [[ Building LuxCoreRender - FAQ | FAQ - Building &amp;amp; Debugging LuxCoreRender ]]&lt;br /&gt;
* [[ C++ Coding Guidelines ]]&lt;br /&gt;
* [[ Regular Maintenance Tasks ]]&lt;br /&gt;
&lt;br /&gt;
==== BlendLuxCore ====&lt;br /&gt;
* [[ Developing and debugging BlendLuxCore ]]&lt;br /&gt;
* [[ Compiling_LuxCore | Building LuxCoreRender (legacy) ]]&lt;br /&gt;
* [[ LuxCoreRender_Release_Notes | LuxCoreRender Release Notes ]]&lt;br /&gt;
* [[ LuxCore_API | LuxCore API ]]&lt;br /&gt;
* [[ LuxCore_API_Reference_Manual | LuxCore API Reference Manual]]&lt;br /&gt;
* [[ LuxCore_SDL_Reference_Manual | LuxCore SDL Reference Manual ]]&lt;br /&gt;
&lt;br /&gt;
=== MaxToLux Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ MaxToLux_Plugin_Release_Notes | MaxToLux Plugin Release Notes]]&lt;br /&gt;
* [[ MaxToLux_Plugin_Reference_Manual | MaxToLux Plugin Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[ Writing_an_Imagepipeline_Plugin | How to Write an Imagepipeline Plugin ]]&lt;br /&gt;
* [[ Implementing_a_Texture | How to Implement a Texture ]]&lt;br /&gt;
&lt;br /&gt;
=== Information for Wiki Editors ===&lt;br /&gt;
&lt;br /&gt;
We had to close the wiki registration because of too many spambots.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to contribute to the wiki, please request an account in our [https://forums.luxcorerender.org/viewforum.php?f=10 general discussion forum].&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2665</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2665"/>
		<updated>2026-04-20T05:13:15Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Samples Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, and the LuxCore should not have been used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2664</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2664"/>
		<updated>2026-04-20T05:12:10Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, and the LuxCore should not have been used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2663</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2663"/>
		<updated>2026-04-20T05:11:26Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, and the LuxCore should not have been used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2662</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2662"/>
		<updated>2026-04-20T05:11:05Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, and the LuxCore should not have been used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2661</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2661"/>
		<updated>2026-04-20T05:10:38Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Pre-Flight Review */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, and the LuxCore should not have been used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for wheels.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2660</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2660"/>
		<updated>2026-04-20T05:09:12Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Sufficient space on PyPI and PyPI-test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, nor used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for wheels.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2659</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2659"/>
		<updated>2026-04-19T18:48:18Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* BlendLuxCore Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, nor used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for wheels.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2658</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2658"/>
		<updated>2026-04-19T18:47:53Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* BlendLuxCore Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, nor used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for wheels.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2657</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2657"/>
		<updated>2026-04-19T18:46:49Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Samples Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, nor used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for wheels.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2656</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2656"/>
		<updated>2026-04-19T18:45:43Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, nor used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for wheels.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts and thus to clear &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2655</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2655"/>
		<updated>2026-04-19T18:44:50Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, nor used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for wheels.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
(this is a test step, before uploadig to real PyPI) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts and thus to clear &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2654</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2654"/>
		<updated>2026-04-19T18:44:35Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, nor used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for wheels.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them, through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
(this is a test step, before uploadig to real PyPI) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts and thus to clear &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2653</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2653"/>
		<updated>2026-04-19T18:43:38Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Wheels Release and Deployment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, nor used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for wheels.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
(this is a test step, before uploadig to real PyPI) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts and thus to clear &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Announcements ==&lt;br /&gt;
&amp;lt;To be completed by @codehd&amp;gt;&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
</feed>