1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
#!/bin/sh
#
# tcc-module - Build modules
#
# Written 2001 by Werner Almesberger
# Copyright 2001 by Werner Almesberger
#
# This script is modified by the Makefile to include TOPDIR
KMOD_FLAGS="-g -O -Wall \
-D__KERNEL__ -DMODULE -O -fomit-frame-pointer -fno-strict-aliasing"
TCMOD_FLAGS="-g -Wall -shared"
usage()
{
echo "usage: $0 [-k] [-X<phase>,<arg>] cls|sch <mod_def_incl_file>" 1>&2
echo " <module_name>" 1>&2
echo " -k keep MDI file" 1>&2
echo " -X<phase>,<arg> verbatim argument for specific build phase" 1>&2
echo " phases: k=kmod_cc, t=tcmod_cc"
exit 1
}
filter()
{
topdir=$TOPDIR
[ -z "$TCNG_TOPDIR" ] || topdir=$TCNG_TOPDIR
$topdir/lib/tcng/bin/kmod_cc $KMOD_FLAGS $kmod_cc_args -I. \
-DMDI_FILE=\"$mdi_file\" -o cls_$mod_name.o \
$topdir/lib/tcng/lib/tcm_cls.c || \
exit 1
$topdir/lib/tcng/bin/tcmod_cc $TCMOD_FLAGS $tcmod_cc_args -I. \
-DMDI_FILE=\"$mdi_file\" -o f_$mod_name.so \
$topdir/lib/tcng/lib/tcm_f.c || \
exit 1
}
qdisc()
{
false
}
phase_arg()
{
phase=`echo "$1" | sed 's/^-X\(.\).*/\1/'`;
arg=`echo "$1" | sed 's/^-X.,//'`;
case "$phase" in
k) kmod_cc_args="$kmod_cc_args $arg";;
t) tcmod_cc_args="$tcmod_cc_args $arg";;
*) usage;;
esac
}
kmod_cc_args=
tcmod_cc_args=
keep=false
while [ ! -z "$1" ]; do
case "$1" in
-k) keep=true;;
-X[kt],*) phase_arg "$1";;
-X) shift; phase_arg "-X$1";;
-*) usage;;
*) break;;
esac
shift
done
[ "$1" = cls -o "$1" = sch ] || usage
[ -z "$2" ] && usage
[ -r "$2" ] || { echo "can't access $2" 1>&2; exit 1; }
[ -z "$3" ] && usage
type=$1
mdi_file="$2"
mod_name=$3
if [ $type = cls ]; then
filter
else
qdisc
fi
$keep || rm -rf $mdi_file
|