9a7a5f9088302c80a53d404295279fac6997d6e0
[qemu] / configure
1 #!/bin/sh
2 #
3 # qemu configure script (c) 2003 Fabrice Bellard
4 #
5 # set temporary file name
6 if test ! -z "$TMPDIR" ; then
7     TMPDIR1="${TMPDIR}"
8 elif test ! -z "$TEMPDIR" ; then
9     TMPDIR1="${TEMPDIR}"
10 else
11     TMPDIR1="/tmp"
12 fi
13
14 TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c"
15 TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o"
16 TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}"
17 TMPS="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.S"
18 TMPH="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.h"
19
20 # default parameters
21 prefix="/usr/local"
22 interp_prefix="/usr/gnemul/qemu-i386"
23 static="no"
24 cross_prefix=""
25 cc="gcc"
26 host_cc="gcc"
27 ar="ar"
28 make="make"
29 strip="strip"
30 target_cpu="x86"
31 cpu=`uname -m`
32 case "$cpu" in
33   i386|i486|i586|i686|i86pc|BePC)
34     cpu="x86"
35   ;;
36   armv4l)
37     cpu="armv4l"
38   ;;
39   alpha)
40     cpu="alpha"
41   ;;
42   "Power Macintosh"|ppc|ppc64)
43     cpu="powerpc"
44   ;;
45   mips)
46     cpu="mips"
47   ;;
48   s390)
49     cpu="s390"
50   ;;
51   sparc)
52     cpu="sparc"
53   ;;
54   sparc64)
55     cpu="sparc64"
56   ;;
57   ia64)
58     cpu="ia64"
59   ;;
60   *)
61     cpu="unknown"
62   ;;
63 esac
64 gprof="no"
65 bigendian="no"
66
67 # OS specific
68 targetos=`uname -s`
69 case $targetos in
70 *) ;;
71 esac
72
73 # find source path
74 # XXX: we assume an absolute path is given when launching configure, 
75 # except in './configure' case.
76 source_path=${0%configure}
77 source_path=${source_path%/}
78 source_path_used="yes"
79 if test -z "$source_path" -o "$source_path" = "." ; then
80     source_path=`pwd`
81     source_path_used="no"
82 fi
83
84 for opt do
85   case "$opt" in
86   --prefix=*) prefix=`echo $opt | cut -d '=' -f 2`
87   ;;
88   --interp-prefix=*) interp_prefix=`echo $opt | cut -d '=' -f 2`
89   ;;
90   --source-path=*) source_path=`echo $opt | cut -d '=' -f 2`
91   ;;
92   --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2`
93   ;;
94   --cc=*) cc=`echo $opt | cut -d '=' -f 2`
95   ;;
96   --make=*) make=`echo $opt | cut -d '=' -f 2`
97   ;;
98   --extra-cflags=*) CFLAGS="${opt#--extra-cflags=}"
99   ;;
100   --extra-ldflags=*) LDFLAGS="${opt#--extra-ldflags=}"
101   ;;
102   --extra-libs=*) extralibs=${opt#--extra-libs=}
103   ;;
104   --cpu=*) cpu=`echo $opt | cut -d '=' -f 2`
105   ;;
106   --enable-gprof) gprof="yes"
107   ;;
108   --static) static="yes"
109   ;;
110   esac
111 done
112
113 # Checking for CFLAGS
114 if test -z "$CFLAGS"; then
115     CFLAGS="-O2"
116 fi
117
118 cc="${cross_prefix}${cc}"
119 ar="${cross_prefix}${ar}"
120 strip="${cross_prefix}${strip}"
121
122 if test -z "$cross_prefix" ; then
123
124 # ---
125 # big/little endian test
126 cat > $TMPC << EOF
127 #include <inttypes.h>
128 int main(int argc, char ** argv){
129         volatile uint32_t i=0x01234567;
130         return (*((uint8_t*)(&i))) == 0x67;
131 }
132 EOF
133
134 if $cc -o $TMPE $TMPC 2>/dev/null ; then
135 $TMPE && bigendian="yes"
136 else
137 echo big/little test failed
138 fi
139
140 else
141
142 # if cross compiling, cannot launch a program, so make a static guess
143 if test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "s390" -o "$cpu" = "sparc" -o "$cpu" = "sparc64"; then
144     bigendian="yes"
145 fi
146
147 fi
148
149 # check gcc version
150 cat > $TMPC <<EOF
151 int main(void) {
152 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
153 return 0;
154 #else
155 #error gcc < 3.2
156 #endif
157 }
158 EOF
159
160 gcc_major="2"
161 if $cc -o $TMPO $TMPC 2> /dev/null ; then
162    gcc_major="3"
163 fi
164
165 if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
166 cat << EOF
167
168 Usage: configure [options]
169 Options: [defaults in brackets after descriptions]
170
171 EOF
172 echo "Standard options:"
173 echo "  --help                   print this message"
174 echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
175 echo "  --interp-prefix=PREFIX   where to find shared libraries, etc. [$interp_prefix]"
176 echo ""
177 echo "Advanced options (experts only):"
178 echo "  --source-path=PATH       path of source code [$source_path]"
179 echo "  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]"
180 echo "  --cc=CC                  use C compiler CC [$cc]"
181 echo "  --make=MAKE              use specified make [$make]"
182 echo "  --static                 enable static build [$static]"
183 echo ""
184 echo "NOTE: The object files are build at the place where configure is launched"
185 exit 1
186 fi
187
188 echo "Install prefix    $prefix"
189 echo "Source path       $source_path"
190 echo "ELF interp prefix $interp_prefix"
191 echo "C compiler        $cc"
192 echo "make              $make"
193 echo "host CPU          $cpu"
194 echo "Big Endian        $bigendian"
195 echo "target CPU        $target_cpu"
196 echo "gprof enabled     $gprof"
197 echo "static build      $static"
198
199 echo "Creating config.mak and config.h"
200
201 echo "# Automatically generated by configure - do not modify" > config.mak
202 echo "/* Automatically generated by configure - do not modify */" > $TMPH
203
204 echo "prefix=$prefix" >> config.mak
205 echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix\"" >> $TMPH
206 echo "MAKE=$make" >> config.mak
207 echo "CC=$cc" >> config.mak
208 echo "GCC_MAJOR=$gcc_major" >> config.mak
209 echo "HOST_CC=$host_cc" >> config.mak
210 echo "AR=$ar" >> config.mak
211 echo "STRIP=$strip -s -R .comment -R .note" >> config.mak
212 echo "CFLAGS=$CFLAGS" >> config.mak
213 echo "LDFLAGS=$LDFLAGS" >> config.mak
214 if test "$cpu" = "x86" ; then
215   echo "ARCH=i386" >> config.mak
216   echo "#define HOST_I386 1" >> $TMPH
217 elif test "$cpu" = "armv4l" ; then
218   echo "ARCH=arm" >> config.mak
219   echo "#define HOST_ARM 1" >> $TMPH
220 elif test "$cpu" = "powerpc" ; then
221   echo "ARCH=ppc" >> config.mak
222   echo "#define HOST_PPC 1" >> $TMPH
223 elif test "$cpu" = "mips" ; then
224   echo "ARCH=mips" >> config.mak
225   echo "#define HOST_MIPS 1" >> $TMPH
226 elif test "$cpu" = "s390" ; then
227   echo "ARCH=s390" >> config.mak
228   echo "#define HOST_S390 1" >> $TMPH
229 elif test "$cpu" = "alpha" ; then
230   echo "ARCH=alpha" >> config.mak
231   echo "#define HOST_ALPHA 1" >> $TMPH
232 elif test "$cpu" = "sparc" ; then
233   echo "ARCH=sparc" >> config.mak
234   echo "#define HOST_SPARC 1" >> $TMPH
235 elif test "$cpu" = "sparc64" ; then
236   echo "ARCH=sparc64" >> config.mak
237   echo "#define HOST_SPARC64 1" >> $TMPH
238 elif test "$cpu" = "ia64" ; then
239   echo "ARCH=ia64" >> config.mak
240   echo "#define HOST_IA64 1" >> $TMPH
241 else
242   echo "Unsupported CPU"
243   exit 1
244 fi
245 if test "$bigendian" = "yes" ; then
246   echo "WORDS_BIGENDIAN=yes" >> config.mak
247   echo "#define WORDS_BIGENDIAN 1" >> $TMPH
248 fi
249 if test "$gprof" = "yes" ; then
250   echo "TARGET_GPROF=yes" >> config.mak
251   echo "#define HAVE_GPROF 1" >> $TMPH
252 fi
253 if test "$static" = "yes" ; then
254   echo "CONFIG_STATIC=yes" >> config.mak
255 fi
256 echo -n "VERSION=" >>config.mak
257 head $source_path/VERSION >>config.mak
258 echo "" >>config.mak
259 echo -n "#define QEMU_VERSION \"" >> $TMPH
260 head $source_path/VERSION >> $TMPH
261 echo "\"" >> $TMPH
262
263 # build tree in object directory if source path is different from current one
264 if test "$source_path_used" = "yes" ; then
265     DIRS="tests"
266     FILES="Makefile tests/Makefile"
267     for dir in $DIRS ; do
268             mkdir -p $dir
269     done
270     for f in $FILES ; do
271         ln -sf $source_path/$f $f
272     done
273 fi
274 echo "SRC_PATH=$source_path" >> config.mak
275
276 diff $TMPH config.h >/dev/null 2>&1
277 if test $? -ne 0 ; then
278         mv -f $TMPH config.h
279 else
280         echo "config.h is unchanged"
281 fi
282
283 rm -f $TMPO $TMPC $TMPE $TMPS $TMPH