<?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-08-18T03:48:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2746</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=2746"/>
		<updated>2026-07-24T17:24:02Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I contribute with AI-generated content? */&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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content? ==&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the commits messages&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation. You must demonstrate a good command of the languages (C++, Python, bash etc.) used by the code and of the solutions the AI used. In short, &amp;lt;b&amp;gt;do not propose a code you cannot explain&amp;lt;/b&amp;gt;. Please keep in mind that each PR (AI or not) is reviewed and questionned, so lack of understanding from the submitter will be detected soon and will decrease significantly the chances for the PR to be accepted.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* Proposed code must comply with LuxCore license. This is your responsability to ensure that.&lt;br /&gt;
* You&#039;re expected to have a good command of &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; (not limited to AI-generated contributions, by the way)&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2745</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=2745"/>
		<updated>2026-07-24T17:22:25Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I contribute with AI-generated content? */&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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content? ==&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the commits messages&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation. You must demonstrate a good command of the languages (C++, Python, bash etc.) used by the code and of the solutions the AI used. In short, &amp;lt;b&amp;gt;do not propose a code you cannot explain&amp;lt;/b&amp;gt;. Please keep in mind that each PR (AI or not) is reviewed and questionned, so lack of understanding from the submitter will be detected soon and will decrease significantly the chances for the PR to be accepted.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* Proposed code must comply with LuxCore license. This is your responsability to ensure that.&lt;br /&gt;
* You&#039;re expected to have a good command of &amp;lt;code&amp;gt;git&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=2744</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=2744"/>
		<updated>2026-07-24T17:21:47Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I contribute with AI-generated content? */&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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content? ==&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the commits messages&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation. You must demonstrate a good command of the languages (C++, Python, bash etc.) used by the code and of the solutions the AI generated. In short, &amp;lt;b&amp;gt;do not propose a code you cannot explain&amp;lt;/b&amp;gt;. Please keep in mind that each PR (AI or not) is reviewed and questionned, so lack of understanding from the submitter will be detected soon and will decrease significantly the chances for the PR to be accepted.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* Proposed code must comply with LuxCore license. This is your responsability to ensure that.&lt;br /&gt;
* You&#039;re expected to have a good command of &amp;lt;code&amp;gt;git&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=2743</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=2743"/>
		<updated>2026-07-24T17:21:27Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I contribute with AI-generated content? */&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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content? ==&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the commits messages&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation. You must demonstrate a good command of the languages (C++, Python, bash etc.) used by the code and of the solutions the AI generated. In short, &amp;lt;b&amp;gt;do not propose a code you cannot explain&amp;lt;/b&amp;gt;. Please keep in mind that each PR (AI or not) is reviewed and questionned, so lack of understanding from the submitter will be detected soon and will decrease significantly the chance for the PR to be accepted.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* Proposed code must comply with LuxCore license. This is your responsability to ensure that.&lt;br /&gt;
* You&#039;re expected to have a good command of &amp;lt;code&amp;gt;git&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=2742</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=2742"/>
		<updated>2026-07-24T17:20:53Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I contribute with AI-generated content? */&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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content? ==&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the commits messages&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation. You must demonstrate a good command of the languages (C++, Python, bash etc.) used by the code and of the solutions the AI generated. In short, &amp;lt;b&amp;gt;do not propose a code you cannot explain&amp;lt;/b&amp;gt;. Please keep in mind that each PR (AI or not) is reviewed and questionned, so lack of understanding from the submitter will be detected soon and decrease significantly the chance for the PR to be accepted.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* Proposed code must comply with LuxCore license. This is your responsability to ensure that.&lt;br /&gt;
* You&#039;re expected to have a good command of &amp;lt;code&amp;gt;git&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=2741</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=2741"/>
		<updated>2026-07-24T17:20:26Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I contribute with AI-generated content? */&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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content? ==&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the commits messages&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation. You must demonstrate a good command of the languages (C++, Python, bash etc.) used by the code and of the solutions the AI generated. In short, **do not propose a code you cannot explain**. Please keep in mind that each PR (AI or not) is reviewed and questionned, so lack of understanding from the submitter will be detected soon and decrease significantly the chance for the PR to be accepted.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* Proposed code must comply with LuxCore license. This is your responsability to ensure that.&lt;br /&gt;
