1#!/bin/sh 2# 3# qemu configure script (c) 2003 Fabrice Bellard 4# 5# set temporary file name 6if test ! -z "$TMPDIR" ; then 7 TMPDIR1="${TMPDIR}" 8elif test ! -z "$TEMPDIR" ; then 9 TMPDIR1="${TEMPDIR}" 10else 11 TMPDIR1="/tmp" 12fi 13 14TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c" 15TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o" 16TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}" 17TMPS="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.S" 18 19# default parameters 20prefix="" 21interp_prefix="/usr/gnemul/qemu-%M" 22static="no" 23cross_prefix="" 24cc="gcc" 25host_cc="gcc" 26ar="ar" 27make="make" 28strip="strip" 29cpu=`uname -m` 30target_list="i386-user i386 i386-softmmu arm-user sparc-user ppc-user ppc-softmmu" 31case "$cpu" in 32 i386|i486|i586|i686|i86pc|BePC) 33 cpu="i386" 34 ;; 35 armv4l) 36 cpu="armv4l" 37 ;; 38 alpha) 39 cpu="alpha" 40 ;; 41 "Power Macintosh"|ppc|ppc64) 42 cpu="powerpc" 43 ;; 44 mips) 45 cpu="mips" 46 ;; 47 s390) 48 cpu="s390" 49 ;; 50 sparc) 51 cpu="sparc" 52 ;; 53 sparc64) 54 cpu="sparc64" 55 ;; 56 ia64) 57 cpu="ia64" 58 ;; 59 m68k) 60 cpu="m68k" 61 ;; 62 x86_64|amd64) 63 cpu="amd64" 64 ;; 65 *) 66 cpu="unknown" 67 ;; 68esac 69gprof="no" 70bigendian="no" 71mingw32="no" 72EXESUF="" 73gdbstub="yes" 74slirp="yes" 75 76# OS specific 77targetos=`uname -s` 78case $targetos in 79MINGW32*) 80mingw32="yes" 81;; 82FreeBSD) 83bsd="yes" 84;; 85NetBSD) 86bsd="yes" 87;; 88OpenBSD) 89bsd="yes" 90;; 91Darwin) 92bsd="yes" 93darwin="yes" 94;; 95*) ;; 96esac 97 98if [ "$bsd" = "yes" ] ; then 99 if [ ! "$darwin" = "yes" ] ; then 100 make="gmake" 101 fi 102 target_list="i386-softmmu ppc-softmmu" 103fi 104 105# find source path 106# XXX: we assume an absolute path is given when launching configure, 107# except in './configure' case. 108source_path=${0%configure} 109source_path=${source_path%/} 110source_path_used="yes" 111if test -z "$source_path" -o "$source_path" = "." ; then 112 source_path=`pwd` 113 source_path_used="no" 114fi 115 116for opt do 117 case "$opt" in 118 --prefix=*) prefix=`echo $opt | cut -d '=' -f 2` 119 ;; 120 --interp-prefix=*) interp_prefix=`echo $opt | cut -d '=' -f 2` 121 ;; 122 --source-path=*) source_path=`echo $opt | cut -d '=' -f 2` 123 ;; 124 --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2` 125 ;; 126 --cc=*) cc=`echo $opt | cut -d '=' -f 2` 127 ;; 128 --make=*) make=`echo $opt | cut -d '=' -f 2` 129 ;; 130 --extra-cflags=*) CFLAGS="${opt#--extra-cflags=}" 131 ;; 132 --extra-ldflags=*) LDFLAGS="${opt#--extra-ldflags=}" 133 ;; 134 --extra-libs=*) extralibs=${opt#--extra-libs=} 135 ;; 136 --cpu=*) cpu=`echo $opt | cut -d '=' -f 2` 137 ;; 138 --target-list=*) target_list=${opt#--target-list=} 139 ;; 140 --enable-gprof) gprof="yes" 141 ;; 142 --static) static="yes" 143 ;; 144 --disable-sdl) sdl="no" 145 ;; 146 --enable-mingw32) mingw32="yes" ; cross_prefix="i386-mingw32-" 147 ;; 148 --disable-slirp) slirp="no" 149 ;; 150 esac 151done 152 153# Checking for CFLAGS 154if test -z "$CFLAGS"; then 155 CFLAGS="-O2" 156fi 157 158cc="${cross_prefix}${cc}" 159ar="${cross_prefix}${ar}" 160strip="${cross_prefix}${strip}" 161 162if test "$mingw32" = "yes" ; then 163 target_list="i386-softmmu ppc-softmmu" 164 EXESUF=".exe" 165 gdbstub="no" 166 slirp="no" 167fi 168 169if test -z "$cross_prefix" ; then 170 171# --- 172# big/little endian test 173cat > $TMPC << EOF 174#include <inttypes.h> 175int main(int argc, char ** argv){ 176 volatile uint32_t i=0x01234567; 177 return (*((uint8_t*)(&i))) == 0x67; 178} 179EOF 180 181if $cc -o $TMPE $TMPC 2>/dev/null ; then 182$TMPE && bigendian="yes" 183else 184echo big/little test failed 185fi 186 187else 188 189# if cross compiling, cannot launch a program, so make a static guess 190if test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "s390" -o "$cpu" = "sparc" -o "$cpu" = "sparc64" -o "$cpu" = "m68k"; then 191 bigendian="yes" 192fi 193 194fi 195 196# check gcc options support 197cat > $TMPC <<EOF 198int main(void) { 199} 200EOF 201 202have_gcc3_options="no" 203if $cc -fno-reorder-blocks -fno-optimize-sibling-calls -o $TMPO $TMPC 2> /dev/null ; then 204 have_gcc3_options="yes" 205fi 206 207########################################## 208# SDL probe 209 210sdl_too_old=no 211 212if test -z "$sdl" ; then 213 214sdl_config="sdl-config" 215sdl=no 216sdl_static=no 217 218if test "$mingw32" = "yes" -a ! -z "$cross_prefix" ; then 219# win32 cross compilation case 220 sdl_config="i386-mingw32msvc-sdl-config" 221 sdl=yes 222else 223# normal SDL probe 224cat > $TMPC << EOF 225#include <SDL.h> 226#undef main /* We don't want SDL to override our main() */ 227int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 228EOF 229 230if $cc -o $TMPE `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` 2> /dev/null ; then 231_sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'` 232if test "$_sdlversion" -lt 121 ; then 233sdl_too_old=yes 234else 235sdl=yes 236fi 237 238# static link with sdl ? 239if test "$sdl" = "yes" ; then 240aa="no" 241`$sdl_config --static-libs | grep \\\-laa > /dev/null` && aa="yes" 242sdl_static_libs=`$sdl_config --static-libs` 243if [ "$aa" = "yes" ] ; then 244 sdl_static_libs="$sdl_static_libs `aalib-config --static-libs`" 245fi 246 247if $cc -o $TMPE `$sdl_config --cflags 2> /dev/null` $TMPC $sdl_static_libs 2> /dev/null; then 248 sdl_static=yes 249fi 250 251fi # static link 252 253fi # sdl compile test 254 255fi # cross compilation 256fi # -z $sdl 257 258if test x"$1" = x"-h" -o x"$1" = x"--help" ; then 259cat << EOF 260 261Usage: configure [options] 262Options: [defaults in brackets after descriptions] 263 264EOF 265echo "Standard options:" 266echo " --help print this message" 267echo " --prefix=PREFIX install in PREFIX [$prefix]" 268echo " --interp-prefix=PREFIX where to find shared libraries, etc." 269echo " use %M for cpu name [$interp_prefix]" 270echo " --target-list=LIST set target list [$target_list]" 271echo "" 272echo "Advanced options (experts only):" 273echo " --source-path=PATH path of source code [$source_path]" 274echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]" 275echo " --cc=CC use C compiler CC [$cc]" 276echo " --make=MAKE use specified make [$make]" 277echo " --static enable static build [$static]" 278echo " --enable-mingw32 enable Win32 cross compilation with mingw32" 279echo "" 280echo "NOTE: The object files are build at the place where configure is launched" 281exit 1 282fi 283 284if test "$mingw32" = "yes" ; then 285if test -z "$prefix" ; then 286 prefix="/c/Program Files/Qemu" 287fi 288mandir="$prefix" 289datadir="$prefix" 290docdir="$prefix" 291bindir="$prefix" 292else 293if test -z "$prefix" ; then 294 prefix="/usr/local" 295fi 296mandir="$prefix/share/man" 297datadir="$prefix/share/qemu" 298docdir="$prefix/share/doc/qemu" 299bindir="$prefix/bin" 300fi 301 302echo "Install prefix $prefix" 303echo "BIOS directory $datadir" 304echo "binary directory $bindir" 305if test "$mingw32" = "no" ; then 306echo "Manual directory $mandir" 307echo "ELF interp prefix $interp_prefix" 308fi 309echo "Source path $source_path" 310echo "C compiler $cc" 311echo "make $make" 312echo "host CPU $cpu" 313echo "host big endian $bigendian" 314echo "target list $target_list" 315echo "gprof enabled $gprof" 316echo "static build $static" 317echo "SDL support $sdl" 318echo "SDL static link $sdl_static" 319echo "mingw32 support $mingw32" 320 321if test $sdl_too_old = "yes"; then 322echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support" 323fi 324if test "$sdl_static" = "no"; then 325 echo "WARNING: cannot compile statically with SDL - qemu-fast won't have a graphical output" 326fi 327 328config_mak="config-host.mak" 329config_h="config-host.h" 330 331#echo "Creating $config_mak and $config_h" 332 333echo "# Automatically generated by configure - do not modify" > $config_mak 334echo "/* Automatically generated by configure - do not modify */" > $config_h 335 336echo "prefix=$prefix" >> $config_mak 337echo "bindir=$bindir" >> $config_mak 338echo "mandir=$mandir" >> $config_mak 339echo "datadir=$datadir" >> $config_mak 340echo "docdir=$docdir" >> $config_mak 341echo "#define CONFIG_QEMU_SHAREDIR \"$datadir\"" >> $config_h 342echo "MAKE=$make" >> $config_mak 343echo "CC=$cc" >> $config_mak 344if test "$have_gcc3_options" = "yes" ; then 345 echo "HAVE_GCC3_OPTIONS=yes" >> $config_mak 346fi 347echo "HOST_CC=$host_cc" >> $config_mak 348echo "AR=$ar" >> $config_mak 349echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak 350echo "CFLAGS=$CFLAGS" >> $config_mak 351echo "LDFLAGS=$LDFLAGS" >> $config_mak 352echo "EXESUF=$EXESUF" >> $config_mak 353if test "$cpu" = "i386" ; then 354 echo "ARCH=i386" >> $config_mak 355 echo "#define HOST_I386 1" >> $config_h 356elif test "$cpu" = "amd64" ; then 357 echo "ARCH=amd64" >> $config_mak 358 echo "#define HOST_AMD64 1" >> $config_h 359elif test "$cpu" = "armv4l" ; then 360 echo "ARCH=arm" >> $config_mak 361 echo "#define HOST_ARM 1" >> $config_h 362elif test "$cpu" = "powerpc" ; then 363 echo "ARCH=ppc" >> $config_mak 364 echo "#define HOST_PPC 1" >> $config_h 365elif test "$cpu" = "mips" ; then 366 echo "ARCH=mips" >> $config_mak 367 echo "#define HOST_MIPS 1" >> $config_h 368elif test "$cpu" = "s390" ; then 369 echo "ARCH=s390" >> $config_mak 370 echo "#define HOST_S390 1" >> $config_h 371elif test "$cpu" = "alpha" ; then 372 echo "ARCH=alpha" >> $config_mak 373 echo "#define HOST_ALPHA 1" >> $config_h 374elif test "$cpu" = "sparc" ; then 375 echo "ARCH=sparc" >> $config_mak 376 echo "#define HOST_SPARC 1" >> $config_h 377elif test "$cpu" = "sparc64" ; then 378 echo "ARCH=sparc64" >> $config_mak 379 echo "#define HOST_SPARC64 1" >> $config_h 380elif test "$cpu" = "ia64" ; then 381 echo "ARCH=ia64" >> $config_mak 382 echo "#define HOST_IA64 1" >> $config_h 383elif test "$cpu" = "m68k" ; then 384 echo "ARCH=m68k" >> $config_mak 385 echo "#define HOST_M68K 1" >> $config_h 386else 387 echo "Unsupported CPU" 388 exit 1 389fi 390if test "$bigendian" = "yes" ; then 391 echo "WORDS_BIGENDIAN=yes" >> $config_mak 392 echo "#define WORDS_BIGENDIAN 1" >> $config_h 393fi 394if test "$mingw32" = "yes" ; then 395 echo "CONFIG_WIN32=yes" >> $config_mak 396 echo "#define CONFIG_WIN32 1" >> $config_h 397elif test -f "/usr/include/byteswap.h" ; then 398 echo "#define HAVE_BYTESWAP_H 1" >> $config_h 399fi 400if test "$darwin" = "yes" ; then 401 echo "CONFIG_DARWIN=yes" >> $config_mak 402 echo "#define CONFIG_DARWIN 1" >> $config_h 403fi 404if test "$gdbstub" = "yes" ; then 405 echo "CONFIG_GDBSTUB=yes" >> $config_mak 406 echo "#define CONFIG_GDBSTUB 1" >> $config_h 407fi 408if test "$gprof" = "yes" ; then 409 echo "TARGET_GPROF=yes" >> $config_mak 410 echo "#define HAVE_GPROF 1" >> $config_h 411fi 412if test "$static" = "yes" ; then 413 echo "CONFIG_STATIC=yes" >> $config_mak 414 echo "#define CONFIG_STATIC 1" >> $config_h 415fi 416if test "$slirp" = "yes" ; then 417 echo "CONFIG_SLIRP=yes" >> $config_mak 418 echo "#define CONFIG_SLIRP 1" >> $config_h 419fi 420echo -n "VERSION=" >>$config_mak 421head $source_path/VERSION >>$config_mak 422echo "" >>$config_mak 423echo -n "#define QEMU_VERSION \"" >> $config_h 424head $source_path/VERSION >> $config_h 425echo "\"" >> $config_h 426 427echo "SRC_PATH=$source_path" >> $config_mak 428echo "TARGET_DIRS=$target_list" >> $config_mak 429 430# XXX: suppress that 431if [ "$bsd" = "yes" ] ; then 432 echo "#define O_LARGEFILE 0" >> $config_h 433 echo "#define lseek64 lseek" >> $config_h 434 echo "#define mkstemp64 mkstemp" >> $config_h 435 echo "#define ftruncate64 ftruncate" >> $config_h 436 echo "#define off64_t off_t" >> $config_h 437 echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h 438 echo "#define _BSD 1" >> $config_h 439fi 440 441for target in $target_list; do 442 443target_dir="$target" 444config_mak=$target_dir/config.mak 445config_h=$target_dir/config.h 446target_cpu=`echo $target | cut -d '-' -f 1` 447target_bigendian="no" 448[ "$target_cpu" = "sparc" ] && target_bigendian=yes 449[ "$target_cpu" = "ppc" ] && target_bigendian=yes 450target_softmmu="no" 451if expr $target : '.*-softmmu' > /dev/null ; then 452 target_softmmu="yes" 453fi 454target_user_only="no" 455if expr $target : '.*-user' > /dev/null ; then 456 target_user_only="yes" 457fi 458 459#echo "Creating $config_mak, $config_h and $target_dir/Makefile" 460 461mkdir -p $target_dir 462if test "$target" = "arm-user" ; then 463 mkdir -p $target_dir/nwfpe 464fi 465if test "$target_user_only" = "no" ; then 466 mkdir -p $target_dir/slirp 467fi 468 469ln -sf $source_path/Makefile.target $target_dir/Makefile 470 471echo "# Automatically generated by configure - do not modify" > $config_mak 472echo "/* Automatically generated by configure - do not modify */" > $config_h 473 474 475echo "include ../config-host.mak" >> $config_mak 476echo "#include \"../config-host.h\"" >> $config_h 477 478interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"` 479echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h 480 481if test "$target_cpu" = "i386" ; then 482 echo "TARGET_ARCH=i386" >> $config_mak 483 echo "#define TARGET_ARCH \"i386\"" >> $config_h 484 echo "#define TARGET_I386 1" >> $config_h 485elif test "$target_cpu" = "arm" ; then 486 echo "TARGET_ARCH=arm" >> $config_mak 487 echo "#define TARGET_ARCH \"arm\"" >> $config_h 488 echo "#define TARGET_ARM 1" >> $config_h 489elif test "$target_cpu" = "sparc" ; then 490 echo "TARGET_ARCH=sparc" >> $config_mak 491 echo "#define TARGET_ARCH \"sparc\"" >> $config_h 492 echo "#define TARGET_SPARC 1" >> $config_h 493elif test "$target_cpu" = "ppc" ; then 494 echo "TARGET_ARCH=ppc" >> $config_mak 495 echo "#define TARGET_ARCH \"ppc\"" >> $config_h 496 echo "#define TARGET_PPC 1" >> $config_h 497else 498 echo "Unsupported target CPU" 499 exit 1 500fi 501if test "$target_bigendian" = "yes" ; then 502 echo "TARGET_WORDS_BIGENDIAN=yes" >> $config_mak 503 echo "#define TARGET_WORDS_BIGENDIAN 1" >> $config_h 504fi 505if test "$target_softmmu" = "yes" ; then 506 echo "CONFIG_SOFTMMU=yes" >> $config_mak 507 echo "#define CONFIG_SOFTMMU 1" >> $config_h 508fi 509if test "$target_user_only" = "yes" ; then 510 echo "CONFIG_USER_ONLY=yes" >> $config_mak 511 echo "#define CONFIG_USER_ONLY 1" >> $config_h 512fi 513 514# sdl defines 515 516if test "$target_user_only" = "no"; then 517 if test "$target_softmmu" = "no" -o "$static" = "yes"; then 518 if test "$sdl_static" = "yes" ; then 519 echo "#define CONFIG_SDL 1" >> $config_h 520 echo "CONFIG_SDL=yes" >> $config_mak 521 echo "SDL_LIBS=$sdl_static_libs" >> $config_mak 522 fi 523 else 524 if test "$sdl" = "yes" ; then 525 echo "#define CONFIG_SDL 1" >> $config_h 526 echo "CONFIG_SDL=yes" >> $config_mak 527 echo "SDL_LIBS=`$sdl_config --libs`" >> $config_mak 528 fi 529 fi 530 echo -n "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak 531 if [ "${aa}" = "yes" ] ; then 532 echo -n " `aalib-config --cflags`" >> $config_mak ; 533 fi 534 echo "" >> $config_mak 535fi 536 537done # for target in $targets 538 539# build tree in object directory if source path is different from current one 540if test "$source_path_used" = "yes" ; then 541 DIRS="tests" 542 FILES="Makefile tests/Makefile" 543 for dir in $DIRS ; do 544 mkdir -p $dir 545 done 546 for f in $FILES ; do 547 ln -sf $source_path/$f $f 548 done 549fi 550 551rm -f $TMPO $TMPC $TMPE $TMPS 552