bitcoin_secp.m4 raw
1 dnl escape "$0x" below using the m4 quadrigaph @S|@, and escape it again with a \ for the shell.
2 AC_DEFUN([SECP_X86_64_ASM_CHECK],[
3 AC_MSG_CHECKING(for x86_64 assembly availability)
4 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
5 #include <stdint.h>]],[[
6 uint64_t a = 11, tmp = 0;
7 __asm__ __volatile__("movq \@S|@0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx");
8 ]])], [has_x86_64_asm=yes], [has_x86_64_asm=no])
9 AC_MSG_RESULT([$has_x86_64_asm])
10 ])
11
12 AC_DEFUN([SECP_ARM32_ASM_CHECK], [
13 AC_MSG_CHECKING(for ARM32 assembly availability)
14 SECP_ARM32_ASM_CHECK_CFLAGS_saved_CFLAGS="$CFLAGS"
15 CFLAGS="-x assembler"
16 AC_LINK_IFELSE([AC_LANG_SOURCE([[
17 .syntax unified
18 .eabi_attribute 24, 1
19 .eabi_attribute 25, 1
20 .text
21 .global main
22 main:
23 ldr r0, =0x002A
24 mov r7, #1
25 swi 0
26 ]])], [has_arm32_asm=yes], [has_arm32_asm=no])
27 AC_MSG_RESULT([$has_arm32_asm])
28 CFLAGS="$SECP_ARM32_ASM_CHECK_CFLAGS_saved_CFLAGS"
29 ])
30
31 AC_DEFUN([SECP_VALGRIND_CHECK],[
32 AC_MSG_CHECKING([for valgrind support])
33 if test x"$has_valgrind" != x"yes"; then
34 CPPFLAGS_TEMP="$CPPFLAGS"
35 CPPFLAGS="$VALGRIND_CPPFLAGS $CPPFLAGS"
36 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
37 #include <valgrind/memcheck.h>
38 ]], [[
39 #if defined(NVALGRIND)
40 # error "Valgrind does not support this platform."
41 #endif
42 ]])], [has_valgrind=yes])
43 CPPFLAGS="$CPPFLAGS_TEMP"
44 fi
45 AC_MSG_RESULT($has_valgrind)
46 ])
47
48 AC_DEFUN([SECP_MSAN_CHECK], [
49 AC_MSG_CHECKING(whether MemorySanitizer is enabled)
50 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
51 #if defined(__has_feature)
52 # if __has_feature(memory_sanitizer)
53 /* MemorySanitizer is enabled. */
54 # elif
55 # error "MemorySanitizer is disabled."
56 # endif
57 #else
58 # error "__has_feature is not defined."
59 #endif
60 ]])], [msan_enabled=yes], [msan_enabled=no])
61 AC_MSG_RESULT([$msan_enabled])
62 ])
63
64 dnl SECP_TRY_APPEND_CFLAGS(flags, VAR)
65 dnl Append flags to VAR if CC accepts them.
66 AC_DEFUN([SECP_TRY_APPEND_CFLAGS], [
67 AC_MSG_CHECKING([if ${CC} supports $1])
68 SECP_TRY_APPEND_CFLAGS_saved_CFLAGS="$CFLAGS"
69 CFLAGS="$1 $CFLAGS"
70 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], [flag_works=yes], [flag_works=no])
71 AC_MSG_RESULT($flag_works)
72 CFLAGS="$SECP_TRY_APPEND_CFLAGS_saved_CFLAGS"
73 if test x"$flag_works" = x"yes"; then
74 $2="$$2 $1"
75 fi
76 unset flag_works
77 AC_SUBST($2)
78 ])
79
80 dnl SECP_SET_DEFAULT(VAR, default, default-dev-mode)
81 dnl Set VAR to default or default-dev-mode, depending on whether dev mode is enabled
82 AC_DEFUN([SECP_SET_DEFAULT], [
83 if test "${enable_dev_mode+set}" != set; then
84 AC_MSG_ERROR([[Set enable_dev_mode before calling SECP_SET_DEFAULT]])
85 fi
86 if test x"$enable_dev_mode" = x"yes"; then
87 $1="$3"
88 else
89 $1="$2"
90 fi
91 ])
92