| # clang-plugin.m4 -*- Autoconf -*- |
| # Check clang plugin file. |
| |
| dnl Copyright (C) 2025 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. |
| |
| dnl |
| dnl |
| dnl CLANG_PLUGIN_FILE |
| dnl (SHELL-CODE_HANDLER) |
| dnl |
| AC_DEFUN([CLANG_PLUGIN_FILE],[dnl |
| AC_CACHE_CHECK([for clang], clang_cv_is_clang, [ |
| AC_EGREP_CPP(yes, [ |
| #ifdef __clang__ |
| yes |
| #endif |
| ], clang_cv_is_clang=yes, clang_cv_is_clang=no)]) |
| plugin_file= |
| if test $clang_cv_is_clang = yes; then |
| AC_MSG_CHECKING([for clang plugin file]) |
| plugin_names="LLVMgold.so" |
| for plugin in $plugin_names; do |
| plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin` |
| if test x$plugin_file = x$plugin; then |
| AC_CHECK_TOOL(LLVM_CONFIG, llvm-config) |
| if test "$?" != 0; then |
| AC_MSG_ERROR([Required tool 'llvm-config' not found on PATH.]) |
| fi |
| clang_lib_dir=`$LLVM_CONFIG --libdir` |
| if test -f $clang_lib_dir/$plugin; then |
| plugin_file=$clang_lib_dir/$plugin |
| fi |
| if test x$plugin_file != x$plugin; then |
| break; |
| fi |
| fi |
| done |
| if test -z $plugin_file; then |
| AC_MSG_ERROR([Couldn't find clang plugin file for $CC.]) |
| fi |
| dnl Check if ${AR} $plugin_option rc works. |
| AC_CHECK_TOOL(AR, ar) |
| if test "${AR}" = "" ; then |
| AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.]) |
| fi |
| plugin_option="--plugin $plugin_file" |
| touch conftest.c |
| ${AR} $plugin_option rc conftest.a conftest.c |
| if test "$?" != 0; then |
| AC_MSG_WARN([Failed: $AR $plugin_option rc]) |
| plugin_file= |
| fi |
| rm -f conftest.* |
| AC_MSG_RESULT($plugin_file) |
| fi |
| $1="$plugin_file" |
| ]) |
| |
| dnl |
| dnl |
| dnl CLANG_PLUGIN_FILE_FOR_TARGET |
| dnl (SHELL-CODE_HANDLER) |
| dnl |
| AC_DEFUN([CLANG_PLUGIN_FILE_FOR_TARGET],[dnl |
| AC_CACHE_CHECK([for clang for target], clang_cv_is_clang, [ |
| AC_EGREP_CPP(yes, [ |
| #ifdef __clang__ |
| yes |
| #endif |
| ], clang_cv_is_clang=yes, clang_cv_is_clang=no)]) |
| plugin_file= |
| if test $clang_cv_is_clang = yes; then |
| AC_MSG_CHECKING([for clang plugin file for target]) |
| plugin_names="LLVMgold.so" |
| 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 |
| for plugin in $plugin_names; do |
| plugin_file=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin` |
| if test x$plugin_file = x$plugin; then |
| GCC_TARGET_TOOL(llvm-config, LLVM_CONFIG_FOR_TARGET, LLVM_CONFIG) |
| if test "$?" != 0; then |
| AC_MSG_ERROR([Required target tool 'llvm-config' not found.]) |
| fi |
| clang_lib_dir=`$LLVM_CONFIG_FOR_TARGET --libdir` |
| if test -f $clang_lib_dir/$plugin; then |
| plugin_file=$clang_lib_dir/$plugin |
| fi |
| fi |
| if test x$plugin_file != x$plugin; then |
| break; |
| fi |
| plugin_file= |
| done |
| if test -z $plugin_file; then |
| AC_MSG_ERROR([Couldn't find clang plugin file for $CC_FOR_TARGET.]) |
| fi |
| AC_MSG_RESULT($plugin_file) |
| fi |
| $1="$plugin_file" |
| ]) |