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:
parent
f056f75daf
commit
8eadd5c73c
@ -471,6 +471,7 @@ task:
|
|||||||
--enable-cassert --enable-injection-points --enable-debug \
|
--enable-cassert --enable-injection-points --enable-debug \
|
||||||
--enable-tap-tests --enable-nls \
|
--enable-tap-tests --enable-nls \
|
||||||
--with-segsize-blocks=6 \
|
--with-segsize-blocks=6 \
|
||||||
|
--with-liburing \
|
||||||
\
|
\
|
||||||
${LINUX_CONFIGURE_FEATURES} \
|
${LINUX_CONFIGURE_FEATURES} \
|
||||||
\
|
\
|
||||||
|
139
configure
vendored
139
configure
vendored
@ -712,6 +712,9 @@ LIBCURL_LIBS
|
|||||||
LIBCURL_CFLAGS
|
LIBCURL_CFLAGS
|
||||||
with_libcurl
|
with_libcurl
|
||||||
with_uuid
|
with_uuid
|
||||||
|
LIBURING_LIBS
|
||||||
|
LIBURING_CFLAGS
|
||||||
|
with_liburing
|
||||||
with_readline
|
with_readline
|
||||||
with_systemd
|
with_systemd
|
||||||
with_selinux
|
with_selinux
|
||||||
@ -865,6 +868,7 @@ with_selinux
|
|||||||
with_systemd
|
with_systemd
|
||||||
with_readline
|
with_readline
|
||||||
with_libedit_preferred
|
with_libedit_preferred
|
||||||
|
with_liburing
|
||||||
with_uuid
|
with_uuid
|
||||||
with_ossp_uuid
|
with_ossp_uuid
|
||||||
with_libcurl
|
with_libcurl
|
||||||
@ -898,6 +902,8 @@ PKG_CONFIG_PATH
|
|||||||
PKG_CONFIG_LIBDIR
|
PKG_CONFIG_LIBDIR
|
||||||
ICU_CFLAGS
|
ICU_CFLAGS
|
||||||
ICU_LIBS
|
ICU_LIBS
|
||||||
|
LIBURING_CFLAGS
|
||||||
|
LIBURING_LIBS
|
||||||
LIBCURL_CFLAGS
|
LIBCURL_CFLAGS
|
||||||
LIBCURL_LIBS
|
LIBCURL_LIBS
|
||||||
XML2_CONFIG
|
XML2_CONFIG
|
||||||
@ -1578,6 +1584,7 @@ Optional Packages:
|
|||||||
--without-readline do not use GNU Readline nor BSD Libedit for editing
|
--without-readline do not use GNU Readline nor BSD Libedit for editing
|
||||||
--with-libedit-preferred
|
--with-libedit-preferred
|
||||||
prefer BSD Libedit over GNU Readline
|
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-uuid=LIB build contrib/uuid-ossp using LIB (bsd,e2fs,ossp)
|
||||||
--with-ossp-uuid obsolete spelling of --with-uuid=ossp
|
--with-ossp-uuid obsolete spelling of --with-uuid=ossp
|
||||||
--with-libcurl build with libcurl support
|
--with-libcurl build with libcurl support
|
||||||
@ -1614,6 +1621,10 @@ Some influential environment variables:
|
|||||||
path overriding pkg-config's built-in search path
|
path overriding pkg-config's built-in search path
|
||||||
ICU_CFLAGS C compiler flags for ICU, overriding pkg-config
|
ICU_CFLAGS C compiler flags for ICU, overriding pkg-config
|
||||||
ICU_LIBS linker 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
|
LIBCURL_CFLAGS
|
||||||
C compiler flags for LIBCURL, overriding pkg-config
|
C compiler flags for LIBCURL, overriding pkg-config
|
||||||
LIBCURL_LIBS
|
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
|
# UUID library
|
||||||
|
12
configure.ac
12
configure.ac
@ -975,6 +975,18 @@ AC_SUBST(with_readline)
|
|||||||
PGAC_ARG_BOOL(with, libedit-preferred, no,
|
PGAC_ARG_BOOL(with, libedit-preferred, no,
|
||||||
[prefer BSD Libedit over GNU Readline])
|
[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
|
# UUID library
|
||||||
|
@ -1156,6 +1156,24 @@ build-postgresql:
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</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">
|
<varlistentry id="configure-option-with-libxml">
|
||||||
<term><option>--with-libxml</option></term>
|
<term><option>--with-libxml</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
@ -2611,6 +2629,22 @@ ninja install
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</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">
|
<varlistentry id="configure-with-libxml-meson">
|
||||||
<term><option>-Dlibxml={ auto | enabled | disabled }</option></term>
|
<term><option>-Dlibxml={ auto | enabled | disabled }</option></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
14
meson.build
14
meson.build
@ -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
|
# Library: libxml
|
||||||
###############################################################
|
###############################################################
|
||||||
@ -3164,6 +3176,7 @@ backend_both_deps += [
|
|||||||
icu_i18n,
|
icu_i18n,
|
||||||
ldap,
|
ldap,
|
||||||
libintl,
|
libintl,
|
||||||
|
liburing,
|
||||||
libxml,
|
libxml,
|
||||||
lz4,
|
lz4,
|
||||||
pam,
|
pam,
|
||||||
@ -3819,6 +3832,7 @@ if meson.version().version_compare('>=0.57')
|
|||||||
'icu': icu,
|
'icu': icu,
|
||||||
'ldap': ldap,
|
'ldap': ldap,
|
||||||
'libcurl': libcurl,
|
'libcurl': libcurl,
|
||||||
|
'liburing': liburing,
|
||||||
'libxml': libxml,
|
'libxml': libxml,
|
||||||
'libxslt': libxslt,
|
'libxslt': libxslt,
|
||||||
'llvm': llvm,
|
'llvm': llvm,
|
||||||
|
@ -106,6 +106,9 @@ option('libcurl', type : 'feature', value: 'auto',
|
|||||||
option('libedit_preferred', type: 'boolean', value: false,
|
option('libedit_preferred', type: 'boolean', value: false,
|
||||||
description: 'Prefer BSD Libedit over GNU Readline')
|
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',
|
option('libxml', type: 'feature', value: 'auto',
|
||||||
description: 'XML support')
|
description: 'XML support')
|
||||||
|
|
||||||
|
@ -196,6 +196,7 @@ with_gssapi = @with_gssapi@
|
|||||||
with_krb_srvnam = @with_krb_srvnam@
|
with_krb_srvnam = @with_krb_srvnam@
|
||||||
with_ldap = @with_ldap@
|
with_ldap = @with_ldap@
|
||||||
with_libcurl = @with_libcurl@
|
with_libcurl = @with_libcurl@
|
||||||
|
with_liburing = @with_liburing@
|
||||||
with_libxml = @with_libxml@
|
with_libxml = @with_libxml@
|
||||||
with_libxslt = @with_libxslt@
|
with_libxslt = @with_libxslt@
|
||||||
with_llvm = @with_llvm@
|
with_llvm = @with_llvm@
|
||||||
@ -222,6 +223,9 @@ krb_srvtab = @krb_srvtab@
|
|||||||
ICU_CFLAGS = @ICU_CFLAGS@
|
ICU_CFLAGS = @ICU_CFLAGS@
|
||||||
ICU_LIBS = @ICU_LIBS@
|
ICU_LIBS = @ICU_LIBS@
|
||||||
|
|
||||||
|
LIBURING_CFLAGS = @LIBURING_CFLAGS@
|
||||||
|
LIBURING_LIBS = @LIBURING_LIBS@
|
||||||
|
|
||||||
TCLSH = @TCLSH@
|
TCLSH = @TCLSH@
|
||||||
TCL_LIBS = @TCL_LIBS@
|
TCL_LIBS = @TCL_LIBS@
|
||||||
TCL_LIB_SPEC = @TCL_LIB_SPEC@
|
TCL_LIB_SPEC = @TCL_LIB_SPEC@
|
||||||
@ -246,7 +250,7 @@ CPP = @CPP@
|
|||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
PG_SYSROOT = @PG_SYSROOT@
|
PG_SYSROOT = @PG_SYSROOT@
|
||||||
|
|
||||||
override CPPFLAGS := $(ICU_CFLAGS) $(CPPFLAGS)
|
override CPPFLAGS := $(ICU_CFLAGS) $(LIBURING_CFLAGS) $(CPPFLAGS)
|
||||||
|
|
||||||
ifdef PGXS
|
ifdef PGXS
|
||||||
override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS)
|
override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS)
|
||||||
|
@ -43,9 +43,10 @@ OBJS = \
|
|||||||
$(top_builddir)/src/common/libpgcommon_srv.a \
|
$(top_builddir)/src/common/libpgcommon_srv.a \
|
||||||
$(top_builddir)/src/port/libpgport_srv.a
|
$(top_builddir)/src/port/libpgport_srv.a
|
||||||
|
|
||||||
# We put libpgport and libpgcommon into OBJS, so remove it from LIBS; also add
|
# We put libpgport and libpgcommon into OBJS, so remove it from LIBS.
|
||||||
# libldap and ICU
|
LIBS := $(filter-out -lpgport -lpgcommon, $(LIBS))
|
||||||
LIBS := $(filter-out -lpgport -lpgcommon, $(LIBS)) $(LDAP_LIBS_BE) $(ICU_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
|
# The backend doesn't need everything that's in LIBS, however
|
||||||
LIBS := $(filter-out -lreadline -ledit -ltermcap -lncurses -lcurses, $(LIBS))
|
LIBS := $(filter-out -lreadline -ledit -ltermcap -lncurses -lcurses, $(LIBS))
|
||||||
|
@ -672,6 +672,9 @@
|
|||||||
/* Define to 1 to build with libcurl support. (--with-libcurl) */
|
/* Define to 1 to build with libcurl support. (--with-libcurl) */
|
||||||
#undef USE_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) */
|
/* Define to 1 to build with XML support. (--with-libxml) */
|
||||||
#undef USE_LIBXML
|
#undef USE_LIBXML
|
||||||
|
|
||||||
|
@ -199,6 +199,8 @@ pgxs_empty = [
|
|||||||
'PTHREAD_CFLAGS', 'PTHREAD_LIBS',
|
'PTHREAD_CFLAGS', 'PTHREAD_LIBS',
|
||||||
|
|
||||||
'ICU_LIBS',
|
'ICU_LIBS',
|
||||||
|
|
||||||
|
'LIBURING_CFLAGS', 'LIBURING_LIBS',
|
||||||
]
|
]
|
||||||
|
|
||||||
if host_system == 'windows' and cc.get_argument_syntax() != 'msvc'
|
if host_system == 'windows' and cc.get_argument_syntax() != 'msvc'
|
||||||
@ -230,6 +232,7 @@ pgxs_deps = {
|
|||||||
'icu': icu,
|
'icu': icu,
|
||||||
'ldap': ldap,
|
'ldap': ldap,
|
||||||
'libcurl': libcurl,
|
'libcurl': libcurl,
|
||||||
|
'liburing': liburing,
|
||||||
'libxml': libxml,
|
'libxml': libxml,
|
||||||
'libxslt': libxslt,
|
'libxslt': libxslt,
|
||||||
'llvm': llvm,
|
'llvm': llvm,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user