| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- dnl Process this file with autoconf 2.69 or later to produce
- dnl a configure script.
- AC_PREREQ(2.69)
- AC_INIT(config/config.h.in)
- AC_CONFIG_HEADERS(config/config.h)
- AC_PREFIX_PROGRAM(nasm)
- dnl Save initial CFLAGS, to see if -g -O2 came from configure or not
- pa_init_cflags="$CFLAGS"
- dnl This prevents us from running Wine and thinking we are not
- dnl cross-compiling when in fact we are; running Wine here is at
- dnl the best very slow and doesn't buy us a single thing at all.
- WINELOADER=/dev/null
- export WINELOADER
- dnl Checks for programs and enable necessary CC extensions
- AC_USE_SYSTEM_EXTENSIONS
- AC_SYS_LARGEFILE
- AC_PROG_CC
- AC_PROG_CC_STDC
- AC_PROG_LN_S
- AC_PROG_MAKE_SET
- AC_PROG_INSTALL
- dnl If the user did not specify a CFLAGS default, change default -O2
- dnl to either -O3 (normal) or -O0 (for debugging)
- PA_ARG_DISABLED([optimization],
- [compile without optimization (-O0) to help debugging],
- [pa_optimize=-O0], [pa_optimize=-O3])
- dnl Compile and link with dwarf debug
- PA_ARG_ENABLED([gdb],
- [disable optimization and compile with extra debug information for GDB debugger],
- [pa_optimize='-O0'
- PA_ADD_CFLAGS([-ggdb3])
- ])
- AS_IF([test x"$pa_init_cflags" = x],
- [CFLAGS=`echo "$CFLAGS" | sed -e "s/-O2/$pa_optimize/"`])
- AS_IF([test x"$pa_optimize" = "x-O0"],
- [PA_ADD_CFLAGS([-fno-omit-frame-pointer])])
- dnl Abort on panic
- PA_ARG_ENABLED([panic-abort],
- [call abort() on panic to trap in the debugger],
- [AC_DEFINE(ABORT_ON_PANIC)])
- AH_TEMPLATE(ABORT_ON_PANIC,
- [Define to 1 to call abort() on panics (internal errors), for debugging.])
- dnl Check for library extension
- PA_LIBEXT
- dnl Checks for typedefs, structures, and compiler characteristics.
- AC_C_CONST
- AC_C_INLINE
- AC_C_RESTRICT
- AC_TYPE_SIZE_T
- AC_C_BIGENDIAN(AC_DEFINE(WORDS_BIGENDIAN),AC_DEFINE(WORDS_LITTLEENDIAN),,)
- AH_TEMPLATE(WORDS_BIGENDIAN,
- [Define to 1 if your processor stores words with the most significant
- byte first (like Motorola and SPARC, unlike Intel and VAX).])
- AH_TEMPLATE(WORDS_LITTLEENDIAN,
- [Define to 1 if your processor stores words with the least significant
- byte first (like Intel and VAX, unlike Motorola and SPARC).])
- dnl Force gcc and gcc-compatible compilers treat signed integers
- dnl as 2's complement
- PA_ADD_CFLAGS([-fwrapv])
- dnl Some environments abuse __STRICT_ANSI__ to disable some
- dnl function declarations
- PA_ADD_CFLAGS([-U__STRICT_ANSI__])
- dnl Don't put things in common if we can avoid it. We don't want to
- dnl assume all compilers support common, and this will help find those
- dnl problems. This also works around an OSX linker problem.
- PA_ADD_CFLAGS([-fno-common])
- dnl Look for programs...
- AC_CHECK_PROGS(NROFF, nroff, false)
- AC_CHECK_PROGS(ASCIIDOC, asciidoc, false)
- AC_CHECK_PROGS(XMLTO, xmlto, false)
- dnl Check for progs needed for manpage generation
- AS_IF([test $ASCIIDOC = false],
- [AC_MSG_WARN([No asciidoc package found])]
- )
- AS_IF([test $XMLTO = false],
- [AC_MSG_WARN([No xmlto package found])]
- )
- dnl Check for host compiler tools
- AC_CHECK_TOOL(AR, ar)
- AC_CHECK_TOOL(RANLIB, ranlib, :)
- AC_CHECK_TOOL(STRIP, strip)
- dnl Checks for header files.
- AC_HEADER_STDC
- AC_CHECK_HEADERS(inttypes.h)
- AC_CHECK_HEADERS(strings.h)
- AC_HEADER_STDBOOL
- AC_CHECK_HEADERS(stdnoreturn.h)
- AC_CHECK_HEADERS(io.h)
- AC_CHECK_HEADERS(fcntl.h)
- AC_CHECK_HEADERS(unistd.h)
- AC_CHECK_HEADERS(sys/mman.h)
- AC_CHECK_HEADERS(sys/types.h)
- AC_CHECK_HEADERS(sys/stat.h)
- dnl Checks for library functions.
- AC_CHECK_FUNCS(strcasecmp stricmp)
- AC_CHECK_FUNCS(strncasecmp strnicmp)
- AC_CHECK_FUNCS(strsep)
- AC_CHECK_FUNCS(strnlen)
- AC_CHECK_FUNCS(strrchrnul)
- AC_CHECK_FUNCS(getuid)
- AC_CHECK_FUNCS(getgid)
- AC_CHECK_FUNCS(realpath)
- AC_CHECK_FUNCS(canonicalize_file_name)
- AC_CHECK_FUNCS(_fullpath)
- AC_CHECK_FUNCS(pathconf)
- AC_FUNC_FSEEKO
- AC_CHECK_FUNCS([_fseeki64])
- AC_CHECK_FUNCS([ftruncate _chsize _chsize_s])
- AC_CHECK_FUNCS([fileno _fileno])
- AC_CHECK_FUNCS(_filelengthi64)
- AC_FUNC_MMAP
- AC_CHECK_FUNCS(getpagesize)
- AC_CHECK_FUNCS(sysconf)
- AC_CHECK_FUNCS([access _access faccessat])
- PA_HAVE_FUNC(__builtin_expect, (1,1))
- dnl ilog2() building blocks
- PA_ADD_HEADERS(intrin.h)
- PA_HAVE_FUNC(__builtin_clz, (0U))
- PA_HAVE_FUNC(__builtin_clzl, (0UL))
- PA_HAVE_FUNC(__builtin_clzll, (0ULL))
- PA_HAVE_FUNC(_BitScanReverse, (0))
- PA_HAVE_FUNC(_BitScanReverse64, (0))
- dnl Functions for which we have replacements available in stdlib/
- AC_CHECK_FUNCS([vsnprintf _vsnprintf])
- AC_CHECK_FUNCS([snprintf _snprintf])
- AC_CHECK_FUNCS([strlcpy])
- AC_CHECK_FUNCS([strrchrnul])
- dnl These types are POSIX-specific, and Windows does it differently...
- AC_CHECK_TYPES([struct _stati64])
- AC_CHECK_TYPES([struct stat])
- AC_CHECK_FUNCS([stat _stati64])
- AC_CHECK_FUNCS([fstat _fstati64])
- dnl Check for functions that might not be declared in the headers for
- dnl various idiotic reasons (mostly because of library authors
- dnl abusing the meaning of __STRICT_ANSI__)
- AC_CHECK_DECLS(strcasecmp)
- AC_CHECK_DECLS(stricmp)
- AC_CHECK_DECLS(strncasecmp)
- AC_CHECK_DECLS(strnicmp)
- AC_CHECK_DECLS(strsep)
- AC_CHECK_DECLS(strlcpy)
- AC_CHECK_DECLS(strnlen)
- AC_CHECK_DECLS(strrchrnul)
- dnl Check for missing types
- AC_TYPE_UINTPTR_T
- dnl Documentation: should we generate an uncompressed PDF? It is
- dnl about twice as big, but it can be externally compressed (e.g. with xz)
- dnl and becomes significantly smaller than the original.
- PA_ARG_DISABLED([pdf-compression],
- [generate an uncompressed documentation PDF],
- [PDFOPT='-nocompress'])
- AC_SUBST([PDFOPT])
- dnl
- dnl Look for byte-swapping support...
- dnl
- PA_ADD_HEADERS(endian.h sys/endian.h machine/endian.h)
- PA_HAVE_FUNC(cpu_to_le16, (0))
- PA_HAVE_FUNC(cpu_to_le32, (0))
- PA_HAVE_FUNC(cpu_to_le64, (0))
- PA_HAVE_FUNC(__cpu_to_le16, (0))
- PA_HAVE_FUNC(__cpu_to_le32, (0))
- PA_HAVE_FUNC(__cpu_to_le64, (0))
- PA_HAVE_FUNC(htole16, (0))
- PA_HAVE_FUNC(htole32, (0))
- PA_HAVE_FUNC(htole64, (0))
- PA_HAVE_FUNC(__bswap_16, (0))
- PA_HAVE_FUNC(__bswap_32, (0))
- PA_HAVE_FUNC(__bswap_64, (0))
- PA_HAVE_FUNC(__builtin_bswap16, (0))
- PA_HAVE_FUNC(__builtin_bswap32, (0))
- PA_HAVE_FUNC(__builtin_bswap64, (0))
- PA_HAVE_FUNC(_byteswap_ushort, (0))
- PA_HAVE_FUNC(_byteswap_ulong, (0))
- PA_HAVE_FUNC(_byteswap_uint64, (0))
- dnl
- dnl Check for __builtin_constant_p()
- dnl
- PA_HAVE_FUNC(__builtin_constant_p, (0))
- dnl
- dnl Check for supported gcc attributes; some compilers (e.g. Sun CC)
- dnl support these, but don't define __GNUC__ as they don't support
- dnl some other features of gcc.
- dnl
- PA_ADD_CFLAGS([-Werror=attributes])
- PA_FUNC_ATTRIBUTE(noreturn)
- PA_FUNC_ATTRIBUTE(returns_nonnull)
- PA_FUNC_ATTRIBUTE(malloc)
- PA_FUNC_ATTRIBUTE(alloc_size, (1))
- PA_FUNC_ATTRIBUTE(sentinel,,, [const char *, ...], ["a","b",NULL])
- PA_FUNC_ATTRIBUTE(format, [(printf,1,2)], int, [const char *, ...], ["%d",1])
- PA_FUNC_ATTRIBUTE(const)
- PA_FUNC_ATTRIBUTE(pure)
- PA_FUNC_ATTRIBUTE(cold)
- PA_FUNC_ATTRIBUTE_ERROR
- dnl
- dnl support function sections (if available)
- dnl
- PA_ARG_ENABLED([sections],
- [compile with function/data section support],
- [PA_ADD_CLDFLAGS([-ffunction-sections])
- PA_ADD_CLDFLAGS([-fdata-sections])
- PA_ADD_CLDFLAGS([-Wl,--gc-sections])],
- [])
- dnl
- dnl support LTO
- dnl
- PA_ARG_ENABLED([lto],
- [compile with gcc-style link time optimization],
- [PA_ADD_CLDFLAGS([-flto])
- dnl Note: we use _PROG rather than _TOOL since we are prepending the full
- dnl CC name which ought to already contain the host triplet if needed
- ccbase=`echo "$CC" | awk '{ print $1; }'`
- AC_CHECK_PROGS(CC_AR, [${ccbase}-ar], [$ac_cv_prog_AR])
- AR="$CC_AR"
- AC_CHECK_PROGS(CC_RANLIB, [${ccbase}-ranlib], [$ac_cv_prog_RANLIB])
- RANLIB="$CC_RANLIB"], [])
- dnl
- dnl support sanitizers (if available)
- dnl
- PA_ARG_ENABLED([sanitizer],
- [compile with sanitizers enabled],
- [PA_ADD_CFLAGS([-fno-omit-frame-pointer])
- PA_ADD_CLDFLAGS([-fsanitize=address])
- PA_ADD_CLDFLAGS([-fsanitize=undefined])])
- dnl
- dnl Don't make symbols visible, there is no point and it just
- dnl makes the code slower.
- dnl
- PA_ADD_CLDFLAGS([-fvisibility=hidden])
- dnl If we have gcc, add appropriate code cleanliness options
- PA_ADD_CFLAGS([-W])
- PA_ADD_CFLAGS([-Wall])
- PA_ADD_CFLAGS([-pedantic])
- dnl LLVM doesn't error out on invalid -W options unless this option is
- dnl specified first. Enable this so this script can actually discover
- dnl which -W options are possible for this compiler.
- PA_ADD_CFLAGS([-Werror=unknown-warning-option])
- dnl Suppress format warning on Windows targets due to their <inttypes.h>
- PA_ADD_CFLAGS([-Wpedantic-ms-format],[-Wno-pedantic-ms-format])
- PA_ADD_CFLAGS([-Wc90-c99-compat])
- PA_ADD_CFLAGS([-Wlong-long],[-Wno-long-long])
- dnl This is needed because we intentionally expect strncpy() to fill
- dnl in a zero-padded (not zero-terminated) buffer in several backends
- PA_ADD_CFLAGS([-Wstringop-truncation],[-Wno-stringop-truncation])
- dnl This is needed because we assume 2's-completement signed arithmetic;
- dnl on compilers with gcc-like command line syntax we pass the -fwrapv
- dnl option for exactly that reason.
- PA_ADD_CFLAGS([-Wshift-negative-value],[-Wno-shift-negative-value])
- dnl PA_ADD_CFLAGS([-Wwrite-strings])
- PA_ARG_ENABLED([werror],
- [compile with -Werror to error out on any warning],
- [PA_ADD_CFLAGS([-Werror])],
- [PA_ADD_CFLAGS([-Werror=implicit])
- PA_ADD_CFLAGS([-Werror=missing-braces])
- PA_ADD_CFLAGS([-Werror=return-type])
- PA_ADD_CFLAGS([-Werror=trigraphs])
- PA_ADD_CFLAGS([-Werror=pointer-arith])
- PA_ADD_CFLAGS([-Werror=strict-prototypes])
- PA_ADD_CFLAGS([-Werror=missing-prototypes])
- PA_ADD_CFLAGS([-Werror=missing-declarations])
- PA_ADD_CFLAGS([-Werror=comment])
- PA_ADD_CFLAGS([-Werror=vla])]
- )
- dnl
- dnl On some versions of gcc, -Werror=missing-prototypes causes problems
- dnl with C99-style external inlines. Test this *after* adding the -Werror
- dnl options.
- dnl
- PA_CHECK_BAD_STDC_INLINE
- dnl
- dnl support ccache
- dnl
- PA_ARG_ENABLED([ccache], [compile with ccache], [CC="ccache $CC"], [])
- AC_OUTPUT_COMMANDS([mkdir -p config nasmlib nsis output stdlib x86 asm disasm rdoff macros common])
- AC_OUTPUT(Makefile doc/Makefile)
|