# ; -*- mode: sh ; -*-
# Copyright (C) 2013-2017 Free Software Foundation, Inc.
#
# This file is part of GDB.
#
# 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 3 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/>.

# Variables defined here:
#
# NAT_FILE - The header file with definitions for this native target.
#
# NATDEPFILES - Source files required for native debugging on this
#               native target.
#
# NAT_CDEPS - Dynamic symbols to be exported for libthread_db.
#
# LOADLIBES - Libraries against which GDB will be linked for this
#             native target.
#
# MH_CFLAGS - Additional CFLAGS for this host.
#
# XM_CLIBS - Host-dependent libraries against which GDB will be linked
#            for this native target.
#
# HAVE_NATIVE_GCORE_HOST - Whether gcore should be installed on this
#                          native target.
#
# nat_makefile_frag - Name of the (optional) Makefile fragment file
#                     required to build the native target.  The
#                     fragment is incorporated into the Makefile that
#                     configure constructs from Makefile.in.
#
# Notes:
#
# - To avoid shell expansion of variables, declare them with single
#   quotes.
#
# - nat_makefile_frag must contain the full path of the file.


# This first case is useful for filling default values for each
# gdb_host.
case ${gdb_host} in
    *linux*)
	NAT_FILE='config/nm-linux.h'
	NATDEPFILES='inf-ptrace.o fork-child.o fork-inferior.o proc-service.o \
		linux-thread-db.o linux-nat.o linux-osdata.o linux-fork.o \
		linux-procfs.o linux-ptrace.o linux-waitpid.o \
		linux-personality.o linux-namespaces.o'
	NAT_CDEPS='$(srcdir)/proc-service.list'
	LOADLIBES='-ldl $(RDYNAMIC)'
	;;
    fbsd*)
	NATDEPFILES='fork-child.o fork-inferior.o inf-ptrace.o fbsd-nat.o'
	HAVE_NATIVE_GCORE_HOST=1
	LOADLIBES='-lkvm'
	;;
    nbsd*)
	NATDEPFILES='fork-child.o fork-inferior.o inf-ptrace.o'
	HAVE_NATIVE_GCORE_HOST=1
	;;
    obsd*)
	NATDEPFILES='fork-child.o fork-inferior.o inf-ptrace.o'
	;;
    cygwin*)
	NATDEPFILES='x86-nat.o x86-dregs.o windows-nat.o'
	;;
    mingw*)
	NATDEPFILES='x86-nat.o x86-dregs.o windows-nat.o'
	;;
    aix)
	NATDEPFILES='fork-inferior.o fork-child.o inf-ptrace.o'
	;;
    darwin)
	NATDEPFILES='fork-child.o fork-inferior.o darwin-nat.o \
	    darwin-nat-info.o'
        ;;
esac

