@typecad/cuttlefish 1.0.0-alpha.14 → 1.0.0-alpha.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/README.md +82 -79
  2. package/assets/editor-extensions/typecad-debug/README.md +25 -26
  3. package/dist/api/config.d.ts +22 -26
  4. package/dist/api/schema/types.d.ts +20 -3
  5. package/dist/api/shared/async-runtime-static.d.ts +1 -1
  6. package/dist/api/shared/async-runtime-static.js +5 -5
  7. package/dist/api/shared/async-types.d.ts +3 -2
  8. package/dist/api/shared/board-catalog.d.ts +2 -0
  9. package/dist/api/shared/board-catalog.js +6 -0
  10. package/dist/api/shared/board-resolver.d.ts +4 -7
  11. package/dist/api/shared/board-resolver.js +2 -1
  12. package/dist/api/shared/coop-scheduler.d.ts +1 -1
  13. package/dist/api/shared/coop-scheduler.js +1 -1
  14. package/dist/api/shared/cpp-type-ir.d.ts +1 -1
  15. package/dist/api/shared/cpp-type-ir.js +1 -1
  16. package/dist/api/shared/display-profile.d.ts +1 -1
  17. package/dist/api/shared/display-profile.js +3 -5
  18. package/dist/api/shared/framework-manifest-registry.d.ts +1 -1
  19. package/dist/api/shared/framework-manifest-registry.js +0 -1
  20. package/dist/api/shared/framework-manifest.d.ts +7 -6
  21. package/dist/api/shared/framework-manifest.js +6 -11
  22. package/dist/api/shared/hal-op-ir.d.ts +294 -685
  23. package/dist/api/shared/hal-op-ir.js +31 -65
  24. package/dist/api/shared/index.d.ts +0 -4
  25. package/dist/api/shared/index.js +1 -7
  26. package/dist/api/shared/ir-core.d.ts +6 -0
  27. package/dist/api/shared/ir-declarations.d.ts +4 -0
  28. package/dist/api/shared/ir.d.ts +1 -3
  29. package/dist/api/shared/platform-strategy.d.ts +14 -37
  30. package/dist/api/shared/polyfill-helper-registry.js +0 -5
  31. package/dist/api/shared/polyfill-types.js +0 -27
  32. package/dist/api/shared/promise-runtime.js +3 -3
  33. package/dist/api/shared/spdx-licenses.d.ts +12 -10
  34. package/dist/api/shared/spdx-licenses.js +1 -1
  35. package/dist/api/shared/toolchain-types.d.ts +1 -1
  36. package/dist/api/shared/toolchain-types.js +3 -3
  37. package/dist/api/shared/types.d.ts +0 -3
  38. package/dist/api/shared/validate-framework-manifest.js +13 -33
  39. package/dist/board-catalog/dts-reader.d.ts +220 -0
  40. package/dist/board-catalog/dts-reader.js +1052 -0
  41. package/dist/board-catalog/index.d.ts +11 -0
  42. package/dist/board-catalog/index.js +12 -0
  43. package/dist/board-catalog/pinconfig.d.ts +48 -0
  44. package/dist/board-catalog/pinconfig.js +263 -0
  45. package/dist/board-catalog/sdk.d.ts +82 -0
  46. package/dist/board-catalog/sdk.js +180 -0
  47. package/dist/board-catalog/store.d.ts +196 -0
  48. package/dist/board-catalog/store.js +363 -0
  49. package/dist/board-catalog/types.d.ts +233 -0
  50. package/dist/board-catalog/types.js +7 -0
  51. package/dist/board-catalog/walker.d.ts +112 -0
  52. package/dist/board-catalog/walker.js +1101 -0
  53. package/dist/cli-utils.d.ts +2 -2
  54. package/dist/cli-utils.js +5 -5
  55. package/dist/cli.js +219 -242
  56. package/dist/config-loader.d.ts +14 -19
  57. package/dist/config-loader.js +240 -78
  58. package/dist/config-schema.d.ts +3 -5
  59. package/dist/config-schema.js +8 -8
  60. package/dist/contract/board-generator.d.ts +4 -4
  61. package/dist/contract/board-generator.js +16 -5
  62. package/dist/contract/contract-parser.d.ts +27 -0
  63. package/dist/contract/contract-parser.js +76 -0
  64. package/dist/contract/index.d.ts +1 -1
  65. package/dist/contract/index.js +70 -21
  66. package/dist/create/active-board-catalog.d.ts +9 -0
  67. package/dist/create/active-board-catalog.js +94 -0
  68. package/dist/create/board-catalog.generated.d.ts +96 -0
  69. package/dist/create/board-catalog.generated.js +128737 -0
  70. package/dist/create/board-search.d.ts +23 -0
  71. package/dist/create/board-search.js +88 -0
  72. package/dist/create/editor-integration.d.ts +4 -2
  73. package/dist/create/editor-integration.js +41 -2
  74. package/dist/create/framework-catalog.d.ts +57 -9
  75. package/dist/create/framework-catalog.js +76 -57
  76. package/dist/create/index.d.ts +5 -11
  77. package/dist/create/index.js +3 -8
  78. package/dist/create/mcu-target.d.ts +39 -0
  79. package/dist/create/mcu-target.js +80 -0
  80. package/dist/create/pack-targets.d.ts +19 -0
  81. package/dist/create/pack-targets.js +56 -0
  82. package/dist/create/scaffold.d.ts +4 -7
  83. package/dist/create/scaffold.js +19 -109
  84. package/dist/create/templates.d.ts +32 -5
  85. package/dist/create/templates.js +130 -116
  86. package/dist/create/wizard.d.ts +12 -1
  87. package/dist/create/wizard.js +168 -38
  88. package/dist/debug/preprocessor.d.ts +5 -0
  89. package/dist/debug/preprocessor.js +31 -7
  90. package/dist/diagnostics/diagnostics-report.d.ts +1 -1
  91. package/dist/diagnostics/diagnostics-report.js +3 -11
  92. package/dist/diagnostics/json-schema.d.ts +1 -1
  93. package/dist/diagnostics/md-writer.js +2 -2
  94. package/dist/diagnostics/mermaid-builder.d.ts +1 -1
  95. package/dist/diagnostics/mermaid-builder.js +1 -1
  96. package/dist/emit/cpp-emitter.js +4 -1
  97. package/dist/emit/emitters/class-emitter.js +32 -4
  98. package/dist/emit/emitters/emitter-context.d.ts +11 -0
  99. package/dist/emit/emitters/entrypoint-synthesizer.js +1 -1
  100. package/dist/emit/emitters/function-emitter-impl.js +33 -17
  101. package/dist/emit/emitters/output-finalizer.d.ts +7 -0
  102. package/dist/emit/emitters/output-finalizer.js +31 -23
  103. package/dist/emit/emitters/setup.js +125 -63
  104. package/dist/emit/emitters/top-level-prep.js +1 -1
  105. package/dist/emit/emitters/type-decl-emitter.js +13 -8
  106. package/dist/emit/emitters/ui-emitter.js +1 -1
  107. package/dist/emit/expression-renderer.d.ts +3 -3
  108. package/dist/emit/expression-renderer.js +17 -7
  109. package/dist/emit/route-hal-op.js +17 -48
  110. package/dist/emit/snprintf-helpers.d.ts +1 -3
  111. package/dist/emit/snprintf-helpers.js +1 -39
  112. package/dist/emit/statement-renderer.d.ts +0 -4
  113. package/dist/emit/statement-renderer.js +54 -45
  114. package/dist/emit/utils/async-state-machine.d.ts +16 -9
  115. package/dist/emit/utils/async-state-machine.js +56 -54
  116. package/dist/emit/utils/comment-helpers.d.ts +0 -8
  117. package/dist/emit/utils/comment-helpers.js +1 -1
  118. package/dist/emit/utils/cpp-helpers.d.ts +2 -2
  119. package/dist/emit/utils/cpp-helpers.js +2 -2
  120. package/dist/emit/utils/hal-op-cpp-type.js +4 -6
  121. package/dist/emit/utils/index.d.ts +3 -3
  122. package/dist/emit/utils/index.js +3 -3
  123. package/dist/emit/utils/type-inference.d.ts +1 -29
  124. package/dist/emit/utils/type-inference.js +0 -75
  125. package/dist/framework-package.d.ts +3 -0
  126. package/dist/framework-package.js +23 -6
  127. package/dist/framework-registry.d.ts +5 -5
  128. package/dist/frameworks/native/graphics/terminal-preview.d.ts +5 -0
  129. package/dist/frameworks/native/graphics/terminal-preview.js +33 -0
  130. package/dist/frameworks/native/index.d.ts +3 -0
  131. package/dist/frameworks/native/index.js +15 -0
  132. package/dist/frameworks/native/native-compile.d.ts +17 -0
  133. package/dist/frameworks/native/native-compile.js +170 -0
  134. package/dist/frameworks/native/native-config.d.ts +41 -0
  135. package/dist/frameworks/native/native-config.js +7 -0
  136. package/dist/frameworks/native/strategy.d.ts +97 -0
  137. package/dist/frameworks/native/strategy.js +664 -0
  138. package/dist/ir/board-resolver.d.ts +18 -23
  139. package/dist/ir/board-resolver.js +43 -401
  140. package/dist/ir/build-ir-state.d.ts +3 -0
  141. package/dist/ir/build-ir-state.js +42 -0
  142. package/dist/ir/build-ir.d.ts +1 -1
  143. package/dist/ir/build-ir.js +40 -42
  144. package/dist/ir/declaration-builders.js +1 -0
  145. package/dist/ir/expression-to-ir.js +17 -10
  146. package/dist/ir/hal/hal-emitter.d.ts +0 -2
  147. package/dist/ir/hal/hal-emitter.js +92 -41
  148. package/dist/ir/hal/hal-parser.d.ts +5 -5
  149. package/dist/ir/hal/hal-parser.js +128 -36
  150. package/dist/ir/hal/hal-plugins.d.ts +0 -1
  151. package/dist/ir/hal/hal-plugins.js +425 -716
  152. package/dist/ir/heap-analysis.js +2 -41
  153. package/dist/ir/identifier-collector.js +32 -20
  154. package/dist/ir/network-validation.js +7 -11
  155. package/dist/ir/ownership-analysis.js +75 -13
  156. package/dist/ir/peripheral-usage.d.ts +8 -2
  157. package/dist/ir/peripheral-usage.js +78 -149
  158. package/dist/ir/peripheral-validation.js +23 -3
  159. package/dist/ir/pin-capability-validation.d.ts +12 -0
  160. package/dist/ir/pin-capability-validation.js +61 -97
  161. package/dist/ir/pin-mode-validation.js +5 -5
  162. package/dist/ir/program-analysis.d.ts +8 -15
  163. package/dist/ir/program-analysis.js +140 -323
  164. package/dist/ir/pulldown-validation.js +11 -4
  165. package/dist/ir/resource-analysis.js +15 -3
  166. package/dist/ir/statement-to-ir.js +0 -6
  167. package/dist/ir/timing-validation.js +1 -1
  168. package/dist/ir/transformers/array-methods.js +11 -5
  169. package/dist/ir/transformers/call-statement.js +20 -87
  170. package/dist/ir/transformers/callback-context-registry.d.ts +1 -1
  171. package/dist/ir/transformers/callback-context-registry.js +8 -16
  172. package/dist/ir/transformers/control-flow.js +0 -13
  173. package/dist/ir/transformers/expressions.js +10 -9
  174. package/dist/ir/transformers/hal-call-resolver.d.ts +2 -2
  175. package/dist/ir/transformers/hal-call-resolver.js +24 -10
  176. package/dist/ir/transformers/hal-emit-helpers.d.ts +2 -2
  177. package/dist/ir/transformers/hal-emit-helpers.js +2 -2
  178. package/dist/ir/transformers/namespace-methods.js +1 -1
  179. package/dist/ir/transformers/ui-callback-lowering.d.ts +0 -2
  180. package/dist/ir/transformers/ui-callback-lowering.js +0 -24
  181. package/dist/ir/transformers/variables.js +338 -42
  182. package/dist/ir/try-catch-validation.js +4 -3
  183. package/dist/ir/type-resolution.js +15 -4
  184. package/dist/ir/validation-orchestrator.js +0 -9
  185. package/dist/libdef/cpp-to-decl.d.ts +0 -9
  186. package/dist/libdef/cpp-to-decl.js +0 -72
  187. package/dist/libdef/registry.d.ts +0 -1
  188. package/dist/libdef/registry.js +1 -24
  189. package/dist/library/init.d.ts +1 -1
  190. package/dist/library/init.js +137 -137
  191. package/dist/library-packages.d.ts +1 -1
  192. package/dist/library-packages.js +1 -1
  193. package/dist/mapping/peripheral-names.js +9 -4
  194. package/dist/mapping/source-map.d.ts +3 -4
  195. package/dist/mapping/source-map.js +12 -18
  196. package/dist/orchestrator/graph-builder.d.ts +3 -3
  197. package/dist/orchestrator/graph-builder.js +13 -12
  198. package/dist/orchestrator/type-checker.d.ts +3 -3
  199. package/dist/orchestrator/type-checker.js +3 -3
  200. package/dist/platform/async-runtime.js +1 -1
  201. package/dist/platform/coop-scheduler-runtime.js +2 -2
  202. package/dist/platform/generic-debug-codegen.d.ts +36 -0
  203. package/dist/platform/generic-debug-codegen.js +185 -0
  204. package/dist/platform/generic-strategy.d.ts +3 -4
  205. package/dist/platform/generic-strategy.js +5 -80
  206. package/dist/platform/index.js +1 -1
  207. package/dist/platform/registry.d.ts +2 -2
  208. package/dist/platform/registry.js +2 -2
  209. package/dist/safety/asil-decorators.d.ts +32 -0
  210. package/dist/safety/asil-decorators.js +32 -0
  211. package/dist/safety/authoring.d.ts +85 -0
  212. package/dist/safety/authoring.js +61 -0
  213. package/dist/safety/engine.d.ts +3 -0
  214. package/dist/safety/engine.js +83 -0
  215. package/dist/safety/hal/ops.d.ts +48 -0
  216. package/dist/safety/hal/ops.js +46 -0
  217. package/dist/safety/iso26262/analyze.d.ts +13 -0
  218. package/dist/safety/iso26262/analyze.js +29 -0
  219. package/dist/safety/iso26262/asil.d.ts +10 -0
  220. package/dist/safety/iso26262/asil.js +22 -0
  221. package/dist/safety/iso26262/collect.d.ts +14 -0
  222. package/dist/safety/iso26262/collect.js +137 -0
  223. package/dist/safety/iso26262/goto-checker.d.ts +10 -0
  224. package/dist/safety/iso26262/goto-checker.js +72 -0
  225. package/dist/safety/iso26262/heap-checker.d.ts +7 -0
  226. package/dist/safety/iso26262/heap-checker.js +57 -0
  227. package/dist/safety/iso26262/init-checker.d.ts +13 -0
  228. package/dist/safety/iso26262/init-checker.js +127 -0
  229. package/dist/safety/iso26262/loop-checker.d.ts +7 -0
  230. package/dist/safety/iso26262/loop-checker.js +86 -0
  231. package/dist/safety/iso26262/recursion-checker.d.ts +9 -0
  232. package/dist/safety/iso26262/recursion-checker.js +134 -0
  233. package/dist/safety/iso26262/sidecar-writer.d.ts +25 -0
  234. package/dist/safety/iso26262/sidecar-writer.js +13 -0
  235. package/dist/safety/passes/pinMode-intercept.d.ts +3 -0
  236. package/dist/safety/passes/pinMode-intercept.js +60 -0
  237. package/dist/safety/runtime/mode-table.d.ts +5 -0
  238. package/dist/safety/runtime/mode-table.js +55 -0
  239. package/dist/safety/runtime/polyfills.d.ts +6 -0
  240. package/dist/safety/runtime/polyfills.js +12 -0
  241. package/dist/safety/runtime/result-struct.d.ts +11 -0
  242. package/dist/safety/runtime/result-struct.js +98 -0
  243. package/dist/safety/runtime/safe-int.d.ts +33 -0
  244. package/dist/safety/runtime/safe-int.js +170 -0
  245. package/dist/safety/runtime/safe-traits.d.ts +4 -0
  246. package/dist/safety/runtime/safe-traits.js +95 -0
  247. package/dist/safety/runtime/safe-variable.d.ts +39 -0
  248. package/dist/safety/runtime/safe-variable.js +226 -0
  249. package/dist/safety/runtime/vote.d.ts +8 -0
  250. package/dist/safety/runtime/vote.js +92 -0
  251. package/dist/safety/runtime/write-verify.d.ts +8 -0
  252. package/dist/safety/runtime/write-verify.js +71 -0
  253. package/dist/safety/safe-int-types.d.ts +45 -0
  254. package/dist/safety/safe-int-types.js +25 -0
  255. package/dist/safety/safe-variable-types.d.ts +29 -0
  256. package/dist/safety/safe-variable-types.js +19 -0
  257. package/dist/safety/safety-bridge.d.ts +5 -6
  258. package/dist/safety/safety-bridge.js +15 -28
  259. package/dist/safety/sidecar-bridge.d.ts +1 -3
  260. package/dist/safety/sidecar-bridge.js +3 -20
  261. package/dist/safety/specifiers.d.ts +6 -0
  262. package/dist/safety/specifiers.js +14 -0
  263. package/dist/safety-hook.d.ts +8 -7
  264. package/dist/safety-hook.js +12 -13
  265. package/dist/testing.d.ts +4 -5
  266. package/dist/testing.js +5 -5
  267. package/dist/transpile/resolution.d.ts +1 -1
  268. package/dist/transpile/resolution.js +18 -9
  269. package/dist/transpile/test-pins.d.ts +18 -0
  270. package/dist/transpile/test-pins.js +142 -0
  271. package/dist/transpile.d.ts +1 -2
  272. package/dist/transpile.js +36 -30
  273. package/dist/types.d.ts +26 -26
  274. package/dist/ui-hook.d.ts +1 -1
  275. package/dist/utils/cli.d.ts +2 -2
  276. package/dist/utils/cli.js +92 -154
  277. package/dist/utils/fs.d.ts +3 -4
  278. package/dist/utils/fs.js +4 -5
  279. package/dist/utils/strings.d.ts +0 -1
  280. package/dist/utils/strings.js +0 -8
  281. package/dist/utils/ui.d.ts +5 -2
  282. package/dist/utils/ui.js +13 -3
  283. package/package.json +158 -157
  284. package/dist/add-preset.d.ts +0 -4
  285. package/dist/add-preset.js +0 -74
  286. package/dist/api/shared/async-symbol-detector.d.ts +0 -11
  287. package/dist/api/shared/async-symbol-detector.js +0 -140
  288. package/dist/api/shared/native-display-op-resolver.d.ts +0 -10
  289. package/dist/api/shared/native-display-op-resolver.js +0 -64
  290. package/dist/create/board-checklist.d.ts +0 -2
  291. package/dist/create/board-checklist.js +0 -52
  292. package/dist/create/board-codegen.d.ts +0 -9
  293. package/dist/create/board-codegen.js +0 -238
  294. package/dist/create/board-generators.d.ts +0 -12
  295. package/dist/create/board-generators.js +0 -651
  296. package/dist/create/board-spec.d.ts +0 -181
  297. package/dist/create/board-spec.js +0 -214
  298. package/dist/install/framework-catalog.d.ts +0 -53
  299. package/dist/install/framework-catalog.js +0 -107
  300. package/dist/install/handle-install.d.ts +0 -35
  301. package/dist/install/handle-install.js +0 -177
  302. package/dist/install/index.d.ts +0 -4
  303. package/dist/install/index.js +0 -3
  304. package/dist/ir/pin-state-tracking.d.ts +0 -58
  305. package/dist/ir/pin-state-tracking.js +0 -182
  306. package/dist/ir/pwm-timer-sharing.d.ts +0 -4
  307. package/dist/ir/pwm-timer-sharing.js +0 -94
  308. package/dist/ir/timer0-pwm-timing-conflict.d.ts +0 -4
  309. package/dist/ir/timer0-pwm-timing-conflict.js +0 -72
  310. package/dist/libdef/component-decls.d.ts +0 -2
  311. package/dist/libdef/component-decls.js +0 -6
  312. package/dist/libdef/component-discovery.d.ts +0 -43
  313. package/dist/libdef/component-discovery.js +0 -83
  314. package/dist/theme-tokens.d.ts +0 -22
  315. package/dist/theme-tokens.js +0 -172
