Updating code
reviving this project
This commit is contained in:
+55
-215
@@ -1,283 +1,123 @@
|
||||
UNIX BUILD NOTES
|
||||
====================
|
||||
Some notes on how to build Agrarian Core in Unix.
|
||||
Copyright (c) 2026 Agrarian Developers
|
||||
|
||||
Note
|
||||
---------------------
|
||||
Always use absolute paths to configure and compile Agrarian Core and the dependencies,
|
||||
For example, when specifying the path of the dependency:
|
||||
UNIX Build Notes
|
||||
|
||||
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX
|
||||
These notes describe how to build Agrarian Core on Unix-based systems.
|
||||
|
||||
Here BDB_PREFIX must be an absolute path - it is defined using $(pwd) which ensures
|
||||
the usage of the absolute path.
|
||||
IMPORTANT
|
||||
|
||||
To Build
|
||||
---------------------
|
||||
Always use absolute paths when configuring and compiling Agrarian Core
|
||||
and its dependencies.
|
||||
|
||||
```bash
|
||||
./autogen.sh
|
||||
./configure
|
||||
make
|
||||
make install # optional
|
||||
```
|
||||
Example:
|
||||
|
||||
This will build agrarian-qt as well, if the dependencies are met.
|
||||
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX
|
||||
|
||||
Dependencies
|
||||
---------------------
|
||||
$BDB_PREFIX must be an absolute path. Using $(pwd) ensures an absolute
|
||||
path is used.
|
||||
|
||||
These dependencies are required:
|
||||
STANDARD BUILD
|
||||
|
||||
Library | Purpose | Description
|
||||
------------|--------------------|----------------------
|
||||
libssl | Crypto | Random Number Generation, Elliptic Curve Cryptography
|
||||
libboost | Utility | Library for threading, data structures, etc
|
||||
libevent | Networking | OS independent asynchronous networking
|
||||
libgmp | Bignum Arithmetic | Precision arithmetic
|
||||
./autogen.sh
|
||||
./configure
|
||||
make
|
||||
make install (optional)
|
||||
|
||||
Optional dependencies:
|
||||
If dependencies are satisfied, this will build agrarian-qt as well.
|
||||
|
||||
Library | Purpose | Description
|
||||
------------|------------------|----------------------
|
||||
miniupnpc | UPnP Support | Firewall-jumping support
|
||||
libdb4.8 | Berkeley DB | Wallet storage (only needed when wallet enabled)
|
||||
qt | GUI | GUI toolkit (only needed when GUI enabled)
|
||||
protobuf | Payments in GUI | Data interchange format used for payment protocol (only needed when GUI enabled)
|
||||
libqrencode | QR codes in GUI | Optional for generating QR codes (only needed when GUI enabled)
|
||||
univalue | Utility | JSON parsing and encoding (bundled version will be used unless --with-system-univalue passed to configure)
|
||||
libzmq3 | ZMQ notification | Optional, allows generating ZMQ notifications (requires ZMQ version >= 4.0.0)
|
||||
DEPENDENCIES
|
||||
|
||||
For the versions used, see [dependencies.md](dependencies.md)
|
||||
Required: - libssl : Crypto (RNG, ECC) - libboost : Utility (threading,
|
||||
data structures) - libevent : Networking (async networking) - libgmp :
|
||||
Bignum arithmetic
|
||||
|
||||
Memory Requirements
|
||||
--------------------
|
||||
Optional: - miniupnpc : UPnP support - libdb4.8 : Berkeley DB (wallet
|
||||
builds only) - qt : GUI support - protobuf : GUI payment protocol -
|
||||
libqrencode: QR code support - univalue : JSON parsing (bundled by
|
||||
default) - libzmq3 : ZMQ notifications (>= 4.0.0)
|
||||
|
||||
C++ compilers are memory-hungry. It is recommended to have at least 1.5 GB of
|
||||
memory available when compiling Agrarian Core. On systems with less, gcc can be
|
||||
tuned to conserve memory with additional CXXFLAGS:
|
||||
See dependencies.md for version details.
|
||||
|
||||
MEMORY REQUIREMENTS
|
||||
|
||||
Minimum recommended: 1.5 GB RAM.
|
||||
|
||||
Low memory systems:
|
||||
|
||||
./configure CXXFLAGS="--param ggc-min-expand=1 --param ggc-min-heapsize=32768"
|
||||
|
||||
UBUNTU / DEBIAN
|
||||
|
||||
## Linux Distribution Specific Instructions
|
||||
|
||||
### Ubuntu & Debian
|
||||
|
||||
#### Dependency Build Instructions
|
||||
|
||||
Build requirements:
|
||||
Build tools:
|
||||
|
||||
sudo apt-get install build-essential libtool bsdmainutils autotools-dev autoconf pkg-config automake python3
|
||||
|
||||
Now, you can either build from self-compiled [depends](/depends/README.md) or install the required dependencies:
|
||||
Libraries:
|
||||
|
||||
sudo apt-get install libssl-dev libgmp-dev libevent-dev libboost-all-dev
|
||||
|
||||
**Note:** For Ubuntu versions starting with Bionic (18.04), or Debian versions starting with Stretch, use `libssl1.0-dev`
|
||||
above instead of `libssl-dev`. Agrarian Core does not support the use of OpenSSL 1.1, though compilation is still possible
|
||||
by passing `--with-incompatible-ssl` to configure (NOT RECOMMENDED!).
|
||||
OpenSSL Note: For Ubuntu >= 18.04 or Debian >= Stretch use
|
||||
libssl1.0-dev. OpenSSL 1.1 is not officially supported.
|
||||
|
||||
BerkeleyDB is required for the wallet.
|
||||
|
||||
**For Ubuntu only:** db4.8 packages are available [here](https://launchpad.net/~bitcoin/+archive/bitcoin).
|
||||
You can add the repository using the following command:
|
||||
Berkeley DB 4.8 (wallet support):
|
||||
|
||||
sudo apt-get install software-properties-common
|
||||
sudo add-apt-repository ppa:bitcoin/bitcoin
|
||||
sudo apt-get update
|
||||
sudo apt-get install libdb4.8-dev libdb4.8++-dev
|
||||
|
||||
Ubuntu and Debian have their own libdb-dev and libdb++-dev packages, but these will install
|
||||
BerkeleyDB 5.1 or later. This will break binary wallet compatibility with the distributed executables, which
|
||||
are based on BerkeleyDB 4.8. If you do not care about wallet compatibility,
|
||||
pass `--with-incompatible-bdb` to configure.
|
||||
|
||||
Otherwise, you can build from self-compiled `depends` (see above).
|
||||
|
||||
To build Agrarian Core without wallet, see [*Disable-wallet mode*](/doc/build-unix.md#disable-wallet-mode)
|
||||
|
||||
|
||||
Optional (see --with-miniupnpc and --enable-upnp-default):
|
||||
Optional:
|
||||
|
||||
sudo apt-get install libminiupnpc-dev
|
||||
|
||||
ZMQ dependencies (provides ZMQ API):
|
||||
|
||||
sudo apt-get install libzmq3-dev
|
||||
|
||||
GUI dependencies:
|
||||
Qt GUI:
|
||||
|
||||
If you want to build agrarian-qt, make sure that the required packages for Qt development
|
||||
are installed. Qt 5 is necessary to build the GUI.
|
||||
To build without GUI pass `--without-gui`.
|
||||
sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
|
||||
|
||||
To build with Qt 5 you need the following:
|
||||
Disable GUI:
|
||||
|
||||
sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
|
||||
./configure --without-gui
|
||||
|
||||
libqrencode (optional) can be installed with:
|
||||
FEDORA
|
||||
|
||||
sudo apt-get install libqrencode-dev
|
||||
Build tools:
|
||||
|
||||
Once these are installed, they will be found by configure and a agrarian-qt executable will be
|
||||
built by default.
|
||||
|
||||
|
||||
### Fedora
|
||||
|
||||
#### Dependency Build Instructions
|
||||
|
||||
Build requirements:
|
||||
|
||||
sudo dnf install which gcc-c++ libtool make autoconf automake compat-openssl10-devel libevent-devel boost-devel libdb4-devel libdb4-cxx-devel gmp-devel python3
|
||||
sudo dnf install which gcc-c++ libtool make autoconf automake compat-openssl10-devel libevent-devel boost-devel libdb4-devel libdb4-cxx-devel gmp-devel python3
|
||||
|
||||
Optional:
|
||||
|
||||
sudo dnf install miniupnpc-devel zeromq-devel
|
||||
|
||||
To build with Qt 5 you need the following:
|
||||
Qt:
|
||||
|
||||
sudo dnf install qt5-qttools-devel qt5-qtbase-devel protobuf-devel
|
||||
|
||||
libqrencode (optional) can be installed with:
|
||||
HARDENING
|
||||
|
||||
sudo dnf install qrencode-devel
|
||||
Enable:
|
||||
|
||||
Notes
|
||||
-----
|
||||
The release is built with GCC and then "strip agrariand" to strip the debug
|
||||
symbols, which reduces the executable size by about 90%.
|
||||
./configure --enable-hardening
|
||||
|
||||
Disable:
|
||||
|
||||
miniupnpc
|
||||
---------
|
||||
./configure --disable-hardening
|
||||
|
||||
[miniupnpc](http://miniupnp.free.fr/) may be used for UPnP port mapping. It can be downloaded from [here](
|
||||
http://miniupnp.tuxfamily.org/files/). UPnP support is compiled in and
|
||||
turned off by default. See the configure options for upnp behavior desired:
|
||||
Verify:
|
||||
|
||||
--without-miniupnpc No UPnP support miniupnp not required
|
||||
--disable-upnp-default (the default) UPnP support turned off by default at runtime
|
||||
--enable-upnp-default UPnP support turned on by default at runtime
|
||||
scanelf -e ./agrariand
|
||||
|
||||
To build:
|
||||
|
||||
tar -xzvf miniupnpc-1.6.tar.gz
|
||||
cd miniupnpc-1.6
|
||||
make
|
||||
sudo su
|
||||
make install
|
||||
|
||||
|
||||
Berkeley DB
|
||||
-----------
|
||||
It is recommended to use Berkeley DB 4.8. If you have to build it yourself,
|
||||
you can use [the installation script included in contrib/](/contrib/install_db4.sh)
|
||||
like so:
|
||||
|
||||
```shell
|
||||
./contrib/install_db4.sh `pwd`
|
||||
```
|
||||
|
||||
from the root of the repository.
|
||||
|
||||
**Note**: You only need Berkeley DB if the wallet is enabled (see [*Disable-wallet mode*](/doc/build-unix.md#disable-wallet-mode)).
|
||||
|
||||
Boost
|
||||
-----
|
||||
If you need to build Boost yourself:
|
||||
|
||||
sudo su
|
||||
./bootstrap.sh
|
||||
./bjam install
|
||||
|
||||
|
||||
Security
|
||||
--------
|
||||
To help make your Agrarian Core installation more secure by making certain attacks impossible to
|
||||
exploit even if a vulnerability is found, binaries are hardened by default.
|
||||
This can be disabled with:
|
||||
|
||||
Hardening Flags:
|
||||
|
||||
./configure --enable-hardening
|
||||
./configure --disable-hardening
|
||||
|
||||
|
||||
Hardening enables the following features:
|
||||
* _Position Independent Executable_: Build position independent code to take advantage of Address Space Layout Randomization
|
||||
offered by some kernels. Attackers who can cause execution of code at an arbitrary memory
|
||||
location are thwarted if they don't know where anything useful is located.
|
||||
The stack and heap are randomly located by default, but this allows the code section to be
|
||||
randomly located as well.
|
||||
|
||||
On an AMD64 processor where a library was not compiled with -fPIC, this will cause an error
|
||||
such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;"
|
||||
|
||||
To test that you have built PIE executable, install scanelf, part of paxutils, and use:
|
||||
|
||||
scanelf -e ./agrariand
|
||||
|
||||
The output should contain:
|
||||
|
||||
TYPE
|
||||
ET_DYN
|
||||
|
||||
* _Non-executable Stack_: If the stack is executable then trivial stack-based buffer overflow exploits are possible if
|
||||
vulnerable buffers are found. By default, Agrarian Core should be built with a non-executable stack
|
||||
but if one of the libraries it uses asks for an executable stack or someone makes a mistake
|
||||
and uses a compiler extension which requires an executable stack, it will silently build an
|
||||
executable without the non-executable stack protection.
|
||||
|
||||
To verify that the stack is non-executable after compiling use:
|
||||
`scanelf -e ./agrariand`
|
||||
|
||||
The output should contain:
|
||||
STK/REL/PTL
|
||||
RW- R-- RW-
|
||||
|
||||
The STK RW- means that the stack is readable and writeable but not executable.
|
||||
|
||||
Disable-wallet mode
|
||||
--------------------
|
||||
**Note:** This functionality is not yet completely implemented, and compilation using the below option will currently fail.
|
||||
|
||||
When the intention is to run only a P2P node without a wallet, Agrarian Core may be compiled in
|
||||
disable-wallet mode with:
|
||||
DISABLE WALLET MODE
|
||||
|
||||
./configure --disable-wallet
|
||||
|
||||
In this case there is no dependency on Berkeley DB 4.8.
|
||||
|
||||
|
||||
Additional Configure Flags
|
||||
--------------------------
|
||||
A list of additional configure flags can be displayed with:
|
||||
|
||||
./configure --help
|
||||
|
||||
|
||||
ARM Cross-compilation
|
||||
-------------------
|
||||
These steps can be performed on, for example, an Ubuntu VM. The depends system
|
||||
will also work on other Linux distributions, however the commands for
|
||||
installing the toolchain will be different.
|
||||
|
||||
Make sure you install the build requirements mentioned above.
|
||||
Then, install the toolchain and curl:
|
||||
ARM CROSS COMPILATION
|
||||
|
||||
sudo apt-get install g++-arm-linux-gnueabihf curl
|
||||
|
||||
To build executables for ARM:
|
||||
|
||||
cd depends
|
||||
make HOST=arm-linux-gnueabihf NO_QT=1
|
||||
cd ..
|
||||
./autogen.sh
|
||||
./configure --prefix=$PWD/depends/arm-linux-gnueabihf --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++
|
||||
./configure --prefix=$PWD/depends/arm-linux-gnueabihf --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++
|
||||
make
|
||||
|
||||
|
||||
For further documentation on the depends system see [README.md](../depends/README.md) in the depends directory.
|
||||
|
||||
+144
-97
@@ -1,151 +1,198 @@
|
||||
WINDOWS BUILD NOTES
|
||||
====================
|
||||
Copyright (c) 2026 Agrarian Developers
|
||||
|
||||
Below are some notes on how to build Agrarian Core for Windows.
|
||||
============================================================
|
||||
Agrarian Core – Windows Build Notes
|
||||
============================================================
|
||||
|
||||
The options known to work for building Agrarian Core on Windows are:
|
||||
This document describes how to build Agrarian Core for Windows.
|
||||
|
||||
* On Linux, using the [Mingw-w64](https://mingw-w64.org/doku.php) cross compiler tool chain. Ubuntu Bionic 18.04 is required
|
||||
and is the platform used to build the Agrarian Core Windows release binaries.
|
||||
* On Windows, using [Windows
|
||||
Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about) and the Mingw-w64 cross compiler tool chain.
|
||||
|
||||
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](http://www.cygwin.com/) or [msys2](http://www.msys2.org/).
|
||||
* On Windows, using a native compiler tool chain such as [Visual Studio](https://www.visualstudio.com).
|
||||
|
||||
Installing Windows Subsystem for Linux
|
||||
---------------------------------------
|
||||
|
||||
With Windows 10, Microsoft has released a new feature named the [Windows
|
||||
Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about). This
|
||||
feature allows you to run a bash shell directly on Windows in an Ubuntu-based
|
||||
environment. Within this environment you can cross compile for Windows without
|
||||
the need for a separate Linux VM or server. Note that while WSL can be installed with
|
||||
other Linux variants, such as OpenSUSE, the following instructions have only been
|
||||
tested with Ubuntu.
|
||||
|
||||
This feature is not supported in versions of Windows prior to Windows 10 or on
|
||||
Windows Server SKUs. In addition, it is available [only for 64-bit versions of
|
||||
Windows](https://msdn.microsoft.com/en-us/commandline/wsl/install_guide).
|
||||
|
||||
Full instructions to install WSL are available on the above link.
|
||||
To install WSL on Windows 10 with Fall Creators Update installed (version >= 16215.0) do the following:
|
||||
|
||||
1. Enable the Windows Subsystem for Linux feature
|
||||
* Open the Windows Features dialog (`OptionalFeatures.exe`)
|
||||
* Enable 'Windows Subsystem for Linux'
|
||||
* Click 'OK' and restart if necessary
|
||||
2. Install Ubuntu
|
||||
* Open Microsoft Store and search for "Ubuntu 18.04" or use [this link](https://www.microsoft.com/store/productId/9N9TNGVNDL3Q)
|
||||
* Click Install
|
||||
3. Complete Installation
|
||||
* Open a cmd prompt and type "Ubuntu1804"
|
||||
* Create a new UNIX user account (this is a separate account from your Windows account)
|
||||
|
||||
After the bash shell is active, you can follow the instructions below, starting
|
||||
with the "Cross-compilation" section. Compiling the 64-bit version is
|
||||
recommended, but it is possible to compile the 32-bit version.
|
||||
|
||||
Cross-compilation for Ubuntu and Windows Subsystem for Linux
|
||||
------------------------------------------------------------
|
||||
SUPPORTED BUILD METHODS
|
||||
------------------------------------------------------------
|
||||
|
||||
The steps below can be performed on Ubuntu (including in a VM) or WSL. The depends system
|
||||
will also work on other Linux distributions, however the commands for
|
||||
installing the toolchain will be different.
|
||||
The following methods are known to work:
|
||||
|
||||
First, install the general dependencies:
|
||||
1. Linux (Ubuntu 18.04 Bionic recommended)
|
||||
Using the Mingw-w64 cross-compilation toolchain.
|
||||
This is the method used to produce official Windows release binaries.
|
||||
|
||||
2. Windows 10+
|
||||
Using Windows Subsystem for Linux (WSL) with Mingw-w64.
|
||||
|
||||
------------------------------------------------------------
|
||||
UNTESTED / PARTIALLY TESTED OPTIONS
|
||||
------------------------------------------------------------
|
||||
|
||||
The following may work but are not officially supported:
|
||||
|
||||
• Cygwin
|
||||
• MSYS2
|
||||
• Native Visual Studio toolchain
|
||||
|
||||
Contributions for these methods are welcome.
|
||||
|
||||
============================================================
|
||||
WINDOWS SUBSYSTEM FOR LINUX (WSL)
|
||||
============================================================
|
||||
|
||||
WSL allows running a Linux environment directly on Windows without a VM.
|
||||
|
||||
Requirements:
|
||||
• Windows 10 (64-bit only)
|
||||
• Not supported on Windows Server
|
||||
• Ubuntu recommended (tested on Ubuntu 18.04)
|
||||
|
||||
------------------------------------------------------------
|
||||
INSTALLING WSL
|
||||
------------------------------------------------------------
|
||||
|
||||
1. Enable WSL
|
||||
- Run: OptionalFeatures.exe
|
||||
- Enable "Windows Subsystem for Linux"
|
||||
- Restart if prompted
|
||||
|
||||
2. Install Ubuntu
|
||||
- Open Microsoft Store
|
||||
- Install "Ubuntu 18.04"
|
||||
|
||||
3. Complete Setup
|
||||
- Open command prompt
|
||||
- Run: Ubuntu1804
|
||||
- Create a UNIX user account
|
||||
|
||||
Once WSL is active, continue with cross-compilation instructions below.
|
||||
|
||||
============================================================
|
||||
CROSS-COMPILATION (Ubuntu or WSL)
|
||||
============================================================
|
||||
|
||||
The steps below work on:
|
||||
• Native Ubuntu
|
||||
• Ubuntu VM
|
||||
• WSL
|
||||
|
||||
------------------------------------------------------------
|
||||
GENERAL DEPENDENCIES
|
||||
------------------------------------------------------------
|
||||
|
||||
sudo apt update
|
||||
sudo apt upgrade
|
||||
sudo apt install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl git
|
||||
sudo apt install build-essential libtool autotools-dev \
|
||||
automake pkg-config bsdmainutils curl git
|
||||
|
||||
A host toolchain (`build-essential`) is necessary because some dependency
|
||||
packages (such as `protobuf`) need to build host utilities that are used in the
|
||||
build process.
|
||||
A host toolchain (build-essential) is required because some dependencies
|
||||
(e.g., protobuf) build host utilities during the process.
|
||||
|
||||
See [dependencies.md](dependencies.md) for a complete overview.
|
||||
|
||||
If you want to build the windows installer with `make deploy` you need [NSIS](https://nsis.sourceforge.io/Main_Page):
|
||||
If building the Windows installer (`make deploy`):
|
||||
|
||||
sudo apt install nsis
|
||||
|
||||
Acquire the source in the usual way:
|
||||
------------------------------------------------------------
|
||||
SOURCE CODE
|
||||
------------------------------------------------------------
|
||||
|
||||
git clone https://github.com/agrarian-project/agrarian.git
|
||||
cd agrarian
|
||||
|
||||
## Building for 64-bit Windows
|
||||
============================================================
|
||||
BUILDING FOR 64-BIT WINDOWS
|
||||
============================================================
|
||||
|
||||
The first step is to install the mingw-w64 cross-compilation tool chain:
|
||||
Install Mingw-w64 toolchain:
|
||||
|
||||
sudo apt install g++-mingw-w64-x86-64
|
||||
|
||||
Ubuntu Bionic 18.04 <sup>[1](#footnote1)</sup>:
|
||||
Ubuntu 18.04:
|
||||
|
||||
sudo update-alternatives --config x86_64-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix.
|
||||
sudo update-alternatives --config x86_64-w64-mingw32-g++
|
||||
|
||||
Once the toolchain is installed the build steps are common:
|
||||
Select the POSIX thread model (required).
|
||||
|
||||
Note that for WSL the Agrarian Core source path MUST be somewhere in the default mount file system, for
|
||||
example /usr/src/agrarian, 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.
|
||||
------------------------------------------------------------
|
||||
IMPORTANT (WSL USERS)
|
||||
------------------------------------------------------------
|
||||
|
||||
Build using:
|
||||
The source directory MUST reside inside the Linux filesystem
|
||||
(e.g., /usr/src/agrarian).
|
||||
|
||||
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var
|
||||
DO NOT build from /mnt/c or any mounted Windows path.
|
||||
Autoconf scripts will fail.
|
||||
|
||||
------------------------------------------------------------
|
||||
BUILD COMMANDS
|
||||
------------------------------------------------------------
|
||||
|
||||
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g')
|
||||
cd depends
|
||||
make HOST=x86_64-w64-mingw32
|
||||
cd ..
|
||||
./autogen.sh # not required when building from tarball
|
||||
CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure --prefix=/
|
||||
./autogen.sh
|
||||
CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site \
|
||||
./configure --prefix=/
|
||||
make
|
||||
|
||||
## Building for 32-bit Windows
|
||||
============================================================
|
||||
BUILDING FOR 32-BIT WINDOWS
|
||||
============================================================
|
||||
|
||||
To build executables for Windows 32-bit, install the following dependencies:
|
||||
Install toolchain:
|
||||
|
||||
sudo apt install g++-mingw-w64-i686 mingw-w64-i686-dev
|
||||
|
||||
Ubuntu Bionic 18.04 <sup>[1](#footnote1)</sup>:
|
||||
Ubuntu 18.04:
|
||||
|
||||
sudo update-alternatives --config i686-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix.
|
||||
sudo update-alternatives --config i686-w64-mingw32-g++
|
||||
|
||||
Build using:
|
||||
Select the POSIX thread model.
|
||||
|
||||
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var
|
||||
------------------------------------------------------------
|
||||
BUILD COMMANDS
|
||||
------------------------------------------------------------
|
||||
|
||||
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g')
|
||||
cd depends
|
||||
make HOST=i686-w64-mingw32
|
||||
cd ..
|
||||
./autogen.sh # not required when building from tarball
|
||||
CONFIG_SITE=$PWD/depends/i686-w64-mingw32/share/config.site ./configure --prefix=/
|
||||
./autogen.sh
|
||||
CONFIG_SITE=$PWD/depends/i686-w64-mingw32/share/config.site \
|
||||
./configure --prefix=/
|
||||
make
|
||||
|
||||
## Depends system
|
||||
============================================================
|
||||
DEPENDS SYSTEM
|
||||
============================================================
|
||||
|
||||
For further documentation on the depends system see [README.md](../depends/README.md) in the depends directory.
|
||||
For additional documentation, see:
|
||||
|
||||
Installation
|
||||
-------------
|
||||
depends/README.md
|
||||
|
||||
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\agrarian`, for example:
|
||||
============================================================
|
||||
INSTALLATION
|
||||
============================================================
|
||||
|
||||
To install into a Windows-accessible directory:
|
||||
|
||||
make install DESTDIR=/mnt/c/workspace/agrarian
|
||||
|
||||
You can also create an installer using:
|
||||
To build a Windows installer:
|
||||
|
||||
make deploy
|
||||
|
||||
Footnotes
|
||||
---------
|
||||
============================================================
|
||||
THREAD MODEL NOTE
|
||||
============================================================
|
||||
|
||||
<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 Agrarian Core code using the win32 version of the Mingw-w64 cross compilers (at least not without
|
||||
modifying headers in the Agrarian Core source code).
|
||||
Ubuntu Mingw-w64 packages include two thread models:
|
||||
|
||||
• win32 (default)
|
||||
• posix
|
||||
|
||||
The win32 model conflicts with certain C++11 headers
|
||||
(e.g., std::mutex) used by Agrarian Core.
|
||||
|
||||
You MUST select the POSIX thread model when prompted by
|
||||
update-alternatives.
|
||||
|
||||
============================================================
|
||||
END OF DOCUMENT
|
||||
============================================================
|
||||
|
||||
Reference in New Issue
Block a user