From 709bca8d2c59923cd397fc55cdcdb7f80751555d Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 30 Mar 2018 09:41:36 -0700 Subject: 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) --- src/support/CMakeLists.txt | 1 + src/support/path.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++ src/support/path.h | 37 ++++++++++---------------- src/tools/wasm-reduce.cpp | 60 +++++++++++++++++++++--------------------- 4 files changed, 109 insertions(+), 54 deletions(-) create mode 100644 src/support/path.cpp (limited to 'src') 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 -// 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 functionsWeTriedToRemove; struct Reducer : public WalkerPass>> { - 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