Project

General

Profile

Build from Source » History » Version 20

Darkstar, 03/10/2017 10:48 PM
external dependencies. source: my own learning curve ;-)

1 1 neels
{{>toc}}
2 1 neels
3 1 neels
h1. Build from Source
4 1 neels
5 1 neels
bq. *Before you consider building from source, be aware that there are [[Nightly Builds]]
6 1 neels
available for Debian + Ubuntu platforms. These are recommended for normal users.*
7 1 neels
8 5 neels
Osmocom projects use autoconf/automake.
9 2 neels
The general pattern for building is:
10 1 neels
11 1 neels
<pre>
12 1 neels
cd source-tree
13 1 neels
autoreconf -fi
14 1 neels
./configure
15 1 neels
make
16 1 neels
make check
17 1 neels
make install
18 15 wirelesss
sudo ldconfig
19 1 neels
</pre>
20 1 neels
21 3 neels
The @./configure@ step may need further configuration options, and
22 3 neels
@./configure@ will tell you which dependencies are still missing, if any.
23 3 neels
See below for project specific details and troubleshooting.
24 1 neels
25 6 neels
The @make@ step may be sped up by using multiple CPU cores:
26 1 neels
27 1 neels
<pre>
28 1 neels
make -j 8
29 1 neels
</pre>
30 1 neels
31 1 neels
We take care to make our builds parallelizable with @-j@, but in case
32 1 neels
@make -j@ fails, issuing a simple @make@ could fix the problem (expecting
33 1 neels
this only in libsmpp34).
34 1 neels
35 1 neels
36 1 neels
h1. Dependencies
37 1 neels
38 1 neels
Which libraries are needed by various Osmocom programs is best resolved during
39 1 neels
the @./configure@ step described below. This script checks for any missing
40 6 neels
dependencies and issues corresponding error messages.
41 1 neels
42 1 neels
Here is a (probably incomplete) overview of dependencies between Osmocom
43 1 neels
projects:
44 1 neels
45 1 neels
| _To build ..._ | _... you also need ..._ |
46 1 neels
| osmo-bts | libosmocore, libosmo-abis, openbsc (source tree only), L1 headers depending on BTS model |
47 1 neels
| osmo-pcu | libosmocore, L1 headers depending on BTS model |
48 1 neels
| openbsc: osmo-nitb, osmo-bsc, osmo-sgsn, osmo-bsc_nat, osmo-bsc_mgcp | libosmocore, libosmo-abis, libosmo-netif, libosmo-sccp, libsmpp34 |
49 18 neels
| openbsc: 3G osmo-msc (branch sysmocom/iu) | libosmocore, libosmo-abis, libosmo-netif (branch sysmocom/sctp), libosmo-sccp (branch sysmocom/iu), asn1c, libasn1c, osmo-iuh |
50 1 neels
| osmo-iuh | libosmocore, libosmo-netif, libosmo-sccp, asn1c, libasn1c |
51 1 neels
52 20 Darkstar
h1. External dependencies
53 20 Darkstar
54 20 Darkstar
If you want to build on specific Linux distros, you might need to install additional dependencies before the build will succeed.
55 20 Darkstar
56 20 Darkstar
| _To build on ..._ | _...you might need to install these packages:_ |
57 20 Darkstar
|Ubuntu 16.10 | libpcsclite-dev libtalloc-dev libortp-dev libsctp-dev libdbi-dev libdbd-sqlite3 libsqlite3-dev sqlite3 libc-ares-dev |
58 20 Darkstar
59 1 neels
h1. Download Sources
60 1 neels
61 3 neels
The latest Osmocom sources are available from git at https://git.osmocom.org,
62 3 neels
where each project's overview page displays the actual git URL.
63 3 neels
64 1 neels
The projects' repository URLs generally are of the pattern:
65 3 neels
<pre>git://git.osmocom.org/project-name</pre>
66 6 neels
(To contribute, see [[Coding Standards#Submitting-Patches|Submitting Patches]])
67 3 neels
68 3 neels
For example, to verify libosmocore's git repository URL, browse to
69 1 neels
https://git.osmocom.org/libosmocore/ and observe the URL shown at the
70 3 neels
bottom of the page under _Clone_: @git://git.osmocom.org/libosmocore@
71 3 neels
72 6 neels
Then download this URL using the @git@ client:
73 3 neels
74 1 neels
<pre>
75 1 neels
git clone git://git.osmocom.org/libosmocore
76 1 neels
</pre>
77 1 neels
78 6 neels
It is also possible to download specific releases' tarballs for each git ref
79 6 neels
that is defined. For example, browse to https://git.osmocom.org/libosmocore/,
80 6 neels
click on _refs_ on the top and select any branch or tag, e.g. "0.9.0":https://git.osmocom.org/libosmocore/tag/?h=0.9.0
81 6 neels
82 16 neels
All of these download instructions hold true for any of the git repositories,
83 16 neels
not limited to libosmocore.
84 6 neels
85 17 neels
h1. Build debian packages
86 1 neels
87 17 neels
Most Osmocom projects are setup and ready for building debian packages.
88 17 neels
See the @debian/@ subdir in each source tree.
89 13 wirelesss
90 17 neels
For example, to build a libosmocore debian package:
91 1 neels
92 1 neels
<pre>
93 17 neels
cd libosmocore/
94 13 wirelesss
dpkg-buildpackage -tc -uc -us
95 17 neels
# then, you can install the package on your system with
96 17 neels
sudo dpkg -i ../libosmocore*.deb
97 13 wirelesss
</pre>
98 13 wirelesss
99 17 neels
These steps are identical for all other Osmocom projects that are ready for debian packaging.
100 13 wirelesss
101 17 neels
Advantages of debian packages:
102 17 neels
* they allow you to easily install the same binaries on several machines,
103 17 neels
* you don't need to keep the source tree around,
104 17 neels
* they guarantee a clean de-installation later.
105 17 neels
106 17 neels
Note: when not using debian packages, i.e. after a '@make install@' directly from the source tree,
107 17 neels
you can also achieve a clean de-installation with '@make uninstall@'.
108 11 wirelesss
109 12 wirelesss
h1. Details and Troubleshooting
110 11 wirelesss
111 12 wirelesss
Here is a list of the most common configuration items or pitfalls to be
112 12 wirelesss
aware of when building specific Osmocom projects.
113 12 wirelesss
114 6 neels
115 6 neels
h2. Non-GNU Systems
116 6 neels
117 6 neels
On systems like FreeBSD, you need to run @gmake@ instead of @make@.
118 6 neels
119 7 neels
h2. Cross-Compiling for a BTS Platform
120 7 neels
121 7 neels
To build new software for the sysmoBTS and Litecell 1.5, you will typically
122 7 neels
cross-compile using an SDK matching the BTS. You should find specific instructions
123 7 neels
in, for example, the sysmoBTS manual.
124 7 neels
125 6 neels
h2. General ./configure options
126 6 neels
127 6 neels
To provide the installation location, which is /usr/local by default:
128 6 neels
<pre>
129 6 neels
./configure --prefix=$HOME/my_osmocom_inst
130 6 neels
</pre>
131 6 neels
132 6 neels
If you choose a non-standard location, later builds may fail to find it.
133 6 neels
For example, if you built libosmocore with a custom prefix, a subsequent
134 6 neels
build of libosmo-abis, which needs libosmocore installed, may fail.
135 6 neels
You can tell a build process where to look for libraries to compile against
136 6 neels
using the @PKG_CONFIG_PATH@ environment variable.
137 6 neels
138 6 neels
Furthermore, when you want to run binaries compiled against libraries
139 6 neels
installed in a non-standard location, you will have to use the
140 6 neels
@LD_LIBRARY_PATH@ environment variable to successfully load the binary.
141 6 neels
Particularly, the @make check@ step typically runs such binaries,
142 6 neels
as well as when you would like to run the installed binaries yourself.
143 6 neels
144 6 neels
For example:
145 6 neels
146 6 neels
<pre>
147 6 neels
mkdir -p $HOME/osmo/src
148 6 neels
cd $HOME/osmo/src
149 6 neels
git clone git://git.osmocom.org/libosmocore
150 6 neels
cd libosmocore
151 6 neels
autoreconf -fi
152 6 neels
./configure --prefix=$HOME/osmo/inst --disable-pcsc
153 6 neels
make -j5
154 7 neels
make check
155 7 neels
make install
156 7 neels
157 7 neels
cd ..
158 7 neels
git clone git://git.osmocom.org/libosmo-abis
159 7 neels
cd libosmo-abis
160 7 neels
autoreconf -fi
161 7 neels
export PKG_CONFIG_PATH=$HOME/osmo/inst/lib/pkgconfig
162 7 neels
./configure --prefix=$HOME/osmo/inst
163 7 neels
make -j5
164 7 neels
export LD_LIBRARY_PATH=$HOME/osmo/inst/lib
165 7 neels
make check
166 7 neels
make install
167 6 neels
</pre>
168 6 neels
169 7 neels
Note that PKG_CONFIG_PATH points at the prefix's lib/pkgconfig and is needed
170 7 neels
during the configure step of a library;
171 7 neels
172 7 neels
And that LD_LIBRARY_PATH is needed when running binaries that need libraries
173 7 neels
installed in the non-standard location, here via @make check@.
174 7 neels
175 7 neels
Furthermore, when installing to an SDK's sysroot location, you would usually
176 7 neels
set @DESTDIR@ to the sysroot with @--prefix=/usr@, resulting in an install
177 7 neels
location of @$DESTDIR/usr@.
178 7 neels
179 7 neels
180 6 neels
h2. libosmocore
181 6 neels
182 6 neels
When @libpcsclite@ is not easily available, e.g. when building for a BTS target platform:
183 6 neels
<pre>
184 6 neels
./configure --disable-pcsc
185 6 neels
</pre>
186 1 neels
187 7 neels
h2. openbsc
188 7 neels
189 7 neels
@openbsc@ is so far the only source tree where the build commands must be run
190 7 neels
a level deeper than the source tree's root. Enter the second @openbsc@ dir:
191 7 neels
192 7 neels
<pre>
193 7 neels
git clone git://git.osmocom.org/openbsc
194 7 neels
cd openbsc/openbsc
195 7 neels
autoreconf -fi
196 7 neels
[...]
197 7 neels
</pre>
198 7 neels
199 19 neels
h2. openbsc for 3G
200 19 neels
201 19 neels
Be sure to pass the @--enable-iu@ configure option so that osmo-msc gets Iu interface support.
202 19 neels
203 19 neels
<pre>
204 19 neels
cd openbsc/openbsc
205 19 neels
./configure --enable-iu
206 19 neels
</pre>
207 19 neels
208 7 neels
h1. Example: completely build openbsc
209 7 neels
210 7 neels
This is an example of a complete build process for 2G openbsc and openggsn,
211 7 neels
including SMPP and the "nat" binaries, to the @/usr/local@ prefix; it is assumed
212 7 neels
that your system by default scans @/usr/local@ for installed libraries:
213 7 neels
214 7 neels
<pre>
215 7 neels
osmo_src=$HOME/osmo/src
216 7 neels
mkdir -p $osmo_src
217 7 neels
218 7 neels
cd $osmo_src
219 7 neels
git clone git://git.osmocom.org/libosmocore
220 7 neels
cd libosmocore
221 7 neels
autoreconf -fi
222 7 neels
./configure
223 7 neels
make -j5
224 7 neels
make check
225 7 neels
make install
226 7 neels
227 7 neels
cd $osmo_src
228 7 neels
git clone git://git.osmocom.org/libosmo-abis
229 7 neels
cd libosmo-abis
230 7 neels
autoreconf -fi
231 7 neels
./configure
232 7 neels
make -j5
233 7 neels
make check
234 7 neels
make install
235 7 neels
236 7 neels
cd $osmo_src
237 7 neels
git clone git://git.osmocom.org/libosmo-netif
238 7 neels
cd libosmo-netif
239 7 neels
autoreconf -fi
240 7 neels
./configure
241 7 neels
make -j5
242 7 neels
make check
243 7 neels
make install
244 7 neels
245 7 neels
cd $osmo_src
246 7 neels
git clone git://git.osmocom.org/libosmo-sccp
247 7 neels
cd libosmo-sccp
248 7 neels
autoreconf -fi
249 7 neels
./configure
250 7 neels
make -j5
251 7 neels
make check
252 7 neels
make install
253 7 neels
254 7 neels
cd $osmo_src
255 7 neels
git clone git://git.osmocom.org/libsmpp34
256 7 neels
cd libsmpp34
257 7 neels
autoreconf -fi
258 7 neels
./configure
259 7 neels
make
260 7 neels
make check
261 7 neels
make install
262 7 neels
263 7 neels
cd $osmo_src
264 7 neels
git clone git://git.osmocom.org/openggsn
265 7 neels
cd openggsn
266 7 neels
autoreconf -fi
267 7 neels
./configure
268 7 neels
make -j5
269 7 neels
make check
270 7 neels
make install
271 7 neels
272 7 neels
cd $osmo_src
273 7 neels
git clone git://git.osmocom.org/openbsc
274 7 neels
cd openbsc/openbsc
275 7 neels
autoreconf -fi
276 7 neels
./configure --enable-smpp --enable-osmo-bsc --enable-nat
277 7 neels
make -j5
278 7 neels
make check
279 1 neels
make install
280 8 neels
281 8 neels
which osmo-nitb
282 8 neels
osmo-nitb --version
283 7 neels
</pre>
284 6 neels
285 6 neels
h1. Example: build script
286 9 neels
287 9 neels
This is a shell script that builds openbsc and openggsn,
288 9 neels
expecting the git clones to be ready in the current directory:
289 9 neels
290 9 neels
attachment:build_2G.sh
Add picture from clipboard (Maximum size: 48.8 MB)