xref: /openbmc/qemu/configure (revision 97a847bc03d22bf5b0562af2407bc3516b3bfdd1)
17d13299dSbellard#!/bin/sh
27d13299dSbellard#
33ef693a0Sbellard# qemu configure script (c) 2003 Fabrice Bellard
47d13299dSbellard#
57d13299dSbellard# set temporary file name
67d13299dSbellardif test ! -z "$TMPDIR" ; then
77d13299dSbellard    TMPDIR1="${TMPDIR}"
87d13299dSbellardelif test ! -z "$TEMPDIR" ; then
97d13299dSbellard    TMPDIR1="${TEMPDIR}"
107d13299dSbellardelse
117d13299dSbellard    TMPDIR1="/tmp"
127d13299dSbellardfi
137d13299dSbellard
143ef693a0SbellardTMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c"
153ef693a0SbellardTMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o"
163ef693a0SbellardTMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}"
173ef693a0SbellardTMPS="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.S"
187d13299dSbellard
197d13299dSbellard# default parameters
207d13299dSbellardprefix="/usr/local"
2132ce6337Sbellardinterp_prefix="/usr/gnemul/qemu-i386"
2243ce4dfeSbellardstatic="no"
237d13299dSbellardcross_prefix=""
247d13299dSbellardcc="gcc"
257d13299dSbellardhost_cc="gcc"
267d13299dSbellardar="ar"
277d13299dSbellardmake="make"
287d13299dSbellardstrip="strip"
297d13299dSbellardcpu=`uname -m`
30*97a847bcSbellardtarget_list="i386 i386-softmmu arm"
317d13299dSbellardcase "$cpu" in
327d13299dSbellard  i386|i486|i586|i686|i86pc|BePC)
33*97a847bcSbellard    cpu="i386"
347d13299dSbellard  ;;
357d13299dSbellard  armv4l)
367d13299dSbellard    cpu="armv4l"
377d13299dSbellard  ;;
387d13299dSbellard  alpha)
397d13299dSbellard    cpu="alpha"
407d13299dSbellard  ;;
41295defa5Sbellard  "Power Macintosh"|ppc|ppc64)
427d13299dSbellard    cpu="powerpc"
437d13299dSbellard  ;;
447d13299dSbellard  mips)
457d13299dSbellard    cpu="mips"
467d13299dSbellard  ;;
47fb3e5849Sbellard  s390)
48fb3e5849Sbellard    cpu="s390"
49fb3e5849Sbellard  ;;
50ae228531Sbellard  sparc)
51ae228531Sbellard    cpu="sparc"
52ae228531Sbellard  ;;
53ae228531Sbellard  sparc64)
54ae228531Sbellard    cpu="sparc64"
55ae228531Sbellard  ;;
56a8baa8c5Sbellard  ia64)
57a8baa8c5Sbellard    cpu="ia64"
58a8baa8c5Sbellard  ;;
597d13299dSbellard  *)
607d13299dSbellard    cpu="unknown"
617d13299dSbellard  ;;
627d13299dSbellardesac
637d13299dSbellardgprof="no"
647d13299dSbellardbigendian="no"
657d13299dSbellard
667d13299dSbellard# OS specific
677d13299dSbellardtargetos=`uname -s`
687d13299dSbellardcase $targetos in
697d13299dSbellard*) ;;
707d13299dSbellardesac
717d13299dSbellard
72*97a847bcSbellard##########################################
73*97a847bcSbellard# SDL probe
74*97a847bcSbellard
75*97a847bcSbellardcat > $TMPC << EOF
76*97a847bcSbellard#include <SDL.h>
77*97a847bcSbellard#undef main /* We don't want SDL to override our main() */
78*97a847bcSbellardint main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
79*97a847bcSbellardEOF
80*97a847bcSbellard
81*97a847bcSbellardsdl_too_old=no
82*97a847bcSbellardsdl=no
83*97a847bcSbellardif $cc -o $TMPE `sdl-config --cflags` $TMPC `sdl-config --libs`  2> /dev/null  ; then
84*97a847bcSbellard_sdlversion=`sdl-config --version | sed 's/[^0-9]//g'`
85*97a847bcSbellardif test "$_sdlversion" -lt 121 ; then
86*97a847bcSbellardsdl_too_old=yes
87*97a847bcSbellardelse
88*97a847bcSbellardsdl=yes
89*97a847bcSbellardfi
90*97a847bcSbellardfi
91*97a847bcSbellard
927d13299dSbellard# find source path
937d13299dSbellard# XXX: we assume an absolute path is given when launching configure,
947d13299dSbellard# except in './configure' case.
957d13299dSbellardsource_path=${0%configure}
967d13299dSbellardsource_path=${source_path%/}
977d13299dSbellardsource_path_used="yes"
987d13299dSbellardif test -z "$source_path" -o "$source_path" = "." ; then
997d13299dSbellard    source_path=`pwd`
1007d13299dSbellard    source_path_used="no"
1017d13299dSbellardfi
1027d13299dSbellard
1037d13299dSbellardfor opt do
1047d13299dSbellard  case "$opt" in
1057d13299dSbellard  --prefix=*) prefix=`echo $opt | cut -d '=' -f 2`
1067d13299dSbellard  ;;
10732ce6337Sbellard  --interp-prefix=*) interp_prefix=`echo $opt | cut -d '=' -f 2`
10832ce6337Sbellard  ;;
1097d13299dSbellard  --source-path=*) source_path=`echo $opt | cut -d '=' -f 2`
1107d13299dSbellard  ;;
1117d13299dSbellard  --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2`
1127d13299dSbellard  ;;
1137d13299dSbellard  --cc=*) cc=`echo $opt | cut -d '=' -f 2`
1147d13299dSbellard  ;;
1157d13299dSbellard  --make=*) make=`echo $opt | cut -d '=' -f 2`
1167d13299dSbellard  ;;
1177d13299dSbellard  --extra-cflags=*) CFLAGS="${opt#--extra-cflags=}"
1187d13299dSbellard  ;;
1197d13299dSbellard  --extra-ldflags=*) LDFLAGS="${opt#--extra-ldflags=}"
1207d13299dSbellard  ;;
1217d13299dSbellard  --extra-libs=*) extralibs=${opt#--extra-libs=}
1227d13299dSbellard  ;;
1237d13299dSbellard  --cpu=*) cpu=`echo $opt | cut -d '=' -f 2`
1247d13299dSbellard  ;;
125*97a847bcSbellard  --target-list=*) target_list=${opt#--target-list=}
126de83cd02Sbellard  ;;
1277d13299dSbellard  --enable-gprof) gprof="yes"
1287d13299dSbellard  ;;
12943ce4dfeSbellard  --static) static="yes"
13043ce4dfeSbellard  ;;
131*97a847bcSbellard  --disable-sdl) sdl="no"
132*97a847bcSbellard  ;;
1337d13299dSbellard  esac
1347d13299dSbellarddone
1357d13299dSbellard
1367d13299dSbellard# Checking for CFLAGS
1377d13299dSbellardif test -z "$CFLAGS"; then
1387d13299dSbellard    CFLAGS="-O2"
1397d13299dSbellardfi
1407d13299dSbellard
1417d13299dSbellardcc="${cross_prefix}${cc}"
1427d13299dSbellardar="${cross_prefix}${ar}"
1437d13299dSbellardstrip="${cross_prefix}${strip}"
1447d13299dSbellard
1457d13299dSbellardif test -z "$cross_prefix" ; then
1467d13299dSbellard
1477d13299dSbellard# ---
1487d13299dSbellard# big/little endian test
1497d13299dSbellardcat > $TMPC << EOF
1507d13299dSbellard#include <inttypes.h>
1517d13299dSbellardint main(int argc, char ** argv){
1527d13299dSbellard	volatile uint32_t i=0x01234567;
1537d13299dSbellard	return (*((uint8_t*)(&i))) == 0x67;
1547d13299dSbellard}
1557d13299dSbellardEOF
1567d13299dSbellard
1577d13299dSbellardif $cc -o $TMPE $TMPC 2>/dev/null ; then
1587d13299dSbellard$TMPE && bigendian="yes"
1597d13299dSbellardelse
1607d13299dSbellardecho big/little test failed
1617d13299dSbellardfi
1627d13299dSbellard
1637d13299dSbellardelse
1647d13299dSbellard
1657d13299dSbellard# if cross compiling, cannot launch a program, so make a static guess
166ae228531Sbellardif test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "s390" -o "$cpu" = "sparc" -o "$cpu" = "sparc64"; then
1677d13299dSbellard    bigendian="yes"
1687d13299dSbellardfi
1697d13299dSbellard
1707d13299dSbellardfi
1717d13299dSbellard
172e8cd23deSbellard# check gcc options support
17304369ff2Sbellardcat > $TMPC <<EOF
17404369ff2Sbellardint main(void) {
17504369ff2Sbellard}
17604369ff2SbellardEOF
17704369ff2Sbellard
178e8cd23deSbellardhave_gcc3_options="no"
179e8cd23deSbellardif $cc -fno-reorder-blocks -fno-optimize-sibling-calls -o $TMPO $TMPC 2> /dev/null ; then
180e8cd23deSbellard   have_gcc3_options="yes"
18104369ff2Sbellardfi
182ca735206Sbellard
1837d13299dSbellardif test x"$1" = x"-h" -o x"$1" = x"--help" ; then
1847d13299dSbellardcat << EOF
1857d13299dSbellard
1867d13299dSbellardUsage: configure [options]
1877d13299dSbellardOptions: [defaults in brackets after descriptions]
1887d13299dSbellard
1897d13299dSbellardEOF
1907d13299dSbellardecho "Standard options:"
1917d13299dSbellardecho "  --help                   print this message"
1927d13299dSbellardecho "  --prefix=PREFIX          install in PREFIX [$prefix]"
19332ce6337Sbellardecho "  --interp-prefix=PREFIX   where to find shared libraries, etc. [$interp_prefix]"
194*97a847bcSbellardecho "  --target-list=LIST       set target list [$target_list]"
1957d13299dSbellardecho ""
1967d13299dSbellardecho "Advanced options (experts only):"
1977d13299dSbellardecho "  --source-path=PATH       path of source code [$source_path]"
1987d13299dSbellardecho "  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]"
1997d13299dSbellardecho "  --cc=CC                  use C compiler CC [$cc]"
2007d13299dSbellardecho "  --make=MAKE              use specified make [$make]"
20143ce4dfeSbellardecho "  --static                 enable static build [$static]"
2027d13299dSbellardecho ""
2037d13299dSbellardecho "NOTE: The object files are build at the place where configure is launched"
2047d13299dSbellardexit 1
2057d13299dSbellardfi
2067d13299dSbellard
2077d13299dSbellardecho "Install prefix    $prefix"
2087d13299dSbellardecho "Source path       $source_path"
20943ce4dfeSbellardecho "ELF interp prefix $interp_prefix"
2107d13299dSbellardecho "C compiler        $cc"
2117d13299dSbellardecho "make              $make"
212a98fd896Sbellardecho "host CPU          $cpu"
213de83cd02Sbellardecho "host big endian   $bigendian"
214*97a847bcSbellardecho "target list       $target_list"
2157d13299dSbellardecho "gprof enabled     $gprof"
21643ce4dfeSbellardecho "static build      $static"
217*97a847bcSbellardecho "SDL support       $sdl"
218*97a847bcSbellardif test $sdl_too_old = "yes"; then
219*97a847bcSbellardecho "-> Your SDL version is too old - please upgrade to have FFplay/SDL support"
220e8cd23deSbellardfi
221*97a847bcSbellard
222*97a847bcSbellardconfig_mak="config-host.mak"
223*97a847bcSbellardconfig_h="config-host.h"
224*97a847bcSbellard
225*97a847bcSbellardecho "Creating $config_mak and $config_h"
226*97a847bcSbellard
227*97a847bcSbellardecho "# Automatically generated by configure - do not modify" > $config_mak
228*97a847bcSbellardecho "/* Automatically generated by configure - do not modify */" > $config_h
229*97a847bcSbellard
230*97a847bcSbellardecho "prefix=$prefix" >> $config_mak
231*97a847bcSbellardecho "MAKE=$make" >> $config_mak
232*97a847bcSbellardecho "CC=$cc" >> $config_mak
233*97a847bcSbellardif test "$have_gcc3_options" = "yes" ; then
234*97a847bcSbellard  echo "HAVE_GCC3_OPTIONS=yes" >> $config_mak
235*97a847bcSbellardfi
236*97a847bcSbellardecho "HOST_CC=$host_cc" >> $config_mak
237*97a847bcSbellardecho "AR=$ar" >> $config_mak
238*97a847bcSbellardecho "STRIP=$strip -s -R .comment -R .note" >> $config_mak
239*97a847bcSbellardecho "CFLAGS=$CFLAGS" >> $config_mak
240*97a847bcSbellardecho "LDFLAGS=$LDFLAGS" >> $config_mak
241*97a847bcSbellardif test "$cpu" = "i386" ; then
242*97a847bcSbellard  echo "ARCH=i386" >> $config_mak
243*97a847bcSbellard  echo "#define HOST_I386 1" >> $config_h
2447d13299dSbellardelif test "$cpu" = "armv4l" ; then
245*97a847bcSbellard  echo "ARCH=arm" >> $config_mak
246*97a847bcSbellard  echo "#define HOST_ARM 1" >> $config_h
2477d13299dSbellardelif test "$cpu" = "powerpc" ; then
248*97a847bcSbellard  echo "ARCH=ppc" >> $config_mak
249*97a847bcSbellard  echo "#define HOST_PPC 1" >> $config_h
2507d13299dSbellardelif test "$cpu" = "mips" ; then
251*97a847bcSbellard  echo "ARCH=mips" >> $config_mak
252*97a847bcSbellard  echo "#define HOST_MIPS 1" >> $config_h
253fb3e5849Sbellardelif test "$cpu" = "s390" ; then
254*97a847bcSbellard  echo "ARCH=s390" >> $config_mak
255*97a847bcSbellard  echo "#define HOST_S390 1" >> $config_h
256295defa5Sbellardelif test "$cpu" = "alpha" ; then
257*97a847bcSbellard  echo "ARCH=alpha" >> $config_mak
258*97a847bcSbellard  echo "#define HOST_ALPHA 1" >> $config_h
259ae228531Sbellardelif test "$cpu" = "sparc" ; then
260*97a847bcSbellard  echo "ARCH=sparc" >> $config_mak
261*97a847bcSbellard  echo "#define HOST_SPARC 1" >> $config_h
262ae228531Sbellardelif test "$cpu" = "sparc64" ; then
263*97a847bcSbellard  echo "ARCH=sparc64" >> $config_mak
264*97a847bcSbellard  echo "#define HOST_SPARC64 1" >> $config_h
265a8baa8c5Sbellardelif test "$cpu" = "ia64" ; then
266*97a847bcSbellard  echo "ARCH=ia64" >> $config_mak
267*97a847bcSbellard  echo "#define HOST_IA64 1" >> $config_h
2687d13299dSbellardelse
2697d13299dSbellard  echo "Unsupported CPU"
2707d13299dSbellard  exit 1
2717d13299dSbellardfi
2727d13299dSbellardif test "$bigendian" = "yes" ; then
273*97a847bcSbellard  echo "WORDS_BIGENDIAN=yes" >> $config_mak
274*97a847bcSbellard  echo "#define WORDS_BIGENDIAN 1" >> $config_h
275*97a847bcSbellardfi
276*97a847bcSbellardecho "#define HAVE_BYTESWAP_H 1" >> $config_h
277*97a847bcSbellardif test "$gprof" = "yes" ; then
278*97a847bcSbellard  echo "TARGET_GPROF=yes" >> $config_mak
279*97a847bcSbellard  echo "#define HAVE_GPROF 1" >> $config_h
280*97a847bcSbellardfi
281*97a847bcSbellardif test "$static" = "yes" ; then
282*97a847bcSbellard  echo "CONFIG_STATIC=yes" >> $config_mak
283*97a847bcSbellardfi
284*97a847bcSbellardif test "$sdl" = "yes" ; then
285*97a847bcSbellard  echo "CONFIG_SDL=yes" >> $config_mak
286*97a847bcSbellard  echo "#define CONFIG_SDL 1" >> $config_h
287*97a847bcSbellard  echo "SDL_LIBS=`sdl-config --libs`" >> $config_mak
288*97a847bcSbellard  echo "SDL_CFLAGS=`sdl-config --cflags`" >> $config_mak
289*97a847bcSbellardfi
290*97a847bcSbellardecho -n "VERSION=" >>$config_mak
291*97a847bcSbellardhead $source_path/VERSION >>$config_mak
292*97a847bcSbellardecho "" >>$config_mak
293*97a847bcSbellardecho -n "#define QEMU_VERSION \"" >> $config_h
294*97a847bcSbellardhead $source_path/VERSION >> $config_h
295*97a847bcSbellardecho "\"" >> $config_h
296*97a847bcSbellard
297*97a847bcSbellardecho "SRC_PATH=$source_path" >> $config_mak
298*97a847bcSbellardecho "TARGET_DIRS=$target_list" >> $config_mak
299*97a847bcSbellard
300*97a847bcSbellardfor target in $target_list; do
301*97a847bcSbellard
302*97a847bcSbellardtarget_dir="$target"
303*97a847bcSbellardconfig_mak=$target_dir/config.mak
304*97a847bcSbellardconfig_h=$target_dir/config.h
305*97a847bcSbellardtarget_cpu=`echo $target | cut -d '-' -f 1`
306*97a847bcSbellardtarget_bigendian="no"
307*97a847bcSbellardtarget_softmmu="no"
308*97a847bcSbellardif expr $target : '.*-softmmu' > /dev/null ; then
309*97a847bcSbellard  target_softmmu="yes"
3107d13299dSbellardfi
311de83cd02Sbellard
312*97a847bcSbellardecho "Creating $config_mak, $config_h and $target_dir/Makefile"
313*97a847bcSbellard
314*97a847bcSbellardmkdir -p $target_dir
315*97a847bcSbellardln -sf $source_path/Makefile.target $target_dir/Makefile
316*97a847bcSbellard
317*97a847bcSbellardecho "# Automatically generated by configure - do not modify" > $config_mak
318*97a847bcSbellardecho "/* Automatically generated by configure - do not modify */" > $config_h
319*97a847bcSbellard
320*97a847bcSbellard
321*97a847bcSbellardecho "include ../config-host.mak" >> $config_mak
322*97a847bcSbellardecho "#include \"../config-host.h\"" >> $config_h
323*97a847bcSbellardecho "#define CONFIG_QEMU_PREFIX \"$interp_prefix\"" >> $config_h
324*97a847bcSbellard
325*97a847bcSbellardif test "$target_cpu" = "i386" ; then
326*97a847bcSbellard  echo "TARGET_ARCH=i386" >> $config_mak
327*97a847bcSbellard  echo "#define TARGET_ARCH \"i386\"" >> $config_h
328*97a847bcSbellard  echo "#define TARGET_I386 1" >> $config_h
329de83cd02Sbellardelif test "$target_cpu" = "arm" ; then
330*97a847bcSbellard  echo "TARGET_ARCH=arm" >> $config_mak
331*97a847bcSbellard  echo "#define TARGET_ARCH \"arm\"" >> $config_h
332*97a847bcSbellard  echo "#define TARGET_ARM 1" >> $config_h
333de83cd02Sbellardelse
334de83cd02Sbellard  echo "Unsupported target CPU"
335de83cd02Sbellard  exit 1
336de83cd02Sbellardfi
337de83cd02Sbellardif test "$target_bigendian" = "yes" ; then
338*97a847bcSbellard  echo "TARGET_WORDS_BIGENDIAN=yes" >> $config_mak
339*97a847bcSbellard  echo "#define TARGET_WORDS_BIGENDIAN 1" >> $config_h
340*97a847bcSbellardfi
341*97a847bcSbellardif test "$target_softmmu" = "yes" ; then
342*97a847bcSbellard  echo "CONFIG_SOFTMMU=yes" >> $config_mak
343*97a847bcSbellard  echo "#define CONFIG_SOFTMMU 1" >> $config_h
344de83cd02Sbellardfi
345de83cd02Sbellard
346*97a847bcSbellarddone # for target in $targets
3477d13299dSbellard
3487d13299dSbellard# build tree in object directory if source path is different from current one
3497d13299dSbellardif test "$source_path_used" = "yes" ; then
3507d13299dSbellard    DIRS="tests"
3517d13299dSbellard    FILES="Makefile tests/Makefile"
3527d13299dSbellard    for dir in $DIRS ; do
3537d13299dSbellard            mkdir -p $dir
3547d13299dSbellard    done
3557d13299dSbellard    for f in $FILES ; do
3567d13299dSbellard        ln -sf $source_path/$f $f
3577d13299dSbellard    done
3587d13299dSbellardfi
3597d13299dSbellard
360*97a847bcSbellardrm -f $TMPO $TMPC $TMPE $TMPS
361