annotate third_party/emsdk/bazel/emscripten_toolchain/link_wrapper.py @ 206:240337164a80

[Seobeo] SSL should be used for large file as well lol.
author MrJuneJune <me@mrjunejune.com>
date Sun, 15 Feb 2026 11:41:53 -0800
parents 8d17f6e6e290
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
179
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
1 #!/usr/bin/env python
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
2 """wrapper around emcc link step.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
3
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
4 This wrapper currently serves the following purposes.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
5
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
6 1. When building with --config=wasm the final output is multiple files, usually
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
7 at least one .js and one .wasm file. Since the cc_binary link step only
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
8 allows a single output, we must tar up the outputs into a single file.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
9
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
10 2. Add quotes around arguments that need them in the response file to work
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
11 around a bazel quirk.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
12
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
13 3. Ensure the external_debug_info section of the wasm points at the correct
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
14 bazel path.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
15 """
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
16
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
17
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
18 import argparse
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
19 import os
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
20 import subprocess
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
21 import sys
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
22
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
23 # Only argument should be @path/to/parameter/file
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
24 assert sys.argv[1][0] == '@', sys.argv
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
25 param_filename = sys.argv[1][1:]
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
26 param_file_args = [line.strip() for line in open(param_filename).readlines()]
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
27
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
28 # Re-write response file if needed.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
29 if any(' ' in a for a in param_file_args):
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
30 new_param_filename = param_filename + '.modified'
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
31 with open(new_param_filename, 'w') as f:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
32 for param in param_file_args:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
33 if ' ' in param:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
34 f.write('"%s"' % param)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
35 else:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
36 f.write(param)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
37 f.write('\n')
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
38 sys.argv[1] = '@' + new_param_filename
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
39
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
40 emcc_py = os.path.join(os.environ['EMSCRIPTEN'], 'emcc.py')
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
41 rtn = subprocess.call([sys.executable, emcc_py] + sys.argv[1:])
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
42 if rtn != 0:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
43 sys.exit(1)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
44
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
45 # Parse the arguments that we gave to the linker to determine what the output
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
46 # file is named and what the output format is.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
47 parser = argparse.ArgumentParser(add_help=False)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
48 parser.add_argument('-o')
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
49 parser.add_argument('--oformat')
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
50 options = parser.parse_known_args(param_file_args)[0]
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
51 output_file = options.o
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
52 oformat = options.oformat
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
53 outdir = os.path.normpath(os.path.dirname(output_file))
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
54 base_name = os.path.basename(output_file)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
55
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
56 # The output file name is the name of the build rule that was built.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
57 # Add an appropriate file extension based on --oformat.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
58 if oformat is not None:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
59 base_name_split = os.path.splitext(base_name)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
60
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
61 # If the output name has no extension, give it the appropriate extension.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
62 if not base_name_split[1]:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
63 os.replace(output_file, output_file + '.' + oformat)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
64
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
65 # If the output name does have an extension and it matches the output format,
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
66 # change the base_name so it doesn't have an extension.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
67 elif base_name_split[1] == '.' + oformat:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
68 base_name = base_name_split[0]
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
69
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
70 # If the output name does have an extension and it does not match the output
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
71 # format, change the base_name so it doesn't have an extension and rename
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
72 # the output_file so it has the proper extension.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
73 # Note that if you do something like name your build rule "foo.js" and pass
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
74 # "--oformat=html", emscripten will write to the same file for both the js and
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
75 # html output, overwriting the js output entirely with the html.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
76 # Please don't do that.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
77 else:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
78 base_name = base_name_split[0]
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
79 os.replace(output_file, os.path.join(outdir, base_name + '.' + oformat))
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
80
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
81 files = []
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
82 extensions = [
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
83 '.js',
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
84 '.wasm',
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
85 '.wasm.map',
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
86 '.data',
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
87 '.js.symbols',
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
88 '.wasm.debug.wasm',
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
89 '.html',
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
90 ]
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
91
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
92 for ext in extensions:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
93 filename = base_name + ext
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
94 if os.path.exists(os.path.join(outdir, filename)):
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
95 files.append(filename)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
96
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
97 wasm_base = os.path.join(outdir, base_name + '.wasm')
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
98 if os.path.exists(wasm_base + '.debug.wasm') and os.path.exists(wasm_base):
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
99 # If we have a .wasm.debug.wasm file and a .wasm file, we need to rewrite the
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
100 # section in the .wasm file that refers to it. The path that's in there
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
101 # is the blaze output path; we want it to be just the filename.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
102
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
103 llvm_objcopy = os.path.join(
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
104 os.environ['EM_BIN_PATH'], 'bin/llvm-objcopy')
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
105 # First, check to make sure the .wasm file has the header that needs to be
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
106 # rewritten.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
107 rtn = subprocess.call([
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
108 llvm_objcopy,
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
109 '--dump-section=external_debug_info=/dev/null',
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
110 wasm_base], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
111 if rtn == 0:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
112 # If llvm-objcopy did not return an error, the external_debug_info section
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
113 # must exist, so we're good to continue.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
114
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
115 # Next we need to convert length of the filename to LEB128.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
116 # Start by converting the length of the filename to a bit string.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
117 bit_string = '{0:b}'.format(len(base_name + '.wasm.debug.wasm'))
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
118
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
119 # Pad the bit string with 0s so that its length is a multiple of 7.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
120 while len(bit_string) % 7 != 0:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
121 bit_string = '0' + bit_string
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
122
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
123 # Break up our bit string into chunks of 7.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
124 # We do this backwards because the final format is little-endian.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
125 final_bytes = bytearray()
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
126 for i in reversed(range(0, len(bit_string), 7)):
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
127 binary_part = bit_string[i:i + 7]
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
128 if i != 0:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
129 # Every chunk except the last one needs to be prepended with '1'.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
130 # The length of each chunk is 7, so that one has an implicit '0'.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
131 binary_part = '1' + binary_part
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
132 final_bytes.append(int(binary_part, 2))
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
133 # Finally, add the actual filename.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
134 final_bytes.extend((base_name + '.wasm.debug.wasm').encode())
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
135
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
136 # Write our length + filename bytes to a temp file.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
137 with open(base_name + '_debugsection.tmp', 'wb+') as f:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
138 f.write(final_bytes)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
139 f.close()
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
140
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
141 # First delete the old section.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
142 subprocess.check_call([
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
143 llvm_objcopy,
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
144 wasm_base,
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
145 '--remove-section=external_debug_info'])
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
146 # Rewrite section with the new size and filename from the temp file.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
147 subprocess.check_call([
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
148 llvm_objcopy,
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
149 wasm_base,
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
150 '--add-section=external_debug_info=' + base_name + '_debugsection.tmp'])
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
151
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
152 # Make sure we have at least one output file.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
153 if not files:
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
154 print('emcc.py did not appear to output any known files!')
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
155 sys.exit(1)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
156
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
157 # cc_binary must output exactly one file; put all the output files in a tarball.
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
158 cmd = ['tar', 'cf', base_name + '.tar'] + files
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
159 subprocess.check_call(cmd, cwd=outdir)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
160 os.replace(os.path.join(outdir, base_name + '.tar'), output_file)
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
161
8d17f6e6e290 [ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
162 sys.exit(0)