1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
|
;; RUN: wasm-split --help | filecheck %s
;; CHECK: ================================================================================
;; CHECK-NEXT: wasm-split INFILES
;; CHECK-NEXT:
;; CHECK-NEXT: Split a module into a primary module and a secondary module, or instrument a
;; CHECK-NEXT: module to gather a profile that can inform future splitting, or manage such
;; CHECK-NEXT: profiles. Options that are only accepted in particular modes are marked with the
;; CHECK-NEXT: accepted "[<modes>]" in their descriptions.
;; CHECK-NEXT: ================================================================================
;; CHECK-NEXT:
;; CHECK-NEXT:
;; CHECK-NEXT: wasm-split options:
;; CHECK-NEXT: -------------------
;; CHECK-NEXT:
;; CHECK-NEXT: --split Split an input module into two output
;; CHECK-NEXT: modules. The default mode.
;; CHECK-NEXT:
;; CHECK-NEXT: --multi-split Split an input module into an arbitrary
;; CHECK-NEXT: number of output modules.
;; CHECK-NEXT:
;; CHECK-NEXT: --instrument Instrument an input module to allow it to
;; CHECK-NEXT: generate a profile that can be used to
;; CHECK-NEXT: guide splitting.
;; CHECK-NEXT:
;; CHECK-NEXT: --merge-profiles Merge multiple profiles for the same
;; CHECK-NEXT: module into a single profile.
;; CHECK-NEXT:
;; CHECK-NEXT: --print-profile [print-profile] Print profile contents in
;; CHECK-NEXT: a human-readable format.
;; CHECK-NEXT:
;; CHECK-NEXT: --profile [split] The profile to use to guide
;; CHECK-NEXT: splitting.
;; CHECK-NEXT:
;; CHECK-NEXT: --keep-funcs [split] Comma-separated list of functions
;; CHECK-NEXT: to keep in the primary module. The rest
;; CHECK-NEXT: will be split out. Can be used alongside
;; CHECK-NEXT: --profile and --split-funcs. You can also
;; CHECK-NEXT: pass a file with one function per line by
;; CHECK-NEXT: passing @filename.
;; CHECK-NEXT:
;; CHECK-NEXT: --split-funcs [split] Comma-separated list of functions
;; CHECK-NEXT: to split out to the secondary module. The
;; CHECK-NEXT: rest will be kept. Can be used alongside
;; CHECK-NEXT: --profile and --keep-funcs. This takes
;; CHECK-NEXT: precedence over other split options. You
;; CHECK-NEXT: can also pass a file with one function
;; CHECK-NEXT: per line by passing @filename.
;; CHECK-NEXT:
;; CHECK-NEXT: --manifest [multi-split] File describing the
;; CHECK-NEXT: functions to be split into each module.
;; CHECK-NEXT: Each section separated by a blank line
;; CHECK-NEXT: begins with the base name of an output
;; CHECK-NEXT: module, which is followed by a list of
;; CHECK-NEXT: functions to place in that module, one
;; CHECK-NEXT: per line.
;; CHECK-NEXT:
;; CHECK-NEXT: --out-prefix [multi-split] Prefix prepended to module
;; CHECK-NEXT: names in the manifest file to create
;; CHECK-NEXT: output file names.
;; CHECK-NEXT:
;; CHECK-NEXT: --primary-output,-o1 [split] Output file for the primary
;; CHECK-NEXT: module.
;; CHECK-NEXT:
;; CHECK-NEXT: --secondary-output,-o2 [split] Output file for the secondary
;; CHECK-NEXT: module.
;; CHECK-NEXT:
;; CHECK-NEXT: --symbolmap [split] Write a symbol map file for each
;; CHECK-NEXT: of the output modules.
;; CHECK-NEXT:
;; CHECK-NEXT: --no-placeholders [split] Do not import placeholder
;; CHECK-NEXT: functions. Calls to secondary functions
;; CHECK-NEXT: will fail before the secondary module has
;; CHECK-NEXT: been instantiated.
;; CHECK-NEXT:
;; CHECK-NEXT: --placeholdermap [split] Write a file mapping placeholder
;; CHECK-NEXT: indices to the function names.
;; CHECK-NEXT:
;; CHECK-NEXT: --import-namespace [split, instrument] When provided as an
;; CHECK-NEXT: option for module splitting, the
;; CHECK-NEXT: namespace from which to import objects
;; CHECK-NEXT: from the primary module into the
;; CHECK-NEXT: secondary module. In instrument mode,
;; CHECK-NEXT: refers to the namespace from which to
;; CHECK-NEXT: import the secondary memory, if any.
;; CHECK-NEXT:
;; CHECK-NEXT: --placeholder-namespace [split] The namespace from which to
;; CHECK-NEXT: import placeholder functions into the
;; CHECK-NEXT: primary module.
;; CHECK-NEXT:
;; CHECK-NEXT: --jspi [split] Transform the module to support
;; CHECK-NEXT: asynchronously loading the secondary
;; CHECK-NEXT: module before any placeholder functions
;; CHECK-NEXT: have been called.
;; CHECK-NEXT:
;; CHECK-NEXT: --export-prefix [split] An identifying prefix to prepend
;; CHECK-NEXT: to new export names created by module
;; CHECK-NEXT: splitting.
;; CHECK-NEXT:
;; CHECK-NEXT: --profile-export [instrument] The export name of the
;; CHECK-NEXT: function the embedder calls to write the
;; CHECK-NEXT: profile into memory. Defaults to
;; CHECK-NEXT: `__write_profile`.
;; CHECK-NEXT:
;; CHECK-NEXT: --in-memory [instrument] Store profile information in
;; CHECK-NEXT: memory (starting at address 0 and taking
;; CHECK-NEXT: one byte per function) rather than
;; CHECK-NEXT: globals (the default) so that it can be
;; CHECK-NEXT: shared between multiple threads. Users
;; CHECK-NEXT: are responsible for ensuring that the
;; CHECK-NEXT: module does not use the initial memory
;; CHECK-NEXT: region for anything else.
;; CHECK-NEXT:
;; CHECK-NEXT: --in-secondary-memory [instrument] Store profile information in
;; CHECK-NEXT: a separate memory, rather than in module
;; CHECK-NEXT: main memory or globals (the default).
;; CHECK-NEXT: With this option, users do not need to
;; CHECK-NEXT: reserve the initial memory region for
;; CHECK-NEXT: profile data and the data can be shared
;; CHECK-NEXT: between multiple threads.
;; CHECK-NEXT:
;; CHECK-NEXT: --secondary-memory-name [instrument] The name of the secondary
;; CHECK-NEXT: memory created to store profile
;; CHECK-NEXT: information.
;; CHECK-NEXT:
;; CHECK-NEXT: --emit-module-names [split, instrument] Emit module names,
;; CHECK-NEXT: even if not emitting the rest of the
;; CHECK-NEXT: names section. Can help differentiate the
;; CHECK-NEXT: modules in stack traces. This option will
;; CHECK-NEXT: be removed once simpler ways of naming
;; CHECK-NEXT: modules are widely available. See
;; CHECK-NEXT: https://bugs.chromium.org/p/v8/issues/detail?id=11808.
;; CHECK-NEXT:
;; CHECK-NEXT: --initial-table [split, instrument] A hack to ensure the
;; CHECK-NEXT: split and instrumented modules have the
;; CHECK-NEXT: same table size when using Emscripten's
;; CHECK-NEXT: SPLIT_MODULE mode with dynamic linking.
;; CHECK-NEXT: TODO: Figure out a more elegant solution
;; CHECK-NEXT: for that use case and remove this.
;; CHECK-NEXT:
;; CHECK-NEXT: --emit-text,-S [split, instrument] Emit text instead of
;; CHECK-NEXT: binary for the output file or files.
;; CHECK-NEXT:
;; CHECK-NEXT: --debuginfo,-g [split, multi-split, instrument] Emit
;; CHECK-NEXT: names section in wasm binary (or full
;; CHECK-NEXT: debuginfo in wast)
;; CHECK-NEXT:
;; CHECK-NEXT: --output,-o [instrument, merge-profiles, multi-split]
;; CHECK-NEXT: Output file.
;; CHECK-NEXT:
;; CHECK-NEXT: --unescape,-u Un-escape function names (in
;; CHECK-NEXT: print-profile output)
;; CHECK-NEXT:
;; CHECK-NEXT: --verbose,-v Verbose output mode. Prints the functions
;; CHECK-NEXT: that will be kept and split out when
;; CHECK-NEXT: splitting a module.
;; CHECK-NEXT:
;; CHECK-NEXT:
;; CHECK-NEXT: Tool options:
;; CHECK-NEXT: -------------
;; CHECK-NEXT:
;; CHECK-NEXT: --mvp-features,-mvp Disable all non-MVP features
;; CHECK-NEXT:
;; CHECK-NEXT: --all-features,-all Enable all features
;; CHECK-NEXT:
;; CHECK-NEXT: --detect-features (deprecated - this flag does nothing)
;; CHECK-NEXT:
;; CHECK-NEXT: --quiet,-q Emit less verbose output and hide trivial
;; CHECK-NEXT: warnings.
;; CHECK-NEXT:
;; CHECK-NEXT: --experimental-poppy Parse wast files as Poppy IR for testing
;; CHECK-NEXT: purposes.
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-sign-ext Enable sign extension operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-sign-ext Disable sign extension operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-threads Enable atomic operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-threads Disable atomic operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-mutable-globals Enable mutable globals
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-mutable-globals Disable mutable globals
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-nontrapping-float-to-int Enable nontrapping float-to-int
;; CHECK-NEXT: operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-nontrapping-float-to-int Disable nontrapping float-to-int
;; CHECK-NEXT: operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-simd Enable SIMD operations and types
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-simd Disable SIMD operations and types
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-bulk-memory Enable bulk memory operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-bulk-memory Disable bulk memory operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-exception-handling Enable exception handling operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-exception-handling Disable exception handling operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-tail-call Enable tail call operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-tail-call Disable tail call operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-reference-types Enable reference types
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-reference-types Disable reference types
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-multivalue Enable multivalue functions
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-multivalue Disable multivalue functions
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-gc Enable garbage collection
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-gc Disable garbage collection
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-memory64 Enable memory64
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-memory64 Disable memory64
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-relaxed-simd Enable relaxed SIMD
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-relaxed-simd Disable relaxed SIMD
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-extended-const Enable extended const expressions
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-extended-const Disable extended const expressions
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-strings Enable strings
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-strings Disable strings
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-multimemory Enable multimemory
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-multimemory Disable multimemory
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-typed-continuations Enable typed continuations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-typed-continuations Disable typed continuations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-shared-everything Enable shared-everything threads
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-shared-everything Disable shared-everything threads
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-fp16 Enable float 16 operations
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-fp16 Disable float 16 operations
;; CHECK-NEXT:
;; CHECK-NEXT: --enable-typed-function-references Deprecated compatibility flag
;; CHECK-NEXT:
;; CHECK-NEXT: --disable-typed-function-references Deprecated compatibility flag
;; CHECK-NEXT:
;; CHECK-NEXT: --no-validation,-n Disables validation, assumes inputs are
;; CHECK-NEXT: correct
;; CHECK-NEXT:
;; CHECK-NEXT: --pass-arg,-pa An argument passed along to optimization
;; CHECK-NEXT: passes being run. Must be in the form
;; CHECK-NEXT: KEY@VALUE. If KEY is the name of a pass
;; CHECK-NEXT: then it applies to the closest instance
;; CHECK-NEXT: of that pass before us. If KEY is not the
;; CHECK-NEXT: name of a pass then it is a global option
;; CHECK-NEXT: that applies to all pass instances that
;; CHECK-NEXT: read it.
;; CHECK-NEXT:
;; CHECK-NEXT: --closed-world,-cw Assume code outside of the module does
;; CHECK-NEXT: not inspect or interact with GC and
;; CHECK-NEXT: function references, even if they are
;; CHECK-NEXT: passed out. The outside may hold on to
;; CHECK-NEXT: them and pass them back in, but not
;; CHECK-NEXT: inspect their contents or call them.
;; CHECK-NEXT:
;; CHECK-NEXT: --preserve-type-order Preserve the order of types from the
;; CHECK-NEXT: input (useful for debugging and testing)
;; CHECK-NEXT:
;; CHECK-NEXT: --generate-stack-ir generate StackIR during writing
;; CHECK-NEXT:
;; CHECK-NEXT: --optimize-stack-ir optimize StackIR during writing
;; CHECK-NEXT:
;; CHECK-NEXT: --print-stack-ir print StackIR during writing
;; CHECK-NEXT:
;; CHECK-NEXT:
;; CHECK-NEXT: General options:
;; CHECK-NEXT: ----------------
;; CHECK-NEXT:
;; CHECK-NEXT: --version Output version information and exit
;; CHECK-NEXT:
;; CHECK-NEXT: --help,-h Show this help message and exit
;; CHECK-NEXT:
;; CHECK-NEXT: --debug,-d Print debug information to stderr
;; CHECK-NEXT:
|