# -*- shell-script -*-
#   Copyright (C) 2012-2017 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not see <http://www.gnu.org/licenses/>.

# This is the target specific configuration file.  This is invoked by the
# autoconf generated configure script.  Putting it in a separate shell file
# lets us skip running autoconf when modifying target specific information.

# Filter out unsupported systems.
TSAN_TARGET_DEPENDENT_OBJECTS=
SANITIZER_COMMON_TARGET_DEPENDENT_OBJECTS=
case "${target}" in
  x86_64-*-linux* | i?86-*-linux*)
	if test x$ac_cv_sizeof_void_p = x8; then
		TSAN_SUPPORTED=yes
		LSAN_SUPPORTED=yes
		TSAN_TARGET_DEPENDENT_OBJECTS=tsan_rtl_amd64.lo
	fi
	if echo "int x = __x86_64__;" | $CC -c -x c -o /dev/null - > /dev/null 2>&1; then
		SANITIZER_COMMON_TARGET_DEPENDENT_OBJECTS=sanitizer_linux_x86_64.lo
	fi
	;;
  powerpc*-*-linux*)
	if test x$ac_cv_sizeof_void_p = x8; then
		TSAN_SUPPORTED=yes
		LSAN_SUPPORTED=yes
		TSAN_TARGET_DEPENDENT_OBJECTS=tsan_rtl_ppc64.lo
	fi
	;;
  sparc*-*-linux*)
	;;
  s390*-*-linux*)
	;;
  arm*-*-linux*)
	;;
  aarch64*-*-linux*)
	if test x$ac_cv_sizeof_void_p = x8; then
		TSAN_SUPPORTED=yes
		LSAN_SUPPORTED=yes
		TSAN_TARGET_DEPENDENT_OBJECTS=tsan_rtl_aarch64.lo
	fi
	;;
  x86_64-*-darwin[1]* | i?86-*-darwin[1]*)
	TSAN_SUPPORTED=no
	;;
  *)
	UNSUPPORTED=1
	;;
esac
