Skip to content

Commit 4e5932d

Browse files
Set GENERATE_SOURCE_MAP=0 for tsd generation (#26286)
When wasm64, source maps, and tsd generation are all enabled, I get the failure: ``` Fatal: Failed opening '/tmp/emscripten_temp_kkpsnta3/tsgen.wasm.map' emcc: error: 'wasm-opt --memory64-lowering --table64-lowering /tmp/emscripten_temp_kkpsnta3/tsgen.wasm -o /tmp/emscripten_temp_kkpsnta3/tsgen.wasm --mvp-features --enable-bulk-memory --enable-bulk-memory-opt --enable-call-indirect-overlong --enable-memory64 --enable-multivalue --enable-mutable-globals --enable-nontrapping-float-to-int --enable-reference-types --enable-sign-ext --input-source-map=/tmp/emscripten_temp_kkpsnta3/tsgen.wasm.map --output-source-map=/tmp/emscripten_temp_kkpsnta3/tsgen.wasm.map' failed (returned 1) ``` wasm64 causes wasm-opt to be invoked during tsd generation. If source maps are also enabled, wasm-opt then looks for the input source map, which isn't needed and also doesn't yet exist. So we just turn this option off during tsd generation.
1 parent 367fca6 commit 4e5932d

3 files changed

Lines changed: 181 additions & 0 deletions

File tree

Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
// TypeScript bindings for emscripten-generated code. Automatically generated at compile time.
2+
interface WasmModule {
3+
_main(_0: number, _1: BigInt): number;
4+
}
5+
6+
type EmbindString = ArrayBuffer|Uint8Array|Uint8ClampedArray|Int8Array|string;
7+
export interface ClassHandle {
8+
isAliasOf(other: ClassHandle): boolean;
9+
delete(): void;
10+
deleteLater(): this;
11+
isDeleted(): boolean;
12+
// @ts-ignore - If targeting lower than ESNext, this symbol might not exist.
13+
[Symbol.dispose](): void;
14+
clone(): this;
15+
}
16+
export interface Test extends ClassHandle {
17+
x: number;
18+
readonly y: number;
19+
get stringProperty(): string;
20+
set stringProperty(value: EmbindString);
21+
functionOne(_0: number, _1: number): number;
22+
functionTwo(_0: number, _1: number): number;
23+
functionFour(_0: boolean): number;
24+
functionFive(x: number, y: number): number;
25+
constFn(): number;
26+
longFn(_0: bigint): bigint;
27+
functionThree(_0: EmbindString): number;
28+
functionSix(str: EmbindString): number;
29+
}
30+
31+
export interface Obj extends ClassHandle {
32+
}
33+
34+
export interface FirstEnumValue<T extends number> {
35+
value: T;
36+
}
37+
export type FirstEnum = FirstEnumValue<0>|FirstEnumValue<1>|FirstEnumValue<2>;
38+
39+
export type SecondEnum = 0|1|2;
40+
41+
export type ThirdEnum = 'kValueAlpha'|'kValueBeta'|'kValueGamma';
42+
43+
export interface EmptyEnumValue<T extends number> {
44+
value: T;
45+
}
46+
export type EmptyEnum = never/* Empty Enumerator */;
47+
48+
export type ValArrIx = [ FirstEnum, FirstEnum, FirstEnum, FirstEnum ];
49+
50+
export interface IntVec extends ClassHandle, Iterable<number> {
51+
push_back(_0: number): void;
52+
resize(_0: number, _1: number): void;
53+
size(): number;
54+
get(_0: number): number | undefined;
55+
set(_0: number, _1: number): boolean;
56+
}
57+
58+
export interface IterableClass extends ClassHandle, Iterable<number> {
59+
count(): number;
60+
at(_0: number): number;
61+
}
62+
63+
export interface MapIntInt extends ClassHandle {
64+
keys(): IntVec;
65+
get(_0: number): number | undefined;
66+
set(_0: number, _1: number): void;
67+
size(): number;
68+
}
69+
70+
export interface Foo extends ClassHandle {
71+
process(_0: Test): void;
72+
}
73+
74+
export interface ClassWithConstructor extends ClassHandle {
75+
fn(_0: number): number;
76+
}
77+
78+
export interface ClassWithTwoConstructors extends ClassHandle {
79+
}
80+
81+
export interface ClassWithSmartPtrConstructor extends ClassHandle {
82+
fn(_0: number): number;
83+
}
84+
85+
export type AliasedVal = number;
86+
87+
export interface BaseClass extends ClassHandle {
88+
fn(_0: number): number;
89+
}
90+
91+
export interface DerivedClass extends BaseClass {
92+
fn2(_0: number): number;
93+
}
94+
95+
export interface Interface extends ClassHandle {
96+
invoke(_0: EmbindString): void;
97+
}
98+
99+
export interface InterfaceWrapper extends Interface {
100+
notifyOnDestruction(): void;
101+
}
102+
103+
export type ValArr = [ number, number, number ];
104+
105+
export type ValObj = {
106+
string: EmbindString,
107+
firstEnum: FirstEnum,
108+
secondEnum: SecondEnum,
109+
thirdEnum: ThirdEnum,
110+
optionalInt?: number | undefined,
111+
callback: (message: string) => void
112+
};
113+
114+
interface EmbindModule {
115+
Test: {
116+
staticFunction(_0: number): number;
117+
staticFunctionWithParam(x: number): number;
118+
staticProperty: number;
119+
get staticStringProperty(): string;
120+
set staticStringProperty(value: EmbindString);
121+
};
122+
class_returning_fn(): Test;
123+
class_unique_ptr_returning_fn(): Test;
124+
Obj: {};
125+
getPointer(_0: Obj | null): Obj | null;
126+
getNonnullPointer(): Obj;
127+
a_class_instance: Test;
128+
an_enum: FirstEnum;
129+
FirstEnum: {kValueOne: FirstEnumValue<0>, kValueTwo: FirstEnumValue<1>, kValueThree: FirstEnumValue<2>};
130+
SecondEnum: {kValueA: 0, kValueB: 1, kValueC: 2};
131+
ThirdEnum: {kValueAlpha: 'kValueAlpha', kValueBeta: 'kValueBeta', kValueGamma: 'kValueGamma'};
132+
EmptyEnum: {};
133+
enum_returning_fn(): FirstEnum;
134+
num_enum_returning_fn(): SecondEnum;
135+
str_enum_returning_fn(): ThirdEnum;
136+
IntVec: {
137+
new(): IntVec;
138+
};
139+
IterableClass: {
140+
new(): IterableClass;
141+
};
142+
MapIntInt: {
143+
new(): MapIntInt;
144+
};
145+
Foo: {};
146+
ClassWithConstructor: {
147+
new(_0: number, _1: ValArr): ClassWithConstructor;
148+
};
149+
ClassWithTwoConstructors: {
150+
new(): ClassWithTwoConstructors;
151+
new(_0: number): ClassWithTwoConstructors;
152+
};
153+
ClassWithSmartPtrConstructor: {
154+
new(_0: number, _1: ValArr): ClassWithSmartPtrConstructor;
155+
};
156+
BaseClass: {};
157+
DerivedClass: {};
158+
Interface: {
159+
implement(_0: any): InterfaceWrapper;
160+
extend(_0: EmbindString, _1: any): any;
161+
};
162+
InterfaceWrapper: {};
163+
function_consuming_aliased_val(_0: AliasedVal): void;
164+
a_bool: boolean;
165+
an_int: number;
166+
optional_test(_0?: Foo): number | undefined;
167+
global_fn(_0: number, _1: number): number;
168+
optional_and_nonoptional_test(_0: Foo | undefined, _1: number): number | undefined;
169+
smart_ptr_function(_0: ClassWithSmartPtrConstructor | null): number;
170+
smart_ptr_function_with_params(foo: ClassWithSmartPtrConstructor | null): number;
171+
function_with_callback_param(_0: (message: string) => void): number;
172+
getValObj(): ValObj;
173+
setValObj(_0: ValObj): void;
174+
string_test(_0: EmbindString): string;
175+
optional_string_test(_0: EmbindString): string | undefined;
176+
wstring_test(_0: string): string;
177+
}
178+
179+
export type MainModule = WasmModule & EmbindModule;

test/test_other.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3596,6 +3596,7 @@ def test_embind_tsgen_end_to_end(self, opts, tsc_opts):
35963596
'4': [['-fsanitize=undefined', '-gsource-map'], 'embind_tsgen_ignore_3.d.ts'],
35973597
'5': [['-sASYNCIFY'], 'embind_tsgen_ignore_3.d.ts'],
35983598
'6': [['-sENVIRONMENT=worker', '-lworkerfs.js'], 'embind_tsgen.d.ts'],
3599+
'7': [['-sMEMORY64=1', '-gsource-map'], 'embind_tsgen_ignore_7.d.ts'],
35993600
})
36003601
def test_embind_tsgen_ignore(self, extra_args, expected_ts_file):
36013602
create_file('fail.js', 'assert(false);')

tools/link.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2037,6 +2037,7 @@ def run_embind_gen(options, wasm_target, js_syms, extra_settings):
20372037
settings.MEMORY64 = 2
20382038
# Source maps haven't been generated yet and aren't needed to run embind_gen.
20392039
settings.LOAD_SOURCE_MAP = 0
2040+
settings.GENERATE_SOURCE_MAP = 0
20402041
outfile_js = in_temp('tsgen.js')
20412042
# The Wasm outfile may be modified by emscripten.emscript, so use a temporary file.
20422043
outfile_wasm = in_temp('tsgen.wasm')

0 commit comments

Comments
 (0)