42
42
# link time.
43
43
USE_NINJA = int (os .environ .get ('EMCC_USE_NINJA' , '0' ))
44
44
45
+ # A fake emscripten path to use in __FILE__ macro and debug info to produce
46
+ # reproducible builds across platforms.
47
+ FAKE_EMSCRIPTEN_PATH = '/emsdk/emscripten'
48
+
45
49
46
50
def files_in_path (path , filenames ):
47
51
srcdir = utils .path_from_root (path )
@@ -472,9 +476,9 @@ def generate_ninja(self, build_dir, libname):
472
476
if self .deterministic_paths :
473
477
source_dir = utils .path_from_root ()
474
478
relative_source_dir = os .path .relpath (source_dir , build_dir )
475
- cflags += [f'-ffile-prefix-map={ source_dir } =/emsdk/emscripten ' ,
476
- f'-ffile-prefix-map={ relative_source_dir } /= ' ,
477
- '-fdebug-compilation-dir=/emsdk/emscripten ' ]
479
+ cflags += [f'-ffile-prefix-map={ source_dir } ={ FAKE_EMSCRIPTEN_PATH } ' ,
480
+ f'-ffile-prefix-map={ relative_source_dir } = { FAKE_EMSCRIPTEN_PATH } ' ,
481
+ '-fdebug-compilation-dir={FAKE_EMSCRIPTEN_PATH} ' ]
478
482
asflags = get_base_cflags (preprocess = False )
479
483
input_files = self .get_files ()
480
484
ninja_file = os .path .join (build_dir , 'build.ninja' )
@@ -496,9 +500,9 @@ def build_objects(self, build_dir):
496
500
source_dir = utils .path_from_root ()
497
501
if batch_inputs :
498
502
relative_source_dir = os .path .relpath (source_dir , build_dir )
499
- cflags += [f'-ffile-prefix-map={ relative_source_dir } /= ' ]
500
- cflags += [f'-ffile-prefix-map={ source_dir } =/emsdk/emscripten ' ,
501
- '-fdebug-compilation-dir=/emsdk/emscripten ' ]
503
+ cflags += [f'-ffile-prefix-map={ relative_source_dir } = { FAKE_EMSCRIPTEN_PATH } ' ]
504
+ cflags += [f'-ffile-prefix-map={ source_dir } ={ FAKE_EMSCRIPTEN_PATH } ' ,
505
+ '-fdebug-compilation-dir={FAKE_EMSCRIPTEN_PATH} ' ]
502
506
case_insensitive = is_case_insensitive (build_dir )
503
507
for src in self .get_files ():
504
508
ext = shared .suffix (src )
0 commit comments