xbintsc 0.3.14 → 0.3.15
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 +22 -22
- package/README.zh-CN.md +20 -19
- package/bin/xbintsc.js +1 -2
- package/dist/src/cli/main.js +4 -1
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/codegen/generator/tables.d.ts +5 -6
- package/dist/src/codegen/generator/tables.js +5 -6
- package/dist/src/codegen/generator/tables.js.map +1 -1
- package/dist/src/driver/index.d.ts +1 -2
- package/dist/src/driver/index.js +1 -2
- package/dist/src/driver/index.js.map +1 -1
- package/dist/src/driver/paths.d.ts +0 -9
- package/dist/src/driver/paths.js +0 -31
- package/dist/src/driver/paths.js.map +1 -1
- package/dist/src/driver/toolchain-provider.d.ts +10 -10
- package/dist/src/driver/toolchain-provider.js +9 -38
- package/dist/src/driver/toolchain-provider.js.map +1 -1
- package/dist/src/driver/toolchain.js +8 -2
- package/dist/src/driver/toolchain.js.map +1 -1
- package/dist/src/extensions/native.d.ts +2 -3
- package/dist/src/extensions/native.js +2 -3
- package/dist/src/extensions/native.js.map +1 -1
- package/dist/tests/driver/paths.test.js +1 -9
- package/dist/tests/driver/paths.test.js.map +1 -1
- package/dist/tests/driver/toolchain-provider.test.js +12 -79
- package/dist/tests/driver/toolchain-provider.test.js.map +1 -1
- package/dist/tests/e2e/native-extensions.test.d.ts +4 -5
- package/dist/tests/e2e/native-extensions.test.js +6 -7
- package/dist/tests/e2e/native-extensions.test.js.map +1 -1
- package/package.json +1 -2
- package/runtime/ext_node/fs/meta_ops.c +3 -3
- package/runtime/rt.h +3 -4
- package/runtime/rt_internal.h +10 -23
- package/runtime/xt_ext.h +0 -1
- package/runtime/xt_io.c +3 -3
- package/runtime/xt_stdlib2/helpers.inc +2 -4
- package/scripts/build-runtime.ts +7 -8
- package/scripts/coverage-runtime.ts +4 -4
- package/scripts/package-release.ts +12 -84
- package/src/cli/main.ts +4 -1
- package/src/codegen/generator/tables.ts +5 -6
- package/src/driver/index.ts +1 -9
- package/src/driver/paths.ts +0 -31
- package/src/driver/toolchain-provider.ts +12 -45
- package/src/driver/toolchain.ts +7 -2
- package/src/extensions/native.ts +2 -3
- package/dist/src/driver/toolchain-download.d.ts +0 -50
- package/dist/src/driver/toolchain-download.js +0 -102
- package/dist/src/driver/toolchain-download.js.map +0 -1
- package/dist/tests/driver/toolchain-download.test.d.ts +0 -1
- package/dist/tests/driver/toolchain-download.test.js +0 -53
- package/dist/tests/driver/toolchain-download.test.js.map +0 -1
- package/scripts/fetch-toolchain.ts +0 -101
- package/src/driver/toolchain-download.ts +0 -135
|
@@ -18,9 +18,8 @@
|
|
|
18
18
|
* {
|
|
19
19
|
* "name": "mathx",
|
|
20
20
|
* "description": "C++ math helpers",
|
|
21
|
-
* "objects": ["build/
|
|
22
|
-
* "
|
|
23
|
-
* "linkerFlagsByPlatform": { "linux": ["-lstdc++"], "darwin": ["-lc++"] },
|
|
21
|
+
* "objects": ["build/mathx.o"],
|
|
22
|
+
* "linkerFlagsByPlatform": { "linux": ["-lstdc++", "-lm"], "darwin": ["-lc++"], "win32": ["-lmsvcprt"] },
|
|
24
23
|
* "builtins": { "fastAdd": { "symbol": "mathx_add" } },
|
|
25
24
|
* "modules": {
|
|
26
25
|
* "mathx": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../../src/extensions/native.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../../src/extensions/native.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
|
-
import {
|
|
4
|
+
import { findRuntimeDir, platformSlug, releaseArchiveBase, releaseArchiveExtension, releaseArchiveFileName, } from "../../src/driver/paths.js";
|
|
5
5
|
describe("platformSlug", () => {
|
|
6
6
|
it("joins the platform and architecture", () => {
|
|
7
7
|
expect(platformSlug()).toBe(`${process.platform}-${process.arch}`);
|
|
@@ -40,13 +40,5 @@ describe("package layout", () => {
|
|
|
40
40
|
const runtime = findRuntimeDir();
|
|
41
41
|
expect(existsSync(join(runtime, "rt.h"))).toBe(true);
|
|
42
42
|
});
|
|
43
|
-
it("anchors the package root at the runtime parent and vendor beside it", () => {
|
|
44
|
-
const root = findPackageRoot();
|
|
45
|
-
expect(runtimeRootAnchor(root)).toBe(true);
|
|
46
|
-
expect(vendorRootDir()).toBe(join(root, "vendor"));
|
|
47
|
-
});
|
|
48
43
|
});
|
|
49
|
-
function runtimeRootAnchor(root) {
|
|
50
|
-
return existsSync(join(root, "runtime", "rt.h"));
|
|
51
|
-
}
|
|
52
44
|
//# sourceMappingURL=paths.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../tests/driver/paths.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../tests/driver/paths.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { tmpdir } from "node:os";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
1
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
5
2
|
import { resolveToolchain } from "../../src/driver/toolchain-provider.js";
|
|
6
3
|
import { ToolchainError } from "../../src/driver/toolchain.js";
|
|
7
|
-
// The real `findVendorDir` also looks next to the package, so a toolchain
|
|
8
|
-
// already fetched on the machine (e.g. the CI `vendor/` for Windows ARM64)
|
|
9
|
-
// would shadow the temporary one each test creates. Restrict discovery to the
|
|
10
|
-
// working directory so the tests are hermetic.
|
|
11
|
-
vi.mock("../../src/driver/paths.js", async (importOriginal) => {
|
|
12
|
-
const actual = await importOriginal();
|
|
13
|
-
const { existsSync } = await import("node:fs");
|
|
14
|
-
const { join: joinPath } = await import("node:path");
|
|
15
|
-
return {
|
|
16
|
-
...actual,
|
|
17
|
-
findVendorDir: () => {
|
|
18
|
-
const root = process.cwd();
|
|
19
|
-
const specific = joinPath(root, "vendor", `${process.platform}-${process.arch}`);
|
|
20
|
-
if (existsSync(specific))
|
|
21
|
-
return specific;
|
|
22
|
-
const generic = joinPath(root, "vendor");
|
|
23
|
-
return existsSync(generic) ? generic : undefined;
|
|
24
|
-
},
|
|
25
|
-
};
|
|
26
|
-
});
|
|
27
4
|
const saved = { ...process.env };
|
|
28
5
|
afterEach(() => {
|
|
29
6
|
process.env = { ...saved };
|
|
@@ -36,22 +13,6 @@ function runnerThatWorks(...commands) {
|
|
|
36
13
|
},
|
|
37
14
|
};
|
|
38
15
|
}
|
|
39
|
-
/** Run `fn` inside a temporary working directory and always restore it. */
|
|
40
|
-
function withWorkingDirectory(fn) {
|
|
41
|
-
const created = mkdtempSync(join(tmpdir(), "xbintsc-toolchain-"));
|
|
42
|
-
const previous = process.cwd();
|
|
43
|
-
process.chdir(created);
|
|
44
|
-
// `process.cwd()` may resolve symlinks (e.g. /var -> /private/var on macOS),
|
|
45
|
-
// so hand the caller the canonical path the provider will actually see.
|
|
46
|
-
const directory = process.cwd();
|
|
47
|
-
try {
|
|
48
|
-
return fn(directory);
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
process.chdir(previous);
|
|
52
|
-
rmSync(created, { recursive: true, force: true });
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
16
|
describe("resolveToolchain", () => {
|
|
56
17
|
it("prefers an explicit xbintsc_CLANG", () => {
|
|
57
18
|
process.env.xbintsc_CLANG = "my-clang";
|
|
@@ -93,46 +54,18 @@ describe("resolveToolchain", () => {
|
|
|
93
54
|
const toolchain = resolveToolchain(runnerThatWorks("my-clang"));
|
|
94
55
|
expect(toolchain.linkerArgs).toEqual(["--foo", "--bar"]);
|
|
95
56
|
});
|
|
96
|
-
it("
|
|
97
|
-
delete process.env.xbintsc_CLANG;
|
|
98
|
-
delete process.env.xbintsc_TOOLCHAIN;
|
|
99
|
-
withWorkingDirectory((directory) => {
|
|
100
|
-
mkdirSync(join(directory, "vendor", "bin"), { recursive: true });
|
|
101
|
-
const clang = join(directory, "vendor", "bin", "clang");
|
|
102
|
-
writeFileSync(clang, "");
|
|
103
|
-
const toolchain = resolveToolchain(runnerThatWorks(clang));
|
|
104
|
-
expect(toolchain.source).toBe("vendor");
|
|
105
|
-
expect(toolchain.clang).toBe(clang);
|
|
106
|
-
expect(toolchain.linkerArgs).toContain("-fuse-ld=lld");
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
it("ignores a vendor directory whose compiler does not work", () => {
|
|
110
|
-
delete process.env.xbintsc_CLANG;
|
|
111
|
-
delete process.env.xbintsc_TOOLCHAIN;
|
|
112
|
-
withWorkingDirectory((directory) => {
|
|
113
|
-
mkdirSync(join(directory, "vendor", "bin"), { recursive: true });
|
|
114
|
-
writeFileSync(join(directory, "vendor", "bin", "clang"), "");
|
|
115
|
-
const toolchain = resolveToolchain(runnerThatWorks("clang"));
|
|
116
|
-
expect(toolchain.source).toBe("system");
|
|
117
|
-
expect(toolchain.clang).toBe("clang");
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
it("still succeeds when an explicit compiler throws and a vendor exists", () => {
|
|
57
|
+
it("still succeeds when an explicit compiler throws", () => {
|
|
121
58
|
process.env.xbintsc_CLANG = "exploding-clang";
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
};
|
|
133
|
-
const toolchain = resolveToolchain(runner);
|
|
134
|
-
expect(toolchain.source).toBe("vendor");
|
|
135
|
-
});
|
|
59
|
+
const runner = {
|
|
60
|
+
run(command) {
|
|
61
|
+
if (command === "exploding-clang")
|
|
62
|
+
throw new Error("cannot spawn");
|
|
63
|
+
return { status: command === "clang" ? 0 : 1, stdout: "", stderr: "" };
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
const toolchain = resolveToolchain(runner);
|
|
67
|
+
expect(toolchain.source).toBe("system");
|
|
68
|
+
expect(toolchain.clang).toBe("clang");
|
|
136
69
|
});
|
|
137
70
|
it("throws when no compiler can be found at all", () => {
|
|
138
71
|
delete process.env.xbintsc_CLANG;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolchain-provider.test.js","sourceRoot":"","sources":["../../../tests/driver/toolchain-provider.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"toolchain-provider.test.js","sourceRoot":"","sources":["../../../tests/driver/toolchain-provider.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
* Each case compiles a tiny native library to an `extern "C"` object/archive,
|
|
5
5
|
* describes it with a manifest and links it into a TypeScript program. The
|
|
6
6
|
* suite is skipped when the corresponding native toolchain is unavailable, so
|
|
7
|
-
* on a bare CI image nothing is compiled. Windows is skipped here
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* CI job, which points `CXX`/`AR` at that bundled toolchain.
|
|
7
|
+
* on a bare CI image nothing is compiled. Windows is skipped here: the suite's
|
|
8
|
+
* manifests only carry Unix linker flags, and Windows uses the MSVC ABI. Windows
|
|
9
|
+
* coverage lives in the `compile-examples` CI job, which links the example
|
|
10
|
+
* manifests (with their `linkerFlagsByPlatform.win32` entries).
|
|
12
11
|
*/
|
|
13
12
|
export {};
|
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
* Each case compiles a tiny native library to an `extern "C"` object/archive,
|
|
5
5
|
* describes it with a manifest and links it into a TypeScript program. The
|
|
6
6
|
* suite is skipped when the corresponding native toolchain is unavailable, so
|
|
7
|
-
* on a bare CI image nothing is compiled. Windows is skipped here
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* CI job, which points `CXX`/`AR` at that bundled toolchain.
|
|
7
|
+
* on a bare CI image nothing is compiled. Windows is skipped here: the suite's
|
|
8
|
+
* manifests only carry Unix linker flags, and Windows uses the MSVC ABI. Windows
|
|
9
|
+
* coverage lives in the `compile-examples` CI job, which links the example
|
|
10
|
+
* manifests (with their `linkerFlagsByPlatform.win32` entries).
|
|
12
11
|
*/
|
|
13
12
|
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
14
13
|
import { tmpdir } from "node:os";
|
|
@@ -56,7 +55,7 @@ function buildCppArchive(dir, source, stem) {
|
|
|
56
55
|
expect(archived.status, archived.stderr).toBe(0);
|
|
57
56
|
return archivePath;
|
|
58
57
|
}
|
|
59
|
-
// Skipped on Windows: this suite
|
|
58
|
+
// Skipped on Windows: this suite's manifests only carry Unix linker flags.
|
|
60
59
|
describe.skipIf(!cxx || !ar || process.platform === "win32")("native C++ extension", () => {
|
|
61
60
|
let workdir;
|
|
62
61
|
beforeAll(() => {
|
|
@@ -116,7 +115,7 @@ describe.skipIf(!cxx || !ar || process.platform === "win32")("native C++ extensi
|
|
|
116
115
|
expect(executed.stdout.trim()).toBe(["add 5", "reverse cstnibx", "builtin 8"].join("\n"));
|
|
117
116
|
});
|
|
118
117
|
});
|
|
119
|
-
// Skipped on Windows: this suite
|
|
118
|
+
// Skipped on Windows: this suite's manifests only carry Unix linker flags.
|
|
120
119
|
describe.skipIf(!cargo || !cxx || !ar || process.platform === "win32")("native Rust extension", () => {
|
|
121
120
|
let workdir;
|
|
122
121
|
beforeAll(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-extensions.test.js","sourceRoot":"","sources":["../../../tests/e2e/native-extensions.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"native-extensions.test.js","sourceRoot":"","sources":["../../../tests/e2e/native-extensions.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xbintsc",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.15",
|
|
4
4
|
"description": "xbintsc - a TypeScript binary compiler (TypeScript -> LLVM IR -> native binary)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -33,7 +33,6 @@
|
|
|
33
33
|
"build": "tsc -p tsconfig.json",
|
|
34
34
|
"prepublishOnly": "npm run build",
|
|
35
35
|
"runtime": "tsx scripts/build-runtime.ts",
|
|
36
|
-
"fetch-toolchain": "tsx scripts/fetch-toolchain.ts",
|
|
37
36
|
"package-release": "tsx scripts/package-release.ts",
|
|
38
37
|
"runtime:clean": "node -e \"require('fs').rmSync('build/runtime-obj',{recursive:true,force:true});require('fs').rmSync('runtime/lib',{recursive:true,force:true})\"",
|
|
39
38
|
"xbintsc": "tsx src/cli/main.ts",
|
|
@@ -158,9 +158,9 @@ static int xt_fs_win_truncate(const char *path, long long length) {
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
/* Unix seconds -> Windows FILETIME (100 ns ticks since 1601-01-01 UTC). The CRT
|
|
161
|
-
* `_utime`/`_utimbuf` path goes through local time, which is
|
|
162
|
-
*
|
|
163
|
-
*
|
|
161
|
+
* `_utime`/`_utimbuf` path goes through local time, which is lossy around DST
|
|
162
|
+
* boundaries; matching libuv's direct conversion keeps the result exact and
|
|
163
|
+
* identical to Node. */
|
|
164
164
|
static void xt_fs_unix_to_filetime(double seconds, FILETIME *out) {
|
|
165
165
|
long long ticks = (long long)(seconds * 10000000.0) + 116444736000000000LL;
|
|
166
166
|
unsigned long long value = (unsigned long long)ticks;
|
package/runtime/rt.h
CHANGED
|
@@ -18,10 +18,9 @@
|
|
|
18
18
|
#include <stdint.h>
|
|
19
19
|
|
|
20
20
|
/* POSIX `ssize_t` is not exposed by the MSVC/UCRT headers clang uses on
|
|
21
|
-
* Windows
|
|
22
|
-
*
|
|
23
|
-
|
|
24
|
-
#if defined(_WIN32) && !defined(__MINGW32__) && !defined(_SSIZE_T_DEFINED)
|
|
21
|
+
* Windows (every Unix libc defines it). Alias the Windows pointer-sized signed
|
|
22
|
+
* integer so the runtime's POSIX shims compile unchanged. */
|
|
23
|
+
#if defined(_WIN32) && !defined(_SSIZE_T_DEFINED)
|
|
25
24
|
typedef intptr_t ssize_t;
|
|
26
25
|
#define _SSIZE_T_DEFINED
|
|
27
26
|
#endif
|
package/runtime/rt_internal.h
CHANGED
|
@@ -224,31 +224,18 @@ typedef struct xt_try_frame {
|
|
|
224
224
|
struct xt_try_frame *prev;
|
|
225
225
|
xt_value exception;
|
|
226
226
|
} xt_try_frame;
|
|
227
|
-
/*
|
|
228
|
-
* C runtimes differ:
|
|
227
|
+
/* Save a try frame with clang's `_setjmp` built-in.
|
|
229
228
|
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
*
|
|
239
|
-
* clang will not rewrite it. On Windows ARM64 it names `_setjmpex` (and the
|
|
240
|
-
* entry stack pointer from `llvm.sponentry`) instead, matching clang's own
|
|
241
|
-
* lowering there. `_setjmp`/`_setjmpex` (rather than the `setjmp` macro) is
|
|
242
|
-
* used so it pairs with the plain `longjmp` in `xt_throw`. */
|
|
243
|
-
#if defined(_WIN32) && !defined(__MINGW32__)
|
|
244
|
-
#define xt_try_setjmp(framePtr) _setjmp(((xt_try_frame *)(framePtr))->buf)
|
|
245
|
-
#elif defined(_WIN32) && defined(__aarch64__)
|
|
246
|
-
#define xt_try_setjmp(framePtr) _setjmpex(((xt_try_frame *)(framePtr))->buf, __builtin_sponentry())
|
|
247
|
-
#elif defined(_WIN32)
|
|
248
|
-
#define xt_try_setjmp(framePtr) _setjmp(((xt_try_frame *)(framePtr))->buf, __builtin_frame_address(0))
|
|
249
|
-
#else
|
|
229
|
+
* The generated IR passes the frame explicitly because it is already IR and
|
|
230
|
+
* clang will not rewrite it. This C helper instead calls `_setjmp(buf)` and lets
|
|
231
|
+
* clang supply the frame: on Windows x64 it injects the caller's frame address
|
|
232
|
+
* (`@llvm.frameaddress(0)`) into `_JUMP_BUFFER.Frame` so `longjmp` can feed it
|
|
233
|
+
* to `RtlUnwind`; on Windows ARM64, where the UCRT has no `_setjmp`, it lowers
|
|
234
|
+
* the call to `_setjmpex` with the entry stack pointer (`@llvm.sponentry`). On
|
|
235
|
+
* Linux/macOS `_setjmp` takes only the buffer and pairs with `longjmp`.
|
|
236
|
+
* `_setjmp` is used rather than the exported `setjmp` symbol, whose Windows ABI
|
|
237
|
+
* is an incompatible two-argument routine. */
|
|
250
238
|
#define xt_try_setjmp(framePtr) _setjmp(((xt_try_frame *)(framePtr))->buf)
|
|
251
|
-
#endif
|
|
252
239
|
void *xt_try_mark(void);
|
|
253
240
|
void xt_try_restore(void *mark);
|
|
254
241
|
|
package/runtime/xt_ext.h
CHANGED
package/runtime/xt_io.c
CHANGED
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
* bogus target (`STATUS_BAD_FUNCTION_TABLE`, 0xC00000FF). Windows ARM64 has
|
|
15
15
|
* no `_setjmp` at all: the generated IR uses `_setjmpex(buf, entry-sp)` with
|
|
16
16
|
* the stack pointer on entry (`@llvm.sponentry`), exactly as clang lowers a C
|
|
17
|
-
* `setjmp` there. The C runtime (see `xt_try_setjmp`) calls
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* `setjmp` there. The C runtime (see `xt_try_setjmp`) calls clang's
|
|
18
|
+
* `_setjmp` built-in so it gets the same frame injection (lowered to
|
|
19
|
+
* `_setjmpex` on ARM64). `_setjmp`/`_setjmpex` are used rather than the
|
|
20
20
|
* exported `setjmp` symbol, whose Windows ABI is an incompatible two-argument
|
|
21
21
|
* routine; on Linux/macOS `_setjmp` takes only the buffer and pairs with
|
|
22
22
|
* `longjmp` (the XSI `_longjmp` does not exist on Windows).
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* `timegm` and `gmtime_r` are POSIX extensions that
|
|
3
|
-
* provide
|
|
4
|
-
* <time.h> only exposes `gmtime_r` when `_POSIX_C_SOURCE` is set and has no
|
|
5
|
-
* `timegm` at all, so wrap the MSVC-style equivalents for every `_WIN32` build.
|
|
2
|
+
* `timegm` and `gmtime_r` are POSIX extensions that the MSVC/UCRT headers do
|
|
3
|
+
* not provide, so wrap the MSVC-style equivalents for every `_WIN32` build.
|
|
6
4
|
*/
|
|
7
5
|
#if defined(_WIN32)
|
|
8
6
|
static time_t xt_timegm(struct tm *tm) { return (time_t)_mkgmtime64(tm); }
|
package/scripts/build-runtime.ts
CHANGED
|
@@ -29,16 +29,15 @@ const outDir = join(runtimeDir, "lib", platformSlug());
|
|
|
29
29
|
const objDir = join(root, "build", "runtime-obj");
|
|
30
30
|
|
|
31
31
|
if (process.platform === "win32") {
|
|
32
|
-
// The
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
console.log("xbintsc:
|
|
32
|
+
// The driver links with the MSVC ABI on Windows, where the prebuilt archives
|
|
33
|
+
// are unnecessary: `build` compiles the runtime C sources on demand with the
|
|
34
|
+
// user's clang. (Producing MSVC-compatible COFF `.lib` archives is possible
|
|
35
|
+
// but not worth the extra step.)
|
|
36
|
+
console.log("xbintsc: skipping runtime archives on Windows; the driver compiles the C sources on demand");
|
|
37
37
|
process.exit(0);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
// Use the same toolchain the driver will
|
|
41
|
-
// `LD_LIBRARY_PATH` (the legacy `libtinfo.so.5` on Linux) threaded through.
|
|
40
|
+
// Use the same toolchain the driver will.
|
|
42
41
|
const toolchain = resolveToolchain();
|
|
43
42
|
const clang = toolchain.clang;
|
|
44
43
|
const childEnv = Object.assign({}, process.env, toolchain.env);
|
|
@@ -54,7 +53,7 @@ function findArchiver(clangPath: string): string {
|
|
|
54
53
|
const exe = process.platform === "win32" ? ".exe" : "";
|
|
55
54
|
const candidates = [
|
|
56
55
|
process.env.xbintsc_AR,
|
|
57
|
-
// A
|
|
56
|
+
// A clang install usually ships `llvm-ar` next to the driver.
|
|
58
57
|
dir === "." ? undefined : join(dir, `llvm-ar${exe}`),
|
|
59
58
|
"llvm-ar",
|
|
60
59
|
"ar",
|
|
@@ -160,9 +160,9 @@ function runs(command: string): boolean {
|
|
|
160
160
|
|
|
161
161
|
/**
|
|
162
162
|
* Locate the LLVM tool `name` (`llvm-profdata`/`llvm-cov`) that matches the
|
|
163
|
-
* clang the driver resolved.
|
|
164
|
-
*
|
|
165
|
-
*
|
|
163
|
+
* clang the driver resolved. Prefer the tool next to clang, then the
|
|
164
|
+
* version-suffixed system installs: mixing versions makes `llvm-profdata`
|
|
165
|
+
* reject the profile format.
|
|
166
166
|
*/
|
|
167
167
|
function findTool(clang: string, name: string): string | undefined {
|
|
168
168
|
const exe = process.platform === "win32" ? ".exe" : "";
|
|
@@ -282,7 +282,7 @@ function main(): void {
|
|
|
282
282
|
profdataTool ? undefined : "llvm-profdata",
|
|
283
283
|
covTool ? undefined : "llvm-cov",
|
|
284
284
|
].filter(Boolean).join(", ");
|
|
285
|
-
skip(`${missing} not found for ${clang}; install LLVM
|
|
285
|
+
skip(`${missing} not found for ${clang}; install the LLVM tools (llvm-profdata, llvm-cov)`, options.strict);
|
|
286
286
|
}
|
|
287
287
|
|
|
288
288
|
if (!options.reportOnly) runTests(options);
|