<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://tech-pubs.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Kindler</id>
	<title>Kindler - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://tech-pubs.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Kindler"/>
	<link rel="alternate" type="text/html" href="https://tech-pubs.net/wiki/index.php?title=Kindler&amp;action=history"/>
	<updated>2026-04-18T08:42:01Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://tech-pubs.net/wiki/index.php?title=Kindler&amp;diff=486&amp;oldid=prev</id>
		<title>Raion: Replaced content with &quot;&#039;&#039;&#039;Kindler&#039;&#039;&#039; is a flexible, declarative build system that is cross-platform. In fact, it was designed by Raion to explicitly support both modern Unix-likes and IRIX alike.   == Availability == Kindler is going to be included in Nekoware but it can also be used with the Nekoware SDK, which offers Lua.   == Why Use Kindler for an IRIX project == Kindler understands mipspro. So does Autotools, but CMake? No. Meson? No.  Kindler understands IRIX&#039;s lim...&quot;</title>
		<link rel="alternate" type="text/html" href="https://tech-pubs.net/wiki/index.php?title=Kindler&amp;diff=486&amp;oldid=prev"/>
		<updated>2026-01-28T04:05:11Z</updated>

		<summary type="html">&lt;p&gt;Replaced content with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Kindler&amp;#039;&amp;#039;&amp;#039; is a flexible, declarative build system that is cross-platform. In fact, it was designed by &lt;a href=&quot;/wiki/index.php/User:Raion&quot; title=&quot;User:Raion&quot;&gt;Raion&lt;/a&gt; to explicitly support both modern Unix-likes and IRIX alike.   == Availability == Kindler is going to be included in &lt;a href=&quot;/wiki/index.php/Nekoware&quot; title=&quot;Nekoware&quot;&gt;Nekoware&lt;/a&gt; but it can also be used with the Nekoware SDK, which offers Lua.   == Why Use Kindler for an IRIX project == Kindler understands mipspro. So does Autotools, but CMake? No. Meson? No.  Kindler understands IRIX&amp;#039;s lim...&amp;quot;&lt;/p&gt;
&lt;a href=&quot;//tech-pubs.net/wiki/index.php?title=Kindler&amp;amp;diff=486&amp;amp;oldid=485&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Raion</name></author>
	</entry>
	<entry>
		<id>https://tech-pubs.net/wiki/index.php?title=Kindler&amp;diff=485&amp;oldid=prev</id>
		<title>Raion: Created page with &quot;= Kindler Build System Specification = &#039;&#039;&#039;Version:&#039;&#039;&#039; 0.1.0 (Draft)  &#039;&#039;&#039;Last Updated:&#039;&#039;&#039; January 2026  &#039;&#039;&#039;Status:&#039;&#039;&#039; Design Phase  &#039;&#039;&#039;AI Disclosure:&#039;&#039;&#039; Claude and Grok provided assistance ----  == 1. Overview == &#039;&#039;&#039;Kindler&#039;&#039;&#039; is a declarative, cached, bootstrapped build system for UNIX-like platforms. It does not build software directly—instead, it generates build files (Makefiles, Ninja files) that native build tools execute.  === Core Philosophy ===  # &#039;&#039;&#039;Portable:&#039;&#039;...&quot;</title>
		<link rel="alternate" type="text/html" href="https://tech-pubs.net/wiki/index.php?title=Kindler&amp;diff=485&amp;oldid=prev"/>
		<updated>2026-01-26T05:45:52Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= Kindler Build System Specification = &amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 0.1.0 (Draft)  &amp;#039;&amp;#039;&amp;#039;Last Updated:&amp;#039;&amp;#039;&amp;#039; January 2026  &amp;#039;&amp;#039;&amp;#039;Status:&amp;#039;&amp;#039;&amp;#039; Design Phase  &amp;#039;&amp;#039;&amp;#039;AI Disclosure:&amp;#039;&amp;#039;&amp;#039; Claude and Grok provided assistance ----  == 1. Overview == &amp;#039;&amp;#039;&amp;#039;Kindler&amp;#039;&amp;#039;&amp;#039; is a declarative, cached, bootstrapped build system for UNIX-like platforms. It does not build software directly—instead, it generates build files (Makefiles, Ninja files) that native build tools execute.  === Core Philosophy ===  # &amp;#039;&amp;#039;&amp;#039;Portable:&amp;#039;&amp;#039;...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Kindler Build System Specification =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 0.1.0 (Draft)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Last Updated:&amp;#039;&amp;#039;&amp;#039; January 2026&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Status:&amp;#039;&amp;#039;&amp;#039; Design Phase&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;AI Disclosure:&amp;#039;&amp;#039;&amp;#039; Claude and Grok provided assistance&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 1. Overview ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Kindler&amp;#039;&amp;#039;&amp;#039; is a declarative, cached, bootstrapped build system for UNIX-like platforms. It does not build software directly—instead, it generates build files (Makefiles, Ninja files) that native build tools execute.&lt;br /&gt;
