2019-07-20 22:47:10 +02:00
|
|
|
## BUILD (standalone)
|
2019-06-22 02:26:15 +02:00
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
##### Compatibility Primer
|
2019-06-22 02:26:15 +02:00
|
|
|
|
|
|
|
This section is intended to allow building with dependencies that have not
|
|
|
|
made their way to mainstream systems. Important notes that may affect you:
|
|
|
|
|
|
|
|
- GCC: Ubuntu Xenial (16.04) users must use a PPA to obtain GCC-7 or greater; don't
|
|
|
|
forget to `export CXX=g++-7` before running `./configure` on that system.
|
|
|
|
|
|
|
|
- Boost: The required version is available through `apt` as `boost-all-dev` on
|
|
|
|
Ubuntu Cosmic (18.10). All earlier releases (including 18.04 LTS) can configure
|
|
|
|
with `--with-included-boost` as instructed below.
|
|
|
|
|
|
|
|
- ~~RocksDB: The required version is available through `apt` as `librocksdb-dev` on
|
|
|
|
Ubuntu Disco (19.04). All earlier releases (including 18.04 LTS) can configure
|
|
|
|
with `--with-included-rocksdb` as instructed below.~~
|
|
|
|
|
|
|
|
- RocksDB: At this time we advise **all users** including those on 19.04 to
|
|
|
|
configure with `--with-included-rocksdb` until regressions in your RocksDB
|
|
|
|
package have been fixed.
|
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
##### Installation Primer
|
2019-06-22 02:26:15 +02:00
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
A general overview of what construct will build and install is given here. At
|
|
|
|
this time it is suggested to supply `./configure` with a `--prefix` path,
|
|
|
|
especially for development. Example `--prefix=~/.local/`.
|
2019-06-22 02:26:15 +02:00
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
- Binary executable `$prefix/bin/construct`
|
|
|
|
- Shared library `$prefix/lib/libircd.so`
|
|
|
|
- Shared library modules `$prefix/lib/modules/construct/*.so`
|
|
|
|
- Header files `$prefix/include/ircd/*`
|
|
|
|
- Read-only shared assets `$prefix/share/construct/*`
|
|
|
|
- Database directory may be established at `$prefix/var/db/construct/`
|
2019-06-22 02:26:15 +02:00
|
|
|
|
|
|
|
```
|
2019-07-20 22:47:10 +02:00
|
|
|
Do not set your `--prefix` path to a directory inside your git repository or
|
|
|
|
an invocation of `git clean` will erase your database in $prefix/var/db/.
|
2019-06-22 02:26:15 +02:00
|
|
|
```
|
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
#### STANDALONE BUILD PROCEDURE
|
2019-06-22 02:26:15 +02:00
|
|
|
|
|
|
|
```
|
2019-07-20 22:47:10 +02:00
|
|
|
./autogen.sh
|
|
|
|
./configure --prefix=$PWD/build --with-included-boost --with-included-rocksdb
|
2019-06-22 02:26:15 +02:00
|
|
|
make install
|
|
|
|
```
|
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
> The `--with-included-*` will fetch, configure **and build** the dependencies included
|
|
|
|
as submodules. Please read the compatibility primer first to understand which options
|
|
|
|
you need or don't need on your system.
|
2018-09-14 08:43:54 +02:00
|
|
|
|
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
### Additional build options
|
2018-09-14 08:43:54 +02:00
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
#### Debug mode
|
2018-09-14 08:43:54 +02:00
|
|
|
|
|
|
|
```
|
|
|
|
--enable-debug
|
|
|
|
```
|
|
|
|
Full debug mode. Includes additional code within `#ifdef RB_DEBUG` sections.
|
|
|
|
Optimization level is `-Og`, which is still valgrind-worthy. Debugger support
|
2019-07-20 22:47:10 +02:00
|
|
|
is `-ggdb`. Log level is `DEBUG` (maximum). Assertions are enabled. No
|
|
|
|
sanitizer instrumentation is generated by default in this mode.
|
2018-09-14 08:43:54 +02:00
|
|
|
|
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
#### Generic mode binary (for distribution packages)
|
2018-09-14 08:43:54 +02:00
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
Construct developers have set the default compilation to generate native
|
|
|
|
hardware operations which may only be supported on very specific targets. For
|
|
|
|
a generic mode binary, package maintainers may require this option.
|
2018-09-14 08:43:54 +02:00
|
|
|
|
|
|
|
```
|
|
|
|
--enable-generic
|
|
|
|
```
|
|
|
|
Sets `-mtune=generic` as `native` is otherwise the default.
|
|
|
|
|
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
#### Compact mode (experimental)
|
2019-06-07 00:10:13 +02:00
|
|
|
|
|
|
|
```
|
|
|
|
--enable-compact
|
|
|
|
```
|
|
|
|
Create the smallest possible resulting output. This will optimize for size
|
|
|
|
(if optimization is enabled), remove all debugging, strip symbols, and apply
|
|
|
|
any toolchain-feature or #ifdef in code that optimizes the output size.
|
|
|
|
|
|
|
|
_This feature is experimental. It may not build or execute on all platforms
|
|
|
|
reliably. Please report bugs._
|
|
|
|
|
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
#### Manually enable assertions
|
2018-09-14 08:43:54 +02:00
|
|
|
|
|
|
|
```
|
|
|
|
--enable-assert
|
|
|
|
```
|
|
|
|
Implied by `--enable-debug`. This is useful to specifically enable `assert()`
|
|
|
|
statements when `--enable-debug` is not used.
|
|
|
|
|
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
#### Manually enable optimization
|
2018-09-14 08:43:54 +02:00
|
|
|
|
|
|
|
```
|
|
|
|
--enable-optimize
|
|
|
|
```
|
|
|
|
This manually applies full release-mode optimizations even when using
|
|
|
|
`--enable-debug`. Implied when not in debug mode.
|
|
|
|
|
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
#### Disable third-party dynamic allocator libraries
|
2019-07-03 23:31:05 +02:00
|
|
|
|
|
|
|
```
|
2019-07-04 06:41:48 +02:00
|
|
|
--disable-malloc-libs
|
2019-07-03 23:31:05 +02:00
|
|
|
```
|
|
|
|
`./configure` will detect alternative `malloc()` implementations found in
|
|
|
|
libraries installed on the system (jemalloc/tcmalloc/etc). Construct developers
|
|
|
|
may enable these to be configured by default, if detected. To always prevent
|
|
|
|
any alternative to the default standard library allocator specify this option.
|
|
|
|
|
|
|
|
|
2019-07-20 22:47:10 +02:00
|
|
|
#### Enable third-party dynamic allocator libraries
|
|
|
|
|
|
|
|
Currently:
|
|
|
|
|
|
|
|
```
|
|
|
|
--enable-jemalloc
|
|
|
|
```
|
|
|
|
|
|
|
|
`./configure` will detect alternative `malloc()` implementations found in
|
|
|
|
libraries installed on the system (jemalloc/tcmalloc/etc). Construct developers
|
|
|
|
may not enable these to be configured by default, falling back on the default
|
|
|
|
allocator. To always use one of the alternative allocators use one option here.
|
|
|
|
|
|
|
|
|
|
|
|
#### Logging level
|
2018-09-14 08:43:54 +02:00
|
|
|
|
|
|
|
```
|
|
|
|
--with-log-level=
|
|
|
|
```
|
|
|
|
This manually sets the level of logging. All log levels at or below this level
|
|
|
|
will be available. When a log level is not available, all code used to generate
|
|
|
|
its messages will be entirely eliminated via *dead-code-elimination* at compile
|
|
|
|
time.
|
|
|
|
|
|
|
|
The log levels are (from logger.h):
|
|
|
|
```
|
|
|
|
7 DEBUG Maximum verbosity for developers.
|
|
|
|
6 DWARNING A warning but only for developers (more frequent than WARNING).
|
|
|
|
5 DERROR An error but only worthy of developers (more frequent than ERROR).
|
|
|
|
4 INFO A more frequent message with good news.
|
|
|
|
3 NOTICE An infrequent important message with neutral or positive news.
|
|
|
|
2 WARNING Non-impacting undesirable behavior user should know about.
|
|
|
|
1 ERROR Things that shouldn't happen; user impacted and should know.
|
|
|
|
0 CRITICAL Catastrophic/unrecoverable; program is in a compromised state.
|
|
|
|
```
|
|
|
|
|
|
|
|
When `--enable-debug` is used `--with-log-level=DEBUG` is implied. Otherwise
|
|
|
|
for release mode `--with-log-level=INFO` is implied. Large deployments with
|
|
|
|
many users may consider lower than `INFO` to maximize optimization and reduce
|
|
|
|
noise.
|