Commit Graph
37 Commits
Author SHA1 Message Date
sneeker 4847e73434 feat(examples): add the image buffer and a PPM writer
RGB framebuffer with tone mapping, and PPM output for the path where zlib is
unavailable.
2022-07-04 09:14:34 +00:00
sneeker 23f8288a52 feat(examples): add shading, the threaded render loop and two scenes
Lambertian and metal shading with recursive bounces, a row-claiming loop
across worker threads, and the studio and rings scene files.
2022-07-02 12:49:50 +00:00
sneeker 3da0447ea6 feat(examples): add the scene representation, camera and intersection
Sphere and plane records, camera ray generation from field of view and aspect
ratio, and the nearest-hit search across the scene.
2022-07-02 02:41:00 +00:00
sneeker d1c5055303 feat(examples): add vector maths and an xorshift RNG
vec3 operations and a per-thread random stream, the leaf library everything
else in the example depends on.
2022-06-30 11:37:33 +00:00
sneeker 7c7557fed1 feat(examples): add the raytracer build file and core header
Nine targets: two translation units generated from scene files, a C++
consumer, a shared object built from the same sources as the archives, and an
optional zlib dependency.
2022-06-30 00:29:57 +00:00
sneeker c46a0bb314 feat(examples): extend hello with a second translation unit and a test
Gives the archive more than one member and gives meowc test something to run.
2022-06-28 01:49:34 +00:00
sneeker 776f5315d4 feat(examples): add a hello project with a library and a consumer
Smallest project that exercises the whole pipeline: one static library and one
executable that links against it.
2022-06-26 15:32:31 +00:00
sneeker f751ccbde9 feat(cli): add argument parsing and command dispatch
Handles attached flag forms such as -j4 and -Dname=value, dispatches the
subcommands, and prints one aligned line per completed action with a summary.
2022-06-25 17:08:00 +00:00
sneeker 74f060f72f feat(scaffold): generate a project that builds and tests unmodified
Writes a build file, a library, a binary and a test, wired so build and test
both pass immediately after init.
2022-06-25 01:39:44 +00:00
sneeker 7a539310df feat(watch): rebuild when a tracked input changes
Snapshots the modification times of every graph input and re-runs the
scheduler on change.
2022-06-23 12:20:02 +00:00
sneeker ae90a67042 feat(testrun): build and run test targets, reporting pass or fail
Runs each test binary, captures its exit status, and reports per-test timing
alongside an aggregate line.
2022-06-23 03:23:45 +00:00
sneeker 80576e75f7 feat(install): copy installable outputs under a prefix
Destinations come from each target's install field, the executable bit is
preserved, and a dry run prints the plan without touching anything.
2022-06-21 02:23:23 +00:00
sneeker c4f033ee38 feat(dot): emit Graphviz source for the action graph
Nodes coloured by action kind, with a targets-only mode for graphs too large
to read in full.
2022-06-19 01:08:42 +00:00
sneeker d4e210f33c feat(compdb): write compile_commands.json for clangd
One entry per translation unit with directory, arguments and file, taken from
the compile actions already in the graph.
2022-06-17 19:15:48 +00:00
sneeker 720efd5c74 feat(sched): dispatch ready actions under a job limit
Checks each node's key at the moment it becomes ready rather than up front,
because an input may have been produced by a node that ran seconds earlier.
This is what gives early cutoff.
2022-06-15 20:17:47 +00:00
sneeker 34ddbac28b feat(build): lower resolved targets into graph actions
Emits compile, archive, shared-link and link actions per target, and applies
-fPIC to anything reachable from a shared target.
2022-06-13 08:04:17 +00:00
sneeker b701d27c7d feat(dep): source header edges from compiler depfiles
Parses -MMD -MF output, unfolding line continuations, so the include set comes
from the compiler rather than from hand-maintained declarations.
2022-06-12 22:24:06 +00:00
sneeker a4abbbdc3c feat(cache): key actions on content, argv and the real input set
Digests every input plus the exact argument vector into one key, persisted
under the build directory. Staleness becomes a content question rather than a
timestamp comparison.
2022-06-12 01:49:31 +00:00
sneeker 0ad5138b52 feat(graph): derive edges from which node produces which file
Indexes producers by output path, so a generator and the compile consuming its
output are connected without being declared. Detects duplicate producers and
reports dependency cycles by path.
2022-06-09 14:01:08 +00:00
sneeker ac9d0232f4 feat(resolve): lower surviving blocks into targets and rule instances
Expands globs, resolves use edges between targets, propagates inherited
includes, and instantiates a rule once per matched input.
2022-06-08 10:43:20 +00:00
sneeker bb5f1f1509 feat(eval): evaluate statements in written order
Expands variables top to bottom, runs checks as they are reached and evaluates
conditionals against results already established. Written order is the
semantics, not an implementation detail.
2022-06-06 11:35:41 +00:00
sneeker 9537254533 feat(configh): generate a guarded C header from probe results
Emits the project name and the HAVE_ and SIZEOF_ defines from what the probes
actually found, behind an include guard derived from the output path.
2022-06-05 22:51:52 +00:00
sneeker 3e7afc520e feat(probe): detect headers, functions, symbols, sizeof and pkg-config
Compiles and links throwaway programs to answer each check, and shells out to
pkg-config for cflags and libs. Results are memoised on the toolchain.
2022-06-03 09:35:23 +00:00
sneeker 78adab8c49 feat(exec): spawn subprocesses and capture stdout and status
Argv-vector execution with no shell in the path, so arguments containing
spaces or quotes need no escaping.
2022-06-01 08:37:55 +00:00
sneeker 38759f5e61 feat(parse): parse the grammar with recursive descent
Turns tokens into the AST, and consults suggest at each failure point so an
unknown declaration or field offers the nearest valid name.
2022-05-30 01:11:45 +00:00
sneeker a629b2a967 feat(ast): model statements, blocks and nested conditionals
Keeps written order, so a later branch can observe the result of a check that
appeared earlier in the file.
2022-05-29 08:59:55 +00:00
sneeker 4d26b548ba feat(lexer): tokenise build files with a span on every token
Words, strings, braces and comments, each carrying its source range, so an
error points at the offending token rather than the whole line.
2022-05-27 13:59:46 +00:00
sneeker 53ac3ffb4c feat(types): define resolved project, target and rule records
Targets carry sources, includes, flags and uses; rule instances carry resolved
inputs and outputs. This is the shape every later stage consumes.
2022-05-26 00:17:18 +00:00
sneeker c490488423 feat(suggest): rank near-miss names by edit distance
Levenshtein with a cutoff, returning the closest valid name at a position, or
nothing when no candidate is close enough.
2022-05-25 15:17:54 +00:00
sneeker b48cd708a4 feat(json): emit JSON with correct control-character escaping
So generated output survives paths containing spaces, quotes or backslashes.
2022-05-23 21:14:56 +00:00
sneeker 598ccfd4c0 feat(glob): expand source patterns without shelling out
Matches *, ? and ** against directory entries directly, so src/**/*.c
resolves identically regardless of the shell.
2022-05-21 21:37:43 +00:00
sneeker dfa033fea4 feat(fs): add recursive mkdir, whole-file IO and mtime reads
Path joining, read, write, is_dir and mtime, used by every later stage that
touches disk.
2022-05-21 12:14:44 +00:00
sneeker 79ed836641 feat(ident): normalise names into C macro identifiers
Uppercases, replaces non-alphanumerics with underscores, and derives the
HAVE_X and SIZEOF_X forms the generated header uses.
2022-05-20 03:45:44 +00:00
sneeker c42ff512d1 feat(diag): render errors with a caret and the offending line
Formats file:line:col, re-reads the source to print the line, underlines the
span and leaves a slot for a suggestion.
2022-05-18 08:54:32 +00:00
sneeker 71a8aaa436 feat(style): gate ANSI colour on tty detection
One wrapper per colour plus a padding helper, all no-ops when stdout is not a
terminal, so piped output and CI logs stay readable.
2022-05-17 19:36:28 +00:00
sneeker 58f5aa0f98 feat(span): track byte ranges so errors can point into source
Span.t carries file, offset and length, with join to merge two spans and a
none sentinel for synthesised nodes. Every token and node gets one.
2022-05-17 08:50:46 +00:00
sneeker d407f9eb45 build: add dune project skeleton and library stanza
The meow library against unix, plus ignore rules for _build, generated
sources and the meowc symlink.
2022-05-16 09:42:00 +00:00