# ; -*- mode: sh ; -*-
# Copyright (C) 2013-2020 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 nat/netbsd-nat.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 nat/windows-nat.o'
	;;
    mingw*)
	NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o nat/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} i386-windows-nat.o 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 \
		     nat/fork-inferior.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 \
		nat/riscv-linux-tdesc.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} i386-windows-nat.o 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-netbsd-nat.o"
		;;
	    pa)
		# Host: NetBSD/hppa
		NATDEPFILES="${NATDEPFILES} netbsd-nat.o hppa-netbsd-nat.o"
		;;
	    powerpc)
		# Host: NetBSD/powerpc
		NATDEPFILES="${NATDEPFILES} ppc-netbsd-nat.o bsd-kvm.o"
		LOADLIBES='-lkvm'
		;;
	    sh)
		# Host: NetBSD/sh
		NATDEPFILES="${NATDEPFILES} sh-netbsd-nat.o"
		;;

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

	esac
	;;
    nbsdelf)
	case ${gdb_host_cpu} in
	    arm)
		# Host: NetBSD/arm
		NATDEPFILES="${NATDEPFILES} arm-netbsd-nat.o"
		;;
	    i386)
		# Host: NetBSD/i386 ELF
		NATDEPFILES="${NATDEPFILES} netbsd-nat.o x86-nat.o \
		nat/x86-dregs.o \
		x86-bsd-nat.o i386-bsd-nat.o i386-netbsd-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-netbsd-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-nat.o \
		x86-bsd-nat.o amd64-bsd-nat.o amd64-obsd-nat.o bsd-kvm.o \
		nat/x86-dregs.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
	;;
esac
