Helpers for building and testing Tau Parser Library.
Run any script from the project root via ./dev:
./dev <SCRIPT> [SCRIPT_OPTIONS...]./dev help lists available scripts (everything in scripts/*.sh).
dev runs scripts/*.sh. CMake drivers build.sh and
preset.sh source devrc. build_entry and
preset_entry call dev_entry internally; use dev_entry when you only need
parsed args and TAU_BUILD_JOBS. test_entry runs a legacy build + ctest;
pass CMake -D flags as arguments (e.g. -DTAU_PARSER_BUILD_TESTS=ON).
When embedded in tau-lang, the same devrc file is sourced from
external/parser/scripts/ (tau sets DEV_ROOT to the parser submodule path).
All of the following may appear in any order on the command line
(normalize_args in devrc is the single parser):
| Token | Effect |
|---|---|
-D… |
CMake definition (via DEV_CMAKE) |
Debug / Release / RelWithDebInfo / Coverage |
legacy build type |
-v |
verbose build |
--target NAME |
build only this target |
-G NAME |
sets GENERATOR (not DEV_CMAKE); legacy build defaults to Ninja; preset uses preset generator unless -G is passed |
preset name (e.g. release-tests) |
preset to configure |
run |
after preset build: run tests or tgf |
-- |
start of program args |
Examples:
./dev preset release-tests run -DTAU_PARSER_BUILD_TESTS=ON
./dev preset -DTAU_PARSER_BUILD_TESTS=ON release-tests run
./dev build -v Debug --target test_parser -DTAU_PARSER_BUILD_TESTS=ONUse -- to pass arguments to a program run by a script (e.g. tgf):
./dev preset release-tgf run -- --help./dev sets TAU_BUILD_JOBS (and CMAKE_BUILD_PARALLEL_LEVEL) for every
script. Resolution order:
-DTAU_BUILD_JOBS=Non the command line (any position)TAU_BUILD_JOBSalready in the environment- Half of detected logical CPU cores (auto)
Examples:
./dev preset release-tests run -DTAU_BUILD_JOBS=14
TAU_BUILD_JOBS=14 ./dev preset release-tests run
export TAU_BUILD_JOBS=10
./dev release-DTAU_BUILD_JOBS is stripped before cmake --preset (CMake rejects it there);
the value is applied via the exported environment. Other -D options are passed
to CMake as usual.
CMake configure also reads $ENV{TAU_BUILD_JOBS} when the cache value is 0
(see CMakeLists.txt). A machine-local
CMakeLocalLists.txt may override this.
Two layouts coexist on purpose:
| Path | Used by | Example |
|---|---|---|
build-${BUILD_TYPE} |
build.sh, debug, release, packages, … |
build-Release, build-Debug |
build/<lowercase> |
preset.sh, cmake --preset |
build/release, build/debug |
CMake BUILD_TYPE |
Legacy (./dev build) |
Preset binaryDir |
|---|---|---|
Release |
build-Release |
build/release |
Debug |
build-Debug |
build/debug |
RelWithDebInfo |
build-RelWithDebInfo |
build/relwithdebinfo |
| MinGW Release | build-Release + toolchain -D |
build/release-mingw |
| Emscripten | build-Release + -D |
build/emscripten |
Legacy wrappers are unchanged. Prefer presets for new work; use the matching
build/… tree when running cpack after a preset build.
clean [all]— remove debugging artifacts; withall, also removebuild,build-*, and preset trees underbuild/.
Building scripts run CMake with different options. Extra -D options from
./dev are passed through to CMake.
build [<BUILD_TYPE> [<CMAKE_OPTIONS>]]— legacy tree (build-Release, …)debug,release,relwithdebinfo— shorthand forbuildwith matching typew64-debug,w64-release— Windows cross-build (legacy tree + mingw toolchain)
preset [<PRESET>] [run] [<CMAKE_OPTIONS>] — configure (fresh), build, and
optionally test or run tgf via
CMakePresets.json.
./dev preset release-tests run
./dev preset release-all run
./dev preset all
./dev preset release-examples
./dev preset release-packages
./dev preset release-mingw-packages
./dev preset relwithdebinfo
./dev preset release-measure
./dev preset release-tgf run -- --version
./dev preset emscriptenDefault preset name is release if omitted.
| Preset | Builds | binaryDir |
|---|---|---|
release, debug |
header-only library (default) | build/release, build/debug |
release-tests, debug-tests |
+ tests | same |
release-tgf, debug-tgf |
+ TGF | same |
release-tgf-clang, debug-tgf-clang |
+ TGF (clang) | build/release-clang, build/debug-clang |
release-clang, debug-clang (+ -make-, -ninja-) |
header-only (default) | build/release-clang, build/debug-clang |
release-examples, debug-examples |
+ examples | same |
release-packages |
TGF + examples (Linux cpack) | build/release |
release-all, debug-all, all |
everything (TAU_PARSER_BUILD_ALL) |
build/release / build/debug (all → build/release) |
release-static, release-shared |
static/shared + install | build/release |
release-measure, debug-measure |
+ instrumentation | same |
debug-asan |
+ address sanitizer | build/debug |
relwithdebinfo (+ -tests, -tgf, …) |
RelWithDebInfo variants | build/relwithdebinfo |
release-mingw, debug-mingw |
Windows cross-compile | build/release-mingw, … |
release-mingw-packages, release-mingw-packages-zip |
MinGW + cpack (NSIS or ZIP) | build/release-mingw |
emscripten |
Emscripten (EMSCRIPTEN_DIR in preset) |
build/emscripten |
Hidden building blocks (_build-tests, _build-packages, _build-all, …) are
composed by the public presets above; see CMakePresets.json.
- Presets whose name contains
packageruncpack -C Releaseafter build (release-packages,release-mingw-packages,release-mingw-packages-zip). run—ctestwhen the name containstest, ends with-all, or isall(not used on packaging presets); otherwise runstgf(args after--).
./dev preset release-packages
# configure, build, cpack → build/release/packages
./dev packages
# legacy: still uses build-Release/packagespackages— legacy:build-Release+cpackw64-packages— legacy: Windows NSIS and ZIP via mingw +packages- Preset alternative:
./dev preset release-packages,./dev preset release-mingw-packages
get-emsdk— download emsdk intoexternal/emsdkjs-debug,js-release— legacybuild-Debug/build-Release+ Emscripten-D- Preset:
./dev preset emscripten(setsEMSCRIPTEN_DIRin the preset)
tgf— legacy release build +-DTAU_PARSER_BUILD_TGF=ON- Preset:
release-tgf/debug-tgf, or./dev preset release-tgf run -- … - Clang:
release-tgf-clang/debug-tgf-clang, or./dev preset release-tgf-clang run -- --help
specialize <FILE.tgf> [<BUILD_TYPE>] [<CMAKE_OPTIONS>] — build a grammar-baked
REPL binary from a .tgf file.
./dev specialize tests/fixtures/tiny.tgf
# → build/release/tiny_grammar
./dev specialize tests/fixtures/tau.tgf Debug
# → build/debug/tau_grammarThe resulting executable behaves like tgf <file>.tgf (same REPL, same
parse/grammar/get/set/… commands), but the parser is generated and
compiled in: no .tgf or .generated.h is needed at runtime. load and
reload print a "not available" message in a specialized binary.
| Item | Default | Override |
|---|---|---|
| Output name | <basename>_grammar |
(not exposed in script) |
| Build type | Release |
first positional: Debug, RelWithDebInfo, … |
| Build dir | build/release (preset layout) |
follows the build type |
Mechanism: the script invokes the main CMake build with
-DTAU_PARSER_SPECIALIZE=<absolute-path> and the *_grammar target;
cmake/specialize.cmake runs tgf <file>.tgf gen
at build time and emits an executable from
cmake/specialize/specialized_main.cpp.in.
Editing the .tgf file triggers a CMake reconfigure on the next build (via
CMAKE_CONFIGURE_DEPENDS), which keeps the embedded grammar text in sync with
the regenerated parser.
Re-running ./dev specialize bar.tgf replaces the active CMake target;
previously built *_grammar executables remain in the build tree until
./dev clean.
test-with-tau— clonetau-lang, build against current parser, run its tests