Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .claude/skills/tupfile-patterns/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ CFLAGS = -I$(B)/$(GMP_DIR) -I$(S)/$(GMP_DIR)

Prefixed DIR vars (`GMP_DIR`, `MPFR_DIR`) are needed because `include_rules` merges ALL `Tuprules.tup` from root to leaf — a single `DIR` variable would collide.

Verify conventions with `putup parse --strict` — flags `=` instead of `?=` for anchor/toolchain variables in component Tuprules.tup files.

## Scoped tup.config

Each subdirectory can have its own `tup.config` for `@(VAR)` config variables:
Expand Down
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ make test # Run all tests
./build/test/unit/putup_test '[target]' # Target parsing tests
./build/test/unit/putup_test '[shell]' # Shell fixture tests
./build/test/unit/putup_test '[configure]' # Two-pass config generation tests
./build/test/unit/putup_test '[strict]' # Convention checker (--strict) tests
```

### Writing E2E Tests
Expand Down
4 changes: 2 additions & 2 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ With libstdc++ eliminated, putup provides its own runtime primitives:
| `Function<Sig>` | `std::function<Sig>` | Move-only type-erased callable (32-byte SBO) |
| `SteadyClock` / `SystemClock` | `std::chrono` clocks | Platform-implemented clocks |
| `CPath` | manual `.c_str()` | Null-termination wrapper for string_view at C API boundary |
| `throw_stubs.cpp` | libstdc++ runtime | operator new/delete, `__cxa_guard_*`, `__throw_*` stubs |
| `throw_stubs.cpp` | libstdc++ runtime | operator new/delete, `__cxa_guard_*`, `__throw_*` stubs, macOS `__libcpp_verbose_abort` |

All threading (`std::thread`, `std::mutex`, `std::atomic`, `std::future`) has been eliminated. The scheduler uses a single-threaded `poll()`-based event loop. Multi-variant parallelism uses `fork()`+`waitpid()` via `platform::run_parallel_tasks()`.

Expand Down Expand Up @@ -1883,7 +1883,7 @@ Putup links with `-nostdlib++` and provides its own runtime primitives:
- **Portability** - No dependency on a specific C++ standard library version; only requires a C runtime (libc)
- **Control** - Custom `StringPool`, `Vec<T>`, `Function<Sig>`, and clock types are purpose-built for the build system's needs, with no overhead from generality

The `throw_stubs.cpp` file provides the minimal runtime surface: `operator new`/`delete` (delegating to `malloc`/`free`), `__cxa_guard_*` (for thread-safe static initialization), and `__throw_*` stubs that abort on use. Multi-variant parallelism uses `fork()`+`waitpid()` via `platform::run_parallel_tasks()` instead of `std::async`.
The `throw_stubs.cpp` file provides the minimal runtime surface: `operator new`/`delete` (delegating to `malloc`/`free`), `__cxa_guard_*` (for thread-safe static initialization), and `__throw_*` stubs that abort on use. On macOS, libc++ also requires `std::__1::__libcpp_verbose_abort` (used by `variant`/`optional` failure paths); the stub matches libc++'s `__1` inline ABI namespace directly. Multi-variant parallelism uses `fork()`+`waitpid()` via `platform::run_parallel_tasks()` instead of `std::async`.

---

Expand Down
1 change: 1 addition & 0 deletions SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ make test # All tests
| `[scoped-config]` | Scoped configure commands |
| `[shell]` | Shell fixture tests (`test.sh`) |
| `[show]` | Show command (script, compdb, graph) |
| `[strict]` | Convention checker (`--strict` flag) |
| `[target]` | Target parsing tests |
| `[variant]` | Out-of-tree/variant builds, ghost nodes |

Expand Down
1 change: 1 addition & 0 deletions Tupfile
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ srcs-y += src/cli/context.cpp
srcs-y += src/cli/multi_variant.cpp
srcs-y += src/cli/options.cpp
srcs-y += src/cli/output.cpp
srcs-y += src/cli/strict_checks.cpp
srcs-y += src/cli/target.cpp

# Platform
Expand Down
5 changes: 3 additions & 2 deletions bootstrap-linux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ mkdir -p "build/test/unit"
(cd "." && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/context.cpp -o build/context.o)
(cd "." && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/config_commands.cpp -o build/config_commands.o)
(cd "." && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/cmd_parse.cpp -o build/cmd_parse.o)
(cd "." && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/strict_checks.cpp -o build/strict_checks.o)
(cd "." && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/cmd_show.cpp -o build/cmd_show.o)
(cd "." && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/cmd_configure.cpp -o build/cmd_configure.o)
(cd "." && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/cmd_clean.cpp -o build/cmd_clean.o)
Expand Down Expand Up @@ -61,8 +62,8 @@ mkdir -p "build/test/unit"
(cd "." && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/core/hash.cpp -o build/hash.o)
(cd "." && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/core/arena.cpp -o build/arena.o)
(cd "." && gcc -std=c11 -Wall -Wextra -Werror -fPIC -I./third_party -O2 -ffunction-sections -fdata-sections -Wno-error -c third_party/sha256/sha256.c -o build/sha256.o)
(cd "." && g++ build/sha256.o build/arena.o build/hash.o build/id_array.o build/id_bitset.o build/layout.o build/metrics.o build/path.o build/path_utils.o build/sorted_id_vec.o build/string_pool.o build/global_pool.o build/buf.o build/heap_buf.o build/string_utils.o build/terminal.o build/ast.o build/config.o build/depfile.o build/eval.o build/glob.o build/ignore.o build/lexer.o build/parser.o build/var_tracking.o build/builder.o build/dag.o build/dep_scanner.o build/rule_pattern.o build/gcc.o build/topo.o build/entry.o build/reader.o build/writer.o build/progress_display.o build/runner.o build/scheduler.o build/cmd_build.o build/cmd_clean.o build/cmd_configure.o build/cmd_show.o build/cmd_parse.o build/config_commands.o build/context.o build/multi_variant.o build/options.o build/output.o build/target.o build/process-posix.o build/file_io-posix.o build/env-posix.o build/path-posix.o build/main.o build/throw_stubs.o -o build/putup -nostdlib++ -Wl,--gc-sections )
(cd "." && ar rcs build/libputup.a build/sha256.o build/arena.o build/hash.o build/id_array.o build/id_bitset.o build/layout.o build/metrics.o build/path.o build/path_utils.o build/sorted_id_vec.o build/string_pool.o build/global_pool.o build/buf.o build/heap_buf.o build/string_utils.o build/terminal.o build/ast.o build/config.o build/depfile.o build/eval.o build/glob.o build/ignore.o build/lexer.o build/parser.o build/var_tracking.o build/builder.o build/dag.o build/dep_scanner.o build/rule_pattern.o build/gcc.o build/topo.o build/entry.o build/reader.o build/writer.o build/progress_display.o build/runner.o build/scheduler.o build/cmd_build.o build/cmd_clean.o build/cmd_configure.o build/cmd_show.o build/cmd_parse.o build/config_commands.o build/context.o build/multi_variant.o build/options.o build/output.o build/target.o build/process-posix.o build/file_io-posix.o build/env-posix.o build/path-posix.o)
(cd "." && g++ build/sha256.o build/arena.o build/hash.o build/id_array.o build/id_bitset.o build/layout.o build/metrics.o build/path.o build/path_utils.o build/sorted_id_vec.o build/string_pool.o build/global_pool.o build/buf.o build/heap_buf.o build/string_utils.o build/terminal.o build/ast.o build/config.o build/depfile.o build/eval.o build/glob.o build/ignore.o build/lexer.o build/parser.o build/var_tracking.o build/builder.o build/dag.o build/dep_scanner.o build/rule_pattern.o build/gcc.o build/topo.o build/entry.o build/reader.o build/writer.o build/progress_display.o build/runner.o build/scheduler.o build/cmd_build.o build/cmd_clean.o build/cmd_configure.o build/cmd_show.o build/cmd_parse.o build/strict_checks.o build/config_commands.o build/context.o build/multi_variant.o build/options.o build/output.o build/target.o build/process-posix.o build/file_io-posix.o build/env-posix.o build/path-posix.o build/main.o build/throw_stubs.o -o build/putup -nostdlib++ -Wl,--gc-sections )
(cd "." && ar rcs build/libputup.a build/sha256.o build/arena.o build/hash.o build/id_array.o build/id_bitset.o build/layout.o build/metrics.o build/path.o build/path_utils.o build/sorted_id_vec.o build/string_pool.o build/global_pool.o build/buf.o build/heap_buf.o build/string_utils.o build/terminal.o build/ast.o build/config.o build/depfile.o build/eval.o build/glob.o build/ignore.o build/lexer.o build/parser.o build/var_tracking.o build/builder.o build/dag.o build/dep_scanner.o build/rule_pattern.o build/gcc.o build/topo.o build/entry.o build/reader.o build/writer.o build/progress_display.o build/runner.o build/scheduler.o build/cmd_build.o build/cmd_clean.o build/cmd_configure.o build/cmd_show.o build/cmd_parse.o build/strict_checks.o build/config_commands.o build/context.o build/multi_variant.o build/options.o build/output.o build/target.o build/process-posix.o build/file_io-posix.o build/env-posix.o build/path-posix.o)
(cd "test/unit" && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I../../include -I../../third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c test_var_tracking.cpp -o ../../build/test/unit/test_var_tracking.o)
(cd "test/unit" && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I../../include -I../../third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c test_types.cpp -o ../../build/test/unit/test_types.o)
(cd "test/unit" && g++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I../../include -I../../third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c test_target.cpp -o ../../build/test/unit/test_target.o)
Expand Down
5 changes: 3 additions & 2 deletions bootstrap-macos.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ mkdir -p "build/test/unit"
(cd "." && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/context.cpp -o build/context.o)
(cd "." && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/config_commands.cpp -o build/config_commands.o)
(cd "." && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/cmd_parse.cpp -o build/cmd_parse.o)
(cd "." && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/strict_checks.cpp -o build/strict_checks.o)
(cd "." && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/cmd_show.cpp -o build/cmd_show.o)
(cd "." && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/cmd_configure.cpp -o build/cmd_configure.o)
(cd "." && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/cli/cmd_clean.cpp -o build/cmd_clean.o)
Expand Down Expand Up @@ -61,8 +62,8 @@ mkdir -p "build/test/unit"
(cd "." && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/core/hash.cpp -o build/hash.o)
(cd "." && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I./include -I./third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c src/core/arena.cpp -o build/arena.o)
(cd "." && clang -std=c11 -Wall -Wextra -Werror -fPIC -I./third_party -O2 -ffunction-sections -fdata-sections -Wno-error -c third_party/sha256/sha256.c -o build/sha256.o)
(cd "." && clang++ build/sha256.o build/arena.o build/hash.o build/id_array.o build/id_bitset.o build/layout.o build/metrics.o build/path.o build/path_utils.o build/sorted_id_vec.o build/string_pool.o build/global_pool.o build/buf.o build/heap_buf.o build/string_utils.o build/terminal.o build/ast.o build/config.o build/depfile.o build/eval.o build/glob.o build/ignore.o build/lexer.o build/parser.o build/var_tracking.o build/builder.o build/dag.o build/dep_scanner.o build/rule_pattern.o build/gcc.o build/topo.o build/entry.o build/reader.o build/writer.o build/progress_display.o build/runner.o build/scheduler.o build/cmd_build.o build/cmd_clean.o build/cmd_configure.o build/cmd_show.o build/cmd_parse.o build/config_commands.o build/context.o build/multi_variant.o build/options.o build/output.o build/target.o build/process-posix.o build/file_io-posix.o build/env-posix.o build/path-posix.o build/main.o build/throw_stubs.o -o build/putup -nostdlib++ -Wl,-dead_strip )
(cd "." && ar rcs build/libputup.a build/sha256.o build/arena.o build/hash.o build/id_array.o build/id_bitset.o build/layout.o build/metrics.o build/path.o build/path_utils.o build/sorted_id_vec.o build/string_pool.o build/global_pool.o build/buf.o build/heap_buf.o build/string_utils.o build/terminal.o build/ast.o build/config.o build/depfile.o build/eval.o build/glob.o build/ignore.o build/lexer.o build/parser.o build/var_tracking.o build/builder.o build/dag.o build/dep_scanner.o build/rule_pattern.o build/gcc.o build/topo.o build/entry.o build/reader.o build/writer.o build/progress_display.o build/runner.o build/scheduler.o build/cmd_build.o build/cmd_clean.o build/cmd_configure.o build/cmd_show.o build/cmd_parse.o build/config_commands.o build/context.o build/multi_variant.o build/options.o build/output.o build/target.o build/process-posix.o build/file_io-posix.o build/env-posix.o build/path-posix.o)
(cd "." && clang++ build/sha256.o build/arena.o build/hash.o build/id_array.o build/id_bitset.o build/layout.o build/metrics.o build/path.o build/path_utils.o build/sorted_id_vec.o build/string_pool.o build/global_pool.o build/buf.o build/heap_buf.o build/string_utils.o build/terminal.o build/ast.o build/config.o build/depfile.o build/eval.o build/glob.o build/ignore.o build/lexer.o build/parser.o build/var_tracking.o build/builder.o build/dag.o build/dep_scanner.o build/rule_pattern.o build/gcc.o build/topo.o build/entry.o build/reader.o build/writer.o build/progress_display.o build/runner.o build/scheduler.o build/cmd_build.o build/cmd_clean.o build/cmd_configure.o build/cmd_show.o build/cmd_parse.o build/strict_checks.o build/config_commands.o build/context.o build/multi_variant.o build/options.o build/output.o build/target.o build/process-posix.o build/file_io-posix.o build/env-posix.o build/path-posix.o build/main.o build/throw_stubs.o -o build/putup -nostdlib++ -Wl,-dead_strip )
(cd "." && ar rcs build/libputup.a build/sha256.o build/arena.o build/hash.o build/id_array.o build/id_bitset.o build/layout.o build/metrics.o build/path.o build/path_utils.o build/sorted_id_vec.o build/string_pool.o build/global_pool.o build/buf.o build/heap_buf.o build/string_utils.o build/terminal.o build/ast.o build/config.o build/depfile.o build/eval.o build/glob.o build/ignore.o build/lexer.o build/parser.o build/var_tracking.o build/builder.o build/dag.o build/dep_scanner.o build/rule_pattern.o build/gcc.o build/topo.o build/entry.o build/reader.o build/writer.o build/progress_display.o build/runner.o build/scheduler.o build/cmd_build.o build/cmd_clean.o build/cmd_configure.o build/cmd_show.o build/cmd_parse.o build/strict_checks.o build/config_commands.o build/context.o build/multi_variant.o build/options.o build/output.o build/target.o build/process-posix.o build/file_io-posix.o build/env-posix.o build/path-posix.o)
(cd "test/unit" && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I../../include -I../../third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c test_var_tracking.cpp -o ../../build/test/unit/test_var_tracking.o)
(cd "test/unit" && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I../../include -I../../third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c test_types.cpp -o ../../build/test/unit/test_types.o)
(cd "test/unit" && clang++ -std=c++20 -Wall -Wextra -Werror -Wpedantic -fPIC -fno-exceptions -fno-rtti -I../../include -I../../third_party -O2 -DNDEBUG -ffunction-sections -fdata-sections -c test_target.cpp -o ../../build/test/unit/test_target.o)
Expand Down
Loading
Loading