Skip to content

Commit 813520b

Browse files
authored
Fix source map gen for relative include directories (#20778)
Since #20577, relative paths are used in command line to build system libraries. As such, we need to properly handle those relative paths to generate a source map pointing to real source file locations.
1 parent f31bd74 commit 813520b

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

test/test_other.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9560,6 +9560,8 @@ def test_wasm_sourcemap_dead(self):
95609560
self.assertRegexpMatches(output, r'"mappings":\s*"[A-Za-z0-9+/]+,[A-Za-z0-9+/]+"')
95619561

95629562
def test_wasm_sourcemap_relative_paths(self):
9563+
ensure_dir('build')
9564+
95639565
def test(infile, source_map_added_dir=''):
95649566
expected_source_map_path = 'a.cpp'
95659567
if source_map_added_dir:
@@ -9573,9 +9575,15 @@ def test(infile, source_map_added_dir=''):
95739575
]
95749576
for curr in infiles:
95759577
print(' ', curr)
9578+
print(' ', 'same CWD for compiler and linker')
95769579
self.run_process([EMCC, curr, '-gsource-map'])
95779580
self.assertIn('"%s"' % expected_source_map_path, read_file('a.out.wasm.map'))
95789581

9582+
print(' ', 'different CWD for compiler and linker')
9583+
self.run_process([EMCC, curr, '-g', '-c', '-o', 'build/a.o'])
9584+
self.run_process([EMCC, 'a.o', '-gsource-map'], cwd='build')
9585+
self.assertIn('"../%s"' % expected_source_map_path, read_file('build/a.out.wasm.map'))
9586+
95799587
test('a.cpp')
95809588

95819589
ensure_dir('inner')

tools/wasm-sourcemap.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,12 +224,12 @@ def read_dwarf_entries(wasm, options):
224224

225225
include_directories = {'0': comp_dir}
226226
for dir in re.finditer(r"include_directories\[\s*(\d+)\] = \"([^\"]*)", line_chunk):
227-
include_directories[dir.group(1)] = dir.group(2)
227+
include_directories[dir.group(1)] = os.path.join(comp_dir, dir.group(2))
228228

229229
files = {}
230230
for file in re.finditer(r"file_names\[\s*(\d+)\]:\s+name: \"([^\"]*)\"\s+dir_index: (\d+)", line_chunk):
231231
dir = include_directories[file.group(3)]
232-
file_path = (dir + '/' if file.group(2)[0] != '/' else '') + file.group(2)
232+
file_path = os.path.join(dir, file.group(2))
233233
files[file.group(1)] = file_path
234234

235235
for line in re.finditer(r"\n0x([0-9a-f]+)\s+(\d+)\s+(\d+)\s+(\d+)(.*?end_sequence)?", line_chunk):

0 commit comments

Comments
 (0)