@@ -9,7 +9,7 @@
9
9
  * @param comment The comment string (may contain newlines)
10
10
  * @returns Array of normalized comment lines
11
11
  */
12
- export function normalizeComment(comment) {
12
+ function normalizeComment(comment) {
13
13
  return comment
14
14
  .split(/\r?\n/)
15
15
  .map((line) => line.trimEnd())
@@ -1,8 +1,8 @@
1
1
  export declare function accessorGetterName(prop: string): string;
2
2
  export declare function accessorSetterName(prop: string): string;
3
3
  /**
4
- * Matches a C++ INTEGRAL scalar type (the enum↔integral storage boundary in
5
- * SUPPORT_MATRIX §1.7). Used by the enum-storage cast sites to decide whether
4
+ * Matches a C++ INTEGRAL scalar type (the enum↔integral storage boundary).
5
+ * Used by the enum-storage cast sites to decide whether
6
6
  * a value/target is on the integral side of an `enum class` boundary that
7
7
  * needs a `static_cast`. Covers the signed/unsigned `char`/`short`/`int`/
8
8
  * `long` spellings, the fixed-width `<cstdint>` aliases, `size_t`, and `bool`
@@ -5,8 +5,8 @@ export function accessorSetterName(prop) {
5
5
  return `set${prop.charAt(0).toUpperCase()}${prop.slice(1)}`;
6
6
  }
7
7
  /**
8
- * Matches a C++ INTEGRAL scalar type (the enum↔integral storage boundary in
9
- * SUPPORT_MATRIX §1.7). Used by the enum-storage cast sites to decide whether
8
+ * Matches a C++ INTEGRAL scalar type (the enum↔integral storage boundary).
9
+ * Used by the enum-storage cast sites to decide whether
10
10
  * a value/target is on the integral side of an `enum class` boundary that
11
11
  * needs a `static_cast`. Covers the signed/unsigned `char`/`short`/`int`/
12
12
  * `long` spellings, the fixed-width `<cstdint>` aliases, `size_t`, and `bool`
@@ -7,33 +7,31 @@ export function cppTypeForHalOp(operation) {
7
7
  switch (operation) {
8
8
  case "wifi.local_ip":
9
9
  case "wifi.mac":
10
- case "wifi.ap_ip":
11
10
  case "wifi.scan_ssid":
12
11
  case "http.body":
13
12
  case "http.response_header":
14
13
  return "const char*";
15
14
  case "wifi.is_connected":
16
- case "wifi.connect":
17
- case "wifi.wait_connected":
15
+ case "wifi.join":
18
16
  case "wifi.scan_done":
19
17
  case "wifi.ap_start":
20
- case "wifi.connect_saved":
21
18
  case "http.ok":
22
19
  case "http.done":
23
20
  return "bool";
24
- case "wifi.status":
25
21
  case "wifi.rssi":
26
22
  case "wifi.scan":
27
23
  case "wifi.scan_count":
28
24
  case "wifi.scan_rssi":
29
25
  case "wifi.scan_encryption":
30
26
  case "wifi.scan_channel":
31
- case "wifi.ap_client_count":
32
27
  case "http.status":
33
28
  case "http.content_length":
34
29
  return "int";
35
30
  case "http.send":
36
31
  return "bool";
32
+ // Zephyr's sensor channel value is a double (val1 + val2/1e6).
33
+ case "sensor.get":
34
+ return "double";
37
35
  default:
38
36
  return undefined;
39
37
  }
@@ -2,7 +2,7 @@
2
2
  * Emitter utilities barrel export.
3
3
  * Re-exports all utility functions for C++ code emission.
4
4
  */
5
- export { inferObjectFieldType, collectNestedStructDefs, hasArrayInObjectLiteral, hasThrowStatements, hasStdMathCalls, hasConsoleCalls, isConsoleCall, getConsoleMethod, isRuntimeExpression, statementRequiresRuntime, collectPointerVarTypes, collectExpressionIdentifiers, } from "./type-inference.js";
6
- export { toPascalCaseLocal, generateAsyncTaskClass, type AsyncTaskClassResult, } from "./async-state-machine.js";
5
+ export { inferObjectFieldType, collectNestedStructDefs, hasArrayInObjectLiteral, hasThrowStatements, hasStdMathCalls, isRuntimeExpression, statementRequiresRuntime, collectPointerVarTypes, collectExpressionIdentifiers, } from "./type-inference.js";
6
+ export { generateAsyncTaskClass, type AsyncTaskClassResult, } from "./async-state-machine.js";
7
7
  export { isCuttlefishSDKImport, normalizeInclude, dedupe, resolveTranspiledModuleInclude, applySymbolMap, } from "./include-resolver.js";
8
- export { normalizeComment, emitCommentLines, } from "./comment-helpers.js";
8
+ export { emitCommentLines, } from "./comment-helpers.js";
@@ -3,10 +3,10 @@
3
3
  * Re-exports all utility functions for C++ code emission.
4
4
  */
5
5
  // Type inference utilities
6
- export { inferObjectFieldType, collectNestedStructDefs, hasArrayInObjectLiteral, hasThrowStatements, hasStdMathCalls, hasConsoleCalls, isConsoleCall, getConsoleMethod, isRuntimeExpression, statementRequiresRuntime, collectPointerVarTypes, collectExpressionIdentifiers, } from "./type-inference.js";
6
+ export { inferObjectFieldType, collectNestedStructDefs, hasArrayInObjectLiteral, hasThrowStatements, hasStdMathCalls, isRuntimeExpression, statementRequiresRuntime, collectPointerVarTypes, collectExpressionIdentifiers, } from "./type-inference.js";
7
7
  // Async state machine utilities
8
- export { toPascalCaseLocal, generateAsyncTaskClass, } from "./async-state-machine.js";
8
+ export { generateAsyncTaskClass, } from "./async-state-machine.js";
9
9
  // Include resolution utilities
10
10
  export { isCuttlefishSDKImport, normalizeInclude, dedupe, resolveTranspiledModuleInclude, applySymbolMap, } from "./include-resolver.js";
11
11
  // Comment handling utilities
12
- export { normalizeComment, emitCommentLines, } from "./comment-helpers.js";
12
+ export { emitCommentLines, } from "./comment-helpers.js";
@@ -2,7 +2,7 @@
2
2
  * Type inference utilities for C++ code emission.
3
3
  * Pure functions with no side effects - extracted from cpp-emitter.ts
4
4
  */
5
- import type { ExpressionIR, StatementIR, PlatformStrategy } from "../../api/index.js";
5
+ import type { ExpressionIR, StatementIR } from "../../api/index.js";
6
6
  /**
7
7
  * Infers the C++ type for an object field based on its initializer value.
8
8
  *
@@ -104,34 +104,6 @@ export declare function hasStdMathCalls(program: {
104
104
  };
105
105
  }>;
106
106
  }): boolean;
107
- /**
108
- * Checks if a program contains console.* calls (console.log, console.error, etc.)
109
- *
110
- * @param program The program IR to analyze
111
- * @returns true if console calls are found
112
- */
113
- export declare function hasConsoleCalls(program: {
114
- topLevelStatements: StatementIR[];
115
- functions: Array<{
116
- statements: StatementIR[];
117
- }>;
118
- classes: Array<{
119
- methods: Array<{
120
- statements: StatementIR[];
121
- }>;
122
- constructor?: {
123
- statements: StatementIR[];
124
- };
125
- }>;
126
- }, strategy?: PlatformStrategy): boolean;
127
- /**
128
- * Checks if a callee is a console method call (e.g., "console.log", "console.error")
129
- */
130
- export declare function isConsoleCall(callee: string, strategy?: PlatformStrategy): boolean;
131
- /**
132
- * Gets the console method name from a callee (e.g., "log" from "console.log")
133
- */
134
- export declare function getConsoleMethod(callee: string): string;
135
107
  /**
136
108
  * Checks if an expression requires runtime execution (cannot be evaluated at global scope in C++).
137
109
  * Compile-time expressions can be placed at global scope; runtime expressions must go in setup()/main().
@@ -330,81 +330,6 @@ export function hasStdMathCalls(program) {
330
330
  }
331
331
  return false;
332
332
  }
333
- /**
334
- * Checks if a program contains console.* calls (console.log, console.error, etc.)
335
- *
336
- * @param program The program IR to analyze
337
- * @returns true if console calls are found
338
- */
339
- export function hasConsoleCalls(program, strategy) {
340
- const checkStatements = (statements) => {
341
- for (const stmt of statements) {
342
- if (stmt.kind === "call" && isConsoleCall(stmt.callee, strategy)) {
343
- return true;
344
- }
345
- // Check nested statements in control flow
346
- if ("body" in stmt && Array.isArray(stmt.body)) {
347
- if (checkStatements(stmt.body))
348
- return true;
349
- }
350
- if ("thenBranch" in stmt && Array.isArray(stmt.thenBranch)) {
351
- if (checkStatements(stmt.thenBranch))
352
- return true;
353
- }
354
- if ("elseBranch" in stmt && Array.isArray(stmt.elseBranch)) {
355
- if (checkStatements(stmt.elseBranch))
356
- return true;
357
- }
358
- if ("cases" in stmt && Array.isArray(stmt.cases)) {
359
- for (const c of stmt.cases) {
360
- if (checkStatements(c.body))
361
- return true;
362
- }
363
- }
364
- if ("tryBlock" in stmt && Array.isArray(stmt.tryBlock)) {
365
- if (checkStatements(stmt.tryBlock))
366
- return true;
367
- }
368
- if ("catchBlock" in stmt && Array.isArray(stmt.catchBlock)) {
369
- if (checkStatements(stmt.catchBlock))
370
- return true;
371
- }
372
- }
373
- return false;
374
- };
375
- // Check all functions
376
- for (const fn of program.functions) {
377
- if (checkStatements(fn.statements))
378
- return true;
379
- }
380
- // Check top-level statements
381
- if (checkStatements(program.topLevelStatements))
382
- return true;
383
- // Check class methods
384
- for (const cls of program.classes) {
385
- for (const method of cls.methods) {
386
- if (checkStatements(method.statements))
387
- return true;
388
- }
389
- if (cls.constructor && checkStatements(cls.constructor.statements))
390
- return true;
391
- }
392
- return false;
393
- }
394
- /**
395
- * Checks if a callee is a console method call (e.g., "console.log", "console.error")
396
- */
397
- export function isConsoleCall(callee, strategy) {
398
- if (strategy)
399
- return strategy.isConsoleCall(callee);
400
- return callee.startsWith("console.");
401
- }
402
- /**
403
- * Gets the console method name from a callee (e.g., "log" from "console.log")
404
- */
405
- export function getConsoleMethod(callee) {
406
- return callee.slice("console.".length);
407
- }
408
333
  /**
409
334
  * Checks if an expression requires runtime execution (cannot be evaluated at global scope in C++).
410
335
  * Compile-time expressions can be placed at global scope; runtime expressions must go in setup()/main().
@@ -5,6 +5,9 @@
5
5
  * Optional exports include `Toolchain`, `SYMBOL_KINDS`, library resolver,
6
6
  * class name map builder, and lib declaration generator.
7
7
  *
8
+ * Built-in frameworks (see BUILTIN_FRAMEWORK_MODULES) are loaded from this
9
+ * package directly; everything else resolves from the project directory.
10
+ *
8
11
  * Returns the raw module for backward compatibility.
9
12
  */
10
13
  export declare function loadFrameworkPackage(packageName: string, fromDir?: string): any;
@@ -2,7 +2,18 @@ import path from "node:path";
2
2
  import { createRequire } from "node:module";
3
3
  import { setLoadedFramework } from "./framework-registry.js";
4
4
  import { registerPlatformStrategy } from "./platform/registry.js";
5
+ import * as nativeFramework from "./frameworks/native/index.js";
5
6
  const require = createRequire(import.meta.url);
7
+ /**
8
+ * Frameworks that ship inside @typecad/cuttlefish instead of as separate
9
+ * @typecad/framework-* npm packages. Their config string stays the historical
10
+ * package name for continuity; the module is loaded directly instead of via
11
+ * require.resolve. (The native framework was merged in from the former
12
+ * @typecad/framework-native package.)
13
+ */
14
+ const BUILTIN_FRAMEWORK_MODULES = {
15
+ "@typecad/framework-native": nativeFramework,
16
+ };
6
17
  function resolveFrameworkPackage(packageName, fromDir = process.cwd()) {
7
18
  try {
8
19
  const resolved = require.resolve(packageName, { paths: [path.resolve(fromDir)] });
@@ -29,15 +40,21 @@ function extractToolchain(mod) {
29
40
  * Optional exports include `Toolchain`, `SYMBOL_KINDS`, library resolver,
30
41
  * class name map builder, and lib declaration generator.
31
42
  *
43
+ * Built-in frameworks (see BUILTIN_FRAMEWORK_MODULES) are loaded from this
44
+ * package directly; everything else resolves from the project directory.
45
+ *
32
46
  * Returns the raw module for backward compatibility.
33
47
  */
34
48
  export function loadFrameworkPackage(packageName, fromDir = process.cwd()) {
35
- const packagePath = resolveFrameworkPackage(packageName, fromDir);
36
- if (!packagePath) {
37
- throw new Error(`Unable to resolve framework package '${packageName}' from '${fromDir}'. ` +
38
- `Install it or pass a different framework package name in your TypeCAD config.`);
39
- }
40
- const mod = require(packagePath);
49
+ const builtin = BUILTIN_FRAMEWORK_MODULES[packageName];
50
+ const mod = builtin ?? (() => {
51
+ const packagePath = resolveFrameworkPackage(packageName, fromDir);
52
+ if (!packagePath) {
53
+ throw new Error(`Unable to resolve framework package '${packageName}' from '${fromDir}'. ` +
54
+ `Install it or pass a different framework package name in your TypeCAD config.`);
55
+ }
56
+ return require(packagePath);
57
+ })();
41
58
  // Populate the registry with the loaded framework components
42
59
  if (mod.FrameworkStrategy) {
43
60
  const strategy = new mod.FrameworkStrategy();
@@ -4,11 +4,11 @@ import type { CompileResult, UploadResult, ToolchainOptions } from "./api/shared
4
4
  * Components loaded from a framework package.
5
5
  */
6
6
  export interface LoadedFramework {
7
- /** The platform strategy (e.g. ArduinoStrategy, NativeAVRStrategy) */
7
+ /** The platform strategy (e.g. ZephyrStrategy, NativeStrategy) */
8
8
  strategy: PlatformStrategy;
9
9
  /** Optional toolchain for compile/upload/monitor (framework-specific) */
10
10
  toolchain?: FrameworkToolchain;
11
- /** Framework library import resolution (e.g., Arduino library detection) */
11
+ /** Framework library import resolution (e.g., framework library detection) */
12
12
  libraryResolver?: FrameworkLibraryResolver;
13
13
  /** Framework class name mapping for library imports */
14
14
  classNameMapBuilder?: (imports: any[]) => Map<string, string>;
@@ -18,15 +18,15 @@ export interface LoadedFramework {
18
18
  * Optional subcommand presenters owned by the framework. Cuttlefish dispatches
19
19
  * `cuttlefish doctor` / `cuttlefish licenses` to these when the loaded
20
20
  * framework provides them; otherwise it prints a no-support message. Each
21
- * framework decides what (if anything) these do — e.g. framework-arduino
22
- * checks arduino-cli + board core (doctor) and scans Arduino library licenses
21
+ * framework decides what (if anything) these do — e.g. framework-zephyr
22
+ * checks west + board target (doctor) and scans library licenses
23
23
  * (licenses).
24
24
  */
25
25
  doctor?: () => void;
26
26
  licenses?: (strict: boolean, all: boolean) => void;
27
27
  }
28
28
  /**
29
- * Resolves framework-specific library imports (e.g., Arduino libraries).
29
+ * Resolves framework-specific library imports.
30
30
  */
31
31
  export interface FrameworkLibraryResolver {
32
32
  isFrameworkLibraryImport(moduleSpecifier: string): boolean;
@@ -0,0 +1,5 @@
1
+ import type { DisplayHALOp } from '../../../api/shared/index.js';
2
+ export declare function resolveTerminalPreviewOp(op: DisplayHALOp): {
3
+ code?: string;
4
+ expression?: string;
5
+ } | undefined;
@@ -0,0 +1,33 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Terminal preview — renders display ops as ANSI-colored cells to stdout
3
+ //
4
+ // Lets authors preview a UI on the host with no hardware. Colors map rgb565
5
+ // back to the nearest ANSI 16-color for display only.
6
+ // ---------------------------------------------------------------------------
7
+ /** Map an rgb565 value to an ANSI color code (approximate). */
8
+ function rgb565ToAnsi(c) {
9
+ const r5 = (c >> 11) & 0x1f;
10
+ const g6 = (c >> 5) & 0x3f;
11
+ const b5 = c & 0x1f;
12
+ const r = r5 >> 3, g = g6 >> 4, b = b5 >> 3; // 0/1 per channel
13
+ // ANSI 16-color: foreground 30+bit pattern
14
+ return 30 + (r ? 1 : 0) + (g ? 2 : 0) + (b ? 4 : 0);
15
+ }
16
+ export function resolveTerminalPreviewOp(op) {
17
+ switch (op.operation) {
18
+ case "display.init":
19
+ return { code: `/* native preview: ${op.driver} ${op.width}x${op.height} initialized */` };
20
+ case "display.fill_rect":
21
+ return {
22
+ code: `/* preview fill_rect ${op.x},${op.y} ${op.w}x${op.h} color=0x${op.color.toString(16)} ansi=${rgb565ToAnsi(op.color)} */`,
23
+ };
24
+ case "display.draw_rect":
25
+ return { code: `/* preview draw_rect ${op.x},${op.y} ${op.w}x${op.h} */` };
26
+ case "display.draw_text":
27
+ return { code: `/* preview draw_text ${op.x},${op.y} "${op.text}" */` };
28
+ case "display.flush":
29
+ return { code: `/* preview flush ${op.rects.length} rect(s) */` };
30
+ default:
31
+ return undefined;
32
+ }
33
+ }
@@ -0,0 +1,3 @@
1
+ export { NativeStrategy, NativeStrategy as FrameworkStrategy } from './strategy.js';
2
+ export { NativeToolchain as Toolchain } from './native-compile.js';
3
+ export type { NativeCompileConfig } from './native-config.js';
@@ -0,0 +1,15 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Native C++ framework — built into @typecad/cuttlefish
3
+ //
4
+ // Outputs standard C++ for portable Windows/Linux desktop executables.
5
+ // Uses main(), std::string, and std::thread-based async.
6
+ //
7
+ // Usage:
8
+ // In cuttlefish.config.ts:
9
+ // framework: '@typecad/framework-native'
10
+ // (The config string keeps the historical package name; the module is
11
+ // loaded directly by framework-package.ts, no npm package involved.)
12
+ // ---------------------------------------------------------------------------
13
+ export { NativeStrategy, NativeStrategy as FrameworkStrategy } from './strategy.js';
14
+ // Native C++ toolchain (g++/clang++ compilation)
15
+ export { NativeToolchain as Toolchain } from './native-compile.js';
@@ -0,0 +1,17 @@
1
+ import type { CompileResult, ToolchainOptions } from '../../api/shared/index.js';
2
+ /**
3
+ * Resolve the -l link libraries for a native build.
4
+ *
5
+ * The SDL display driver (#include <SDL2/SDL.h>) requires core SDL2 at link
6
+ * time on every platform; Windows/MSYS2 additionally needs -lmingw32 and
7
+ * -lSDL2main for the Win32 GUI entry-point glue (the SDL_MAIN_HANDLED define
8
+ * + SDL_SetMainReady() in display_init). Because the cuttlefish config loader
9
+ * is AST-only (it cannot evaluate process.platform conditionals), these libs
10
+ * are auto-provided here when the `sdl` display driver is active, so a single
11
+ * config links on both Windows and Linux without a platform-specific
12
+ * `native.libraries` array. User-supplied libraries are appended (deduped).
13
+ */
14
+ export declare function resolveLinkLibraries(display: Record<string, unknown> | undefined, userLibs: string[]): string[];
15
+ export declare const NativeToolchain: {
16
+ compile(options: ToolchainOptions): CompileResult;
17
+ };
@@ -0,0 +1,170 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Native C++ compilation toolchain
3
+ //
4
+ // Compiles generated C++ into a native executable using g++ or clang++.
5
+ // ---------------------------------------------------------------------------
6
+ import path from "node:path";
7
+ import fs from "node:fs";
8
+ import { spawnSync } from "node:child_process";
9
+ import { parseCompileErrors, collectCppFiles } from '../../api/shared/index.js';
10
+ function findCppSource(outputDir, sourcePath) {
11
+ if (sourcePath.endsWith(".cpp") && fs.existsSync(sourcePath)) {
12
+ return sourcePath;
13
+ }
14
+ if (fs.existsSync(outputDir)) {
15
+ const entries = fs.readdirSync(outputDir);
16
+ const cppFile = entries.find((e) => e.endsWith(".cpp"));
17
+ if (cppFile)
18
+ return path.join(outputDir, cppFile);
19
+ }
20
+ throw new Error(`No .cpp source file found in ${outputDir}`);
21
+ }
22
+ function detectCompiler() {
23
+ // On Windows, also try MSYS2/MinGW paths that may not be in PATH
24
+ const candidates = ["g++", "clang++"];
25
+ if (process.platform === "win32") {
26
+ candidates.unshift("C:\\msys64\\ucrt64\\bin\\g++.exe", "C:\\msys64\\mingw64\\bin\\g++.exe");
27
+ }
28
+ for (const cmd of candidates) {
29
+ try {
30
+ const r = spawnSync(cmd, ["--version"], {
31
+ encoding: "utf8",
32
+ timeout: 5000,
33
+ });
34
+ if (r.status === 0) {
35
+ // On Windows, ensure the compiler's bin dir is first in PATH
36
+ // so g++ can find its internal tools (as, ld, cc1plus, etc.)
37
+ let env;
38
+ if (process.platform === "win32" && cmd.includes("\\")) {
39
+ const binDir = path.dirname(cmd);
40
+ const pathSep = ";";
41
+ const existing = process.env.PATH ?? "";
42
+ env = { ...process.env, PATH: `${binDir}${pathSep}${existing}` };
43
+ }
44
+ return { cmd, env };
45
+ }
46
+ }
47
+ catch { /* not found */ }
48
+ }
49
+ throw new Error("No C++ compiler found. Install g++ or clang++ and ensure it is in your PATH." +
50
+ (process.platform === "win32"
51
+ ? " On Windows, install MSYS2 (https://www.msys2.org/) and add C:\\msys64\\ucrt64\\bin to your PATH."
52
+ : ""));
53
+ }
54
+ function warningFlags(level) {
55
+ switch (level) {
56
+ case "none": return ["-w"];
57
+ case "all": return ["-Wall"];
58
+ case "extra": return ["-Wall", "-Wextra"];
59
+ case "error": return ["-Wall", "-Wextra", "-Werror"];
60
+ default: return ["-Wall"];
61
+ }
62
+ }
63
+ /**
64
+ * Resolve the -l link libraries for a native build.
65
+ *
66
+ * The SDL display driver (#include <SDL2/SDL.h>) requires core SDL2 at link
67
+ * time on every platform; Windows/MSYS2 additionally needs -lmingw32 and
68
+ * -lSDL2main for the Win32 GUI entry-point glue (the SDL_MAIN_HANDLED define
69
+ * + SDL_SetMainReady() in display_init). Because the cuttlefish config loader
70
+ * is AST-only (it cannot evaluate process.platform conditionals), these libs
71
+ * are auto-provided here when the `sdl` display driver is active, so a single
72
+ * config links on both Windows and Linux without a platform-specific
73
+ * `native.libraries` array. User-supplied libraries are appended (deduped).
74
+ */
75
+ export function resolveLinkLibraries(display, userLibs) {
76
+ const libs = [];
77
+ if (display?.driver === "sdl") {
78
+ if (process.platform === "win32") {
79
+ // mingw32 (WinMain CRT glue) → SDL2main (SDL_main) → SDL2 (core).
80
+ libs.push("mingw32", "SDL2main", "SDL2");
81
+ }
82
+ else {
83
+ libs.push("SDL2");
84
+ }
85
+ }
86
+ for (const lib of userLibs) {
87
+ if (!libs.includes(lib))
88
+ libs.push(lib);
89
+ }
90
+ return libs;
91
+ }
92
+ export const NativeToolchain = {
93
+ compile(options) {
94
+ const nativeConfig = (options.frameworkConfig ?? {});
95
+ let cppFiles = collectCppFiles(options.outputDir);
96
+ if (cppFiles.length === 0) {
97
+ const fallback = findCppSource(options.outputDir, options.sourcePath);
98
+ cppFiles.push(fallback);
99
+ }
100
+ const exeExt = process.platform === "win32" ? ".exe" : ".out";
101
+ const exeFile = cppFiles[0].replace(/\.cpp$/, exeExt);
102
+ // Use configured compiler or auto-detect
103
+ const detected = detectCompiler();
104
+ const compiler = nativeConfig.compiler ?? detected.cmd;
105
+ const env = detected.env;
106
+ const flags = [];
107
+ // C++ standard
108
+ flags.push(`-std=${nativeConfig.cxxStandard ?? "c++17"}`);
109
+ // Optimization: always -O2. The old `output.optimize` config knob was
110
+ // removed from cuttlefish ("framework territory" — see config-loader's
111
+ // deprecation note); nothing can populate a ToolchainOptions.optimize, so
112
+ // these branches were dead code that never type-checked.
113
+ flags.push("-O2");
114
+ // Warning level
115
+ flags.push(...warningFlags(nativeConfig.warnings));
116
+ // Static linking (default: true on Windows, false elsewhere)
117
+ const staticLink = nativeConfig.staticLink ?? (process.platform === "win32");
118
+ if (staticLink)
119
+ flags.push("-static");
120
+ // Windows GUI subsystem: link as a windowed app, not a console app. Without
121
+ // -mwindows, MinGW produces a console-subsystem executable that spawns a
122
+ // cmd.exe window behind the SDL window on launch. This is the standard flag
123
+ // for any SDL/Win32 GUI program built with g++ on MSYS2/MinGW. No-op on
124
+ // Linux/macOS (no console-subsystem concept there).
125
+ if (process.platform === "win32")
126
+ flags.push("-mwindows");
127
+ // Include paths
128
+ if (nativeConfig.includePaths) {
129
+ for (const p of nativeConfig.includePaths)
130
+ flags.push(`-I${p}`);
131
+ }
132
+ // Library paths
133
+ if (nativeConfig.libraryPaths) {
134
+ for (const p of nativeConfig.libraryPaths)
135
+ flags.push(`-L${p}`);
136
+ }
137
+ // Generic extra flags and defines
138
+ if (options.extraFlags)
139
+ flags.push(...options.extraFlags);
140
+ if (options.defines) {
141
+ for (const [k, v] of Object.entries(options.defines)) {
142
+ flags.push(`-D${k}=${v}`);
143
+ }
144
+ }
145
+ // Build args: flags + source + output, then -l flags last (GCC ordering).
146
+ // SDL2 link libs are auto-provided when the `sdl` display driver is active
147
+ // (see resolveLinkLibraries) — the AST config loader can't evaluate
148
+ // platform conditionals, so this keeps a single config portable across
149
+ // Windows/Linux/macOS. User-supplied native.libraries are merged in.
150
+ const linkLibs = resolveLinkLibraries(options.display, nativeConfig.libraries ?? []).map((lib) => `-l${lib}`);
151
+ const args = [...flags, ...cppFiles, "-o", exeFile, ...linkLibs];
152
+ const result = spawnSync(compiler, args, {
153
+ encoding: "utf8",
154
+ timeout: 120000,
155
+ env: env ?? process.env,
156
+ });
157
+ let output = `${result.stdout ?? ""}\n${result.stderr ?? ""}`.trim();
158
+ if (result.status === 0) {
159
+ output = `${compiler} -> ${exeFile}`;
160
+ }
161
+ else if (result.error) {
162
+ output = `Compiler error: ${result.error.message}\n${output}`.trim();
163
+ }
164
+ else if (!output) {
165
+ output = `Compiler exited with code ${result.status} (no output). Command: ${compiler} ${args.join(" ")}`;
166
+ }
167
+ const errors = parseCompileErrors(output, options.outputDir);
168
+ return { success: result.status === 0, output, errors };
169
+ },
170
+ };
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Native C++ compilation configuration.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * // TypeCAD.config.ts
7
+ * const config: TypeCADConfig = {
8
+ * framework: '@typecad/framework-native',
9
+ * native: {
10
+ * compiler: 'clang++',
11
+ * cxxStandard: 'c++20',
12
+ * warnings: 'extra',
13
+ * includePaths: ['./vendor/include'],
14
+ * libraries: ['curl'],
15
+ * },
16
+ * };
17
+ * ```
18
+ */
19
+ export interface NativeCompileConfig {
20
+ /** Override auto-detected compiler (e.g. 'clang++', 'g++-12'). */
21
+ compiler?: string;
22
+ /** C++ standard (e.g. 'c++17', 'c++20'). Default: 'c++17'. */
23
+ cxxStandard?: string;
24
+ /** Additional include directories (-I flags). */
25
+ includePaths?: string[];
26
+ /** Library search directories (-L flags). */
27
+ libraryPaths?: string[];
28
+ /**
29
+ * Libraries to link (-l flags, without the 'lib' prefix).
30
+ *
31
+ * Note: when the `sdl` display driver is active, SDL2 link libraries are
32
+ * auto-provided per platform by NativeToolchain (-lmingw32 -lSDL2main -lSDL2
33
+ * on Windows, -lSDL2 elsewhere); this field is for additional user libraries
34
+ * and is appended (deduped) after the auto-provided set.
35
+ */
36
+ libraries?: string[];
37
+ /** Warning level: 'none', 'basic', 'all', 'extra', 'error'. Default: 'basic'. */
38
+ warnings?: string;
39
+ /** Static linking toggle. Default: true on Windows, false elsewhere. */
40
+ staticLink?: boolean;
41
+ }
@@ -0,0 +1,7 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Native C++ compilation configuration
3
+ //
4
+ // Place under the `native` key in TypeCAD.config.ts to customize
5
+ // how g++/clang++ compiles your generated C++ code.
6
+ // ---------------------------------------------------------------------------
7
+ export {};