# Setup Indy SDK build environment for Windows
## Get/build dependencies
All prebuilt can be downloaded from
https://repo.evernym.com/deb/windows-bins/indy-sdk-deps/
### Binary deps
- https://www.npcglib.org/~stathis/downloads/openssl-1.0.2k-vs2017.7z
- https://download.libsodium.org/libsodium/releases/libsodium-1.0.12-msvc.zip
### Source deps
- http://www.sqlite.org/2017/sqlite-amalgamation-3180000.zip
- https://github.com/miracl/milagro-crypto-c/
- https://github.com/evernym/libzmq-pw
### Build sqlite
Download http://www.sqlite.org/2017/sqlite-amalgamation-3180000.zip
Create empty static library project and add sqlite.c file and 2 headers from exctraced
archive. Then just build it.
### Build milagro-crypto-c
Checkout https://github.com/miracl/milagro-crypto-c/ repository.
- cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -G "Visual Studio 15 2017 Win64" .
- open AMCL.sln
- disable custom build steps
- build it
### Build libzmq-pw
Checkout https://github.com/evernym/libzmq-pw repository.
- open builds/msvc/vs2017/libzmq.sln
- switch "draft API" and "libsodium" options on
- change "output file name" to $(TargetName)-pw
- build (it may print errors while
building tests which can be ignored)
## Build
- Get binary dependencies (libamcl*, openssl, libsodium, libzmq, sqlite3).
- Put all *.{lib,dll} into one directory and headers into include/ subdirectory.
- Configure MSVS environment to privide 64-bit builds by execution of `vcvars64.bat`:
```
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\"vcvars64.bat
```
Note that depending on the version of Visual Studio placement of vcvars64.bat can be different. For example, it can be
`C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat`
- execute "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
- Point path to this directory using environment variables:
- set INDY_PREBUILT_DEPS_DIR=C:\BIN\x64
- set SODIUM_LIB_DIR=C:\BIN\x64
- set OPENSSL_INCLUDE_DIR=C:\BIN\x64\include
- set OPENSSL_LIB_DIR=C:\BIN\x64
- set LIBZMQ_LIB_DIR=C:\BIN\x64
- set LIBZMQ_INCLUDE_DIR=C:\BIN\x64\include
- set static flag for libsodium build
- set SODIUM_STATIC=y
- set PATH to find .dlls:
- set PATH=C:\BIN\x64;%PATH%
- change dir to indy-client and run cargo (you may want to add --release --target x86_64-pc-windows-msvc keys to cargo)
## openssl-sys workaround
When your windows build fails complaining on gdi32.lib you should edit
```
~/.cargo/registry/src/github.com-*/openssl-sys-*/build.rs
```
and add
```
println!("cargo:rustc-link-lib=dylib=gdi32");
```
to the end of main() function.
Then try to rebuild whole project.