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