<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tazel/sources, branch main</title>
<subtitle>A build system and package manager for C, C++, Objective-C, Objective-C++ and Zig, with Kotlin project files.</subtitle>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/tazel/'/>
<entry>
<title>Build and run C, C++, Objective-C, Objective-C++ and Zig targets</title>
<updated>2026-11-12T19:19:46+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-12T19:19:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/tazel/commit/?id=7cb809c6560fc4ed29f41e4e4199cd91af6cbed1'/>
<id>7cb809c6560fc4ed29f41e4e4199cd91af6cbed1</id>
<content type='text'>
Tazel gets its first build commands:

  tazel build [--release] [--triple &lt;LLVM triple&gt;] [labels...]
  tazel run   [--release] [--triple &lt;LLVM triple&gt;] [label] [-- program arguments]

Without a label they take the package of the current directory. A
pattern skips targets not built for the triple; a label names one, or
it is an error. tazel run builds and runs one bin target with its args
and env from BUILD.kts, then the arguments after --.

- Plan (driver.BuildPlan): the selected targets and every library they
  depend on, configured once each for one triple and build mode, with
  link order (dependents before dependencies) and cycle detection.
  Dependencies from ViGet and local .vipkg files are refused with a
  message, since they are not built yet.
- Compilers (driver.CcToolchain): Clang, then GCC, then zig cc on PATH
  unless the target chooses one. Clang builds for other triples with
  --target, zig cc with its own triple spelling; GCC only for the host.
  MSVC and clang-cl are refused with a message for now.
- Commands (driver.CcCommands): standard, gnuExtensions, optimize and
  debugInfo with their mode defaults, warnings, warningsAsErrors,
  position-independent code (sharedlibs, and staticlibs a sharedlib
  links unless pic says otherwise), arc, sanitizers, LTO, public and
  private defines and headers with those of the libraries, headers
  staged under includePrefix/stripIncludePrefix, precompiledHeader as a
  forced include, flags; archives with llvm-ar or ar; links with
  alwaysLink as whole-archive, links, frameworks on macOS, rpath (and
  the directories of shared libraries), linkerScript, exports (version
  script or exported symbols), soVersion (soname and the unversioned
  name), defFile and subsystem on Windows, strip and linkFlags.
  Windows resource scripts are refused with a message for now.
- Zig targets run zig build-exe, build-lib (-dynamic) or test
  --test-no-exec on their root file, with the libraries they depend on.
- Incremental (driver.UpToDate): every compile writes a depfile (-MD
  -MF); an object is current while its command line is the same and no
  input in its depfile is newer. Archives and programs are remade when
  their command or an input changed. A failed command is redone.
- Jobs: the job pool and build graph of the legacy Tazel run the
  translation units in parallel (execution.jobs, keepGoing).
- data files are copied beside the output.

Tests: depfile reading, up-to-date decisions, globs and excludes, Zig
triples and output names, and a real build with the C compiler of the
machine: a first build, a build with nothing to do, a header change
that recompiles both units, tazel run with args, env and extra
arguments, and a compiler error.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Tazel gets its first build commands:

  tazel build [--release] [--triple &lt;LLVM triple&gt;] [labels...]
  tazel run   [--release] [--triple &lt;LLVM triple&gt;] [label] [-- program arguments]

Without a label they take the package of the current directory. A
pattern skips targets not built for the triple; a label names one, or
it is an error. tazel run builds and runs one bin target with its args
and env from BUILD.kts, then the arguments after --.

- Plan (driver.BuildPlan): the selected targets and every library they
  depend on, configured once each for one triple and build mode, with
  link order (dependents before dependencies) and cycle detection.
  Dependencies from ViGet and local .vipkg files are refused with a
  message, since they are not built yet.
- Compilers (driver.CcToolchain): Clang, then GCC, then zig cc on PATH
  unless the target chooses one. Clang builds for other triples with
  --target, zig cc with its own triple spelling; GCC only for the host.
  MSVC and clang-cl are refused with a message for now.
- Commands (driver.CcCommands): standard, gnuExtensions, optimize and
  debugInfo with their mode defaults, warnings, warningsAsErrors,
  position-independent code (sharedlibs, and staticlibs a sharedlib
  links unless pic says otherwise), arc, sanitizers, LTO, public and
  private defines and headers with those of the libraries, headers
  staged under includePrefix/stripIncludePrefix, precompiledHeader as a
  forced include, flags; archives with llvm-ar or ar; links with
  alwaysLink as whole-archive, links, frameworks on macOS, rpath (and
  the directories of shared libraries), linkerScript, exports (version
  script or exported symbols), soVersion (soname and the unversioned
  name), defFile and subsystem on Windows, strip and linkFlags.
  Windows resource scripts are refused with a message for now.
