clean up, and make progress on, the discovery section.
[tor.git] / contrib / cross.sh
blob8d107a4bec85d448c0a6c73a4f2c63369857f5a5
1 #!/bin/bash
2 # $Id$
3 # Copyright 2006 Michael Mohr with modifications by Roger Dingledine
4 # See LICENSE for licensing information.
6 #######################################################################
7 # Tor-cross: a tool to help cross-compile Tor
9 # The purpose of a cross-compiler is to produce an executable for
10 # one system (CPU) on another. This is useful, for example, when
11 # the target system does not have a native compiler available.
12 # You might, for example, wish to cross-compile a program on your
13 # host (the computer you're working on now) for a target such as
14 # a router or handheld computer.
16 # A number of environment variables must be set in order for this
17 # script to work:
18 # $PREFIX, $CROSSPATH, $ARCH_PREFIX, $HOST,
19 # and (optionally) $BUILD
20 # Please run the script for a description of each one. If automated
21 # builds are desired, the above variables can be exported at the top
22 # of this script.
24 # Recent releases of Tor include test programs in configure. Normally
25 # this is a good thing, since it catches a number of problems.
26 # However, this also presents a problem when cross compiling, since
27 # you can't run binary images for the target system on the host.
29 # Tor-cross assumes that you know what you're doing and removes a
30 # number of checks known to cause problems with this process.
31 # Note that this does not guarantee that the program will run or
32 # even compile; it simply allows configure to generate the Makefiles.
34 # Stripping the binaries should almost always be done for an
35 # embedded environment where space is at an exacting premium.
36 # However, the default is NOT to strip them since they are useful for
37 # debugging. If you do not plan to do any debugging and you
38 # don't care about the debugging symbols, set $STRIP to "yes" before
39 # running this script.
41 # Tor-cross was written by Michael Mohr. He can be contacted at
42 # m(dot)mohr(at)laposte(dot)net. Comments are appreciated, but
43 # flames go to /dev/null.
45 # The target with which this script is tested is little-endian
46 # MIPS Linux, built on an Athlon-based Linux desktop.
48 #######################################################################
50 # disable the platform-specific tests in configure
51 export CROSS_COMPILE=yes
53 # for error conditions
54 EXITVAL=0
56 if [ ! -f configure ]
57 then
58 echo "Please run this script from the root of the Tor distribution"
59 echo "and ensure that autogen.sh has been run."
60 EXITVAL=-1
63 if [ -z $PREFIX ]
64 then
65 echo "You must define \$PREFIX since you are cross-compiling."
66 echo "Select a non-system location (i.e. /tmp/tor-cross):"
67 echo " export PREFIX=/tmp/tor-cross"
68 EXITVAL=-1
71 if [ -z $CROSSPATH ]
72 then
73 echo "You must define the location of your cross-compiler's"
74 echo "directory using \$CROSSPATH; for example,"
75 echo " export CROSSPATH=/opt/cross/staging_dir_mipsel/bin"
76 EXITVAL=-1
79 if [ -z $ARCH_PREFIX ]
80 then
81 echo "You must define \$ARCH_PREFIX to continue. For example,"
82 echo "if you normally cross-compile applications using"
83 echo "mipsel-linux-uclibc-gcc, you would set \$ARCH_PREFIX like so:"
84 echo " export ARCH_PREFIX=mipsel-linux-uclibc-"
85 EXITVAL=-1
88 if [ -z $HOST ]
89 then
90 echo "You must specify a target processor with \$HOST; for example:"
91 echo " export HOST=mipsel-unknown-elf"
92 EXITVAL=-1
95 if [ -z $BUILD ]
96 then
97 echo "You should specify the host machine's type with \$BUILD; for example:"
98 echo " export BUILD=i686-pc-linux-gnu"
99 echo "If you wish to let configure autodetect the host, set \$BUILD to 'auto':"
100 echo " export BUILD=auto"
101 EXITVAL=-1
104 if [ $EXITVAL -ne 0 ]
105 then
106 echo "Remember, you can hard-code these values in cross.sh if needed."
107 exit $EXITVAL
110 # clean up any existing object files
111 if [ -f src/or/tor ]
112 then
113 make clean
116 # Set up the build environment and try to run configure
117 export PATH=$PATH:$CROSSPATH
118 export RANLIB=${ARCH_PREFIX}ranlib
119 export CC=${ARCH_PREFIX}gcc
121 if [ $BUILD == "auto" ]
122 then
123 ./configure \
124 --enable-debug \
125 --enable-eventdns \
126 --prefix=$PREFIX \
127 --host=$HOST
128 else
129 ./configure \
130 --enable-debug \
131 --enable-eventdns \
132 --prefix=$PREFIX \
133 --host=$HOST \
134 --build=$BUILD
137 # has a problem occurred?
138 if [ $? -ne 0 ]
139 then
140 echo ""
141 echo "A problem has been detected with configure."
142 echo "Please check the output above and rerun cross.sh"
143 echo ""
144 exit -1
147 # Now we're cookin'
149 make
151 # has a problem occurred?
152 if [ $? -ne 0 ]
153 then
154 echo ""
155 echo "A problem has been detected with make."
156 echo "Please check the output above and rerun make."
157 echo ""
158 exit -1
161 # if $STRIP has length (i.e. STRIP=yes), strip the binaries
162 if [ ! -z $STRIP ]
163 then
164 ${ARCH_PREFIX}strip \
165 src/or/tor \
166 src/or/test \
167 src/tools/tor-resolve
170 echo ""
171 echo "Tor should be compiled at this point. Now run 'make install' to"
172 echo "install to $PREFIX"
173 echo ""