mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
96 lines
4.3 KiB
Markdown
96 lines
4.3 KiB
Markdown
WINDOWS BUILD NOTES
|
|
====================
|
|
|
|
Below are some notes on how to build Dash Core for Windows.
|
|
|
|
The options known to work for building Dash Core on Windows are:
|
|
|
|
* On Linux, using the [Mingw-w64](https://www.mingw-w64.org/) cross compiler tool chain.
|
|
* On Windows, using [Windows Subsystem for Linux (WSL)](https://docs.microsoft.com/windows/wsl/about) and Mingw-w64.
|
|
|
|
Other options which may work, but which have not been extensively tested are (please contribute instructions):
|
|
|
|
* On Windows, using a POSIX compatibility layer application such as [cygwin](https://www.cygwin.com/) or [msys2](https://www.msys2.org/).
|
|
|
|
Installing Windows Subsystem for Linux
|
|
---------------------------------------
|
|
|
|
Follow the upstream installation instructions, available [here](https://docs.microsoft.com/windows/wsl/install-win10).
|
|
|
|
Cross-compilation
|
|
-------------------
|
|
|
|
The steps below can be performed on Ubuntu or WSL. The depends system
|
|
will also work on other Linux distributions, however the commands for
|
|
installing the toolchain will be different.
|
|
|
|
First, install the general dependencies:
|
|
|
|
sudo apt-get install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl git bison
|
|
|
|
A host toolchain (`build-essential`) is necessary because some dependency
|
|
packages need to build host utilities that are used in the build process.
|
|
|
|
See [dependencies.md](dependencies.md) for a complete overview.
|
|
|
|
## Building for 64-bit Windows
|
|
|
|
The first step is to install the mingw-w64 cross-compilation tool chain:
|
|
|
|
sudo apt-get install g++-mingw-w64-x86-64 mingw-w64-x86-64-dev
|
|
|
|
Ubuntu Focal 20.04 <sup>[1](#footnote1)</sup>:
|
|
|
|
sudo update-alternatives --config x86_64-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix.
|
|
|
|
Once the toolchain is installed the build steps are common:
|
|
|
|
Note that for WSL the Dash Core source path MUST be somewhere in the default mount file system, for
|
|
example /usr/src/dash, AND not under /mnt/d/. If this is not the case the dependency autoconf scripts will fail.
|
|
This means you cannot use a directory that is located directly on the host Windows file system to perform the build.
|
|
|
|
Additional WSL Note: WSL support for [launching Win32 applications](https://docs.microsoft.com/en-us/archive/blogs/wsl/windows-and-ubuntu-interoperability#launching-win32-applications-from-within-wsl)
|
|
results in `Autoconf` configure scripts being able to execute Windows Portable Executable files. This can cause
|
|
unexpected behaviour during the build, such as Win32 error dialogs for missing libraries. The recommended approach
|
|
is to temporarily disable WSL support for Win32 applications.
|
|
|
|
Build using:
|
|
|
|
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var
|
|
sudo bash -c "echo 0 > /proc/sys/fs/binfmt_misc/status" # Disable WSL support for Win32 applications.
|
|
cd depends
|
|
make HOST=x86_64-w64-mingw32
|
|
cd ..
|
|
./autogen.sh
|
|
CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure --prefix=/
|
|
make # use "-j N" for N parallel jobs
|
|
sudo bash -c "echo 1 > /proc/sys/fs/binfmt_misc/status" # Enable WSL support for Win32 applications.
|
|
|
|
## Depends system
|
|
|
|
For further documentation on the depends system see [README.md](../depends/README.md) in the depends directory.
|
|
|
|
Installation
|
|
-------------
|
|
|
|
After building using the Windows subsystem it can be useful to copy the compiled
|
|
executables to a directory on the Windows drive in the same directory structure
|
|
as they appear in the release `.zip` archive. This can be done in the following
|
|
way. This will install to `c:\workspace\dash`, for example:
|
|
|
|
make install DESTDIR=/mnt/c/workspace/dash
|
|
|
|
You can also create an installer using:
|
|
|
|
make deploy
|
|
|
|
Footnotes
|
|
---------
|
|
|
|
<a name="footnote1">1</a>: Starting from Ubuntu Xenial 16.04, both the 32 and 64 bit Mingw-w64 packages install two different
|
|
compiler options to allow a choice between either posix or win32 threads. The default option is win32 threads which is the more
|
|
efficient since it will result in binary code that links directly with the Windows kernel32.lib. Unfortunately, the headers
|
|
required to support win32 threads conflict with some of the classes in the C++11 standard library, in particular std::mutex.
|
|
It's not possible to build the Dash Core code using the win32 version of the Mingw-w64 cross compilers (at least not without
|
|
modifying headers in the Dash Core source code).
|