mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-21 19:35:36 -05:00
This macro deduplicates the
$CC -v 2>&1 | sed -n 's/^Thread model: //p'
check that was occurring in various runtime libs.
Additionally, as a bit of an Easter egg, this also allows overriding
what the compiler would return by setting the
`gcc_cv_target_thread_file` cache variable first. I admit that it is in
fact this Easter egg that led me to write the patch. The use-case for it
is for making multilib builds where the library sets do not all share
the same thread model easier. See also `THREAD_MODEL_SPEC` for more
about the varying thread models use-case.
Arguably one could could try to define on `THREAD_MODEL_SPEC` on more
platforms (besides e.g. AIX) but the ramifications of this are a bit
unclear. Setting `gcc_cv_target_thread_file` directly is a "low tech"
solution that will work for now for sure. Of course, since setting a
cache variable like this a hacky trick, I will not expect this to be at
all stable/guaranteed to work, going forward.
Thanks to Arsen who on IRC discussed these things with me, including in
particular making it a cache var not `--with-model` flag, to not
prematurely foster expectations that this is stable.
Suggested-by: Arsen Arsenović <arsen@aarsen.me>
config/ChangeLog:
* gthr.m4: Create new GCC_AC_THREAD_MODEL macro
libatomic/ChangeLog:
* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* configure: Regenerate.
* configure.ac: Use GCC_AC_THREAD_MODEL instead of hand-rolled
* testsuite/Makefile.in: Regenerate.
libgcc/ChangeLog:
* configure: Regenerate.
* configure.ac: Use GCC_AC_THREAD_MODEL instead of hand-rolled
libphobos/ChangeLog:
* configure: Regenerate.
* m4/druntime/os.m4: Use AC_MSG_ERROR, not private as_fn_error
libstdc++-v3/ChangeLog:
* acinclude.m4: Use GCC_AC_THREAD_MODEL instead, via AC_REQUIRE
* configure: Regenerate.
53 lines
1.9 KiB
Plaintext
53 lines
1.9 KiB
Plaintext
dnl Copyright (C) 2012 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 Define thread model
|
|
|
|
dnl usage: GCC_AC_THREAD_MODEL
|
|
AC_DEFUN([GCC_AC_THREAD_MODEL],
|
|
[
|
|
# Specify the threading model for this GCC runtime library
|
|
# Pass with no value to take from compiler's metadata
|
|
# Pass with a value to specify a thread package
|
|
# 'single' means single threaded -- without threads.
|
|
AC_CACHE_CHECK([for the threading model used by GCC], [gcc_cv_target_thread_file], [
|
|
# Set new cache variable
|
|
gcc_cv_target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
|
|
])
|
|
# Set variable name (not prefixed enough to be a good cache variable
|
|
# name) traditionally used for this purpose, to avoid having to change
|
|
# a bunch of configure scripts.
|
|
target_thread_file="$gcc_cv_target_thread_file"
|
|
])
|
|
|
|
|
|
dnl Define header location by thread model
|
|
|
|
dnl usage: GCC_AC_THREAD_HEADER([thread_model])
|
|
AC_DEFUN([GCC_AC_THREAD_HEADER],
|
|
[
|
|
case $1 in
|
|
aix) thread_header=config/rs6000/gthr-aix.h ;;
|
|
dce) thread_header=config/pa/gthr-dce.h ;;
|
|
gcn) thread_header=config/gcn/gthr-gcn.h ;;
|
|
lynx) thread_header=config/gthr-lynx.h ;;
|
|
mipssde) thread_header=config/mips/gthr-mipssde.h ;;
|
|
posix) thread_header=gthr-posix.h ;;
|
|
rtems) thread_header=config/gthr-rtems.h ;;
|
|
single) thread_header=gthr-single.h ;;
|
|
tpf) thread_header=config/s390/gthr-tpf.h ;;
|
|
vxworks) thread_header=config/gthr-vxworks.h ;;
|
|
win32) thread_header=config/i386/gthr-win32.h ;;
|
|
mcf) thread_header=config/i386/gthr-mcf.h ;;
|
|
*)
|
|
AC_MSG_ERROR([No known header for threading model '$1'.])
|
|
;;
|
|
esac
|
|
AC_SUBST(thread_header)
|
|
])
|
|
|