blob: 62092e6b3b62994a913443c0429fe3b6a5d680c6 [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
Oliver Smith0f4d5792021-01-27 17:59:02 +010037CFLAGS="$CFLAGS -std=gnu11"
38
Alexander Chemeris040b3052013-06-16 14:29:54 +040039dnl Linux kernel KBuild style compile messages
40m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
41
Max099a44a2017-08-28 12:10:55 +020042dnl include release helper
43RELMAKE='-include osmo-release.mk'
44AC_SUBST([RELMAKE])
45
Alexander Chemeris040b3052013-06-16 14:29:54 +040046AM_PROG_AS
Pau Espin Pedrol5ea18172018-02-20 16:48:15 +010047AC_PROG_CC
Alexander Chemeris040b3052013-06-16 14:29:54 +040048AC_PROG_CXX
Tom Tsou8ca237b2017-06-09 11:15:58 -070049AX_CXX_COMPILE_STDCXX_11
Alexander Chemeris040b3052013-06-16 14:29:54 +040050AC_PROG_LN_S
51AC_PROG_MAKE_SET
52AC_PROG_INSTALL
53AC_PATH_PROG([RM_PROG], [rm])
Pau Espin Pedrolb148d052018-09-03 18:59:53 +020054AC_LANG([C++])
Alexander Chemeris040b3052013-06-16 14:29:54 +040055
Ericc5d55862020-04-11 01:20:19 +020056dnl patching ${archive_cmds} to affect generation of file "libtool" to fix linking with clang
57AS_CASE(["$LD"],[*clang*],
58 [AS_CASE(["${host_os}"],
59 [*linux*],[archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'])])
60
Pau Espin Pedrolc92dad32018-02-20 13:22:58 +010061dnl check for pkg-config (explained in detail in libosmocore/configure.ac)
62AC_PATH_PROG(PKG_CONFIG_INSTALLED, pkg-config, no)
63if test "x$PKG_CONFIG_INSTALLED" = "xno"; then
64 AC_MSG_WARN([You need to install pkg-config])
65fi
66PKG_PROG_PKG_CONFIG([0.20])
67
Alexander Chemeris040b3052013-06-16 14:29:54 +040068AC_LIBTOOL_WIN32_DLL
69AC_ENABLE_SHARED dnl do build shared libraries
70AC_DISABLE_STATIC dnl don't build static libraries
71AC_PROG_LIBTOOL
72
73dnl Checks for header files.
74AC_HEADER_STDC
Martin Hauke066fd042019-10-13 19:08:00 +020075dnl This is required for GnuRadio includes to understand endianness correctly:
Alexander Chemeris040b3052013-06-16 14:29:54 +040076AC_CHECK_HEADERS([byteswap.h])
77
78dnl Checks for typedefs, structures, and compiler characteristics.
79AC_C_CONST
80AC_C_INLINE
81AC_TYPE_SIZE_T
82AC_HEADER_TIME
83AC_C_BIGENDIAN
84
Pau Espin Pedrola7143d32021-11-16 16:27:26 +010085PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 1.6.0)
86PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 1.6.0)
87PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 1.6.0)
88PKG_CHECK_MODULES(LIBOSMOCODING, libosmocoding >= 1.6.0)
Pau Espin Pedrol8b843e52018-02-20 14:44:39 +010089
Pau Espin Pedrol53bdb7f2018-04-16 14:27:38 +020090AC_ARG_ENABLE(sanitize,
91 [AS_HELP_STRING(
92 [--enable-sanitize],
93 [Compile with address sanitizer enabled],
94 )],
95 [sanitize=$enableval], [sanitize="no"])
96if test x"$sanitize" = x"yes"
97then
98 CPPFLAGS="$CPPFLAGS -fsanitize=address -fsanitize=undefined"
99 LDFLAGS="$LDFLAGS -fsanitize=address -fsanitize=undefined"
100fi
101
Pau Espin Pedrol288d8af2018-08-30 17:29:41 +0200102AC_ARG_ENABLE(werror,
103 [AS_HELP_STRING(
104 [--enable-werror],
105 [Turn all compiler warnings into errors, with exceptions:
106 a) deprecation (allow upstream to mark deprecation without breaking builds);
107 b) "#warning" pragmas (allow to remind ourselves of errors without breaking builds)
108 ]
109 )],
110 [werror=$enableval], [werror="no"])
111if test x"$werror" = x"yes"
112then
113 WERROR_FLAGS="-Werror"
114 WERROR_FLAGS+=" -Wno-error=deprecated -Wno-error=deprecated-declarations"
115 WERROR_FLAGS+=" -Wno-error=cpp" # "#warning"
116 CFLAGS="$CFLAGS $WERROR_FLAGS"
117 CPPFLAGS="$CPPFLAGS $WERROR_FLAGS"
118fi
119
120
Pau Espin Pedrolf3d7f442018-04-24 18:49:03 +0200121AC_ARG_WITH(uhd, [
122 AS_HELP_STRING([--with-uhd],
123 [enable UHD based transceiver])
124])
125
Alexander Chemeris040b3052013-06-16 14:29:54 +0400126AC_ARG_WITH(usrp1, [
127 AS_HELP_STRING([--with-usrp1],
128 [enable USRP1 gnuradio based transceiver])
129])
130
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200131AC_ARG_WITH(lms, [
132 AS_HELP_STRING([--with-lms],
Pau Espin Pedrol70d03442018-08-17 17:17:05 +0200133 [enable LimeSuite based transceiver])
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200134])
135
Eric Wild1e17c4f2020-03-24 17:19:27 +0100136AC_ARG_WITH(ipc, [
137 AS_HELP_STRING([--with-ipc],
138 [enable IPC])
139])
140
Eric7d897cb2022-11-28 19:20:32 +0100141AC_ARG_WITH(bladerf, [
142 AS_HELP_STRING([--with-bladerf],
143 [enable bladeRF])
144])
145
Alexander Chemeris040b3052013-06-16 14:29:54 +0400146AC_ARG_WITH(singledb, [
147 AS_HELP_STRING([--with-singledb],
148 [enable single daughterboard use on USRP1])
149])
150
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400151AC_ARG_WITH(neon, [
152 AS_HELP_STRING([--with-neon],
153 [enable ARM NEON support])
154])
155
156AC_ARG_WITH(neon-vfpv4, [
157 AS_HELP_STRING([--with-neon-vfpv4],
158 [enable ARM NEON FMA support])
159])
160
Tom Tsou66133312015-05-18 16:26:33 -0700161AC_ARG_WITH(sse, [
162 AS_HELP_STRING([--with-sse],
163 [enable x86 SSE support (default)])
164])
165
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400166AS_IF([test "x$with_neon" = "xyes"], [
167 AC_DEFINE(HAVE_NEON, 1, Support ARM NEON)
168])
169
170AS_IF([test "x$with_neon_vfpv4" = "xyes"], [
171 AC_DEFINE(HAVE_NEON, 1, Support ARM NEON)
172 AC_DEFINE(HAVE_NEON_FMA, 1, Support ARM NEON with FMA)
173])
174
Alexander Chemeris040b3052013-06-16 14:29:54 +0400175AS_IF([test "x$with_usrp1" = "xyes"], [
Pau Espin Pedrolaffd3512018-12-03 19:15:01 +0100176 AC_CHECK_HEADER([boost/config.hpp],[],
177 [AC_MSG_ERROR([boost/config.hpp not found, install e.g. libboost-dev])])
Thomas Tsouc0641242013-10-11 14:55:31 -0400178 PKG_CHECK_MODULES(USRP, usrp >= 3.3)
Alexander Chemeris040b3052013-06-16 14:29:54 +0400179])
180
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200181AS_IF([test "x$with_lms" = "xyes"], [
182 PKG_CHECK_MODULES(LMS, LimeSuite)
183])
184
Eric Wild1e17c4f2020-03-24 17:19:27 +0100185AS_IF([test "x$with_uhd" = "xyes"],[
Tom Tsou72bf7622017-03-07 14:16:46 -0800186 PKG_CHECK_MODULES(UHD, uhd >= 003.011,
187 [AC_DEFINE(USE_UHD_3_11, 1, UHD version 3.11.0 or higher)],
188 [PKG_CHECK_MODULES(UHD, uhd >= 003.009,
189 [AC_DEFINE(USE_UHD_3_9, 1, UHD version 3.9.0 or higher)],
190 [PKG_CHECK_MODULES(UHD, uhd >= 003.005)]
191 )]
Tom Tsou80cb0802017-01-19 13:44:02 -0800192 )
Oliver Smith71c46e92022-07-08 13:24:35 +0200193 # OS#5608: libuhd < 4.2.0 includes boost/thread/thread.hpp in its logging
194 # code and therefore requires linking against boost_thread. It's missing in
195 # uhd.pc, so work around it here.
196 # https://github.com/EttusResearch/uhd/commit/04a83b6e76beef970854da69ba882d717669b49c
197 PKG_CHECK_MODULES(UHD, uhd < 004.002,
198 [LIBS="$LIBS -lboost_thread"],
199 []
200 )
Alexander Chemeris040b3052013-06-16 14:29:54 +0400201])
202
Eric7d897cb2022-11-28 19:20:32 +0100203AS_IF([test "x$with_bladerf" = "xyes"], [
204 PKG_CHECK_MODULES(BLADE, libbladeRF >= 2.0)
205])
206
Alexander Chemeris040b3052013-06-16 14:29:54 +0400207AS_IF([test "x$with_singledb" = "xyes"], [
208 AC_DEFINE(SINGLEDB, 1, Define to 1 for single daughterboard)
209])
210
Thomas Tsoufffd9872013-11-04 10:20:21 -0800211# Find and define supported SIMD extensions
Tom Tsou66133312015-05-18 16:26:33 -0700212AS_IF([test "x$with_sse" != "xno"], [
Philipp Maiere8ae9fc2017-03-20 12:08:42 +0100213 AX_SSE
214], [
215 AM_CONDITIONAL(HAVE_SSE3, false)
216 AM_CONDITIONAL(HAVE_SSE4_1, false)
Tom Tsou66133312015-05-18 16:26:33 -0700217])
Thomas Tsoufffd9872013-11-04 10:20:21 -0800218
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300219dnl Check if the compiler supports specified GCC's built-in function
220AC_DEFUN([CHECK_BUILTIN_SUPPORT], [
221 AC_CACHE_CHECK(
222 [whether ${CC} has $1 built-in],
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200223 [osmo_cv_cc_has_$1], [
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300224 AC_LINK_IFELSE([
225 AC_LANG_PROGRAM([], [
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200226 $2
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300227 ])
228 ],
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200229 [AS_VAR_SET([osmo_cv_cc_has_$1], [yes])],
230 [AS_VAR_SET([osmo_cv_cc_has_$1], [no])])
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300231 ]
232 )
233
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200234 AS_IF([test yes = AS_VAR_GET([osmo_cv_cc_has_$1])], [
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300235 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1), 1,
236 [Define to 1 if compiler has the '$1' built-in function])
237 ], [
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200238 AC_MSG_WARN($3)
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300239 ])
240])
241
242dnl Check if the compiler supports runtime SIMD detection
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200243CHECK_BUILTIN_SUPPORT([__builtin_cpu_supports], [__builtin_cpu_supports("sse");],
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300244 [Runtime SIMD detection will be disabled])
245
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200246dnl Check for __sync_fetch_and_add().
247CHECK_BUILTIN_SUPPORT([__sync_fetch_and_and], [int x;__sync_fetch_and_and(&x,1);],
248 [Atomic operation not available, will use mutex])
249dnl Check for __sync_or_and_fetch().
250CHECK_BUILTIN_SUPPORT([__sync_or_and_fetch], [int x;__sync_or_and_fetch(&x,1);],
251 [Atomic operation not available, will use mutex])
252AS_IF([test "x$osmo_cv_cc_has___sync_fetch_and_and" = "xyes" && test "x$osmo_cv_cc_has___sync_or_and_fetch" = "xyes"], [
253 AC_DEFINE(HAVE_ATOMIC_OPS, 1, [Support all required atomic operations], [AC_MSG_WARN("At least one aotmic operation missing, will use mutex")])
254])
255
Eric Wild1e17c4f2020-03-24 17:19:27 +0100256AM_CONDITIONAL(DEVICE_UHD, [test "x$with_uhd" = "xyes"])
Pau Espin Pedrola4316ee2018-04-24 16:29:05 +0200257AM_CONDITIONAL(DEVICE_USRP1, [test "x$with_usrp1" = "xyes"])
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200258AM_CONDITIONAL(DEVICE_LMS, [test "x$with_lms" = "xyes"])
Eric Wild1e17c4f2020-03-24 17:19:27 +0100259AM_CONDITIONAL(DEVICE_IPC, [test "x$with_ipc" = "xyes"])
Eric7d897cb2022-11-28 19:20:32 +0100260AM_CONDITIONAL(DEVICE_BLADE, [test "x$with_bladerf" = "xyes"])
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400261AM_CONDITIONAL(ARCH_ARM, [test "x$with_neon" = "xyes" || test "x$with_neon_vfpv4" = "xyes"])
262AM_CONDITIONAL(ARCH_ARM_A15, [test "x$with_neon_vfpv4" = "xyes"])
Alexander Chemeris040b3052013-06-16 14:29:54 +0400263
Alexander Chemeris040b3052013-06-16 14:29:54 +0400264PKG_CHECK_MODULES(LIBUSB, libusb-1.0)
Alexander Huemer6fafd332018-01-12 15:04:02 +0100265PKG_CHECK_MODULES(FFTWF, fftw3f)
Alexander Chemeris040b3052013-06-16 14:29:54 +0400266
Oliver Smithbe8a83f2018-11-14 10:47:01 +0100267# Generate manuals
268AC_ARG_ENABLE(manuals,
269 [AS_HELP_STRING(
270 [--enable-manuals],
271 [Generate manual PDFs [default=no]],
272 )],
273 [osmo_ac_build_manuals=$enableval], [osmo_ac_build_manuals="no"])
274AM_CONDITIONAL([BUILD_MANUALS], [test x"$osmo_ac_build_manuals" = x"yes"])
275AC_ARG_VAR(OSMO_GSM_MANUALS_DIR, [path to common osmo-gsm-manuals files, overriding pkg-config and "../osmo-gsm-manuals"
276 fallback])
277if test x"$osmo_ac_build_manuals" = x"yes"
278then
279 # Find OSMO_GSM_MANUALS_DIR (env, pkg-conf, fallback)
280 if test -n "$OSMO_GSM_MANUALS_DIR"; then
281 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from env)"
282 else
283 OSMO_GSM_MANUALS_DIR="$($PKG_CONFIG osmo-gsm-manuals --variable=osmogsmmanualsdir 2>/dev/null)"
284 if test -n "$OSMO_GSM_MANUALS_DIR"; then
285 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from pkg-conf)"
286 else
287 OSMO_GSM_MANUALS_DIR="../osmo-gsm-manuals"
288 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (fallback)"
289 fi
290 fi
291 if ! test -d "$OSMO_GSM_MANUALS_DIR"; then
292 AC_MSG_ERROR("OSMO_GSM_MANUALS_DIR does not exist! Install osmo-gsm-manuals or set OSMO_GSM_MANUALS_DIR.")
293 fi
294
295 # Find and run check-depends
296 CHECK_DEPENDS="$OSMO_GSM_MANUALS_DIR/check-depends.sh"
297 if ! test -x "$CHECK_DEPENDS"; then
298 CHECK_DEPENDS="osmo-gsm-manuals-check-depends"
299 fi
300 if ! $CHECK_DEPENDS; then
301 AC_MSG_ERROR("missing dependencies for --enable-manuals")
302 fi
303
304 # Put in Makefile with absolute path
305 OSMO_GSM_MANUALS_DIR="$(realpath "$OSMO_GSM_MANUALS_DIR")"
306 AC_SUBST([OSMO_GSM_MANUALS_DIR])
307fi
308
Pau Espin Pedrol5ac2cb32018-09-10 13:39:02 +0200309 # https://www.freedesktop.org/software/systemd/man/daemon.html
310 AC_ARG_WITH([systemdsystemunitdir],
311 [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],,
312 [with_systemdsystemunitdir=auto])
313 AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
314 def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
315
316 AS_IF([test "x$def_systemdsystemunitdir" = "x"],
317 [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
318 [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
319 with_systemdsystemunitdir=no],
320 [with_systemdsystemunitdir="$def_systemdsystemunitdir"])])
321 AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
322 [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
323 AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$with_systemdsystemunitdir" != "xno"])
324
Pau Espin Pedrol53bdb7f2018-04-16 14:27:38 +0200325AC_MSG_RESULT([CPPFLAGS="$CPPFLAGS"])
326AC_MSG_RESULT([CFLAGS="$CFLAGS"])
327AC_MSG_RESULT([CXXFLAGS="$CXXFLAGS"])
328AC_MSG_RESULT([LDFLAGS="$LDFLAGS"])
329
Alexander Chemeris040b3052013-06-16 14:29:54 +0400330dnl Output files
331AC_CONFIG_FILES([\
332 Makefile \
333 CommonLibs/Makefile \
334 GSM/Makefile \
335 Transceiver52M/Makefile \
Pau Espin Pedrol43fedb62018-04-24 15:22:57 +0200336 Transceiver52M/arch/Makefile \
337 Transceiver52M/arch/common/Makefile \
338 Transceiver52M/arch/arm/Makefile \
339 Transceiver52M/arch/x86/Makefile \
Pau Espin Pedrol2128a302018-04-24 16:16:06 +0200340 Transceiver52M/device/Makefile \
Pau Espin Pedrolb5def412019-05-03 21:08:40 +0200341 Transceiver52M/device/common/Makefile \
Pau Espin Pedrol2128a302018-04-24 16:16:06 +0200342 Transceiver52M/device/uhd/Makefile \
343 Transceiver52M/device/usrp1/Makefile \
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200344 Transceiver52M/device/lms/Makefile \
Eric Wild1e17c4f2020-03-24 17:19:27 +0100345 Transceiver52M/device/ipc/Makefile \
Eric7d897cb2022-11-28 19:20:32 +0100346 Transceiver52M/device/bladerf/Makefile \
Pau Espin Pedrol2ac788b2018-01-09 17:44:49 +0100347 tests/Makefile \
348 tests/CommonLibs/Makefile \
Pau Espin Pedrolc2ba4272018-01-10 13:06:22 +0100349 tests/Transceiver52M/Makefile \
Harald Welte6879bb02020-05-02 22:27:14 +0200350 utils/Makefile \
Pau Espin Pedrolc7756e72018-06-19 11:14:45 +0200351 doc/Makefile \
352 doc/examples/Makefile \
Pau Espin Pedrol5ac2cb32018-09-10 13:39:02 +0200353 contrib/Makefile \
354 contrib/systemd/Makefile \
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400355])
Alexander Chemeris040b3052013-06-16 14:29:54 +0400356
Oliver Smithbe8a83f2018-11-14 10:47:01 +0100357AC_OUTPUT(
Oliver Smith7bbe19e2020-05-14 11:54:54 +0200358 doc/manuals/Makefile
359 contrib/osmo-trx.spec)