blob: 37b70fa6b4f1678da807bdf1b93473f89c6bbef1 [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
Tom Tsou2cc2ddd2015-04-06 18:02:56 -070035AM_INIT_AUTOMAKE([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
Pau Espin Pedrolc92dad32018-02-20 13:22:58 +010054dnl check for pkg-config (explained in detail in libosmocore/configure.ac)
55AC_PATH_PROG(PKG_CONFIG_INSTALLED, pkg-config, no)
56if test "x$PKG_CONFIG_INSTALLED" = "xno"; then
57 AC_MSG_WARN([You need to install pkg-config])
58fi
59PKG_PROG_PKG_CONFIG([0.20])
60
Alexander Chemeris040b3052013-06-16 14:29:54 +040061AC_LIBTOOL_WIN32_DLL
62AC_ENABLE_SHARED dnl do build shared libraries
63AC_DISABLE_STATIC dnl don't build static libraries
64AC_PROG_LIBTOOL
65
66dnl Checks for header files.
67AC_HEADER_STDC
68dnl This is required for GnuRadio includes to understand endianess correctly:
69AC_CHECK_HEADERS([byteswap.h])
70
71dnl Checks for typedefs, structures, and compiler characteristics.
72AC_C_CONST
73AC_C_INLINE
74AC_TYPE_SIZE_T
75AC_HEADER_TIME
76AC_C_BIGENDIAN
77
Pau Espin Pedrold0ac9262018-05-03 16:23:30 +020078PKG_CHECK_MODULES(LIBOSMOCORE, libosmocore >= 0.11.0)
79PKG_CHECK_MODULES(LIBOSMOVTY, libosmovty >= 0.11.0)
80PKG_CHECK_MODULES(LIBOSMOCTRL, libosmoctrl >= 0.11.0)
Pau Espin Pedrol8b843e52018-02-20 14:44:39 +010081
Pau Espin Pedrol53bdb7f2018-04-16 14:27:38 +020082AC_ARG_ENABLE(sanitize,
83 [AS_HELP_STRING(
84 [--enable-sanitize],
85 [Compile with address sanitizer enabled],
86 )],
87 [sanitize=$enableval], [sanitize="no"])
88if test x"$sanitize" = x"yes"
89then
90 CPPFLAGS="$CPPFLAGS -fsanitize=address -fsanitize=undefined"
91 LDFLAGS="$LDFLAGS -fsanitize=address -fsanitize=undefined"
92fi
93
Pau Espin Pedrol288d8af2018-08-30 17:29:41 +020094AC_ARG_ENABLE(werror,
95 [AS_HELP_STRING(
96 [--enable-werror],
97 [Turn all compiler warnings into errors, with exceptions:
98 a) deprecation (allow upstream to mark deprecation without breaking builds);
99 b) "#warning" pragmas (allow to remind ourselves of errors without breaking builds)
100 ]
101 )],
102 [werror=$enableval], [werror="no"])
103if test x"$werror" = x"yes"
104then
105 WERROR_FLAGS="-Werror"
106 WERROR_FLAGS+=" -Wno-error=deprecated -Wno-error=deprecated-declarations"
107 WERROR_FLAGS+=" -Wno-error=cpp" # "#warning"
108 CFLAGS="$CFLAGS $WERROR_FLAGS"
109 CPPFLAGS="$CPPFLAGS $WERROR_FLAGS"
110fi
111
112
Pau Espin Pedrolf3d7f442018-04-24 18:49:03 +0200113AC_ARG_WITH(uhd, [
114 AS_HELP_STRING([--with-uhd],
115 [enable UHD based transceiver])
116])
117
Alexander Chemeris040b3052013-06-16 14:29:54 +0400118AC_ARG_WITH(usrp1, [
119 AS_HELP_STRING([--with-usrp1],
120 [enable USRP1 gnuradio based transceiver])
121])
122
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200123AC_ARG_WITH(lms, [
124 AS_HELP_STRING([--with-lms],
Pau Espin Pedrol70d03442018-08-17 17:17:05 +0200125 [enable LimeSuite based transceiver])
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200126])
127
Alexander Chemeris040b3052013-06-16 14:29:54 +0400128AC_ARG_WITH(singledb, [
129 AS_HELP_STRING([--with-singledb],
130 [enable single daughterboard use on USRP1])
131])
132
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400133AC_ARG_WITH(neon, [
134 AS_HELP_STRING([--with-neon],
135 [enable ARM NEON support])
136])
137
138AC_ARG_WITH(neon-vfpv4, [
139 AS_HELP_STRING([--with-neon-vfpv4],
140 [enable ARM NEON FMA support])
141])
142
Tom Tsou66133312015-05-18 16:26:33 -0700143AC_ARG_WITH(sse, [
144 AS_HELP_STRING([--with-sse],
145 [enable x86 SSE support (default)])
146])
147
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400148AS_IF([test "x$with_neon" = "xyes"], [
149 AC_DEFINE(HAVE_NEON, 1, Support ARM NEON)
150])
151
152AS_IF([test "x$with_neon_vfpv4" = "xyes"], [
153 AC_DEFINE(HAVE_NEON, 1, Support ARM NEON)
154 AC_DEFINE(HAVE_NEON_FMA, 1, Support ARM NEON with FMA)
155])
156
Alexander Chemeris040b3052013-06-16 14:29:54 +0400157AS_IF([test "x$with_usrp1" = "xyes"], [
Thomas Tsouc0641242013-10-11 14:55:31 -0400158 PKG_CHECK_MODULES(USRP, usrp >= 3.3)
Alexander Chemeris040b3052013-06-16 14:29:54 +0400159])
160
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200161AS_IF([test "x$with_lms" = "xyes"], [
162 PKG_CHECK_MODULES(LMS, LimeSuite)
Pau Espin Pedrol03b11622018-12-14 13:30:01 +0100163
164 # LimeSuite dc124e4e2ed9b549b142410af172f0592f9f0c23 > 18.10 broke API compatibility:
165 _cflags_save=$CFLAGS
166 CFLAGS="$CFLAGS $LMS_CFLAGS"
167 AC_COMPILE_IFELSE(
168 [AC_LANG_PROGRAM(
169 [[#include <lime/LimeSuite.h>]],
170 [[LMS_VCTCXOWrite(NULL, 0, false); LMS_VCTCXORead(NULL, 0, false);]]
171 )],
172 [AC_DEFINE([HAVE_LMS_VCTCXO_EEPROM_SAVING], [1],
173 [LMS_VCTCXO* requires memory parameter])],
174 [AC_DEFINE([HAVE_LMS_VCTCXO_EEPROM_SAVING], [0],
175 [LMS_VCTCXO* has no memory parameter])])
176 CFLAGS=$_cflags_save
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200177])
178
Pau Espin Pedrolf3d7f442018-04-24 18:49:03 +0200179AS_IF([test "x$with_uhd" != "xno"],[
Tom Tsou72bf7622017-03-07 14:16:46 -0800180 PKG_CHECK_MODULES(UHD, uhd >= 003.011,
181 [AC_DEFINE(USE_UHD_3_11, 1, UHD version 3.11.0 or higher)],
182 [PKG_CHECK_MODULES(UHD, uhd >= 003.009,
183 [AC_DEFINE(USE_UHD_3_9, 1, UHD version 3.9.0 or higher)],
184 [PKG_CHECK_MODULES(UHD, uhd >= 003.005)]
185 )]
Tom Tsou80cb0802017-01-19 13:44:02 -0800186 )
Alexander Chemeris040b3052013-06-16 14:29:54 +0400187])
188
Alexander Chemeris040b3052013-06-16 14:29:54 +0400189AS_IF([test "x$with_singledb" = "xyes"], [
190 AC_DEFINE(SINGLEDB, 1, Define to 1 for single daughterboard)
191])
192
Thomas Tsoufffd9872013-11-04 10:20:21 -0800193# Find and define supported SIMD extensions
Tom Tsou66133312015-05-18 16:26:33 -0700194AS_IF([test "x$with_sse" != "xno"], [
Philipp Maiere8ae9fc2017-03-20 12:08:42 +0100195 AX_SSE
196], [
197 AM_CONDITIONAL(HAVE_SSE3, false)
198 AM_CONDITIONAL(HAVE_SSE4_1, false)
Tom Tsou66133312015-05-18 16:26:33 -0700199])
Thomas Tsoufffd9872013-11-04 10:20:21 -0800200
Vadim Yanitskiyee573572017-05-20 01:34:34 +0300201dnl Check if the compiler supports specified GCC's built-in function
202AC_DEFUN([CHECK_BUILTIN_SUPPORT], [
203 AC_CACHE_CHECK(
204 [whether ${CC} has $1 built-in],
205 [osmo_cv_cc_has_builtin], [
206 AC_LINK_IFELSE([
207 AC_LANG_PROGRAM([], [
208 __builtin_cpu_supports("sse");
209 ])
210 ],
211 [AS_VAR_SET([osmo_cv_cc_has_builtin], [yes])],
212 [AS_VAR_SET([osmo_cv_cc_has_builtin], [no])])
213 ]
214 )
215
216 AS_IF([test yes = AS_VAR_GET([osmo_cv_cc_has_builtin])], [
217 AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$1), 1,
218 [Define to 1 if compiler has the '$1' built-in function])
219 ], [
220 AC_MSG_WARN($2)
221 ])
222])
223
224dnl Check if the compiler supports runtime SIMD detection
225CHECK_BUILTIN_SUPPORT([__builtin_cpu_supports],
226 [Runtime SIMD detection will be disabled])
227
Pau Espin Pedrolf3d7f442018-04-24 18:49:03 +0200228AM_CONDITIONAL(DEVICE_UHD, [test "x$with_uhd" != "xno"])
Pau Espin Pedrola4316ee2018-04-24 16:29:05 +0200229AM_CONDITIONAL(DEVICE_USRP1, [test "x$with_usrp1" = "xyes"])
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200230AM_CONDITIONAL(DEVICE_LMS, [test "x$with_lms" = "xyes"])
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400231AM_CONDITIONAL(ARCH_ARM, [test "x$with_neon" = "xyes" || test "x$with_neon_vfpv4" = "xyes"])
232AM_CONDITIONAL(ARCH_ARM_A15, [test "x$with_neon_vfpv4" = "xyes"])
Alexander Chemeris040b3052013-06-16 14:29:54 +0400233
Alexander Chemeris040b3052013-06-16 14:29:54 +0400234PKG_CHECK_MODULES(LIBUSB, libusb-1.0)
Alexander Huemer6fafd332018-01-12 15:04:02 +0100235PKG_CHECK_MODULES(FFTWF, fftw3f)
Alexander Chemeris040b3052013-06-16 14:29:54 +0400236
Neels Hofmeyr24575a62016-07-05 13:00:18 +0200237AC_CHECK_HEADER([boost/config.hpp],[],
238 [AC_MSG_ERROR([boost/config.hpp not found, install e.g. libboost-dev])])
239
Oliver Smithbe8a83f2018-11-14 10:47:01 +0100240# Generate manuals
241AC_ARG_ENABLE(manuals,
242 [AS_HELP_STRING(
243 [--enable-manuals],
244 [Generate manual PDFs [default=no]],
245 )],
246 [osmo_ac_build_manuals=$enableval], [osmo_ac_build_manuals="no"])
247AM_CONDITIONAL([BUILD_MANUALS], [test x"$osmo_ac_build_manuals" = x"yes"])
248AC_ARG_VAR(OSMO_GSM_MANUALS_DIR, [path to common osmo-gsm-manuals files, overriding pkg-config and "../osmo-gsm-manuals"
249 fallback])
250if test x"$osmo_ac_build_manuals" = x"yes"
251then
252 # Find OSMO_GSM_MANUALS_DIR (env, pkg-conf, fallback)
253 if test -n "$OSMO_GSM_MANUALS_DIR"; then
254 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from env)"
255 else
256 OSMO_GSM_MANUALS_DIR="$($PKG_CONFIG osmo-gsm-manuals --variable=osmogsmmanualsdir 2>/dev/null)"
257 if test -n "$OSMO_GSM_MANUALS_DIR"; then
258 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (from pkg-conf)"
259 else
260 OSMO_GSM_MANUALS_DIR="../osmo-gsm-manuals"
261 echo "checking for OSMO_GSM_MANUALS_DIR... $OSMO_GSM_MANUALS_DIR (fallback)"
262 fi
263 fi
264 if ! test -d "$OSMO_GSM_MANUALS_DIR"; then
265 AC_MSG_ERROR("OSMO_GSM_MANUALS_DIR does not exist! Install osmo-gsm-manuals or set OSMO_GSM_MANUALS_DIR.")
266 fi
267
268 # Find and run check-depends
269 CHECK_DEPENDS="$OSMO_GSM_MANUALS_DIR/check-depends.sh"
270 if ! test -x "$CHECK_DEPENDS"; then
271 CHECK_DEPENDS="osmo-gsm-manuals-check-depends"
272 fi
273 if ! $CHECK_DEPENDS; then
274 AC_MSG_ERROR("missing dependencies for --enable-manuals")
275 fi
276
277 # Put in Makefile with absolute path
278 OSMO_GSM_MANUALS_DIR="$(realpath "$OSMO_GSM_MANUALS_DIR")"
279 AC_SUBST([OSMO_GSM_MANUALS_DIR])
280fi
281
Pau Espin Pedrol5ac2cb32018-09-10 13:39:02 +0200282 # https://www.freedesktop.org/software/systemd/man/daemon.html
283 AC_ARG_WITH([systemdsystemunitdir],
284 [AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files])],,
285 [with_systemdsystemunitdir=auto])
286 AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [
287 def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
288
289 AS_IF([test "x$def_systemdsystemunitdir" = "x"],
290 [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
291 [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
292 with_systemdsystemunitdir=no],
293 [with_systemdsystemunitdir="$def_systemdsystemunitdir"])])
294 AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
295 [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
296 AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$with_systemdsystemunitdir" != "xno"])
297
Pau Espin Pedrol53bdb7f2018-04-16 14:27:38 +0200298AC_MSG_RESULT([CPPFLAGS="$CPPFLAGS"])
299AC_MSG_RESULT([CFLAGS="$CFLAGS"])
300AC_MSG_RESULT([CXXFLAGS="$CXXFLAGS"])
301AC_MSG_RESULT([LDFLAGS="$LDFLAGS"])
302
Alexander Chemeris040b3052013-06-16 14:29:54 +0400303dnl Output files
304AC_CONFIG_FILES([\
305 Makefile \
306 CommonLibs/Makefile \
307 GSM/Makefile \
308 Transceiver52M/Makefile \
Pau Espin Pedrol43fedb62018-04-24 15:22:57 +0200309 Transceiver52M/arch/Makefile \
310 Transceiver52M/arch/common/Makefile \
311 Transceiver52M/arch/arm/Makefile \
312 Transceiver52M/arch/x86/Makefile \
Pau Espin Pedrol2128a302018-04-24 16:16:06 +0200313 Transceiver52M/device/Makefile \
314 Transceiver52M/device/uhd/Makefile \
315 Transceiver52M/device/usrp1/Makefile \
Pau Espin Pedrol1f50fed2018-04-25 11:12:06 +0200316 Transceiver52M/device/lms/Makefile \
Pau Espin Pedrol2ac788b2018-01-09 17:44:49 +0100317 tests/Makefile \
318 tests/CommonLibs/Makefile \
Pau Espin Pedrolc2ba4272018-01-10 13:06:22 +0100319 tests/Transceiver52M/Makefile \
Pau Espin Pedrolc7756e72018-06-19 11:14:45 +0200320 doc/Makefile \
321 doc/examples/Makefile \
Pau Espin Pedrol5ac2cb32018-09-10 13:39:02 +0200322 contrib/Makefile \
323 contrib/systemd/Makefile \
Thomas Tsou7e4e5362013-10-30 21:18:55 -0400324])
Alexander Chemeris040b3052013-06-16 14:29:54 +0400325
Oliver Smithbe8a83f2018-11-14 10:47:01 +0100326AC_OUTPUT(
327 doc/manuals/Makefile)