| 1 | dnl |
| 2 | dnl Copyright 2000, 2001, 2002, 2012-2023 Free Software Foundation, Inc. |
| 3 | dnl |
| 4 | dnl This file is part of GNU lightning. |
| 5 | dnl |
| 6 | dnl GNU lightning is free software; you can redistribute it and/or modify it |
| 7 | dnl under the terms of the GNU Lesser General Public License as published |
| 8 | dnl by the Free Software Foundation; either version 3, or (at your option) |
| 9 | dnl any later version. |
| 10 | dnl |
| 11 | dnl GNU lightning is distributed in the hope that it will be useful, but |
| 12 | dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
| 13 | dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public |
| 14 | dnl License for more details. |
| 15 | dnl |
| 16 | |
| 17 | AC_PREREQ([2.71]) |
| 18 | AC_INIT([GNU lightning],[2.2.2],[pcpa@gnu.org],[lightning]) |
| 19 | AC_CONFIG_AUX_DIR([build-aux]) |
| 20 | AC_CANONICAL_TARGET |
| 21 | AC_CONFIG_SRCDIR([Makefile.am]) |
| 22 | AM_INIT_AUTOMAKE([dist-bzip2]) |
| 23 | m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) |
| 24 | AC_CONFIG_MACRO_DIR([m4]) |
| 25 | |
| 26 | AC_CONFIG_HEADERS([config.h]) |
| 27 | |
| 28 | AC_PROG_CC |
| 29 | gl_EARLY |
| 30 | AM_PROG_AR |
| 31 | LT_INIT |
| 32 | gl_INIT |
| 33 | |
| 34 | case "$target_cpu" in |
| 35 | ia64) |
| 36 | case "$host_os" in |
| 37 | # Only supported mode |
| 38 | *hpux*) |
| 39 | LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -mlp64" ;; |
| 40 | *) ;; |
| 41 | esac ;; |
| 42 | *mips*) |
| 43 | case "$host_os" in |
| 44 | # (Hack) Flags to pass configure with gcc 3.x |
| 45 | # Should not set LIGHTNINT_CFLAGS |
| 46 | *irix*) |
| 47 | CFLAGS="$CFLAGS -D__c99 -Drestrict=";; |
| 48 | *) ;; |
| 49 | esac ;; |
| 50 | alpha*) |
| 51 | case "$host_os" in |
| 52 | osf*) |
| 53 | # Get proper varargs and mmap prototypes and definitions |
| 54 | CFLAGS="$CFLAGS -D_ANSI_C_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_OSF_SOURCE -D_POSIX_C_SOURCE=199309L" |
| 55 | # Want to generate NaN with 0.0/0.0 and Inf with 1.0/0.0 |
| 56 | if test x$GCC = "xyes"; then |
| 57 | CFLAGS="$CFLAGS -mieee" |
| 58 | else |
| 59 | CFLAGS="$CFLAGS -ieee_with_no_inexact" |
| 60 | fi ;; |
| 61 | *) ;; |
| 62 | esac ;; |
| 63 | aarch64) |
| 64 | case "$host_os" in |
| 65 | darwin*) |
| 66 | LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DPACKED_STACK=1" ;; |
| 67 | *) ;; |
| 68 | esac ;; |
| 69 | *) ;; |
| 70 | esac |
| 71 | |
| 72 | AC_CHECK_FUNCS(mmap mremap ffsl getopt_long_only isnan isinf,,) |
| 73 | |
| 74 | AC_CHECK_HEADERS([getopt.h stdint.h],,,) |
| 75 | |
| 76 | AC_ARG_ENABLE(disassembler, |
| 77 | AS_HELP_STRING([--enable-disassembler], |
| 78 | [Enable jit disassembler using binutils]), |
| 79 | [DISASSEMBLER=$enableval], [DISASSEMBLER=auto]) |
| 80 | if test "x$DISASSEMBLER" != "xno"; then |
| 81 | |
| 82 | AC_CHECK_LIB(iberty, htab_try_create, , |
| 83 | [HAVE_IBERTY="no"]) |
| 84 | AC_CHECK_LIB(bfd, bfd_init, , |
| 85 | [HAVE_BFD="no"]) |
| 86 | AC_CHECK_LIB(z, compressBound, , |
| 87 | [HAVE_Z="no"]) |
| 88 | AC_CHECK_LIB(opcodes, init_disassemble_info, , |
| 89 | [HAVE_OPCODES="no"]) |
| 90 | |
| 91 | if test "x$HAVE_IBERTY" = "xno"; then |
| 92 | if test "x$DISASSEMBLER" = "xyes"; then |
| 93 | AC_MSG_ERROR([libiberty not found]) |
| 94 | else |
| 95 | AC_MSG_WARN([libiberty not found]) |
| 96 | DISASSEMBLER="no" |
| 97 | fi |
| 98 | fi |
| 99 | |
| 100 | if test "x$HAVE_BFD" = "xno"; then |
| 101 | if test "x$DISASSEMBLER" = "xyes"; then |
| 102 | AC_MSG_ERROR([binutils BFD not found, see http://www.gnu.org/software/binutils/]) |
| 103 | else |
| 104 | AC_MSG_WARN([binutils BFD not found, see http://www.gnu.org/software/binutils/]) |
| 105 | DISASSEMBLER="no" |
| 106 | fi |
| 107 | fi |
| 108 | |
| 109 | if test "x$HAVE_Z" = "xno"; then |
| 110 | if test "x$DISASSEMBLER" = "xyes"; then |
| 111 | AC_MSG_ERROR([zlib not found, see https://zlib.net/]) |
| 112 | else |
| 113 | AC_MSG_WARN([zlib not found, see https://zlib.net/]) |
| 114 | DISASSEMBLER="no" |
| 115 | fi |
| 116 | fi |
| 117 | |
| 118 | if test "x$HAVE_OPCODES" = "xno"; then |
| 119 | if test "x$DISASSEMBLER" = "xyes"; then |
| 120 | AC_MSG_ERROR([binutils opcodes not found, see https://www.gnu.org/software/binutils/]) |
| 121 | else |
| 122 | AC_MSG_WARN([binutils opcodes not found, see https://www.gnu.org/software/binutils/]) |
| 123 | DISASSEMBLER="no" |
| 124 | fi |
| 125 | fi |
| 126 | |
| 127 | fi |
| 128 | AM_CONDITIONAL(with_disassembler, [test "x$DISASSEMBLER" != "xno"]) |
| 129 | if test "x$DISASSEMBLER" != "xno"; then |
| 130 | LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DDISASSEMBLER=1" |
| 131 | save_CFLAGS=$CFLAGS |
| 132 | CFLAGS="$CFLAGS -D_GNU_SOURCE" |
| 133 | AC_COMPILE_IFELSE([AC_LANG_SOURCE( |
| 134 | #include <dis-asm.h> |
| 135 | int main(int argc, char *argv[]) |
| 136 | { |
| 137 | disassembler_ftype print; |
| 138 | bfd *abfd; |
| 139 | print = disassembler(abfd); |
| 140 | return 0; |
| 141 | } |
| 142 | )], [ac_cv_test_new_disassembler=no],,) |
| 143 | AC_COMPILE_IFELSE([AC_LANG_SOURCE( |
| 144 | #include <dis-asm.h> |
| 145 | int main(int argc, char *argv[]) |
| 146 | { |
| 147 | struct disassemble_info dinfo; |
| 148 | INIT_DISASSEMBLE_INFO(dinfo, NULL, NULL, NULL); |
| 149 | return 0; |
| 150 | } |
| 151 | )], [ac_cv_test_new_disassemble_info=yes],[ac_cv_test_new_disassemble_info=no],) |
| 152 | CFLAGS="$save_CFLAGS" |
| 153 | if test "x$ac_cv_test_new_disassembler" != "xno"; then |
| 154 | LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DBINUTILS_2_29=1" |
| 155 | fi |
| 156 | if test "x$ac_cv_test_new_disassemble_info" != "xno"; then |
| 157 | LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DBINUTILS_2_38=1" |
| 158 | fi |
| 159 | fi |
| 160 | |
| 161 | AC_ARG_ENABLE(devel-disassembler, |
| 162 | AS_HELP_STRING([--enable-devel-disassembler], |
| 163 | [Enable extra disassembly options]), |
| 164 | [DEVEL_DISASSEMBLER=$enableval], [DEVEL_DISASSEMBLER=no]) |
| 165 | if test "x$DEVEL_DISASSEMBLER" != "xno"; then |
| 166 | if test "x$DISASSEMBLER" = "xno"; then |
| 167 | AC_MSG_ERROR(devel-disassembler needs disassembler enabled) |
| 168 | fi |
| 169 | LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DDEVEL_DISASSEMBLER=1" |
| 170 | fi |
| 171 | |
| 172 | # This option is only useful during development. |
| 173 | AC_ARG_ENABLE(devel-get-jit-size, |
| 174 | AS_HELP_STRING([--enable-devel-get-jit-size], |
| 175 | [Devel mode to regenerate jit size information]), |
| 176 | [GET_JIT_SIZE=$enableval], [GET_JIT_SIZE=no]) |
| 177 | AM_CONDITIONAL(get_jit_size, [test $GET_JIT_SIZE = yes]) |
| 178 | |
| 179 | AC_ARG_ENABLE(assertions, |
| 180 | AS_HELP_STRING([--enable-assertions], |
| 181 | [Enable runtime code generation assertions]), |
| 182 | [DEBUG=$enableval], [DEBUG=auto]) |
| 183 | |
| 184 | # This option might be made default in the future |
| 185 | # Currently it is only useful to ensure existing code will work |
| 186 | # if PACKED_STACK is also defined. |
| 187 | AC_ARG_ENABLE(devel-strong-type-checking, |
| 188 | AS_HELP_STRING([--enable-devel-strong-type-checking], |
| 189 | [Devel mode for strong type checking]), |
| 190 | [STRONG_TYPE_CHECKING=$enableval], [STRONG_TYPE_CHECKING=no]) |
| 191 | if test "x$DEBUG" = xyes -o x"$STRONG_TYPE_CHECKING" = xyes; then |
| 192 | LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DDEBUG=1" |
| 193 | else |
| 194 | LIGHTNING_CFLAGS="$LIGHTNING_CFLAGS -DNDEBUG" |
| 195 | DEBUG=no |
| 196 | fi |
| 197 | AM_CONDITIONAL(strong_type_checking, [test $STRONG_TYPE_CHECKING = yes]) |
| 198 | |
| 199 | AC_CHECK_LIB(dl, dlopen, [HAVE_LIBDL="yes"]) |
| 200 | AC_CHECK_LIB(dld, dlopen, [HAVE_LIBDLD="yes"]) |
| 201 | |
| 202 | if test "x$HAVE_LIBDL" = xyes; then |
| 203 | SHLIB="-ldl"; |
| 204 | elif test "x$HAVE_LIBDLD" = xyes; then |
| 205 | SHLIB="-ldld"; |
| 206 | else |
| 207 | SHLIB=""; |
| 208 | fi |
| 209 | AC_SUBST(SHLIB) |
| 210 | |
| 211 | cpu= |
| 212 | case "$target_cpu" in |
| 213 | i?86|x86_64|amd64) cpu=x86 ;; |
| 214 | *arm*) cpu=arm ;; |
| 215 | *mips*) cpu=mips ;; |
| 216 | *powerpc*) cpu=ppc ;; |
| 217 | *sparc*) cpu=sparc ;; |
| 218 | ia64) cpu=ia64 ;; |
| 219 | hppa*) cpu=hppa ;; |
| 220 | aarch64) cpu=aarch64 ;; |
| 221 | s390*) cpu=s390 ;; |
| 222 | alpha*) cpu=alpha ;; |
| 223 | riscv*) cpu=riscv ;; |
| 224 | loongarch*) cpu=loongarch ;; |
| 225 | *) ;; |
| 226 | esac |
| 227 | AM_CONDITIONAL(cpu_arm, [test cpu-$cpu = cpu-arm]) |
| 228 | AM_CONDITIONAL(cpu_mips, [test cpu-$cpu = cpu-mips]) |
| 229 | AM_CONDITIONAL(cpu_ppc, [test cpu-$cpu = cpu-ppc]) |
| 230 | AM_CONDITIONAL(cpu_sparc, [test cpu-$cpu = cpu-sparc]) |
| 231 | AM_CONDITIONAL(cpu_x86, [test cpu-$cpu = cpu-x86]) |
| 232 | AM_CONDITIONAL(cpu_ia64, [test cpu-$cpu = cpu-ia64]) |
| 233 | AM_CONDITIONAL(cpu_hppa, [test cpu-$cpu = cpu-hppa]) |
| 234 | AM_CONDITIONAL(cpu_aarch64, [test cpu-$cpu = cpu-aarch64]) |
| 235 | AM_CONDITIONAL(cpu_s390, [test cpu-$cpu = cpu-s390]) |
| 236 | AM_CONDITIONAL(cpu_alpha, [test cpu-$cpu = cpu-alpha]) |
| 237 | AM_CONDITIONAL(cpu_riscv, [test cpu-$cpu = cpu-riscv]) |
| 238 | AM_CONDITIONAL(cpu_loongarch, [test cpu-$cpu = cpu-loongarch]) |
| 239 | |
| 240 | # Test x87 if both, x87 and sse2 available |
| 241 | ac_cv_test_x86_x87= |
| 242 | # Test arm instruction set if thumb instruction set available |
| 243 | ac_cv_test_arm_arm= |
| 244 | # Test sofware float if vfp available and not using hard float abi |
| 245 | ac_cv_test_arm_swf= |
| 246 | |
| 247 | save_CFLAGS=$CFLAGS |
| 248 | CFLAGS="$CFLAGS -D_GNU_SOURCE" |
| 249 | if test x$cpu = x; then |
| 250 | AC_MSG_ERROR([cpu $target_cpu not supported]) |
| 251 | elif test $cpu = x86; then |
| 252 | AC_RUN_IFELSE([AC_LANG_SOURCE([[ |
| 253 | int main(void) { |
| 254 | int ac, flags; |
| 255 | unsigned int eax, ebx, ecx, edx; |
| 256 | if (sizeof(long) == 8) |
| 257 | return 1; |
| 258 | __asm__ volatile ("pushfl;\n\t" |
| 259 | "popl %0;\n\t" |
| 260 | "movl \$0x240000, %1;\n\t" |
| 261 | "xorl %0, %1;\n\t" |
| 262 | "pushl %1;\n\t" |
| 263 | "popfl;\n\t" |
| 264 | "pushfl;\n\t" |
| 265 | "popl %1;\n\t" |
| 266 | "xorl %0, %1;\n\t" |
| 267 | "pushl %0;\n\t" |
| 268 | "popfl" |
| 269 | : "=r" (flags), "=r" (ac)); |
| 270 | if ((ac & (1 << 21)) == 0) |
| 271 | return 1; |
| 272 | __asm__ volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" |
| 273 | : "=a" (eax), "=r" (ebx), |
| 274 | "=c" (ecx), "=d" (edx) |
| 275 | : "0" (1)); |
| 276 | return (edx & 1 << 26) ? 0 : 1; |
| 277 | } |
| 278 | ]])],[ac_cv_test_x86_x87=yes],[],[ac_cv_test_x86_x87=no]) |
| 279 | elif test $cpu = arm; then |
| 280 | AC_RUN_IFELSE([AC_LANG_SOURCE([[ |
| 281 | #include <stdio.h> |
| 282 | int main(void) { |
| 283 | #if defined(__linux__) |
| 284 | FILE *fp; |
| 285 | char buf[128]; |
| 286 | if ((fp = fopen("/proc/cpuinfo", "r")) == NULL) |
| 287 | return 1; |
| 288 | while (fgets(buf, sizeof(buf), fp)) { |
| 289 | if (strncmp(buf, "Features\t:", 10) == 0 && |
| 290 | strstr(buf + 10, "thumb")) { |
| 291 | fclose(fp); |
| 292 | return 0; |
| 293 | } |
| 294 | } |
| 295 | fclose(fp); |
| 296 | #elif defined(__thumb2__) |
| 297 | return 0; |
| 298 | #endif |
| 299 | return 1; |
| 300 | } |
| 301 | ]])],[ac_cv_test_arm_arm=yes],[],[ac_cv_test_arm_arm=no]) |
| 302 | AC_RUN_IFELSE([AC_LANG_SOURCE([[ |
| 303 | #include <stdio.h> |
| 304 | int main(void) { |
| 305 | #if defined(__linux__) |
| 306 | FILE *fp; |
| 307 | char buf[128]; |
| 308 | # if !defined(__ARM_PCS_VFP) |
| 309 | if ((fp = fopen("/proc/cpuinfo", "r")) == NULL) |
| 310 | return 1; |
| 311 | while (fgets(buf, sizeof(buf), fp)) { |
| 312 | if (strncmp(buf, "Features\t:", 10) == 0 && |
| 313 | strstr(buf + 10, "vfp")) { |
| 314 | fclose(fp); |
| 315 | return 0; |
| 316 | } |
| 317 | } |
| 318 | fclose(fp); |
| 319 | # endif |
| 320 | #endif |
| 321 | return 1; |
| 322 | } |
| 323 | ]])],[ac_cv_test_arm_swf=yes],[],[ac_cv_test_arm_swf=no]) |
| 324 | elif test $cpu = ppc; then |
| 325 | if test "x$DISASSEMBLER" != "xno"; then |
| 326 | save_LIBS="$LIBS" |
| 327 | LIBS="$LIBS $SHLIB" |
| 328 | AC_CHECK_FUNCS(disassemble_init_for_target disassemble_init_powerpc) |
| 329 | LIBS="$save_LIBS" |
| 330 | fi |
| 331 | fi |
| 332 | CFLAGS=$save_CFLAGS |
| 333 | |
| 334 | AM_CONDITIONAL(test_x86_x87, [test x$ac_cv_test_x86_x87 = xyes]) |
| 335 | AM_CONDITIONAL(test_arm_arm, [test x$ac_cv_test_arm_arm = xyes]) |
| 336 | AM_CONDITIONAL(test_arm_swf, [test x$ac_cv_test_arm_swf = xyes]) |
| 337 | |
| 338 | AM_CONDITIONAL(test_nodata, [test cpu-$cpu = cpu-mips -o cpu-$cpu = cpu-ppc -o cpu-$cpu = cpu-sparc -o cpu-$cpu = cpu-x86 -o cpu-$cpu = cpu-ia64 -o cpu-$cpu = cpu-hppa -o cpu-$cpu = cpu-s390 -o cpu-$cpu = cpu-alpha]) |
| 339 | |
| 340 | if test $cpu = arm; then |
| 341 | AC_CHECK_LIB(m, sqrtf, , |
| 342 | [AC_MSG_ERROR([sqrtf required but not available])]) |
| 343 | fi |
| 344 | AC_SUBST(cpu) |
| 345 | |
| 346 | AC_SUBST([LIGHTNING_CFLAGS]) |
| 347 | |
| 348 | if test $ac_cv_header_stdint_h = yes; then |
| 349 | AC_SUBST(MAYBE_INCLUDE_STDINT_H, ["#include <stdint.h>"]) |
| 350 | fi |
| 351 | |
| 352 | AC_CONFIG_FILES([Makefile |
| 353 | lightning.pc |
| 354 | gnulib-lib/Makefile |
| 355 | doc/Makefile |
| 356 | include/Makefile |
| 357 | include/lightning/Makefile |
| 358 | include/lightning.h |
| 359 | lib/Makefile |
| 360 | check/Makefile]) |
| 361 | AC_OUTPUT |