Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
80c62c3
Eliminate std::regex and std::sstream from production code
typeless Mar 16, 2026
41f4e1c
Add pup::path namespace for string-based path operations
typeless Mar 16, 2026
a87e163
Eliminate std::filesystem from production code
typeless Mar 16, 2026
1d91b76
Fix Phase 1 review issues: normalize bug, dedup, fstream removal
typeless Mar 16, 2026
d9a1e7f
Eliminate <fstream> and <random>, unify StringHash
typeless Mar 16, 2026
258f042
Fix Win32 UTF-8 conversion in hash.cpp, add EINTR handling
typeless Mar 16, 2026
f8c6ef3
docs: add custom containers design spec (Phase 4)
typeless Mar 16, 2026
3639de2
docs: add custom containers implementation plan
typeless Mar 16, 2026
063ee9a
Add IdBitSet primitive for dense ID set membership
typeless Mar 16, 2026
b488f71
Add IdArray32/IdArray64 for dense ID-indexed storage
typeless Mar 16, 2026
a577cdf
Add Arena32 for append-only variable-length integer lists
typeless Mar 16, 2026
41ba808
Add SortedIdVec and SortedPairVec for small sorted integer sets
typeless Mar 16, 2026
2ce0933
Remove spurious Tupfile.ini from worktree
typeless Mar 16, 2026
c7689c9
Replace StringPool unordered_map with Robin Hood index
typeless Mar 16, 2026
0557c97
Add NodeIdMap32/64 wrapper dispatching by node type flags
typeless Mar 16, 2026
ab048a2
Migrate graph edge indices to NodeIdMap64 + Arena32
typeless Mar 16, 2026
38e1ff4
Revert "Migrate graph edge indices to NodeIdMap64 + Arena32"
typeless Mar 16, 2026
2365d0b
Add slice(), at(), null-safe append() to Arena32
typeless Mar 16, 2026
e29296f
Remove IdArray64 and NodeIdMap64 — all keys and values are 32-bit
typeless Mar 16, 2026
dbae933
Fix review issues: OOM abort, Arena32 safety, test coverage
typeless Mar 16, 2026
74c6b44
Migrate graph edge indices to NodeIdArenaIndex + Arena32
typeless Mar 16, 2026
a384224
NodeIdArenaIndex: make class, add unit tests, document invariant
typeless Mar 16, 2026
e5d82bb
Migrate topo.cpp from unordered_map/set to NodeIdMap32
typeless Mar 16, 2026
f0032d4
Review cleanup: Color constants, duplicate include, edges assert
typeless Mar 16, 2026
c959bf0
Migrate VarDb from unordered_map to sorted vector
typeless Mar 16, 2026
45877a6
Migrate local NodeId sets in CLI/scheduler/builder to NodeIdMap32
typeless Mar 16, 2026
528714e
Fix include ordering: group node_id_map.hpp with project headers
typeless Mar 16, 2026
b5a0fa1
Migrate scheduler cmd_to_job from unordered_map to NodeIdMap32
typeless Mar 16, 2026
1f60783
Fix triple-lookup pattern in scheduler cmd_to_job
typeless Mar 16, 2026
62c0392
Migrate set<NodeId> API boundaries to NodeIdMap32
typeless Mar 16, 2026
df674b5
Migrate output_dirs from set<string> to vector<string>
typeless Mar 16, 2026
c8fd49c
Add NodeIdMap32::remove(), fix dead includes, simplify workarounds
typeless Mar 16, 2026
a77da0f
Migrate BuilderState string-keyed maps to interned StringId handles
typeless Mar 16, 2026
1a7d2aa
Replace DirNameKey hash map and PathCache with custom primitives
typeless Mar 17, 2026
67c61f7
Migrate CommandNode::exported_vars from set<StringId> to SortedIdVec
typeless Mar 17, 2026
21c6692
Replace command_str_index hash map with StringPool + SortedPairVec
typeless Mar 17, 2026
4db11c3
Migrate BuildJob::exported_vars from set<string> to vector<string>
typeless Mar 17, 2026
c4fd3d1
Move execute_sequential/execute_job into Scheduler::Impl
typeless Mar 17, 2026
4f38340
Replace Index class unordered_maps with Arena32 + SortedPairVec
typeless Mar 17, 2026
20e22c4
Migrate directory tracking from set<string> to sorted vector<string>
typeless Mar 17, 2026
901bb39
Migrate deferred_edges from set to sorted vector
typeless Mar 17, 2026
893926d
Migrate cached_env_vars from unordered_map to sorted vector
typeless Mar 17, 2026
6d8bd77
Migrate macros from unordered_map to interned sorted vector
typeless Mar 17, 2026
b840249
Migrate groups from unordered_map to SortedPairVec + pool
typeless Mar 17, 2026
4de3665
Apply clang-format to builder.hpp and builder.cpp
typeless Mar 17, 2026
014307a
Add explicit <unordered_map> include to builder.cpp
typeless Mar 17, 2026
2ffa04a
Extract GroupMemberTable to encapsulate group name→members mapping
typeless Mar 17, 2026
accaf5e
Replace rule_order_only_groups map with sorted name vector
typeless Mar 17, 2026
bec7ea5
Replace accumulated map with sorted vector in deferred edge resolution
typeless Mar 17, 2026
fcb82b8
Extract sorted_insert helper for rule_order_only_group_names
typeless Mar 17, 2026
c1f35e2
Apply clang-format to all source files
typeless Mar 17, 2026
0a43932
Fix CI build failures across all platforms
typeless Mar 17, 2026
0d87f57
Fix Windows build: replace .wstring() with MultiByteToWideChar
typeless Mar 17, 2026
a946fd3
Fix Windows test build: convert fs::path to string in test_target
typeless Mar 17, 2026
4c04b7d
Fix Windows test: convert fs::path to string for working_dir
typeless Mar 17, 2026
79357e8
Fix Windows test builds: fs::path to string conversions
typeless Mar 17, 2026
6012677
Fix remaining Windows test builds: fs::path to string conversions
typeless Mar 17, 2026
c075b22
Fix Windows test builds: fs::path to string in test_layout, test_builder
typeless Mar 17, 2026
9ad4b8a
Fix test_ignore Windows build: add .string() to IgnoreList::load calls
typeless Mar 17, 2026
904c693
Fix e2e_fixture Windows build: fs::path to string for working_dir
typeless Mar 17, 2026
b3a53b3
Tag file_io tests using E2EFixture with [e2e]
typeless Mar 17, 2026
fd5df58
Tag layout tests with [e2e] for Windows CI exclusion
typeless Mar 17, 2026
ab546fe
Tag filesystem-dependent tests with [e2e] for Windows CI
typeless Mar 17, 2026
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
1 change: 1 addition & 0 deletions .pupignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ test/e2e/fixtures/

