Installation » History » Revision 84
« Previous |
Revision 84/175
(diff)
| Next »
Tony Ciavarella, 11/28/2019 02:10 PM
Installation¶
Obtaining the Source Code¶
Release Tarballs¶
Release source tarballs are available on the Files page. This is what you want if you are looking for stability and something ready for production use. You'll probably want to use the most recent version found on that page.
SCM¶
The Disorder source code is hosted in a Mercurial repository. This is what you want if you are looking for the very latest bleeding edge of the code for contributing to Disorder, forking an evil fork, or whatever other reason you may have.
Read the Mercurial Documentation if you aren't familiar with that and you want to go this route.
To clone the repository including the full history:
hg clone http://hg.squalllinesoftware.com/oss/disorder
Prerequisites¶
Given the assumption that a somewhat sane build environment for C++ already exists on the build machine, the following third party things are required to build Disorder:- ASIO >= 1.12.1
- Either the standalone version of ASIO or the one built into boost can be used.
- Eigen >= 3.0.5
- Google Test/Mock >= 1.7.0
- At least one of the following geospatial conversion libraries:
- GeographicLib >= 1.45
- C++ version of the SEDRIS SRM >= 4.4.0
- Patches to support other geospatial conversion libraries are welcome
- A Python 3 interpreter (needed to use the meson build system)
- The ninja build system
- A C++ compiler capable of understanding the ISO C++ 2011 Standard
Build and install these things in accordance with the instructions for your operating system provided by each vendor. Some hints for certain platforms follow.
Debian Linux and Derivatives¶
Debian 6.x (Squeeze)¶
The binary packages in the package system are way too old. You'll have to download the source code and build them yourself.
Debian >= 7.x (Wheezy)¶
All the dependencies are available via the package system. To install the build dependencies on Debian and maybe other derivatives:
sudo apt-get install libasio-dev libeigen3-dev libgeographic-dev googletest google-mock
If you don't already have meson, this will get the that and its dependencies (python 3 and ninja):
sudo apt-get install meson
Options¶
There are various options available to control things. If you don't know what you want, you can skip this section as disorder will try to do something sane. Don't worry, you can change options later and rebuild if you decide you want something different than the default.
To get a list of available options:
meson configureHere are some useful options:
Option | Argument | Description |
---|---|---|
cpp_std | c++11, c++14, c++17 | select the desired C++ standard (default: c++11) |
default_library | shared, static, both | select the type of library to make (default: shared on Linux, static on Windows) |
buildtype | plain, debug, debugoptimized, release, minsize, custom | type of build to produce (default: debug) |
wrap_mode | default, nofallback, nodownload, forcefallback | controls how dependencies are found see Meson FAQ for more details (default: default) |
Options are applied as arguments to meson setup when running the configuration step described below. The options are specified as --<option>=<value>
where <option> is the option to set and <value> is the value to set it to. For example, to use the C++14 standard, supply --cpp_std=c++14
to meson.
Geogspatial Libraries¶
By default Disorder will use the GeographicLib library. No extra setup is necessary.
Using SEDRIS SRM¶
Because the SEDRIS SRM creators don't give away their source code without having an account in their system and forcing people to agree to their license, Disorder is not distributed with the SEDRIS SRM and cannot automatically download it for you.
The following additional steps are required to use the SEDRIS SRM:- Download the SEDRIS SRM source code .tgz file. NOTE: Always pick the Unix version even on Windows. They are the same except for the compression format.
- Put the srm_c_cpp_sdk_4.4.tgz file in a subdirectory off the root of the disorder source tree called subprojects/packagecache
- Use
--enabled_geospatial_libraries=sedris_srm
option when configuring disorder--enabled_geospatial_libraries=sedris_srm,geographic_lib
can be used to include support for both libraries allowing run-time selection of the one that gets used- If both libraries are enabled and you want to use SEDIRS_SRM by default instead of GeographicLib, also apply the
--preferred_geospatial_library=sedris_srm
option
- If both libraries are enabled and you want to use SEDIRS_SRM by default instead of GeographicLib, also apply the
Configuration¶
If everything is setup properly, this step will be a breeze, but it is important to resolve any errors produced by the configuration step prior to attempting to compile Disorder.
General¶
The basic idea of configuration is to allow disorder to learn enough about your build platform to be able to compile. Disorder uses the meson build system to configure and generate a ninja recipe for compilation.
On Windows, meson will download all the dependencies, build, and utilize them out of the subprojects
subdirectory.
On linux-like systems, meson will attempt to find dependencies installed in the general system location falling back to downloading them and using them out of the subprojects
subdirectory.
If you don't want the default behavior on your platform, you can override it using options. The options for configuring disorder's dependencies can be found via meson configure
.
Some of said options are thusly enumerated for your convenience:
ASIO¶
Option | Argument | Description |
---|---|---|
asio | default, standalone, boost | Select the preferred version of the ASIO library. The default option prefers the standalone version with a fallback to boost if the standalone version is not found. (default: default) |
asio_root | path to the root of the standalone ASIO library (eg. /opt/asio-1.12.2) | Tells disorder where to find the standalone ASIO library. |
Eigen¶
Option | Argument | Description |
---|---|---|
eigen_root | path to the root of the Eigen library (eg. /opt/eigen-3.1.2) | Tells disorder where to find the Eigen library. |
Creating a Build Directory and Configuring Disorder¶
Once you've decided on the options, make a <build_dir> directory and configure disorder where <options> should be replaced with the desired options:
meson <build_dir> <options>
For example to use the C++17 standard and a <build_dir> called "build-c++17":
meson build-c++17 --cpp_std=c++17
If you see an error message from that step, it must be fixed in order to proceed.
Linux¶
If you get an error instead of that last line saying that 'configure' finished successfully, you must fix whatever is making it unhappy and try again.
Clang++¶
To use the Clang C++ compiler instead of GCC, assuming clang++ is installed on the build system:
CXX=<put the path to clang++ here> meson <build_dir> <options>
For example, to make a release build using C++14 with a buid directory of build-clang-c++14-release:
CXX=/usr/bin/clang++ meson build-clang-c++14-release --cpp_std=c++14 --buildtype=release
Windows¶
On windows, your $PATH environment variable needs to include the path to the Python interpreter.
If you're using the Visual Studio compiler, you must run the configuration and compilation steps from within the appropriate Visual Studio command prompt for the configuration you want to build for.
Compiling¶
The basic strategy for building Disorder is to invoke the ninja build system from within the build directory produced by the configuration step.
This is generally all it takes:
cd build ninja
Ensuring Build Correctness¶
Due to the complexity of varied compilers and build configurations, it is imperative that you preform the necessary testing on your build to ensure that it performs correctly.
Don't fret. It's easy and is well worth the time it takes for the peace of mind you gain. Just tell ninja to run the unit test like this:
ninja test
That should result in something like this:
[0/1] Running all tests. 1/1 disorder unit test OK 0.92 s Ok: 1 Expected Fail: 0 Fail: 0 Unexpected Pass: 0 Skipped: 0 Timeout: 0 Full log written to /usr/local/src/disorder/build/meson-logs/testlog.txt
This output is misleading because it really ran the full test suite which contains thousands of tests, but if you see anything but 1 test in the "Ok", things are not okay. Look at the full log specified on the last output line to see exactly what went wrong.
If you see a less happy message, you need to file a bug report and/or fix it yourself and send in a patch. Under no circumstances should you attempt to use a build that fails the test suite. A test failure means disorder isn't working as expected for some reason and that reason needs to be resolved for your simulation to function properly. Disorder does not have any known flaky unit tests. If a test doesn't work, something is broken.
Building Against the Disorder Library¶
Installing Disorder¶
Disorder can be installed somewhere on your system. To do that, issue the ninja install
command from inside your build directory. If you want to control where that sticks stuff, add DESTDIR=<dest_dir>
to the front that where <dest_dir> is where you want to install it. For example, to install disorder under /opt:
DESTDIR=/opt ninja install
Compiling Your Project Against Disorder¶
In order to compile your goodness against the Disorder library, you'll need to have the installed header files in your compiler's include path. The geospatial libraries aren't exposed so you don't need those in your include path.
Linking Your Project With Disorder¶
Just link your program against Disorder's library that can be found in the <build>/src/disorder
directory.
Updated by Tony Ciavarella about 5 years ago · 175 revisions