# ; -*- mode: sh ; -*-
# Copyright (C) 2013-2018 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'
	;;
    sol2)
	NATDEPFILES='fork-child.o fork-inferior.o \
	    procfs.o proc-api.o proc-events.o proc-flags.o proc-why.o \
	    sol-thread.o'
	HAVE_NATIVE_GCORE_HOST=1
        ;;
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} linux-nat-trad.o 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=
		;;
	    arm)
		# Host: FreeBSD/arm
		NATDEPFILES="${NATDEPFILES} arm-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"
		;;
	    riscv*)
		# Host: FreeBSD/riscv
		NATDEPFILES="${NATDEPFILES} riscv-fbsd-nat.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
	;;
    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 \
		aarch64-sve-linux-ptrace.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} linux-nat-trad.o \
		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 ppc-linux.o"
		;;
	    riscv*)
		# Host: RISC-V, running Linux
		NATDEPFILES="${NATDEPFILES} riscv-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'
		;;
	    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
	    i386)
		# Host: Solaris x86_64
		NATDEPFILES="${NATDEPFILES} \
		amd64-nat.o i386-sol2-nat.o"
		;;
	    sparc)
		# Host: Solaris SPARC & UltraSPARC
		NAT_FILE='nm-sol2.h'
		NATDEPFILES="${NATDEPFILES} sparc-sol2-nat.o"
		;;
	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 \
		      inf-ptrace.o fork-child.o fork-inferior.o \
		      linux-procfs.o linux-ptrace.o linux-waitpid.o \
		      linux-personality.o linux-namespaces.o'
		;;
	esac
	;;
esac
