summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2018-03-30 09:41:36 -0700
committerGitHub <noreply@github.com>2018-03-30 09:41:36 -0700
commit709bca8d2c59923cd397fc55cdcdb7f80751555d (patch)
tree84119269a7ce40c7b51d950097f668249659b8e9 /src
parent5f61c3208212beaf9e69230f69770ab64c61e06f (diff)
downloadbinaryen-709bca8d2c59923cd397fc55cdcdb7f80751555d.tar.gz
binaryen-709bca8d2c59923cd397fc55cdcdb7f80751555d.tar.bz2
binaryen-709bca8d2c59923cd397fc55cdcdb7f80751555d.zip
refactor Path utils: store the bin/ dir so that all users of the API can use it by the standard calls, even if it was modified by user input (move it out of just being in wasm-reduce.cpp) (#1489)
Diffstat (limited to 'src')
-rw-r--r--src/support/CMakeLists.txt1
-rw-r--r--src/support/path.cpp65
-rw-r--r--src/support/path.h37
-rw-r--r--src/tools/wasm-reduce.cpp60
4 files changed, 109 insertions, 54 deletions
diff --git a/src/support/CMakeLists.txt b/src/support/CMakeLists.txt
index b12ef6edd..b3373d076 100644
--- a/src/support/CMakeLists.txt
+++ b/src/support/CMakeLists.txt
@@ -4,6 +4,7 @@ SET(support_SOURCES
colors.cpp
command-line.cpp
file.cpp
+ path.cpp
safe_integer.cpp
threads.cpp
)
diff --git a/src/support/path.cpp b/src/support/path.cpp
new file mode 100644
index 000000000..322099a95
--- /dev/null
+++ b/src/support/path.cpp
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2018 WebAssembly Community Group participants
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//
+// Command line helpers.
+//
+
+#include "support/path.h"
+
+namespace wasm {
+
+namespace Path {
+
+std::string getPathSeparator() {
+ // TODO: use c++17's path separator
+ // http://en.cppreference.com/w/cpp/experimental/fs/path
+#if defined(WIN32) || defined(_WIN32)
+ return "\\";
+#else
+ return "/";
+#endif
+}
+
+std::string getBinaryenRoot() {
+ auto* envVar = getenv("BINARYEN_ROOT");
+ if (envVar) return envVar;
+ return ".";
+}
+
+static std::string binDir;
+
+std::string getBinaryenBinDir() {
+ if (binDir.empty()) {
+ return getBinaryenRoot() + getPathSeparator() + "bin" + getPathSeparator();
+ } else {
+ return binDir;
+ }
+}
+
+void setBinaryenBinDir(std::string dir) {
+ binDir = dir;
+}
+
+// Gets the path to a binaryen binary tool, like wasm-opt
+std::string getBinaryenBinaryTool(std::string name) {
+ return getBinaryenBinDir() + name;
+}
+
+} // namespace Path
+
+} // namespace wasm
+
diff --git a/src/support/path.h b/src/support/path.h
index 5852fcc4d..505ba0d88 100644
--- a/src/support/path.h
+++ b/src/support/path.h
@@ -28,30 +28,19 @@ namespace wasm {
namespace Path {
-inline std::string getPathSeparator() {
- // TODO: use c++17's path separator
- // http://en.cppreference.com/w/cpp/experimental/fs/path
-#if defined(WIN32) || defined(_WIN32)
- return "\\";
-#else
- return "/";
-#endif
-}
-
-inline std::string getBinaryenRoot() {
- auto* envVar = getenv("BINARYEN_ROOT");
- if (envVar) return envVar;
- return ".";
-}
-
-inline std::string getBinaryenBinDir() {
- return getBinaryenRoot() + getPathSeparator() + "bin" + getPathSeparator();
-}
-
-// Gets the path to a binaryen binary tool, like wasm-opt
-inline std::string getBinaryenBinaryTool(std::string name) {
- return getBinaryenBinDir() + name;
-}
+std::string getPathSeparator();
+
+// Get the binaryen root dor.
+std::string getBinaryenRoot();
+
+// Get the binaryen bin dir.
+std::string getBinaryenBinDir();
+
+// Set the binaryen bin dir (allows tools to change it based on user input).
+void setBinaryenBinDir(std::string dir);
+
+// Gets the path to a binaryen binary tool, like wasm-opt.
+std::string getBinaryenBinaryTool(std::string name);
} // namespace Path
diff --git a/src/tools/wasm-reduce.cpp b/src/tools/wasm-reduce.cpp
index f8ed04abb..4a941156d 100644
--- a/src/tools/wasm-reduce.cpp
+++ b/src/tools/wasm-reduce.cpp
@@ -41,28 +41,28 @@
#define NOMINMAX
#endif
#include <Windows.h>
-// Create a string with last error message
-std::string GetLastErrorStdStr() {
- DWORD error = GetLastError();
- if (error) {
- LPVOID lpMsgBuf;
- DWORD bufLen = FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- error,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR) &lpMsgBuf,
- 0, NULL );
- if (bufLen) {
- LPCSTR lpMsgStr = (LPCSTR)lpMsgBuf;
- std::string result(lpMsgStr, lpMsgStr+bufLen);
- LocalFree(lpMsgBuf);
- return result;
- }
- }
- return std::string();
+// Create a string with last error message
+std::string GetLastErrorStdStr() {
+ DWORD error = GetLastError();
+ if (error) {
+ LPVOID lpMsgBuf;
+ DWORD bufLen = FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ error,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPTSTR) &lpMsgBuf,
+ 0, NULL );
+ if (bufLen) {
+ LPCSTR lpMsgStr = (LPCSTR)lpMsgBuf;
+ std::string result(lpMsgStr, lpMsgStr+bufLen);
+ LocalFree(lpMsgBuf);
+ return result;
+ }
+ }
+ return std::string();
}
#endif
using namespace wasm;
@@ -216,12 +216,12 @@ ProgramResult expected;
static std::unordered_set<Name> functionsWeTriedToRemove;
struct Reducer : public WalkerPass<PostWalker<Reducer, UnifiedExpressionVisitor<Reducer>>> {
- std::string command, test, working, binaryenBinDir;
+ std::string command, test, working;
bool verbose, debugInfo;
// test is the file we write to that the command will operate on
// working is the current temporary state, the reduction so far
- Reducer(std::string command, std::string test, std::string working, bool verbose, bool debugInfo, std::string binaryenBinDir) : command(command), test(test), working(working), binaryenBinDir(binaryenBinDir), verbose(verbose), debugInfo(debugInfo) {}
+ Reducer(std::string command, std::string test, std::string working, bool verbose, bool debugInfo) : command(command), test(test), working(working), verbose(verbose), debugInfo(debugInfo) {}
// runs passes in order to reduce, until we can't reduce any more
// the criterion here is wasm binary size
@@ -261,7 +261,7 @@ struct Reducer : public WalkerPass<PostWalker<Reducer, UnifiedExpressionVisitor<
// try both combining with a generic shrink (so minor pass overhead is compensated for), and without
for (auto shrinking : { false, true }) {
for (auto pass : passes) {
- std::string currCommand = binaryenBinDir + "wasm-opt" + " ";
+ std::string currCommand = Path::getBinaryenBinaryTool("wasm-opt") + " ";
if (shrinking) currCommand += " --dce --vacuum ";
currCommand += working + " -o " + test + " " + pass;
if (debugInfo) currCommand += " -g ";
@@ -726,7 +726,7 @@ struct Reducer : public WalkerPass<PostWalker<Reducer, UnifiedExpressionVisitor<
//
int main(int argc, const char* argv[]) {
- std::string input, test, working, command, binaryenBinDir = Path::getBinaryenBinDir();
+ std::string input, test, working, command;
bool verbose = false,
debugInfo = false,
force = false;
@@ -750,11 +750,11 @@ int main(int argc, const char* argv[]) {
[&](Options* o, const std::string& argument) {
working = argument;
})
- .add("--binaries", "-b", "binaryen binaries location",
+ .add("--binaries", "-b", "binaryen binaries location (bin/ directory)",
Options::Arguments::One,
[&](Options* o, const std::string& argument) {
// Add separator just in case
- binaryenBinDir = argument + Path::getPathSeparator();
+ Path::setBinaryenBinDir(argument + Path::getPathSeparator());
})
.add("--verbose", "-v", "Verbose output mode",
Options::Arguments::Zero,
@@ -824,7 +824,7 @@ int main(int argc, const char* argv[]) {
std::cerr << "|checking that command has expected behavior on canonicalized (read-written) binary\n";
{
// read and write it
- ProgramResult readWrite(binaryenBinDir + "wasm-opt" + " " + input + " -o " + test);
+ ProgramResult readWrite(Path::getBinaryenBinaryTool("wasm-opt") + " " + input + " -o " + test);
if (readWrite.failed()) {
stopIfNotForced("failed to read and write the binary", readWrite);
} else {
@@ -848,7 +848,7 @@ int main(int argc, const char* argv[]) {
bool stopping = false;
while (1) {
- Reducer reducer(command, test, working, verbose, debugInfo, binaryenBinDir);
+ Reducer reducer(command, test, working, verbose, debugInfo);
// run binaryen optimization passes to reduce. passes are fast to run
// and can often reduce large amounts of code efficiently, as opposed