blob: 3c158962b6588d40552a96ca2d54e1e842ac81b1 [file] [log] [blame]
Harald Welte4cd3d8a2010-03-23 00:30:19 +08001AC_INIT([libosmocore],
2 m4_esyscmd([./git-version-gen .tarball-version]),
Holger Hans Peter Freyther8db70202012-03-26 16:34:37 +02003 [openbsc@lists.osmocom.org])
Harald Welte3cae0392010-02-20 21:09:24 +01004
Neels Hofmeyrcbdfa652016-09-30 23:45:28 +02005dnl *This* is the root dir, even if an install-sh exists in ../ or ../../
6AC_CONFIG_AUX_DIR([.])
7
Sylvain Munaut69b1b8b2015-08-19 11:15:14 +02008AM_INIT_AUTOMAKE([foreign dist-bzip2 no-dist-gzip 1.6 subdir-objects])
Holger Hans Peter Freytherf9eda742011-11-13 01:02:54 +01009AC_CONFIG_TESTDIR(tests)
Harald Welte3cae0392010-02-20 21:09:24 +010010
11dnl kernel style compile messages
12m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
13
Maxff932bb2017-07-04 18:19:38 +020014dnl include release helper
15RELMAKE='-include osmo-release.mk'
16AC_SUBST([RELMAKE])
17
Harald Welte3cae0392010-02-20 21:09:24 +010018dnl checks for programs
19AC_PROG_MAKE_SET
Diego Elio Pettenòd471a212012-06-29 13:01:19 -070020AC_PROG_MKDIR_P
Harald Welte3cae0392010-02-20 21:09:24 +010021AC_PROG_CC
22AC_PROG_INSTALL
Jan Engelhardtc2ddc4f2015-09-16 14:32:31 +020023LT_INIT([pic-only disable-static])
Harald Welte3cae0392010-02-20 21:09:24 +010024
Harald Welte4cd3d8a2010-03-23 00:30:19 +080025AC_CONFIG_MACRO_DIR([m4])
26
Neels Hofmeyrfef2fa22016-08-08 15:38:35 +020027dnl check for pkg-config
28dnl * If pkg-config is missing, we get a "syntax error" for PKG_CHECK_MODULES.
29dnl Instead, we want to say that pkg-config and pkg.m4 are missing.
30dnl * The proper way is PKG_PROG_PKG_CONFIG() but unfortunately that does not
31dnl produce an intelligible error message if pkg-config is missing entirely
32dnl ("syntax error near unexpected token `0.20'").
33dnl * To produce a hint that pkg-config is missing, check for the pkg-config
34dnl binary; but AC_PATH_PROG breaks if the distribution provides only
35dnl prefixed (<arch>-pkg-config) versions, so just print a warning.
36AC_PATH_PROG(PKG_CONFIG_INSTALLED, pkg-config, no)
37if test "x$PKG_CONFIG_INSTALLED" = "xno"; then
38 AC_MSG_WARN([You need to install pkg-config])
39fi
40PKG_PROG_PKG_CONFIG([0.20])
41
Tobias Engel597460f2012-10-24 17:52:52 +020042dnl check os: some linker flags not available on osx
43case $host in
44*-darwin*)
45 ;;
46*)
47 LTLDFLAGS_OSMOGB='-Wl,--version-script=$(srcdir)/libosmogb.map'
48 LTLDFLAGS_OSMOGSM='-Wl,--version-script=$(srcdir)/libosmogsm.map'
Vadim Yanitskiy3262f822016-09-23 01:48:59 +070049 LTLDFLAGS_OSMOCODING='-Wl,--version-script=$(srcdir)/libosmocoding.map'
Tobias Engel597460f2012-10-24 17:52:52 +020050 ;;
51esac
52AC_SUBST(LTLDFLAGS_OSMOGB)
53AC_SUBST(LTLDFLAGS_OSMOGSM)
Vadim Yanitskiy272bd4f2017-08-31 17:53:04 +070054AC_SUBST(LTLDFLAGS_OSMOCODING)
Tobias Engel597460f2012-10-24 17:52:52 +020055
Harald Welte3cae0392010-02-20 21:09:24 +010056dnl checks for header files
57AC_HEADER_STDC
Harald Weltee15ac062014-12-04 14:15:36 +010058AC_CHECK_HEADERS(execinfo.h sys/select.h sys/socket.h syslog.h ctype.h netinet/tcp.h)
Holger Hans Peter Freyther47723482011-11-09 11:26:15 +010059# for src/conv.c
60AC_FUNC_ALLOCA
61AC_SEARCH_LIBS([dlopen], [dl dld], [LIBRARY_DL="$LIBS";LIBS=""])
62AC_SUBST(LIBRARY_DL)
Holger Hans Peter Freytherc2c042d2014-04-17 23:19:10 +020063# for src/backtrace.c
64AC_CHECK_LIB(execinfo, backtrace, BACKTRACE_LIB=-lexecinfo, BACKTRACE_LIB=)
65AC_SUBST(BACKTRACE_LIB)
Harald Welte3cae0392010-02-20 21:09:24 +010066
Pau Espin Pedrol639c4082017-07-06 10:45:22 +020067AC_ARG_ENABLE(doxygen,
68 [AS_HELP_STRING(
69 [--disable-doxygen],
70 [Disable generation of documentation using doxygen],
71 )],
72 [doxygen=$enableval], [doxygen="yes"])
Harald Welte21e73c22011-08-17 19:33:06 +020073AC_PATH_PROG(DOXYGEN,doxygen,false)
Pau Espin Pedrol639c4082017-07-06 10:45:22 +020074AM_CONDITIONAL(HAVE_DOXYGEN, test $DOXYGEN != false && test "x$doxygen" = "xyes")
Harald Welte21e73c22011-08-17 19:33:06 +020075
Max4b2b0cc2017-07-10 14:32:48 +020076# check for syscal fallback on glibc < 2.25 - can be removed once glibc version requirement is bumped
77AC_CHECK_DECLS([SYS_getrandom], [], [], [[#include <sys/syscall.h>]])
78
Harald Welte3cae0392010-02-20 21:09:24 +010079# The following test is taken from WebKit's webkit.m4
80saved_CFLAGS="$CFLAGS"
81CFLAGS="$CFLAGS -fvisibility=hidden "
82AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden])
Alexander Huemer3d79f532011-05-24 15:16:13 +020083AC_COMPILE_IFELSE([AC_LANG_SOURCE([char foo;])],
Harald Welte3cae0392010-02-20 21:09:24 +010084 [ AC_MSG_RESULT([yes])
85 SYMBOL_VISIBILITY="-fvisibility=hidden"],
86 AC_MSG_RESULT([no]))
87CFLAGS="$saved_CFLAGS"
88AC_SUBST(SYMBOL_VISIBILITY)
89
Harald Welte7c8e2cc2012-08-29 16:47:30 +020090AC_DEFUN([CHECK_TM_INCLUDES_TM_GMTOFF], [
91 AC_CACHE_CHECK(
92 [whether struct tm has tm_gmtoff member],
93 osmo_cv_tm_includes_tm_gmtoff,
94 [AC_LINK_IFELSE([
95 AC_LANG_PROGRAM([
96 #include <time.h>
97 ], [
98 time_t t = time(NULL);
99 struct tm* lt = localtime(&t);
100 int off = lt->tm_gmtoff;
101 ])
102 ],
103 osmo_cv_tm_includes_tm_gmtoff=yes,
104 osmo_cv_tm_includes_tm_gmtoff=no
105 )]
106 )
107 if test "x$osmo_cv_tm_includes_tm_gmtoff" = xyes; then
108 AC_DEFINE(HAVE_TM_GMTOFF_IN_TM, 1,
109 [Define if struct tm has tm_gmtoff member.])
110 fi
111])
112
113CHECK_TM_INCLUDES_TM_GMTOFF
114
Harald Welte3cae0392010-02-20 21:09:24 +0100115dnl Generate the output
Christian Vogel854debc2013-01-05 20:30:41 +0100116AC_CONFIG_HEADER(config.h)
Harald Welte3cae0392010-02-20 21:09:24 +0100117
Harald Welte90e614f2015-12-05 23:38:18 +0100118PKG_CHECK_MODULES(TALLOC, [talloc >= 2.0.1])
119
Harald Welte495fe262012-09-10 16:28:17 +0200120AC_ARG_ENABLE([pcsc], [AS_HELP_STRING([--disable-pcsc], [Build without PC/SC support])],
121 [
Neels Hofmeyr96831042016-11-15 17:31:14 +0100122 ENABLE_PCSC=$enableval
Harald Welte495fe262012-09-10 16:28:17 +0200123 ],
124 [
Neels Hofmeyr96831042016-11-15 17:31:14 +0100125 ENABLE_PCSC="yes"
Harald Welte495fe262012-09-10 16:28:17 +0200126 ])
Neels Hofmeyr96831042016-11-15 17:31:14 +0100127AS_IF([test "x$ENABLE_PCSC" = "xyes"], [
Holger Hans Peter Freyther18bcc8a2014-11-14 15:06:09 +0100128 PKG_CHECK_MODULES(PCSC, libpcsclite)
Harald Welted086f212015-11-21 11:38:09 +0100129])
Neels Hofmeyr96831042016-11-15 17:31:14 +0100130AM_CONDITIONAL(ENABLE_PCSC, test "x$ENABLE_PCSC" = "xyes")
131AC_SUBST(ENABLE_PCSC)
Harald Welte495fe262012-09-10 16:28:17 +0200132
Maxed029df2017-10-26 10:56:04 +0200133AC_ARG_ENABLE([gnutls], [AS_HELP_STRING([--disable-gnutls], [Do not use GnuTLS fallback for missing getrandom()])],
134 [ENABLE_GNUTLS=$enableval], [ENABLE_GNUTLS="yes"])
135AM_CONDITIONAL(ENABLE_GNUTLS, test x"$ENABLE_GNUTLS" = x"yes")
136AS_IF([test "x$ENABLE_GNUTLS" = "xyes"], [
137 PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.12.0])
138])
139AC_SUBST(ENABLE_GNUTLS)
140if test x"$ENABLE_GNUTLS" = x"yes"
141then
142 AC_SUBST([LIBGNUTLS_CFLAGS])
143 AC_SUBST([LIBGNUTLS_LIBS])
144 AC_DEFINE([USE_GNUTLS], [1], [Use GnuTLS as a fallback for missing getrandom()])
145fi
146
Harald Welteb9ce51c2010-06-30 19:43:11 +0200147AC_ARG_ENABLE(plugin,
Sylvain Munautf23abab2010-07-25 16:16:42 +0200148 [AS_HELP_STRING(
149 [--disable-plugin],
150 [Disable support for dlopen plugins],
151 )],
job36b4a202011-08-21 17:18:23 +0200152 [enable_plugin=$enableval], [enable_plugin="yes"])
153AM_CONDITIONAL(ENABLE_PLUGIN, test x"$enable_plugin" = x"yes")
Harald Welteb9ce51c2010-06-30 19:43:11 +0200154
Harald Welte1067e8c2010-06-25 03:00:58 +0200155AC_ARG_ENABLE(vty,
Sylvain Munautf23abab2010-07-25 16:16:42 +0200156 [AS_HELP_STRING(
157 [--disable-vty],
158 [Disable building VTY telnet interface]
159 )],
job36b4a202011-08-21 17:18:23 +0200160 [enable_vty=$enableval], [enable_vty="yes"])
161AM_CONDITIONAL(ENABLE_VTY, test x"$enable_vty" = x"yes")
Harald Welte54403772010-05-29 11:49:51 +0200162
Sylvain Munautac3e61a2010-07-25 18:08:54 +0200163AC_ARG_ENABLE(panic_infloop,
164 [AS_HELP_STRING(
165 [--enable-panic-infloop],
166 [Trigger infinite loop on panic rather than fprintf/abort]
167 )],
job36b4a202011-08-21 17:18:23 +0200168 [panic_infloop=$enableval], [panic_infloop="no"])
169if test x"$panic_infloop" = x"yes"
Sylvain Munautac3e61a2010-07-25 18:08:54 +0200170then
171 AC_DEFINE([PANIC_INFLOOP],[1],[Use infinite loop on panic rather than fprintf/abort])
172fi
173
Holger Hans Peter Freyther43558312010-08-06 06:48:43 +0800174AC_ARG_ENABLE(bsc_fd_check,
175 [AS_HELP_STRING(
176 [--enable-bsc-fd-check],
177 [Instrument bsc_register_fd to check that the fd is registered]
178 )],
job36b4a202011-08-21 17:18:23 +0200179 [fd_check=$enableval], [fd_check="no"])
180if test x"$fd_check" = x"no"
Holger Hans Peter Freyther43558312010-08-06 06:48:43 +0800181then
182 AC_DEFINE([BSC_FD_CHECK],[1],[Instrument the bsc_register_fd])
183fi
184
Holger Hans Peter Freytherc87f2662010-10-07 00:00:15 +0800185AC_ARG_ENABLE(msgfile,
186 [AS_HELP_STRING(
187 [--disable-msgfile],
188 [Disable support for the msgfile],
189 )],
job36b4a202011-08-21 17:18:23 +0200190 [enable_msgfile=$enableval], [enable_msgfile="yes"])
191AM_CONDITIONAL(ENABLE_MSGFILE, test x"$enable_msgfile" = x"yes")
Holger Hans Peter Freytherc87f2662010-10-07 00:00:15 +0800192
Sylvain Munautfe28ded2011-09-02 22:18:24 +0200193AC_ARG_ENABLE(serial,
194 [AS_HELP_STRING(
195 [--disable-serial],
196 [Disable support for the serial helpers],
197 )],
198 [enable_serial=$enableval], [enable_serial="yes"])
199AM_CONDITIONAL(ENABLE_SERIAL, test x"$enable_serial" = x"yes")
200
job8e4deb62011-08-21 17:18:24 +0200201AC_ARG_ENABLE(utilities,
202 [AS_HELP_STRING(
203 [--disable-utilities],
204 [Disable building utility programs],
205 )],
206 [enable_utilities=$enableval], [enable_utilities="yes"])
207AM_CONDITIONAL(ENABLE_UTILITIES, test x"$enable_utilities" = x"yes")
208
Harald Weltee3a10b62012-09-08 22:18:43 +0200209AC_ARG_ENABLE(gb,
210 [AS_HELP_STRING(
211 [--disable-gb],
212 [Disable building Gb library],
213 )],
214 [enable_gb=$enableval], [enable_gb="yes"])
215AM_CONDITIONAL(ENABLE_GB, test x"$enable_gb" = x"yes")
216
Harald Welte1c67e752017-01-15 17:52:30 +0100217AC_ARG_ENABLE(ctrl,
218 [AS_HELP_STRING(
219 [--disable-ctrl],
220 [Disable building CTRL library],
221 )],
222 [enable_ctrl=$enableval], [enable_ctrl="yes"])
223AM_CONDITIONAL(ENABLE_CTRL, test x"$enable_ctrl" = x"yes")
224
Harald Welte898ffef2017-05-15 21:37:34 +0200225AC_ARG_ENABLE(pseudotalloc,
226 [AS_HELP_STRING(
227 [--enable-pseudotalloc],
228 [Enable building pseudotalloc library],
229 )],
230 [enable_pseudotalloc=$enableval], [enable_pseudotalloc="no"])
231AM_CONDITIONAL(ENABLE_PSEUDOTALLOC, test x"$enable_pseudotalloc" = x"yes")
232
job8e4deb62011-08-21 17:18:24 +0200233AC_ARG_ENABLE(embedded,
234 [AS_HELP_STRING(
235 [--enable-embedded],
236 [Enable building for embedded use and disable unsupported features]
237 )],
238 [embedded=$enableval], [embedded="no"])
Max89c8c402018-01-18 16:05:27 +0100239
240AM_CONDITIONAL(ENABLE_STATS_TEST, true)
241
job8e4deb62011-08-21 17:18:24 +0200242if test x"$embedded" = x"yes"
243then
244 AC_DEFINE([EMBEDDED],[1],[Select building for embedded use])
job8e4deb62011-08-21 17:18:24 +0200245 AM_CONDITIONAL(ENABLE_PLUGIN, false)
246 AM_CONDITIONAL(ENABLE_MSGFILE, false)
Sylvain Munautfe28ded2011-09-02 22:18:24 +0200247 AM_CONDITIONAL(ENABLE_SERIAL, false)
Maxed029df2017-10-26 10:56:04 +0200248 AM_CONDITIONAL(ENABLE_GNUTLS, false)
job8e4deb62011-08-21 17:18:24 +0200249 AM_CONDITIONAL(ENABLE_VTY, false)
Harald Welte1c67e752017-01-15 17:52:30 +0100250 AM_CONDITIONAL(ENABLE_CTRL, false)
job8e4deb62011-08-21 17:18:24 +0200251 AM_CONDITIONAL(ENABLE_UTILITIES, false)
Harald Weltee3a10b62012-09-08 22:18:43 +0200252 AM_CONDITIONAL(ENABLE_GB, false)
Maxed029df2017-10-26 10:56:04 +0200253 AM_CONDITIONAL(ENABLE_GNUTLS, false)
Harald Welte1a7d64c2017-01-15 17:53:23 +0100254 AM_CONDITIONAL(ENABLE_PCSC, false)
Harald Welte898ffef2017-05-15 21:37:34 +0200255 AM_CONDITIONAL(ENABLE_PSEUDOTALLOC, true)
Max89c8c402018-01-18 16:05:27 +0100256 AM_CONDITIONAL(ENABLE_STATS_TEST, false)
Maxed029df2017-10-26 10:56:04 +0200257 AC_DEFINE([USE_GNUTLS], [0])
job8e4deb62011-08-21 17:18:24 +0200258 AC_DEFINE([PANIC_INFLOOP],[1],[Use infinite loop on panic rather than fprintf/abort])
259fi
Harald Welte54403772010-05-29 11:49:51 +0200260
Neels Hofmeyra2381762016-09-30 01:25:45 +0200261AC_ARG_ENABLE(sanitize,
262 [AS_HELP_STRING(
263 [--enable-sanitize],
264 [Compile with address sanitizer enabled],
265 )],
266 [sanitize=$enableval], [sanitize="no"])
267if test x"$sanitize" = x"yes"
268then
Pau Espin Pedrol13492492017-06-23 11:18:04 +0200269 CFLAGS="$CFLAGS -fsanitize=address -fsanitize=undefined"
270 CPPFLAGS="$CPPFLAGS -fsanitize=address -fsanitize=undefined"
Neels Hofmeyra2381762016-09-30 01:25:45 +0200271fi
272
Pau Espin Pedrol13492492017-06-23 11:18:04 +0200273CFLAGS="$CFLAGS -DBUILDING_LIBOSMOCORE -Wall"
274CPPFLAGS="$CPPFLAGS -DBUILDING_LIBOSMOCORE -Wall"
Pau Espin Pedrol69dfe5a2017-06-17 23:18:11 +0200275
Vadim Yanitskiy2c3066e2017-04-30 19:41:56 +0700276AC_ARG_ENABLE(simd,
277 [AS_HELP_STRING(
278 [--disable-simd],
279 [Disable SIMD support]
280 )],
281 [simd=$enableval], [simd="yes"])
282if test x"$simd" = x"yes"
283then
284 # Find and define supported SIMD extensions
285 AX_CHECK_SIMD
286else
287 AM_CONDITIONAL(HAVE_AVX2, false)
Harald Welteb93f60f2017-11-17 11:41:34 +0100288 AM_CONDITIONAL(HAVE_SSSE3, false)
Vadim Yanitskiy2c3066e2017-04-30 19:41:56 +0700289 AM_CONDITIONAL(HAVE_SSE4_1, false)
290fi
291
Vadim Yanitskiya8a58192017-05-08 00:07:21 +0700292dnl Check if the compiler supports specified GCC's built-in function
293AC_DEFUN([CHECK_BUILTIN_SUPPORT], [
294 AC_CACHE_CHECK(
295 [whether ${CC} has $1 built-in],
296 [osmo_cv_cc_has_builtin], [
297 AC_LINK_IFELSE([
298 AC_LANG_PROGRAM([], [
299 __builtin_cpu_supports("sse");
300 ])
301 ],
302 [AS_VAR_SET([osmo_cv_cc_has_builtin], [yes])],
303 [AS_VAR_SET([osmo_cv_cc_has_builtin], [no])])
304 ]
305 )
306
307 AS_IF([test yes = AS_VAR_GET([osmo_cv_cc_has_builtin])], [
308 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1), 1,
309 [Define to 1 if compiler has the '$1' built-in function])
310 ], [
311 AC_MSG_WARN($2)
312 ])
313])
314
315dnl Check if the compiler supports runtime SIMD detection
316CHECK_BUILTIN_SUPPORT([__builtin_cpu_supports],
317 [Runtime SIMD detection will be disabled])
318
Harald Welte3cae0392010-02-20 21:09:24 +0100319AC_OUTPUT(
320 libosmocore.pc
Sylvain Munautb99b9302010-10-24 18:23:10 +0200321 libosmocodec.pc
Vadim Yanitskiy3262f822016-09-23 01:48:59 +0700322 libosmocoding.pc
Harald Weltee352c522010-05-19 19:42:32 +0200323 libosmovty.pc
Pablo Neira Ayusofba495e2011-03-23 18:08:08 +0100324 libosmogsm.pc
Harald Welte641f7ce2012-06-17 23:05:26 +0800325 libosmogb.pc
Harald Welte3ff81b12014-08-20 19:58:40 +0200326 libosmoctrl.pc
Harald Welted54c2ee2012-01-17 18:25:50 +0100327 libosmosim.pc
Harald Welte3cae0392010-02-20 21:09:24 +0100328 include/Makefile
329 src/Makefile
Harald Welte3fb0b6f2010-05-19 19:02:52 +0200330 src/vty/Makefile
Sylvain Munaut1a4ea5b2010-10-08 15:09:16 +0200331 src/codec/Makefile
Vadim Yanitskiy3262f822016-09-23 01:48:59 +0700332 src/coding/Makefile
Harald Welted54c2ee2012-01-17 18:25:50 +0100333 src/sim/Makefile
Pablo Neira Ayusofba495e2011-03-23 18:08:08 +0100334 src/gsm/Makefile
Harald Welte641f7ce2012-06-17 23:05:26 +0800335 src/gb/Makefile
Harald Welte3ff81b12014-08-20 19:58:40 +0200336 src/ctrl/Makefile
Harald Welte898ffef2017-05-15 21:37:34 +0200337 src/pseudotalloc/Makefile
Harald Welte3cae0392010-02-20 21:09:24 +0100338 tests/Makefile
Neels Hofmeyr96831042016-11-15 17:31:14 +0100339 tests/atlocal
Harald Welteeeb78dd2011-08-02 13:44:54 +0200340 utils/Makefile
Harald Weltec7859ed2011-08-20 12:54:17 +0200341 Doxyfile.core
Harald Welte49e10562011-08-17 19:21:07 +0200342 Doxyfile.gsm
343 Doxyfile.vty
344 Doxyfile.codec
Vadim Yanitskiy3262f822016-09-23 01:48:59 +0700345 Doxyfile.coding
Neels Hofmeyr249fb712017-06-20 02:52:38 +0200346 Doxyfile.gb
Harald Welte3cae0392010-02-20 21:09:24 +0100347 Makefile)