configure.ac: drop macro 'AC_PROG_CC_C99' from autoconf 2.70
[fw/openocd] / configure.ac
1 AC_PREREQ(2.64)
2 AC_INIT([openocd], [0.11.0-rc1+dev],
3   [OpenOCD Mailing List <openocd-devel@lists.sourceforge.net>])
4 AC_CONFIG_SRCDIR([src/openocd.c])
5 AC_CONFIG_AUX_DIR([.])
6
7 m4_include([config_subdir.m4])dnl
8
9 # check for makeinfo before calling AM_INIT_AUTOMAKE
10 AC_CHECK_PROG([MAKEINFO], [makeinfo], [makeinfo])
11 AS_IF([test "x$MAKEINFO" = "x"], [
12   MAKEINFO='echo makeinfo missing; true'
13   AC_MSG_WARN([Info documentation will not be built.])
14 ])
15 AC_SUBST([MAKEINFO])
16
17 AM_INIT_AUTOMAKE([-Wall -Wno-portability dist-bzip2 dist-zip subdir-objects])
18
19 AC_CONFIG_HEADERS([config.h])
20 AH_BOTTOM([
21 #include <helper/system.h>
22 #include <helper/types.h>
23 #include <helper/replacements.h>
24 ])
25
26 AC_LANG([C])
27 AC_PROG_CC
28 # autoconf 2.70 obsoletes AC_PROG_CC_C99 and includes it in AC_PROG_CC
29 m4_version_prereq([2.70],[],[AC_PROG_CC_C99])
30 AM_PROG_CC_C_O
31 AC_PROG_RANLIB
32 PKG_PROG_PKG_CONFIG([0.23])
33
34 dnl disable checks for C++, Fortran and GNU Java Compiler
35 m4_defun([_LT_AC_LANG_CXX_CONFIG], [:])
36 m4_defun([_LT_AC_LANG_F77_CONFIG], [:])
37 m4_defun([_LT_AC_LANG_GCJ_CONFIG], [:])
38 AC_DISABLE_SHARED
39 LT_INIT
40 AC_SUBST([LIBTOOL_DEPS])
41
42 dnl configure checks required for Jim files (these are obsolete w/ C99)
43 AC_C_CONST
44 AC_TYPE_LONG_LONG_INT
45
46 AC_SEARCH_LIBS([ioperm], [ioperm])
47 AC_SEARCH_LIBS([dlopen], [dl])
48 AC_SEARCH_LIBS([openpty], [util])
49
50 AC_CHECK_HEADERS([sys/socket.h])
51 AC_CHECK_HEADERS([elf.h])
52 AC_CHECK_HEADERS([dirent.h])
53 AC_CHECK_HEADERS([fcntl.h])
54 AC_CHECK_HEADERS([malloc.h])
55 AC_CHECK_HEADERS([netdb.h])
56 AC_CHECK_HEADERS([poll.h])
57 AC_CHECK_HEADERS([pthread.h])
58 AC_CHECK_HEADERS([strings.h])
59 AC_CHECK_HEADERS([sys/ioctl.h])
60 AC_CHECK_HEADERS([sys/param.h])
61 AC_CHECK_HEADERS([sys/select.h])
62 AC_CHECK_HEADERS([sys/stat.h])
63 AC_CHECK_HEADERS([sys/sysctl.h])
64 AC_CHECK_HEADERS([sys/time.h])
65 AC_CHECK_HEADERS([sys/types.h])
66 AC_CHECK_HEADERS([unistd.h])
67 AC_CHECK_HEADERS([arpa/inet.h ifaddrs.h netinet/in.h netinet/tcp.h net/if.h], [], [], [dnl
68 #include <stdio.h>
69 #ifdef STDC_HEADERS
70 # include <stdlib.h>
71 # include <stddef.h>
72 #else
73 # ifdef HAVE_STDLIB_H
74 #  include <stdlib.h>
75 # endif
76 #endif
77 #ifdef HAVE_SYS_SOCKET_H
78 # include <sys/socket.h>
79 #endif
80 ])
81
82 AC_HEADER_ASSERT
83 AC_HEADER_STDBOOL
84 AC_HEADER_TIME
85
86 AC_C_BIGENDIAN
87
88 AC_CHECK_FUNCS([strndup])
89 AC_CHECK_FUNCS([strnlen])
90 AC_CHECK_FUNCS([gettimeofday])
91 AC_CHECK_FUNCS([usleep])
92 AC_CHECK_FUNCS([vasprintf])
93 AC_CHECK_FUNCS([realpath])
94
95 # guess-rev.sh only exists in the repository, not in the released archives
96 AC_MSG_CHECKING([whether to build a release])
97 AS_IF([test -x "$srcdir/guess-rev.sh"], [
98   build_release=no
99 ], [
100   build_release=yes
101 ])
102 AC_MSG_RESULT([$build_release])
103
104 # Adapter drivers
105 # 1st column -- configure option
106 # 2nd column -- description
107 # 3rd column -- symbol used for both config.h and automake
108 m4_define([ADAPTER_ARG], [m4_argn([1], $1)])
109 m4_define([ADAPTER_DESC], [m4_argn([2], $1)])
110 m4_define([ADAPTER_SYM], [m4_argn([3], $1)])
111 m4_define([ADAPTER_VAR], [enable_[]ADAPTER_ARG($1)])
112 m4_define([ADAPTER_OPT], [m4_translit(ADAPTER_ARG($1), [_], [-])])
113
114 m4_define([USB1_ADAPTERS],
115         [[[ftdi], [MPSSE mode of FTDI based devices], [FTDI]],
116         [[stlink], [ST-Link Programmer], [HLADAPTER_STLINK]],
117         [[ti_icdi], [TI ICDI JTAG Programmer], [HLADAPTER_ICDI]],
118         [[ulink], [Keil ULINK JTAG Programmer], [ULINK]],
119         [[usb_blaster_2], [Altera USB-Blaster II Compatible], [USB_BLASTER_2]],
120         [[ft232r], [Bitbang mode of FT232R based devices], [FT232R]],
121         [[vsllink], [Versaloon-Link JTAG Programmer], [VSLLINK]],
122         [[xds110], [TI XDS110 Debug Probe], [XDS110]],
123         [[cmsis_dap_v2], [CMSIS-DAP v2 Compliant Debugger], [CMSIS_DAP_USB]],
124         [[osbdm], [OSBDM (JTAG only) Programmer], [OSBDM]],
125         [[opendous], [eStick/opendous JTAG Programmer], [OPENDOUS]],
126         [[aice], [Andes JTAG Programmer], [AICE]]])
127
128 m4_define([USB0_ADAPTERS],
129         [[[usbprog], [USBProg JTAG Programmer], [USBPROG]],
130         [[rlink], [Raisonance RLink JTAG Programmer], [RLINK]],
131         [[armjtagew], [Olimex ARM-JTAG-EW Programmer], [ARMJTAGEW]]])
132
133 m4_define([HIDAPI_ADAPTERS],
134         [[[cmsis_dap], [CMSIS-DAP Compliant Debugger], [CMSIS_DAP_HID]],
135         [[nulink], [Nu-Link Programmer], [HLADAPTER_NULINK]]])
136
137 m4_define([HIDAPI_USB1_ADAPTERS],
138         [[[kitprog], [Cypress KitProg Programmer], [KITPROG]]])
139
140 m4_define([LIBFTDI_ADAPTERS],
141         [[[usb_blaster], [Altera USB-Blaster Compatible], [USB_BLASTER]],
142         [[presto], [ASIX Presto Adapter], [PRESTO]]])
143
144 m4_define([LIBFTDI_USB1_ADAPTERS],
145         [[[openjtag], [OpenJTAG Adapter], [OPENJTAG]]])
146
147 m4_define([LIBGPIOD_ADAPTERS],
148         [[[linuxgpiod], [Linux GPIO bitbang through libgpiod], [LINUXGPIOD]]])
149
150 m4_define([LIBJAYLINK_ADAPTERS],
151         [[[jlink], [SEGGER J-Link Programmer], [JLINK]]])
152
153 m4_define([PCIE_ADAPTERS],
154         [[[xlnx_pcie_xvc], [Xilinx XVC/PCIe], [XLNX_PCIE_XVC]]])
155
156 m4_define([OPTIONAL_LIBRARIES],
157         [[[capstone], [Use Capstone disassembly framework], []]])
158
159 AC_ARG_ENABLE([doxygen-html],
160   AS_HELP_STRING([--disable-doxygen-html],
161     [Disable building Doxygen manual as HTML.]),
162   [doxygen_as_html=$enableval], [doxygen_as_html=yes])
163 AC_SUBST([doxygen_as_html])
164 AC_MSG_CHECKING([whether to build Doxygen as HTML])
165 AC_MSG_RESULT([$doxygen_as_html])
166
167 AC_ARG_ENABLE([doxygen-pdf],
168   AS_HELP_STRING([--enable-doxygen-pdf],
169     [Enable building Doxygen manual as PDF.]),
170   [doxygen_as_pdf=$enableval], [doxygen_as_pdf=no])
171 AC_SUBST([doxygen_as_pdf])
172 AC_MSG_CHECKING([whether to build Doxygen as PDF])
173 AC_MSG_RESULT([$doxygen_as_pdf])
174
175 AC_ARG_ENABLE([gccwarnings],
176   AS_HELP_STRING([--disable-gccwarnings], [Disable compiler warnings]),
177   [gcc_warnings=$enableval], [gcc_warnings=yes])
178
179 AC_ARG_ENABLE([wextra],
180   AS_HELP_STRING([--disable-wextra], [Disable extra compiler warnings]),
181   [gcc_wextra=$enableval], [gcc_wextra=$gcc_warnings])
182
183 AC_ARG_ENABLE([werror],
184   AS_HELP_STRING([--disable-werror], [Do not treat warnings as errors]),
185   [gcc_werror=$enableval], [gcc_werror=$gcc_warnings])
186
187 # set default verbose options, overridden by following options
188 debug_usb_io=no
189 debug_usb_comms=no
190
191 AC_ARG_ENABLE([verbose],
192   AS_HELP_STRING([--enable-verbose],
193       [Enable verbose JTAG I/O messages (for debugging).]),
194   [
195   debug_usb_io=$enableval
196   debug_usb_comms=$enableval
197   ], [])
198
199 AC_ARG_ENABLE([verbose_usb_io],
200   AS_HELP_STRING([--enable-verbose-usb-io],
201       [Enable verbose USB I/O messages (for debugging)]),
202   [debug_usb_io=$enableval], [])
203
204 AC_ARG_ENABLE([verbose_usb_comms],
205   AS_HELP_STRING([--enable-verbose-usb-comms],
206       [Enable verbose USB communication messages (for debugging)]),
207   [debug_usb_comms=$enableval], [])
208
209 AC_MSG_CHECKING([whether to enable verbose USB I/O messages]);
210 AC_MSG_RESULT([$debug_usb_io])
211 AS_IF([test "x$debug_usb_io" = "xyes"], [
212   AC_DEFINE([_DEBUG_USB_IO_],[1], [Print verbose USB I/O messages])
213 ])
214
215 AC_MSG_CHECKING([whether to enable verbose USB communication messages]);
216 AC_MSG_RESULT([$debug_usb_comms])
217 AS_IF([test "x$debug_usb_comms" = "xyes"], [
218   AC_DEFINE([_DEBUG_USB_COMMS_],[1], [Print verbose USB communication messages])
219 ])
220
221 debug_malloc=no
222 AC_ARG_ENABLE([malloc_logging],
223   AS_HELP_STRING([--enable-malloc-logging],
224       [Include free space in logging messages (requires malloc.h).]),
225   [debug_malloc=$enableval], [])
226
227 AC_MSG_CHECKING([whether to enable malloc free space logging]);
228 AC_MSG_RESULT([$debug_malloc])
229 AS_IF([test "x$debug_malloc" = "xyes"], [
230   AC_DEFINE([_DEBUG_FREE_SPACE_],[1], [Include malloc free space in logging])
231 ])
232
233 AC_ARG_ENABLE([dummy],
234   AS_HELP_STRING([--enable-dummy], [Enable building the dummy port driver]),
235   [build_dummy=$enableval], [build_dummy=no])
236
237 AC_ARG_ENABLE([rshim],
238   AS_HELP_STRING([--enable-rshim], [Enable building the rshim driver]),
239   [build_rshim=$enableval], [build_rshim=no])
240
241 m4_define([AC_ARG_ADAPTERS], [
242   m4_foreach([adapter], [$1],
243         [AC_ARG_ENABLE(ADAPTER_OPT([adapter]),
244                 AS_HELP_STRING([--enable-ADAPTER_OPT([adapter])],
245                         [Enable building support for the ]ADAPTER_DESC([adapter])[ (default is $2)]),
246                 [], [ADAPTER_VAR([adapter])=$2])
247   ])
248 ])
249
250 AC_ARG_ADAPTERS([
251   USB1_ADAPTERS,
252   USB0_ADAPTERS,
253   HIDAPI_ADAPTERS,
254   HIDAPI_USB1_ADAPTERS,
255   LIBFTDI_ADAPTERS,
256   LIBFTDI_USB1_ADAPTERS
257   LIBGPIOD_ADAPTERS,
258   LIBJAYLINK_ADAPTERS
259   ],[auto])
260
261 AC_ARG_ENABLE([parport],
262   AS_HELP_STRING([--enable-parport], [Enable building the pc parallel port driver]),
263   [build_parport=$enableval], [build_parport=no])
264
265 AC_ARG_ENABLE([parport_ppdev],
266   AS_HELP_STRING([--disable-parport-ppdev],
267       [Disable use of ppdev (/dev/parportN) for parport (for x86 only)]),
268     [parport_use_ppdev=$enableval], [parport_use_ppdev=yes])
269
270 AC_ARG_ENABLE([parport_giveio],
271     AS_HELP_STRING([--enable-parport-giveio],
272       [Enable use of giveio for parport (for CygWin only)]),
273     [parport_use_giveio=$enableval], [parport_use_giveio=])
274
275 AC_ARG_ENABLE([jtag_vpi],
276   AS_HELP_STRING([--enable-jtag_vpi], [Enable building support for JTAG VPI]),
277   [build_jtag_vpi=$enableval], [build_jtag_vpi=no])
278
279 AC_ARG_ENABLE([jtag_dpi],
280   AS_HELP_STRING([--enable-jtag_dpi], [Enable building support for JTAG DPI]),
281   [build_jtag_dpi=$enableval], [build_jtag_dpi=no])
282
283 AC_ARG_ENABLE([amtjtagaccel],
284   AS_HELP_STRING([--enable-amtjtagaccel], [Enable building the Amontec JTAG-Accelerator driver]),
285   [build_amtjtagaccel=$enableval], [build_amtjtagaccel=no])
286
287 AC_ARG_ENABLE([zy1000_master],
288   AS_HELP_STRING([--enable-zy1000-master], [Use ZY1000 JTAG master registers]),
289   [build_zy1000_master=$enableval], [build_zy1000_master=no])
290
291 AC_ARG_ENABLE([zy1000],
292   AS_HELP_STRING([--enable-zy1000], [Enable ZY1000 interface]),
293   [build_zy1000=$enableval], [build_zy1000=no])
294
295 AC_ARG_ENABLE([ioutil],
296   AS_HELP_STRING([--enable-ioutil], [Enable ioutil functions - useful for standalone OpenOCD implementations]),
297   [build_ioutil=$enableval], [build_ioutil=no])
298
299 AS_CASE(["${host_cpu}"],
300   [arm*|aarch64], [
301     AC_ARG_ENABLE([bcm2835gpio],
302       AS_HELP_STRING([--enable-bcm2835gpio], [Enable building support for bitbanging on BCM2835 (as found in Raspberry Pi)]),
303       [build_bcm2835gpio=$enableval], [build_bcm2835gpio=no])
304     AC_ARG_ENABLE([imx_gpio],
305       AS_HELP_STRING([--enable-imx_gpio], [Enable building support for bitbanging on NXP IMX processors]),
306       [build_imx_gpio=$enableval], [build_imx_gpio=no])
307   ],
308   [
309     build_bcm2835gpio=no
310     build_imx_gpio=no
311 ])
312
313 AS_CASE(["${host_cpu}"],
314   [arm*], [
315     AC_ARG_ENABLE([ep93xx],
316       AS_HELP_STRING([--enable-ep93xx], [Enable building support for EP93xx based SBCs]),
317       [build_ep93xx=$enableval], [build_ep93xx=no])
318
319     AC_ARG_ENABLE([at91rm9200],
320       AS_HELP_STRING([--enable-at91rm9200], [Enable building support for AT91RM9200 based SBCs]),
321       [build_at91rm9200=$enableval], [build_at91rm9200=no])
322   ],
323   [
324     build_ep93xx=no
325     build_at91rm9200=no
326 ])
327
328 AC_ARG_ENABLE([gw16012],
329   AS_HELP_STRING([--enable-gw16012], [Enable building support for the Gateworks GW16012 JTAG Programmer]),
330   [build_gw16012=$enableval], [build_gw16012=no])
331
332 AC_ARG_ENABLE([oocd_trace],
333   AS_HELP_STRING([--enable-oocd_trace],
334   [Enable building support for some prototype OpenOCD+trace ETM capture hardware]),
335   [build_oocd_trace=$enableval], [build_oocd_trace=no])
336
337 AC_ARG_ENABLE([buspirate],
338   AS_HELP_STRING([--enable-buspirate], [Enable building support for the Buspirate]),
339   [build_buspirate=$enableval], [build_buspirate=no])
340
341 AC_ARG_ENABLE([sysfsgpio],
342   AS_HELP_STRING([--enable-sysfsgpio], [Enable building support for programming driven via sysfs gpios.]),
343   [build_sysfsgpio=$enableval], [build_sysfsgpio=no])
344
345 AC_ARG_ENABLE([xlnx_pcie_xvc],
346   AS_HELP_STRING([--enable-xlnx-pcie-xvc], [Enable building support for Xilinx XVC/PCIe.]),
347   [build_xlnx_pcie_xvc=$enableval], [build_xlnx_pcie_xvc=no])
348
349 AS_CASE([$host_os],
350   [linux*], [],
351   [
352     AS_IF([test "x$build_sysfsgpio" = "xyes"], [
353       AC_MSG_ERROR([sysfsgpio is only available on linux])
354     ])
355
356     AS_IF([test "x$enable_linuxgpiod" = "xyes"], [
357       AC_MSG_ERROR([linuxgpiod is only available on linux])
358     ])
359
360     AS_IF([test "x$build_xlnx_pcie_xvc" = "xyes"], [
361       AC_MSG_ERROR([xlnx_pcie_xvc is only available on linux])
362     ])
363
364     AS_CASE([$host_os], [freebsd*], [],
365     [
366       AS_IF([test "x$build_rshim" = "xyes"], [
367         AC_MSG_ERROR([build_rshim is only available on linux or freebsd])
368       ])
369     ])
370 ])
371
372 AC_ARG_ENABLE([minidriver_dummy],
373   AS_HELP_STRING([--enable-minidriver-dummy], [Enable the dummy minidriver.]),
374   [build_minidriver_dummy=$enableval], [build_minidriver_dummy=no])
375
376 AC_ARG_ENABLE([internal-jimtcl],
377   AS_HELP_STRING([--disable-internal-jimtcl], [Disable building internal jimtcl]),
378   [use_internal_jimtcl=$enableval], [use_internal_jimtcl=yes])
379
380 AC_ARG_ENABLE([internal-libjaylink],
381   AS_HELP_STRING([--disable-internal-libjaylink],
382   [Disable building internal libjaylink]),
383   [use_internal_libjaylink=$enableval], [use_internal_libjaylink=yes])
384
385 build_minidriver=no
386 AC_MSG_CHECKING([whether to enable ZY1000 minidriver])
387 AS_IF([test "x$build_zy1000" = "xyes"], [
388   AS_IF([test "x$build_minidriver" = "xyes"], [
389     AC_MSG_ERROR([Multiple minidriver options have been enabled.])
390   ])
391   AC_DEFINE([HAVE_JTAG_MINIDRIVER_H], [1],
392       [Define to 1 if you have the <jtag_minidriver.h> header file.])
393   build_minidriver=yes
394 ])
395 AC_MSG_RESULT([$build_zy1000])
396
397 AC_ARG_ENABLE([remote-bitbang],
398   AS_HELP_STRING([--enable-remote-bitbang], [Enable building support for the Remote Bitbang jtag driver]),
399   [build_remote_bitbang=$enableval], [build_remote_bitbang=no])
400
401 AC_MSG_CHECKING([whether to enable dummy minidriver])
402 AS_IF([test "x$build_minidriver_dummy" = "xyes"], [
403   AS_IF([test "x$build_minidriver" = "xyes"], [
404     AC_MSG_ERROR([Multiple minidriver options have been enabled.])
405   ])
406   build_minidriver=yes
407   AC_DEFINE([BUILD_MINIDRIVER_DUMMY], [1], [Use the dummy minidriver.])
408   AC_DEFINE([HAVE_JTAG_MINIDRIVER_H], [1],
409       [Define to 1 if you have the <jtag_minidriver.h> header file.])
410 ])
411 AC_MSG_RESULT([$build_minidriver_dummy])
412
413 AC_MSG_CHECKING([whether standard drivers can be built])
414 AS_IF([test "x$build_minidriver" = "xyes"], [
415   AC_MSG_RESULT([no])
416   AC_MSG_WARN([Using the minidriver disables all other drivers.])
417   sleep 2
418 ], [
419   AC_MSG_RESULT([yes])
420 ])
421
422 AS_CASE(["${host_cpu}"],
423   [i?86|x86*], [],
424   [
425     AS_IF([test "x$parport_use_ppdev" = "xno"], [
426       AC_MSG_WARN([--disable-parport-ppdev is not supported by the host CPU])
427     ])
428     parport_use_ppdev=yes
429 ])
430
431 AS_CASE([$host],
432   [*-cygwin*], [
433     is_win32=yes
434     parport_use_ppdev=no
435
436     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[return __MINGW32__;]])],
437       [is_mingw=yes],[is_mingw=no])
438     AS_IF([test "x$is_mingw" = "xyes"], [
439       AS_IF([test "x$parport_use_giveio" = "xno"], [
440         AC_MSG_WARN([--disable-parport-giveio is not supported by MinGW32 hosts])
441       ])
442       parport_use_giveio=yes
443       is_cygwin=no
444     ], [
445       is_cygwin=yes
446       # sys/io.h needed under cygwin for parport access
447       AS_IF([test "x$build_parport" = "xyes"], [
448         AC_CHECK_HEADERS([sys/io.h],[],AC_MSG_ERROR([Please install the cygwin ioperm package]))
449       ])
450     ])
451   ],
452   [*-mingw* | *-msys*], [
453     is_mingw=yes
454     is_win32=yes
455     parport_use_ppdev=no
456
457     AS_IF([test "x$parport_use_giveio" = "xno"], [
458       AC_MSG_WARN([--disable-parport-giveio is not supported by MinGW32 hosts])
459     ])
460     parport_use_giveio=yes
461
462     AS_IF([test "x$build_buspirate" = "xyes"], [
463       AC_MSG_ERROR([buspirate currently not supported by MinGW32 hosts])
464     ])
465
466     AC_SUBST([HOST_CPPFLAGS], [-D__USE_MINGW_ANSI_STDIO])
467   ],
468   [*darwin*], [
469     is_darwin=yes
470
471     AS_IF([test "x$parport_use_giveio" = "xyes"], [
472       AC_MSG_WARN([--enable-parport-giveio cannot be used by Darwin hosts])
473     ])
474     parport_use_giveio=no
475   ],
476   [
477     AS_IF([test "x$parport_use_giveio" = "xyes"], [
478       AC_MSG_WARN([--enable-parport-giveio cannot be used by ]$host[ hosts])
479     ])
480     parport_use_giveio=no
481 ])
482
483 AS_IF([test "x$is_cygwin" = "xyes"], [
484     AC_DEFINE([IS_CYGWIN], [1], [1 if building for Cygwin.])
485 ], [
486     AC_DEFINE([IS_CYGWIN], [0], [0 if not building for Cygwin.])
487 ])
488
489 AS_IF([test "x$is_mingw" = "xyes"], [
490     AC_DEFINE([IS_MINGW], [1], [1 if building for Mingw.])
491 ], [
492     AC_DEFINE([IS_MINGW], [0], [0 if not building for Mingw.])
493 ])
494
495 AS_IF([test "x$is_win32" = "xyes"], [
496     AC_DEFINE([IS_WIN32], [1], [1 if building for Win32.])
497 ], [
498     AC_DEFINE([IS_WIN32], [0], [0 if not building for Win32.])
499 ])
500
501 AS_IF([test "x$is_darwin" = "xyes"], [
502     AC_DEFINE([IS_DARWIN], [1], [1 if building for Darwin.])
503 ], [
504     AC_DEFINE([IS_DARWIN], [0], [0 if not building for Darwin.])
505 ])
506
507 AS_IF([test "x$build_parport" = "xyes"], [
508   build_bitbang=yes
509   AC_DEFINE([BUILD_PARPORT], [1], [1 if you want parport.])
510 ], [
511   AC_DEFINE([BUILD_PARPORT], [0], [0 if you don't want parport.])
512 ])
513
514 AS_IF([test "x$build_rshim" = "xyes"], [
515   AC_DEFINE([BUILD_RSHIM], [1], [1 if you want to debug BlueField SoC via rshim.])
516 ], [
517   AC_DEFINE([BUILD_RSHIM], [0], [0 if you don't want to debug BlueField SoC via rshim.])
518 ])
519
520 AS_IF([test "x$build_dummy" = "xyes"], [
521   build_bitbang=yes
522   AC_DEFINE([BUILD_DUMMY], [1], [1 if you want dummy driver.])
523 ], [
524   AC_DEFINE([BUILD_DUMMY], [0], [0 if you don't want dummy driver.])
525 ])
526
527 AS_IF([test "x$build_ep93xx" = "xyes"], [
528   build_bitbang=yes
529   AC_DEFINE([BUILD_EP93XX], [1], [1 if you want ep93xx.])
530 ], [
531   AC_DEFINE([BUILD_EP93XX], [0], [0 if you don't want ep93xx.])
532 ])
533
534 AS_IF([test "x$build_zy1000" = "xyes"], [
535   AC_DEFINE([BUILD_ZY1000], [1], [1 if you want ZY1000.])
536 ], [
537   AC_DEFINE([BUILD_ZY1000], [0], [0 if you don't want ZY1000.])
538 ])
539
540 AS_IF([test "x$build_zy1000_master" = "xyes"], [
541   AC_DEFINE([BUILD_ZY1000_MASTER], [1], [1 if you want ZY1000 JTAG master registers.])
542 ], [
543   AC_DEFINE([BUILD_ZY1000_MASTER], [0], [0 if you don't want ZY1000 JTAG master registers.])
544 ])
545
546 AS_IF([test "x$build_at91rm9200" = "xyes"], [
547   build_bitbang=yes
548   AC_DEFINE([BUILD_AT91RM9200], [1], [1 if you want at91rm9200.])
549 ], [
550   AC_DEFINE([BUILD_AT91RM9200], [0], [0 if you don't want at91rm9200.])
551 ])
552
553 AS_IF([test "x$build_bcm2835gpio" = "xyes"], [
554   build_bitbang=yes
555   AC_DEFINE([BUILD_BCM2835GPIO], [1], [1 if you want bcm2835gpio.])
556 ], [
557   AC_DEFINE([BUILD_BCM2835GPIO], [0], [0 if you don't want bcm2835gpio.])
558 ])
559
560 AS_IF([test "x$build_imx_gpio" = "xyes"], [
561   build_bitbang=yes
562   AC_DEFINE([BUILD_IMX_GPIO], [1], [1 if you want imx_gpio.])
563 ], [
564   AC_DEFINE([BUILD_IMX_GPIO], [0], [0 if you don't want imx_gpio.])
565 ])
566
567 AS_IF([test "x$parport_use_ppdev" = "xyes"], [
568   AC_DEFINE([PARPORT_USE_PPDEV], [1], [1 if you want parport to use ppdev.])
569 ], [
570   AC_DEFINE([PARPORT_USE_PPDEV], [0], [0 if you don't want parport to use ppdev.])
571 ])
572
573 AS_IF([test "x$parport_use_giveio" = "xyes"], [
574   AC_DEFINE([PARPORT_USE_GIVEIO], [1], [1 if you want parport to use giveio.])
575 ], [
576   AC_DEFINE([PARPORT_USE_GIVEIO], [0], [0 if you don't want parport to use giveio.])
577 ])
578
579 AS_IF([test "x$build_jtag_vpi" = "xyes"], [
580   AC_DEFINE([BUILD_JTAG_VPI], [1], [1 if you want JTAG VPI.])
581 ], [
582   AC_DEFINE([BUILD_JTAG_VPI], [0], [0 if you don't want JTAG VPI.])
583 ])
584
585 AS_IF([test "x$build_jtag_dpi" = "xyes"], [
586   AC_DEFINE([BUILD_JTAG_DPI], [1], [1 if you want JTAG DPI.])
587 ], [
588   AC_DEFINE([BUILD_JTAG_DPI], [0], [0 if you don't want JTAG DPI.])
589 ])
590
591
592 AS_IF([test "x$build_amtjtagaccel" = "xyes"], [
593   AC_DEFINE([BUILD_AMTJTAGACCEL], [1], [1 if you want the Amontec JTAG-Accelerator driver.])
594 ], [
595   AC_DEFINE([BUILD_AMTJTAGACCEL], [0], [0 if you don't want the Amontec JTAG-Accelerator driver.])
596 ])
597
598 AS_IF([test "x$build_gw16012" = "xyes"], [
599   AC_DEFINE([BUILD_GW16012], [1], [1 if you want the Gateworks GW16012 driver.])
600 ], [
601   AC_DEFINE([BUILD_GW16012], [0], [0 if you don't want the Gateworks GW16012 driver.])
602 ])
603
604 AS_IF([test "x$build_oocd_trace" = "xyes"], [
605   AC_DEFINE([BUILD_OOCD_TRACE], [1], [1 if you want the OpenOCD+trace ETM capture driver.])
606 ], [
607   AC_DEFINE([BUILD_OOCD_TRACE], [0], [0 if you don't want the OpenOCD+trace ETM capture driver.])
608 ])
609
610 AS_IF([test "x$build_buspirate" = "xyes"], [
611   AC_DEFINE([BUILD_BUSPIRATE], [1], [1 if you want the Buspirate JTAG driver.])
612 ], [
613   AC_DEFINE([BUILD_BUSPIRATE], [0], [0 if you don't want the Buspirate JTAG driver.])
614 ])
615
616 AS_IF([test "x$use_internal_jimtcl" = "xyes"], [
617   AS_IF([test -f "$srcdir/jimtcl/configure.ac"], [
618     AX_CONFIG_SUBDIR_OPTION([jimtcl], [--disable-install-jim])
619   ], [
620     AC_MSG_ERROR([jimtcl not found, run git submodule init and git submodule update.])
621   ])
622 ])
623
624 AS_IF([test "x$build_remote_bitbang" = "xyes"], [
625   build_bitbang=yes
626   AC_DEFINE([BUILD_REMOTE_BITBANG], [1], [1 if you want the Remote Bitbang JTAG driver.])
627 ], [
628   AC_DEFINE([BUILD_REMOTE_BITBANG], [0], [0 if you don't want the Remote Bitbang JTAG driver.])
629 ])
630
631 AS_IF([test "x$build_sysfsgpio" = "xyes"], [
632   build_bitbang=yes
633   AC_DEFINE([BUILD_SYSFSGPIO], [1], [1 if you want the SysfsGPIO driver.])
634 ], [
635   AC_DEFINE([BUILD_SYSFSGPIO], [0], [0 if you don't want SysfsGPIO driver.])
636 ])
637
638 AS_IF([test "x$build_xlnx_pcie_xvc" = "xyes"], [
639   build_xlnx_pcie_xvc=yes
640   AC_DEFINE([BUILD_XLNX_PCIE_XVC], [1], [1 if you want the Xilinx XVC/PCIe driver.])
641 ], [
642   AC_DEFINE([BUILD_XLNX_PCIE_XVC], [0], [0 if you don't want Xilinx XVC/PCIe driver.])
643 ])
644
645 PKG_CHECK_MODULES([LIBUSB1], [libusb-1.0], [
646         use_libusb1=yes
647         AC_DEFINE([HAVE_LIBUSB1], [1], [Define if you have libusb-1.x])
648         PKG_CHECK_EXISTS([libusb-1.0 >= 1.0.9],
649                 [AC_DEFINE([HAVE_LIBUSB_ERROR_NAME], [1], [Define if your libusb has libusb_error_name()])],
650                 [AC_MSG_WARN([libusb-1.x older than 1.0.9 detected, consider updating])])
651         LIBUSB1_CFLAGS=`echo $LIBUSB1_CFLAGS | sed 's/-I/-isystem /'`
652         AC_MSG_NOTICE([libusb-1.0 header bug workaround: LIBUSB1_CFLAGS changed to "$LIBUSB1_CFLAGS"])
653         PKG_CHECK_EXISTS([libusb-1.0 >= 1.0.16],
654                 [AC_DEFINE([HAVE_LIBUSB_GET_PORT_NUMBERS], [1], [Define if your libusb has libusb_get_port_numbers()])])
655   ], [
656         use_libusb1=no
657         AC_MSG_WARN([libusb-1.x not found, trying legacy libusb-0.1 as a fallback; consider installing libusb-1.x instead])
658 ])
659
660 PKG_CHECK_MODULES([LIBUSB0], [libusb], [use_libusb0=yes], [use_libusb0=no])
661
662 AC_ARG_WITH([capstone],
663                 AS_HELP_STRING([--with-capstone], [Use Capstone disassembly library (default=auto)])
664         , [
665                 enable_capstone=$withval
666         ], [
667                 enable_capstone=auto
668 ])
669
670 AS_IF([test "x$enable_capstone" != xno], [
671         PKG_CHECK_MODULES([CAPSTONE], [capstone], [
672                 AC_DEFINE([HAVE_CAPSTONE], [1], [1 if you have Capstone disassembly framework.])
673         ], [
674                 AC_DEFINE([HAVE_CAPSTONE], [0], [0 if you don't have Capstone disassembly framework.])
675                 if test "x$enable_capstone" != xauto; then
676                         AC_MSG_ERROR([--with-capstone was given, but test for Capstone failed])
677                 fi
678                 enable_capstone=no
679         ])
680 ])
681
682 for hidapi_lib in hidapi hidapi-hidraw hidapi-libusb; do
683         PKG_CHECK_MODULES([HIDAPI],[$hidapi_lib],[
684                 use_hidapi=yes
685                 break
686         ],[
687                 use_hidapi=no
688         ])
689 done
690
691 PKG_CHECK_MODULES([LIBFTDI], [libftdi1], [
692         use_libftdi=yes
693         PKG_CHECK_EXISTS([libftdi1 >= 1.5],
694                 [AC_DEFINE([HAVE_LIBFTDI_TCIOFLUSH], [1], [Define if your libftdi has ftdi_tcioflush()])])
695   ], [
696         PKG_CHECK_MODULES([LIBFTDI], [libftdi], [use_libftdi=yes], [use_libftdi=no])
697 ])
698
699 PKG_CHECK_MODULES([LIBGPIOD], [libgpiod], [use_libgpiod=yes], [use_libgpiod=no])
700
701 PKG_CHECK_MODULES([LIBJAYLINK], [libjaylink >= 0.2],
702         [use_libjaylink=yes], [use_libjaylink=no])
703
704 m4_define([PROCESS_ADAPTERS], [
705   m4_foreach([adapter], [$1], [
706         AS_IF([test "x$build_zy1000" = "xyes"], [
707                 ADAPTER_VAR([adapter])=no
708         ])
709         AS_IF([test $2], [
710                 AS_IF([test "x$ADAPTER_VAR([adapter])" != "xno"], [
711                         AC_DEFINE([BUILD_]ADAPTER_SYM([adapter]), [1], [1 if you want the ]ADAPTER_DESC([adapter]).)
712                 ], [
713                         AC_DEFINE([BUILD_]ADAPTER_SYM([adapter]), [0], [0 if you do not want the ]ADAPTER_DESC([adapter]).)
714                 ])
715         ], [
716                 AS_IF([test "x$ADAPTER_VAR([adapter])" = "xyes"], [
717                         AC_MSG_ERROR([$3 is required for the ADAPTER_DESC([adapter])])
718                 ])
719                 ADAPTER_VAR([adapter])=no
720         ])
721         AM_CONDITIONAL(ADAPTER_SYM([adapter]), [test "x$ADAPTER_VAR([adapter])" != "xno"])
722   ])
723 ])
724
725 PROCESS_ADAPTERS([USB1_ADAPTERS], ["x$use_libusb1" = "xyes"], [libusb-1.x])
726 PROCESS_ADAPTERS([USB0_ADAPTERS], ["x$use_libusb0" = "xyes"], [libusb-0.1])
727 PROCESS_ADAPTERS([HIDAPI_ADAPTERS], ["x$use_hidapi" = "xyes"], [hidapi])
728 PROCESS_ADAPTERS([HIDAPI_USB1_ADAPTERS], ["x$use_hidapi" = "xyes" -a "x$use_libusb1" = "xyes"], [hidapi and libusb-1.x])
729 PROCESS_ADAPTERS([LIBFTDI_ADAPTERS], ["x$use_libftdi" = "xyes"], [libftdi])
730 PROCESS_ADAPTERS([LIBFTDI_USB1_ADAPTERS], ["x$use_libftdi" = "xyes" -a "x$use_libusb1" = "xyes"], [libftdi and libusb-1.x])
731 PROCESS_ADAPTERS([LIBGPIOD_ADAPTERS], ["x$use_libgpiod" = "xyes"], [libgpiod])
732 PROCESS_ADAPTERS([LIBJAYLINK_ADAPTERS], ["x$use_internal_libjaylink" = "xyes" -o "x$use_libjaylink" = "xyes"], [libjaylink-0.2])
733
734 AS_IF([test "x$enable_linuxgpiod" != "xno"], [
735   build_bitbang=yes
736 ])
737
738 AS_IF([test "x$enable_stlink" != "xno" -o "x$enable_ti_icdi" != "xno" -o "x$enable_nulink" != "xno"], [
739         AC_DEFINE([BUILD_HLADAPTER], [1], [1 if you want the High Level JTAG driver.])
740         AM_CONDITIONAL([HLADAPTER], [true])
741 ], [
742         AC_DEFINE([BUILD_HLADAPTER], [0], [0 if you want the High Level JTAG driver.])
743         AM_CONDITIONAL([HLADAPTER], [false])
744 ])
745 AM_CONDITIONAL([HLADAPTER_STLINK], [test "x$enable_stlink" != "xno"])
746 AM_CONDITIONAL([HLADAPTER_ICDI], [test "x$enable_ti_icdi" != "xno"])
747 AM_CONDITIONAL([HLADAPTER_NULINK], [test "x$enable_nulink" != "xno"])
748
749 AS_IF([test "x$enable_jlink" != "xno"], [
750   AS_IF([test "x$use_internal_libjaylink" = "xyes"], [
751     AS_IF([test -f "$srcdir/src/jtag/drivers/libjaylink/configure.ac"], [
752       AX_CONFIG_SUBDIR_OPTION([src/jtag/drivers/libjaylink],
753                 [--enable-subproject-build])
754     ], [
755       AC_MSG_ERROR([Internal libjaylink not found, run either 'git submodule init' and 'git submodule update' or disable internal libjaylink with --disable-internal-libjaylink.])
756     ])
757   ])
758 ])
759
760 # Presto needs the bitq module
761 AS_IF([test "x$enable_presto" != "xno"], [
762   build_bitq=yes
763 ])
764
765 AM_CONDITIONAL([RELEASE], [test "x$build_release" = "xyes"])
766 AM_CONDITIONAL([PARPORT], [test "x$build_parport" = "xyes"])
767 AM_CONDITIONAL([DUMMY], [test "x$build_dummy" = "xyes"])
768 AM_CONDITIONAL([GIVEIO], [test "x$parport_use_giveio" = "xyes"])
769 AM_CONDITIONAL([EP93XX], [test "x$build_ep93xx" = "xyes"])
770 AM_CONDITIONAL([ZY1000], [test "x$build_zy1000" = "xyes"])
771 AM_CONDITIONAL([ZY1000_MASTER], [test "x$build_zy1000_master" = "xyes"])
772 AM_CONDITIONAL([IOUTIL], [test "x$build_ioutil" = "xyes"])
773 AM_CONDITIONAL([AT91RM9200], [test "x$build_at91rm9200" = "xyes"])
774 AM_CONDITIONAL([BCM2835GPIO], [test "x$build_bcm2835gpio" = "xyes"])
775 AM_CONDITIONAL([IMX_GPIO], [test "x$build_imx_gpio" = "xyes"])
776 AM_CONDITIONAL([BITBANG], [test "x$build_bitbang" = "xyes"])
777 AM_CONDITIONAL([JTAG_VPI], [test "x$build_jtag_vpi" = "xyes" -o "x$build_jtag_vpi" = "xyes"])
778 AM_CONDITIONAL([JTAG_DPI], [test "x$build_jtag_dpi" = "xyes" -o "x$build_jtag_dpi" = "xyes"])
779 AM_CONDITIONAL([USB_BLASTER_DRIVER], [test "x$enable_usb_blaster" != "xno" -o "x$enable_usb_blaster_2" != "xno"])
780 AM_CONDITIONAL([AMTJTAGACCEL], [test "x$build_amtjtagaccel" = "xyes"])
781 AM_CONDITIONAL([GW16012], [test "x$build_gw16012" = "xyes"])
782 AM_CONDITIONAL([OOCD_TRACE], [test "x$build_oocd_trace" = "xyes"])
783 AM_CONDITIONAL([REMOTE_BITBANG], [test "x$build_remote_bitbang" = "xyes"])
784 AM_CONDITIONAL([BUSPIRATE], [test "x$build_buspirate" = "xyes"])
785 AM_CONDITIONAL([SYSFSGPIO], [test "x$build_sysfsgpio" = "xyes"])
786 AM_CONDITIONAL([XLNX_PCIE_XVC], [test "x$build_xlnx_pcie_xvc" = "xyes"])
787 AM_CONDITIONAL([USE_LIBUSB0], [test "x$use_libusb0" = "xyes"])
788 AM_CONDITIONAL([USE_LIBUSB1], [test "x$use_libusb1" = "xyes"])
789 AM_CONDITIONAL([IS_CYGWIN], [test "x$is_cygwin" = "xyes"])
790 AM_CONDITIONAL([IS_MINGW], [test "x$is_mingw" = "xyes"])
791 AM_CONDITIONAL([IS_WIN32], [test "x$is_win32" = "xyes"])
792 AM_CONDITIONAL([IS_DARWIN], [test "x$is_darwin" = "xyes"])
793 AM_CONDITIONAL([BITQ], [test "x$build_bitq" = "xyes"])
794 AM_CONDITIONAL([USE_LIBFTDI], [test "x$use_libftdi" = "xyes"])
795 AM_CONDITIONAL([USE_LIBGPIOD], [test "x$use_libgpiod" = "xyes"])
796 AM_CONDITIONAL([USE_HIDAPI], [test "x$use_hidapi" = "xyes"])
797 AM_CONDITIONAL([USE_LIBJAYLINK], [test "x$use_libjaylink" = "xyes"])
798 AM_CONDITIONAL([RSHIM], [test "x$build_rshim" = "xyes"])
799 AM_CONDITIONAL([HAVE_CAPSTONE], [test "x$enable_capstone" != "xno"])
800
801 AM_CONDITIONAL([MINIDRIVER], [test "x$build_minidriver" = "xyes"])
802 AM_CONDITIONAL([MINIDRIVER_DUMMY], [test "x$build_minidriver_dummy" = "xyes"])
803
804 AM_CONDITIONAL([INTERNAL_JIMTCL], [test "x$use_internal_jimtcl" = "xyes"])
805 AM_CONDITIONAL([INTERNAL_LIBJAYLINK], [test "x$use_internal_libjaylink" = "xyes"])
806
807 # Look for environ alternatives.  Possibility #1: is environ in unistd.h or stdlib.h?
808 AC_MSG_CHECKING([for environ in unistd.h and stdlib.h])
809 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
810 #define _GNU_SOURCE
811 #include <unistd.h>
812 #include <stdlib.h>
813   ]], [[char **ep = environ;]]
814   )], [
815     AC_MSG_RESULT([yes])
816     has_environ=yes
817   ], [
818     AC_MSG_RESULT([no])
819
820     # Possibility #2: can environ be found in an available library?
821     AC_MSG_CHECKING([for extern environ])
822     AC_LINK_IFELSE([AC_LANG_PROGRAM([[
823     extern char **environ;
824     ]], [[char **ep = environ;]]
825       )], [
826         AC_DEFINE(NEED_ENVIRON_EXTERN, [1], [Must declare 'environ' to use it.])
827         has_environ=yes
828       ], [
829         has_environ=no
830       ])
831     AC_MSG_RESULT([${has_environ}])
832   ])
833
834 AS_IF([test "x${has_environ}" != "xyes" ], [
835   AC_MSG_FAILURE([Could not find 'environ' in unistd.h or available libraries.])
836 ])
837
838 AC_DEFINE([_GNU_SOURCE],[1],[Use GNU C library extensions (e.g. stdndup).])
839
840 # set default gcc warnings
841 GCC_WARNINGS="-Wall -Wstrict-prototypes -Wformat-security -Wshadow"
842 AS_IF([test "x${gcc_wextra}" = "xyes"], [
843   GCC_WARNINGS="${GCC_WARNINGS} -Wextra -Wno-unused-parameter"
844   GCC_WARNINGS="${GCC_WARNINGS} -Wbad-function-cast"
845   GCC_WARNINGS="${GCC_WARNINGS} -Wcast-align"
846   GCC_WARNINGS="${GCC_WARNINGS} -Wredundant-decls"
847   GCC_WARNINGS="${GCC_WARNINGS} -Wpointer-arith"
848 ])
849 AS_IF([test "x${gcc_werror}" = "xyes"], [
850   GCC_WARNINGS="${GCC_WARNINGS} -Werror"
851 ])
852
853 # override default gcc cflags
854 AS_IF([test "x$gcc_warnings" = "xyes"], [
855   AC_SUBST([GCC_WARNINGS], [$GCC_WARNINGS])
856 ])
857
858 AC_CONFIG_FILES([
859   Makefile
860 ])
861 AC_OUTPUT
862
863 echo
864 echo
865 echo OpenOCD configuration summary
866 echo --------------------------------------------------
867 m4_foreach([adapter], [USB1_ADAPTERS, USB0_ADAPTERS,
868         HIDAPI_ADAPTERS, HIDAPI_USB1_ADAPTERS, LIBFTDI_ADAPTERS,
869         LIBFTDI_USB1_ADAPTERS,
870         LIBGPIOD_ADAPTERS,
871         LIBJAYLINK_ADAPTERS, PCIE_ADAPTERS,
872         OPTIONAL_LIBRARIES],
873         [s=m4_format(["%-40s"], ADAPTER_DESC([adapter]))
874         AS_CASE([$ADAPTER_VAR([adapter])],
875                 [auto], [
876                         echo "$s"yes '(auto)'
877                 ],
878                 [yes], [
879                         echo "$s"yes
880                 ],
881                 [no], [
882                         echo "$s"no
883         ])
884 ])
885 echo
886
887 AS_IF([test "x$build_oocd_trace" = "xyes"], [
888   echo 'WARNING! Deprecated configure option (--enable-oocd_trace)'
889   echo 'The oocd_trace driver is deprecated and will be removed in the next release.'
890   echo 'If you regularly use this driver, please report to the OpenOCD Mailing List.'
891   echo
892 ])
893
894 AS_IF([test "x$build_zy1000" = "xyes" -o "x$build_zy1000_master" = "xyes"], [
895   echo 'WARNING! Deprecated configure option (--enable-zy1000, --enable-zy1000-master)'
896   echo 'Support for the ZY1000 platform is deprecated and will be removed in the next'
897   echo 'release. If you regularly use this platform, please report to the OpenOCD'
898   echo 'Mailing List.'
899   echo
900 ])
901
902 AS_IF([test "x$build_ioutil" = "xyes"], [
903   echo 'WARNING! Deprecated configure option (--enable-ioutil)'
904   echo 'Support for the ioutil functions is deprecated and will be removed in the next'
905   echo 'release. If you regularly depend on this functionality, please report to the'
906   echo 'OpenOCD Mailing List.'
907   echo
908 ])