* You&#039;re expected to have a good command of &amp;lt;code&amp;gt;git&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=2740</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=2740"/>
		<updated>2026-07-24T17:10:44Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I contribute with AI-generated content? */&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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content? ==&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the commits messages&lt;br /&gt;
* Proposed code must comply with LuxCore license. This is your responsability to ensure that.&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* You&#039;re expected to have a good command of &amp;lt;code&amp;gt;git&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=2739</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=2739"/>
		<updated>2026-07-24T17:09:49Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I contribute with AI-generated content? */&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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content? ==&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the PR&lt;br /&gt;
* Proposed code must comply with license.&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* You&#039;re expected to have a good command of &amp;lt;code&amp;gt;git&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=2738</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=2738"/>
		<updated>2026-07-24T16:39:31Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Can I contribute with AI-generated content? */&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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content? ==&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the PR&lt;br /&gt;
* Proposed code must comply with license.&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* You have to master `git`&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2737</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=2737"/>
		<updated>2026-07-24T16:38:32Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* In gdb, how to debug one thread at a time? */&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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content? ==&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the PR&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* You have to master `git`&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2736</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=2736"/>
		<updated>2026-07-24T16:38:15Z</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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Can I contribute with AI-generated content?&lt;br /&gt;
Yes, you can - we aim at being a modern project!&lt;br /&gt;
&lt;br /&gt;
However, you must follow a few  rules:&lt;br /&gt;
* Proposed commits from AI must be short, ideally less than a dozen of lines and at any rate not above 20 lines.&lt;br /&gt;
* AI usage must be clearly mentionned in the PR&lt;br /&gt;
* You must have a complete understanding of what you propose and be able to explain every detail of the implementation.&lt;br /&gt;
* Your proposal must stay focused on the issue you want to fix or the feature you want to implement. Simultaneous linting, reformating etc. is not allowed.&lt;br /&gt;
* You have to master `git`&lt;/div&gt;</summary>
		<author><name>Howetuft</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender_-_FAQ&amp;diff=2735</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=2735"/>
		<updated>2026-07-18T12:15:49Z</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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comments for #3 &amp;amp; #4&lt;br /&gt;
For a debugging with luxcoreui only, one can also replace steps #3 &amp;amp; #4 by:&lt;br /&gt;
* Step#3bis: Build luxcoreui: &amp;lt;pre&amp;gt;make luxcoreui&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2734</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=2734"/>
		<updated>2026-07-18T11:59:25Z</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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important, for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
* Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
* Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
* Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
** Build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
* Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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: &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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2733</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=2733"/>
		<updated>2026-07-18T11:57:31Z</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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important, for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
# Secure plain local build&lt;br /&gt;
* Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
* Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
# Secure CI local build&lt;br /&gt;
* Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
* Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
# Secure CI server build - private repo&lt;br /&gt;
* Commit your work above&lt;br /&gt;
* Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
* build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
# Secure CI server build - main repo&lt;br /&gt;
* Merge your work and check CI&lt;br /&gt;
* Try compiling LuxCore&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: &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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2732</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=2732"/>
		<updated>2026-07-18T11:56:55Z</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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important, for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
# Secure plain local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
# Secure CI local build&lt;br /&gt;
** Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
** Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
# Secure CI server build - private repo&lt;br /&gt;
** Commit your work above&lt;br /&gt;
** Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
* build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
# Secure CI server build - main repo&lt;br /&gt;
** Merge your work and check CI&lt;br /&gt;
** Try compiling LuxCore&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: &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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2731</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=2731"/>
		<updated>2026-07-18T11:55:54Z</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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important, for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&lt;br /&gt;
* Release build is faster than Debug build so, if you are just testing compilation, we would recommend you to use Release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A good practice we recommend:&lt;br /&gt;
# Secure plain local build&lt;br /&gt;
## Ensure you can build LuxCoreDeps with plain local build&lt;br /&gt;
## Ensure you can build and run LuxCore with your local plain built package.&lt;br /&gt;
# Secure CI local build&lt;br /&gt;
## Ensure you can build LuxCoreDeps with CI local build&lt;br /&gt;
## Ensure you can build and run LuxCore with your CI local built package.&lt;br /&gt;
# Secure CI server build - private repo&lt;br /&gt;
## Commit your work above&lt;br /&gt;
## Push your work to one of your repos (not LuxCore, at this stage). This should trigger CI: ensure build is ok.&lt;br /&gt;
## build LuxCore against it (set LuxCore settings beforehands)&lt;br /&gt;
# Secure CI server build - main repo&lt;br /&gt;
## Merge your work and check CI&lt;br /&gt;
## Try compiling LuxCore&lt;br /&gt;
&lt;br /&gt;
# Merge to &lt;br /&gt;
&lt;br /&gt;
# Ensure you can build and run LuxCore with your local LexCoreDeps&lt;br /&gt;
# Ensure&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: &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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2730</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=2730"/>
		<updated>2026-07-18T11:41:01Z</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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build: &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important, for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&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: &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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2729</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=2729"/>
		<updated>2026-07-18T11:40:16Z</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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore:build &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;
