Skip to content

Commit

Permalink
Absification of files - Move Build Notes
Browse files Browse the repository at this point in the history
  • Loading branch information
CryptoCentric committed Feb 24, 2019
1 parent 0ea2521 commit 3b2b024
Show file tree
Hide file tree
Showing 15 changed files with 215 additions and 960 deletions.
4 changes: 2 additions & 2 deletions absolute-docs/protocol-documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,9 +253,9 @@ Spork
| ---------- | ---------- | ----------- | ----------- |
| 10001 | 2 | INSTANTSEND_ENABLED | Turns on and off InstantSend network wide
| 10002 | 3 | INSTANTSEND_BLOCK_FILTERING | Turns on and off InstantSend block filtering
| 10004 | 5 | INSTANTSEND_MAX_VALUE | Controls the max value for an InstantSend transaction (currently 2000 dash)
| 10004 | 5 | INSTANTSEND_MAX_VALUE | Controls the max value for an InstantSend transaction (currently 2000 ABS)
| 10007 | 8 | MASTERNODE_PAYMENT_ENFORCEMENT | Requires masternodes to be paid by miners when blocks are processed
| 10008 | 9 | SUPERBLOCKS_ENABLED | Superblocks are enabled (the 10% comes to fund the dash treasury)
| 10008 | 9 | SUPERBLOCKS_ENABLED | Superblocks are enabled (the 10% comes to fund the absolute treasury)
| 10009 | 10 | MASTERNODE_PAY_UPDATED_NODES | Only current protocol version masternode's will be paid (not older nodes)
| 10011 | 12 | RECONSIDER_BLOCKS | |
| 10012 | 13 | OLD_SUPERBLOCK_FLAG | |
Expand Down
42 changes: 24 additions & 18 deletions doc/build-openbsd.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
OpenBSD build guide
======================
(updated for OpenBSD 5.7)
(updated for OpenBSD 5.9)

This guide describes how to build absoluted and command-line utilities on OpenBSD.

Expand All @@ -15,19 +15,17 @@ Run the following as root to install the base dependencies for building:
pkg_add gmake libtool libevent
pkg_add autoconf # (select highest version, e.g. 2.69)
pkg_add automake # (select highest version, e.g. 1.15)
pkg_add python # (select version 2.7.x, not 3.x)
ln -sf /usr/local/bin/python2.7 /usr/local/bin/python2
pkg_add python # (select highest version, e.g. 3.5)
```

The default C++ compiler that comes with OpenBSD 5.7 is g++ 4.2. This version is old (from 2007), and is not able to compile the current version of Absolute Core. It is possible to patch it up to compile, but with the planned transition to C++11 this is a losing battle. So here we will be installing a newer compiler.

The default C++ compiler that comes with OpenBSD 5.9 is g++ 4.2. This version is old (from 2007), and is not able to compile the current version of Dash Core, primarily as it has no C++11 support, but even before there were issues. So here we will be installing a newer compiler.
GCC
-------

You can install a newer version of gcc with:

```bash
pkg_add g++ # (select newest 4.x version, e.g. 4.9.2)
pkg_add g++ # (select newest 4.x version, e.g. 4.9.3)
```

This compiler will not overwrite the system compiler, it will be installed as `egcc` and `eg++` in `/usr/local/bin`.
Expand All @@ -49,18 +47,15 @@ BOOST_PREFIX="${BITCOIN_ROOT}/boost"
mkdir -p $BOOST_PREFIX
# Fetch the source and verify that it is not tampered with
wget http://heanet.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.bz2
echo '727a932322d94287b62abb1bd2d41723eec4356a7728909e38adb65ca25241ca boost_1_59_0.tar.bz2' | sha256 -c
# MUST output: (SHA256) boost_1_59_0.tar.bz2: OK
tar -xjf boost_1_59_0.tar.bz2
curl -o boost_1_61_0.tar.bz2 http://heanet.dl.sourceforge.net/project/boost/boost/1.61.0/boost_1_61_0.tar.bz2
echo 'a547bd06c2fd9a71ba1d169d9cf0339da7ebf4753849a8f7d6fdb8feee99b640 boost_1_61_0.tar.bz2' | sha256 -c
# MUST output: (SHA256) boost_1_61_0.tar.bz2: OK
tar -xjf boost_1_61_0.tar.bz2
# Boost 1.59 needs two small patches for OpenBSD
cd boost_1_59_0
# Boost 1.61 needs one small patch for OpenBSD
cd boost_1_61_0
# Also here: https://gist.githubusercontent.com/laanwj/bf359281dc319b8ff2e1/raw/92250de8404b97bb99d72ab898f4a8cb35ae1ea3/patch-boost_test_impl_execution_monitor_ipp.patch
patch -p0 < /usr/ports/devel/boost/patches/patch-boost_test_impl_execution_monitor_ipp
# https://github.com/boostorg/filesystem/commit/90517e459681790a091566dce27ca3acabf9a70c
sed 's/__OPEN_BSD__/__OpenBSD__/g' < libs/filesystem/src/path.cpp > libs/filesystem/src/path.cpp.tmp
mv libs/filesystem/src/path.cpp.tmp libs/filesystem/src/path.cpp
# Build w/ minimum configuration necessary for absolute
echo 'using gcc : : eg++ : <cxxflags>"-fvisibility=hidden -fPIC" <linkflags>"" <archiver>"ar" <striper>"strip" <ranlib>"ranlib" <rc>"" : ;' > user-config.jam
Expand All @@ -84,7 +79,7 @@ BDB_PREFIX="${BITCOIN_ROOT}/db4"
mkdir -p $BDB_PREFIX

# Fetch the source and verify that it is not tampered with
wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
curl -o db-4.8.30.NC.tar.gz 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz'
echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz' | sha256 -c
# MUST output: (SHA256) db-4.8.30.NC.tar.gz: OK
tar -xzf db-4.8.30.NC.tar.gz
Expand All @@ -93,9 +88,20 @@ tar -xzf db-4.8.30.NC.tar.gz
cd db-4.8.30.NC/build_unix/
# Note: Do a static build so that it can be embedded into the executable, instead of having to find a .so at runtime
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX CC=egcc CXX=eg++ CPP=ecpp
make install
make install # do NOT use -jX, this is broken
```

