|
@@ -0,0 +1,167 @@
|
|
|
+#!/bin/bash
|
|
|
+# $Id$
|
|
|
+# Copyright 2006 Michael Mohr
|
|
|
+# See LICENSE for licensing information.
|
|
|
+
|
|
|
+#######################################################################
|
|
|
+# Tor-cross: a tool to help cross-compile Tor
|
|
|
+#
|
|
|
+# mailto:tor-assistants@freehaven.net
|
|
|
+#
|
|
|
+# The purpose of a cross-compiler is to produce an executable for
|
|
|
+# one system (CPU) on another. This is useful, for example, when
|
|
|
+# the target system does not have a native compiler available.
|
|
|
+# You might, for example, wish to cross-compile a program on your
|
|
|
+# host (the computer you're working on now) for a target such as
|
|
|
+# a router or handheld computer.
|
|
|
+#
|
|
|
+# This script automatically patches two files in the Tor source:
|
|
|
+# configure.in : remove test programs
|
|
|
+# compat.h : remove check for NULL==0
|
|
|
+#
|
|
|
+# A number of environment variables must be set in order for this
|
|
|
+# script to work:
|
|
|
+# $PREFIX, $CROSSPATH, $ARCH_PREFIX, $HOST,
|
|
|
+# and (optionally) $BUILD
|
|
|
+# Please run the script for a description of each one. If automated
|
|
|
+# builds are desired, the above variables can be exported at the top
|
|
|
+# of this script.
|
|
|
+#
|
|
|
+# Recent releases of Tor include test programs in configure. Normally
|
|
|
+# this is a good thing, since it catches a number of problems.
|
|
|
+# However, this also presents a problem when cross compiling, since
|
|
|
+# you can't run binary images for the target system on the host.
|
|
|
+#
|
|
|
+# Tor-cross assumes that you know what you're doing and removes a
|
|
|
+# number of checks known to cause problems with this process.
|
|
|
+# Note that this does not guarantee that the program will run or
|
|
|
+# even compile; it simply allows configure to generate the Makefiles.
|
|
|
+#
|
|
|
+# Stripping the binaries should almost always be done for an
|
|
|
+# embedded environment where space is at an exacting premium.
|
|
|
+# However, the default is NOT to strip them since they are useful for
|
|
|
+# debugging. If you do not plan to do any debugging and you
|
|
|
+# don't care about the debugging symbols, set $STRIP to "yes" before
|
|
|
+# running this script.
|
|
|
+#
|
|
|
+# Tor-cross was written by Michael Mohr. He can be contacted at
|
|
|
+# m(dot)mohr(at)laposte(dot)net. Comments are appreciated, but
|
|
|
+# flames go to /dev/null.
|
|
|
+#
|
|
|
+# The target with which this script is tested is little-endian
|
|
|
+# MIPS Linux, built on an Athlon-based Linux desktop.
|
|
|
+#
|
|
|
+#######################################################################
|
|
|
+
|
|
|
+# disable some show-stopping bugs (see cross.patch for more)
|
|
|
+export CROSS_COMPILE=yes
|
|
|
+
|
|
|
+if [ ! -f configure.in ]
|
|
|
+then
|
|
|
+ echo "Please run this script from the root of the Tor distribution."
|
|
|
+ exit -1
|
|
|
+fi
|
|
|
+
|
|
|
+if [ -z $PREFIX ]
|
|
|
+then
|
|
|
+ echo "You must define \$PREFIX since you are cross-compiling."
|
|
|
+ echo "Select a non-system location (i.e. /tmp/tor-cross):"
|
|
|
+ echo " export PREFIX=/tmp/tor-cross"
|
|
|
+ exit -1
|
|
|
+fi
|
|
|
+
|
|
|
+if [ -z $CROSSPATH ]
|
|
|
+then
|
|
|
+ echo "You must define the location of your cross-compiler's"
|
|
|
+ echo "directory using \$CROSSPATH; for example,"
|
|
|
+ echo " export CROSSPATH=/opt/cross/staging_dir_mipsel/bin"
|
|
|
+ exit -1
|
|
|
+fi
|
|
|
+
|
|
|
+if [ -z $ARCH_PREFIX ]
|
|
|
+then
|
|
|
+ echo "You must define \$ARCH_PREFIX to continue. For example,"
|
|
|
+ echo "if you normally cross-compile applications using"
|
|
|
+ echo "mipsel-linux-uclibc-gcc, you would set \$ARCH_PREFIX like so:"
|
|
|
+ echo " export ARCH_PREFIX=mipsel-linux-uclibc-"
|
|
|
+ exit -1
|
|
|
+fi
|
|
|
+
|
|
|
+if [ -z $HOST ]
|
|
|
+then
|
|
|
+ echo "You must specify a target processor with \$HOST; for example:"
|
|
|
+ echo " export HOST=mipsel-unknown-elf"
|
|
|
+ exit -1
|
|
|
+fi
|
|
|
+
|
|
|
+if [ -z $BUILD ]
|
|
|
+then
|
|
|
+ echo "You should specify the host machine's type with \$BUILD; for example:"
|
|
|
+ echo " export BUILD=i686-pc-linux-gnu"
|
|
|
+ echo "If you wish to let configure autodetect the host, set \$BUILD to 'auto':"
|
|
|
+ echo " export BUILD=auto"
|
|
|
+ exit -1
|
|
|
+fi
|
|
|
+
|
|
|
+# clean up any existing object files
|
|
|
+if [ -f src/or/tor ]
|
|
|
+then
|
|
|
+ make clean
|
|
|
+fi
|
|
|
+
|
|
|
+# check if the source has already been patched
|
|
|
+patch -f -p1 -R --dry-run < contrib/cross.patch > /dev/null 2>&1
|
|
|
+# if it hasn't, rerun the autotools
|
|
|
+if [ $? -ne 0 ]
|
|
|
+then
|
|
|
+ patch -p1 < contrib/cross.patch
|
|
|
+ aclocal
|
|
|
+ autoconf
|
|
|
+ autoheader
|
|
|
+ automake --add-missing
|
|
|
+fi
|
|
|
+
|
|
|
+# Set up the buld environment and try to run configure
|
|
|
+export PATH=$PATH:$CROSSPATH
|
|
|
+export RANLIB=${ARCH_PREFIX}ranlib
|
|
|
+export CC=${ARCH_PREFIX}gcc
|
|
|
+
|
|
|
+if [ $BUILD == "auto" ]
|
|
|
+then
|
|
|
+ ./configure \
|
|
|
+ --prefix=$PREFIX \
|
|
|
+ --host=$HOST
|
|
|
+else
|
|
|
+ ./configure \
|
|
|
+ --prefix=$PREFIX \
|
|
|
+ --host=$HOST \
|
|
|
+ --build=$BUILD
|
|
|
+fi
|
|
|
+
|
|
|
+# has a problem occurred?
|
|
|
+if [ $? -ne 0 ]
|
|
|
+then
|
|
|
+ echo ""
|
|
|
+ echo "A problem has been detected with configure."
|
|
|
+ echo "Please check the output above and rerun cross.sh"
|
|
|
+ echo ""
|
|
|
+ exit -1
|
|
|
+fi
|
|
|
+
|
|
|
+# Now we're cookin'
|
|
|
+
|
|
|
+make
|
|
|
+
|
|
|
+# if $STRIP has length (i.e. STRIP=yes), strip the binaries
|
|
|
+if [ ! -z $STRIP ]
|
|
|
+then
|
|
|
+${ARCH_PREFIX}strip \
|
|
|
+ src/or/tor \
|
|
|
+ src/or/test \
|
|
|
+ src/tools/tor-resolve
|
|
|
+fi
|
|
|
+
|
|
|
+echo ""
|
|
|
+echo "Tor should be compiled at this point. Now run 'make install' to"
|
|
|
+echo "install to $PREFIX"
|
|
|
+echo ""
|