#! /bin/sh

if [ $1 ]; then
    uname="$1"
else
    uname=`uname -m`
    echo "Defaulting to this machine's architecture, $uname, for linking."
    echo "This may be overridden on the command line (i386,x86_64,ia64)."
fi

C=$PWD

if [ -n "$XEN" -a -d "$XEN" ]; then
  XEN=$(cd $XEN && pwd)
else
  XEN=$C/../../xen
fi

if [ -n "$XL" -a -d "$XL" ]; then
  XL=$(cd $XL && pwd)
else
  XL=$C/../../linux-2.6.18-xen.hg
fi

for d in $(find ${XL}/drivers/xen/ -maxdepth 1 -type d | sed -e 1d); do
    if ! echo $d | egrep -q back; then
        lndir $d $(basename $d) > /dev/null 2>&1
    fi
    if ! echo $d | egrep -q ball; then
        lndir $d $(basename $d) > /dev/null 2>&1
    fi
done

ln -sf ${XL}/drivers/xen/core/gnttab.c platform-pci
ln -sf ${XL}/drivers/xen/core/features.c platform-pci
ln -sf ${XL}/drivers/xen/core/xen_proc.c xenbus
ln -sf ${XL}/drivers/xen/core/reboot.c platform-pci

mkdir -p include/asm include/xen

lndir -silent ${XL}/include/xen include/xen
ln -nsf ${XEN}/include/public include/xen/interface

# Need to be quite careful here: we don't want the files we link in to
# risk overriding the native Linux ones (in particular, system.h must
# be native and not xenolinux).
case "$uname"
in
"x86_64")
    ln -sf ${XL}/include/asm-x86_64/mach-xen/asm/hypervisor.h include/asm
    ln -sf ${XL}/include/asm-x86_64/mach-xen/asm/hypercall.h include/asm
    ln -sf ${XL}/include/asm-x86_64/mach-xen/asm/synch_bitops.h include/asm
    ln -sf ${XL}/include/asm-x86_64/mach-xen/asm/maddr.h include/asm
    ln -sf ${XL}/include/asm-x86_64/mach-xen/asm/gnttab_dma.h include/asm
    mkdir -p include/asm-i386
    lndir -silent ${XL}/include/asm-i386 include/asm-i386
  ;;
i[34567]86)
    ln -sf ${XL}/include/asm-i386/mach-xen/asm/hypervisor.h include/asm
    ln -sf ${XL}/include/asm-i386/mach-xen/asm/hypercall.h include/asm
    ln -sf ${XL}/include/asm-i386/mach-xen/asm/synch_bitops.h include/asm
    ln -sf ${XL}/include/asm-i386/mach-xen/asm/maddr.h include/asm
    ln -sf ${XL}/include/asm-i386/mach-xen/asm/gnttab_dma.h include/asm
  ;;
"ia64")
    ln -sf ${XL}/include/asm-ia64/hypervisor.h include/asm
    ln -sf ${XL}/include/asm-ia64/hypercall.h include/asm
    ln -sf ${XL}/include/asm-ia64/synch_bitops.h include/asm
    ln -sf ${XL}/include/asm-ia64/maddr.h include/asm
    ln -sf ${XL}/include/asm-ia64/gnttab_dma.h include/asm
    mkdir -p include/asm/xen
    ln -sf ${XL}/include/asm-ia64/xen/xcom_hcall.h include/asm/xen
    ln -sf ${XL}/include/asm-ia64/xen/xencomm.h include/asm/xen
    ln -sf ${XL}/arch/ia64/xen/xcom_hcall.c platform-pci/
    ln -sf ${XL}/arch/ia64/xen/xencomm.c platform-pci/xencomm_arch.c
    ln -sf ${XL}/drivers/xen/core/xencomm.c platform-pci
  ;;
*)
    echo unknown architecture $uname
    exit 1
  ;;
esac
