annotate sources/toys/run-emulator.sh @ 568:856ba27e397b

Actually make it give a PATH for distcc to find gcc with
author Mark Miller <mark@mirell.org>
date Mon, 05 Jan 2009 19:21:07 -0600
parents 7a820e5c8ca5
children 8e7db79a3d75
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
499
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
1 #!/bin/bash
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
2
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
3 # Parse command line arguments
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
4
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
5 while [ ! -z "$1" ]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
6 do
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
7 if [ "$1" == "--make-hdb" ]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
8 then
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
9 shift
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
10 HDBMEGS="$1"
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
11 elif [ "$1" == "--with-hdb" ]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
12 then
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
13 shift
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
14 HDB="$1"
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
15 elif [ "$1" == "--with-distcc" ]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
16 then
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
17 DCC="$(which distccd)"
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
18 if [ -z "$DCC" ]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
19 then
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
20 echo 'No distccd in $PATH' >&2
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
21 exit 1
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
22 fi
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
23
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
24 shift
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
25 DISTCC_PATH="$1"
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
26 else
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
27 echo "unknown argument $1"
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
28 echo 'Usage: run-emulator.sh [--make-hdb $MEGS] [--with-hdb $FILE] [$CROSS_COMPILER_PATH]' >&2
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
29 exit 1
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
30 fi
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
31
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
32 shift
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
33 done
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
34
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
35 if [ ! -z "$DISTCC_PATH" ]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
36 then
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
37
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
38 # Try to find a unique port number for each running instance of the program.
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
39
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
40 # To reduce the chance of the port already being in use by another program,
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
41 # we use a range either before or after that used by normal programs, but
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
42 # beyond that allocated to most persistent demons. There's a small chance
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
43 # even these ports are already in use, but this at least prevents
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
44 # simultaneous run-emulator instances for different targets from
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
45 # trivially interfering with each other.
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
46
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
47 START=8192
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
48 RANGE=$[$(awk '{print $1}' /proc/sys/net/ipv4/ip_local_port_range)-$START]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
49 if [ $RANGE -lt 1 ]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
50 then
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
51 START=$[$(awk '{print $2}' /proc/sys/net/ipv4/ip_local_port_range)]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
52 RANGE=$[65535-$START]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
53 fi
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
54 PORT=$[($$%$RANGE)+$START]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
55
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
56 # Run the distcc daemon on the host system with $PATH restricted to the
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
57 # cross compiler binaries.
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
58
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
59 # Note that we tell it --no-detach and background it oursleves so jobs -p can
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
60 # find it later to kill it after the emulator exits.
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
61
568
856ba27e397b Actually make it give a PATH for distcc to find gcc with
Mark Miller <mark@mirell.org>
parents: 566
diff changeset
62 PATH="$(readlink -f "$DISTCC_PATH"/*-unknown-linux/bin)" "$DCC" --listen 127.0.0.1 \
499
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
63 --no-detach --log-file distccd.log --log-level warning --daemon \
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
64 -a 127.0.0.1 -p $PORT &
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
65 # Cleanup afterwards: Kill child processes we started (I.E. distccd).
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
66 trap "kill $(jobs -p)" EXIT
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
67
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
68 # Prepare some environment variables for run-qemu.sh
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
69
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
70 DISTCC_PATH_PREFIX=/tools/distcc:
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
71 CPUS=$[$(echo /sys/devices/system/cpu/cpu[0-9]* | wc -w)*2]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
72 KERNEL_EXTRA="DISTCC_HOSTS=10.0.2.2:$PORT CPUS=$CPUS $KERNEL_EXTRA"
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
73 fi
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
74
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
75 # Should we set up an ext3 image as a second virtual hard drive for /home?
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
76
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
77 # Default to image "hdb.img"
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
78 [ -z "$HDB" ] && HDB="hdb.img"
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
79
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
80 if [ ! -e "$HDB" ]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
81 then
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
82
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
83 # If we don't already have an hdb image, should we set up a sparse file and
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
84 # format it ext3?
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
85
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
86 if [ ! -z "$HDBMEGS" ]
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
87 then
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
88 dd if=/dev/zero of="$HDB" bs=1024 seek=$[$HDBMEGS*1024-1] count=1 &&
566
7a820e5c8ca5 More <strike>cowbell</strike> inodes.
Rob Landley <rob@landley.net>
parents: 499
diff changeset
89 mke2fs -b 1024 -F "$HDB" -i 4096 &&
499
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
90 tune2fs -j -c 0 -i 0 "$HDB"
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
91
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
92 [ $? -ne 0 ] && exit 1
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
93 fi
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
94 fi
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
95
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
96 [ -e "$HDB" ] && WITH_HDB="-hdb $HDB"
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
97
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
98 # The actual emulator invocation command gets appended here
9d5fd8e1467b Merge run-*.sh so run-emulator.sh takes command line arguments. Rename emulator-build.sh to be more clear what it does.
Rob Landley <rob@landley.net>
parents:
diff changeset
99