Steem Mining in Microsoft Windows : A Builder's Guide (Part 1)

This is a guide for users who like to build a Windows-based Steem miner. Many thanks to @arhag who helped me clear the last Win-build error.

Edit: A user requested the rar files be changed to zip files. These files are changed. Winrar is no longer needed.

Prerequisite

You will need to have a basic level of understanding of Microsoft Windows and Visual Studio compilation.

You will need have 64bit Microsoft Windows7 and above, at least 4GB RAM and 500GB disk space. And a good Internet connection.


Dependencies

First download the following software:

SoftwareLink
Visual Studio 2013 Express (Desktop)https://www.microsoft.com/en-sg/download/details.aspx?id=44914
CMake 2.8.12.2https://cmake.org/files/v2.8/cmake-2.8.12.2-win32-x86.zip
Boost 1.58.0http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.zip
OpenSSLhttps://www.openssl.org/source/
Doxygenhttp://www.stack.nl/~dimitri/doxygen/download.html
ActivePerl 5.16.3 for Windowshttp://www.activestate.com/activeperl/downloads
Python (2.7 or 3.x)https://www.python.org/

Note:

  • Make sure you have sufficient space for Visual Studio 2013. The download file itself is huge, taking up a few Gig of space.
  • Install VS2013 and you will need to use it to compile the rest.

Build Boost

Use this guide: http://www.boost.org/doc/libs/1_58_0/more/getting_started/windows.html

>bootstrap.bat

>b2 --build-dir=build-directory toolset=msvc-12.0  address-model=64  --build-type=complete stage

Note:

The compiled library is in this folder - \boost_1_58_0\stage\lib

Build OpenSSL

Use this guide: http://p-nand-q.com/programming/windows/building_openssl_with_visual_studio_2013.html

>Look under the section "Building the 64-bit Release Static Library"
>Change to the source directory, for example T:\openssl-src-64
>Run perl Configure VC-WIN64A --prefix=T:\Build-OpenSSL-VC64-Release-Static. This will make T:\Build-OpenSSL-VC64-Release-Static your output directory; it should be fairly obvious how you can change that.
>Run ms\do_win64a
>Run nmake -f ms\nt.mak
>Run nmake -f ms\nt.mak install 

Note:

If you need to dive deeper, you can refer to this guide - http://developer.covenanteyes.com/building-openssl-for-visual-studio/

Build Doxygen

Use this guide: http://www.stack.nl/~dimitri/doxygen/download.html

>git clone https://github.com/doxygen/doxygen.git

>cd doxygen

>cmake.exe -G "Visual Studio 12 Win64"

>Open the generated Visual Studio solution file and use it to compile doxygen

[]


> Right-click on the "ALL_BUILD" project file and click Build.

Let's Check Out Steem

I have encountered numerous obstacles with building Steem on Visual Studio 2013, namely it does not follow C++ standards closely. I am sharing with you a working build and possible pit holes to watch out for.

There are some changes needed to be make to the original Steem source codes to make it compatible with Windows. I have made the pull requests and they are pending review and approval by the developers. For now, I place the changes in btscube repository in github.

>Add CMake.exe to the PATH environment variable

>L:\mkdir steem

>cd steem

>https://github.com/btscube/steem

>cd steem

>git submodule update --init --recursive


>mkdir build

>cd build

>set BOOST_ROOT=L:\boost_1_58_0

>set OPENSSL_ROOT_DIR=L:\OpenSSL 

>set DOXYGEN_EXECUTABLE=L:\doxygen\bin\doxygen.exe

>cmake.exe -G "Visual Studio 12 Win64" -DBOOST_ROOT="$BOOST_ROOT" -DOPENSSL_ROOT_DIR="$OPENSSL_ROOT" -DDOXYGEN_EXECUTABLE="$DOXYGEN_EXECUTABLE" -DCMAKE_BUILD_TYPE=Release -DLOW_MEMORY_NODE=ON ..\steem

You should see an output as follows:

