@@ -57,8 +57,11 @@ nam_add_channel_target(
5757- ` REPO = Devsh-Graphics-Programming/Nabla-Asset-Manifests `
5858- ` TAG = media `
5959- ` DESTINATION_ROOT = ${CMAKE_CURRENT_BINARY_DIR} `
60+ - ` ITEMS = <all asset keys in CHANNEL> `
6061- ` CACHE_ROOT = <ENTRY>/nabla/assets `
6162- ` SHOW_PROGRESS = ON `
63+ - ` NO_SYMLINKS = OFF `
64+ - ` VERBOSE = OFF `
6265
6366` <ENTRY> ` resolves per platform:
6467
@@ -105,12 +108,17 @@ The resulting model is:
105108
106109- one shared local object store per user
107110- content-addressed objects under ` .../objects/SHA256/<hash> `
108- - generated content links under ` nam-data/<target>/ ` in the consumer source tree
111+ - generated ` .sha256 ` references under ` <channel>/... ` in the consumer source tree
112+ - intermediate ` ExternalData ` build outputs under ` ${CMAKE_CURRENT_BINARY_DIR}/.nam/<target>/assets `
109113- normal build targets for consumers
110114
111115During configure the module probes the current host once and selects the
112- lightest supported file materialization mode. On the current Windows host this
113- resolves to ` hardlink ` .
116+ lightest supported file materialization mode.
117+
118+ Current detection order is:
119+
120+ - Windows: ` hardlink ` , then ` symlink ` , then ` copy `
121+ - non-Windows: ` symlink ` , then ` hardlink ` , then ` copy `
114122
115123At build time:
116124
@@ -128,6 +136,66 @@ By default the module prints only:
128136- one short configure summary
129137- the normal build-time ` ExternalData ` output
130138
139+ ## Smoke consumer
140+
141+ The repository also includes a minimal smoke consumer under ` smoke/ ` .
142+
143+ Its local options are:
144+
145+ - ` NAM_SMOKE_LINK_MODE = auto|symlink|hardlink|copy `
146+ - ` NAM_SMOKE_CACHE_ROOT = <path> `
147+ - ` NAM_SMOKE_NO_SYMLINKS = ON|OFF `
148+
149+ Those options are for smoke verification only. They are not part of the public
150+ consumer module API.
151+
152+ The GitHub Actions workflow under ` .github/workflows/smoke.yml ` uses that smoke
153+ consumer to verify:
154+
155+ - Windows and Linux runners
156+ - explicit ` symlink ` , ` hardlink ` , and ` copy ` modes
157+ - shared cache reuse via ` ${{ github.workspace }}/.nam-cache `
158+ - post-build size and materialization statistics
159+
160+ Typical local smoke runs are:
161+
162+ ``` powershell
163+ cmake -S smoke -B smoke/build
164+ cmake --build smoke/build --config Debug --target media -- /m:1
165+ ```
166+
167+ ``` bash
168+ cmake -S smoke -B smoke/build
169+ cmake --build smoke/build --target media -- -j1
170+ ```
171+
172+ Forced copy mode:
173+
174+ ``` powershell
175+ cmake -S smoke -B smoke/build -DNAM_SMOKE_NO_SYMLINKS=ON
176+ cmake --build smoke/build --config Debug --target media -- /m:1
177+ ```
178+
179+ ``` bash
180+ cmake -S smoke -B smoke/build -DNAM_SMOKE_NO_SYMLINKS=ON
181+ cmake --build smoke/build --target media -- -j1
182+ ```
183+
184+ Explicit smoke-only mode overrides:
185+
186+ ``` powershell
187+ cmake -S smoke -B smoke/build -DNAM_SMOKE_LINK_MODE=symlink
188+ cmake -S smoke -B smoke/build -DNAM_SMOKE_LINK_MODE=hardlink
189+ cmake -S smoke -B smoke/build -DNAM_SMOKE_LINK_MODE=copy
190+ ```
191+
192+ The smoke verification script then reports:
193+
194+ - per-tree materialization counts
195+ - logical size of the materialized tree
196+ - estimated extra disk cost of the chosen mode
197+ - explicit sample checks for ` Stanford_Bunny.stl ` and ` yellowflower.zip `
198+
131199## Maintainer flow
132200
133201Maintainers do not maintain a separate consumer catalog.
0 commit comments