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