blob: 7b727693538fd3bddccaf134d535b48cc101422f [file] [log] [blame]
H. Peter Anvincae5d062017-11-08 10:22:10 -08001dnl Process this file with autoconf 2.69 or later to produce
H. Peter Anvin1170eb62002-05-19 02:26:38 +00002dnl a configure script.
H. Peter Anvincae5d062017-11-08 10:22:10 -08003AC_PREREQ(2.69)
H. Peter Anvin97ea4ad2019-10-03 21:32:08 -07004AC_INIT([config/config.h.in])
5AC_CONFIG_HEADERS([config/config.h])
H. Peter Anvin87bc6192002-04-30 20:53:16 +00006AC_PREFIX_PROGRAM(nasm)
H. Peter Anvin0bddd0f2019-02-22 01:13:52 -08007AC_CONFIG_AUX_DIR(autoconf/helpers)
H. Peter Anvin87bc6192002-04-30 20:53:16 +00008
H. Peter Anvin (Intel)e2040292020-07-06 11:10:30 -07009dnl Mark where in config.h.in macros auto-generated by the configuration
10dnl start; this is used to generate config/unconfig.h.
11AH_BOTTOM([
12/* Begin unconfig.h */])
13
H. Peter Anvin2d894772017-03-01 12:57:46 -080014dnl Save initial CFLAGS, to see if -g -O2 came from configure or not
15pa_init_cflags="$CFLAGS"
16
H. Peter Anvin0da15492017-04-06 15:24:58 -070017dnl This prevents us from running Wine and thinking we are not
18dnl cross-compiling when in fact we are; running Wine here is at
19dnl the best very slow and doesn't buy us a single thing at all.
20WINELOADER=/dev/null
21export WINELOADER
22
H. Peter Anvin (Intel)941c75a2020-05-26 14:13:31 -070023dnl Get the canonical target system name
24AC_CANONICAL_HOST
25
H. Peter Anvin (Intel)e8d6bba2020-07-09 19:12:25 -070026dnl Enable any available C extensions
H. Peter Anvin2f0f9ea2008-06-08 20:53:29 -070027AC_USE_SYSTEM_EXTENSIONS
H. Peter Anvinb423c022016-02-18 11:57:53 -080028AC_SYS_LARGEFILE
H. Peter Anvin87bc6192002-04-30 20:53:16 +000029AC_PROG_CC
H. Peter Anvind338b372016-02-18 00:54:30 -080030AC_PROG_CC_STDC
H. Peter Anvin (Intel)5c90a7c2020-07-09 19:26:27 -070031PA_ADD_CFLAGS([-std=c17], [], [],
H. Peter Anvin (Intel)e1f0b352020-07-09 19:33:26 -070032[PA_ADD_CFLAGS([-std=c11], [], [],
33 [PA_ADD_CFLAGS([-std=c99])])])
H. Peter Anvin48fd1542018-06-14 19:19:09 -070034
35dnl If the user did not specify a CFLAGS default, change default
36dnl to -O0 for debugging
H. Peter Anvin0da15492017-04-06 15:24:58 -070037PA_ARG_DISABLED([optimization],
38 [compile without optimization (-O0) to help debugging],
H. Peter Anvin48fd1542018-06-14 19:19:09 -070039 [pa_no_optimize=true])
H. Peter Anvin9b935a02017-02-28 19:02:51 -080040
H. Peter Anvin (Intel)65ab3ab2020-06-30 10:14:21 -070041dnl Other programs
H. Peter Anvin (Intel)65ab3ab2020-06-30 10:14:21 -070042pa_no_optimize=false
43
Cyrill Gorcunovfdbf7012017-07-29 16:05:36 +030044dnl Compile and link with dwarf debug
45PA_ARG_ENABLED([gdb],
46 [disable optimization and compile with extra debug information for GDB debugger],
H. Peter Anvin48fd1542018-06-14 19:19:09 -070047 [PA_ADD_CFLAGS([-ggdb3])
48 pa_no_optimize=true])
H. Peter Anvin53259e82017-10-11 16:47:59 -070049
H. Peter Anvin48fd1542018-06-14 19:19:09 -070050AS_IF([$pa_no_optimize],
51 [PA_ADD_CFLAGS([-O0])
52 PA_ADD_CFLAGS([-fno-omit-frame-pointer])])
Cyrill Gorcunovfdbf7012017-07-29 16:05:36 +030053
H. Peter Anvinefee3ea2019-02-25 21:00:43 -080054dnl Profiling
55PA_ARG_ENABLED([profiling],
56 [compile with profiling (-pg option)],
57 [PA_ADD_CFLAGS([-pg])])
58
H. Peter Anvindcbaf672017-12-20 12:06:54 -080059dnl Abort on panic
60PA_ARG_ENABLED([panic-abort],
61 [call abort() on panic to trap in the debugger],
62 [AC_DEFINE(ABORT_ON_PANIC)])
63AH_TEMPLATE(ABORT_ON_PANIC,
64[Define to 1 to call abort() on panics (internal errors), for debugging.])
65
Cyrill Gorcunov7729edf2014-12-20 11:35:51 +030066dnl Checks for typedefs, structures, and compiler characteristics.
Cyrill Gorcunov7729edf2014-12-20 11:35:51 +030067AC_TYPE_SIZE_T
H. Peter Anvinef635882016-03-01 21:53:09 -080068AC_C_BIGENDIAN(AC_DEFINE(WORDS_BIGENDIAN),AC_DEFINE(WORDS_LITTLEENDIAN),,)
Cyrill Gorcunov7729edf2014-12-20 11:35:51 +030069AH_TEMPLATE(WORDS_BIGENDIAN,
70[Define to 1 if your processor stores words with the most significant
71byte first (like Motorola and SPARC, unlike Intel and VAX).])
72AH_TEMPLATE(WORDS_LITTLEENDIAN,
73[Define to 1 if your processor stores words with the least significant
74byte first (like Intel and VAX, unlike Motorola and SPARC).])
75
H. Peter Anvin (Intel)0da8a882020-07-06 10:15:11 -070076dnl LLVM doesn't error out on invalid -W options unless this option is
77dnl specified first. Enable this so this script can actually discover
78dnl which -W options are possible for this compiler.
79PA_ADD_CFLAGS([-Werror=unknown-warning-option])
80
H. Peter Anvinb9c1ca72016-03-01 21:51:40 -080081dnl Force gcc and gcc-compatible compilers treat signed integers
82dnl as 2's complement
H. Peter Anvin8d9f5912016-02-27 00:15:13 -080083PA_ADD_CFLAGS([-fwrapv])
H. Peter Anvin87bc6192002-04-30 20:53:16 +000084
H. Peter Anvin (Intel)0da8a882020-07-06 10:15:11 -070085dnl Force clang to behave in a predictable manner, in order to make bugs
86dnl possible to track down. gcc appears to have this behavior by default.
H. Peter Anvin (Intel)0da8a882020-07-06 10:15:11 -070087PA_ADD_CFLAGS([-ftrivial-auto-var-init=zero])
88
H. Peter Anvin8b190832016-11-15 14:01:37 -080089dnl Some environments abuse __STRICT_ANSI__ to disable some
90dnl function declarations
91PA_ADD_CFLAGS([-U__STRICT_ANSI__])
92
H. Peter Anvin43e02622016-08-02 09:28:22 -070093dnl Don't put things in common if we can avoid it. We don't want to
94dnl assume all compilers support common, and this will help find those
95dnl problems. This also works around an OSX linker problem.
96PA_ADD_CFLAGS([-fno-common])
97
H. Peter Anvin (Intel)abcdf832020-07-09 19:04:28 -070098dnl Check for library extension
99PA_LIBEXT
H. Peter Anvin (Intel)30844a42020-07-06 12:39:14 -0700100
H. Peter Anvineec3b522008-06-19 11:39:23 -0700101dnl Look for programs...
H. Peter Anvin (Intel)abcdf832020-07-09 19:04:28 -0700102AC_PROG_LN_S
103AC_PROG_MAKE_SET
104AC_PROG_INSTALL
105AC_PROG_MKDIR_P
106
H. Peter Anvina9397832013-05-17 12:02:49 -0700107AC_CHECK_PROGS(NROFF, nroff, false)
H. Peter Anvind089c222013-10-24 13:22:19 +0100108AC_CHECK_PROGS(ASCIIDOC, asciidoc, false)
109AC_CHECK_PROGS(XMLTO, xmlto, false)
H. Peter Anvin (Intel)941c75a2020-05-26 14:13:31 -0700110AC_CHECK_PROGS(XZ, xz, false)
H. Peter Anvin620515a2002-04-30 20:57:38 +0000111
H. Peter Anvind089c222013-10-24 13:22:19 +0100112dnl Check for progs needed for manpage generation
H. Peter Anvin (Intel)941c75a2020-05-26 14:13:31 -0700113MANPAGES=manpages
114AS_IF([test x$ASCIIDOC = xfalse],
115 [AC_MSG_WARN([No asciidoc package found, cannot build man pages])
116 MANPAGES='']
H. Peter Anvin0da15492017-04-06 15:24:58 -0700117)
H. Peter Anvin (Intel)941c75a2020-05-26 14:13:31 -0700118AS_IF([test x"$XMLTO" = xfalse],
119 [AC_MSG_WARN([No xmlto package found, cannot build man pages])
120 MANPAGES='']
H. Peter Anvin0da15492017-04-06 15:24:58 -0700121)
H. Peter Anvin (Intel)941c75a2020-05-26 14:13:31 -0700122AC_SUBST([MANPAGES])
123
124dnl Don't create .pdf.xz if there is no xz
125AS_IF([test x"$XZ" = xfalse],
126 [],
127 [XZFILES=xzfiles])
128AC_SUBST([XZFILES])
129
130dnl Can't create NSIS package if there is no makensis
131dnl ... but it only applies to a Windows target ...
132dnl Note: AC_CHECK_TOOLS is supposed to check for the "plain"
133dnl version of the program name, but it doesn't seem to.
134AC_ARG_WITH([nsis],
135[AS_HELP_STRING([[--with-nsis[=makensis]]],
136 [build an install .exe using NSIS on Windows hosts])],
137 [], [with_nsis=yes])
138AS_IF([test x"$MAKENSIS" = x], [],
139 [AS_IF([test x"$with_nsis" = xno], []
140 [with_nsis="$MAKENSIS"])])
141
142MAKENSIS=false
143
144AS_CASE([$host],
145 [*-win* | *-mingw*],
146 [AS_IF([test x"$with_nsis" = xno], [],
147 [NSIS=nsis
148 AS_IF([test x"$with_nsis" = xyes],
149 [AC_CHECK_TOOL(MAKENSIS_TOOL, makensis, false)
150 MAKENSIS="$MAKENSIS_TOOL"
151 AS_IF([test x"$MAKENSIS" = xfalse],
152 [AC_CHECK_PROGS(MAKENSIS_PLAIN, makensis, false)
153 MAKENSIS="$MAKENSIS_PLAIN"])
154 AS_IF([test x"$MAKENSIS" = xfalse],
155 [AC_MSG_WARN([no makensis found, cannot build installer])
156 NSIS=''])],
157 [MAKENSIS="$with_nsis"])])])
158AC_SUBST([MAKENSIS])
159AC_SUBST([NSIS])
H. Peter Anvind089c222013-10-24 13:22:19 +0100160
H. Peter Anvincc147f72016-03-08 02:06:39 -0800161dnl Check for host compiler tools
162AC_CHECK_TOOL(AR, ar)
163AC_CHECK_TOOL(RANLIB, ranlib, :)
164AC_CHECK_TOOL(STRIP, strip)
165
H. Peter Anvin (Intel)abcdf832020-07-09 19:04:28 -0700166dnl
167dnl NOTE: the tests for header files and library functions use constructs
168dnl that create warnings on modern compilers, due to lack of prototypes,
169dnl etc. Therefore, do not add the -Werror options before this.
170dnl
171
172dnl Tests which may trigger warnings on some compilers
173AC_C_CONST
174AC_C_INLINE
175AC_C_RESTRICT
176
H. Peter Anvin87bc6192002-04-30 20:53:16 +0000177dnl Checks for header files.
178AC_HEADER_STDC
H. Peter Anvin (Intel)abcdf832020-07-09 19:04:28 -0700179PA_ADD_HEADERS(string.h)
180PA_ADD_HEADERS(stdarg.h)
H. Peter Anvin3ef4f002016-03-08 12:14:55 -0800181AC_CHECK_HEADERS(inttypes.h)
H. Peter Anvinfe501952007-10-02 21:53:51 -0700182AC_CHECK_HEADERS(strings.h)
H. Peter Anvind338b372016-02-18 00:54:30 -0800183AC_HEADER_STDBOOL
H. Peter Anvinabd28c92016-12-20 02:29:58 -0800184AC_CHECK_HEADERS(stdnoreturn.h)
H. Peter Anvine65e81b2016-02-18 14:24:40 -0800185AC_CHECK_HEADERS(io.h)
H. Peter Anvind81a2352016-09-21 14:03:18 -0700186AC_CHECK_HEADERS(fcntl.h)
H. Peter Anvin4627e692016-01-26 12:01:34 -0800187AC_CHECK_HEADERS(unistd.h)
H. Peter Anvind81a2352016-09-21 14:03:18 -0700188AC_CHECK_HEADERS(sys/mman.h)
H. Peter Anvin4c9132e2016-10-19 13:13:38 -0700189AC_CHECK_HEADERS(sys/types.h)
H. Peter Anvin675e7b72017-04-05 21:19:03 -0700190AC_CHECK_HEADERS(sys/stat.h)
H. Peter Anvin (Intel)5b4de522020-06-01 13:10:46 -0700191AC_CHECK_HEADERS(sys/resource.h)
H. Peter Anvin4627e692016-01-26 12:01:34 -0800192
H. Peter Anvin87bc6192002-04-30 20:53:16 +0000193dnl Checks for library functions.
H. Peter Anvinfe501952007-10-02 21:53:51 -0700194AC_CHECK_FUNCS(strcasecmp stricmp)
195AC_CHECK_FUNCS(strncasecmp strnicmp)
H. Peter Anvin73b22f52016-02-18 14:40:37 -0800196AC_CHECK_FUNCS(strsep)
H. Peter Anvin22538e22016-05-25 05:42:47 -0700197AC_CHECK_FUNCS(strnlen)
H. Peter Anvin81b62b92017-12-20 13:33:49 -0800198AC_CHECK_FUNCS(strrchrnul)
H. Peter Anvin13506202018-11-28 14:55:58 -0800199AC_CHECK_FUNCS(iscntrl)
200AC_CHECK_FUNCS(isascii)
H. Peter Anvin06f72bb2018-12-26 06:22:47 -0800201AC_CHECK_FUNCS(mempcpy)
H. Peter Anvinfe501952007-10-02 21:53:51 -0700202
H. Peter Anvin038d8612007-04-12 16:54:50 +0000203AC_CHECK_FUNCS(getuid)
204AC_CHECK_FUNCS(getgid)
H. Peter Anvin (Intel)5b4de522020-06-01 13:10:46 -0700205AC_CHECK_FUNCS(getrlimit)
H. Peter Anvin038d8612007-04-12 16:54:50 +0000206
H. Peter Anvin4627e692016-01-26 12:01:34 -0800207AC_CHECK_FUNCS(realpath)
208AC_CHECK_FUNCS(canonicalize_file_name)
209AC_CHECK_FUNCS(_fullpath)
210AC_CHECK_FUNCS(pathconf)
211
H. Peter Anvine65e81b2016-02-18 14:24:40 -0800212AC_FUNC_FSEEKO
H. Peter Anvinec82d7a2016-02-21 21:20:45 -0800213AC_CHECK_FUNCS([_fseeki64])
H. Peter Anvine65e81b2016-02-18 14:24:40 -0800214AC_CHECK_FUNCS([ftruncate _chsize _chsize_s])
H. Peter Anvin397c1692016-10-04 17:01:59 -0700215AC_CHECK_FUNCS([fileno _fileno])
H. Peter Anvine65e81b2016-02-18 14:24:40 -0800216
H. Peter Anvin895a66c2017-02-23 20:34:38 -0800217AC_FUNC_MMAP
H. Peter Anvind81a2352016-09-21 14:03:18 -0700218AC_CHECK_FUNCS(getpagesize)
219AC_CHECK_FUNCS(sysconf)
220
H. Peter Anvin397c1692016-10-04 17:01:59 -0700221AC_CHECK_FUNCS([access _access faccessat])
H. Peter Anvind81a2352016-09-21 14:03:18 -0700222
H. Peter Anvine558dfd2017-04-18 16:05:22 -0700223PA_HAVE_FUNC(__builtin_expect, (1,1))
224
225dnl ilog2() building blocks
226PA_ADD_HEADERS(intrin.h)
H. Peter Anvin8d4fb262016-11-15 14:23:54 -0800227PA_HAVE_FUNC(__builtin_clz, (0U))
228PA_HAVE_FUNC(__builtin_clzl, (0UL))
229PA_HAVE_FUNC(__builtin_clzll, (0ULL))
H. Peter Anvine558dfd2017-04-18 16:05:22 -0700230PA_HAVE_FUNC(_BitScanReverse, (0))
231PA_HAVE_FUNC(_BitScanReverse64, (0))
H. Peter Anvind338b372016-02-18 00:54:30 -0800232
H. Peter Anvin (Intel)abcdf832020-07-09 19:04:28 -0700233PA_FUNC_SNPRINTF
234PA_FUNC_VSNPRINTF
H. Peter Anvincc147f72016-03-08 02:06:39 -0800235AC_CHECK_FUNCS([strlcpy])
H. Peter Anvin81b62b92017-12-20 13:33:49 -0800236AC_CHECK_FUNCS([strrchrnul])
H. Peter Anvind338b372016-02-18 00:54:30 -0800237
H. Peter Anvin31184292017-04-06 15:30:56 -0700238dnl These types are POSIX-specific, and Windows does it differently...
239AC_CHECK_TYPES([struct _stati64])
240AC_CHECK_TYPES([struct stat])
241AC_CHECK_FUNCS([stat _stati64])
242AC_CHECK_FUNCS([fstat _fstati64])
H. Peter Anvin (Intel)471120f2019-05-15 13:07:21 -0700243AC_CHECK_FUNCS([S_ISREG])
H. Peter Anvin31184292017-04-06 15:30:56 -0700244
H. Peter Anvinc13d31a2007-10-26 18:49:29 -0700245dnl Check for functions that might not be declared in the headers for
246dnl various idiotic reasons (mostly because of library authors
247dnl abusing the meaning of __STRICT_ANSI__)
248AC_CHECK_DECLS(strcasecmp)
249AC_CHECK_DECLS(stricmp)
250AC_CHECK_DECLS(strncasecmp)
251AC_CHECK_DECLS(strnicmp)
252AC_CHECK_DECLS(strsep)
H. Peter Anvineaa68f12009-08-10 15:56:52 -0700253AC_CHECK_DECLS(strlcpy)
H. Peter Anvin22538e22016-05-25 05:42:47 -0700254AC_CHECK_DECLS(strnlen)
H. Peter Anvin81b62b92017-12-20 13:33:49 -0800255AC_CHECK_DECLS(strrchrnul)
H. Peter Anvinc13d31a2007-10-26 18:49:29 -0700256
H. Peter Anvind81a2352016-09-21 14:03:18 -0700257dnl Check for missing types
258AC_TYPE_UINTPTR_T
259
H. Peter Anvinf13effe2017-04-10 16:10:28 -0700260dnl Documentation: should we generate an uncompressed PDF? It is
261dnl about twice as big, but it can be externally compressed (e.g. with xz)
262dnl and becomes significantly smaller than the original.
263PA_ARG_DISABLED([pdf-compression],
264 [generate an uncompressed documentation PDF],
265 [PDFOPT='-nocompress'])
266AC_SUBST([PDFOPT])
267
H. Peter Anvin8b190832016-11-15 14:01:37 -0800268dnl
H. Peter Anvin5eb528b2017-04-18 15:49:25 -0700269dnl Look for byte-swapping support...
270dnl
H. Peter Anvine5033df2017-11-29 16:04:05 -0800271PA_ADD_HEADERS(endian.h sys/endian.h machine/endian.h)
H. Peter Anvin5eb528b2017-04-18 15:49:25 -0700272PA_HAVE_FUNC(cpu_to_le16, (0))
273PA_HAVE_FUNC(cpu_to_le32, (0))
274PA_HAVE_FUNC(cpu_to_le64, (0))
275PA_HAVE_FUNC(__cpu_to_le16, (0))
276PA_HAVE_FUNC(__cpu_to_le32, (0))
277PA_HAVE_FUNC(__cpu_to_le64, (0))
278PA_HAVE_FUNC(htole16, (0))
279PA_HAVE_FUNC(htole32, (0))
280PA_HAVE_FUNC(htole64, (0))
281PA_HAVE_FUNC(__bswap_16, (0))
282PA_HAVE_FUNC(__bswap_32, (0))
283PA_HAVE_FUNC(__bswap_64, (0))
284PA_HAVE_FUNC(__builtin_bswap16, (0))
285PA_HAVE_FUNC(__builtin_bswap32, (0))
286PA_HAVE_FUNC(__builtin_bswap64, (0))
H. Peter Anvine558dfd2017-04-18 16:05:22 -0700287PA_HAVE_FUNC(_byteswap_ushort, (0))
288PA_HAVE_FUNC(_byteswap_ulong, (0))
289PA_HAVE_FUNC(_byteswap_uint64, (0))
H. Peter Anvin5eb528b2017-04-18 15:49:25 -0700290
291dnl
H. Peter Anvin (Intel)b7f24e72018-12-14 14:21:16 -0800292dnl Some rather useful gcc extensions...
H. Peter Anvine5033df2017-11-29 16:04:05 -0800293dnl
294PA_HAVE_FUNC(__builtin_constant_p, (0))
H. Peter Anvin (Intel)b7f24e72018-12-14 14:21:16 -0800295PA_HAVE_FUNC(__builtin_choose_expr, (0,1,2))
H. Peter Anvine5033df2017-11-29 16:04:05 -0800296
297dnl
H. Peter Anvin8b190832016-11-15 14:01:37 -0800298dnl Check for supported gcc attributes; some compilers (e.g. Sun CC)
299dnl support these, but don't define __GNUC__ as they don't support
300dnl some other features of gcc.
301dnl
H. Peter Anvinbc18af12017-02-23 19:22:27 -0800302PA_ADD_CFLAGS([-Werror=attributes])
H. Peter Anvin8b190832016-11-15 14:01:37 -0800303PA_FUNC_ATTRIBUTE(noreturn)
H. Peter Anvin (Intel)8b6e6bf2019-08-16 00:08:27 -0700304PA_FUNC_ATTRIBUTE(returns_nonnull,,,,,never_null)
H. Peter Anvin8b190832016-11-15 14:01:37 -0800305PA_FUNC_ATTRIBUTE(malloc)
H. Peter Anvin (Intel)8b6e6bf2019-08-16 00:08:27 -0700306PA_FUNC_ATTRIBUTE(alloc_size,[1])
307PA_FUNC_ATTRIBUTE(alloc_size,[1,2])
308PA_FUNC_ATTRIBUTE(sentinel,,, [const char *, ...], ["a","b",NULL],end_with_null)
309PA_FUNC_ATTRIBUTE(format, [printf,1,2], int, [const char *, ...], ["%d",1])
H. Peter Anvin8b190832016-11-15 14:01:37 -0800310PA_FUNC_ATTRIBUTE(const)
311PA_FUNC_ATTRIBUTE(pure)
H. Peter Anvin (Intel)8b6e6bf2019-08-16 00:08:27 -0700312PA_FUNC_ATTRIBUTE(cold,,,,,unlikely_func)
H. Peter Anvin (Intel)65ab3ab2020-06-30 10:14:21 -0700313PA_FUNC_ATTRIBUTE(unused)
H. Peter Anvinabd28c92016-12-20 02:29:58 -0800314PA_FUNC_ATTRIBUTE_ERROR
H. Peter Anvin87bc6192002-04-30 20:53:16 +0000315
Cyrill Gorcunov325768e2010-11-11 11:18:44 +0300316dnl
H. Peter Anvin53259e82017-10-11 16:47:59 -0700317dnl support function sections (if available)
Cyrill Gorcunov325768e2010-11-11 11:18:44 +0300318dnl
H. Peter Anvin (Intel)7dc5b232018-12-13 22:51:22 -0800319PA_ARG_DISABLED([sections],
Cyrill Gorcunov82746232018-12-23 17:15:41 +0300320 [do not try to compile with function/data section support],
H. Peter Anvin (Intel)7dc5b232018-12-13 22:51:22 -0800321 [],
H. Peter Anvinb0121dc2018-12-22 18:17:16 -0800322 [PA_ADD_CFLAGS([-ffunction-sections])
323 PA_ADD_CFLAGS([-fdata-sections])
324 PA_ADD_LDFLAGS([-Wl,--gc-sections])]
H. Peter Anvin (Intel)7dc5b232018-12-13 22:51:22 -0800325 )
H. Peter Anvin53259e82017-10-11 16:47:59 -0700326
H. Peter Anvin5fe847e2017-02-28 18:48:01 -0800327dnl
328dnl support LTO
329dnl
H. Peter Anvin0da15492017-04-06 15:24:58 -0700330PA_ARG_ENABLED([lto],
331 [compile with gcc-style link time optimization],
H. Peter Anvinb0121dc2018-12-22 18:17:16 -0800332 [PA_ADD_CFLAGS([-flto])
H. Peter Anvin0da15492017-04-06 15:24:58 -0700333 dnl Note: we use _PROG rather than _TOOL since we are prepending the full
334 dnl CC name which ought to already contain the host triplet if needed
335 ccbase=`echo "$CC" | awk '{ print $1; }'`
336 AC_CHECK_PROGS(CC_AR, [${ccbase}-ar], [$ac_cv_prog_AR])
337 AR="$CC_AR"
338 AC_CHECK_PROGS(CC_RANLIB, [${ccbase}-ranlib], [$ac_cv_prog_RANLIB])
339 RANLIB="$CC_RANLIB"], [])
H. Peter Anvin5fe847e2017-02-28 18:48:01 -0800340
H. Peter Anvin53259e82017-10-11 16:47:59 -0700341dnl
342dnl support sanitizers (if available)
343dnl
344PA_ARG_ENABLED([sanitizer],
345 [compile with sanitizers enabled],
346 [PA_ADD_CFLAGS([-fno-omit-frame-pointer])
H. Peter Anvinb0121dc2018-12-22 18:17:16 -0800347 PA_ADD_CFLAGS([-fsanitize=address])
348 PA_ADD_CFLAGS([-fsanitize=undefined])])
H. Peter Anvin53259e82017-10-11 16:47:59 -0700349
H. Peter Anvin7310d0b2018-05-30 11:48:00 -0700350dnl
351dnl Don't make symbols visible, there is no point and it just
H. Peter Anvin (Intel)65ab3ab2020-06-30 10:14:21 -0700352dnl makes the code slower. This mainly affects ELF.
H. Peter Anvin7310d0b2018-05-30 11:48:00 -0700353dnl
H. Peter Anvinb0121dc2018-12-22 18:17:16 -0800354PA_ADD_CFLAGS([-fvisibility=hidden])
H. Peter Anvin7310d0b2018-05-30 11:48:00 -0700355
H. Peter Anvin (Intel)65ab3ab2020-06-30 10:14:21 -0700356dnl
357dnl If we have gcc, add appropriate code cleanliness options. Do this
358dnl here at the end, because configure relies on being able to use
359dnl some very, very old C constructs.
360dnl
H. Peter Anvind338b372016-02-18 00:54:30 -0800361PA_ADD_CFLAGS([-Wall])
H. Peter Anvin (Intel)480d5e22019-08-16 00:52:26 -0700362PA_ARG_DISABLED([pedantic],
363[disable some extra paranoid compiler warnings],
364[],
365[PA_ADD_CFLAGS([-W])
366 PA_ADD_CFLAGS([-pedantic])
H. Peter Anvin (Intel)65ab3ab2020-06-30 10:14:21 -0700367 PA_ADD_CFLAGS([-Wc90-c99-compat])
368 PA_ADD_CFLAGS([-Wc99-compat])
369 PA_ADD_CFLAGS([-Wc99-extensions])
370])
H. Peter Anvin25da6ea2016-03-01 22:20:10 -0800371dnl Suppress format warning on Windows targets due to their <inttypes.h>
372PA_ADD_CFLAGS([-Wpedantic-ms-format],[-Wno-pedantic-ms-format])
H. Peter Anvin25da6ea2016-03-01 22:20:10 -0800373PA_ADD_CFLAGS([-Wlong-long],[-Wno-long-long])
H. Peter Anvinc4e16f72018-06-02 23:46:21 -0700374dnl This is needed because we intentionally expect strncpy() to fill
375dnl in a zero-padded (not zero-terminated) buffer in several backends
376PA_ADD_CFLAGS([-Wstringop-truncation],[-Wno-stringop-truncation])
H. Peter Anvin (Intel)64b56ea2018-12-12 15:56:28 -0800377dnl This is needed because we assume 2's-completement signed arithmetic;
378dnl on compilers with gcc-like command line syntax we pass the -fwrapv
379dnl option for exactly that reason.
380PA_ADD_CFLAGS([-Wshift-negative-value],[-Wno-shift-negative-value])
381
H. Peter Anvin (Intel)65ab3ab2020-06-30 10:14:21 -0700382dnl Want to turn this on at some point...
H. Peter Anvincfd56eb2016-03-06 21:44:14 -0800383dnl PA_ADD_CFLAGS([-Wwrite-strings])
H. Peter Anvin0da15492017-04-06 15:24:58 -0700384PA_ARG_ENABLED([werror],
385 [compile with -Werror to error out on any warning],
386 [PA_ADD_CFLAGS([-Werror])],
387 [PA_ADD_CFLAGS([-Werror=implicit])
388 PA_ADD_CFLAGS([-Werror=missing-braces])
389 PA_ADD_CFLAGS([-Werror=return-type])
390 PA_ADD_CFLAGS([-Werror=trigraphs])
391 PA_ADD_CFLAGS([-Werror=pointer-arith])
392 PA_ADD_CFLAGS([-Werror=strict-prototypes])
393 PA_ADD_CFLAGS([-Werror=missing-prototypes])
394 PA_ADD_CFLAGS([-Werror=missing-declarations])
395 PA_ADD_CFLAGS([-Werror=comment])
396 PA_ADD_CFLAGS([-Werror=vla])]
397)
Ozkan Sezerec3d4262016-02-12 23:49:49 -0800398
H. Peter Anvin0c369652017-02-28 19:34:36 -0800399dnl
H. Peter Anvin (Intel)abcdf832020-07-09 19:04:28 -0700400dnl Test compiler features. On some compilers, this can be affected
401dnl by -Werror options, so run this *after* those options are added.
H. Peter Anvin99d45c82018-02-20 12:34:17 -0800402dnl
403PA_CHECK_BAD_STDC_INLINE
H. Peter Anvin (Intel)abcdf832020-07-09 19:04:28 -0700404PA_C_TYPEOF
H. Peter Anvin99d45c82018-02-20 12:34:17 -0800405
406dnl
H. Peter Anvin0c369652017-02-28 19:34:36 -0800407dnl support ccache
408dnl
H. Peter Anvin0da15492017-04-06 15:24:58 -0700409PA_ARG_ENABLED([ccache], [compile with ccache], [CC="ccache $CC"], [])
H. Peter Anvin0c369652017-02-28 19:34:36 -0800410
H. Peter Anvin (Intel)941c75a2020-05-26 14:13:31 -0700411AC_CONFIG_FILES([Makefile doc/Makefile])
412AC_OUTPUT