# Build a testing wheel: &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important, for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; (plain) or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt; (CI).&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&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: &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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2728</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=2728"/>
		<updated>2026-07-17T17:38:53Z</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;
Here are the steps to do so:&lt;br /&gt;
# Build dependencies locally: Use [[Building_LuxCoreRender#Local_Plain_Build|local plain build]] or [[Building_LuxCoreRender#Local_Continuous_Integration | local CI build]] of LuxCoreDeps&lt;br /&gt;
# Inject local dependencies in LuxCore build &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;
# Build a testing wheel &amp;lt;pre&amp;gt;make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Inject testing wheel in Blender: Use [[Developing_and_debugging_BlendLuxCore | BlendLuxHelper]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Important, for step#2:&lt;br /&gt;
* You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
* On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, or vice-versa, then the build system will recompile all dependencies.&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2727</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=2727"/>
		<updated>2026-07-17T16:58:04Z</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;
A few tips and caveats:&lt;br /&gt;
  * You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;gt;&lt;br /&gt;
  * On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
  * Be careful about build type.If the build type of the deps is &amp;lt;code&amp;gt;Debug&amp;lt;/code&amp;gt; and the build type of &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;Release&amp;lt;/code&amp;gt;, then the build system will recompile all dependences.&lt;br /&gt;
&lt;br /&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2726</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=2726"/>
		<updated>2026-07-16T22:52:08Z</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;
On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact/1/luxcore-deps-ubuntu-latest/luxcore-deps-ubuntu-latest.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2725</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=2725"/>
		<updated>2026-07-16T22:39:27Z</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;
On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/tmp/luxcoredeps/artifact&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2724</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=2724"/>
		<updated>2026-07-16T21:42:54Z</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;
On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2723</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=2723"/>
		<updated>2026-07-16T21:42:36Z</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;
On Linux, &amp;lt;path/to/depth&amp;gt; should likely be &amp;lt;code&amp;gt;/tmp/conan-cache/luxcoredeps.zip&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You may want to get a clean situation before injecting local deps: &amp;lt;code&amp;gt;make clear&amp;lt;/code&amp;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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2722</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=2722"/>
		<updated>2026-06-27T04:18:09Z</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;
# For bisecting, we recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2721</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=2721"/>
		<updated>2026-06-11T04:47:40Z</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;
# We recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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;br /&gt;
&lt;br /&gt;
== In gdb, how to debug one thread at a time? ==&lt;br /&gt;
&amp;lt;pre&amp;gt;set scheduler-locking step&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=2720</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=2720"/>
		<updated>2026-06-07T21:12:39Z</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;
# We recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&lt;br /&gt;
This may help:&lt;br /&gt;
&amp;lt;pre&amp;gt;export ASAN_OPTIONS=check_initialization_order=0:protect_shadow_gap=0:verify_asan_link_order=0&amp;lt;/pre&amp;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=2719</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=2719"/>
		<updated>2026-06-07T20:53:27Z</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;
# We recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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;
* To run Blender with ASAN, see here: https://developer.blender.org/docs/handbook/tooling/asan/&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=2718</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=2718"/>
		<updated>2026-06-07T20:49:47Z</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;
# We recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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;export 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=C%2B%2B_Coding_Guidelines&amp;diff=2717</id>
		<title>C++ Coding Guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=C%2B%2B_Coding_Guidelines&amp;diff=2717"/>
		<updated>2026-06-07T11:12:06Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Indentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some guidelines for C++ Coding.&lt;br /&gt;