# This is where we actually filter by host and host CPU.
case ${gdb_host} in
    aix)
	case ${gdb_host_cpu} in
	    powerpc)
		# Host: IBM PowerPC running AIX aix-thread.o is not
		# listed in NATDEPFILES as it is pulled in by
		# configure.
		NATDEPFILES="${NATDEPFILES} rs6000-nat.o"

		# When compiled with cc, for debugging, this argument
		# should be passed.  We have no idea who our current
		# compiler is though, so we skip it.
		# MH_CFLAGS='-bnodelcsect'
		;;
	esac
	;;
    alpha-linux)
	case ${gdb_host_cpu} in
	    alpha)
		# Host: Little-endian Alpha running Linux
		NATDEPFILES="${NATDEPFILES} alpha-linux-nat.o"
		# doublest.c currently assumes some properties of FP arithmetic
		# on the host which require this.
		MH_CFLAGS='-mieee'
		;;
	esac
	;;
    cygwin)
	case ${gdb_host_cpu} in
	    i386)
		# Native config information for GDB on i386
		# systems running Cygwin.
		NATDEPFILES="${NATDEPFILES} i386-windows-nat.o"
		;;
	esac
	;;
    cygwin64)
	case ${gdb_host_cpu} in
	    i386)
		# Native config information for GDB on amd64
		# systems running Cygwin.
		NATDEPFILES="${NATDEPFILES} amd64-windows-nat.o"
		;;
	esac
	;;
    darwin)
	case ${gdb_host_cpu} in
	    i386)
		# Host: IA86 running Darwin
		NATDEPFILES="${NATDEPFILES} i386-darwin-nat.o x86-nat.o \
		    x86-dregs.o amd64-nat.o"
		;;
	esac
	;;
    fbsd)
	case ${gdb_host_cpu} in
	    aarch64)
		# Host: FreeBSD/aarch64
		NATDEPFILES="${NATDEPFILES} aarch64-fbsd-nat.o"
		LOADLIBES=
		;;
	    i386)
		# Host: FreeBSD/i386
		NATDEPFILES="${NATDEPFILES} x86-nat.o x86-dregs.o \
		x86-bsd-nat.o i386-bsd-nat.o i386-fbsd-nat.o bsd-kvm.o"
		NAT_FILE='nm-fbsd.h'
		;;
	    mips)
		# Host: FreeBSD/mips
		NATDEPFILES="${NATDEPFILES} mips-fbsd-nat.o"
		LOADLIBES=
		;;
	    powerpc)
		# Native config information for GDB on PowerPC
		# systems running FreeBSD.
		NATDEPFILES="${NATDEPFILES} ppc-fbsd-nat.o bsd-kvm.o"
		;;
	    sparc)
		# Host: FreeBSD/sparc64
		NATDEPFILES="${NATDEPFILES} sparc-nat.o sparc64-nat.o \
		sparc64-fbsd-nat.o bsd-kvm.o"
		;;
	esac
	;;
    fbsd64)
	case ${gdb_host_cpu} in
	    i386)
		# Host: FreeBSD/amd64
		NATDEPFILES="${NATDEPFILES} amd64-nat.o amd64-bsd-nat.o \
		amd64-fbsd-nat.o bsd-kvm.o x86-nat.o x86-dregs.o x86-bsd-nat.o"
		;;
	esac
	;;
    go32)
	case ${gdb_host_cpu} in
	    i386)
		# Host: Intel x86 running DJGPP
		# We include several header files from config/djgpp
		MH_CFLAGS='-I$(srcdir)/config/djgpp'
		NATDEPFILES='go32-nat.o x86-nat.o x86-dregs.o'
		XM_CLIBS='-ldbg'
		;;
	esac
	;;
    i386gnu)
	case ${gdb_host_cpu} in
	    i386)
		# Host: Intel 386 running the GNU Hurd
		NATDEPFILES='i386-gnu-nat.o gnu-nat.o \
		     x86-nat.o x86-dregs.o fork-child.o \
		     notify_S.o process_reply_S.o msg_reply_S.o \
		     msg_U.o exc_request_U.o exc_request_S.o'
		HAVE_NATIVE_GCORE_HOST=1

		NAT_FILE='nm-i386gnu.h'
		MH_CFLAGS='-D_GNU_SOURCE'

		XM_CLIBS='-lshouldbeinlibc'

		nat_makefile_frag="${srcdir}/config/${gdb_host_cpu}/i386gnu.mn"
		;;
	esac
	;;
    i386sol2)
	case ${gdb_host_cpu} in
	    i386)
		# Host: Solaris x86
		NATDEPFILES='fork-child.o i386-v4-nat.o i386-sol2-nat.o \
		procfs.o proc-api.o proc-events.o proc-flags.o proc-why.o'
		HAVE_NATIVE_GCORE_HOST=1
		;;
	esac
	;;
    linux)
	case ${gdb_host_cpu} in
	    aarch64)
		#  Host: AArch64 based machine running GNU/Linux
		NATDEPFILES="${NATDEPFILES} aarch64-linux-nat.o \
		aarch32-linux-nat.o aarch64-linux-hw-point.o aarch64-linux.o"
		;;
	    arm)
		# Host: ARM based machine running GNU/Linux
		NATDEPFILES="${NATDEPFILES} arm-linux-nat.o \
		aarch32-linux-nat.o"
		;;
	    i386)
		# Host: Intel 386 running GNU/Linux.
		NATDEPFILES="${NATDEPFILES} x86-nat.o x86-dregs.o \
		i386-linux-nat.o x86-linux-nat.o linux-btrace.o \
		x86-linux.o x86-linux-dregs.o"
		;;
	    ia64)
		# Host: Intel IA-64 running GNU/Linux
		NATDEPFILES="${NATDEPFILES} ia64-linux-nat.o"
		;;
	    m32r)
		# Host: M32R based machine running GNU/Linux
		NATDEPFILES="${NATDEPFILES} m32r-linux-nat.o"
		;;
	    m68k)
		# Host: Motorola m68k running GNU/Linux.
		NATDEPFILES="${NATDEPFILES} m68k-linux-nat.o"
		;;
	    mips)
		# Host: Linux/MIPS
		NATDEPFILES="${NATDEPFILES} mips-linux-nat.o \
		mips-linux-watch.o"
		;;
	    pa)
		# Host: Hewlett-Packard PA-RISC machine, running Linux
		NATDEPFILES="${NATDEPFILES} hppa-linux-nat.o"
		;;
	    powerpc)
		# Host: PowerPC, running Linux
		NATDEPFILES="${NATDEPFILES} ppc-linux-nat.o"
		;;
	    s390)
		# Host: S390, running Linux
		NATDEPFILES="${NATDEPFILES} s390-linux-nat.o"
		;;
	    sparc)
		# Host: GNU/Linux SPARC
		NATDEPFILES="${NATDEPFILES} sparc-nat.o sparc-linux-nat.o"
		;;
	    tilegx)
		# Host: Tilera TILE-Gx running GNU/Linux.
		NATDEPFILES="${NATDEPFILES} tilegx-linux-nat.o"
		NAT_CDEPS=
		;;
	    xtensa)
		# Host: Xtensa, running GNU/Linux.
		NATDEPFILES="${NATDEPFILES} xtensa-linux-nat.o"
		;;
	esac
	;;
    linux64)
	case ${gdb_host_cpu} in
	    i386)
		# Host: GNU/Linux x86-64
		NATDEPFILES="${NATDEPFILES} x86-nat.o x86-dregs.o \
		amd64-nat.o amd64-linux-nat.o x86-linux-nat.o linux-btrace.o \
		x86-linux.o x86-linux-dregs.o amd64-linux-siginfo.o"
		;;
	    sparc)
		# Host: GNU/Linux UltraSPARC
		NATDEPFILES="${NATDEPFILES} sparc-nat.o sparc64-nat.o \
		sparc64-linux-nat.o"
		;;
	esac
	;;
    mingw)
	case ${gdb_host_cpu} in
	    i386)
		NATDEPFILES="${NATDEPFILES} i386-windows-nat.o"
		;;
	esac
	;;
    mingw64)
	case ${gdb_host_cpu} in
	    i386)
		NATDEPFILES="${NATDEPFILES} amd64-windows-nat.o"
		;;
	esac
	;;
    nbsd)
	case ${gdb_host_cpu} in
	    alpha)
		# Host: NetBSD/alpha
		NATDEPFILES="${NATDEPFILES} alpha-bsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	    mips)
		# Host: NetBSD/mips
		NATDEPFILES="${NATDEPFILES} mips-nbsd-nat.o"
		;;
	    pa)
		# Host: NetBSD/hppa
		NATDEPFILES="${NATDEPFILES} nbsd-nat.o hppa-nbsd-nat.o"
		;;
	    powerpc)
		# Host: NetBSD/powerpc
		NATDEPFILES="${NATDEPFILES} ppc-nbsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	    sh)
		# Host: NetBSD/sh
		NATDEPFILES="${NATDEPFILES} sh-nbsd-nat.o"
		;;

	esac
	;;
    nbsd64)
	case ${gdb_host_cpu} in
	    i386)
		# Host: NetBSD/amd64
		NATDEPFILES="${NATDEPFILES} nbsd-nat.o amd64-nat.o x86-nat.o \
		x86-dregs.o x86-bsd-nat.o amd64-bsd-nat.o amd64-nbsd-nat.o"
		;;
	    sparc)
		# Host: NetBSD/sparc64
		NATDEPFILES="${NATDEPFILES} sparc64-nbsd-nat.o sparc-nat.o \
		bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;

	esac
	;;
    nbsdelf)
	case ${gdb_host_cpu} in
	    arm)
		# Host: NetBSD/arm
		NATDEPFILES="${NATDEPFILES} arm-nbsd-nat.o"
		;;
	    i386)
		# Host: NetBSD/i386 ELF
		NATDEPFILES="${NATDEPFILES} nbsd-nat.o x86-nat.o x86-dregs.o \
		x86-bsd-nat.o i386-bsd-nat.o i386-nbsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	    m68k)
		# Host: NetBSD/m68k ELF
		NATDEPFILES="${NATDEPFILES} m68k-bsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	    sparc)
		# Host: NetBSD/sparc ELF
		NATDEPFILES="${NATDEPFILES} sparc-nat.o sparc-nbsd-nat.o \
		bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	    vax)
		# Host: NetBSD/vax ELF
		NATDEPFILES="${NATDEPFILES} vax-bsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;

	esac
	;;
    nto)
	case ${gdb_host_cpu} in
	    i386)
		# Host: Intel 386 running QNX.
		NATDEPFILES='nto-procfs.o'
		NAT_FILE='config/nm-nto.h'
		;;
	esac
	;;
    obsd)
	case ${gdb_host_cpu} in
	    i386)
		# Host: OpenBSD/i386 ELF
		NATDEPFILES="${NATDEPFILES} obsd-nat.o x86-bsd-nat.o \
		i386-bsd-nat.o i386-obsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	    m68k)
		# Host: OpenBSD/m68k
		NATDEPFILES="${NATDEPFILES} m68k-bsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	    m88k)
		# Host: OpenBSD/m88k
		NATDEPFILES="${NATDEPFILES} m88k-bsd-nat.o"
		;;
	    pa)
		# Host: OpenBSD/hppa
		NATDEPFILES="${NATDEPFILES} obsd-nat.o hppa-obsd-nat.o"
		;;
	    powerpc)
		# Host: OpenBSD/powerpc
		NATDEPFILES="${NATDEPFILES} obsd-nat.o ppc-obsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	    vax)
		# Host: OpenBSD/vax
		NATDEPFILES="${NATDEPFILES} vax-bsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	esac
	;;
    obsd64)
	case ${gdb_host_cpu} in
	    i386)
		# Host: OpenBSD/amd64
		NATDEPFILES="${NATDEPFILES} obsd-nat.o amd64-nat.o \
		x86-bsd-nat.o amd64-bsd-nat.o amd64-obsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	    mips)
		# Host: OpenBSD/mips64
		NATDEPFILES="${NATDEPFILES} obsd-nat.o mips64-obsd-nat.o"
		;;
	    sparc)
		# Host: OpenBSD/sparc64
		NATDEPFILES="${NATDEPFILES} obsd-nat.o sparc64-obsd-nat.o \
		sparc-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	esac
	;;
    ppc64-linux)
	case ${gdb_host_cpu} in
	    powerpc)
		# Host: PowerPC64, running Linux
		XM_CLIBS=
		NATDEPFILES="${NATDEPFILES} ppc-linux-nat.o ppc-linux.o"
		;;
	esac
	;;
    sol2)
	case ${gdb_host_cpu} in
	    sparc)
		# Host: Solaris SPARC & UltraSPARC
		NAT_FILE='nm-sol2.h'
		NATDEPFILES='sparc-sol2-nat.o \
		fork-child.o \
		procfs.o proc-api.o proc-events.o proc-flags.o proc-why.o'
		HAVE_NATIVE_GCORE_HOST=1
		;;
	esac
	;;
    sol2-64)
	case ${gdb_host_cpu} in
	    i386)
		# Host: Solaris x86_64
		NATDEPFILES='fork-child.o amd64-nat.o i386-v4-nat.o i386-sol2-nat.o \
		procfs.o proc-api.o proc-events.o proc-flags.o proc-why.o'
		HAVE_NATIVE_GCORE_HOST=1
		;;
	esac
	;;
    spu-linux)
	case ${gdb_host_cpu} in
	    powerpc)
		# Target: Cell BE (PowerPC64 + SPU)
		# This implements a 'pseudo-native' GDB running on the
		# PPU side of the Cell BE and debugging the SPU side.
		NAT_FILE=
		NAT_CDEPS=
		LOADLIBES=
		NATDEPFILES='spu-linux-nat.o fork-child.o inf-ptrace.o \
		      linux-procfs.o linux-ptrace.o linux-waitpid.o \
		      linux-personality.o linux-namespaces.o'
		;;
	esac
	;;
esac
