Project

General

Profile

Installation » History » Version 120

Tony Ciavarella, 12/11/2019 01:25 AM

1 1 Tony Ciavarella
h1. Installation
2
3 5 Tony Ciavarella
h2. Obtaining the Source Code
4 1 Tony Ciavarella
5 2 Tony Ciavarella
h3. Release Tarballs
6
7 94 Tony Ciavarella
Disorder doesn't have any official releases yet.  If/when that happens, release source tarballs will be available on the "Files":http://oss.squalllinesoftware.com/projects/disorder/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.
8 2 Tony Ciavarella
9
h3. SCM
10
11 72 Tony Ciavarella
The Disorder source code is hosted in a "Mercurial":https://www.mercurial-scm.org 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.
12 2 Tony Ciavarella
13 54 Tony Ciavarella
Read the "Mercurial Documentation":http://hgbook.red-bean.com/ if you aren't familiar with that and you want to go this route.
14 27 Tony Ciavarella
15 53 Tony Ciavarella
To clone the repository including the full history:
16 54 Tony Ciavarella
<pre>hg clone http://hg.squalllinesoftware.com/oss/disorder</pre>
17 2 Tony Ciavarella
18 1 Tony Ciavarella
h2. Prerequisites
19
20 38 Tony Ciavarella
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:
21 114 Tony Ciavarella
22
These dependencies require manual intervention if your system doesn't already have them:
23
* The "meson":https://mesonbuild.com/ build system
24
** The "ninja":https://ninja-build.org build system
25
** A "Python 3":http://www.python.org interpreter
26
* A C++ compiler capable of understanding the "ISO C++ 2011 Standard":http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372
27
** "GCC":http://gcc.gnu.org >= 4.7.0
28
** "Clang++":http://clang.llvm.org >= 3.1.0
29
** Visual Studio >= 2013 (version 12.x)
30
*** If you intend to use Visual Studio to build this thing on Windows, you're going to need at least 2013.
31
*** gcc or clang can build disorder on windows in a "cygwin":http://cygwin.org/ environment.
32
** (optional) C++ version of the "SEDRIS SRM":http://www.sedris.org/srm_4.4/srm_c_cpp.htm >= 4.4.0
33
34
These dependencies will be acquired automatically during the build process if they aren't already on the build system:
35 82 Tony Ciavarella
* "ASIO":http://think-async.com >= 1.12.1
36 52 Tony Ciavarella
** Either the standalone version of ASIO or the one built into boost can be used.
37
* "Eigen":http://eigen.tuxfamily.org >= 3.0.5
38
* "Google Test/Mock":https://github.com/google/googletest >= 1.7.0
39 78 Tony Ciavarella
* At least one of the following geospatial conversion libraries:
40 63 Tony Ciavarella
** "GeographicLib":https://geographiclib.sourceforge.io >= 1.45
41 89 Tony Ciavarella
** Patches to support other geospatial conversion libraries are welcome
42 1 Tony Ciavarella
43 115 Tony Ciavarella
Some platform specific hints follow.
44 1 Tony Ciavarella
45 8 Tony Ciavarella
h3. Debian Linux and Derivatives
46
47 107 Tony Ciavarella
If you don't already have meson, get it and its dependencies (python 3 and ninja):
48 105 Tony Ciavarella
<pre>sudo apt-get install meson</pre>
49 1 Tony Ciavarella
50 105 Tony Ciavarella
That's it.  You can optionally install the Disorder build dependencies from the package manager.  If the dependencies aren't installed on the system, Disorder will automatically download their source code and build them with the library.
51 82 Tony Ciavarella
52 105 Tony Ciavarella
If you'd rather install them on your system:
53 1 Tony Ciavarella
<pre>sudo apt-get install libasio-dev libeigen3-dev libgeographic-dev googletest google-mock</pre>
54 82 Tony Ciavarella
55 105 Tony Ciavarella
This may install older packages than the ones that Disorder is known to work with.  That may not work out so awesome.  Consider yourself warned.
56 1 Tony Ciavarella
57 108 Tony Ciavarella
If you've got some of the dependencies installed on your system but you want Disorder to download and build the versions the library likes, specify the @-Dwrap_type=forcefallback@ option to meson.  That will make it ignore your system libraries.
58
59 111 Tony Ciavarella
h3. Windows
60
61
You're going to need a python interpreter, meson, and ninja.  The "meson documentation":https://mesonbuild.com/Getting-meson.html describes how to get that done.
62
63 82 Tony Ciavarella
h2. Options
64 1 Tony Ciavarella
65 106 Tony Ciavarella
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 really want something different than the default.
66 46 Tony Ciavarella
67 82 Tony Ciavarella
To get a list of available options:
68
<pre>meson configure</pre>
69 1 Tony Ciavarella
70 82 Tony Ciavarella
Here are some useful options:
71
|_. Option |_. Argument |_. Description |
72
| cpp_std | c++11, c++14, c++17 | select the desired C++ standard (default: c++11) |
73 109 Tony Ciavarella
| default_library | shared, static, both | select the type of library to make (default: static) |
74 120 Tony Ciavarella
| buildtype | plain, debug, debugoptimized, release, minsize, custom | type of build to produce see "Running Meson":https://mesonbuild.com/Running-Meson.html for more details (default: debug) |
75 82 Tony Ciavarella
| wrap_mode | default, nofallback, nodownload, forcefallback | controls how dependencies are found see "Meson FAQ":https://mesonbuild.com/FAQ.html#does-wrap-download-sources-behind-my-back for more details (default: default) |
76 118 Tony Ciavarella
| build_examples | true, false | whether or not to build the disorder examples (default: false) |
77 80 Tony Ciavarella
78 116 Tony Ciavarella
Options are applied as arguments to meson setup when running the configuration step described below.  The options are specified as @-D<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 @-Dcpp_std=c++14@ to meson.
79 1 Tony Ciavarella
80 82 Tony Ciavarella
h2. Configuration
81 13 Tony Ciavarella
82 82 Tony Ciavarella
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.
83 32 Tony Ciavarella
84 82 Tony Ciavarella
h3. General
85 13 Tony Ciavarella
86 82 Tony Ciavarella
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":https://mesonbuild.com build system to configure and generate a "ninja":https://ninja-build.org recipe for compilation.
87 30 Tony Ciavarella
88 82 Tony Ciavarella
On Windows, meson will download all the dependencies, build, and utilize them out of the @subprojects@ subdirectory.
89 30 Tony Ciavarella
90 82 Tony Ciavarella
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.
91 1 Tony Ciavarella
92
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@.
93
94
Some of said options are thusly enumerated for your convenience:
95
96
h4. ASIO
97
98
|_. Option |_. Argument |_. Description |
99
| 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) |
100
| 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. |
101
102
h4. Eigen
103
104 30 Tony Ciavarella
|_. Option |_. Argument |_. Description |
105 82 Tony Ciavarella
| eigen_root | path to the root of the Eigen library (eg. /opt/eigen-3.1.2) | Tells disorder where to find the Eigen library. |
106 90 Tony Ciavarella
107
h4. SEDRIS SRM
108
109
By default Disorder will use the "GeographicLib":https://geographiclib.sourceforge.io library.  If that's what you want, no extra setup is necessary.
110
111
If you want to use the SEDRIS SRM, there's a little more work to do.  Because the SEDRIS SRM creators don't give away their source code without forcing people to have an account in their system and agree to their license, Disorder is not distributed with the SEDRIS SRM and cannot automatically download it for you.
112
113
The following additional steps are required to use the SEDRIS SRM:
114
* Download the "SEDRIS SRM":http://www.sedris.org/srm_4.4/srm_c_cpp.htm source code .tgz file.  *NOTE*: Always pick the Unix version even on Windows.  They are the same except for the compression format.
115
* Put the srm_c_cpp_sdk_4.4.tgz file in a subdirectory off the root of the disorder source tree called subprojects/packagecache
116 117 Tony Ciavarella
* Use @-Denabled_geospatial_libraries=sedris_srm@ option when configuring disorder
117
** @-Denabled_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
118
*** If both libraries are enabled and you want to use SEDIRS_SRM by default instead of GeographicLib, also apply the @-Dpreferred_geospatial_library=sedris_srm@ option
119 30 Tony Ciavarella
120 82 Tony Ciavarella
h3. Creating a Build Directory and Configuring Disorder
121 30 Tony Ciavarella
122 82 Tony Ciavarella
Once you've decided on the options, make a <build_dir> directory and configure disorder where <options> should be replaced with the desired options:
123
<pre>meson <build_dir> <options></pre>
124
For example to use the C++17 standard and a <build_dir> called "build-c++17":
125 116 Tony Ciavarella
<pre>meson build-c++17 -Dcpp_std=c++17</pre>
126 10 Tony Ciavarella
127 82 Tony Ciavarella
If you see an error message from that step, it must be fixed in order to proceed.
128 1 Tony Ciavarella
129 110 Tony Ciavarella
h2. Platform Specific Notes
130
131 82 Tony Ciavarella
h3. Linux
132
133 23 Tony Ciavarella
h4. Clang++
134 1 Tony Ciavarella
135 23 Tony Ciavarella
To use the "Clang":http://clang.llvm.org/ C++ compiler instead of "GCC":http://gcc.gnu.org/, assuming clang++ is installed on the build system:
136 82 Tony Ciavarella
<pre>CXX=<put the path to clang++ here> meson <build_dir> <options></pre>
137 23 Tony Ciavarella
138 104 Tony Ciavarella
For example, to make a release build using C++14 with a build directory of build-clang-c++14-release:
139 116 Tony Ciavarella
<pre>CXX=clang++ meson build-clang-c++14-release -Dcpp_std=c++14 -Dbuildtype=release</pre>
140 23 Tony Ciavarella
141 26 Tony Ciavarella
h3. Windows
142 23 Tony Ciavarella
143 20 Tony Ciavarella
On windows, your $PATH environment variable needs to include the path to the Python interpreter.
144 1 Tony Ciavarella
145 82 Tony Ciavarella
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.
146 20 Tony Ciavarella
147 101 Tony Ciavarella
Also, shared libraries cannot be used on windows as Disorder does not properly export symbols.  Patches welcome.
148
149 20 Tony Ciavarella
h2. Compiling
150
151 82 Tony Ciavarella
The basic strategy for building Disorder is to invoke the ninja build system from within the build directory produced by the configuration step.
152 23 Tony Ciavarella
153 82 Tony Ciavarella
This is generally all it takes:
154
<pre>cd build
155
ninja</pre>
156 43 Tony Ciavarella
157 44 Tony Ciavarella
h2. Ensuring Build Correctness
158 43 Tony Ciavarella
159 67 Tony Ciavarella
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.
160
161 88 Tony Ciavarella
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 from inside your build directory like this:
162 82 Tony Ciavarella
<pre>ninja test</pre>
163 1 Tony Ciavarella
164 67 Tony Ciavarella
That should result in something like this:
165
<pre>
166 85 Tony Ciavarella
[0/1] Running all tests.
167 103 Tony Ciavarella
1/1 disorder unit test                      OK       0.42 s
168 1 Tony Ciavarella
169 84 Tony Ciavarella
Ok:                    1
170
Expected Fail:         0
171
Fail:                  0
172
Unexpected Pass:       0
173
Skipped:               0
174
Timeout:               0
175
176
Full log written to /usr/local/src/disorder/build/meson-logs/testlog.txt
177 73 Tony Ciavarella
</pre>
178 84 Tony Ciavarella
179 96 Tony Ciavarella
Ninja thinks there is only one test, but it ran the full test suite which contains thousands of tests.  Yes, it can do them all in less than a second depending on your hardware.  If you see something besides "OK" on line 2 and "Ok: 1" on line 4, things are not okay.  Look at the full log specified on the last output line to see exactly what went wrong.
180 43 Tony Ciavarella
181 93 Tony Ciavarella
If it's unhappy, please 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.
182 43 Tony Ciavarella
183
h2. Building Against the Disorder Library
184
185 82 Tony Ciavarella
h3. Installing Disorder
186 28 Tony Ciavarella
187 112 Tony Ciavarella
Disorder can be installed somewhere on your system to make a neat little package out of all the things you'll need to build something against the library.  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 in Linux:
188 1 Tony Ciavarella
<pre>DESTDIR=/opt ninja install</pre>
189 112 Tony Ciavarella
190
Windows wants you to type more stuff.  To install disorder under C:\best_libraries_ever:
191
<pre>set DESTDIR=C:\best_libraries_ever
192
ninja install
193 113 Tony Ciavarella
</pre>
194 28 Tony Ciavarella
195 82 Tony Ciavarella
h3. Compiling Your Project Against Disorder
196 28 Tony Ciavarella
197 82 Tony Ciavarella
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.
198
199
h3. Linking Your Project With Disorder
200
201 97 Tony Ciavarella
Just link your program against Disorder's library that can be found in the @<build>/src/disorder@ directory.  If you've installed Disorder using ninja, the library will be in the appropriate location under the installation root path.