#ifndef wasm_tools_wasm_split_options_h
#define wasm_tools_wasm_split_options_h
#include "tools/tool-options.h"
namespace wasm {
const std::string DEFAULT_PROFILE_EXPORT("__write_profile");
struct WasmSplitOptions : ToolOptions {
enum class Mode : unsigned {
Split,
Instrument,
MergeProfiles,
PrintProfile,
};
Mode mode = Mode::Split;
constexpr static size_t NumModes =
static_cast<unsigned>(Mode::PrintProfile) + 1;
enum class StorageKind : unsigned {
InGlobals, InMemory, InSecondaryMemory, };
StorageKind storageKind = StorageKind::InGlobals;
bool unescape = false;
bool verbose = false;
bool emitBinary = true;
bool symbolMap = false;
bool placeholderMap = false;
bool jspi = false;
bool emitModuleNames = false;
std::string profileFile;
std::string profileExport = DEFAULT_PROFILE_EXPORT;
std::set<Name> keepFuncs;
std::set<Name> splitFuncs;
std::vector<std::string> inputFiles;
std::string output;
std::string primaryOutput;
std::string secondaryOutput;
std::string importNamespace;
std::string placeholderNamespace;
std::string secondaryMemoryName;
std::string exportPrefix;
int initialTableSize = -1;
std::array<std::unordered_set<std::string>, NumModes> validOptions;
std::vector<std::string> usedOptions;
WasmSplitOptions();
WasmSplitOptions& add(const std::string& longName,
const std::string& shortName,
const std::string& description,
const std::string& category,
std::vector<Mode>&& modes,
Arguments arguments,
const Action& action);
WasmSplitOptions& add(const std::string& longName,
const std::string& shortName,
const std::string& description,
const std::string& category,
Arguments arguments,
const Action& action);
bool validate();
void parse(int argc, const char* argv[]);
};
}
#endif