# Example projects - require external dependencies
examples/
.claude/
8 changes: 1 addition & 7 deletions COMPATIBILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -205,13 +205,7 @@ Features in putup that extend beyond tup:

**Affected**: MSVC 19.38+ (Visual Studio 2022 17.8) with `/Zc:nrvo /std:c++20 /O2`

`Graph::make_graph()` returns a `Graph` by value. The `Graph` owns a `StringPool` and an `unordered_map` whose hash/equal functors hold a `StringPool*` pointing into the same object. Under NRVO the returned object is constructed directly in the caller's storage, so the pointers remain valid.

MSVC does not apply NRVO here. It constructs the `Graph` locally, then move-constructs into the caller. After the move, `StringPool` lives at a new address but `DirNameKeyHash`/`DirNameKeyEqual` still hold the old pointer — any subsequent map lookup dereferences freed memory.

The MS docs list only two NRVO exclusions (multiple return variables, `throw` in scope), neither of which applies. This appears to be an undocumented limitation triggered when a function re-assigns an `unordered_map` member whose hash/equal functors contain pointers to the local object's own fields.

**Status**: MSVC CI jobs are disabled. MinGW (GCC on Windows) is unaffected and remains in CI.
**Status**: Fixed. The root cause was `DirNameKeyHash`/`DirNameKeyEqual` functors holding raw `StringPool*` pointers into the same `Graph` object. When MSVC failed to apply NRVO on `make_graph()`, the move left dangling pointers. The `DirNameKey` hash map has been replaced with `std::vector<SortedPairVec> dir_children` (per-directory sorted arrays), eliminating the pointer coupling entirely. MSVC CI jobs remain disabled for other reasons (MinGW/GCC is the Windows CI target).

## Reporting Issues