- Zig targets run zig build-exe, build-lib (-dynamic) or test
  --test-no-exec on their root file, with the libraries they depend on.
- Incremental (driver.UpToDate): every compile writes a depfile (-MD
  -MF); an object is current while its command line is the same and no
  input in its depfile is newer. Archives and programs are remade when
  their command or an input changed. A failed command is redone.
- Jobs: the job pool and build graph of the legacy Tazel run the
  translation units in parallel (execution.jobs, keepGoing).
- data files are copied beside the output.

Tests: depfile reading, up-to-date decisions, globs and excludes, Zig
triples and output names, and a real build with the C compiler of the
machine: a first build, a build with nothing to do, a header change
that recompiles both units, tazel run with args, env and extra
arguments, and a compiler error.
</pre>
</div>
</content>
</entry>
<entry>
<title>Bring Tazel Custom Commands and Tazel Options from the legacy Tazel</title>
<updated>2026-11-12T13:05:54+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-12T13:05:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/tazel/commit/?id=74c6d3b2e85cc51e5dde1bcccae581e23eae20df'/>
<id>74c6d3b2e85cc51e5dde1bcccae581e23eae20df</id>
<content type='text'>
The code and tests come from Progmasoft/tazel-legacy, with the packages
renamed so that the shared lexer sits beside both users:

- com.progmasoft.tazel.custom.commands        -&gt; com.progmasoft.tazel.dsl.custom
- com.progmasoft.tazel.custom.commands.lexer  -&gt; com.progmasoft.tazel.dsl.custom.lexer
- com.progmasoft.tazel.custom.commands.parser -&gt; com.progmasoft.tazel.dsl.custom.parser
- com.progmasoft.tazel.options                -&gt; com.progmasoft.tazel.dsl.options

tazel custom runs a command of the nearest tazel_custom.txt in the
directory of that file, or lists the commands; the name matching, &lt;N&gt;
and &lt;*&gt; arguments, the -- separator, s(...) shell steps (CMD on Windows,
sh elsewhere) and the strict-process check are those of the legacy
Tazel. tazel_options.txt is read as before: a sandbox asked for in any
file at or above the directory stops the command, since Tazel has no
MicroVM to start yet.

The process interface (driver.Processes) and the suggestions under
errors come along; program lookup on PATH is driver.Programs, the part
of the legacy Toolchain that is not about Tala tools. OperatingSystem
becomes the Os of the project files. An unknown command now gets a
"did you mean" hint.

The 33 legacy tests of these parts pass against a smaller fixture.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The code and tests come from Progmasoft/tazel-legacy, with the packages
renamed so that the shared lexer sits beside both users:

- com.progmasoft.tazel.custom.commands        -&gt; com.progmasoft.tazel.dsl.custom
- com.progmasoft.tazel.custom.commands.lexer  -&gt; com.progmasoft.tazel.dsl.custom.lexer
- com.progmasoft.tazel.custom.commands.parser -&gt; com.progmasoft.tazel.dsl.custom.parser
- com.progmasoft.tazel.options                -&gt; com.progmasoft.tazel.dsl.options

tazel custom runs a command of the nearest tazel_custom.txt in the
directory of that file, or lists the commands; the name matching, &lt;N&gt;
and &lt;*&gt; arguments, the -- separator, s(...) shell steps (CMD on Windows,
sh elsewhere) and the strict-process check are those of the legacy
Tazel. tazel_options.txt is read as before: a sandbox asked for in any
file at or above the directory stops the command, since Tazel has no
MicroVM to start yet.

The process interface (driver.Processes) and the suggestions under
errors come along; program lookup on PATH is driver.Programs, the part
of the legacy Toolchain that is not about Tala tools. OperatingSystem
becomes the Os of the project files. An unknown command now gets a
"did you mean" hint.

The 33 legacy tests of these parts pass against a smaller fixture.
</pre>
</div>
</content>
</entry>
<entry>
<title>Read MODULE.kts and BUILD.kts, and resolve labels</title>
<updated>2026-11-12T04:46:46+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-12T04:46:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/tazel/commit/?id=3bffdc1d747a73ff83fab83f1a51b53c0ab507d9'/>
<id>3bffdc1d747a73ff83fab83f1a51b53c0ab507d9</id>
<content type='text'>
Tazel now reads the project files of the accepted DSL:

- Labels: //:x for the root BUILD.kts, //dir/:x for dir/BUILD.kts, :x for
  the same file, @name//:x for a dependency, and the patterns //dir/... and
  //... . The //dir shorthand is refused with a hint.
