diff options
-rw-r--r-- | CMakeLists.txt | 56 | ||||
-rw-r--r-- | main.cpp | 106 |
2 files changed, 162 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..ff5d672d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,56 @@ +cmake_policy(SET CMP0015 NEW) + +aux_source_directory(. SRC_LIST) + +include_directories(..) +#link_directories(../libethsupport) +#link_directories(../libethcore) +#link_directories(../liblll) + +set(EXECUTABLE lllc) + +add_executable(${EXECUTABLE} ${SRC_LIST}) + +if (JSONRPC_LS) + add_definitions(-DETH_JSONRPC) + include_directories(${JSONRPC_ID}) + target_link_libraries(${EXECUTABLE} ${JSONRPC_LS}) +endif () + +if (READLINE_LS) + add_definitions(-DETH_READLINE) + include_directories(${READLINE_ID}) + target_link_libraries(${EXECUTABLE} ${READLINE_LS}) +endif () + +if (${TARGET_PLATFORM} STREQUAL "w64") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++") + target_link_libraries(${EXECUTABLE} gcc) + target_link_libraries(${EXECUTABLE} gdi32) + target_link_libraries(${EXECUTABLE} ws2_32) + target_link_libraries(${EXECUTABLE} mswsock) + target_link_libraries(${EXECUTABLE} shlwapi) + target_link_libraries(${EXECUTABLE} iphlpapi) + target_link_libraries(${EXECUTABLE} cryptopp) + target_link_libraries(${EXECUTABLE} boost_system-mt-s) + target_link_libraries(${EXECUTABLE} boost_filesystem-mt-s) + target_link_libraries(${EXECUTABLE} boost_thread_win32-mt-s) + set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS) +elseif (UNIX) +else () + target_link_libraries(${EXECUTABLE} ${CRYPTOPP_LIBRARIES}) + target_link_libraries(${EXECUTABLE} boost_system) + target_link_libraries(${EXECUTABLE} boost_filesystem) + find_package(Threads REQUIRED) + target_link_libraries(${EXECUTABLE} ${CMAKE_THREAD_LIBS_INIT}) +endif () + +target_link_libraries(${EXECUTABLE} lll) +target_link_libraries(${EXECUTABLE} ethcore) +target_link_libraries(${EXECUTABLE} ethsupport) +target_link_libraries(${EXECUTABLE} ${MINIUPNPC_LS}) +target_link_libraries(${EXECUTABLE} ${LEVELDB_LS}) +target_link_libraries(${EXECUTABLE} gmp) + +install( TARGETS ${EXECUTABLE} DESTINATION bin ) + diff --git a/main.cpp b/main.cpp new file mode 100644 index 00000000..1afc3ef6 --- /dev/null +++ b/main.cpp @@ -0,0 +1,106 @@ +/* + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + cpp-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>. +*/ +/** @file main.cpp + * @author Gav Wood <i@gavwood.com> + * @date 2014 + * Ethereum client. + */ + +#include <fstream> +#include <iostream> +#include <liblll/Compiler.h> +#include <libethsupport/CommonIO.h> +#include <libethsupport/CommonData.h> +#include "BuildInfo.h" +using namespace std; +using namespace eth; + +void help() +{ + cout + << "Usage lllc [OPTIONS] <file>" << endl + << "Options:" << endl + << " -h,--help Show this help message and exit." << endl + << " -V,--version Show the version and exit." << endl; + exit(0); +} + +void version() +{ + cout << "LLLC, the Lovely Little Language Compiler " << ETH_QUOTED(ETH_VERSION) << endl; + cout << " By Gav Wood, (c) 2014." << endl; + cout << "Build: " << ETH_QUOTED(ETH_BUILD_PLATFORM) << "/" << ETH_QUOTED(ETH_BUILD_TYPE) << endl; + exit(0); +} + +enum Mode { Binary, Hex, ParseTree }; + +int main(int argc, char** argv) +{ + string infile; + Mode mode = Hex; + + for (int i = 1; i < argc; ++i) + { + string arg = argv[i]; + if (arg == "-h" || arg == "--help") + help(); + else if (arg == "-b" || arg == "--binary") + mode = Binary; + else if (arg == "-h" || arg == "--hex") + mode = Hex; + else if (arg == "-t" || arg == "--parse-tree") + mode = ParseTree; + else if (arg == "-V" || arg == "--version") + version(); + else + infile = argv[i]; + } + + string src; + if (infile.empty()) + { + string s; + while (!cin.eof()) + { + getline(cin, s); + src.append(s); + } + } + else + src = asString(contents(infile)); + + if (src.empty()) + cerr << "Empty file." << endl; + else if (mode == Binary || mode == Hex) + { + vector<string> errors; + auto bs = compileLLL(src, &errors); + if (mode == Hex) + cout << toHex(bs) << endl; + else if (mode == Binary) + cout.write((char const*)bs.data(), bs.size()); + for (auto const& i: errors) + cerr << i << endl; + } + else if (mode == ParseTree) + { + cout << parseLLL(src) << endl; + } + + return 0; +} |