summaryrefslogtreecommitdiffstats
path: root/tools/build/multigen
blob: 06bfe654499c40c5b355b80c81f278bd0cec379e (plain) (blame)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#!/bin/sh

# $Id$

version=0.1
verbose=0
target=
custom=0
config=0

usage()
{
program=`basename $0`
cat << EOF

$program generates RTEMS custom/*.cfgs and config-files for gcc multilib
variants a target's gcc supports

Usage: $program [options]

Options:
	--target=STRING         target
        --custom		generate make/custom/*.cfg files
        --config                generate config scripts
        --rtems=DIR             use DIR as location of RTEMS source tree
	-v, --verbose           verbose
	-h, --help              Print this usage
	--version               Print version and exit

Examples:
$program --config --target=sh-rtems --rtems=/usr/src/rtems-4.5.0
	Generates config scripts for all possible bare BSPs from all
	valid multilib variants sh-rtems-gcc supports

$program --custom --target=sh-rtems --rtems=/usr/src/rtems-4.5.0
	Generates /usr/src/rtems-4.5.0/make/custom/*.cfg files
        for all possible bare BSPs from the multilib variants 
        sh-rtems-gcc supports

Written by Ralf Corsepius <corsepiu@faw.uni-ulm.de>
EOF
}

while test $# -gt 0; do
  case "$1" in
  --rtems=*)
    rtems_srcdir=`echo "$1" | sed -e 's%--rtems=\(.*\)%\1%g'`
    ;;
  --target=*)
    target=`echo "$1" | sed -e 's%--target=\(.*\)%\1%g'`
    ;;
  -v|--verbose)
    verbose=1
    ;;
  --custom)
    custom=1
    ;;
  --config)
    config=1
    ;;
  --version)
    echo `basename $0` version $version
    exit 0
    ;;
  -h|--help)
    usage
    exit 1
    ;;
  *)
    echo "unknown option $1"
    usage
    exit 1
    ;;
  esac
  shift
done

if test $# -gt 0; then
  echo "Invalid number of arguments"
  exit 1
fi

if test x$target = x; then
  echo "Missing required option:"
  echo "	--target"
  exit 1
fi

if test x$rtems_srcdir = x; then
  echo "Missing required option:"
  echo "	--rtems"
  exit 1
fi

if test $config -eq 0 && test $custom -eq 0; then
  echo "Missing required option:"
  echo "	--config"
  echo "	--custom"
  echo " (At least one of these is required)"
  exit 1
fi

if test ! -r $rtems_srcdir/VERSION; then
  echo "Can't find rtems"
  echo "Check value passed to --rtems=<DIR>"
  exit 1
fi

if test x$target != x ;then
target_prefix=$target-
fi
 
# Check for CC
saved_IFS=$IFS; IFS=":"
for i in $PATH; do
  if test -f $i/${target_prefix}gcc; then
    CC=$i/${target_prefix}gcc
    break
  fi
done
IFS=$saved_IFS

if test x$CC = x; then
  echo "No valid gcc found"
  exit 1
fi
test $verbose -gt 0 && echo "Using $CC"

for i in `${CC} --print-multi-lib 2>/dev/null`; do 
  dir=`echo $i | sed -e 's/;.*$//'`
  case $dir in
  .) f=$target
     flags=""
     ;;
  *) f=`echo $target-$dir | sed -e 's%\/%-%g'`
     flags=`echo $i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`
     ;;
  esac

  if test $config -gt 0; then
    cfg="rtems-config.$f"
    test $verbose -gt 0 && echo "Generating: $cfg"

cat << EOF > $cfg
#!/bin/sh

${rtems_srcdir}/configure --target=$target \\
'--enable-bare-cpu-cflags=$flags' \\
--enable-rtemsbsp="bare" \\
--enable-bare-cpu-model=NONE \\
--disable-networking \\
--disable-tests \\
--enable-maintainer-mode
EOF
    chmod +x $cfg
  fi

  if test $custom -gt 0; then
    cfg=${rtems_srcdir}/make/custom/bare-$f.cfg
    test $verbose -gt 0 && echo "Generating: $cfg"
cat << EOF > $cfg
#  Config file for the bare-$f BSP

BARE_CPU_CFLAGS=$flags
BARE_CPU_MODEL=NONE

include \$(RTEMS_ROOT)/make/custom/bare.cfg
EOF

  fi
done

exit 0