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" 166fi 167 168if test -z "$cross_prefix" ; then 169 170# --- 171# big/little endian test 172cat > $TMPC << EOF 173#include <inttypes.h> 174int main(int argc, char ** argv){ 175 volatile uint32_t i=0x01234567; 176 return (*((uint8_t*)(&i))) == 0x67; 177} 178EOF 179 180if $cc -o $TMPE $TMPC 2>/dev/null ; then 181$TMPE && bigendian="yes" 182else 183echo big/little test failed 184fi 185 186else 187 188# if cross compiling, cannot launch a program, so make a static guess 189if test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "s390" -o "$cpu" = "sparc" -o "$cpu" = "sparc64" -o "$cpu" = "m68k"; then 190 bigendian="yes" 191fi 192 193fi 194 195# check gcc options support 196cat > $TMPC <<EOF 197int main(void) { 198} 199EOF 200 201have_gcc3_options="no" 202if $cc -fno-reorder-blocks -fno-optimize-sibling-calls -o $TMPO $TMPC 2> /dev/null ; then 203 have_gcc3_options="yes" 204fi 205 206########################################## 207# SDL probe 208 209sdl_too_old=no 210 211if test -z "$sdl" ; then 212 213sdl_config="sdl-config" 214sdl=no 215sdl_static=no 216 217if test "$mingw32" = "yes" -a ! -z "$cross_prefix" ; then 218# win32 cross compilation case 219 sdl_config="i386-mingw32msvc-sdl-config" 220 sdl=yes 221else 222# normal SDL probe 223cat > $TMPC << EOF 224#include <SDL.h> 225#undef main /* We don't want SDL to override our main() */ 226int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 227EOF 228 229if $cc -o $TMPE `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` 2> /dev/null ; then 230_sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'` 231if test "$_sdlversion" -lt 121 ; then 232sdl_too_old=yes 233else 234sdl=yes 235fi 236 237# static link with sdl ? 238if test "$sdl" = "yes" ; then 239aa="no" 240`$sdl_config --static-libs | grep \\\-laa > /dev/null` && aa="yes" 241sdl_static_libs=`$sdl_config --static-libs` 242if [ "$aa" = "yes" ] ; then 243 sdl_static_libs="$sdl_static_libs `aalib-config --static-libs`" 244fi 245 246if $cc -o $TMPE `$sdl_config --cflags 2> /dev/null` $TMPC $sdl_static_libs 2> /dev/null; then 247 sdl_static=yes 248fi 249 250fi # static link 251 252fi # sdl compile test 253 254fi # cross compilation 255fi # -z $sdl 256 257if test x"$1" = x"-h" -o x"$1" = x"--help" ; then 258cat << EOF 259 260Usage: configure [options] 261Options: [defaults in brackets after descriptions] 262 263EOF 264echo "Standard options:" 265echo " --help print this message" 266echo " --prefix=PREFIX install in PREFIX [$prefix]" 267echo " --interp-prefix=PREFIX where to find shared libraries, etc." 268echo " use %M for cpu name [$interp_prefix]" 269echo " --target-list=LIST set target list [$target_list]" 270echo "" 271echo "Advanced options (experts only):" 272echo " --source-path=PATH path of source code [$source_path]" 273echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]" 274echo " --cc=CC use C compiler CC [$cc]" 275echo " --make=MAKE use specified make [$make]" 276echo " --static enable static build [$static]" 277echo " --enable-mingw32 enable Win32 cross compilation with mingw32" 278echo "" 279echo "NOTE: The object files are build at the place where configure is launched" 280exit 1 281fi 282 283if test "$mingw32" = "yes" ; then 284if test -z "$prefix" ; then 285 prefix="/c/Program Files/Qemu" 286fi 287mandir="$prefix" 288datadir="$prefix" 289docdir="$prefix" 290bindir="$prefix" 291else 292if test -z "$prefix" ; then 293 prefix="/usr/local" 294fi 295mandir="$prefix/share/man" 296datadir="$prefix/share/qemu" 297docdir="$prefix/share/doc/qemu" 298bindir="$prefix/bin" 299fi 300 301echo "Install prefix $prefix" 302echo "BIOS directory $datadir" 303echo "binary directory $bindir" 304if test "$mingw32" = "no" ; then 305echo "Manual directory $mandir" 306echo "ELF interp prefix $interp_prefix" 307fi 308echo "Source path $source_path" 309echo "C compiler $cc" 310echo "make $make" 311echo "host CPU $cpu" 312echo "host big endian $bigendian" 313echo "target list $target_list" 314echo "gprof enabled $gprof" 315echo "static build $static" 316echo "SDL support $sdl" 317echo "SDL static link $sdl_static" 318echo "mingw32 support $mingw32" 319 320if test $sdl_too_old = "yes"; then 321echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support" 322fi 323if test "$sdl_static" = "no"; then 324 echo "WARNING: cannot compile statically with SDL - qemu-fast won't have a graphical output" 325fi 326 327config_mak="config-host.mak" 328config_h="config-host.h" 329 330#echo "Creating $config_mak and $config_h" 331 332echo "# Automatically generated by configure - do not modify" > $config_mak 333echo "/* Automatically generated by configure - do not modify */" > $config_h 334 335echo "prefix=$prefix" >> $config_mak 336echo "bindir=$bindir" >> $config_mak 337echo "mandir=$mandir" >> $config_mak 338echo "datadir=$datadir" >> $config_mak 339echo "docdir=$docdir" >> $config_mak 340echo "#define CONFIG_QEMU_SHAREDIR \"$datadir\"" >> $config_h 341echo "MAKE=$make" >> $config_mak 342echo "CC=$cc" >> $config_mak 343if test "$have_gcc3_options" = "yes" ; then 344 echo "HAVE_GCC3_OPTIONS=yes" >> $config_mak 345fi 346echo "HOST_CC=$host_cc" >> $config_mak 347echo "AR=$ar" >> $config_mak 348echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak 349echo "CFLAGS=$CFLAGS" >> $config_mak 350echo "LDFLAGS=$LDFLAGS" >> $config_mak 351echo "EXESUF=$EXESUF" >> $config_mak 352if test "$cpu" = "i386" ; then 353 echo "ARCH=i386" >> $config_mak 354 echo "#define HOST_I386 1" >> $config_h 355elif test "$cpu" = "amd64" ; then 356 echo "ARCH=amd64" >> $config_mak 357 echo "#define HOST_AMD64 1" >> $config_h 358elif test "$cpu" = "armv4l" ; then 359 echo "ARCH=arm" >> $config_mak 360 echo "#define HOST_ARM 1" >> $config_h 361elif test "$cpu" = "powerpc" ; then 362 echo "ARCH=ppc" >> $config_mak 363 echo "#define HOST_PPC 1" >> $config_h 364elif test "$cpu" = "mips" ; then 365 echo "ARCH=mips" >> $config_mak 366 echo "#define HOST_MIPS 1" >> $config_h 367elif test "$cpu" = "s390" ; then 368 echo "ARCH=s390" >> $config_mak 369 echo "#define HOST_S390 1" >> $config_h 370elif test "$cpu" = "alpha" ; then 371 echo "ARCH=alpha" >> $config_mak 372 echo "#define HOST_ALPHA 1" >> $config_h 373elif test "$cpu" = "sparc" ; then 374 echo "ARCH=sparc" >> $config_mak 375 echo "#define HOST_SPARC 1" >> $config_h 376elif test "$cpu" = "sparc64" ; then 377 echo "ARCH=sparc64" >> $config_mak 378 echo "#define HOST_SPARC64 1" >> $config_h 379elif test "$cpu" = "ia64" ; then 380 echo "ARCH=ia64" >> $config_mak 381 echo "#define HOST_IA64 1" >> $config_h 382elif test "$cpu" = "m68k" ; then 383 echo "ARCH=m68k" >> $config_mak 384 echo "#define HOST_M68K 1" >> $config_h 385else 386 echo "Unsupported CPU" 387 exit 1 388fi 389if test "$bigendian" = "yes" ; then 390 echo "WORDS_BIGENDIAN=yes" >> $config_mak 391 echo "#define WORDS_BIGENDIAN 1" >> $config_h 392fi 393if test "$mingw32" = "yes" ; then 394 echo "CONFIG_WIN32=yes" >> $config_mak 395 echo "#define CONFIG_WIN32 1" >> $config_h 396elif test -f "/usr/include/byteswap.h" ; then 397 echo "#define HAVE_BYTESWAP_H 1" >> $config_h 398fi 399if test "$darwin" = "yes" ; then 400 echo "CONFIG_DARWIN=yes" >> $config_mak 401 echo "#define CONFIG_DARWIN 1" >> $config_h 402fi 403if test "$gdbstub" = "yes" ; then 404 echo "CONFIG_GDBSTUB=yes" >> $config_mak 405 echo "#define CONFIG_GDBSTUB 1" >> $config_h 406fi 407if test "$gprof" = "yes" ; then 408 echo "TARGET_GPROF=yes" >> $config_mak 409 echo "#define HAVE_GPROF 1" >> $config_h 410fi 411if test "$static" = "yes" ; then 412 echo "CONFIG_STATIC=yes" >> $config_mak 413 echo "#define CONFIG_STATIC 1" >> $config_h 414fi 415if test "$slirp" = "yes" ; then 416 echo "CONFIG_SLIRP=yes" >> $config_mak 417 echo "#define CONFIG_SLIRP 1" >> $config_h 418fi 419echo -n "VERSION=" >>$config_mak 420head $source_path/VERSION >>$config_mak 421echo "" >>$config_mak 422echo -n "#define QEMU_VERSION \"" >> $config_h 423head $source_path/VERSION >> $config_h 424echo "\"" >> $config_h 425 426echo "SRC_PATH=$source_path" >> $config_mak 427echo "TARGET_DIRS=$target_list" >> $config_mak 428 429# XXX: suppress that 430if [ "$bsd" = "yes" ] ; then 431 echo "#define O_LARGEFILE 0" >> $config_h 432 echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h 433 echo "#define _BSD 1" >> $config_h 434fi 435 436for target in $target_list; do 437 438target_dir="$target" 439config_mak=$target_dir/config.mak 440config_h=$target_dir/config.h 441target_cpu=`echo $target | cut -d '-' -f 1` 442target_bigendian="no" 443[ "$target_cpu" = "sparc" ] && target_bigendian=yes 444[ "$target_cpu" = "ppc" ] && target_bigendian=yes 445target_softmmu="no" 446if expr $target : '.*-softmmu' > /dev/null ; then 447 target_softmmu="yes" 448fi 449target_user_only="no" 450if expr $target : '.*-user' > /dev/null ; then 451 target_user_only="yes" 452fi 453 454#echo "Creating $config_mak, $config_h and $target_dir/Makefile" 455 456mkdir -p $target_dir 457if test "$target" = "arm-user" ; then 458 mkdir -p $target_dir/nwfpe 459fi 460if test "$target_user_only" = "no" ; then 461 mkdir -p $target_dir/slirp 462fi 463 464ln -sf $source_path/Makefile.target $target_dir/Makefile 465 466echo "# Automatically generated by configure - do not modify" > $config_mak 467echo "/* Automatically generated by configure - do not modify */" > $config_h 468 469 470echo "include ../config-host.mak" >> $config_mak 471echo "#include \"../config-host.h\"" >> $config_h 472 473interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"` 474echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h 475 476if test "$target_cpu" = "i386" ; then 477 echo "TARGET_ARCH=i386" >> $config_mak 478 echo "#define TARGET_ARCH \"i386\"" >> $config_h 479 echo "#define TARGET_I386 1" >> $config_h 480elif test "$target_cpu" = "arm" ; then 481 echo "TARGET_ARCH=arm" >> $config_mak 482 echo "#define TARGET_ARCH \"arm\"" >> $config_h 483 echo "#define TARGET_ARM 1" >> $config_h 484elif test "$target_cpu" = "sparc" ; then 485 echo "TARGET_ARCH=sparc" >> $config_mak 486 echo "#define TARGET_ARCH \"sparc\"" >> $config_h 487 echo "#define TARGET_SPARC 1" >> $config_h 488elif test "$target_cpu" = "ppc" ; then 489 echo "TARGET_ARCH=ppc" >> $config_mak 490 echo "#define TARGET_ARCH \"ppc\"" >> $config_h 491 echo "#define TARGET_PPC 1" >> $config_h 492else 493 echo "Unsupported target CPU" 494 exit 1 495fi 496if test "$target_bigendian" = "yes" ; then 497 echo "TARGET_WORDS_BIGENDIAN=yes" >> $config_mak 498 echo "#define TARGET_WORDS_BIGENDIAN 1" >> $config_h 499fi 500if test "$target_softmmu" = "yes" ; then 501 echo "CONFIG_SOFTMMU=yes" >> $config_mak 502 echo "#define CONFIG_SOFTMMU 1" >> $config_h 503fi 504if test "$target_user_only" = "yes" ; then 505 echo "CONFIG_USER_ONLY=yes" >> $config_mak 506 echo "#define CONFIG_USER_ONLY 1" >> $config_h 507fi 508 509# sdl defines 510 511if test "$target_user_only" = "no"; then 512 if test "$target_softmmu" = "no" -o "$static" = "yes"; then 513 if test "$sdl_static" = "yes" ; then 514 echo "#define CONFIG_SDL 1" >> $config_h 515 echo "CONFIG_SDL=yes" >> $config_mak 516 echo "SDL_LIBS=$sdl_static_libs" >> $config_mak 517 fi 518 else 519 if test "$sdl" = "yes" ; then 520 echo "#define CONFIG_SDL 1" >> $config_h 521 echo "CONFIG_SDL=yes" >> $config_mak 522 echo "SDL_LIBS=`$sdl_config --libs`" >> $config_mak 523 fi 524 fi 525 echo -n "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak 526 if [ "${aa}" = "yes" ] ; then 527 echo -n " `aalib-config --cflags`" >> $config_mak ; 528 fi 529 echo "" >> $config_mak 530fi 531 532done # for target in $targets 533 534# build tree in object directory if source path is different from current one 535if test "$source_path_used" = "yes" ; then 536 DIRS="tests" 537 FILES="Makefile tests/Makefile" 538 for dir in $DIRS ; do 539 mkdir -p $dir 540 done 541 for f in $FILES ; do 542 ln -sf $source_path/$f $f 543 done 544fi 545 546rm -f $TMPO $TMPC $TMPE $TMPS 547