- MODULE.kts: module (name, SemVer version, description, authors, license),
  dependencies (implementation, testImplementation, localImplementation,
  localTestImplementation, with alias), viget (push, pushTarget, exclude),
  cache and execution. Duplicate dependency names, a push without version,
  description or author, and a pushTarget in a private BUILD.kts are errors.
- BUILD.kts: isPublic per file and c, cpp, objc, objcpp and zig targets,
  each with bin, staticlib, sharedlib and test. The scopes carry type
  markers of their language and kind, so a setting that one does not have
  (exports on a bin, args on a staticlib, a C standard on C++, arc on C,
  compiler on Zig, test settings on a bin, bundle on C++) is a compile
  error at its line in the project file.
- A target block runs for each triple and build mode it is built for; OS
  and ARCH come from the LLVM triple, BUILD_MODE from the command. Its
  depends are resolved: libraries only, visibility through isPublic, test
  dependencies for test targets only, paths kept inside the module.
- Directories starting with a dot and nested modules are not packages;
  file names are compared case-sensitively.

The tests load a reference module that uses every setting of the DSL and
configure each of its eleven targets for each triple and mode.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Tazel now reads the project files of the accepted DSL:

- Labels: //:x for the root BUILD.kts, //dir/:x for dir/BUILD.kts, :x for
  the same file, @name//:x for a dependency, and the patterns //dir/... and
  //... . The //dir shorthand is refused with a hint.
- MODULE.kts: module (name, SemVer version, description, authors, license),
  dependencies (implementation, testImplementation, localImplementation,
  localTestImplementation, with alias), viget (push, pushTarget, exclude),
  cache and execution. Duplicate dependency names, a push without version,
  description or author, and a pushTarget in a private BUILD.kts are errors.
- BUILD.kts: isPublic per file and c, cpp, objc, objcpp and zig targets,
  each with bin, staticlib, sharedlib and test. The scopes carry type
  markers of their language and kind, so a setting that one does not have
  (exports on a bin, args on a staticlib, a C standard on C++, arc on C,
  compiler on Zig, test settings on a bin, bundle on C++) is a compile
  error at its line in the project file.
- A target block runs for each triple and build mode it is built for; OS
  and ARCH come from the LLVM triple, BUILD_MODE from the command. Its
  depends are resolved: libraries only, visibility through isPublic, test
  dependencies for test targets only, paths kept inside the module.
- Directories starting with a dot and nested modules are not packages;
  file names are compared case-sensitively.

The tests load a reference module that uses every setting of the DSL and
configure each of its eleven targets for each triple and mode.
</pre>
</div>
</content>
</entry>
<entry>
<title>Start Tazel again at 0.1.0 for C, C++, Objective-C, Objective-C++ and Zig</title>
<updated>2026-11-12T04:31:31+00:00</updated>
<author>
<name>Leitwolf11</name>
</author>
<published>2026-11-12T04:31:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.progmasoft.com/tazel/commit/?id=f7545228848e250856b9cdf2cf92538dfda0eb4f'/>
<id>f7545228848e250856b9cdf2cf92538dfda0eb4f</id>
<content type='text'>
Tazel restarts as a build system and package manager for C, C++,
Objective-C, Objective-C++ and Zig, with MODULE.kts and BUILD.kts project
files and labels such as //app/:greeter. The earlier Tazel, the build system
of Tala (0.1.0 to 0.4.0.3), is archived as Progmasoft/tazel-legacy, with its
history and releases.

This first commit holds the build of the program only: Gradle 9 with the
Kotlin JVM plugin (JDK 25, warnings as errors), Spotless, JaCoCo, the
Kotlin scripting libraries the project files will need, Mordant, and an
entry point that answers version and help and refuses anything else with
exit code 2. CI runs gradlew check installDist on Linux, Windows and macOS;
CodeQL, zizmor and Dependency Review come from the earlier repository.
The license is MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Tazel restarts as a build system and package manager for C, C++,
Objective-C, Objective-C++ and Zig, with MODULE.kts and BUILD.kts project
files and labels such as //app/:greeter. The earlier Tazel, the build system
of Tala (0.1.0 to 0.4.0.3), is archived as Progmasoft/tazel-legacy, with its
history and releases.

This first commit holds the build of the program only: Gradle 9 with the
Kotlin JVM plugin (JDK 25, warnings as errors), Spotless, JaCoCo, the
Kotlin scripting libraries the project files will need, Mordant, and an
entry point that answers version and help and refuses anything else with
exit code 2. CI runs gradlew check installDist on Linux, Windows and macOS;
CodeQL, zizmor and Dependency Review come from the earlier repository.
The license is MPL-2.0 WITH AdditionRef-Progmasoft-Exception-2.0.
</pre>
</div>
</content>
</entry>
</feed>