&lt;br /&gt;
= Modern C++ =&lt;br /&gt;
We ask you to enforce the best practices of &amp;quot;modern&amp;quot; C++ programming, as defined by best experts:&lt;br /&gt;
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
True it is that legacy code may not always comply to those recommendations, but this is no reason for new code not to enforce them.&lt;br /&gt;
&lt;br /&gt;
= Indentation &amp;amp; Line Return =&lt;br /&gt;
Indentation in LuxCore has historically used tabs rather than spaces, so we will continue to observe this in the future, even if it may not be the most practical...  Massive replacement of tabs by spaces may obfuscate history, so not recommended. Thank you for your compliance.&lt;br /&gt;
&lt;br /&gt;
On a different note, please avoid trailing spaces.&lt;br /&gt;
&lt;br /&gt;
Line return should use &amp;lt;b&amp;gt;LF&amp;lt;/b&amp;gt; (not CRLF). This is the convention for most of the existing files in the codebase and must absolutely be enforce in new files. By exception, however, there are still a few old files that use CRLF. Inside those ones, for minor changes, respect CRLF convention.&lt;br /&gt;
&lt;br /&gt;
= Object naming =&lt;br /&gt;
LuxCore uses camelCase/CamelCase style.&lt;br /&gt;
&lt;br /&gt;
Local symbols are named with camelCase&lt;br /&gt;
Global symbols are named with CamelCase.&lt;br /&gt;
&lt;br /&gt;
= Boost =&lt;br /&gt;
Boost was used extensively in LuxCore, at a time when it was probably the only option for efficiently coding certain mechanisms (filepath, thread synchronization etc.).&lt;br /&gt;
&lt;br /&gt;
Since v2.10, however, this is no longer the case, as LuxCore has been ported to C++20, which offers a standard library that can largely replace Boost, with a few exceptions.&lt;br /&gt;
&lt;br /&gt;
Therefore &amp;lt;i&amp;gt;please systematically prefer C++20 standard library over Boost whenever possible&amp;lt;/i&amp;gt; and limit Boost to cases where there is no other solution.&lt;br /&gt;
&lt;br /&gt;
= Raw pointers =&lt;br /&gt;
LuxCore development was started before the advent of modern C++ (C++11 and higher) and logically conceals numerous raw pointers. However, raw pointers are quite risky, particularly in terms of memory leaks, dangling pointers, pointer aliasing etc., and should be avoided now, to the benefit of smart pointers.&lt;br /&gt;
&lt;br /&gt;
= Dependencies =&lt;br /&gt;
Since version 2.10, a new dependency manager has been added (&amp;lt;code&amp;gt; LuxCoreDeps&amp;lt;/code&amp;gt;). Other means to add dependencies are deprecated. In particular:&lt;br /&gt;
* do not embed external dependency source code&lt;br /&gt;
* do not use git submodules&lt;br /&gt;
* do not rely on precompiled binaries&lt;br /&gt;
Etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; LuxCoreDeps&amp;lt;/code&amp;gt; builds dependencies for sources, for all platforms, based on Conan database of build recipes.&lt;br /&gt;
It guarantees reliability, portability and sustainability.&lt;br /&gt;
If you need to add a new dependency, please contact admin/dev team (on Discord, for instance, but also on Git or Forum).&lt;br /&gt;
&lt;br /&gt;
= Code Documentation =&lt;br /&gt;
Please document your code: insert necessary information, comments etc., in the code in order for your peers to understand what you intend to do. &amp;quot;Your peers&amp;quot; encompass reviewers, other developers now and in the future etc.&lt;br /&gt;
&lt;br /&gt;
LuxCore relies on Doxygen to generate code documentation: use Doxygen syntax to add the necessary information in your code.&lt;br /&gt;
Doxygen documentation can be built with &amp;lt;code&amp;gt; make doc &amp;lt;/code&amp;gt;. After building, you&#039;ll find the documentation in &amp;lt;code&amp;gt; out/doc &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=2708</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=2708"/>
		<updated>2026-06-06T09:22:06Z</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;
# We recommend to build in Release type (shorter build time)&lt;br /&gt;
export LUX_BUILD_TYPE=Release&lt;br /&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=2707</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2707"/>
		<updated>2026-06-02T11:37:15Z</updated>

		<summary type="html">&lt;p&gt;Howetuft: /* Local dependency set */&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=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;
Nota 2: if you built with debug symbol, you&#039;ll need to add &amp;lt;code&amp;gt;--build-type=Debug&amp;lt;/code&amp;gt; to the above statement.&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=2706</id>
		<title>Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Building_LuxCoreRender&amp;diff=2706"/>
		<updated>2026-06-02T11:35:39Z</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 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=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_-_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>
</feed>