blob: 9966e39fa514e44949c732c88ea71543b7d533b9 [file] [log] [blame]
Alexander Chemeris040b3052013-06-16 14:29:54 +04001dnl
2dnl Copyright 2008, 2009, 2010 Free Software Foundation, Inc.
3dnl
4dnl This software is distributed under the terms of the GNU Public License.
5dnl See the COPYING file in the main directory for details.
6dnl
7dnl This program is free software: you can redistribute it and/or modify
8dnl it under the terms of the GNU General Public License as published by
9dnl the Free Software Foundation, either version 3 of the License, or
10dnl (at your option) any later version.
11dnl
12dnl This program is distributed in the hope that it will be useful,
13dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
14dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15dnl GNU General Public License for more details.
16dnl
17dnl You should have received a copy of the GNU General Public License
18dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
19dnl
20
Harald Weltedb9c1b52017-10-28 17:49:36 +020021AC_INIT([osmo-trx],
Martin Hauke20259cb2018-04-08 19:53:37 +020022 m4_esyscmd([./git-version-gen .tarball-version]),
Harald Weltedb9c1b52017-10-28 17:49:36 +020023 [openbsc@lists.osmocom.org])
Alexander Chemeris040b3052013-06-16 14:29:54 +040024AC_PREREQ(2.57)
25AC_CONFIG_SRCDIR([Transceiver52M/Makefile.am])
Pau Espin Pedrol82f83ce2018-01-09 15:09:31 +010026AC_CONFIG_AUX_DIR([.])
Thomas Tsou3eaae802013-08-20 19:31:14 -040027AC_CONFIG_MACRO_DIR([config])
Alexander Chemeris040b3052013-06-16 14:29:54 +040028AM_CONFIG_HEADER(config.h)
Pau Espin Pedrol2ac788b2018-01-09 17:44:49 +010029AC_CONFIG_TESTDIR(tests)
Alexander Chemeris040b3052013-06-16 14:29:54 +040030
31AC_CANONICAL_BUILD
32AC_CANONICAL_HOST
33AC_CANONICAL_TARGET
34
Pau Espin Pedrolc27d9f82019-06-25 12:09:45 +020035AM_INIT_AUTOMAKE([foreign subdir-objects])
Alexander Chemeris040b3052013-06-16 14:29:54 +040036
37dnl Linux kernel KBuild style compile messages
38m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
39
Max099a44a2017-08-28 12:10:55 +020040dnl include release helper
41RELMAKE='-include osmo-release.mk'
42AC_SUBST([RELMAKE])
43
Alexander Chemeris040b3052013-06-16 14:29:54 +040044AM_PROG_AS
Pau Espin Pedrol5ea18172018-02-20 16:48:15 +010045AC_PROG_CC
Alexander Chemeris040b3052013-06-16 14:29:54 +040046AC_PROG_CXX
Tom Tsou8ca237b2017-06-09 11:15:58 -070047AX_CXX_COMPILE_STDCXX_11
Alexander Chemeris040b3052013-06-16 14:29:54 +040048AC_PROG_LN_S
49AC_PROG_MAKE_SET
50AC_PROG_INSTALL
51AC_PATH_PROG([RM_PROG], [rm])
Pau Espin Pedrolb148d052018-09-03 18:59:53 +020052AC_LANG([C++])
Alexander Chemeris040b3052013-06-16 14:29:54 +040053
Ericc5d55862020-04-11 01:20:19 +020054dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang
55AS_CASE(["$LD"],[*clang*],
56 [AS_CASE(["${host_os}"],
57 [*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])])
58
Pau Espin Pedrolc92dad32018-02-20 13:22:58 +010059dnl check for pkg-config (explained in detail in libosmocore/configure.ac)
60AC_PATH_PROG(PKG_CONFIG_INSTALLED, pkg-config, no)
61if test "x$PKG_CONFIG_INSTALLED" = "xno"; then
62 AC_MSG_WARN([You need to install pkg-config])
63fi
64PKG_PROG_PKG_CONFIG([0.20])
65
Alexander Chemeris040b3052013-06-16 14:29:54 +040066AC_LIBTOOL_WIN32_DLL
67AC_ENABLE_SHARED dnl do build shared libraries
68AC_DISABLE_STATIC dnl don't build static libraries
69AC_PROG_LIBTOOL
70
71dnl Checks for header files.
72AC_HEADER_STDC
Martin Hauke066fd042019-10-13 19:08:00 +020073dnl This is required for GnuRadio includes to understand endianness correctly:
Alexander Chemeris040b3052013-06-16 14:29:54 +040074AC_CHECK_HEADERS([byteswap.h])
75
76dnl Checks for typedefs, structures, and compiler characteristics.
77AC_C_CONST
78AC_C_INLINE
79AC_TYPE_SIZE_T
80AC_HEADER_TIME
81AC_C_BIGENDIAN
82
Pau Espin Pedrol7a07de12020-02-19 16:31:57 +010083# Check if gettid is available (despite not being documented in glibc doc, it requires __USE_GNU on some systems)
84# C compiler is used since __USE_GNU seems to be always defined for g++.
85save_CPPFLAGS=$CPPFLAGS
86AC_LANG_PUSH(C)
87CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
88AC_CHECK_FUNCS([gettid])
89AC_LANG_POP(C)
90CPPFLAGS=$save_CPPFLAGS
91
Pau Espin Pedrolda7fee82020-01-03 19:54:00 +010092PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.3.0)
93PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.3.0)
94PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.3.0)
Harald Welte6879bb02020-05-02 22:27:14 +020095PKG_CHECK_MODULES(LIBOSMOCODING, libosmocoding >= 1.3.0)
Pau Espin Pedrol8b843e52018-02-20 14:44:39 +010096
Pau Espin Pedrol53bdb7f2018-04-16 14:27:38 +020097AC_ARG_ENABLE(sanitize,
98 [AS_HELP_STRING(
99 [--enable-sanitize],
100 [Compile with address sanitizer enabled],
101 )],
102 [sanitize=$enableval], [sanitize="no"])
103if test x"$sanitize" = x"yes"
104then
105 CPPFLAGS="$CPPFLAGS -fsanitize=address -fsanitize=undefined"
106 LDFLAGS="$LDFLAGS -fsanitize=address -fsanitize=undefined"
107fi
108
Pau Espin Pedrol288d8af2018-08-30 17:29:41 +0200109AC_ARG_ENABLE(werror,
110 [AS_HELP_STRING(
111 [--enable-werror],
112 [Turn all compiler warnings into errors, with exceptions:
113 a) deprecation (allow upstream to mark deprecation without breaking builds);
114 b) "#warning" pragmas (allow to remind ourselves of errors without breaking builds)
115 ]
116 )],
117 [werror=$enableval], [werror="no"])
118if test x"$werror" = x"yes"
119then
120 WERROR_FLAGS="-Werror"
121 WERROR_FLAGS+=" -Wno-error=deprecated -Wno-error=deprecated-declarations"
122 WERROR_FLAGS+=" -Wno-error=cpp" # "#warning"
123 CFLAGS="$CFLAGS $WERROR_FLAGS"
124 CPPFLAGS="$CPPFLAGS $WERROR_FLAGS"
125fi
126
127
Pau Espin Pedrolf3d7f442018-04-24 18:49:03 +0200128AC_ARG_WITH(uhd, [
129 AS_HELP_STRING([--with-uhd],
130 [enable UHD based transceiver])
131])
132
Alexander Chemeris040b3052013-06-16 14:29:54 +0400133AC_ARG_WITH(usrp1, [
134 AS_HELP_STRING([--with-usrp1],
135 [enable USRP1 gnuradio based transceiver])
136])
137
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200138AC_ARG_WITH(lms, [
139 AS_HELP_STRING([--with-lms],
Pau Espin Pedrol70d03442018-08-17 17:17:05 +0200140 [enable LimeSuite based transceiver])
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200141])
142
Oliver Smitha5ac4b22020-05-19 13:17:07 +0200143AC_ARG_WITH(ipc, [
144 AS_HELP_STRING([--with-ipc],
145 [enable IPC])
146])
147
Alexander Chemeris040b3052013-06-16 14:29:54 +0400148AC_ARG_WITH(singledb, [
149 AS_HELP_STRING([--with-singledb],
150 [enable single daughterboard use on USRP1])
151])
152
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400153AC_ARG_WITH(neon, [
154 AS_HELP_STRING([--with-neon],
155 [enable ARM NEON support])
156])
157
158AC_ARG_WITH(neon-vfpv4, [
159 AS_HELP_STRING([--with-neon-vfpv4],
160 [enable ARM NEON FMA support])
161])
162
Tom Tsou66133312015-05-18 16:26:33 -0700163AC_ARG_WITH(sse, [
164 AS_HELP_STRING([--with-sse],
165 [enable x86 SSE support (default)])
166])
167
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400168AS_IF([test "x$with_neon" = "xyes"], [
169 AC_DEFINE(HAVE_NEON, 1, Support ARM NEON)
170])
171
172AS_IF([test "x$with_neon_vfpv4" = "xyes"], [
173 AC_DEFINE(HAVE_NEON, 1, Support ARM NEON)
174 AC_DEFINE(HAVE_NEON_FMA, 1, Support ARM NEON with FMA)
175])
176
Alexander Chemeris040b3052013-06-16 14:29:54 +0400177AS_IF([test "x$with_usrp1" = "xyes"], [
Pau Espin Pedrolaffd3512018-12-03 19:15:01 +0100178 AC_CHECK_HEADER([boost/config.hpp],[],
179 [AC_MSG_ERROR([boost/config.hpp not found, install e.g. libboost-dev])])
Thomas Tsouc0641242013-10-11 14:55:31 -0400180 PKG_CHECK_MODULES(USRP, usrp >= 3.3)
Alexander Chemeris040b3052013-06-16 14:29:54 +0400181])
182
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200183AS_IF([test "x$with_lms" = "xyes"], [
184 PKG_CHECK_MODULES(LMS, LimeSuite)
185])
186
Pau Espin Pedrolf3d7f442018-04-24 18:49:03 +0200187AS_IF([test "x$with_uhd" != "xno"],[
Tom Tsou72bf7622017-03-07 14:16:46 -0800188 PKG_CHECK_MODULES(UHD, uhd >= 003.011,
189 [AC_DEFINE(USE_UHD_3_11, 1, UHD version 3.11.0 or higher)],
190 [PKG_CHECK_MODULES(UHD, uhd >= 003.009,
191 [AC_DEFINE(USE_UHD_3_9, 1, UHD version 3.9.0 or higher)],
192 [PKG_CHECK_MODULES(UHD, uhd >= 003.005)]
193 )]
Tom Tsou80cb0802017-01-19 13:44:02 -0800194 )
Alexander Chemeris040b3052013-06-16 14:29:54 +0400195])
196
Alexander Chemeris040b3052013-06-16 14:29:54 +0400197AS_IF([test "x$with_singledb" = "xyes"], [
198 AC_DEFINE(SINGLEDB, 1, Define to 1 for single daughterboard)
199])
200
Thomas Tsoufffd9872013-11-04 10:20:21 -0800201# Find and define supported SIMD extensions
Tom Tsou66133312015-05-18 16:26:33 -0700202AS_IF([test "x$with_sse" != "xno"], [
Philipp Maiere8ae9fc2017-03-20 12:08:42 +0100203 AX_SSE
204], [
205 AM_CONDITIONAL(HAVE_SSE3, false)
206 AM_CONDITIONAL(HAVE_SSE4_1, false)
Tom Tsou66133312015-05-18 16:26:33 -0700207])
Thomas Tsoufffd9872013-11-04 10:20:21 -0800208
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300209dnl Check if the compiler supports specified GCC's built-in function
210AC_DEFUN([CHECK_BUILTIN_SUPPORT], [
211 AC_CACHE_CHECK(
212 [whether ${CC} has $1 built-in],
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200213 [osmo_cv_cc_has_$1], [
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300214 AC_LINK_IFELSE([
215 AC_LANG_PROGRAM([], [
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200216 $2
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300217 ])
218 ],
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200219 [AS_VAR_SET([osmo_cv_cc_has_$1], [yes])],
220 [AS_VAR_SET([osmo_cv_cc_has_$1], [no])])
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300221 ]
222 )
223
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200224 AS_IF([test yes = AS_VAR_GET([osmo_cv_cc_has_$1])], [
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300225 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1), 1,
226 [Define to 1 if compiler has the '$1' built-in function])
227 ], [
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200228 AC_MSG_WARN($3)
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300229 ])
230])
231
232dnl Check if the compiler supports runtime SIMD detection
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200233CHECK_BUILTIN_SUPPORT([__builtin_cpu_supports], [__builtin_cpu_supports("sse");],
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300234 [Runtime SIMD detection will be disabled])
235
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200236dnl Check for __sync_fetch_and_add().
237CHECK_BUILTIN_SUPPORT([__sync_fetch_and_and], [int x;__sync_fetch_and_and(&x,1);],
238 [Atomic operation not available, will use mutex])
239dnl Check for __sync_or_and_fetch().
240CHECK_BUILTIN_SUPPORT([__sync_or_and_fetch], [int x;__sync_or_and_fetch(&x,1);],
241 [Atomic operation not available, will use mutex])
242AS_IF([test "x$osmo_cv_cc_has___sync_fetch_and_and" = "xyes" && test "x$osmo_cv_cc_has___sync_or_and_fetch" = "xyes"], [
243 AC_DEFINE(HAVE_ATOMIC_OPS, 1, [Support all required atomic operations], [AC_MSG_WARN("At least one aotmic operation missing, will use mutex")])
244])
245
Pau Espin Pedrolf3d7f442018-04-24 18:49:03 +0200246AM_CONDITIONAL(DEVICE_UHD, [test "x$with_uhd" != "xno"])
Pau Espin Pedrola4316ee2018-04-24 16:29:05 +0200247AM_CONDITIONAL(DEVICE_USRP1, [test "x$with_usrp1" = "xyes"])
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200248AM_CONDITIONAL(DEVICE_LMS, [test "x$with_lms" = "xyes"])
Oliver Smitha5ac4b22020-05-19 13:17:07 +0200249AM_CONDITIONAL(DEVICE_IPC, [test "x$with_ipc" = "xyes"])
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400250AM_CONDITIONAL(ARCH_ARM, [test "x$with_neon" = "xyes" || test "x$with_neon_vfpv4" = "xyes"])
251AM_CONDITIONAL(ARCH_ARM_A15, [test "x$with_neon_vfpv4" = "xyes"])
Alexander Chemeris040b3052013-06-16 14:29:54 +0400252
Alexander Chemeris040b3052013-06-16 14:29:54 +0400253PKG_CHECK_MODULES(LIBUSB, libusb-1.0)
Alexander Huemer6fafd332018-01-12 15:04:02 +0100254PKG_CHECK_MODULES(FFTWF, fftw3f)
Alexander Chemeris040b3052013-06-16 14:29:54 +0400255
Oliver Smithbe8a83f2018-11-14 10:47:01 +0100256# Generate manuals
257AC_ARG_ENABLE(manuals,
258 [AS_HELP_STRING(
259 [--enable-manuals],
260 [Generate manual PDFs [default=no]],
261 )],
262 [osmo_ac_build_manuals=$enableval], [osmo_ac_build_manuals="no"])
263AM_CONDITIONAL([BUILD_MANUALS], [test x"$osmo_ac_build_manuals" = x"yes"])
264AC_ARG_VAR(OSMO_GSM_MANUALS_DIR, [path to common osmo-gsm-manuals files, overriding pkg-config and "../osmo-gsm-manuals"
265 fallback])
266if test x"$osmo_ac_build_manuals" = x"yes"
267then
268 # Find OSMO_GSM_MANUALS_DIR (env, pkg-conf, fallback)
269 if test -n "$OSMO_GSM_MANUALS_DIR"; then
270 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from env)"
271 else
272 OSMO_GSM_MANUALS_DIR="$($PKG_CONFIG osmo-gsm-manuals --variable=osmogsmmanualsdir 2>/dev/null)"
273 if test -n "$OSMO_GSM_MANUALS_DIR"; then
274 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from pkg-conf)"
275 else
276 OSMO_GSM_MANUALS_DIR="../osmo-gsm-manuals"
277 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (fallback)"
278 fi
279 fi
280 if ! test -d "$OSMO_GSM_MANUALS_DIR"; then
281 AC_MSG_ERROR("OSMO_GSM_MANUALS_DIR does not exist! Install osmo-gsm-manuals or set OSMO_GSM_MANUALS_DIR.")
282 fi
283
284 # Find and run check-depends
285 CHECK_DEPENDS="$OSMO_GSM_MANUALS_DIR/check-depends.sh"
286 if ! test -x "$CHECK_DEPENDS"; then
287 CHECK_DEPENDS="osmo-gsm-manuals-check-depends"
288 fi
289 if ! $CHECK_DEPENDS; then
290 AC_MSG_ERROR("missing dependencies for --enable-manuals")
291 fi
292
293 # Put in Makefile with absolute path
294 OSMO_GSM_MANUALS_DIR="$(realpath "$OSMO_GSM_MANUALS_DIR")"
295 AC_SUBST([OSMO_GSM_MANUALS_DIR])
296fi
297
Pau Espin Pedrol5ac2cb32018-09-10 13:39:02 +0200298 # https://www.freedesktop.org/software/systemd/man/daemon.html
299 AC_ARG_WITH([systemdsystemunitdir],
300 [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],,
301 [with_systemdsystemunitdir=auto])
302 AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
303 def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
304
305 AS_IF([test "x$def_systemdsystemunitdir" = "x"],
306 [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
307 [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
308 with_systemdsystemunitdir=no],
309 [with_systemdsystemunitdir="$def_systemdsystemunitdir"])])
310 AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
311 [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
312 AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$with_systemdsystemunitdir" != "xno"])
313
Pau Espin Pedrol53bdb7f2018-04-16 14:27:38 +0200314AC_MSG_RESULT([CPPFLAGS="$CPPFLAGS"])
315AC_MSG_RESULT([CFLAGS="$CFLAGS"])
316AC_MSG_RESULT([CXXFLAGS="$CXXFLAGS"])
317AC_MSG_RESULT([LDFLAGS="$LDFLAGS"])
318
Alexander Chemeris040b3052013-06-16 14:29:54 +0400319dnl Output files
320AC_CONFIG_FILES([\
321 Makefile \
322 CommonLibs/Makefile \
323 GSM/Makefile \
324 Transceiver52M/Makefile \
Pau Espin Pedrol43fedb62018-04-24 15:22:57 +0200325 Transceiver52M/arch/Makefile \
326 Transceiver52M/arch/common/Makefile \
327 Transceiver52M/arch/arm/Makefile \
328 Transceiver52M/arch/x86/Makefile \
Pau Espin Pedrol2128a302018-04-24 16:16:06 +0200329 Transceiver52M/device/Makefile \
Pau Espin Pedrolb5def412019-05-03 21:08:40 +0200330 Transceiver52M/device/common/Makefile \
Pau Espin Pedrol2128a302018-04-24 16:16:06 +0200331 Transceiver52M/device/uhd/Makefile \
332 Transceiver52M/device/usrp1/Makefile \
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200333 Transceiver52M/device/lms/Makefile \
Pau Espin Pedrold5ff1002020-03-24 17:19:27 +0100334 Transceiver52M/device/ipc/Makefile \
Pau Espin Pedrol2ac788b2018-01-09 17:44:49 +0100335 tests/Makefile \
336 tests/CommonLibs/Makefile \
Pau Espin Pedrolc2ba4272018-01-10 13:06:22 +0100337 tests/Transceiver52M/Makefile \
Harald Welte6879bb02020-05-02 22:27:14 +0200338 utils/Makefile \
Pau Espin Pedrolc7756e72018-06-19 11:14:45 +0200339 doc/Makefile \
340 doc/examples/Makefile \
Pau Espin Pedrol5ac2cb32018-09-10 13:39:02 +0200341 contrib/Makefile \
342 contrib/systemd/Makefile \
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400343])
Alexander Chemeris040b3052013-06-16 14:29:54 +0400344
Oliver Smithbe8a83f2018-11-14 10:47:01 +0100345AC_OUTPUT(
Oliver Smith7bbe19e2020-05-14 11:54:54 +0200346 doc/manuals/Makefile
347 contrib/osmo-trx.spec)