scriptc 0.0.34 → 0.0.36
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.
- package/README.md +15 -2
- package/dist/bootstrap.js +154 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/main.js +120 -98
- package/dist/main.js.map +1 -1
- package/dist/output-options.d.ts +25 -0
- package/dist/output-options.js +67 -0
- package/dist/output-options.js.map +1 -0
- package/dist/paths.d.ts +9 -0
- package/dist/paths.js +37 -5
- package/dist/paths.js.map +1 -1
- package/dist/usage.d.ts +71 -0
- package/dist/usage.js +90 -0
- package/dist/usage.js.map +1 -0
- package/package.json +6 -4
- package/scripts/runtime-pack-host.d.mts +5 -0
- package/scripts/runtime-pack-host.mjs +10 -0
- package/scripts/warm-cache.mjs +30 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# scriptc
|
|
2
2
|
|
|
3
|
-
Compile ordinary TypeScript and JavaScript to small, fast native executables or WASI WebAssembly modules — no Node, no V8, no JavaScript engine in the artifact.
|
|
3
|
+
Compile ordinary TypeScript and JavaScript to small, fast native executables or WASI WebAssembly modules — no Node, no V8, no JavaScript engine in the artifact.
|
|
4
4
|
|
|
5
5
|
```console
|
|
6
6
|
$ cat fib.ts
|
|
@@ -22,7 +22,7 @@ $ scriptc build fib.ts -o fib && ./fib
|
|
|
22
22
|
$ npm install -g scriptc
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Requires
|
|
25
|
+
Requires Node.js 24. Executable builds require a platform linker driver and SDK. On macOS 15+ arm64, LLVM-tier executables use the matching optional helper and precompiled runtime pack, so the driver only links; explicit C builds, LLVM fallbacks, and `--sanitize` still compile C. `--emit=ir|c|llvm` requires only Node, while `--emit=asm|obj` requires neither an external compiler nor a linker.
|
|
26
26
|
|
|
27
27
|
Builds use a bounded persistent cache by default. Exact unchanged library builds validate their recorded TypeScript/module-resolution inputs and restore the generated C/LLVM unit before starting the frontend. TypeScript comment-only edits can restore validated lowered IR instead, rebasing source locations and regenerating exact-source build identity before emission; directives, JSDoc-bearing JavaScript, token edits, configuration, package resolution, and newly appearing candidates still invalidate it. Library identity getters live in a tiny C translation unit, so build-id-only changes reuse the large compiled program object and compile only that small member before rearchiving. The native cache then applies its independent toolchain checks. Unchanged executables and library archives skip native code generation and linking after fresh compiler metadata probes, while edited builds reuse stable runtime objects. Experimental provenance-source builds bypass the early frontend tier because their fetched-source registry is process state. FFI builds with archive/object inputs or ambient `system_libraries` relink every time but still reuse runtime objects. Mutable compiler input paths such as `CPATH` and `SDKROOT`, and compiler wrappers, bypass persistent native artifacts and objects so same-path dependency edits cannot go stale. Opaque archiver wrappers rebuild library program members and archives while retaining runtime-object reuse. Direct Clang, Apple's system Clang shim, `zig cc`, trusted platform archivers, and `zig ar` retain their applicable persistent tiers. Set `SCRIPTC_NO_CACHE=1` to bypass every cache or `SCRIPTC_CACHE_DIR` to choose its location; an existing POSIX override must already be private, otherwise caching is bypassed without changing its permissions.
|
|
28
28
|
|
|
@@ -32,6 +32,19 @@ Builds use a bounded persistent cache by default. Exact unchanged library builds
|
|
|
32
32
|
- `scriptc run <file.ts>` — compile and run
|
|
33
33
|
- `scriptc coverage <file.ts>` — what compiles statically, and why the rest doesn't
|
|
34
34
|
|
|
35
|
+
`scriptc build app.ts --emit=ir|c|llvm|asm|obj` selects serialized typed IR,
|
|
36
|
+
readable C, textual LLVM IR, target assembly, or a relocatable program object
|
|
37
|
+
as the one primary artifact. `--emit=exe` is the default. Assembly/object
|
|
38
|
+
emission currently requires a macOS 15+ arm64 host and emits objects targeting
|
|
39
|
+
macOS 14.0 (`arm64-apple-macosx14.0.0`).
|
|
40
|
+
Objects retain undefined `scr_*` runtime references plus the
|
|
41
|
+
`scr_runtime_abi_v1` compatibility marker; they are not library archives.
|
|
42
|
+
External consumption is experimental and requires the exact matching runtime.
|
|
43
|
+
`scriptc build app.ts --print=native-link-info -o app.o` prints the versioned
|
|
44
|
+
JSON target/runtime/link recipe without performing a link.
|
|
45
|
+
`--emit=asm|obj --sanitize` is rejected until ASan pipeline parity is
|
|
46
|
+
available.
|
|
47
|
+
|
|
35
48
|
For embedder-hosted modules that are not installed npm packages, coverage can
|
|
36
49
|
map an exact bare specifier to a local declaration with repeatable
|
|
37
50
|
`--external-types <specifier=file.d.ts>` options. This is analysis-only: the
|
package/dist/bootstrap.js
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { readFile, rm } from "node:fs/promises";
|
|
2
4
|
import { enableCompileCache } from "node:module";
|
|
5
|
+
import { arch } from "node:process";
|
|
6
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { parseArgs } from "node:util";
|
|
9
|
+
import { hostSupportsRuntimePack } from "../scripts/runtime-pack-host.mjs";
|
|
10
|
+
import { CLI_OPTIONS, USAGE } from "./usage.js";
|
|
3
11
|
// Node 24 can persist V8's compiled module bytecode. scriptc's CLI imports
|
|
4
12
|
// the compiler and its lowering/backend graph before handling any command, so
|
|
5
13
|
// enabling this in the tiny bootstrap avoids reparsing that graph on every
|
|
@@ -11,5 +19,150 @@ catch {
|
|
|
11
19
|
// Bytecode caching is an optimization boundary. A read-only temp directory
|
|
12
20
|
// must never prevent the compiler from running.
|
|
13
21
|
}
|
|
14
|
-
|
|
22
|
+
function packageVersion() {
|
|
23
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(requireText(join(here, "..", "package.json"))).version ?? "unknown";
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return "unknown";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function requireText(path) {
|
|
32
|
+
// This tiny synchronous read keeps --version free of the compiler graph and
|
|
33
|
+
// preserves the package manifest as the one release-version authority.
|
|
34
|
+
const { readFileSync } = process.getBuiltinModule("node:fs");
|
|
35
|
+
return readFileSync(path, "utf8");
|
|
36
|
+
}
|
|
37
|
+
async function tryFastPath() {
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = parseArgs({ options: CLI_OPTIONS, allowPositionals: true, allowNegative: true });
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null; // main owns exact user-error wording
|
|
44
|
+
}
|
|
45
|
+
const { values, positionals } = parsed;
|
|
46
|
+
if (values.version) {
|
|
47
|
+
process.stdout.write(`${packageVersion()}\n`);
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
if (values.help || positionals.length === 0) {
|
|
51
|
+
process.stdout.write(USAGE);
|
|
52
|
+
return values.help ? 0 : 1;
|
|
53
|
+
}
|
|
54
|
+
const [command, inputArg] = positionals;
|
|
55
|
+
if ((command !== "build" && command !== "run") || inputArg === undefined ||
|
|
56
|
+
(values.emit !== undefined && values.emit !== "exe") ||
|
|
57
|
+
values.print !== undefined ||
|
|
58
|
+
values["emit-ir"] ||
|
|
59
|
+
values.lib || values["from-c"] || values["provenance-sources"] ||
|
|
60
|
+
(values["external-types"] ?? []).length > 0)
|
|
61
|
+
return null;
|
|
62
|
+
const backend = values.backend;
|
|
63
|
+
if (backend !== undefined && backend !== "c" && backend !== "llvm")
|
|
64
|
+
return null;
|
|
65
|
+
const optimization = values.optimization;
|
|
66
|
+
if (optimization !== undefined && optimization !== "release" && optimization !== "dev")
|
|
67
|
+
return null;
|
|
68
|
+
const npmRaw = (values["npm-static"] ?? [])
|
|
69
|
+
.flatMap((value) => value.split(","))
|
|
70
|
+
.map((value) => value.trim())
|
|
71
|
+
.filter((value) => value !== "");
|
|
72
|
+
let npmStatic = null;
|
|
73
|
+
if (npmRaw.includes("auto")) {
|
|
74
|
+
if (npmRaw.length !== 1)
|
|
75
|
+
return null;
|
|
76
|
+
npmStatic = "auto";
|
|
77
|
+
}
|
|
78
|
+
else if (npmRaw.length > 0) {
|
|
79
|
+
npmStatic = npmRaw;
|
|
80
|
+
}
|
|
81
|
+
let startup;
|
|
82
|
+
let driver;
|
|
83
|
+
try {
|
|
84
|
+
startup = await import("@scriptc/compiler/startup-cache");
|
|
85
|
+
driver = startup.resolveCc();
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
const buildPlatform = startup.targetPlatform(driver);
|
|
91
|
+
if (command === "run" && buildPlatform === "wasi")
|
|
92
|
+
return null;
|
|
93
|
+
const input = resolve(inputArg);
|
|
94
|
+
const outDir = values.out ? dirname(resolve(values.out)) : join(dirname(input), ".scriptc");
|
|
95
|
+
const stem = basename(input).replace(/\.(ts|mts|cts|js|mjs|cjs|c|ll)$/, "");
|
|
96
|
+
const defaultName = buildPlatform === "win32"
|
|
97
|
+
? `${stem}.exe`
|
|
98
|
+
: buildPlatform === "wasi"
|
|
99
|
+
? `${stem}.wasm`
|
|
100
|
+
: stem;
|
|
101
|
+
const outPath = values.out ? resolve(values.out) : join(outDir, defaultName);
|
|
102
|
+
const ffiPath = values.ffi === undefined ? null : resolve(values.ffi);
|
|
103
|
+
const ffiBytes = ffiPath === null ? null : await readFile(ffiPath).catch(() => null);
|
|
104
|
+
if (ffiPath !== null && ffiBytes === null)
|
|
105
|
+
return null;
|
|
106
|
+
const root = await startup.prepareBuildCacheRoot(startup.resolveBuildCacheRoot());
|
|
107
|
+
const nativeEnvironment = await startup.executableNativeEnvironmentFingerprint().catch(() => null);
|
|
108
|
+
if (nativeEnvironment === null)
|
|
109
|
+
return null;
|
|
110
|
+
const hit = await startup.readRoutedExecutableCache(root, {
|
|
111
|
+
entryPath: input,
|
|
112
|
+
outDir,
|
|
113
|
+
outPath,
|
|
114
|
+
emitIr: values["emit-ir"],
|
|
115
|
+
sanitize: values.sanitize,
|
|
116
|
+
dynamic: values.dynamic,
|
|
117
|
+
backend: backend ?? "auto",
|
|
118
|
+
...(optimization === "dev" ? { optimization: "dev" } : {}),
|
|
119
|
+
npmStatic,
|
|
120
|
+
ffiProfile: ffiPath === null ? null : { path: ffiPath, bytes: ffiBytes },
|
|
121
|
+
target: `${process.env["SCRIPTC_TARGET"] ?? "native"}:${buildPlatform}:${arch}:${hostSupportsRuntimePack(process.platform, arch) &&
|
|
122
|
+
(process.env["SCRIPTC_TARGET"] ?? "") === "" &&
|
|
123
|
+
backend !== "c" && !values.sanitize &&
|
|
124
|
+
process.env["SCRIPTC_RUNTIME_PACK"] !== "0" &&
|
|
125
|
+
process.env["SCRIPTC_FETCH_CURL"] !== "1" &&
|
|
126
|
+
((process.env["SCRIPTC_CC"] ?? "") === "" || process.env["SCRIPTC_CC"] === "clang")
|
|
127
|
+
? "runtime-pack"
|
|
128
|
+
: "driver-tu"}`,
|
|
129
|
+
compiler: [process.env["SCRIPTC_LINKER"] ?? process.env["SCRIPTC_CC"] ?? "clang"],
|
|
130
|
+
nativeEnvironment,
|
|
131
|
+
nodeVersion: process.version,
|
|
132
|
+
});
|
|
133
|
+
if (hit === null)
|
|
134
|
+
return null;
|
|
135
|
+
if (hit.native.llvmRefusal !== undefined) {
|
|
136
|
+
process.stderr.write(`scriptc: backend c (llvm refused: ${hit.native.llvmRefusal})\n`);
|
|
137
|
+
}
|
|
138
|
+
// Source-primary invocations can replace a previously cached executable.
|
|
139
|
+
// A routed hit restores that executable without loading the full compiler,
|
|
140
|
+
// so mirror its output-kind cleanup before returning from the fast path.
|
|
141
|
+
await rm(join(outDir, `${stem}.ir.json`), { force: true });
|
|
142
|
+
if (!values["keep-c"])
|
|
143
|
+
await rm(hit.cPath, { force: true });
|
|
144
|
+
if (command === "build") {
|
|
145
|
+
process.stdout.write(`${outPath}\n`);
|
|
146
|
+
return 0;
|
|
147
|
+
}
|
|
148
|
+
return new Promise((resolveExit) => {
|
|
149
|
+
const child = spawn(outPath, [], { stdio: "inherit" });
|
|
150
|
+
child.on("exit", (code, signal) => {
|
|
151
|
+
if (signal) {
|
|
152
|
+
process.stderr.write(`scriptc: program killed by ${signal}\n`);
|
|
153
|
+
resolveExit(1);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
resolveExit(code ?? 0);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
const fastExit = await tryFastPath();
|
|
162
|
+
if (fastExit === null) {
|
|
163
|
+
await import("./main.js");
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
process.exitCode = fastExit;
|
|
167
|
+
}
|
|
15
168
|
//# sourceMappingURL=bootstrap.js.map
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -1,68 +1,12 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
2
|
import { existsSync, readFileSync, rmSync, statSync } from "node:fs";
|
|
3
|
-
import {
|
|
3
|
+
import { dirname, join, resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { parseArgs } from "node:util";
|
|
6
|
-
import { analyze, buildTargetPlatform, compile, compileC, compileLibrary, isExactExternalTypeSpecifier,
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Usage:
|
|
11
|
-
scriptc build <file.ts|.js> [options] compile to an executable target artifact
|
|
12
|
-
scriptc run <file.ts|.js> [options] compile and run
|
|
13
|
-
scriptc coverage <file.ts|.js> how much compiles statically, and why not
|
|
14
|
-
scriptc coverage <file.ts|.js> --dynamic what a --dynamic build compiles, and what still blocks it
|
|
15
|
-
scriptc coverage <file.ts|.js> --external-types <specifier=file.d.ts>
|
|
16
|
-
type-resolve an embedder-provided module for analysis
|
|
17
|
-
scriptc build --lib --profile <p.json> library mode: compile the profile's entry
|
|
18
|
-
module to a linkable static archive
|
|
19
|
-
(<name>.lib.a) exporting the
|
|
20
|
-
profile-declared C symbols; a profile
|
|
21
|
-
with a sidecar section also gets the
|
|
22
|
-
contract sidecar JSON beside the archive
|
|
23
|
-
|
|
24
|
-
Options:
|
|
25
|
-
-o, --out <path> output path (default: .scriptc/<name>[.exe|.wasm])
|
|
26
|
-
--backend <b> code generator. llvm is the default and the output that
|
|
27
|
-
ships; c emits readable C for inspecting what the
|
|
28
|
-
compiler produced, and program behavior is identical
|
|
29
|
-
either way. On native targets, a program outside the LLVM tier still
|
|
30
|
-
builds — the default lane emits C for it and a one-line
|
|
31
|
-
stderr note names the construct — while an explicit
|
|
32
|
-
--backend llvm fails with that construct named
|
|
33
|
-
wasm32-wasi is LLVM-only unless --backend c is explicit;
|
|
34
|
-
its C inspection lane accepts async-free programs only
|
|
35
|
-
--from-c treat input as a C (or .ll) file (toolchain plumbing/debugging)
|
|
36
|
-
--keep-c keep the generated program TU next to the executable
|
|
37
|
-
(default; the .ll — or the .c under --backend=c or
|
|
38
|
-
when the build fell back)
|
|
39
|
-
--no-keep-c delete the generated program TU after compiling
|
|
40
|
-
--emit-ir also write the IR as JSON next to the executable
|
|
41
|
-
--sanitize build with ASan + runtime RC audit
|
|
42
|
-
--dynamic embed the dynamic engine (adds ~620KB; static stays the default)
|
|
43
|
-
--ffi <file> bind signature-only TypeScript declarations to native
|
|
44
|
-
C symbols and link the manifest's archives/libraries
|
|
45
|
-
--npm-static <pkg[,pkg…]|auto>
|
|
46
|
-
compile the named npm packages' shipped JS statically as
|
|
47
|
-
program modules (repeatable; "auto" opts in every eligible
|
|
48
|
-
direct import: own .d.ts, unminified JS, no build-transform
|
|
49
|
-
markers). A package preflight refuses falls back to the
|
|
50
|
-
island (--dynamic) with a coverage-report note — opt-in,
|
|
51
|
-
experimental
|
|
52
|
-
--provenance-sources
|
|
53
|
-
EXPERIMENTAL: compile npm dependencies from their
|
|
54
|
-
provenance-attested SOURCE (fetched at the attested
|
|
55
|
-
commit) as static program modules; packages without a
|
|
56
|
-
usable attestation keep the island path (a note, never
|
|
57
|
-
a failure)
|
|
58
|
-
--external-types <specifier=file.d.ts>
|
|
59
|
-
coverage only: map an exact bare module specifier to a
|
|
60
|
-
local declaration file. The declaration supplies types
|
|
61
|
-
for analysis; the host module remains an explicit
|
|
62
|
-
external-boundary blocker (repeatable)
|
|
63
|
-
-h, --help show this help
|
|
64
|
-
-v, --version print the version
|
|
65
|
-
`;
|
|
6
|
+
import { analyze, buildTargetPlatform, compile, compileC, compileLibrary, isExactExternalTypeSpecifier, renderDiagnostics, renderCoverage, resolveProvenanceSources, setProvenanceSources, warmNativeCaches } from "@scriptc/compiler";
|
|
7
|
+
import { resolveOutputOptions } from "./output-options.js";
|
|
8
|
+
import { selectOutputPaths } from "./paths.js";
|
|
9
|
+
import { CLI_OPTIONS, USAGE } from "./usage.js";
|
|
66
10
|
/** The version of the installed package. Read from the manifest rather than
|
|
67
11
|
* baked in by the build, so a stamped release and a source checkout answer
|
|
68
12
|
* the same way. */
|
|
@@ -107,25 +51,6 @@ function parseCli() {
|
|
|
107
51
|
fail(`scriptc: ${msg}\n\n${USAGE}`);
|
|
108
52
|
}
|
|
109
53
|
}
|
|
110
|
-
const CLI_OPTIONS = {
|
|
111
|
-
out: { type: "string", short: "o" },
|
|
112
|
-
// No parseArgs default: unset means the compiler's default lane
|
|
113
|
-
// (LLVM with the transparent C fallback); an explicit value pins.
|
|
114
|
-
backend: { type: "string" },
|
|
115
|
-
"from-c": { type: "boolean", default: false },
|
|
116
|
-
"keep-c": { type: "boolean", default: true },
|
|
117
|
-
"emit-ir": { type: "boolean", default: false },
|
|
118
|
-
sanitize: { type: "boolean", default: false },
|
|
119
|
-
dynamic: { type: "boolean", default: false },
|
|
120
|
-
ffi: { type: "string" },
|
|
121
|
-
"npm-static": { type: "string", multiple: true },
|
|
122
|
-
"provenance-sources": { type: "boolean", default: false },
|
|
123
|
-
"external-types": { type: "string", multiple: true },
|
|
124
|
-
lib: { type: "boolean", default: false },
|
|
125
|
-
profile: { type: "string" },
|
|
126
|
-
help: { type: "boolean", short: "h", default: false },
|
|
127
|
-
version: { type: "boolean", short: "v", default: false },
|
|
128
|
-
};
|
|
129
54
|
async function main() {
|
|
130
55
|
const { values, positionals } = parseCli();
|
|
131
56
|
const externalTypeArgs = values["external-types"] ?? [];
|
|
@@ -138,6 +63,42 @@ async function main() {
|
|
|
138
63
|
return values.help ? 0 : 1;
|
|
139
64
|
}
|
|
140
65
|
const [command, inputArg] = positionals;
|
|
66
|
+
if (command === "cache") {
|
|
67
|
+
if (inputArg !== "warm")
|
|
68
|
+
fail(`unknown cache command "${inputArg ?? ""}" (supported: warm)\n\n${USAGE}`);
|
|
69
|
+
if (values.lib || values.dynamic || values.backend !== undefined || values.emit !== undefined || values.print !== undefined || values["from-c"] || values.ffi !== undefined || values.profile !== undefined || (values["npm-static"] ?? []).length > 0 || values["provenance-sources"] || externalTypeArgs.length > 0 || values.out !== undefined || values["emit-ir"] || !values["keep-c"]) {
|
|
70
|
+
fail(`scriptc cache warm takes only native optimization/sanitizer options and profile names\n\n${USAGE}`);
|
|
71
|
+
}
|
|
72
|
+
const optimization = values.optimization;
|
|
73
|
+
if (optimization !== undefined && optimization !== "release" && optimization !== "dev") {
|
|
74
|
+
fail(`unknown optimization "${optimization}" (supported: release, dev)\n\n${USAGE}`);
|
|
75
|
+
}
|
|
76
|
+
const profileArgs = positionals.slice(2);
|
|
77
|
+
const knownProfiles = new Set(["runtime", "tls", "dynamic"]);
|
|
78
|
+
for (const profile of profileArgs) {
|
|
79
|
+
if (!knownProfiles.has(profile)) {
|
|
80
|
+
fail(`unknown cache warm profile "${profile}" (supported: runtime, tls, dynamic)`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
let result;
|
|
84
|
+
try {
|
|
85
|
+
result = await warmNativeCaches({
|
|
86
|
+
...(optimization === undefined ? {} : { optimization }),
|
|
87
|
+
sanitize: values.sanitize,
|
|
88
|
+
...(profileArgs.length === 0
|
|
89
|
+
? {}
|
|
90
|
+
: { profiles: profileArgs }),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
fail(`scriptc: ${error instanceof Error ? error.message : String(error)}`);
|
|
95
|
+
}
|
|
96
|
+
process.stdout.write(`${result.cacheRoot}\n`);
|
|
97
|
+
for (const profile of result.profiles) {
|
|
98
|
+
process.stdout.write(`${profile.profile}\t${Math.round(profile.elapsedMs)}ms\n`);
|
|
99
|
+
}
|
|
100
|
+
return 0;
|
|
101
|
+
}
|
|
141
102
|
if (command !== "build" && command !== "run" && command !== "coverage") {
|
|
142
103
|
fail(`unknown command "${command}"\n\n${USAGE}`);
|
|
143
104
|
}
|
|
@@ -156,8 +117,8 @@ async function main() {
|
|
|
156
117
|
if (inputArg) {
|
|
157
118
|
fail("scriptc build --lib takes no input positional: the profile names the entry module");
|
|
158
119
|
}
|
|
159
|
-
if (values.dynamic || values.backend !== undefined || values.ffi !== undefined || (values["npm-static"] ?? []).length > 0 || externalTypeArgs.length > 0) {
|
|
160
|
-
fail("scriptc build --lib takes no --dynamic/--backend/--npm-static/--ffi/--external-types: the profile pins the emission, npm imports are judged automatically, outbound FFI belongs to executable builds, and external type mappings belong to coverage");
|
|
120
|
+
if (values.dynamic || values.backend !== undefined || values.emit !== undefined || values.print !== undefined || values.optimization !== undefined || values.ffi !== undefined || (values["npm-static"] ?? []).length > 0 || externalTypeArgs.length > 0) {
|
|
121
|
+
fail("scriptc build --lib takes no --dynamic/--backend/--emit/--print/--optimization/--npm-static/--ffi/--external-types: the profile pins the emission and optimization, npm imports are judged automatically, outbound FFI belongs to executable builds, and external type mappings belong to coverage");
|
|
161
122
|
}
|
|
162
123
|
const profilePath = resolve(profileArg);
|
|
163
124
|
const libOutDir = values.out ? dirname(resolve(values.out)) : join(dirname(profilePath), ".scriptc");
|
|
@@ -170,7 +131,7 @@ async function main() {
|
|
|
170
131
|
});
|
|
171
132
|
if (!result.ok) {
|
|
172
133
|
const color = process.stderr.isTTY ?? false;
|
|
173
|
-
process.stderr.write(
|
|
134
|
+
process.stderr.write(renderDiagnostics(result.diagnostics, result.sourceTexts, { color }) + "\n");
|
|
174
135
|
const n = result.diagnostics.length;
|
|
175
136
|
process.stderr.write(`\n${n} error${n === 1 ? "" : "s"}.\n`);
|
|
176
137
|
return 1;
|
|
@@ -184,9 +145,25 @@ async function main() {
|
|
|
184
145
|
process.stdout.write(`${result.sidecarPath}\n`);
|
|
185
146
|
return 0;
|
|
186
147
|
}
|
|
148
|
+
if (values["emit-ir"] && (command === "build" || command === "run")) {
|
|
149
|
+
process.stderr.write("scriptc: warning: --emit-ir is deprecated; use --emit=ir for IR as the primary output\n");
|
|
150
|
+
}
|
|
187
151
|
if (!inputArg)
|
|
188
152
|
fail(`missing input file\n\n${USAGE}`);
|
|
189
153
|
const input = resolve(inputArg);
|
|
154
|
+
if (command === "coverage" && values.emit !== undefined) {
|
|
155
|
+
fail(`--emit is a build/run option\n\n${USAGE}`);
|
|
156
|
+
}
|
|
157
|
+
if (values.print !== undefined && values.print !== "native-link-info") {
|
|
158
|
+
fail(`unknown print kind "${values.print}" (supported: native-link-info)\n\n${USAGE}`);
|
|
159
|
+
}
|
|
160
|
+
const printNativeLinkInfo = values.print === "native-link-info";
|
|
161
|
+
if (printNativeLinkInfo && command !== "build") {
|
|
162
|
+
fail(`--print=native-link-info is a build option\n\n${USAGE}`);
|
|
163
|
+
}
|
|
164
|
+
if (printNativeLinkInfo && values.emit !== undefined && values.emit !== "obj") {
|
|
165
|
+
fail(`--print=native-link-info requires --emit=obj\n\n${USAGE}`);
|
|
166
|
+
}
|
|
190
167
|
if (externalTypeArgs.length > 0 && command !== "coverage") {
|
|
191
168
|
fail(`--external-types is a coverage-only option\n\n${USAGE}`);
|
|
192
169
|
}
|
|
@@ -218,10 +195,30 @@ async function main() {
|
|
|
218
195
|
externalTypes[specifier] = declarationPath;
|
|
219
196
|
}
|
|
220
197
|
const ffiProfilePath = values.ffi !== undefined ? resolve(values.ffi) : undefined;
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
fail(`unknown backend "${backend}" (supported: c, llvm)\n\n${USAGE}`);
|
|
198
|
+
if (values.backend !== undefined && values.backend !== "c" && values.backend !== "llvm") {
|
|
199
|
+
fail(`unknown backend "${values.backend}" (supported: c, llvm)\n\n${USAGE}`);
|
|
224
200
|
}
|
|
201
|
+
const optimization = values.optimization;
|
|
202
|
+
if (optimization !== undefined && optimization !== "release" && optimization !== "dev") {
|
|
203
|
+
fail(`unknown optimization "${optimization}" (supported: release, dev)\n\n${USAGE}`);
|
|
204
|
+
}
|
|
205
|
+
const output = command === "coverage"
|
|
206
|
+
? null
|
|
207
|
+
: resolveOutputOptions(command, {
|
|
208
|
+
...(values.emit === undefined && !printNativeLinkInfo
|
|
209
|
+
? {}
|
|
210
|
+
: { emit: values.emit ?? "obj" }),
|
|
211
|
+
emitIr: values["emit-ir"],
|
|
212
|
+
...(values.backend === undefined ? {} : { backend: values.backend }),
|
|
213
|
+
fromC: values["from-c"],
|
|
214
|
+
keepC: values["keep-c"],
|
|
215
|
+
sanitize: values.sanitize,
|
|
216
|
+
...(values.optimization === undefined ? {} : { optimization: values.optimization }),
|
|
217
|
+
...(values.ffi === undefined ? {} : { ffi: values.ffi }),
|
|
218
|
+
});
|
|
219
|
+
if (output !== null && !output.ok)
|
|
220
|
+
fail(`${output.message}\n\n${USAGE}`);
|
|
221
|
+
const backend = output?.ok ? output.backend : undefined;
|
|
225
222
|
// --npm-static: repeatable and comma-splittable; the literal "auto"
|
|
226
223
|
// switches to eligibility-based detection (mixing "auto" with names
|
|
227
224
|
// is rejected — the shapes answer different questions).
|
|
@@ -259,30 +256,41 @@ async function main() {
|
|
|
259
256
|
process.stdout.write(renderCoverage(coverage, { color, sourceTexts }) + "\n");
|
|
260
257
|
return coverage.preflightFailed ? 1 : 0;
|
|
261
258
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
const outPath =
|
|
259
|
+
if (output === null || !output.ok)
|
|
260
|
+
throw new Error("internal output-option state");
|
|
261
|
+
const { outDir, outPath, defaultOutputPath } = selectOutputPaths(input, output.cliOutputKind, values.out);
|
|
262
|
+
let nativeLinkInfo;
|
|
265
263
|
const build = async () => {
|
|
266
264
|
if (values["from-c"]) {
|
|
267
265
|
if (ffiProfilePath !== undefined) {
|
|
268
266
|
fail("--ffi is a TypeScript/JavaScript compiler feature and cannot be combined with --from-c");
|
|
269
267
|
}
|
|
270
|
-
await compileC({
|
|
268
|
+
await compileC({
|
|
269
|
+
cPath: input,
|
|
270
|
+
outPath,
|
|
271
|
+
sanitize: values.sanitize,
|
|
272
|
+
dynamic: values.dynamic,
|
|
273
|
+
...(optimization !== undefined ? { optimization } : {}),
|
|
274
|
+
});
|
|
271
275
|
return outPath;
|
|
272
276
|
}
|
|
273
277
|
const result = await compile(input, {
|
|
274
278
|
outPath,
|
|
275
279
|
outDir,
|
|
276
|
-
|
|
280
|
+
outputKind: output.outputKind,
|
|
281
|
+
defaultOutputPath,
|
|
282
|
+
emitIr: output.emitIr,
|
|
277
283
|
sanitize: values.sanitize,
|
|
278
284
|
dynamic: values.dynamic,
|
|
279
285
|
...(backend !== undefined ? { backend } : {}),
|
|
286
|
+
...(optimization !== undefined ? { optimization } : {}),
|
|
280
287
|
...(npmStatic !== undefined ? { npmStatic } : {}),
|
|
281
288
|
...(ffiProfilePath !== undefined ? { ffiProfilePath } : {}),
|
|
289
|
+
...(printNativeLinkInfo ? { nativeLinkInfo: true } : {}),
|
|
282
290
|
});
|
|
283
291
|
if (!result.ok) {
|
|
284
292
|
const color = process.stderr.isTTY ?? false;
|
|
285
|
-
process.stderr.write(
|
|
293
|
+
process.stderr.write(renderDiagnostics(result.diagnostics, result.sourceTexts, { color }) + "\n");
|
|
286
294
|
const n = result.diagnostics.length;
|
|
287
295
|
process.stderr.write(`\n${n} error${n === 1 ? "" : "s"}.\n`);
|
|
288
296
|
throw new CliExit(1);
|
|
@@ -292,12 +300,17 @@ async function main() {
|
|
|
292
300
|
// names the refusal. A successful LLVM build is the documented default
|
|
293
301
|
// (and the kept .ll next to the binary is the durable record), and an
|
|
294
302
|
// explicit --backend was the user's own choice — neither gets a line.
|
|
295
|
-
if (result.
|
|
296
|
-
|
|
303
|
+
if (result.artifact.kind === "exe") {
|
|
304
|
+
if (result.artifact.llvmRefusal !== undefined) {
|
|
305
|
+
process.stderr.write(`scriptc: backend c (llvm refused: ${result.artifact.llvmRefusal})\n`);
|
|
306
|
+
}
|
|
307
|
+
if (!values["keep-c"])
|
|
308
|
+
rmSync(result.artifact.translationUnitPath, { force: true });
|
|
297
309
|
}
|
|
298
|
-
if (
|
|
299
|
-
|
|
300
|
-
|
|
310
|
+
else if (result.artifact.kind === "obj") {
|
|
311
|
+
nativeLinkInfo = result.artifact.nativeLinkInfo;
|
|
312
|
+
}
|
|
313
|
+
return result.artifact.path;
|
|
301
314
|
};
|
|
302
315
|
const binary = await build();
|
|
303
316
|
if (command === "run") {
|
|
@@ -324,7 +337,16 @@ async function main() {
|
|
|
324
337
|
});
|
|
325
338
|
});
|
|
326
339
|
}
|
|
327
|
-
|
|
340
|
+
if (printNativeLinkInfo) {
|
|
341
|
+
if (nativeLinkInfo === undefined)
|
|
342
|
+
throw new Error("internal native-link-info state");
|
|
343
|
+
// Keep stdout pure JSON for tooling; the ordinary artifact path is in
|
|
344
|
+
// program.object inside the document.
|
|
345
|
+
process.stdout.write(`${JSON.stringify(nativeLinkInfo, null, 2)}\n`);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
process.stdout.write(`${binary}\n`);
|
|
349
|
+
}
|
|
328
350
|
return 0;
|
|
329
351
|
}
|
|
330
352
|
try {
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { CompileOutputKind } from "@scriptc/compiler";
|
|
2
|
+
import type { CliOutputKind } from "./paths.js";
|
|
3
|
+
export interface OutputOptionValues {
|
|
4
|
+
emit?: string;
|
|
5
|
+
emitIr: boolean;
|
|
6
|
+
backend?: string;
|
|
7
|
+
fromC: boolean;
|
|
8
|
+
keepC: boolean;
|
|
9
|
+
sanitize: boolean;
|
|
10
|
+
optimization?: string;
|
|
11
|
+
ffi?: string;
|
|
12
|
+
}
|
|
13
|
+
export type OutputOptionResolution = {
|
|
14
|
+
ok: true;
|
|
15
|
+
outputKind: CompileOutputKind;
|
|
16
|
+
cliOutputKind: CliOutputKind;
|
|
17
|
+
backend?: "c" | "llvm";
|
|
18
|
+
emitIr: boolean;
|
|
19
|
+
deprecateEmitIr: boolean;
|
|
20
|
+
} | {
|
|
21
|
+
ok: false;
|
|
22
|
+
message: string;
|
|
23
|
+
};
|
|
24
|
+
/** Pure compatibility/validation matrix for build/run output selection. */
|
|
25
|
+
export declare function resolveOutputOptions(command: "build" | "run", values: OutputOptionValues): OutputOptionResolution;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const SOURCE_KINDS = new Set(["ir", "c", "llvm"]);
|
|
2
|
+
const NATIVE_ARTIFACT_KINDS = new Set(["asm", "obj"]);
|
|
3
|
+
/** Pure compatibility/validation matrix for build/run output selection. */
|
|
4
|
+
export function resolveOutputOptions(command, values) {
|
|
5
|
+
if (values.backend !== undefined && values.backend !== "c" && values.backend !== "llvm") {
|
|
6
|
+
return { ok: false, message: `unknown backend "${values.backend}" (supported: c, llvm)` };
|
|
7
|
+
}
|
|
8
|
+
const backend = values.backend;
|
|
9
|
+
const rawEmit = values.emit;
|
|
10
|
+
if (rawEmit !== undefined && rawEmit !== "ir" && rawEmit !== "c" && rawEmit !== "llvm" &&
|
|
11
|
+
rawEmit !== "asm" && rawEmit !== "obj" && rawEmit !== "exe") {
|
|
12
|
+
return {
|
|
13
|
+
ok: false,
|
|
14
|
+
message: `unknown emit kind "${rawEmit}" (supported: ir, c, llvm, asm, obj, exe)`,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const emit = (rawEmit ?? "exe");
|
|
18
|
+
if (command === "run" && emit !== "exe") {
|
|
19
|
+
return { ok: false, message: `scriptc run requires --emit=exe` };
|
|
20
|
+
}
|
|
21
|
+
if (values.emitIr && rawEmit !== undefined && emit !== "ir" && emit !== "exe") {
|
|
22
|
+
return { ok: false, message: `--emit-ir cannot be combined with --emit=${emit}; use --emit=ir` };
|
|
23
|
+
}
|
|
24
|
+
if (values.emitIr && emit === "ir") {
|
|
25
|
+
return { ok: false, message: `--emit-ir and --emit=ir select the same output; use --emit=ir` };
|
|
26
|
+
}
|
|
27
|
+
if (values.fromC && emit !== "exe") {
|
|
28
|
+
return { ok: false, message: `--from-c only supports --emit=exe` };
|
|
29
|
+
}
|
|
30
|
+
if (emit === "ir" && backend !== undefined) {
|
|
31
|
+
return { ok: false, message: `--emit=ir cannot be combined with --backend; IR is emitted before backend selection` };
|
|
32
|
+
}
|
|
33
|
+
if (emit === "c" && backend === "llvm") {
|
|
34
|
+
return { ok: false, message: `--emit=c cannot be combined with --backend=llvm` };
|
|
35
|
+
}
|
|
36
|
+
if ((emit === "llvm" || NATIVE_ARTIFACT_KINDS.has(emit)) && backend === "c") {
|
|
37
|
+
return { ok: false, message: `--emit=${emit} cannot be combined with --backend=c` };
|
|
38
|
+
}
|
|
39
|
+
if (SOURCE_KINDS.has(emit)) {
|
|
40
|
+
if (!values.keepC) {
|
|
41
|
+
return { ok: false, message: `--no-keep-c is only meaningful with --emit=exe` };
|
|
42
|
+
}
|
|
43
|
+
if (values.sanitize) {
|
|
44
|
+
return { ok: false, message: `--sanitize is only meaningful with --emit=exe` };
|
|
45
|
+
}
|
|
46
|
+
if (values.optimization !== undefined) {
|
|
47
|
+
return { ok: false, message: `--optimization is only meaningful with --emit=exe` };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (NATIVE_ARTIFACT_KINDS.has(emit) && !values.keepC) {
|
|
51
|
+
return { ok: false, message: `--no-keep-c is only meaningful with --emit=exe` };
|
|
52
|
+
}
|
|
53
|
+
const outputKind = emit;
|
|
54
|
+
return {
|
|
55
|
+
ok: true,
|
|
56
|
+
outputKind,
|
|
57
|
+
cliOutputKind: emit,
|
|
58
|
+
...(emit === "c"
|
|
59
|
+
? { backend: "c" }
|
|
60
|
+
: emit === "llvm" || NATIVE_ARTIFACT_KINDS.has(emit)
|
|
61
|
+
? { backend: "llvm" }
|
|
62
|
+
: backend === undefined ? {} : { backend }),
|
|
63
|
+
emitIr: values.emitIr && emit === "exe",
|
|
64
|
+
deprecateEmitIr: values.emitIr,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=output-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-options.js","sourceRoot":"","sources":["../src/output-options.ts"],"names":[],"mappings":"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"}
|
package/dist/paths.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
export type CliOutputKind = "ir" | "c" | "llvm" | "asm" | "obj" | "exe";
|
|
2
|
+
export declare function defaultOutputName(stem: string, kind: CliOutputKind, platform?: string): string;
|
|
3
|
+
export interface OutputPaths {
|
|
4
|
+
outDir: string;
|
|
5
|
+
outPath: string;
|
|
6
|
+
defaultOutputPath: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** One authority for explicit and default primary artifact paths. */
|
|
9
|
+
export declare function selectOutputPaths(input: string, kind: CliOutputKind, explicitOut?: string, platform?: string): OutputPaths;
|
|
1
10
|
/** Default executable filename for the build target. Explicit --out paths
|
|
2
11
|
* stay exact; only scriptc's generated default needs the Windows PE suffix. */
|
|
3
12
|
export declare function defaultExecutableName(stem: string, platform?: string): string;
|
package/dist/paths.js
CHANGED
|
@@ -1,13 +1,45 @@
|
|
|
1
1
|
import { tmpdir } from "node:os";
|
|
2
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
2
3
|
import { buildTargetPlatform, wasiGuestPath } from "@scriptc/compiler";
|
|
4
|
+
const POSIX_SUFFIXES = {
|
|
5
|
+
ir: ".ir.json",
|
|
6
|
+
c: ".c",
|
|
7
|
+
llvm: ".ll",
|
|
8
|
+
asm: ".s",
|
|
9
|
+
obj: ".o",
|
|
10
|
+
exe: "",
|
|
11
|
+
};
|
|
12
|
+
const WINDOWS_SUFFIXES = {
|
|
13
|
+
...POSIX_SUFFIXES,
|
|
14
|
+
asm: ".asm",
|
|
15
|
+
obj: ".obj",
|
|
16
|
+
exe: ".exe",
|
|
17
|
+
};
|
|
18
|
+
export function defaultOutputName(stem, kind, platform) {
|
|
19
|
+
const selectedPlatform = platform ?? (kind === "exe" ? buildTargetPlatform() : process.platform);
|
|
20
|
+
if (kind === "exe" && selectedPlatform === "wasi")
|
|
21
|
+
return `${stem}.wasm`;
|
|
22
|
+
return `${stem}${(selectedPlatform === "win32" ? WINDOWS_SUFFIXES : POSIX_SUFFIXES)[kind]}`;
|
|
23
|
+
}
|
|
24
|
+
/** One authority for explicit and default primary artifact paths. */
|
|
25
|
+
export function selectOutputPaths(input, kind, explicitOut, platform) {
|
|
26
|
+
const absoluteInput = resolve(input);
|
|
27
|
+
const outDir = explicitOut === undefined
|
|
28
|
+
? join(dirname(absoluteInput), ".scriptc")
|
|
29
|
+
: dirname(resolve(explicitOut));
|
|
30
|
+
const stem = basename(absoluteInput).replace(/\.(ts|mts|cts|js|mjs|cjs|c|ll)$/, "");
|
|
31
|
+
return {
|
|
32
|
+
outDir,
|
|
33
|
+
outPath: explicitOut === undefined
|
|
34
|
+
? join(outDir, defaultOutputName(stem, kind, platform))
|
|
35
|
+
: resolve(explicitOut),
|
|
36
|
+
defaultOutputPath: explicitOut === undefined,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
3
39
|
/** Default executable filename for the build target. Explicit --out paths
|
|
4
40
|
* stay exact; only scriptc's generated default needs the Windows PE suffix. */
|
|
5
41
|
export function defaultExecutableName(stem, platform = buildTargetPlatform()) {
|
|
6
|
-
|
|
7
|
-
return `${stem}.exe`;
|
|
8
|
-
if (platform === "wasi")
|
|
9
|
-
return `${stem}.wasm`;
|
|
10
|
-
return stem;
|
|
42
|
+
return defaultOutputName(stem, "exe", platform);
|
|
11
43
|
}
|
|
12
44
|
/** Host paths exposed by `scriptc run` to a WASI Preview 1 module. Guest
|
|
13
45
|
* `/tmp` maps to the host's real platform temp directory instead of assuming
|
package/dist/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
package/dist/usage.d.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export declare const USAGE = "scriptc \u2014 TypeScript/JavaScript to native and WebAssembly executables (experimental)\n\nUsage:\n scriptc build <file.ts|.js> [options] compile to an executable or source artifact\n scriptc run <file.ts|.js> [options] compile and run\n scriptc coverage <file.ts|.js> how much compiles statically, and why not\n scriptc coverage <file.ts|.js> --dynamic what a --dynamic build compiles, and what still blocks it\n scriptc coverage <file.ts|.js> --external-types <specifier=file.d.ts>\n type-resolve an embedder-provided module for analysis\n scriptc build --lib --profile <p.json> library mode: compile the profile's entry\n module to a linkable static archive\n (<name>.lib.a) exporting the\n profile-declared C symbols; a profile\n with a sidecar section also gets the\n contract sidecar JSON beside the archive\n scriptc cache warm [runtime|tls|dynamic\u2026] prebuild expensive native cache families\n for the current compiler/SDK/target\n\nOptions:\n -o, --out <path> primary output path (default: .scriptc/<name><suffix>)\n --emit <kind> primary output: ir, c, llvm, asm, obj, or exe\n (default: exe). asm/obj currently support macOS 15+ arm64\n --print <kind> print machine-readable metadata instead of the output path\n (native-link-info implies --emit=obj and never links)\n --backend <b> code generator. llvm is the default and the output that\n ships; c emits readable C for inspecting what the\n compiler produced, and program behavior is identical\n either way. On native targets, a program outside the LLVM tier still\n builds \u2014 the default lane emits C for it and a one-line\n stderr note names the construct \u2014 while an explicit\n --backend llvm fails with that construct named\n wasm32-wasi is LLVM-only unless --backend c is explicit;\n its C inspection lane accepts async-free programs only\n --optimization <release|dev>\n native optimization posture (default: release/-O2). dev\n uses -O0 and stable cached LLVM object shards for faster\n edits of large programs\n --from-c treat input as a C (or .ll) file (toolchain plumbing/debugging)\n --keep-c keep the generated program TU next to the executable\n (default; the .ll \u2014 or the .c under --backend=c or\n when the build fell back)\n --no-keep-c delete the generated program TU after compiling\n --emit-ir also write IR beside an executable or library archive;\n deprecated for executables: use --emit=ir for primary IR\n --sanitize build with ASan + runtime RC audit\n --dynamic embed the dynamic engine (adds ~620KB; static stays the default)\n --ffi <file> bind signature-only TypeScript declarations to native\n C symbols and link the manifest's archives/libraries\n --npm-static <pkg[,pkg\u2026]|auto>\n compile the named npm packages' shipped JS statically as\n program modules (repeatable; \"auto\" opts in every eligible\n direct import: own .d.ts, unminified JS, no build-transform\n markers). A package preflight refuses falls back to the\n island (--dynamic) with a coverage-report note \u2014 opt-in,\n experimental\n --provenance-sources\n EXPERIMENTAL: compile npm dependencies from their\n provenance-attested SOURCE (fetched at the attested\n commit) as static program modules; packages without a\n usable attestation keep the island path (a note, never\n a failure)\n --external-types <specifier=file.d.ts>\n coverage only: map an exact bare module specifier to a\n local declaration file. The declaration supplies types\n for analysis; the host module remains an explicit\n external-boundary blocker (repeatable)\n -h, --help show this help\n -v, --version print the version\n";
|
|
2
|
+
export declare const CLI_OPTIONS: {
|
|
3
|
+
readonly out: {
|
|
4
|
+
readonly type: "string";
|
|
5
|
+
readonly short: "o";
|
|
6
|
+
};
|
|
7
|
+
readonly emit: {
|
|
8
|
+
readonly type: "string";
|
|
9
|
+
};
|
|
10
|
+
readonly print: {
|
|
11
|
+
readonly type: "string";
|
|
12
|
+
};
|
|
13
|
+
readonly backend: {
|
|
14
|
+
readonly type: "string";
|
|
15
|
+
};
|
|
16
|
+
readonly optimization: {
|
|
17
|
+
readonly type: "string";
|
|
18
|
+
};
|
|
19
|
+
readonly "from-c": {
|
|
20
|
+
readonly type: "boolean";
|
|
21
|
+
readonly default: false;
|
|
22
|
+
};
|
|
23
|
+
readonly "keep-c": {
|
|
24
|
+
readonly type: "boolean";
|
|
25
|
+
readonly default: true;
|
|
26
|
+
};
|
|
27
|
+
readonly "emit-ir": {
|
|
28
|
+
readonly type: "boolean";
|
|
29
|
+
readonly default: false;
|
|
30
|
+
};
|
|
31
|
+
readonly sanitize: {
|
|
32
|
+
readonly type: "boolean";
|
|
33
|
+
readonly default: false;
|
|
34
|
+
};
|
|
35
|
+
readonly dynamic: {
|
|
36
|
+
readonly type: "boolean";
|
|
37
|
+
readonly default: false;
|
|
38
|
+
};
|
|
39
|
+
readonly ffi: {
|
|
40
|
+
readonly type: "string";
|
|
41
|
+
};
|
|
42
|
+
readonly "npm-static": {
|
|
43
|
+
readonly type: "string";
|
|
44
|
+
readonly multiple: true;
|
|
45
|
+
};
|
|
46
|
+
readonly "provenance-sources": {
|
|
47
|
+
readonly type: "boolean";
|
|
48
|
+
readonly default: false;
|
|
49
|
+
};
|
|
50
|
+
readonly "external-types": {
|
|
51
|
+
readonly type: "string";
|
|
52
|
+
readonly multiple: true;
|
|
53
|
+
};
|
|
54
|
+
readonly lib: {
|
|
55
|
+
readonly type: "boolean";
|
|
56
|
+
readonly default: false;
|
|
57
|
+
};
|
|
58
|
+
readonly profile: {
|
|
59
|
+
readonly type: "string";
|
|
60
|
+
};
|
|
61
|
+
readonly help: {
|
|
62
|
+
readonly type: "boolean";
|
|
63
|
+
readonly short: "h";
|
|
64
|
+
readonly default: false;
|
|
65
|
+
};
|
|
66
|
+
readonly version: {
|
|
67
|
+
readonly type: "boolean";
|
|
68
|
+
readonly short: "v";
|
|
69
|
+
readonly default: false;
|
|
70
|
+
};
|
|
71
|
+
};
|
package/dist/usage.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
export const USAGE = `scriptc — TypeScript/JavaScript to native and WebAssembly executables (experimental)
|
|
2
|
+
|
|
3
|
+
Usage:
|
|
4
|
+
scriptc build <file.ts|.js> [options] compile to an executable or source artifact
|
|
5
|
+
scriptc run <file.ts|.js> [options] compile and run
|
|
6
|
+
scriptc coverage <file.ts|.js> how much compiles statically, and why not
|
|
7
|
+
scriptc coverage <file.ts|.js> --dynamic what a --dynamic build compiles, and what still blocks it
|
|
8
|
+
scriptc coverage <file.ts|.js> --external-types <specifier=file.d.ts>
|
|
9
|
+
type-resolve an embedder-provided module for analysis
|
|
10
|
+
scriptc build --lib --profile <p.json> library mode: compile the profile's entry
|
|
11
|
+
module to a linkable static archive
|
|
12
|
+
(<name>.lib.a) exporting the
|
|
13
|
+
profile-declared C symbols; a profile
|
|
14
|
+
with a sidecar section also gets the
|
|
15
|
+
contract sidecar JSON beside the archive
|
|
16
|
+
scriptc cache warm [runtime|tls|dynamic…] prebuild expensive native cache families
|
|
17
|
+
for the current compiler/SDK/target
|
|
18
|
+
|
|
19
|
+
Options:
|
|
20
|
+
-o, --out <path> primary output path (default: .scriptc/<name><suffix>)
|
|
21
|
+
--emit <kind> primary output: ir, c, llvm, asm, obj, or exe
|
|
22
|
+
(default: exe). asm/obj currently support macOS 15+ arm64
|
|
23
|
+
--print <kind> print machine-readable metadata instead of the output path
|
|
24
|
+
(native-link-info implies --emit=obj and never links)
|
|
25
|
+
--backend <b> code generator. llvm is the default and the output that
|
|
26
|
+
ships; c emits readable C for inspecting what the
|
|
27
|
+
compiler produced, and program behavior is identical
|
|
28
|
+
either way. On native targets, a program outside the LLVM tier still
|
|
29
|
+
builds — the default lane emits C for it and a one-line
|
|
30
|
+
stderr note names the construct — while an explicit
|
|
31
|
+
--backend llvm fails with that construct named
|
|
32
|
+
wasm32-wasi is LLVM-only unless --backend c is explicit;
|
|
33
|
+
its C inspection lane accepts async-free programs only
|
|
34
|
+
--optimization <release|dev>
|
|
35
|
+
native optimization posture (default: release/-O2). dev
|
|
36
|
+
uses -O0 and stable cached LLVM object shards for faster
|
|
37
|
+
edits of large programs
|
|
38
|
+
--from-c treat input as a C (or .ll) file (toolchain plumbing/debugging)
|
|
39
|
+
--keep-c keep the generated program TU next to the executable
|
|
40
|
+
(default; the .ll — or the .c under --backend=c or
|
|
41
|
+
when the build fell back)
|
|
42
|
+
--no-keep-c delete the generated program TU after compiling
|
|
43
|
+
--emit-ir also write IR beside an executable or library archive;
|
|
44
|
+
deprecated for executables: use --emit=ir for primary IR
|
|
45
|
+
--sanitize build with ASan + runtime RC audit
|
|
46
|
+
--dynamic embed the dynamic engine (adds ~620KB; static stays the default)
|
|
47
|
+
--ffi <file> bind signature-only TypeScript declarations to native
|
|
48
|
+
C symbols and link the manifest's archives/libraries
|
|
49
|
+
--npm-static <pkg[,pkg…]|auto>
|
|
50
|
+
compile the named npm packages' shipped JS statically as
|
|
51
|
+
program modules (repeatable; "auto" opts in every eligible
|
|
52
|
+
direct import: own .d.ts, unminified JS, no build-transform
|
|
53
|
+
markers). A package preflight refuses falls back to the
|
|
54
|
+
island (--dynamic) with a coverage-report note — opt-in,
|
|
55
|
+
experimental
|
|
56
|
+
--provenance-sources
|
|
57
|
+
EXPERIMENTAL: compile npm dependencies from their
|
|
58
|
+
provenance-attested SOURCE (fetched at the attested
|
|
59
|
+
commit) as static program modules; packages without a
|
|
60
|
+
usable attestation keep the island path (a note, never
|
|
61
|
+
a failure)
|
|
62
|
+
--external-types <specifier=file.d.ts>
|
|
63
|
+
coverage only: map an exact bare module specifier to a
|
|
64
|
+
local declaration file. The declaration supplies types
|
|
65
|
+
for analysis; the host module remains an explicit
|
|
66
|
+
external-boundary blocker (repeatable)
|
|
67
|
+
-h, --help show this help
|
|
68
|
+
-v, --version print the version
|
|
69
|
+
`;
|
|
70
|
+
export const CLI_OPTIONS = {
|
|
71
|
+
out: { type: "string", short: "o" },
|
|
72
|
+
emit: { type: "string" },
|
|
73
|
+
print: { type: "string" },
|
|
74
|
+
backend: { type: "string" },
|
|
75
|
+
optimization: { type: "string" },
|
|
76
|
+
"from-c": { type: "boolean", default: false },
|
|
77
|
+
"keep-c": { type: "boolean", default: true },
|
|
78
|
+
"emit-ir": { type: "boolean", default: false },
|
|
79
|
+
sanitize: { type: "boolean", default: false },
|
|
80
|
+
dynamic: { type: "boolean", default: false },
|
|
81
|
+
ffi: { type: "string" },
|
|
82
|
+
"npm-static": { type: "string", multiple: true },
|
|
83
|
+
"provenance-sources": { type: "boolean", default: false },
|
|
84
|
+
"external-types": { type: "string", multiple: true },
|
|
85
|
+
lib: { type: "boolean", default: false },
|
|
86
|
+
profile: { type: "string" },
|
|
87
|
+
help: { type: "boolean", short: "h", default: false },
|
|
88
|
+
version: { type: "boolean", short: "v", default: false },
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEpB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;IACnC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxB,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACzB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC3B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAChC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;IAC7C,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;IAC5C,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;IAC9C,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;IAC7C,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;IAC5C,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACvB,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAChD,oBAAoB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;IACzD,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IACpD,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;IACxC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;IACrD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;CAChD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scriptc",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.36",
|
|
4
4
|
"description": "Compile ordinary TypeScript and JavaScript to small, fast native executables — no Node, no V8, no JavaScript engine in the binary",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://scriptc.dev",
|
|
@@ -14,15 +14,17 @@
|
|
|
14
14
|
"scriptc": "dist/bootstrap.js"
|
|
15
15
|
},
|
|
16
16
|
"files": [
|
|
17
|
-
"dist"
|
|
17
|
+
"dist",
|
|
18
|
+
"scripts"
|
|
18
19
|
],
|
|
19
20
|
"engines": {
|
|
20
21
|
"node": ">=24"
|
|
21
22
|
},
|
|
22
23
|
"dependencies": {
|
|
23
|
-
"@scriptc/compiler": "0.0.
|
|
24
|
+
"@scriptc/compiler": "0.0.36"
|
|
24
25
|
},
|
|
25
26
|
"scripts": {
|
|
26
|
-
"build": "node ../../node_modules/typescript/bin/tsc -p tsconfig.json"
|
|
27
|
+
"build": "node ../../node_modules/typescript/bin/tsc -p tsconfig.json",
|
|
28
|
+
"postinstall": "node scripts/warm-cache.mjs"
|
|
27
29
|
}
|
|
28
30
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { release } from "node:os";
|
|
2
|
+
|
|
3
|
+
export function hostSupportsRuntimePack(
|
|
4
|
+
platform = process.platform,
|
|
5
|
+
architecture = process.arch,
|
|
6
|
+
hostRelease = release(),
|
|
7
|
+
) {
|
|
8
|
+
const darwinMajor = Number.parseInt(hostRelease.split(".", 1)[0] ?? "", 10);
|
|
9
|
+
return platform === "darwin" && architecture === "arm64" && darwinMajor >= 24;
|
|
10
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { hostSupportsRuntimePack } from "./runtime-pack-host.mjs";
|
|
7
|
+
|
|
8
|
+
// Workspace installs should stay cheap and deterministic: repository test
|
|
9
|
+
// images already manage cache warming explicitly. Published npm packages do
|
|
10
|
+
// not contain src/, so only installed consumers take this best-effort path.
|
|
11
|
+
const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
12
|
+
if (
|
|
13
|
+
!existsSync(join(packageRoot, "src")) &&
|
|
14
|
+
process.env["SCRIPTC_NO_CACHE"] !== "1" &&
|
|
15
|
+
// A supported macOS arm64 install already carries immutable release/dev
|
|
16
|
+
// runtime artifacts. Older macOS hosts retain the source-toolchain path.
|
|
17
|
+
!hostSupportsRuntimePack()
|
|
18
|
+
) {
|
|
19
|
+
try {
|
|
20
|
+
const { warmNativeCaches } = await import("@scriptc/compiler");
|
|
21
|
+
await warmNativeCaches();
|
|
22
|
+
} catch (error) {
|
|
23
|
+
// Installation must never depend on a native toolchain. A machine without
|
|
24
|
+
// clang/ar (or with lifecycle scripts disabled) retains ordinary lazy
|
|
25
|
+
// first-build behavior; explicit `scriptc cache warm` reports errors.
|
|
26
|
+
if (process.env["SCRIPTC_CACHE_WARM_DEBUG"] === "1") {
|
|
27
|
+
process.stderr.write(`scriptc: cache warm skipped: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|