1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-18 13:44:19 +03:00

aio: Add liburing dependency

Will be used in a subsequent commit, to implement io_method=io_uring. Kept
separate for easier review.

Reviewed-by: Noah Misch <noah@leadboat.com>
Discussion: https://postgr.es/m/uvrtrknj4kdytuboidbhwclo4gxhswwcpgadptsjvjqcluzmah%40brqs62irg4dt
This commit is contained in:
Andres Freund 2025-03-18 14:40:05 -04:00
parent f056f75daf
commit 8eadd5c73c
10 changed files with 218 additions and 4 deletions

View File

@ -471,6 +471,7 @@ task:
--enable-cassert --enable-injection-points --enable-debug \
--enable-tap-tests --enable-nls \
--with-segsize-blocks=6 \
--with-liburing \
\
${LINUX_CONFIGURE_FEATURES} \
\

139
configure vendored
View File

@ -712,6 +712,9 @@ LIBCURL_LIBS
LIBCURL_CFLAGS
with_libcurl
with_uuid
LIBURING_LIBS
LIBURING_CFLAGS
with_liburing
with_readline
with_systemd
with_selinux
@ -865,6 +868,7 @@ with_selinux
with_systemd
with_readline
with_libedit_preferred
with_liburing
with_uuid
with_ossp_uuid
with_libcurl
@ -898,6 +902,8 @@ PKG_CONFIG_PATH
PKG_CONFIG_LIBDIR
ICU_CFLAGS
ICU_LIBS
LIBURING_CFLAGS
LIBURING_LIBS
LIBCURL_CFLAGS
LIBCURL_LIBS
XML2_CONFIG
@ -1578,6 +1584,7 @@ Optional Packages:
--without-readline do not use GNU Readline nor BSD Libedit for editing
--with-libedit-preferred
prefer BSD Libedit over GNU Readline
--with-liburing build with io_uring support, for asynchronous I/O
--with-uuid=LIB build contrib/uuid-ossp using LIB (bsd,e2fs,ossp)
--with-ossp-uuid obsolete spelling of --with-uuid=ossp
--with-libcurl build with libcurl support
@ -1614,6 +1621,10 @@ Some influential environment variables:
path overriding pkg-config's built-in search path
ICU_CFLAGS C compiler flags for ICU, overriding pkg-config
ICU_LIBS linker flags for ICU, overriding pkg-config
LIBURING_CFLAGS
C compiler flags for LIBURING, overriding pkg-config
LIBURING_LIBS
linker flags for LIBURING, overriding pkg-config
LIBCURL_CFLAGS
C compiler flags for LIBCURL, overriding pkg-config
LIBCURL_LIBS
@ -8692,6 +8703,134 @@ fi
#
# liburing
#
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with liburing support" >&5
$as_echo_n "checking whether to build with liburing support... " >&6; }
# Check whether --with-liburing was given.
if test "${with_liburing+set}" = set; then :
withval=$with_liburing;
case $withval in
yes)
$as_echo "#define USE_LIBURING 1" >>confdefs.h
;;
no)
:
;;
*)
as_fn_error $? "no argument expected for --with-liburing option" "$LINENO" 5
;;
esac
else
with_liburing=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_liburing" >&5
$as_echo "$with_liburing" >&6; }
if test "$with_liburing" = yes; then
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for liburing" >&5
$as_echo_n "checking for liburing... " >&6; }
if test -n "$LIBURING_CFLAGS"; then
pkg_cv_LIBURING_CFLAGS="$LIBURING_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liburing\""; } >&5
($PKG_CONFIG --exists --print-errors "liburing") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_LIBURING_CFLAGS=`$PKG_CONFIG --cflags "liburing" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test -n "$LIBURING_LIBS"; then
pkg_cv_LIBURING_LIBS="$LIBURING_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"liburing\""; } >&5
($PKG_CONFIG --exists --print-errors "liburing") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_LIBURING_LIBS=`$PKG_CONFIG --libs "liburing" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test $pkg_failed = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
LIBURING_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "liburing" 2>&1`
else
LIBURING_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "liburing" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$LIBURING_PKG_ERRORS" >&5
as_fn_error $? "Package requirements (liburing) were not met:
$LIBURING_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables LIBURING_CFLAGS
and LIBURING_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
Alternatively, you may set the environment variables LIBURING_CFLAGS
and LIBURING_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
To get pkg-config, see <http://pkg-config.freedesktop.org/>.
See \`config.log' for more details" "$LINENO" 5; }
else
LIBURING_CFLAGS=$pkg_cv_LIBURING_CFLAGS
LIBURING_LIBS=$pkg_cv_LIBURING_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
fi
fi
#
# UUID library

View File

@ -975,6 +975,18 @@ AC_SUBST(with_readline)
PGAC_ARG_BOOL(with, libedit-preferred, no,
[prefer BSD Libedit over GNU Readline])
#
# liburing
#
AC_MSG_CHECKING([whether to build with liburing support])
PGAC_ARG_BOOL(with, liburing, no, [build with io_uring support, for asynchronous I/O],
[AC_DEFINE([USE_LIBURING], 1, [Define to build with io_uring support. (--with-liburing)])])
AC_MSG_RESULT([$with_liburing])
AC_SUBST(with_liburing)
if test "$with_liburing" = yes; then
PKG_CHECK_MODULES(LIBURING, liburing)
fi
#
# UUID library

View File

@ -1156,6 +1156,24 @@ build-postgresql:
</listitem>
</varlistentry>
<varlistentry id="configure-option-with-liburing">
<term><option>--with-liburing</option></term>
<listitem>
<para>
Build with liburing, enabling io_uring support for asynchronous I/O.
</para>
<para>
To detect the required compiler and linker options, PostgreSQL will
query <command>pkg-config</command>.
</para>
<para>
To use a liburing installation that is in an unusual location, you
can set <command>pkg-config</command>-related environment
variables (see its documentation).
</para>
</listitem>
</varlistentry>
<varlistentry id="configure-option-with-libxml">
<term><option>--with-libxml</option></term>
<listitem>
@ -2611,6 +2629,22 @@ ninja install
</listitem>
</varlistentry>
<varlistentry id="configure-with-liburing-meson">
<term><option>-Dliburing={ auto | enabled | disabled }</option></term>
<listitem>
<para>
Build with liburing, enabling io_uring support for asynchronous I/O.
Defaults to auto.
</para>
<para>
To use a liburing installation that is in an unusual location, you
can set <command>pkg-config</command>-related environment
variables (see its documentation).
</para>
</listitem>
</varlistentry>
<varlistentry id="configure-with-libxml-meson">
<term><option>-Dlibxml={ auto | enabled | disabled }</option></term>
<listitem>

View File

@ -944,6 +944,18 @@ endif
###############################################################
# Library: liburing
###############################################################
liburingopt = get_option('liburing')
liburing = dependency('liburing', required: liburingopt)
if liburing.found()
cdata.set('USE_LIBURING', 1)
endif
###############################################################
# Library: libxml
###############################################################
@ -3164,6 +3176,7 @@ backend_both_deps += [
icu_i18n,
ldap,
libintl,
liburing,
libxml,
lz4,
pam,
@ -3819,6 +3832,7 @@ if meson.version().version_compare('>=0.57')
'icu': icu,
'ldap': ldap,
'libcurl': libcurl,
'liburing': liburing,
'libxml': libxml,
'libxslt': libxslt,
'llvm': llvm,

View File

@ -106,6 +106,9 @@ option('libcurl', type : 'feature', value: 'auto',
option('libedit_preferred', type: 'boolean', value: false,
description: 'Prefer BSD Libedit over GNU Readline')
option('liburing', type : 'feature', value: 'auto',
description: 'io_uring support, for asynchronous I/O')
option('libxml', type: 'feature', value: 'auto',
description: 'XML support')

View File

@ -196,6 +196,7 @@ with_gssapi = @with_gssapi@
with_krb_srvnam = @with_krb_srvnam@
with_ldap = @with_ldap@
with_libcurl = @with_libcurl@
with_liburing = @with_liburing@
with_libxml = @with_libxml@
with_libxslt = @with_libxslt@
with_llvm = @with_llvm@
@ -222,6 +223,9 @@ krb_srvtab = @krb_srvtab@
ICU_CFLAGS = @ICU_CFLAGS@
ICU_LIBS = @ICU_LIBS@
LIBURING_CFLAGS = @LIBURING_CFLAGS@
LIBURING_LIBS = @LIBURING_LIBS@
TCLSH = @TCLSH@
TCL_LIBS = @TCL_LIBS@
TCL_LIB_SPEC = @TCL_LIB_SPEC@
@ -246,7 +250,7 @@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
PG_SYSROOT = @PG_SYSROOT@
override CPPFLAGS := $(ICU_CFLAGS) $(CPPFLAGS)
override CPPFLAGS := $(ICU_CFLAGS) $(LIBURING_CFLAGS) $(CPPFLAGS)
ifdef PGXS
override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS)

View File

@ -43,9 +43,10 @@ OBJS = \
$(top_builddir)/src/common/libpgcommon_srv.a \
$(top_builddir)/src/port/libpgport_srv.a
# We put libpgport and libpgcommon into OBJS, so remove it from LIBS; also add
# libldap and ICU
LIBS := $(filter-out -lpgport -lpgcommon, $(LIBS)) $(LDAP_LIBS_BE) $(ICU_LIBS)
# We put libpgport and libpgcommon into OBJS, so remove it from LIBS.
LIBS := $(filter-out -lpgport -lpgcommon, $(LIBS))
# The backend conditionally needs libraries that most executables don't need.
LIBS += $(LDAP_LIBS_BE) $(ICU_LIBS) $(LIBURING_LIBS)
# The backend doesn't need everything that's in LIBS, however
LIBS := $(filter-out -lreadline -ledit -ltermcap -lncurses -lcurses, $(LIBS))

View File

@ -672,6 +672,9 @@
/* Define to 1 to build with libcurl support. (--with-libcurl) */
#undef USE_LIBCURL
/* Define to build with io_uring support. (--with-liburing) */
#undef USE_LIBURING
/* Define to 1 to build with XML support. (--with-libxml) */
#undef USE_LIBXML

View File

@ -199,6 +199,8 @@ pgxs_empty = [
'PTHREAD_CFLAGS', 'PTHREAD_LIBS',
'ICU_LIBS',
'LIBURING_CFLAGS', 'LIBURING_LIBS',
]
if host_system == 'windows' and cc.get_argument_syntax() != 'msvc'
@ -230,6 +232,7 @@ pgxs_deps = {
'icu': icu,
'ldap': ldap,
'libcurl': libcurl,
'liburing': liburing,
'libxml': libxml,
'libxslt': libxslt,
'llvm': llvm,