summaryrefslogtreecommitdiff
path: root/test/lit/wasm-split
diff options
context:
space:
mode:
authorThomas Lively <7121787+tlively@users.noreply.github.com>2021-06-01 15:26:55 -0400
committerGitHub <noreply@github.com>2021-06-01 19:26:55 +0000
commite40396003798678803f4091ac4132aefa3905d7a (patch)
treefe09746fd4a3f688edbdff718edc847ac7aeb548 /test/lit/wasm-split
parent028f47368fe844130f52ad7811c8028ebd18a38e (diff)
downloadbinaryen-e40396003798678803f4091ac4132aefa3905d7a.tar.gz
binaryen-e40396003798678803f4091ac4132aefa3905d7a.tar.bz2
binaryen-e40396003798678803f4091ac4132aefa3905d7a.zip
[wasm-split] Make option validation declarative (#3916)
In anticipation of adding a third wasm-split mode, merge-profiles, in addition to the existing split and instrument modes, refactor wasm-split's option validation to let the valid modes be declared for each option. This approach is more scalable and robust than the ad-hoc validation we had previously.
Diffstat (limited to 'test/lit/wasm-split')
-rw-r--r--test/lit/wasm-split/help.test68
-rw-r--r--test/lit/wasm-split/invalid-options.wast26
2 files changed, 81 insertions, 13 deletions
diff --git a/test/lit/wasm-split/help.test b/test/lit/wasm-split/help.test
new file mode 100644
index 000000000..c473b28a1
--- /dev/null
+++ b/test/lit/wasm-split/help.test
@@ -0,0 +1,68 @@
+;; RUN: wasm-split --help | filecheck %s
+
+CHECK: wasm-split INFILE
+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: Options:
+
+;; Skip standard tool options
+
+CHECK: --split Split an input module into two output
+CHECK-NEXT: modules. The default mode.
+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: --profile [split] The profile to use to guide
+CHECK-NEXT: splitting.
+CHECK-NEXT: --keep-funcs [split] Comma-separated list of functions
+CHECK-NEXT: to keep in the primary module, regardless
+CHECK-NEXT: of any profile.
+CHECK-NEXT: --split-funcs [split] Comma-separated list of functions
+CHECK-NEXT: to split into the secondary module,
+CHECK-NEXT: regardless of any profile. If there is no
+CHECK-NEXT: profile, then this defaults to all
+CHECK-NEXT: functions defined in the module.
+CHECK-NEXT: --primary-output,-o1 [split] Output file for the primary
+CHECK-NEXT: module.
+CHECK-NEXT: --secondary-output,-o2 [split] Output file for the secondary
+CHECK-NEXT: module.
+CHECK-NEXT: --symbolmap [split] Write a symbol map file for each
+CHECK-NEXT: of the output modules.
+CHECK-NEXT: --import-namespace [split] The namespace from which to
+CHECK-NEXT: import objects from the primary module
+CHECK-NEXT: into the secondary module.
+CHECK-NEXT: --placeholder-namespace [split] The namespace from which to
+CHECK-NEXT: import placeholder functions into the
+CHECK-NEXT: primary module.
+CHECK-NEXT: --export-prefix [split] An identifying prefix to prepend
+CHECK-NEXT: to new export names created by module
+CHECK-NEXT: splitting.
+CHECK-NEXT: --output,-o [instrument] Output file.
+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: --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: --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: --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: --emit-text,-S Emit text instead of binary for the
+CHECK-NEXT: output file or files.
+CHECK-NEXT: --debuginfo,-g Emit names section in wasm binary (or
+CHECK-NEXT: full debuginfo in wast)
diff --git a/test/lit/wasm-split/invalid-options.wast b/test/lit/wasm-split/invalid-options.wast
index 32899b87b..89a68e6aa 100644
--- a/test/lit/wasm-split/invalid-options.wast
+++ b/test/lit/wasm-split/invalid-options.wast
@@ -39,32 +39,32 @@
;; Split mode requires -o1 and -o2 rather than -o
;; RUN: not wasm-split %s -o %t 2>&1 \
-;; RUN: | filecheck %s --check-prefix NO-INSTRUMENT-OUT
+;; RUN: | filecheck %s --check-prefix SPLIT-OUT
;; --instrument is required to use --profile-export
;; RUN: not wasm-split %s --profile-export=foo 2>&1 \
-;; RUN: | filecheck %s --check-prefix NO-INSTRUMENT-PROFILE-EXPORT
+;; RUN: | filecheck %s --check-prefix SPLIT-PROFILE-EXPORT
-;; INSTRUMENT-PROFILE: error: --profile cannot be used with --instrument
+;; INSTRUMENT-PROFILE: error: Option --profile cannot be used in instrument mode.
-;; INSTRUMENT-OUT1: error: primary output cannot be used with --instrument
+;; INSTRUMENT-OUT1: error: Option --primary-output cannot be used in instrument mode.
-;; INSTRUMENT-OUT2: error: secondary output cannot be used with --instrument
+;; INSTRUMENT-OUT2: error: Option --secondary-output cannot be used in instrument mode.
-;; INSTRUMENT-SYMBOLMAP: error: --symbolmap cannot be used with --instrument
+;; INSTRUMENT-SYMBOLMAP: error: Option --symbolmap cannot be used in instrument mode.
-;; INSTRUMENT-IMPORT-NS: error: --import-namespace cannot be used with --instrument
+;; INSTRUMENT-IMPORT-NS: error: Option --import-namespace cannot be used in instrument mode.
-;; INSTRUMENT-PLACEHOLDER-NS: error: --placeholder-namespace cannot be used with --instrument
+;; INSTRUMENT-PLACEHOLDER-NS: error: Option --placeholder-namespace cannot be used in instrument mode.
-;; INSTRUMENT-EXPORT-PREFIX: error: --export-prefix cannot be used with --instrument
+;; INSTRUMENT-EXPORT-PREFIX: error: Option --export-prefix cannot be used in instrument mode.
-;; INSTRUMENT-KEEP-FUNCS: error: --keep-funcs cannot be used with --instrument
+;; INSTRUMENT-KEEP-FUNCS: error: Option --keep-funcs cannot be used in instrument mode.
-;; INSTRUMENT-SPLIT-FUNCS: error: --split-funcs cannot be used with --instrument
+;; INSTRUMENT-SPLIT-FUNCS: error: Option --split-funcs cannot be used in instrument mode.
-;; NO-INSTRUMENT-OUT: error: must provide separate primary and secondary output with -o1 and -o2
+;; SPLIT-OUT: error: Option --output cannot be used in split mode.
-;; NO-INSTRUMENT-PROFILE-EXPORT: error: --profile-export must be used with --instrument
+;; SPLIT-PROFILE-EXPORT: error: Option --profile-export cannot be used in split mode.
(module)