### Resource limits
The standard ulimit restrictions in OpenBSD are very strict:
data(kbytes) 1572864
This is, unfortunately, no longer enough to compile some `.cpp` files in the project,
at least with gcc 4.9.3 (see issue https://github.com/bitcoin/bitcoin/issues/6658).
If your user is in the `staff` group the limit can be raised with:
ulimit -d 3000000
The change will only affect the current shell and processes spawned by it. To
make the change system-wide, change `datasize-cur` and `datasize-max` in
`/etc/login.conf`, and reboot.

### Building Absolute Core

**Important**: use `gmake`, not `make`. The non-GNU `make` will exit with a horrible error.
Expand Down Expand Up @@ -123,7 +129,7 @@ To configure without wallet:

Build and run the tests:
```bash
gmake
gmake # can use -jX here for parallelism
gmake check
```

Expand Down
131 changes: 52 additions & 79 deletions doc/build-osx.md
Original file line number Diff line number Diff line change
@@ -1,122 +1,95 @@
Mac OS X Build Instructions and Notes
====================================
This guide will show you how to build absoluted (headless client) for OSX.

Notes
-----

* Tested on OS X 10.7 through 10.11 on 64-bit Intel processors only.

* All of the commands should be executed in a Terminal application. The
built-in one is located in `/Applications/Utilities`.
The commands in this guide should be executed in a Terminal application.
The built-in one is located in `/Applications/Utilities/Terminal.app`.

Preparation
-----------
Install the OS X command line tools:

You need to install Xcode with all the options checked so that the compiler
and everything is available in /usr not just /Developer. Xcode should be
available on your OS X installation media, but if not, you can get the
current version from https://developer.apple.com/xcode/. If you install
Xcode 4.3 or later, you'll need to install its command line tools. This can
be done in `Xcode > Preferences > Downloads > Components` and generally must
be re-done or updated every time Xcode is updated.
`xcode-select --install`

You will also need to install [Homebrew](http://brew.sh) in order to install library
dependencies.
When the popup appears, click `Install`.

The installation of the actual dependencies is covered in the instructions
sections below.
Then install [Homebrew](http://brew.sh).

Instructions: Homebrew
Dependencies
----------------------

#### Install dependencies using Homebrew

brew install autoconf automake berkeley-db4 libtool boost miniupnpc openssl pkg-config protobuf libevent qt
brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl pkg-config homebrew/versions/protobuf260 --c++11 qt5 libevent

NOTE: Building with Qt4 is still supported, however, doing so could result in a broken UI. Therefore, building with Qt5 is recommended. Be aware that Qt5 5.7+ requires C++11 compiler support.
NOTE: Building with Qt4 is still supported, however, doing so could result in a broken UI. Therefore, building with Qt5 is recommended.

### Building Absolute Core
Build Absolute Core
------------------------

1. Clone the GitHub tree to get the source code and go into the directory.
1. Clone the Absolute Core source code and cd into `absolute`

git clone https://github.com/absolutepay/absolute.git
git clone https://github.com/absolute-community/absolute
cd absolute

2. Build Absolute Core:
This will configure and build the headless absolute binaries as well as the gui (if Qt is found).
You can disable the gui build by passing `--without-gui` to configure.

Configure and build the headless absolute binaries as well as the GUI (if Qt is found).

You can disable the GUI build by passing `--without-gui` to configure.

./autogen.sh
./configure
make

3. It is also a good idea to build and run the unit tests:
3. It is recommended to build and run the unit tests:

make check

4. (Optional) You can also install absoluted to your path:
4. You can also create a .dmg that contains the .app bundle (optional):

make install
make deploy

Use Qt Creator as IDE
------------------------
You can use Qt Creator as IDE, for debugging and for manipulating forms, etc.
Download Qt Creator from https://www.qt.io/download/. Download the "community edition" and only install Qt Creator (uncheck the rest during the installation process).
Running
-------

1. Make sure you installed everything through Homebrew mentioned above
2. Do a proper ./configure --enable-debug
3. In Qt Creator do "New Project" -> Import Project -> Import Existing Project
4. Enter "absolute-qt" as project name, enter src/qt as location
5. Leave the file selection as it is
6. Confirm the "summary page"
7. In the "Projects" tab select "Manage Kits..."
8. Select the default "Desktop" kit and select "Clang (x86 64bit in /usr/bin)" as compiler
9. Select LLDB as debugger (you might need to set the path to your installation)
10. Start debugging with Qt Creator
Absolute Core is now available at `./src/absoluted`

Creating a release build
------------------------
You can ignore this section if you are building `absoluted` for your own use.
Before running, it's recommended you create an RPC configuration file.

absoluted/absolute-cli binaries are not included in the Absolute-Qt.app bundle.
echo -e "rpcuser=absoluterpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/AbsoluteCore/absolute.conf"

If you are building `absoluted` or `Absolute Core` for others, your build machine should be set up
as follows for maximum compatibility:
chmod 600 "/Users/${USER}/Library/Application Support/AbsoluteCore/absolute.conf"

All dependencies should be compiled with these flags:
The first time you run absoluted, it will start downloading the blockchain. This process could take several hours.

-mmacosx-version-min=10.7
-arch x86_64
-isysroot $(xcode-select --print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk
You can monitor the download process by looking at the debug.log file:

Once dependencies are compiled, see [doc/release-process.md](release-process.md) for how the Absolute Core
bundle is packaged and signed to create the .dmg disk image that is distributed.
tail -f $HOME/Library/Application\ Support/AbsoluteCore/debug.log

Running
Other commands:
-------

It's now available at `./absoluted`, provided that you are still in the `src`
directory. We have to first create the RPC configuration file, though.

Run `./absoluted` to get the filename where it should be put, or just try these
commands:
./src/absoluted -daemon # Starts the absolute daemon.
./src/absolute-cli --help # Outputs a list of command-line options.
./src/absolute-cli help # Outputs a list of RPC commands when the daemon is running.

echo -e "rpcuser=absoluterpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/AbsoluteCore/absolute.conf"
chmod 600 "/Users/${USER}/Library/Application Support/AbsoluteCore/absolute.conf"
Using Qt Creator as IDE
------------------------
You can use Qt Creator as an IDE, for absolute development.
Download and install the community edition of [Qt Creator](https://www.qt.io/download/).
Uncheck everything except Qt Creator during the installation process.

The next time you run it, it will start downloading the blockchain, but it won't
output anything while it's doing this. This process may take several hours;
you can monitor its process by looking at the debug.log file, like this:
1. Make sure you installed everything through Homebrew mentioned above
2. Do a proper ./configure --enable-debug
3. In Qt Creator do "New Project" -> Import Project -> Import Existing Project
4. Enter "absolute-qt" as project name, enter src/qt as location
5. Leave the file selection as it is
6. Confirm the "summary page"
7. In the "Projects" tab select "Manage Kits..."
8. Select the default "Desktop" kit and select "Clang (x86 64bit in /usr/bin)" as compiler
9. Select LLDB as debugger (you might need to set the path to your installation)
10. Start debugging with Qt Creator

<<<<<<< HEAD
tail -f $HOME/Library/Application\ Support/AbsoluteCore/debug.log
Notes
-----

Other commands:
-------
=======
>>>>>>> 55208b759... Merge #9033: Update build notes for dropping osx 10.7 support (fanquake)
* Tested on OS X 10.8 through 10.12 on 64-bit Intel processors only.

./absoluted -daemon # to start the absolute daemon.
./absolute-cli --help # for a list of command-line options.
./absolute-cli help # When the daemon is running, to get a list of RPC commands
* Building with downloaded Qt binaries is not officially supported. See the notes in [#7714](https://github.com/bitcoin/bitcoin/issues/7714)
Loading

0 comments on commit 3b2b024

Please sign in to comment.