|
| 1 | +WINDOWS BUILD NOTES |
| 2 | +==================== |
| 3 | + |
| 4 | +Below are some notes on how to build Dobbscoin Core for Windows. |
| 5 | + |
| 6 | +The options known to work for building Dobbscoin Core on Windows are: |
| 7 | + |
| 8 | +* On Linux, using the [Mingw-w64](https://mingw-w64.org/doku.php) cross compiler tool chain. Ubuntu Bionic 18.04 is required |
| 9 | +and is the platform used to build the Dobbscoin Core Windows release binaries. |
| 10 | +* On Windows, using [Windows |
| 11 | +Subsystem for Linux (WSL)](https://docs.microsoft.com/windows/wsl/about) and the Mingw-w64 cross compiler tool chain. |
| 12 | +* On Windows, using a native compiler tool chain such as [Visual Studio](https://www.visualstudio.com). See [README.md](/build_msvc/README.md). |
| 13 | + |
| 14 | +Other options which may work, but which have not been extensively tested are (please contribute instructions): |
| 15 | + |
| 16 | +* On Windows, using a POSIX compatibility layer application such as [cygwin](https://www.cygwin.com/) or [msys2](https://www.msys2.org/). |
| 17 | + |
| 18 | +Installing Windows Subsystem for Linux |
| 19 | +--------------------------------------- |
| 20 | + |
| 21 | +With Windows 10, Microsoft has released a new feature named the [Windows |
| 22 | +Subsystem for Linux (WSL)](https://docs.microsoft.com/windows/wsl/about). This |
| 23 | +feature allows you to run a bash shell directly on Windows in an Ubuntu-based |
| 24 | +environment. Within this environment you can cross compile for Windows without |
| 25 | +the need for a separate Linux VM or server. Note that while WSL can be installed with |
| 26 | +other Linux variants, such as OpenSUSE, the following instructions have only been |
| 27 | +tested with Ubuntu. |
| 28 | + |
| 29 | +This feature is not supported in versions of Windows prior to Windows 10 or on |
| 30 | +Windows Server SKUs. In addition, it is available [only for 64-bit versions of |
| 31 | +Windows](https://docs.microsoft.com/windows/wsl/install-win10). |
| 32 | + |
| 33 | +Full instructions to install WSL are available on the above link. |
| 34 | +To install WSL on Windows 10 with Fall Creators Update installed (version >= 16215.0) do the following: |
| 35 | + |
| 36 | +1. Enable the Windows Subsystem for Linux feature |
| 37 | + * Open the Windows Features dialog (`OptionalFeatures.exe`) |
| 38 | + * Enable 'Windows Subsystem for Linux' |
| 39 | + * Click 'OK' and restart if necessary |
| 40 | +2. Install Ubuntu |
| 41 | + * Open Microsoft Store and search for "Ubuntu 18.04" or use [this link](https://www.microsoft.com/store/productId/9N9TNGVNDL3Q) |
| 42 | + * Click Install |
| 43 | +3. Complete Installation |
| 44 | + * Open a cmd prompt and type "Ubuntu1804" |
| 45 | + * Create a new UNIX user account (this is a separate account from your Windows account) |
| 46 | + |
| 47 | +After the bash shell is active, you can follow the instructions below, starting |
| 48 | +with the "Cross-compilation" section. Compiling the 64-bit version is |
| 49 | +recommended, but it is possible to compile the 32-bit version. |
| 50 | + |
| 51 | +Cross-compilation for Ubuntu and Windows Subsystem for Linux |
| 52 | +------------------------------------------------------------ |
| 53 | + |
| 54 | +The steps below can be performed on Ubuntu (including in a VM) or WSL. The depends system |
| 55 | +will also work on other Linux distributions, however the commands for |
| 56 | +installing the toolchain will be different. |
| 57 | + |
| 58 | +First, install the general dependencies: |
| 59 | + |
| 60 | + sudo apt update |
| 61 | + sudo apt upgrade |
| 62 | + sudo apt install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl git |
| 63 | + |
| 64 | +A host toolchain (`build-essential`) is necessary because some dependency |
| 65 | +packages need to build host utilities that are used in the build process. |
| 66 | + |
| 67 | +See [dependencies.md](dependencies.md) for a complete overview. |
| 68 | + |
| 69 | +If you want to build the windows installer with `make deploy` you need [NSIS](https://nsis.sourceforge.io/Main_Page): |
| 70 | + |
| 71 | + sudo apt install nsis |
| 72 | + |
| 73 | +Acquire the source in the usual way: |
| 74 | + |
| 75 | + git clone https://github.com/dobbscoin/dobbscoin.git |
| 76 | + cd dobbscoin |
| 77 | + |
| 78 | +## Building for 64-bit Windows |
| 79 | + |
| 80 | +The first step is to install the mingw-w64 cross-compilation tool chain: |
| 81 | + |
| 82 | + sudo apt install g++-mingw-w64-x86-64 |
| 83 | + |
| 84 | +Next, set the default `mingw32 g++` compiler option to POSIX<sup>[1](#footnote1)</sup>: |
| 85 | + |
| 86 | +``` |
| 87 | +sudo update-alternatives --config x86_64-w64-mingw32-g++ |
| 88 | +``` |
| 89 | + |
| 90 | +After running the above command, you should see output similar to that below. |
| 91 | +Choose the option that ends with `posix`. |
| 92 | + |
| 93 | +``` |
| 94 | +There are 2 choices for the alternative x86_64-w64-mingw32-g++ (providing /usr/bin/x86_64-w64-mingw32-g++). |
| 95 | +
|
| 96 | + Selection Path Priority Status |
| 97 | +------------------------------------------------------------ |
| 98 | + 0 /usr/bin/x86_64-w64-mingw32-g++-win32 60 auto mode |
| 99 | +* 1 /usr/bin/x86_64-w64-mingw32-g++-posix 30 manual mode |
| 100 | + 2 /usr/bin/x86_64-w64-mingw32-g++-win32 60 manual mode |
| 101 | +
|
| 102 | +Press <enter> to keep the current choice[*], or type selection number: |
| 103 | +``` |
| 104 | + |
| 105 | +Once the toolchain is installed the build steps are common: |
| 106 | + |
| 107 | +Note that for WSL the Dobbscoin Core source path MUST be somewhere in the default mount file system, for |
| 108 | +example /usr/src/dobbscoin, AND not under /mnt/d/. If this is not the case the dependency autoconf scripts will fail. |
| 109 | +This means you cannot use a directory that is located directly on the host Windows file system to perform the build. |
| 110 | + |
| 111 | +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) |
| 112 | +results in `Autoconf` configure scripts being able to execute Windows Portable Executable files. This can cause |
| 113 | +unexpected behaviour during the build, such as Win32 error dialogs for missing libraries. The recommended approach |
| 114 | +is to temporarily disable WSL support for Win32 applications. |
| 115 | + |
| 116 | +Build using: |
| 117 | + |
| 118 | + PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var |
| 119 | + sudo bash -c "echo 0 > /proc/sys/fs/binfmt_misc/status" # Disable WSL support for Win32 applications. |
| 120 | + cd depends |
| 121 | + make HOST=x86_64-w64-mingw32 |
| 122 | + cd .. |
| 123 | + ./autogen.sh |
| 124 | + CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure --prefix=$(pwd)/depends/x86_64-w64-mingw32/ |
| 125 | + make # use "-j N" for N parallel jobs |
| 126 | + sudo bash -c "echo 1 > /proc/sys/fs/binfmt_misc/status" # Enable WSL support for Win32 applications. |
| 127 | + |
| 128 | +## Depends system |
| 129 | + |
| 130 | +For further documentation on the depends system see [README.md](../depends/README.md) in the depends directory. |
| 131 | + |
| 132 | +Installation |
| 133 | +------------- |
| 134 | + |
| 135 | +After building using the Windows subsystem it can be useful to copy the compiled |
| 136 | +executables to a directory on the Windows drive in the same directory structure |
| 137 | +as they appear in the release `.zip` archive. This can be done in the following |
| 138 | +way. This will install to `c:\workspace\dobbscoin`, for example: |
| 139 | + |
| 140 | + make install DESTDIR=/mnt/c/workspace/dobbscoin |
| 141 | + |
| 142 | +You can also create an installer using: |
| 143 | + |
| 144 | + make deploy |
| 145 | + |
| 146 | +Footnotes |
| 147 | +--------- |
| 148 | + |
| 149 | +<a name="footnote1">1</a>: Starting from Ubuntu Xenial 16.04, both the 32 and 64 bit Mingw-w64 packages install two different |
| 150 | +compiler options to allow a choice between either posix or win32 threads. The default option is win32 threads which is the more |
| 151 | +efficient since it will result in binary code that links directly with the Windows kernel32.lib. Unfortunately, the headers |
| 152 | +required to support win32 threads conflict with some of the classes in the C++11 standard library, in particular std::mutex. |
| 153 | +It's not possible to build the Dobbscoin Core code using the win32 version of the Mingw-w64 cross compilers (at least not without |
| 154 | +modifying headers in the Dobbscoin Core source code). |
0 commit comments