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-tap-tests --enable-nls \
|
||||
--with-segsize-blocks=6 \
|
||||
--with-liburing \
|
||||
\
|
||||
${LINUX_CONFIGURE_FEATURES} \
|
||||
\
|
||||
|
139
configure
vendored
139
configure
vendored
@ -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
|
||||
|
12
configure.ac
12
configure.ac
@ -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
|
||||
|
@ -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>
|
||||
|
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
|
||||
###############################################################
|
||||
@ -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,
|
||||
|
@ -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')
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user