&lt;br /&gt;
=== Core Philosophy ===&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Portable:&amp;#039;&amp;#039;&amp;#039; Runs on any POSIX-compliant system with Lua 5.1+&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Declarative:&amp;#039;&amp;#039;&amp;#039; Project files describe &amp;#039;&amp;#039;what&amp;#039;&amp;#039; to build, not &amp;#039;&amp;#039;how&amp;#039;&amp;#039;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Non-blocking:&amp;#039;&amp;#039;&amp;#039; Warns about problems but never prevents builds&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Generator-based:&amp;#039;&amp;#039;&amp;#039; Outputs to Make/Ninja, doesn&amp;#039;t reinvent the wheel&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Cached:&amp;#039;&amp;#039;&amp;#039; Bootstraps once per system, reuses platform knowledge&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Interoperable:&amp;#039;&amp;#039;&amp;#039; Plays nice with other build systems&lt;br /&gt;
&lt;br /&gt;
=== What Kindler IS ===&lt;br /&gt;
&lt;br /&gt;
* A project description parser (UCL format)&lt;br /&gt;
* A platform/compiler database (hint files + cache)&lt;br /&gt;
* A discovery tool (bootstrap scanner)&lt;br /&gt;
* A build file generator (POSIX Make, GNU Make, Ninja)&lt;br /&gt;
* A module loader (Lua hooks for complex tasks)&lt;br /&gt;
&lt;br /&gt;
=== What Kindler IS NOT ===&lt;br /&gt;
&lt;br /&gt;
* A compiler (it doesn&amp;#039;t compile anything)&lt;br /&gt;
* A package manager (it doesn&amp;#039;t fetch dependencies)&lt;br /&gt;
* A scripting language (no Turing-complete logic in project files)&lt;br /&gt;
* A build executor (Make/Ninja do the actual building)&lt;br /&gt;
* A replacement for CMake/Meson for all use cases&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 2. Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== 2.1 Bootstrap Phase ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Purpose:&amp;#039;&amp;#039;&amp;#039; One-time system profiling to build a knowledge cache.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Steps:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# Detect OS via &amp;lt;code&amp;gt;uname&amp;lt;/code&amp;gt; and match against OS hints&lt;br /&gt;
# Load OS-specific hints file (&amp;lt;code&amp;gt;hints/os/&amp;lt;osname&amp;gt;.lua&amp;lt;/code&amp;gt;)&lt;br /&gt;
# Scan for compilers listed in OS hints&lt;br /&gt;
# Detect available libraries (via pkg-config/pkgconf)&lt;br /&gt;
# Optionally scan system headers&lt;br /&gt;
# Serialize all findings to cache (&amp;lt;code&amp;gt;~/.config/kindler/cache/&amp;lt;hostname&amp;gt;.lua&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cache Format:&amp;#039;&amp;#039;&amp;#039; Lua source files (portable, debuggable)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cache Invalidation:&amp;#039;&amp;#039;&amp;#039; 30-day TTL or manual re-bootstrap&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2.2 Project Files (UCL Format) ===&lt;br /&gt;
Projects are described in UCL (Universal Configuration Language), a human-readable, non-Turing-complete format.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
ucl&lt;br /&gt;
 &amp;lt;code&amp;gt;project {&lt;br /&gt;
     name = &amp;quot;myapp&amp;quot;;&lt;br /&gt;
     lang = &amp;quot;c99&amp;quot;;&lt;br /&gt;
     version = &amp;quot;1.0.0&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 dependencies {&lt;br /&gt;
     requires = [&amp;quot;mbedtls &amp;gt;= 2.16&amp;quot;, &amp;quot;pthread&amp;quot;];&lt;br /&gt;
     prefer = &amp;quot;static&amp;quot;;  # or &amp;quot;shared&amp;quot;, &amp;quot;any&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 build {&lt;br /&gt;
     sources = [&amp;quot;main.c&amp;quot;, &amp;quot;net.c&amp;quot;, &amp;quot;util.c&amp;quot;];&lt;br /&gt;
     output = &amp;quot;myapp&amp;quot;;&lt;br /&gt;
     type = &amp;quot;executable&amp;quot;;  # or &amp;quot;static&amp;quot;, &amp;quot;shared&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 config {&lt;br /&gt;
     debug {&lt;br /&gt;
         cflags = [&amp;quot;-g&amp;quot;, &amp;quot;-O0&amp;quot;];&lt;br /&gt;
         defines = [&amp;quot;DEBUG=1&amp;quot;];&lt;br /&gt;
     };&lt;br /&gt;
     release {&lt;br /&gt;
         cflags = [&amp;quot;-O2&amp;quot;];&lt;br /&gt;
         defines = [&amp;quot;NDEBUG&amp;quot;];&lt;br /&gt;
     };&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Key Sections:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt; — Name, language, metadata&lt;br /&gt;
* &amp;lt;code&amp;gt;dependencies&amp;lt;/code&amp;gt; — External libraries (resolved via pkg-config + OS hints)&lt;br /&gt;
* &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; — Source files, output, artifact type&lt;br /&gt;
* &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt; — Build configurations (debug, release, custom)&lt;br /&gt;
* &amp;lt;code&amp;gt;modules&amp;lt;/code&amp;gt; — Optional Lua modules for complex tasks&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2.3 Hints System ===&lt;br /&gt;
Hints are Lua tables that describe platform/compiler capabilities.&lt;br /&gt;
&lt;br /&gt;
==== OS Hints (&amp;lt;code&amp;gt;hints/os/&amp;lt;osname&amp;gt;.lua&amp;lt;/code&amp;gt;) ====&lt;br /&gt;
lua&lt;br /&gt;
 &amp;lt;code&amp;gt;return {&lt;br /&gt;
     irix65 = {&lt;br /&gt;
         posix = &amp;quot;yes&amp;quot;,&lt;br /&gt;
         architectures = {&amp;quot;sgi-mips&amp;quot;, &amp;quot;sgi-mips64&amp;quot;},&lt;br /&gt;
         compilers = {&amp;quot;mipspro&amp;quot;, &amp;quot;gcc&amp;quot;},  &amp;#039;&amp;#039;-- native first&amp;#039;&amp;#039;&lt;br /&gt;
         endian = &amp;quot;big&amp;quot;,&lt;br /&gt;
         abi_list = {&amp;quot;n32&amp;quot;, &amp;quot;o32&amp;quot;, &amp;quot;n64&amp;quot;},  &amp;#039;&amp;#039;-- default first&amp;#039;&amp;#039;&lt;br /&gt;
         include_path = &amp;quot;/usr/include&amp;quot;,&lt;br /&gt;
         library_search_paths = {&amp;quot;/usr/lib&amp;quot;, &amp;quot;/usr/lib32&amp;quot;, &amp;quot;/usr/lib64&amp;quot;},&lt;br /&gt;
         standard_libs = {&amp;quot;c&amp;quot;, &amp;quot;m&amp;quot;, &amp;quot;pthread&amp;quot;},&lt;br /&gt;
         headers = {&amp;quot;stdio.h&amp;quot;, &amp;quot;stdlib.h&amp;quot;, &amp;quot;unistd.h&amp;quot;, ...},&lt;br /&gt;
     }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Compiler Hints (&amp;lt;code&amp;gt;hints/compiler/&amp;lt;compiler&amp;gt;.lua&amp;lt;/code&amp;gt;) ====&lt;br /&gt;
lua&lt;br /&gt;
 &amp;lt;code&amp;gt;return {&lt;br /&gt;
     mipspro = {&lt;br /&gt;
         architecture = {&amp;quot;sgi-mips&amp;quot;, &amp;quot;sgi-mips64&amp;quot;},&lt;br /&gt;
         [&amp;quot;compiler.drivers&amp;quot;] = {&amp;quot;/usr/bin/cc&amp;quot;, &amp;quot;/usr/bin/c99&amp;quot;, &amp;quot;/usr/bin/CC&amp;quot;},&lt;br /&gt;
         languages = {&amp;quot;ansi-c&amp;quot;, &amp;quot;c99&amp;quot;, &amp;quot;c++98&amp;quot;, &amp;quot;c++03&amp;quot;},&lt;br /&gt;
         [&amp;quot;ansi-c.driver&amp;quot;] = &amp;quot;cc&amp;quot;,   &amp;#039;&amp;#039;-- Use `cc` for ANSI C&amp;#039;&amp;#039;&lt;br /&gt;
         [&amp;quot;c99.driver&amp;quot;] = &amp;quot;c99&amp;quot;,     &amp;#039;&amp;#039;-- Use `c99` for C99 (NOT cc -std=c99!)&amp;#039;&amp;#039;&lt;br /&gt;
         [&amp;quot;c++98.driver&amp;quot;] = &amp;quot;CC&amp;quot;,&lt;br /&gt;
         version_flag = &amp;quot;-version&amp;quot;,&lt;br /&gt;
         warning_flags = &amp;quot;-fullwarn&amp;quot;,&lt;br /&gt;
         pic_flag = &amp;quot;-KPIC&amp;quot;,&lt;br /&gt;
         shared_link_flags = &amp;quot;-shared&amp;quot;,&lt;br /&gt;
         rpath_flag = &amp;quot;-rpath&amp;quot;,&lt;br /&gt;
         uses_ranlib = &amp;quot;no&amp;quot;,&lt;br /&gt;
         atomic_builtins = &amp;quot;no&amp;quot;,&lt;br /&gt;
         thread_local = &amp;quot;no&amp;quot;,&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 ```&lt;br /&gt;
 &lt;br /&gt;
 **Key Principle:** Hints describe *capabilities*, not build commands. The generator converts hints → build rules.&lt;br /&gt;
 &lt;br /&gt;
 &amp;#039;&amp;#039;---&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
 ### 2.4 Dependency Resolution&lt;br /&gt;
 &lt;br /&gt;
 **Strategy:**&lt;br /&gt;
 1. Parse `dependencies.requires` from project file&lt;br /&gt;
 2. Check OS hints for `library_mappings` (platform-specific knowledge)&lt;br /&gt;
 3. Query pkg-config/pkgconf for library flags&lt;br /&gt;
 4. Fall back to generic search in `library_search_paths`&lt;br /&gt;
 5. Respect `dependencies.prefer` (static/shared/any)&lt;br /&gt;
 6. Warn if library not found, but don&amp;#039;t block&lt;br /&gt;
 &lt;br /&gt;
 **Example Flow:**&lt;br /&gt;
 ```&lt;br /&gt;
 User requests: &amp;quot;mbedtls &amp;gt;= 2.16&amp;quot;&lt;br /&gt;
   ↓&lt;br /&gt;
 Check OS hints: library_mappings.mbedtls → {pkg_config = &amp;quot;mbedtls&amp;quot;}&lt;br /&gt;
   ↓&lt;br /&gt;
 Run: pkg-config &amp;#039;&amp;#039;--modversion mbedtls → &amp;quot;2.28.0&amp;quot; ✓&amp;#039;&amp;#039;&lt;br /&gt;
   ↓&lt;br /&gt;
 Run: pkg-config &amp;#039;&amp;#039;--libs --static mbedtls → &amp;quot;-lmbedtls -lmbedx509 -lmbedcrypto&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
   ↓&lt;br /&gt;
 Cache result: mbedtls.libs = {...}&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2.5 Build File Generation ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Supported Targets:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* POSIX Make (maximum portability)&lt;br /&gt;
* GNU Make (extensions like pattern rules)&lt;br /&gt;
* Ninja (fast incremental builds)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Generator Responsibilities:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Read project file + cache&lt;br /&gt;
* Resolve dependencies&lt;br /&gt;
* Select compiler based on language + OS hints&lt;br /&gt;
* Construct CFLAGS/LDFLAGS from hints + config&lt;br /&gt;
* Output build rules to target format&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Example Output (POSIX Make):&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
 &amp;lt;code&amp;gt;# Generated by Kindler v0.1.0&lt;br /&gt;
 # Config: debug&lt;br /&gt;
 &lt;br /&gt;
 CC = /usr/bin/c99&lt;br /&gt;
 CFLAGS = -g -O0 -DDEBUG=1 -fullwarn&lt;br /&gt;
 LDFLAGS = &lt;br /&gt;
 LIBS = -lmbedtls -lmbedx509 -lmbedcrypto -lpthread&lt;br /&gt;
 &lt;br /&gt;
 OBJS = main.o net.o util.o&lt;br /&gt;
 &lt;br /&gt;
 all: myapp&lt;br /&gt;
 &lt;br /&gt;
 myapp: $(OBJS)&lt;br /&gt;
 	$(CC) $(OBJS) $(LIBS) -o myapp $(LDFLAGS)&lt;br /&gt;
 &lt;br /&gt;
 .c.o:&lt;br /&gt;
 	$(CC) $(CFLAGS) -c $&lt;br /&gt;
 &lt;br /&gt;
 clean:&lt;br /&gt;
 	rm -f $(OBJS) myapp&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 2.6 Module System ===&lt;br /&gt;
For complex tasks that exceed UCL&amp;#039;s capabilities, users write &amp;#039;&amp;#039;&amp;#039;Lua modules&amp;#039;&amp;#039;&amp;#039; that hook into build phases.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Module Example:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
lua&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;#039;&amp;#039;-- modules/version_gen.lua&amp;#039;&amp;#039;&lt;br /&gt;
 return {&lt;br /&gt;
     name = &amp;quot;version_gen&amp;quot;,&lt;br /&gt;
     hooks = {&amp;quot;pre-build&amp;quot;},&lt;br /&gt;
     &lt;br /&gt;
     [&amp;quot;pre-build&amp;quot;] = function(context)&lt;br /&gt;
         &amp;#039;&amp;#039;-- Generate version.h from git tags&amp;#039;&amp;#039;&lt;br /&gt;
         local handle = io.popen(&amp;quot;git describe --tags&amp;quot;)&lt;br /&gt;
         local version = handle:read(&amp;quot;*a&amp;quot;):gsub(&amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
         handle:close()&lt;br /&gt;
         &lt;br /&gt;
         local f = io.open(&amp;quot;version.h&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
         f:write(&amp;#039;#define VERSION &amp;quot;&amp;#039; .. version .. &amp;#039;&amp;quot;\n&amp;#039;)&lt;br /&gt;
         f:close()&lt;br /&gt;
         &lt;br /&gt;
         print(&amp;quot;Generated version.h: &amp;quot; .. version)&lt;br /&gt;
     end&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hook Phases:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;pre-parse&amp;lt;/code&amp;gt; — Before reading project file&lt;br /&gt;
* &amp;lt;code&amp;gt;post-parse&amp;lt;/code&amp;gt; — After parsing, before generation&lt;br /&gt;
* &amp;lt;code&amp;gt;pre-build&amp;lt;/code&amp;gt; — After Makefile generation&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Loading Modules:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
ucl&lt;br /&gt;
 &amp;lt;code&amp;gt;modules {&lt;br /&gt;
     load = [&amp;quot;version_gen&amp;quot;, &amp;quot;custom_checks&amp;quot;];&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 3. Supported Platforms (v0.1.0) ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Target Systems:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* IRIX 6.5.x (MIPS, MIPS64)&lt;br /&gt;
* GNU/Linux (glibc 2.17+)&lt;br /&gt;
* NetBSD 9.0+&lt;br /&gt;
* FreeBSD 13.0+&lt;br /&gt;
* Solaris 11+ / OpenIndiana (if testable)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Required Tools:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Lua 5.1, 5.2, 5.3, or 5.4&lt;br /&gt;
* POSIX shell (&amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;uname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt;&lt;br /&gt;
* pkg-config or pkgconf (recommended)&lt;br /&gt;
* Make or Ninja&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 4. Design Decisions ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 Why UCL? ===&lt;br /&gt;
&lt;br /&gt;
* Human-readable (better than JSON, simpler than YAML)&lt;br /&gt;
* Not Turing-complete (forces separation of config vs. logic)&lt;br /&gt;
* Lua-parseable (no external dependencies)&lt;br /&gt;
&lt;br /&gt;
=== 4.2 Why Generate, Not Build? ===&lt;br /&gt;
&lt;br /&gt;
* Leverage decades of Make/Ninja optimization&lt;br /&gt;
* Interoperate with existing toolchains&lt;br /&gt;
* Users get native incremental builds &amp;quot;for free&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== 4.3 Why Lua Source Caches? ===&lt;br /&gt;
&lt;br /&gt;
* Portable across architectures (unlike bytecode)&lt;br /&gt;
* Fast to parse (Lua&amp;#039;s parser is optimized)&lt;br /&gt;
* Debuggable (users can inspect/edit caches)&lt;br /&gt;
&lt;br /&gt;
=== 4.4 Why Non-Blocking Warnings? ===&lt;br /&gt;
&lt;br /&gt;
* Developers know their toolchains better than Kindler does&lt;br /&gt;
* Experimental builds should be possible&lt;br /&gt;
* Kindler provides info, humans make decisions&lt;br /&gt;
&lt;br /&gt;
=== 4.5 Why Per-Driver Language Selection? ===&lt;br /&gt;
&lt;br /&gt;
* Compilers like MIPSpro use &amp;#039;&amp;#039;different binaries&amp;#039;&amp;#039; for C89 vs C99&lt;br /&gt;
* GCC-style &amp;lt;code&amp;gt;-std=&amp;lt;/code&amp;gt; flags are not universal&lt;br /&gt;
* Hints encode the &amp;quot;right way&amp;quot; per compiler&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 5. Limitations &amp;amp; Non-Goals ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Limitations:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* No dependency fetching (use system packages or vendor code)&lt;br /&gt;
* No cross-compilation auto-detection (user must bootstrap target system)&lt;br /&gt;
* No built-in testing framework (integrate with existing tools)&lt;br /&gt;
* No IDE integration (yet)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Non-Goals:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Replace CMake/Meson for GUI apps or complex projects&lt;br /&gt;
* Compete with Bazel/Buck for monorepos&lt;br /&gt;
* Support Windows natively (WSL/Cygwin maybe)&lt;br /&gt;
* Implement a package manager&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 6. Workflow Example ==&lt;br /&gt;
bash&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;#039;&amp;#039;# One-time bootstrap (per machine)&amp;#039;&amp;#039;&lt;br /&gt;
 $ kindler bootstrap&lt;br /&gt;
 Detecting OS... IRIX 6.5.30&lt;br /&gt;
 Found compilers: mipspro (/usr/bin/cc), gcc (/usr/local/bin/gcc)&lt;br /&gt;
 Scanning headers... 342 found&lt;br /&gt;
 Cache written: ~/.config/kindler/cache/sgi-onyx.lua&lt;br /&gt;
 &lt;br /&gt;
 &amp;#039;&amp;#039;# Generate build files&amp;#039;&amp;#039;&lt;br /&gt;
 $ cd myproject/&lt;br /&gt;
 $ kindler generate --config=debug --target=make&lt;br /&gt;
 Reading: project.ucl&lt;br /&gt;
 Resolving dependencies... mbedtls [OK], pthread [OK]&lt;br /&gt;
 Generating: Makefile (POSIX)&lt;br /&gt;
 &lt;br /&gt;
 &amp;#039;&amp;#039;# Build (using native tools)&amp;#039;&amp;#039;&lt;br /&gt;
 $ make&lt;br /&gt;
 cc -g -O0 -DDEBUG=1 -c main.c&lt;br /&gt;
 cc -g -O0 -DDEBUG=1 -c net.c&lt;br /&gt;
 cc main.o net.o -lmbedtls -lpthread -o myapp&lt;br /&gt;
 &lt;br /&gt;
 &amp;#039;&amp;#039;# Switch configs&amp;#039;&amp;#039;&lt;br /&gt;
 $ kindler generate --config=release --target=ninja&lt;br /&gt;
 Generating: build.ninja (Ninja)&lt;br /&gt;
 $ ninja&lt;br /&gt;
 [2/2] Linking myapp&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 7. Future Considerations (Post-v1.0) ==&lt;br /&gt;
&lt;br /&gt;
* IDE plugins (VSCode, Vim)&lt;br /&gt;
* CI/CD templates&lt;br /&gt;
* Cross-compilation wizard&lt;br /&gt;
* Hint database versioning&lt;br /&gt;
* Community hint repository&lt;/div&gt;</summary>
		<author><name>Raion</name></author>
	</entry>
</feed>