-- BUILD_STEEM_TESTNET: OFF
-- LOW_MEMORY_NODE: ON
--
--              CONFIGURING FOR LOW MEMORY NODE
--
-- Using custom FindBoost.cmake
-- Boost version: 1.58.0
-- Found the following Boost libraries:
--   thread
--   date_time
--   system
--   filesystem
--   program_options
--   signals
--   serialization
--   chrono
--   unit_test_framework
--   context
--   locale
-- Using custom FindBoost.cmake
-- Boost version: 1.58.0
-- Found the following Boost libraries:
--   coroutine
-- Configuring Steem on WIN32
-- tcl INCLUDE PATH: /include
-- Could NOT find Tclsh (missing:  TCL_TCLSH)
-- Could NOT find TCL (missing:  TCL_LIBRARY)
-- Could NOT find TCLTK (missing:  TCL_LIBRARY TK_LIBRARY TK_INCLUDE_PATH)
-- Could NOT find TK (missing:  TK_LIBRARY TK_INCLUDE_PATH)
-- tcl_library: TCL_LIBRARY-NOTFOUND
-- Configuring project fc located in: L:/stm2/steem/libraries/fc
-- Configuring fc to build on Win32
-- Using custom FindBoost.cmake
-- Boost version: 1.58.0
-- Found the following Boost libraries:
--   thread
--   date_time
--   system
--   filesystem
--   program_options
--   signals
--   serialization
--   chrono
--   unit_test_framework
--   context
--   locale
--   iostreams
-- Using custom FindBoost.cmake
-- Boost version: 1.58.0
-- Found the following Boost libraries:
--   coroutine
-- Setting up OpenSSL root and include vars to L:\OpenSSL, L:\OpenSSL/include
-- Found OpenSSL: L:/openssl/lib/ssleay32.lib;L:/openssl/lib/libeay32.lib (found version "1.0.1g")
** websocketpp

=========== Used Build Configuration =============

-- ENABLE_CPP11        = ON
-- BUILD_EXAMPLES      = OFF
-- BUILD_TESTS         = OFF

-- WEBSOCKETPP_ROOT    = L:/steem/steem/libraries/fc/vendor/websocketpp
-- WEBSOCKETPP_BIN     = L:/steem/build/libraries/fc/vendor/websocketpp/bin
-- WEBSOCKETPP_LIB     = L:/steem/build/libraries/fc/vendor/websocketpp/lib
-- Install prefix      = L:/steem/steem/libraries/fc/vendor/websocketpp/install

-- WEBSOCKETPP_BOOST_LIBS        =
-- WEBSOCKETPP_PLATFORM_LIBS     =
-- WEBSOCKETPP_PLATFORM_TLS_LIBS =

-- OPENSSL_FOUND        = TRUE
-- OPENSSL_INCLUDE_DIR     = L:\OpenSSL/include
-- OPENSSL_LIBRARIES = L:/openssl/lib/ssleay32.lib;L:/openssl/lib/libeay32.lib
-- OPENSSL_VERSION = 1.0.1g

-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
-- Readline path
-- Could NOT find Readline (missing:  Readline_INCLUDE_DIR Readline_LIBRARY)
-- eay=L:/openssl/bin/libeay32.dll
-- Finished fc module configuration...
--

             CONFIGURED FOR STEEM NETWORK


--

             CONFIGURED FOR LOW MEMORY NODE


-- Configuring done
-- Generating done
-- Build files have been written to: L:/steem/build

Note:

  • The example above uses drive L:. You may use other path location.
  • This configuration builds steem as a low-memory node, you can opt to turn it off.
  • This configuration has "ENABLE_CONTENT_PATCHING" off. You can opt to turn it on by adding this parameter to the cmake command "-ENABLE_CONTENT_PATCHING=ON"
  • You can safely ignore the error with ncurses and readline. They are not really needed.

Let's build Steem!

CMake will generate a list of files and folders for the build.

[]

>Open the Steem.sln solution

On the right plane, you will see a list of projects.

[]

>Right-click the secp256k1 project and unload it.

>Get the extra file secp256k1-zkp.zip from 
https://mega.nz/#!2Zo0GKII!sX2kIA-1hiRcjvLei1cCz7gqdCNJC9IjnUwvClrUK0o


>Extra the folder from the rar file and replace the your local subfolder eg L:\steem\steem\libraries\fc\vendor\secp256k1-zkp with it.

Note:

  • The original secp256k1 project included is slow in mining. We will use a highly optimised one from btscube github instead.

[]

>Right-click on the steemd project and build it

>Once it is successfully built, you will find steem.exe in the folder \build\programs\steemd\Release

Now we are ready to build the cli_wallet.

[]

>Right-click on the cli_wallet project and build it

>Once it is successfully built, you will find cli_wallet.exe in the folder \build\programs\cli_wallet\Release

Running the newly built Steem

I will touch on running Steem in Part 2 of the guide. You will need the following runtime components.

Steem Runtime ComponentsLink
Visual C++ Redistributable Packages for Visual Studio 2013https://www.microsoft.com/en-us/download/details.aspx?id=40784
runtimeparts.ziphttps://mega.nz/#!2Zo0GKII!sX2kIA-1hiRcjvLei1cCz7gqdCNJC9IjnUwvClrUK0o

Stay tuned for Part 2!

H2
H3
H4
3 columns
2 columns
1 column
15 Comments