Expand Down
16 changes: 10 additions & 6 deletions DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ struct CommandNode {
StringId instruction_id = StringId::Empty; // Instruction pattern (e.g., "gcc -c %f -o %o")
std::vector<NodeId> inputs = {}; // Operand file NodeIds for %f expansion
std::vector<NodeId> outputs = {}; // Operand file NodeIds for %o expansion
std::set<StringId> exported_vars = {}; // Env vars to export (interned)
SortedIdVec exported_vars = {}; // Env vars to export (interned StringIds)
std::optional<GeneratedOutput> generated_output = {}; // Output specification
OutputAction output_action = {}; // What to do with output
NodeId parent_command = INVALID_NODE_ID; // Parent command for InjectImplicitDeps
Expand Down Expand Up @@ -546,9 +546,10 @@ struct Graph {
std::unordered_map<NodeId, std::vector<NodeId>> order_only_to_index;
std::unordered_map<NodeId, std::vector<NodeId>> order_only_dependents;

// Node lookup indices (with transparent lookup support)
std::unordered_map<DirNameKey, NodeId, ...> dir_name_index; // (parent, name) -> NodeId
std::unordered_map<std::string, NodeId, ...> command_str_index; // command -> NodeId
// Node lookup indices
std::vector<SortedPairVec> dir_children; // Per-directory name -> NodeId (indexed by parent dir)
StringPool command_strings; // Interned expanded command strings
SortedPairVec command_index; // StringId(command) -> NodeId

// ID generators (next available ID for each type)
NodeId next_file_id = 2; // Starts at 2 (BUILD_ROOT is 1)
Expand All @@ -558,7 +559,10 @@ struct Graph {
};

// Path cache is stored externally in BuildGraph for const-correctness
using PathCache = std::unordered_map<NodeId, std::string>;
struct PathCache {
NodeIdMap32 ids; // NodeId -> StringId (path interned in pool)
StringPool pool; // Owns the full path strings
};

class BuildGraph {
Graph graph_;
Expand Down Expand Up @@ -999,7 +1003,7 @@ struct BuildJob {
std::vector<std::string> inputs = {};
std::vector<std::string> outputs = {};
std::vector<std::string> order_only_inputs = {}; // Order-only dependencies
std::set<std::string> exported_vars = {}; // Env vars to export to command
std::vector<std::string> exported_vars = {}; // Env vars to export to command

// For auto-generated rules (from pattern matching)
bool capture_stdout = false; // Capture stdout for depfile parsing
Expand Down
7 changes: 6 additions & 1 deletion Tupfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@ include_rules
c-srcs-y = third_party/sha256/sha256.c

# Core
srcs-y = src/core/hash.cpp
srcs-y = src/core/arena.cpp
srcs-y += src/core/hash.cpp
srcs-y += src/core/id_array.cpp
srcs-y += src/core/id_bitset.cpp
srcs-y += src/core/layout.cpp
srcs-y += src/core/metrics.cpp
srcs-y += src/core/path.cpp
srcs-y += src/core/path_utils.cpp
srcs-y += src/core/sorted_id_vec.cpp
srcs-y += src/core/string_pool.cpp
srcs-y += src/core/string_utils.cpp
srcs-y += src/core/terminal.cpp
Expand Down
18 changes: 15 additions & 3 deletions bootstrap-linux.sh
Original file line number Diff line number Diff line change
Expand Up @@ -47,28 +47,40 @@ 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/terminal.cpp -o build/terminal.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/string_utils.cpp -o build/string_utils.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/string_pool.cpp -o build/string_pool.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/sorted_id_vec.cpp -o build/sorted_id_vec.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/path_utils.cpp -o build/path_utils.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/path.cpp -o build/path.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/metrics.cpp -o build/metrics.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/layout.cpp -o build/layout.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/id_bitset.cpp -o build/id_bitset.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/id_array.cpp -o build/id_array.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/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/hash.o build/layout.o build/metrics.o build/path_utils.o build/string_pool.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 -o build/putup -Wl,--gc-sections )
(cd "." && ar rcs build/libputup.a build/sha256.o build/hash.o build/layout.o build/metrics.o build/path_utils.o build/string_pool.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/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 -o build/putup -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/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 "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)
(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_string_utils.cpp -o ../../build/test/unit/test_string_utils.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_string_pool.cpp -o ../../build/test/unit/test_string_pool.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_sorted_id_vec.cpp -o ../../build/test/unit/test_sorted_id_vec.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_rule_pattern.cpp -o ../../build/test/unit/test_rule_pattern.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_platform_process.cpp -o ../../build/test/unit/test_platform_process.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_platform_file_io.cpp -o ../../build/test/unit/test_platform_file_io.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_path_utils.cpp -o ../../build/test/unit/test_path_utils.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_path.cpp -o ../../build/test/unit/test_path.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_parser.cpp -o ../../build/test/unit/test_parser.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_node_id_map.cpp -o ../../build/test/unit/test_node_id_map.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_main.cpp -o ../../build/test/unit/test_main.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_lexer.cpp -o ../../build/test/unit/test_lexer.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_layout.cpp -o ../../build/test/unit/test_layout.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_index.cpp -o ../../build/test/unit/test_index.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_ignore.cpp -o ../../build/test/unit/test_ignore.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_id_bitset.cpp -o ../../build/test/unit/test_id_bitset.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_id_array.cpp -o ../../build/test/unit/test_id_array.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_hash.cpp -o ../../build/test/unit/test_hash.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_arena.cpp -o ../../build/test/unit/test_arena.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_graph.cpp -o ../../build/test/unit/test_graph.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_glob.cpp -o ../../build/test/unit/test_glob.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_exec.cpp -o ../../build/test/unit/test_exec.o)
Expand All @@ -80,4 +92,4 @@ mkdir -p "build/test/unit"
(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_bench.cpp -o ../../build/test/unit/test_bench.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 e2e_fixture.cpp -o ../../build/test/unit/e2e_fixture.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 -Wno-error -c ../../third_party/catch_amalgamated.cpp -o ../../build/test/unit/catch_amalgamated.o)
(cd "test/unit" && g++ ../../build/test/unit/test_bench.o ../../build/test/unit/test_builder.o ../../build/test/unit/test_dep_scanner.o ../../build/test/unit/test_depfile.o ../../build/test/unit/test_e2e.o ../../build/test/unit/test_eval.o ../../build/test/unit/test_exec.o ../../build/test/unit/test_glob.o ../../build/test/unit/test_graph.o ../../build/test/unit/test_hash.o ../../build/test/unit/test_ignore.o ../../build/test/unit/test_index.o ../../build/test/unit/test_layout.o ../../build/test/unit/test_lexer.o ../../build/test/unit/test_main.o ../../build/test/unit/test_parser.o ../../build/test/unit/test_path_utils.o ../../build/test/unit/test_platform_file_io.o ../../build/test/unit/test_platform_process.o ../../build/test/unit/test_rule_pattern.o ../../build/test/unit/test_string_utils.o ../../build/test/unit/test_target.o ../../build/test/unit/test_types.o ../../build/test/unit/test_var_tracking.o ../../build/test/unit/catch_amalgamated.o ../../build/test/unit/e2e_fixture.o ../../build/libputup.a -o ../../build/test/unit/putup_test -Wl,--gc-sections )
(cd "test/unit" && g++ ../../build/test/unit/test_bench.o ../../build/test/unit/test_builder.o ../../build/test/unit/test_dep_scanner.o ../../build/test/unit/test_depfile.o ../../build/test/unit/test_e2e.o ../../build/test/unit/test_eval.o ../../build/test/unit/test_exec.o ../../build/test/unit/test_glob.o ../../build/test/unit/test_graph.o ../../build/test/unit/test_arena.o ../../build/test/unit/test_hash.o ../../build/test/unit/test_id_array.o ../../build/test/unit/test_id_bitset.o ../../build/test/unit/test_ignore.o ../../build/test/unit/test_index.o ../../build/test/unit/test_layout.o ../../build/test/unit/test_lexer.o ../../build/test/unit/test_main.o ../../build/test/unit/test_node_id_map.o ../../build/test/unit/test_parser.o ../../build/test/unit/test_path.o ../../build/test/unit/test_path_utils.o ../../build/test/unit/test_platform_file_io.o ../../build/test/unit/test_platform_process.o ../../build/test/unit/test_rule_pattern.o ../../build/test/unit/test_sorted_id_vec.o ../../build/test/unit/test_string_pool.o ../../build/test/unit/test_string_utils.o ../../build/test/unit/test_target.o ../../build/test/unit/test_types.o ../../build/test/unit/test_var_tracking.o ../../build/test/unit/catch_amalgamated.o ../../build/test/unit/e2e_fixture.o ../../build/libputup.a -o ../../build/test/unit/putup_test -Wl,--gc-sections )
Loading
Loading