xref: /aosp_15_r20/external/ublksrv/configure.ac (revision 94c4a1e103eb1715230460aab379dff275992c20)
1*94c4a1e1SFrank Piva# ublksrv
2*94c4a1e1SFrank Piva# Copyright (C) Ming Lei
3*94c4a1e1SFrank Piva# SPDX-License-Identifier: MIT or GPL-2.0-only
4*94c4a1e1SFrank Piva
5*94c4a1e1SFrank PivaAC_INIT([ublksrv],
6*94c4a1e1SFrank Piva		m4_esyscmd(utils/genver.sh | tr -d '\n'),
7*94c4a1e1SFrank Piva		[https://github.com/ming1/ubdsrv],,
8*94c4a1e1SFrank Piva		[https://github.com/ming1/ubdsrv])
9*94c4a1e1SFrank Piva
10*94c4a1e1SFrank PivaAC_CONFIG_MACRO_DIR([m4])
11*94c4a1e1SFrank Pivam4_ifdef([AC_USE_SYSTEM_EXTENSIONS],[],
12*94c4a1e1SFrank Piva         [m4_define([AC_USE_SYSTEM_EXTENSIONS],[])])
13*94c4a1e1SFrank PivaAC_USE_SYSTEM_EXTENSIONS
14*94c4a1e1SFrank PivaAC_SYS_LARGEFILE
15*94c4a1e1SFrank Piva
16*94c4a1e1SFrank PivaAM_SILENT_RULES([yes])
17*94c4a1e1SFrank Piva
18*94c4a1e1SFrank Pivadnl NB: Do not [quote] this parameter.
19*94c4a1e1SFrank PivaAM_INIT_AUTOMAKE([foreign subdir-objects])
20*94c4a1e1SFrank PivaLT_INIT
21*94c4a1e1SFrank Piva
22*94c4a1e1SFrank PivaAC_CANONICAL_HOST
23*94c4a1e1SFrank Piva
24*94c4a1e1SFrank PivaAC_PROG_SED
25*94c4a1e1SFrank Piva
26*94c4a1e1SFrank Pivadnl Check for basic C environment.
27*94c4a1e1SFrank PivaAC_PROG_CC
28*94c4a1e1SFrank PivaAC_PROG_INSTALL
29*94c4a1e1SFrank PivaAC_PROG_CPP
30*94c4a1e1SFrank Piva
31*94c4a1e1SFrank PivaAC_C_PROTOTYPES
32*94c4a1e1SFrank Pivatest "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
33*94c4a1e1SFrank Piva
34*94c4a1e1SFrank PivaAM_PROG_CC_C_O
35*94c4a1e1SFrank Piva
36*94c4a1e1SFrank PivaAX_PTHREAD
37*94c4a1e1SFrank Piva
38*94c4a1e1SFrank Pivadnl Check for C++.
39*94c4a1e1SFrank PivaAC_PROG_CXX
40*94c4a1e1SFrank Piva
41*94c4a1e1SFrank PivaAS_CASE([$CXX],
42*94c4a1e1SFrank Piva  [*clang++*], [ENABLE_CORO_FLAG=""],
43*94c4a1e1SFrank Piva  [*g++*], [ENABLE_CORO_FLAG="-fcoroutines"],
44*94c4a1e1SFrank Piva  [ENABLE_CORO_FLAG=""]
45*94c4a1e1SFrank Piva)
46*94c4a1e1SFrank Piva
47*94c4a1e1SFrank PivaCXXFLAGS="$CXXFLAGS $ENABLE_CORO_FLAG"
48*94c4a1e1SFrank Piva
49*94c4a1e1SFrank Piva
50*94c4a1e1SFrank Pivadnl --enable-gcc-warnings to turn on GCC warnings (for developers).
51*94c4a1e1SFrank PivaAC_ARG_ENABLE([gcc-warnings],
52*94c4a1e1SFrank Piva    [AS_HELP_STRING([--enable-gcc-warnings],
53*94c4a1e1SFrank Piva                    [turn on lots of GCC warnings (for developers)])],
54*94c4a1e1SFrank Piva     [case $enableval in
55*94c4a1e1SFrank Piva      yes|no) ;;
56*94c4a1e1SFrank Piva      *)      AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
57*94c4a1e1SFrank Piva      esac
58*94c4a1e1SFrank Piva      gcc_warnings=$enableval],
59*94c4a1e1SFrank Piva      [gcc_warnings=no]
60*94c4a1e1SFrank Piva)
61*94c4a1e1SFrank Pivaif test "x$gcc_warnings" = "xyes"; then
62*94c4a1e1SFrank Piva    # Enable normal GCC warnings and a few more:
63*94c4a1e1SFrank Piva    #  - Warn about variable length arrays on stack.
64*94c4a1e1SFrank Piva    #  - Warn about large stack frames (since we may be used from threads).
65*94c4a1e1SFrank Piva    #
66*94c4a1e1SFrank Piva    # TODO: Address 'sign-compare' errors and remove -Wno-sign-compare
67*94c4a1e1SFrank Piva    # TODO: Address 'parentheses' errors and remove -Wno-parentheses
68*94c4a1e1SFrank Piva    WARNINGS_CFLAGS="-Wall -Werror -Wuninitialized -Wmaybe-uninitialized -Wno-sign-compare -Wno-parentheses"
69*94c4a1e1SFrank Piva    AC_C_COMPILE_FLAGS([WARNINGS_CFLAGS],
70*94c4a1e1SFrank Piva                       [-Wvla -Wframe-larger-than=5000 -Wstack-usage=10000],
71*94c4a1e1SFrank Piva                       [$CFLAGS -Werror])
72*94c4a1e1SFrank Piva    AC_SUBST([WARNINGS_CFLAGS])
73*94c4a1e1SFrank Pivafi
74*94c4a1e1SFrank Piva
75*94c4a1e1SFrank PivaAC_ARG_ENABLE(
76*94c4a1e1SFrank Piva  debug,
77*94c4a1e1SFrank Piva  AS_HELP_STRING([--enable-debug],[Build a debug version of ublk(default disabled)]),
78*94c4a1e1SFrank Piva  [
79*94c4a1e1SFrank Piva    if test "x$enableval" = "xyes"; then
80*94c4a1e1SFrank Piva      AC_DEFINE(DEBUG, 1, [Define to 1 if you want to build debug version])
81*94c4a1e1SFrank Piva    fi
82*94c4a1e1SFrank Piva  ]
83*94c4a1e1SFrank Piva)
84*94c4a1e1SFrank Piva
85*94c4a1e1SFrank Pivadnl Check for liburing (required).
86*94c4a1e1SFrank PivaPKG_CHECK_MODULES([LIBURING], [liburing >= 2.2])
87*94c4a1e1SFrank Piva
88*94c4a1e1SFrank Pivadnl Check if io_uring_prep_sendmsg_zc which isn't supported on 2.2 yet
89*94c4a1e1SFrank PivaAC_MSG_CHECKING([for io_uring_prep_sendmsg_zc])
90*94c4a1e1SFrank PivaAC_LINK_IFELSE([AC_LANG_PROGRAM([[
91*94c4a1e1SFrank Piva  #include <liburing.h>
92*94c4a1e1SFrank Piva]], [[
93*94c4a1e1SFrank Piva	 int i = IORING_CQE_F_NOTIF;
94*94c4a1e1SFrank Piva]])],
95*94c4a1e1SFrank Piva[AC_MSG_RESULT([yes])
96*94c4a1e1SFrank Piva AM_CONDITIONAL([HAVE_LIBURING_SEND_ZC], true)
97*94c4a1e1SFrank Piva AC_DEFINE([HAVE_LIBURING_SEND_ZC], [1], [Define to 1 if liburing supports send zc])],
98*94c4a1e1SFrank Piva[AC_MSG_RESULT([no])
99*94c4a1e1SFrank Piva AM_CONDITIONAL([HAVE_LIBURING_SEND_ZC], false)])
100*94c4a1e1SFrank Piva
101*94c4a1e1SFrank Piva#gnutls is only for nbd target, borrowed from nbd-client project
102*94c4a1e1SFrank PivaAC_ARG_WITH([gnutls],
103*94c4a1e1SFrank Piva	[AS_HELP_STRING([--without-gnutls],
104*94c4a1e1SFrank Piva		[do not use gnutls])],
105*94c4a1e1SFrank Piva	[],
106*94c4a1e1SFrank Piva	[with_gnutls=check]
107*94c4a1e1SFrank Piva)
108*94c4a1e1SFrank Pivaif test "x$with_gnutls" != "xno"; then
109*94c4a1e1SFrank Piva	PKG_CHECK_MODULES(GnuTLS, [gnutls >= 2.12.0],
110*94c4a1e1SFrank Piva		[HAVE_GNUTLS=1
111*94c4a1e1SFrank Piva		AC_DEFINE(HAVE_GNUTLS, 1, [Define to 1 if you have a GnuTLS version of 2.12 or above])],
112*94c4a1e1SFrank Piva		[if test "x$with_gnutls" = "xyes"; then
113*94c4a1e1SFrank Piva			AC_MSG_ERROR([--with-gnutls given but cannot find gnutls])
114*94c4a1e1SFrank Piva		else
115*94c4a1e1SFrank Piva			HAVE_GNUTLS=0
116*94c4a1e1SFrank Piva			AC_DEFINE(HAVE_GNUTLS, 0)
117*94c4a1e1SFrank Piva		fi]
118*94c4a1e1SFrank Piva	)
119*94c4a1e1SFrank Pivaelse
120*94c4a1e1SFrank Piva	HAVE_GNUTLS=0
121*94c4a1e1SFrank Piva	AC_DEFINE(HAVE_GNUTLS, 0)
122*94c4a1e1SFrank Pivafi
123*94c4a1e1SFrank PivaAM_CONDITIONAL([GNUTLS], [test "x$HAVE_GNUTLS" = "x1"])
124*94c4a1e1SFrank Piva
125*94c4a1e1SFrank PivaAC_ARG_ENABLE(
126*94c4a1e1SFrank Piva  sdp,
127*94c4a1e1SFrank Piva  AS_HELP_STRING([--enable-sdp],[Build a version of nbd-server with support for the Socket Direct Protocol (SDP). Requires you to build and install a kernel with the InfiniBand patches (default disabled)]),
128*94c4a1e1SFrank Piva  [
129*94c4a1e1SFrank Piva    if test "x$enableval" = "xyes"; then
130*94c4a1e1SFrank Piva      AC_DEFINE(WITH_SDP, 1, [Define to 1 if you have and want support for the Socket Direct Protocol])
131*94c4a1e1SFrank Piva    fi
132*94c4a1e1SFrank Piva  ]
133*94c4a1e1SFrank Piva)
134*94c4a1e1SFrank Piva
135*94c4a1e1SFrank PivaAC_ARG_ENABLE(
136*94c4a1e1SFrank Piva  lfs,
137*94c4a1e1SFrank Piva  AS_HELP_STRING([--disable-lfs],[Disable Large File Support (default on)]),
138*94c4a1e1SFrank Piva  [
139*94c4a1e1SFrank Piva    if test "x$enableval" = "xyes" ; then
140*94c4a1e1SFrank Piva      NBD_LFS=1
141*94c4a1e1SFrank Piva    else
142*94c4a1e1SFrank Piva      NBD_LFS=0
143*94c4a1e1SFrank Piva    fi
144*94c4a1e1SFrank Piva  ],
145*94c4a1e1SFrank Piva  [NBD_LFS=1]
146*94c4a1e1SFrank Piva)
147*94c4a1e1SFrank PivaAC_MSG_CHECKING([whether Large File Support should be enabled])
148*94c4a1e1SFrank Pivaif test $NBD_LFS -eq 1; then
149*94c4a1e1SFrank Piva  AC_DEFINE(NBD_LFS,1, [Define to 1 if Large File Support should be enabled])
150*94c4a1e1SFrank Piva  AC_MSG_RESULT([yes])
151*94c4a1e1SFrank Pivaelse
152*94c4a1e1SFrank Piva  AC_DEFINE(NBD_LFS,0)
153*94c4a1e1SFrank Piva  AC_MSG_RESULT([no])
154*94c4a1e1SFrank Pivafi
155*94c4a1e1SFrank Piva
156*94c4a1e1SFrank PivaAC_CHECK_PROGS([DOXYGEN], [doxygen])
157*94c4a1e1SFrank Pivaif test -z "$DOXYGEN"; then
158*94c4a1e1SFrank Piva   AC_MSG_WARN([Doxygen not found - continue without Doxygen support])
159*94c4a1e1SFrank Pivafi
160*94c4a1e1SFrank PivaAM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])
161*94c4a1e1SFrank Piva
162*94c4a1e1SFrank Pivadnl Produce output files.
163*94c4a1e1SFrank PivaAC_CONFIG_HEADERS([config.h])
164*94c4a1e1SFrank Piva
165*94c4a1e1SFrank PivaAC_CONFIG_FILES([Makefile
166*94c4a1e1SFrank Piva                 include/Makefile
167*94c4a1e1SFrank Piva                 lib/Makefile
168*94c4a1e1SFrank Piva                 tests/Makefile
169*94c4a1e1SFrank Piva                 ublksrv.pc])
170*94c4a1e1SFrank Piva
171*94c4a1e1SFrank PivaAC_OUTPUT
172