blob: 422ad656f394ffd97862ffd224858cc8882e9b02 [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
Alexander Chemeris040b3052013-06-16 14:29:54 +0400141AC_ARG_WITH(singledb, [
142 AS_HELP_STRING([--with-singledb],
143 [enable single daughterboard use on USRP1])
144])
145
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400146AC_ARG_WITH(neon, [
147 AS_HELP_STRING([--with-neon],
148 [enable ARM NEON support])
149])
150
151AC_ARG_WITH(neon-vfpv4, [
152 AS_HELP_STRING([--with-neon-vfpv4],
153 [enable ARM NEON FMA support])
154])
155
Tom Tsou66133312015-05-18 16:26:33 -0700156AC_ARG_WITH(sse, [
157 AS_HELP_STRING([--with-sse],
158 [enable x86 SSE support (default)])
159])
160
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400161AS_IF([test "x$with_neon" = "xyes"], [
162 AC_DEFINE(HAVE_NEON, 1, Support ARM NEON)
163])
164
165AS_IF([test "x$with_neon_vfpv4" = "xyes"], [
166 AC_DEFINE(HAVE_NEON, 1, Support ARM NEON)
167 AC_DEFINE(HAVE_NEON_FMA, 1, Support ARM NEON with FMA)
168])
169
Alexander Chemeris040b3052013-06-16 14:29:54 +0400170AS_IF([test "x$with_usrp1" = "xyes"], [
Pau Espin Pedrolaffd3512018-12-03 19:15:01 +0100171 AC_CHECK_HEADER([boost/config.hpp],[],
172 [AC_MSG_ERROR([boost/config.hpp not found, install e.g. libboost-dev])])
Thomas Tsouc0641242013-10-11 14:55:31 -0400173 PKG_CHECK_MODULES(USRP, usrp >= 3.3)
Alexander Chemeris040b3052013-06-16 14:29:54 +0400174])
175
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200176AS_IF([test "x$with_lms" = "xyes"], [
177 PKG_CHECK_MODULES(LMS, LimeSuite)
178])
179
Eric Wild1e17c4f2020-03-24 17:19:27 +0100180AS_IF([test "x$with_uhd" = "xyes"],[
Tom Tsou72bf7622017-03-07 14:16:46 -0800181 PKG_CHECK_MODULES(UHD, uhd >= 003.011,
182 [AC_DEFINE(USE_UHD_3_11, 1, UHD version 3.11.0 or higher)],
183 [PKG_CHECK_MODULES(UHD, uhd >= 003.009,
184 [AC_DEFINE(USE_UHD_3_9, 1, UHD version 3.9.0 or higher)],
185 [PKG_CHECK_MODULES(UHD, uhd >= 003.005)]
186 )]
Tom Tsou80cb0802017-01-19 13:44:02 -0800187 )
Alexander Chemeris040b3052013-06-16 14:29:54 +0400188])
189
Alexander Chemeris040b3052013-06-16 14:29:54 +0400190AS_IF([test "x$with_singledb" = "xyes"], [
191 AC_DEFINE(SINGLEDB, 1, Define to 1 for single daughterboard)
192])
193
Thomas Tsoufffd9872013-11-04 10:20:21 -0800194# Find and define supported SIMD extensions
Tom Tsou66133312015-05-18 16:26:33 -0700195AS_IF([test "x$with_sse" != "xno"], [
Philipp Maiere8ae9fc2017-03-20 12:08:42 +0100196 AX_SSE
197], [
198 AM_CONDITIONAL(HAVE_SSE3, false)
199 AM_CONDITIONAL(HAVE_SSE4_1, false)
Tom Tsou66133312015-05-18 16:26:33 -0700200])
Thomas Tsoufffd9872013-11-04 10:20:21 -0800201
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300202dnl Check if the compiler supports specified GCC's built-in function
203AC_DEFUN([CHECK_BUILTIN_SUPPORT], [
204 AC_CACHE_CHECK(
205 [whether ${CC} has $1 built-in],
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200206 [osmo_cv_cc_has_$1], [
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300207 AC_LINK_IFELSE([
208 AC_LANG_PROGRAM([], [
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200209 $2
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300210 ])
211 ],
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200212 [AS_VAR_SET([osmo_cv_cc_has_$1], [yes])],
213 [AS_VAR_SET([osmo_cv_cc_has_$1], [no])])
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300214 ]
215 )
216
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200217 AS_IF([test yes = AS_VAR_GET([osmo_cv_cc_has_$1])], [
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300218 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1), 1,
219 [Define to 1 if compiler has the '$1' built-in function])
220 ], [
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200221 AC_MSG_WARN($3)
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300222 ])
223])
224
225dnl Check if the compiler supports runtime SIMD detection
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200226CHECK_BUILTIN_SUPPORT([__builtin_cpu_supports], [__builtin_cpu_supports("sse");],
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300227 [Runtime SIMD detection will be disabled])
228
Pau Espin Pedrole503c982019-09-13 18:56:08 +0200229dnl Check for __sync_fetch_and_add().
230CHECK_BUILTIN_SUPPORT([__sync_fetch_and_and], [int x;__sync_fetch_and_and(&x,1);],
231 [Atomic operation not available, will use mutex])
232dnl Check for __sync_or_and_fetch().
233CHECK_BUILTIN_SUPPORT([__sync_or_and_fetch], [int x;__sync_or_and_fetch(&x,1);],
234 [Atomic operation not available, will use mutex])
235AS_IF([test "x$osmo_cv_cc_has___sync_fetch_and_and" = "xyes" && test "x$osmo_cv_cc_has___sync_or_and_fetch" = "xyes"], [
236 AC_DEFINE(HAVE_ATOMIC_OPS, 1, [Support all required atomic operations], [AC_MSG_WARN("At least one aotmic operation missing, will use mutex")])
237])
238
Eric Wild1e17c4f2020-03-24 17:19:27 +0100239AM_CONDITIONAL(DEVICE_UHD, [test "x$with_uhd" = "xyes"])
Pau Espin Pedrola4316ee2018-04-24 16:29:05 +0200240AM_CONDITIONAL(DEVICE_USRP1, [test "x$with_usrp1" = "xyes"])
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200241AM_CONDITIONAL(DEVICE_LMS, [test "x$with_lms" = "xyes"])
Eric Wild1e17c4f2020-03-24 17:19:27 +0100242AM_CONDITIONAL(DEVICE_IPC, [test "x$with_ipc" = "xyes"])
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400243AM_CONDITIONAL(ARCH_ARM, [test "x$with_neon" = "xyes" || test "x$with_neon_vfpv4" = "xyes"])
244AM_CONDITIONAL(ARCH_ARM_A15, [test "x$with_neon_vfpv4" = "xyes"])
Alexander Chemeris040b3052013-06-16 14:29:54 +0400245
Alexander Chemeris040b3052013-06-16 14:29:54 +0400246PKG_CHECK_MODULES(LIBUSB, libusb-1.0)
Alexander Huemer6fafd332018-01-12 15:04:02 +0100247PKG_CHECK_MODULES(FFTWF, fftw3f)
Alexander Chemeris040b3052013-06-16 14:29:54 +0400248
Oliver Smithbe8a83f2018-11-14 10:47:01 +0100249# Generate manuals
250AC_ARG_ENABLE(manuals,
251 [AS_HELP_STRING(
252 [--enable-manuals],
253 [Generate manual PDFs [default=no]],
254 )],
255 [osmo_ac_build_manuals=$enableval], [osmo_ac_build_manuals="no"])
256AM_CONDITIONAL([BUILD_MANUALS], [test x"$osmo_ac_build_manuals" = x"yes"])
257AC_ARG_VAR(OSMO_GSM_MANUALS_DIR, [path to common osmo-gsm-manuals files, overriding pkg-config and "../osmo-gsm-manuals"
258 fallback])
259if test x"$osmo_ac_build_manuals" = x"yes"
260then
261 # Find OSMO_GSM_MANUALS_DIR (env, pkg-conf, fallback)
262 if test -n "$OSMO_GSM_MANUALS_DIR"; then
263 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from env)"
264 else
265 OSMO_GSM_MANUALS_DIR="$($PKG_CONFIG osmo-gsm-manuals --variable=osmogsmmanualsdir 2>/dev/null)"
266 if test -n "$OSMO_GSM_MANUALS_DIR"; then
267 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from pkg-conf)"
268 else
269 OSMO_GSM_MANUALS_DIR="../osmo-gsm-manuals"
270 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (fallback)"
271 fi
272 fi
273 if ! test -d "$OSMO_GSM_MANUALS_DIR"; then
274 AC_MSG_ERROR("OSMO_GSM_MANUALS_DIR does not exist! Install osmo-gsm-manuals or set OSMO_GSM_MANUALS_DIR.")
275 fi
276
277 # Find and run check-depends
278 CHECK_DEPENDS="$OSMO_GSM_MANUALS_DIR/check-depends.sh"
279 if ! test -x "$CHECK_DEPENDS"; then
280 CHECK_DEPENDS="osmo-gsm-manuals-check-depends"
281 fi
282 if ! $CHECK_DEPENDS; then
283 AC_MSG_ERROR("missing dependencies for --enable-manuals")
284 fi
285
286 # Put in Makefile with absolute path
287 OSMO_GSM_MANUALS_DIR="$(realpath "$OSMO_GSM_MANUALS_DIR")"
288 AC_SUBST([OSMO_GSM_MANUALS_DIR])
289fi
290
Pau Espin Pedrol5ac2cb32018-09-10 13:39:02 +0200291 # https://www.freedesktop.org/software/systemd/man/daemon.html
292 AC_ARG_WITH([systemdsystemunitdir],
293 [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],,
294 [with_systemdsystemunitdir=auto])
295 AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
296 def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
297
298 AS_IF([test "x$def_systemdsystemunitdir" = "x"],
299 [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
300 [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
301 with_systemdsystemunitdir=no],
302 [with_systemdsystemunitdir="$def_systemdsystemunitdir"])])
303 AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
304 [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
305 AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$with_systemdsystemunitdir" != "xno"])
306
Pau Espin Pedrol53bdb7f2018-04-16 14:27:38 +0200307AC_MSG_RESULT([CPPFLAGS="$CPPFLAGS"])
308AC_MSG_RESULT([CFLAGS="$CFLAGS"])
309AC_MSG_RESULT([CXXFLAGS="$CXXFLAGS"])
310AC_MSG_RESULT([LDFLAGS="$LDFLAGS"])
311
Alexander Chemeris040b3052013-06-16 14:29:54 +0400312dnl Output files
313AC_CONFIG_FILES([\
314 Makefile \
315 CommonLibs/Makefile \
316 GSM/Makefile \
317 Transceiver52M/Makefile \
Pau Espin Pedrol43fedb62018-04-24 15:22:57 +0200318 Transceiver52M/arch/Makefile \
319 Transceiver52M/arch/common/Makefile \
320 Transceiver52M/arch/arm/Makefile \
321 Transceiver52M/arch/x86/Makefile \
Pau Espin Pedrol2128a302018-04-24 16:16:06 +0200322 Transceiver52M/device/Makefile \
Pau Espin Pedrolb5def412019-05-03 21:08:40 +0200323 Transceiver52M/device/common/Makefile \
Pau Espin Pedrol2128a302018-04-24 16:16:06 +0200324 Transceiver52M/device/uhd/Makefile \
325 Transceiver52M/device/usrp1/Makefile \
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200326 Transceiver52M/device/lms/Makefile \
Eric Wild1e17c4f2020-03-24 17:19:27 +0100327 Transceiver52M/device/ipc/Makefile \
Pau Espin Pedrol2ac788b2018-01-09 17:44:49 +0100328 tests/Makefile \
329 tests/CommonLibs/Makefile \
Pau Espin Pedrolc2ba4272018-01-10 13:06:22 +0100330 tests/Transceiver52M/Makefile \
Harald Welte6879bb02020-05-02 22:27:14 +0200331 utils/Makefile \
Pau Espin Pedrolc7756e72018-06-19 11:14:45 +0200332 doc/Makefile \
333 doc/examples/Makefile \
Pau Espin Pedrol5ac2cb32018-09-10 13:39:02 +0200334 contrib/Makefile \
335 contrib/systemd/Makefile \
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400336])
Alexander Chemeris040b3052013-06-16 14:29:54 +0400337
Oliver Smithbe8a83f2018-11-14 10:47:01 +0100338AC_OUTPUT(
Oliver Smith7bbe19e2020-05-14 11:54:54 +0200339 doc/manuals/Makefile
340 contrib/osmo-trx.spec)