mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-11-16 12:34:43 +00:00
In CLANG_PLUGIN_FILE it is possible for plugin_file to be non-NULL when LLVMgold.so does not exist. configure output is messy, with results not printed against their "checking.." line, eg. checking for clang... (cached) yes checking for clang plugin file... checking for x86_64-pc-linux-gnu-ar... (cached) ar --plugin /usr/lib/llvm-20/lib/clang/20/../../LLVMgold.so /usr/lib/llvm-20/lib/clang/20/../../LLVMgold.so This patch fixes those problems, and a similar interposition of other configure output between AC_MSG_CHECKING and AC_MSG_RESULT in gcc-plugin.m4. It also tidies some of the message text, and makes similar code in gcc-plugin.m4 and clang-plugin.m4 a little more consistent. config/ * clang-plugin.m4 (CLANG_PLUGIN_FILE): Don't place checks for tools (llvm-config, ar) inside AC_MSG_CHECKING..AC_MSG_RESULT for clang plugin file. Clear plugin_file before loop exit. (CLANG_PLUGIN_FILE_FOR_TARGET): Similarly. * gcc-plugin.m4 (GCC_PLUGIN_OPTION): Similarly. (GCC_PLUGIN_OPTION_FOR_TARGET): Correct AC_MSG_CHECKING. Tidy return code. binutils/ * testsuite/lib/binutils-common.exp <llvm_plug_opt>: Set for non-native. * configure: Regenerate. / * configure: Regenerate. bfd/ * configure: Regenerate. gas/ * configure: Regenerate. gdb/ * configure: Regenerate. gprof/ * configure: Regenerate. gprofng/ * configure: Regenerate. * libcollector/configure: Regenerate. ld/ * configure: Regenerate. libbacktrace/ * configure: Regenerate. libctf/ * configure: Regenerate. libiberty/ * configure: Regenerate. libsframe/ * configure: Regenerate. opcodes/ * configure: Regenerate. sim/ * configure: Regenerate. zlib/ * configure: Regenerate.
214 lines
6.2 KiB
Plaintext
214 lines
6.2 KiB
Plaintext
# gcc-plugin.m4 -*- Autoconf -*-
|
|
# Check whether GCC is able to be built with plugin support.
|
|
|
|
dnl Copyright (C) 2014 Free Software Foundation, Inc.
|
|
dnl This file is free software, distributed under the terms of the GNU
|
|
dnl General Public License. As a special exception to the GNU General
|
|
dnl Public License, this file may be distributed as part of a program
|
|
dnl that contains a configuration script generated by Autoconf, under
|
|
dnl the same distribution terms as the rest of that program.
|
|
|
|
# Check for plugin support.
|
|
# Respects --enable-plugin.
|
|
# Sets the shell variables enable_plugin and pluginlibs.
|
|
AC_DEFUN([GCC_ENABLE_PLUGINS],
|
|
[# Check for plugin support
|
|
AC_ARG_ENABLE(plugin,
|
|
[AS_HELP_STRING([--enable-plugin], [enable plugin support])],
|
|
enable_plugin=$enableval,
|
|
enable_plugin=yes; default_plugin=yes)
|
|
|
|
pluginlibs=
|
|
plugin_check=yes
|
|
|
|
case "${host}" in
|
|
*-*-mingw*)
|
|
# Since plugin support under MinGW is not as straightforward as on
|
|
# other platforms (e.g., we have to link import library, etc), we
|
|
# only enable it if explicitly requested.
|
|
if test x"$default_plugin" = x"yes"; then
|
|
enable_plugin=no
|
|
elif test x"$enable_plugin" = x"yes"; then
|
|
# Use make's target variable to derive import library name.
|
|
pluginlibs='-Wl,--export-all-symbols -Wl,--out-implib=[$]@.a'
|
|
plugin_check=no
|
|
fi
|
|
;;
|
|
*-*-darwin*)
|
|
if test x$build = x$host; then
|
|
export_sym_check="nm${exeext} -g"
|
|
elif test x$host = x$target; then
|
|
export_sym_check="$gcc_cv_nm -g"
|
|
else
|
|
export_sym_check=
|
|
fi
|
|
;;
|
|
*)
|
|
if test x$build = x$host; then
|
|
export_sym_check="$ac_cv_prog_OBJDUMP -T"
|
|
elif test x$host = x$target; then
|
|
export_sym_check="$gcc_cv_objdump -T"
|
|
else
|
|
export_sym_check="$ac_cv_prog_OBJDUMP -T"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if test x"$enable_plugin" = x"yes" -a x"$plugin_check" = x"yes"; then
|
|
|
|
AC_MSG_CHECKING([for exported symbols])
|
|
if test "x$export_sym_check" != x; then
|
|
echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
|
|
${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
|
|
if $export_sym_check conftest$ac_exeext | grep foobar > /dev/null; then
|
|
: # No need to use a flag
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
AC_MSG_RESULT([yes])
|
|
AC_MSG_CHECKING([for -rdynamic])
|
|
${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
|
|
if $export_sym_check conftest$ac_exeext | grep foobar > /dev/null; then
|
|
plugin_rdynamic=yes
|
|
pluginlibs="-rdynamic"
|
|
else
|
|
plugin_rdynamic=no
|
|
enable_plugin=no
|
|
fi
|
|
AC_MSG_RESULT([$plugin_rdynamic])
|
|
fi
|
|
else
|
|
AC_MSG_RESULT([unable to check])
|
|
fi
|
|
|
|
# Check -ldl
|
|
saved_LIBS="$LIBS"
|
|
AC_SEARCH_LIBS([dlopen], [dl])
|
|
if test x"$ac_cv_search_dlopen" = x"-ldl"; then
|
|
pluginlibs="$pluginlibs -ldl"
|
|
fi
|
|
LIBS="$saved_LIBS"
|
|
|
|
# Check that we can build shared objects with -fPIC -shared
|
|
saved_LDFLAGS="$LDFLAGS"
|
|
saved_CFLAGS="$CFLAGS"
|
|
saved_CXXFLAGS="$CXXFLAGS"
|
|
case "${host}" in
|
|
*-*-darwin*)
|
|
CFLAGS=`echo $CFLAGS | sed s/-mdynamic-no-pic//g`
|
|
CFLAGS="$CFLAGS -fPIC"
|
|
CXXFLAGS=`echo $CXXFLAGS | sed s/-mdynamic-no-pic//g`
|
|
CXXFLAGS="$CXXFLAGS -fPIC"
|
|
LDFLAGS="$LDFLAGS -shared -undefined dynamic_lookup"
|
|
;;
|
|
*)
|
|
CFLAGS="$CFLAGS -fPIC"
|
|
CXXFLAGS="$CXXFLAGS -fPIC"
|
|
LDFLAGS="$LDFLAGS -fPIC -shared"
|
|
;;
|
|
esac
|
|
AC_MSG_CHECKING([for -fPIC -shared])
|
|
AC_TRY_LINK(
|
|
[extern int X;],[return X == 0;],
|
|
[AC_MSG_RESULT([yes]); have_pic_shared=yes],
|
|
[AC_MSG_RESULT([no]); have_pic_shared=no])
|
|
if test x"$have_pic_shared" != x"yes" -o x"$ac_cv_search_dlopen" = x"no"; then
|
|
pluginlibs=
|
|
enable_plugin=no
|
|
fi
|
|
LDFLAGS="$saved_LDFLAGS"
|
|
CFLAGS="$saved_CFLAGS"
|
|
CXXFLAGS="$saved_CXXFLAGS"
|
|
|
|
# If plugin support had been requested but not available, fail.
|
|
if test x"$enable_plugin" = x"no" ; then
|
|
if test x"$default_plugin" != x"yes"; then
|
|
AC_MSG_ERROR([
|
|
Building GCC with plugin support requires a host that supports
|
|
-fPIC, -shared, -ldl and -rdynamic.])
|
|
fi
|
|
fi
|
|
fi
|
|
])
|
|
|
|
dnl
|
|
dnl
|
|
dnl GCC_PLUGIN_OPTION
|
|
dnl (SHELL-CODE_HANDLER)
|
|
dnl
|
|
AC_DEFUN([GCC_PLUGIN_OPTION],[dnl
|
|
AC_CHECK_TOOL(AR, ar)
|
|
if test -z "${AR}"; then
|
|
AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.])
|
|
fi
|
|
AC_MSG_CHECKING([for -plugin option])
|
|
plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
|
|
plugin_option=
|
|
for plugin in $plugin_names; do
|
|
plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
|
|
if test x$plugin_so = x$plugin; then
|
|
plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
|
|
fi
|
|
if test x$plugin_so != x$plugin; then
|
|
plugin_option="--plugin $plugin_so"
|
|
break
|
|
fi
|
|
done
|
|
if test -z "$plugin_option"; then
|
|
AC_MSG_RESULT([no])
|
|
else
|
|
AC_MSG_RESULT($plugin_option)
|
|
dnl Check if ${AR} $plugin_option rc works.
|
|
touch conftest.c
|
|
${AR} $plugin_option rc conftest.a conftest.c
|
|
if test "$?" != 0; then
|
|
AC_MSG_WARN([Failed: $AR $plugin_option rc])
|
|
plugin_option=
|
|
fi
|
|
rm -f conftest.*
|
|
fi
|
|
$1="$plugin_option"
|
|
])
|
|
|
|
dnl
|
|
dnl
|
|
dnl GCC_PLUGIN_OPTION_FOR_TARGET
|
|
dnl (SHELL-CODE_HANDLER)
|
|
dnl
|
|
AC_DEFUN([GCC_PLUGIN_OPTION_FOR_TARGET],[dnl
|
|
COMPILER_FOR_TARGET="${CC_FOR_TARGET}"
|
|
dnl Check if the host compiler is used.
|
|
if test x"${COMPILER_FOR_TARGET}" = x"\$(CC)"; then
|
|
COMPILER_FOR_TARGET="$CC"
|
|
fi
|
|
saved_CC="$CC"
|
|
CC="$COMPILER_FOR_TARGET"
|
|
AC_CACHE_CHECK([for gcc for target], gcc_target_cv_working, [
|
|
AC_TRY_COMPILE(
|
|
[],
|
|
[],
|
|
gcc_target_cv_working=yes,
|
|
gcc_target_cv_working=no)])
|
|
CC="$saved_CC"
|
|
AC_MSG_CHECKING([for target -plugin option])
|
|
plugin_option=
|
|
if test $gcc_target_cv_working = yes; then
|
|
plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
|
|
for plugin in $plugin_names; do
|
|
plugin_so=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-prog-name $plugin`
|
|
if test x$plugin_so = x$plugin; then
|
|
plugin_so=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin`
|
|
fi
|
|
if test x$plugin_so != x$plugin; then
|
|
plugin_option="--plugin $plugin_so"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
if test -z "$plugin_option"; then
|
|
AC_MSG_RESULT([no])
|
|
else
|
|
AC_MSG_RESULT($plugin_option)
|
|
fi
|
|
$1="$plugin_option"
|
|
])
|