# ; -*- mode: sh ; -*-
# Copyright (C) 2013-2019 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 nat/fork-inferior.o \
		proc-service.o \
		linux-thread-db.o linux-nat.o nat/linux-osdata.o linux-fork.o \
		nat/linux-procfs.o nat/linux-ptrace.o nat/linux-waitpid.o \
		nat/linux-personality.o nat/linux-namespaces.o'
	NAT_CDEPS='$(srcdir)/proc-service.list'
	LOADLIBES='-ldl $(RDYNAMIC)'
	;;
    fbsd*)
	NATDEPFILES='fork-child.o nat/fork-inferior.o inf-ptrace.o fbsd-nat.o'
	HAVE_NATIVE_GCORE_HOST=1
	LOADLIBES='-lkvm'
	;;
    nbsd*)
	NATDEPFILES='fork-child.o nat/fork-inferior.o inf-ptrace.o'
	HAVE_NATIVE_GCORE_HOST=1
	;;
    obsd*)
	NATDEPFILES='fork-child.o nat/fork-inferior.o inf-ptrace.o'
	;;
    cygwin*)
	NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o'
	;;
    mingw*)
	NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o'
	;;
    aix)
	NATDEPFILES='nat/fork-inferior.o fork-child.o inf-ptrace.o'
	;;
    darwin)
	NATDEPFILES='fork-child.o nat/fork-inferior.o darwin-nat.o \
	    darwin-nat-info.o'
	;;
    sol2)
	NATDEPFILES='fork-child.o nat/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 \
		    nat/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 nat/x86-dregs.o \
		x86-bsd-nat.o i386-bsd-nat.o i386-fbsd-nat.o bsd-kvm.o"
		;;
	    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 nat/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 nat/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 nat/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 nat/aarch64-linux-hw-point.o \
		nat/aarch64-linux.o \
		nat/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 nat/x86-dregs.o \
		i386-linux-nat.o x86-linux-nat.o nat/linux-btrace.o \
		nat/x86-linux.o nat/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 nat/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 nat/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 nat/x86-dregs.o \
		amd64-nat.o amd64-linux-nat.o x86-linux-nat.o \
		nat/linux-btrace.o \
		nat/x86-linux.o nat/x86-linux-dregs.o \
		nat/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 \
		nat/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 \
		nat/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 nat/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 nat/fork-inferior.o \
		      nat/linux-procfs.o nat/linux-ptrace.o \
		      nat/linux-waitpid.o \
		      nat/linux-personality.o nat/linux-namespaces.o'
		;;
	esac
	;;
esac
