@@ -147,156 +147,159 @@ NINJA = env("NINJA", false)
147
147
148
148
out = []
149
149
150
- # fix rust calling
151
- for argc , arg in enumerate (sys .argv ):
152
-
153
- # clean up rustc way of passing args.
154
-
155
- if arg in ("-l" , "-L" , "-I" ):
156
- sys .argv [argc ] += sys .argv [argc + 1 ]
157
- sys .argv [argc + 1 ] = ""
158
- RUSTC = True
159
-
160
- while "" in sys .argv :
161
- sys .argv .remove ("" )
150
+ # special partial linking mode
151
+ if "-r" in sys .argv :
152
+ SKIP = True
153
+ else :
154
+ # fix rust calling
155
+ for argc , arg in enumerate (sys .argv ):
162
156
163
- for argc , arg in enumerate (sys .argv ):
164
- if arg .startswith ("CMakeFiles/" ) or arg .startswith ("@CMakeFiles/" ):
165
- CMAKE = True
157
+ # clean up rustc way of passing args.
166
158
167
- if arg .startswith ("--preload-file" ) or arg .startswith ("--embed-file" ):
168
- USE_RAWFS = False
159
+ if arg in ("-l" , "-L" , "-I" ):
160
+ sys .argv [argc ] += sys .argv [argc + 1 ]
161
+ sys .argv [argc + 1 ] = ""
162
+ RUSTC = True
169
163
170
- if arg . find ( "MAIN_MODULE" ) > 0 :
171
- MAIN_MODULE = True
164
+ while "" in sys . argv :
165
+ sys . argv . remove ( "" )
172
166
173
- if arg == "-static" :
174
- STATIC = True
167
+ for argc , arg in enumerate (sys .argv ):
168
+ if arg .startswith ("CMakeFiles/" ) or arg .startswith ("@CMakeFiles/" ):
169
+ CMAKE = True
175
170
176
- if arg .startswith ("-sENVIRONMENT" ):
177
- SIZEOPT = False
178
- USE_RAWFS = False
171
+ if arg .startswith ("--preload-file" ) or arg .startswith ("--embed-file" ):
172
+ USE_RAWFS = False
179
173
180
- if arg == "-sENVIRONMENT=web" :
181
- EXE = False
182
- HTML = True
174
+ if arg .find ("MAIN_MODULE" ) > 0 :
175
+ MAIN_MODULE = True
183
176
177
+ if arg == "-static" :
178
+ STATIC = True
184
179
185
- for argc , arg in enumerate (sys .argv ):
186
- if arg in ("-v" , "--version" ):
187
- SKIP = True
188
- break
180
+ if arg .startswith ("-sENVIRONMENT" ):
181
+ SIZEOPT = False
182
+ USE_RAWFS = False
189
183
190
- # THEY ARE NOT SAFE TO CHANGE !
191
- if arg in ("-O0" , "-O1" , "-O2" , "-O3" , "-Os" , "-Oz" ):
192
- continue
193
- if arg in ("-g0" , "-g1" , "-g2" , "-g3" , "-g4" ):
194
- continue
184
+ if arg == "-sENVIRONMENT=web" :
185
+ EXE = False
186
+ HTML = True
195
187
196
- if arg . endswith ( "/libpq/libpq.so" ):
197
- arg = "-lpq"
198
- # for wasm-ld
199
- sys . argv [ argc ] = arg
188
+ for argc , arg in enumerate ( sys . argv ):
189
+ if arg in ( "-v" , "--version" ):
190
+ SKIP = True
191
+ break
200
192
201
- if not MAIN_MODULE :
202
- # https://github.com/emscripten-core/emscripten/issues/22742
203
- # https://github.com/hoodmane/emscripten/commit/34144634026c91a73bd3e1db85627132d3a37a6d
204
- if arg == "-lc" :
193
+ # THEY ARE NOT SAFE TO CHANGE !
194
+ if arg in ( "-O0" , "-O1" , "-O2" , "-O3" , "-Os" , "-Oz" ):
195
+ continue
196
+ if arg in ( "-g0" , "-g1" , "-g2" , "-g3" , "-g4" ) :
205
197
continue
206
198
207
- # only html may not exit runtime.
208
- if not HTML and arg .find ("EXIT_RUNTIME" ) > 0 :
209
- continue
210
-
211
- if arg .lower () in ("-fpic" , "-latomic" ):
212
- continue
199
+ if arg .endswith ("/libpq/libpq.so" ):
200
+ arg = "-lpq"
201
+ # for wasm-ld
202
+ sys .argv [argc ] = arg
213
203
214
- if arg in ("-Wl,--as-needed" , "-Wl,--eh-frame-hdr" , "-Wl,-znoexecstack" , "-Wl,-znow" , "-Wl,-zrelro" , "-Wl,-zrelro,-znow" ):
215
- continue
204
+ if not MAIN_MODULE :
205
+ # https://github.com/emscripten-core/emscripten/issues/22742
206
+ # https://github.com/hoodmane/emscripten/commit/34144634026c91a73bd3e1db85627132d3a37a6d
207
+ if arg == "-lc" :
208
+ continue
216
209
217
- if arg in ("-lgcc" , "-lgcc_s" , "-fallow-argument-mismatch" ):
218
- continue
210
+ # only html may not exit runtime.
211
+ if not HTML and arg .find ("EXIT_RUNTIME" ) > 0 :
212
+ continue
219
213
220
- if arg == "-pthread" :
221
- if MVP :
214
+ if arg .lower () in ("-fpic" , "-latomic" ):
222
215
continue
223
216
224
- # FAILSAFE
225
- # that is for some very bad known setup.py behaviour regarding cross compiling and some old codebases.
226
- # should not be needed ..
227
- if arg .startswith ("-I/" ):
228
- if arg .startswith ("-I/usr/" ):
217
+ if arg in ("-Wl,--as-needed" , "-Wl,--eh-frame-hdr" , "-Wl,-znoexecstack" , "-Wl,-znow" , "-Wl,-zrelro" , "-Wl,-zrelro,-znow" ):
229
218
continue
230
219
231
- if arg .startswith ("-L/" ):
232
- if arg .startswith ("-L/usr/" ):
220
+ if arg in ("-lgcc" , "-lgcc_s" , "-fallow-argument-mismatch" ):
233
221
continue
234
222
235
- if arg .find ("ASSERTIONS" ) > 0 :
236
- continue
223
+ if arg == "-pthread" :
224
+ if MVP :
225
+ continue
237
226
238
- # rustc has an habit of "-l" "c" instead of "-lc"
239
- if arg .startswith ("-l" ):
240
- if len (arg ) > 2 :
241
- LINKING = True
242
- # prevent duplicate lib when linking
243
- if arg in out :
227
+ # FAILSAFE
228
+ # that is for some very bad known setup.py behaviour regarding cross compiling and some old codebases.
229
+ # should not be needed ..
230
+ if arg .startswith ("-I/" ):
231
+ if arg .startswith ("-I/usr/" ):
244
232
continue
245
233
246
- elif arg in ("-o" , "-c" ):
247
- MODE = arg
248
- MODE_POS = argc
249
- if arg == "-c" :
250
- COMPILE = True
251
- # TODO maybe add node runner for a .cjs
252
- elif arg == "-o" :
253
- out_pos = argc + 1
254
- if IS_SHARED :
255
- SHARED_TARGET = sys .argv [out_pos ]
256
- elif not AOUT :
257
- AOUT = sys .argv [out_pos ]
258
-
259
- elif not STATIC :
260
- if arg .endswith (".so" ):
261
- if arg .startswith ("/usr/lib" ):
262
- arg = f"-l{ arg .rsplit ('/' ,1 )[- 1 ][3 :- 3 ]} "
263
- if arg in ("-lportmidi" , "-lporttime" ):
264
- continue
234
+ if arg .startswith ("-L/" ):
235
+ if arg .startswith ("-L/usr/" ):
236
+ continue
265
237
266
- if arg .find ("wasm32-emscripten.so" ) > 0 or arg .find ("abi3.so" ) > 0 :
267
- PY_MODULE = true
268
- SHARED_TARGET = arg
269
-
270
- # FIX linking .so when it should have been .a for final exe without MAIN_MODULE set
271
- # should be "LINKING" state
272
- # is this arg the -o ? if yes do not even try static
273
- elif out_pos != argc :
274
- # if there is no static version let wasm-ld handle it.
275
- if os .path .isfile (arg [:3 ] + ".a" ):
276
- arg = arg [:3 ] + ".a"
277
- sys .argv [argc ] = arg
278
- elif IS_SHARED :
279
- dbg ("WARNING maybe should use static here :" , arg )
280
- # raise SystemExit(666)
281
-
282
- # TODO check is -shared implies -sSIDE_MODULE=1
283
- elif arg == "-shared" :
284
- IS_SHARED = True
285
- SHARED = f"-shared -sASSERTIONS=0 -sSIDE_MODULE=1 -L{ os .environ ['PREFIX' ]} /lib"
238
+ if arg .find ("ASSERTIONS" ) > 0 :
286
239
continue
287
240
288
- # duplicates can happen on cmake/ rustc but they are expected to be here for a reason so skip them
289
- if not ( CMAKE or NINJA or RUSTC ):
290
- # prevent duplicates objects/archives files on cmdline when linking
291
- if LINKING or MODE == "-o" :
292
- if arg . endswith ( ".a" ) or arg . endswith ( ".o" ):
241
+ # rustc has an habit of "-l" "c" instead of "-lc"
242
+ if arg . startswith ( "-l" ):
243
+ if len ( arg ) > 2 :
244
+ LINKING = True
245
+ # prevent duplicate lib when linking
293
246
if arg in out :
294
247
continue
295
248
296
- # fix sysroot is not default to PIC
297
- arg = arg .replace ("/lib/wasm32-emscripten/lib" , "/lib/wasm32-emscripten/pic/lib" )
249
+ elif arg in ("-o" , "-c" ):
250
+ MODE = arg
251
+ MODE_POS = argc
252
+ if arg == "-c" :
253
+ COMPILE = True
254
+ # TODO maybe add node runner for a .cjs
255
+ elif arg == "-o" :
256
+ out_pos = argc + 1
257
+ if IS_SHARED :
258
+ SHARED_TARGET = sys .argv [out_pos ]
259
+ elif not AOUT :
260
+ AOUT = sys .argv [out_pos ]
261
+
262
+ elif not STATIC :
263
+ if arg .endswith (".so" ):
264
+ if arg .startswith ("/usr/lib" ):
265
+ arg = f"-l{ arg .rsplit ('/' ,1 )[- 1 ][3 :- 3 ]} "
266
+ if arg in ("-lportmidi" , "-lporttime" ):
267
+ continue
268
+
269
+ if arg .find ("wasm32-emscripten.so" ) > 0 or arg .find ("abi3.so" ) > 0 :
270
+ PY_MODULE = true
271
+ SHARED_TARGET = arg
272
+
273
+ # FIX linking .so when it should have been .a for final exe without MAIN_MODULE set
274
+ # should be "LINKING" state
275
+ # is this arg the -o ? if yes do not even try static
276
+ elif out_pos != argc :
277
+ # if there is no static version let wasm-ld handle it.
278
+ if os .path .isfile (arg [:3 ] + ".a" ):
279
+ arg = arg [:3 ] + ".a"
280
+ sys .argv [argc ] = arg
281
+ elif IS_SHARED :
282
+ dbg ("WARNING maybe should use static here :" , arg )
283
+ # raise SystemExit(666)
284
+
285
+ # TODO check is -shared implies -sSIDE_MODULE=1
286
+ elif arg == "-shared" :
287
+ IS_SHARED = True
288
+ SHARED = f"-shared -sASSERTIONS=0 -sSIDE_MODULE=1 -L{ os .environ ['PREFIX' ]} /lib"
289
+ continue
290
+
291
+ # duplicates can happen on cmake/rustc but they are expected to be here for a reason so skip them
292
+ if not (CMAKE or NINJA or RUSTC ):
293
+ # prevent duplicates objects/archives files on cmdline when linking
294
+ if LINKING or MODE == "-o" :
295
+ if arg .endswith (".a" ) or arg .endswith (".o" ):
296
+ if arg in out :
297
+ continue
298
+
299
+ # fix sysroot is not default to PIC
300
+ arg = arg .replace ("/lib/wasm32-emscripten/lib" , "/lib/wasm32-emscripten/pic/lib" )
298
301
299
- out .append (arg )
302
+ out .append (arg )
300
303
301
304
os .environ .pop ("_EMCC_CCACHE" , "" )
302
305
0 commit comments