mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
tools: Correct PTHREAD options in config/StdGNU.mk
It is not correct to say -lpthread. The correct option is -pthread,
which may have sundry other effects on code generation etc. It needs
to be passed both to compilation and linking.
Fix the configure test to test -pthread, and plumb the resulting flag
through to PTHREAD_{CFLAGS,LDFLAGS} in Tools.mk; also substitute
PTHREAD_LIBS (although this will currently always be empty).
Remove PTHREAD_LIBS setting from StdGNU.mk.
Fix the one user (libxc) to use PTHREAD_{CFLAGS,LDFLAGS} too.
There are still some other users in tree which pass -pthread or
-lpthread by adding it as a literal to their own compiler options.
These will be fixed in a later patch.
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Roger Pau Monne <roger.pau@entel.upc.edu>
Acked-by: Roger Pau Monne <roger.pau@entel.upc.edu>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
This commit is contained in:
1 parent
862bf6424b
commit
90b969c2ed
7 files changed
+130
-32
No files matched your search
@@ -67,7 +67,6 @@ XEN_CONFIG_DIR = $(CONFIG_DIR)/xen
|
||||
XEN_SCRIPT_DIR = $(XEN_CONFIG_DIR)/scripts
|
||||
|
||||
SOCKET_LIBS =
|
||||
PTHREAD_LIBS = -lpthread
|
||||
UTIL_LIBS = -lutil
|
||||
DLOPEN_LIBS = -ldl
|
||||
|
||||
|
||||
@@ -26,6 +26,10 @@ PREPEND_LIB := @PREPEND_LIB@
|
||||
APPEND_INCLUDES := @APPEND_INCLUDES@
|
||||
APPEND_LIB := @APPEND_LIB@
|
||||
|
||||
PTHREAD_CFLAGS := @PTHREAD_CFLAGS@
|
||||
PTHREAD_LDFLAGS := @PTHREAD_LDFLAGS@
|
||||
PTHREAD_LIBS := @PTHREAD_LIBS@
|
||||
|
||||
# Download GIT repositories via HTTP or GIT's own protocol?
|
||||
# GIT's protocol is faster and more robust, when it works at all (firewalls
|
||||
# may block it). We make it the default, but if your GIT repository downloads
|
||||
|
||||
Vendored
+73
-28
@@ -602,6 +602,9 @@ POW_LIB
|
||||
LIBOBJS
|
||||
ALLOCA
|
||||
libiconv
|
||||
PTHREAD_LIBS
|
||||
PTHREAD_LDFLAGS
|
||||
PTHREAD_CFLAGS
|
||||
libgcrypt
|
||||
libext2fs
|
||||
system_aio
|
||||
@@ -3857,6 +3860,9 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3924,6 +3930,22 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
|
||||
|
||||
|
||||
|
||||
# We define, separately, PTHREAD_CFLAGS, _LDFLAGS and _LIBS
|
||||
# even though currently we don't set them very separately.
|
||||
# This means that the makefiles will not need to change in
|
||||
# the future if we make the test more sophisticated.
|
||||
|
||||
|
||||
|
||||
# We invoke AX_PTHREAD_VARS with the name of another macro
|
||||
# which is then expanded once for each variable.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Enable/disable options
|
||||
|
||||
@@ -7228,47 +7250,70 @@ else
|
||||
fi
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5
|
||||
$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
|
||||
if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then :
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread flag" >&5
|
||||
$as_echo_n "checking for pthread flag... " >&6; }
|
||||
if test "${ax_cv_pthread_flags+set}" = set; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lpthread $LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
|
||||
ax_cv_pthread_flags=-pthread
|
||||
|
||||
PTHREAD_CFLAGS="$ax_cv_pthread_flags"
|
||||
PTHREAD_LDFLAGS="$ax_cv_pthread_flags"
|
||||
PTHREAD_LIBS=""
|
||||
|
||||
|
||||
saved_CFLAGS="$CFLAGS"
|
||||
|
||||
saved_LDFLAGS="$LDFLAGS"
|
||||
|
||||
saved_LIBS="$LIBS"
|
||||
|
||||
|
||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
||||
|
||||
LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
|
||||
|
||||
LIBS="$LIBS $PTHREAD_LIBS"
|
||||
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char pthread_create ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return pthread_create ();
|
||||
;
|
||||
return 0;
|
||||
#include <pthread.h>
|
||||
int main(void) {
|
||||
pthread_atfork(0,0,0);
|
||||
pthread_create(0,0,0,0);
|
||||
}
|
||||
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
ac_cv_lib_pthread_pthread_create=yes
|
||||
|
||||
else
|
||||
ac_cv_lib_pthread_pthread_create=no
|
||||
ax_cv_pthread_flags=failed
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_check_lib_save_LIBS
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5
|
||||
$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
|
||||
if test "x$ac_cv_lib_pthread_pthread_create" = x""yes; then :
|
||||
|
||||
else
|
||||
as_fn_error $? "Could not find libpthread" "$LINENO" 5
|
||||
CFLAGS="$saved_CFLAGS"
|
||||
|
||||
LDFLAGS="$saved_LDFLAGS"
|
||||
|
||||
LIBS="$saved_LIBS"
|
||||
|
||||
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_pthread_flags" >&5
|
||||
$as_echo "$ax_cv_pthread_flags" >&6; }
|
||||
if test "x$ax_cv_pthread_flags" = xfailed; then
|
||||
as_fn_error $? "-pthread does not work" "$LINENO" 5
|
||||
fi
|
||||
|
||||
PTHREAD_CFLAGS="$ax_cv_pthread_flags"
|
||||
PTHREAD_LDFLAGS="$ax_cv_pthread_flags"
|
||||
PTHREAD_LIBS=""
|
||||
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
|
||||
$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
|
||||
|
||||
+3
-2
@@ -23,6 +23,7 @@ AC_USE_SYSTEM_EXTENSIONS
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
# M4 Macro includes
|
||||
m4_include([m4/savevar.m4])
|
||||
m4_include([m4/features.m4])
|
||||
m4_include([m4/path_or_fail.m4])
|
||||
m4_include([m4/python_version.m4])
|
||||
@@ -33,6 +34,7 @@ m4_include([m4/set_cflags_ldflags.m4])
|
||||
m4_include([m4/uuid.m4])
|
||||
m4_include([m4/pkg.m4])
|
||||
m4_include([m4/curses.m4])
|
||||
m4_include([m4/pthread.m4])
|
||||
|
||||
# Enable/disable options
|
||||
AX_ARG_DEFAULT_DISABLE([githttp], [Download GIT repositories via HTTP])
|
||||
@@ -129,8 +131,7 @@ AC_CHECK_LIB([ext2fs], [ext2fs_open2], [libext2fs="y"], [libext2fs="n"])
|
||||
AC_SUBST(libext2fs)
|
||||
AC_CHECK_LIB([gcrypt], [gcry_md_hash_buffer], [libgcrypt="y"], [libgcrypt="n"])
|
||||
AC_SUBST(libgcrypt)
|
||||
AC_CHECK_LIB([pthread], [pthread_create], [] ,
|
||||
[AC_MSG_ERROR([Could not find libpthread])])
|
||||
AX_CHECK_PTHREAD
|
||||
AC_CHECK_LIB([rt], [clock_gettime])
|
||||
AC_CHECK_LIB([yajl], [yajl_alloc], [],
|
||||
[AC_MSG_ERROR([Could not find yajl])])
|
||||
|
||||
@@ -73,6 +73,8 @@ CFLAGS += -I. $(CFLAGS_xeninclude)
|
||||
# Needed for posix_fadvise64() in xc_linux.c
|
||||
CFLAGS-$(CONFIG_Linux) += -D_GNU_SOURCE
|
||||
|
||||
CFLAGS += $(PTHREAD_CFLAGS)
|
||||
|
||||
# Define this to make it possible to run valgrind on code linked with these
|
||||
# libraries.
|
||||
#CFLAGS += -DVALGRIND -O0 -ggdb3
|
||||
@@ -157,7 +159,7 @@ libxenctrl.so.$(MAJOR): libxenctrl.so.$(MAJOR).$(MINOR)
|
||||
ln -sf $< $@
|
||||
|
||||
libxenctrl.so.$(MAJOR).$(MINOR): $(CTRL_PIC_OBJS)
|
||||
$(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenctrl.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(DLOPEN_LIBS) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
|
||||
$(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenctrl.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(DLOPEN_LIBS) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
|
||||
|
||||
# libxenguest
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
# We define, separately, PTHREAD_CFLAGS, _LDFLAGS and _LIBS
|
||||
# even though currently we don't set them very separately.
|
||||
# This means that the makefiles will not need to change in
|
||||
# the future if we make the test more sophisticated.
|
||||
|
||||
AC_DEFUN([AX_PTHREAD_CV2VARS],[
|
||||
PTHREAD_CFLAGS="$ax_cv_pthread_flags"
|
||||
PTHREAD_LDFLAGS="$ax_cv_pthread_flags"
|
||||
PTHREAD_LIBS=""
|
||||
])
|
||||
|
||||
# We invoke AX_PTHREAD_VARS with the name of another macro
|
||||
# which is then expanded once for each variable.
|
||||
AC_DEFUN([AX_PTHREAD_VARS],[$1(CFLAGS) $1(LDFLAGS) $1(LIBS)])
|
||||
|
||||
AC_DEFUN([AX_PTHREAD_VAR_APPLY],[
|
||||
$1="$$1 $PTHREAD_$1"
|
||||
])
|
||||
AC_DEFUN([AX_PTHREAD_VAR_SUBST],[AC_SUBST(PTHREAD_$1)])
|
||||
|
||||
AC_DEFUN([AX_CHECK_PTHREAD],[
|
||||
AC_CACHE_CHECK([for pthread flag], [ax_cv_pthread_flags], [
|
||||
ax_cv_pthread_flags=-pthread
|
||||
AX_PTHREAD_CV2VARS
|
||||
AX_PTHREAD_VARS([AX_SAVEVAR_SAVE])
|
||||
AX_PTHREAD_VARS([AX_PTHREAD_VAR_APPLY])
|
||||
AC_LINK_IFELSE([
|
||||
#include <pthread.h>
|
||||
int main(void) {
|
||||
pthread_atfork(0,0,0);
|
||||
pthread_create(0,0,0,0);
|
||||
}
|
||||
],[],[ax_cv_pthread_flags=failed])
|
||||
AX_PTHREAD_VARS([AX_SAVEVAR_RESTORE])
|
||||
])
|
||||
if test "x$ax_cv_pthread_flags" = xfailed; then
|
||||
AC_MSG_ERROR([-pthread does not work])
|
||||
fi
|
||||
AX_PTHREAD_CV2VARS
|
||||
AX_PTHREAD_VARS([AX_PTHREAD_VAR_SUBST])
|
||||
])
|
||||
@@ -0,0 +1,6 @@
|
||||
AC_DEFUN([AX_SAVEVAR_SAVE],[
|
||||
saved_$1="$$1"
|
||||
])
|
||||
AC_DEFUN([AX_SAVEVAR_RESTORE],[
|
||||
$1="$saved_$1"
|
||||
])
|
||||