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="/usr/local" 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" 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 *) 63 cpu="unknown" 64 ;; 65esac 66gprof="no" 67bigendian="no" 68 69# OS specific 70targetos=`uname -s` 71case $targetos in 72*) ;; 73esac 74 75########################################## 76# SDL probe 77 78cat > $TMPC << EOF 79#include <SDL.h> 80#undef main /* We don't want SDL to override our main() */ 81int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } 82EOF 83 84sdl_too_old=no 85sdl=no 86if $cc -o $TMPE `sdl-config --cflags` $TMPC `sdl-config --libs` 2> /dev/null ; then 87_sdlversion=`sdl-config --version | sed 's/[^0-9]//g'` 88if test "$_sdlversion" -lt 121 ; then 89sdl_too_old=yes 90else 91sdl=yes 92fi 93fi 94 95# find source path 96# XXX: we assume an absolute path is given when launching configure, 97# except in './configure' case. 98source_path=${0%configure} 99source_path=${source_path%/} 100source_path_used="yes" 101if test -z "$source_path" -o "$source_path" = "." ; then 102 source_path=`pwd` 103 source_path_used="no" 104fi 105 106for opt do 107 case "$opt" in 108 --prefix=*) prefix=`echo $opt | cut -d '=' -f 2` 109 ;; 110 --interp-prefix=*) interp_prefix=`echo $opt | cut -d '=' -f 2` 111 ;; 112 --source-path=*) source_path=`echo $opt | cut -d '=' -f 2` 113 ;; 114 --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2` 115 ;; 116 --cc=*) cc=`echo $opt | cut -d '=' -f 2` 117 ;; 118 --make=*) make=`echo $opt | cut -d '=' -f 2` 119 ;; 120 --extra-cflags=*) CFLAGS="${opt#--extra-cflags=}" 121 ;; 122 --extra-ldflags=*) LDFLAGS="${opt#--extra-ldflags=}" 123 ;; 124 --extra-libs=*) extralibs=${opt#--extra-libs=} 125 ;; 126 --cpu=*) cpu=`echo $opt | cut -d '=' -f 2` 127 ;; 128 --target-list=*) target_list=${opt#--target-list=} 129 ;; 130 --enable-gprof) gprof="yes" 131 ;; 132 --static) static="yes" 133 ;; 134 --disable-sdl) sdl="no" 135 ;; 136 esac 137done 138 139# Checking for CFLAGS 140if test -z "$CFLAGS"; then 141 CFLAGS="-O2" 142fi 143 144cc="${cross_prefix}${cc}" 145ar="${cross_prefix}${ar}" 146strip="${cross_prefix}${strip}" 147 148if test -z "$cross_prefix" ; then 149 150# --- 151# big/little endian test 152cat > $TMPC << EOF 153#include <inttypes.h> 154int main(int argc, char ** argv){ 155 volatile uint32_t i=0x01234567; 156 return (*((uint8_t*)(&i))) == 0x67; 157} 158EOF 159 160if $cc -o $TMPE $TMPC 2>/dev/null ; then 161$TMPE && bigendian="yes" 162else 163echo big/little test failed 164fi 165 166else 167 168# if cross compiling, cannot launch a program, so make a static guess 169if test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "s390" -o "$cpu" = "sparc" -o "$cpu" = "sparc64" -o "$cpu" = "m68k"; then 170 bigendian="yes" 171fi 172 173fi 174 175# check gcc options support 176cat > $TMPC <<EOF 177int main(void) { 178} 179EOF 180 181have_gcc3_options="no" 182if $cc -fno-reorder-blocks -fno-optimize-sibling-calls -o $TMPO $TMPC 2> /dev/null ; then 183 have_gcc3_options="yes" 184fi 185 186if test x"$1" = x"-h" -o x"$1" = x"--help" ; then 187cat << EOF 188 189Usage: configure [options] 190Options: [defaults in brackets after descriptions] 191 192EOF 193echo "Standard options:" 194echo " --help print this message" 195echo " --prefix=PREFIX install in PREFIX [$prefix]" 196echo " --interp-prefix=PREFIX where to find shared libraries, etc." 197echo " use %M for cpu name [$interp_prefix]" 198echo " --target-list=LIST set target list [$target_list]" 199echo "" 200echo "Advanced options (experts only):" 201echo " --source-path=PATH path of source code [$source_path]" 202echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]" 203echo " --cc=CC use C compiler CC [$cc]" 204echo " --make=MAKE use specified make [$make]" 205echo " --static enable static build [$static]" 206echo "" 207echo "NOTE: The object files are build at the place where configure is launched" 208exit 1 209fi 210 211mandir="$prefix/share/man" 212sharedir="$prefix/share/qemu" 213 214echo "Install prefix $prefix" 215echo "Manual directory $mandir" 216echo "BIOS directory $sharedir" 217echo "ELF interp prefix $interp_prefix" 218echo "Source path $source_path" 219echo "C compiler $cc" 220echo "make $make" 221echo "host CPU $cpu" 222echo "host big endian $bigendian" 223echo "target list $target_list" 224echo "gprof enabled $gprof" 225echo "static build $static" 226echo "SDL support $sdl" 227if test $sdl_too_old = "yes"; then 228echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support" 229fi 230 231config_mak="config-host.mak" 232config_h="config-host.h" 233 234echo "Creating $config_mak and $config_h" 235 236echo "# Automatically generated by configure - do not modify" > $config_mak 237echo "/* Automatically generated by configure - do not modify */" > $config_h 238 239echo "prefix=$prefix" >> $config_mak 240echo "mandir=$mandir" >> $config_mak 241echo "sharedir=$sharedir" >> $config_mak 242echo "#define CONFIG_QEMU_SHAREDIR \"$sharedir\"" >> $config_h 243echo "MAKE=$make" >> $config_mak 244echo "CC=$cc" >> $config_mak 245if test "$have_gcc3_options" = "yes" ; then 246 echo "HAVE_GCC3_OPTIONS=yes" >> $config_mak 247fi 248echo "HOST_CC=$host_cc" >> $config_mak 249echo "AR=$ar" >> $config_mak 250echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak 251echo "CFLAGS=$CFLAGS" >> $config_mak 252echo "LDFLAGS=$LDFLAGS" >> $config_mak 253if test "$cpu" = "i386" ; then 254 echo "ARCH=i386" >> $config_mak 255 echo "#define HOST_I386 1" >> $config_h 256elif test "$cpu" = "armv4l" ; then 257 echo "ARCH=arm" >> $config_mak 258 echo "#define HOST_ARM 1" >> $config_h 259elif test "$cpu" = "powerpc" ; then 260 echo "ARCH=ppc" >> $config_mak 261 echo "#define HOST_PPC 1" >> $config_h 262elif test "$cpu" = "mips" ; then 263 echo "ARCH=mips" >> $config_mak 264 echo "#define HOST_MIPS 1" >> $config_h 265elif test "$cpu" = "s390" ; then 266 echo "ARCH=s390" >> $config_mak 267 echo "#define HOST_S390 1" >> $config_h 268elif test "$cpu" = "alpha" ; then 269 echo "ARCH=alpha" >> $config_mak 270 echo "#define HOST_ALPHA 1" >> $config_h 271elif test "$cpu" = "sparc" ; then 272 echo "ARCH=sparc" >> $config_mak 273 echo "#define HOST_SPARC 1" >> $config_h 274elif test "$cpu" = "sparc64" ; then 275 echo "ARCH=sparc64" >> $config_mak 276 echo "#define HOST_SPARC64 1" >> $config_h 277elif test "$cpu" = "ia64" ; then 278 echo "ARCH=ia64" >> $config_mak 279 echo "#define HOST_IA64 1" >> $config_h 280elif test "$cpu" = "m68k" ; then 281 echo "ARCH=m68k" >> config.mak 282 echo "#define HOST_M68K 1" >> $TMPH 283else 284 echo "Unsupported CPU" 285 exit 1 286fi 287if test "$bigendian" = "yes" ; then 288 echo "WORDS_BIGENDIAN=yes" >> $config_mak 289 echo "#define WORDS_BIGENDIAN 1" >> $config_h 290fi 291echo "#define HAVE_BYTESWAP_H 1" >> $config_h 292if test "$gprof" = "yes" ; then 293 echo "TARGET_GPROF=yes" >> $config_mak 294 echo "#define HAVE_GPROF 1" >> $config_h 295fi 296if test "$static" = "yes" ; then 297 echo "CONFIG_STATIC=yes" >> $config_mak 298 echo "#define CONFIG_STATIC 1" >> $config_h 299fi 300if test "$sdl" = "yes" ; then 301 echo "CONFIG_SDL=yes" >> $config_mak 302 echo "#define CONFIG_SDL 1" >> $config_h 303 echo "SDL_LIBS=`sdl-config --libs`" >> $config_mak 304 echo "SDL_STATIC_LIBS=`sdl-config --static-libs`" >> $config_mak 305 echo "SDL_CFLAGS=`sdl-config --cflags`" >> $config_mak 306fi 307echo -n "VERSION=" >>$config_mak 308head $source_path/VERSION >>$config_mak 309echo "" >>$config_mak 310echo -n "#define QEMU_VERSION \"" >> $config_h 311head $source_path/VERSION >> $config_h 312echo "\"" >> $config_h 313 314echo "SRC_PATH=$source_path" >> $config_mak 315echo "TARGET_DIRS=$target_list" >> $config_mak 316 317for target in $target_list; do 318 319target_dir="$target" 320config_mak=$target_dir/config.mak 321config_h=$target_dir/config.h 322target_cpu=`echo $target | cut -d '-' -f 1` 323target_bigendian="no" 324[ "$target_cpu" = "sparc" ] && target_bigendian=yes 325[ "$target_cpu" = "ppc" ] && target_bigendian=yes 326target_softmmu="no" 327if expr $target : '.*-softmmu' > /dev/null ; then 328 target_softmmu="yes" 329fi 330target_user_only="no" 331if expr $target : '.*-user' > /dev/null ; then 332 target_user_only="yes" 333fi 334 335echo "Creating $config_mak, $config_h and $target_dir/Makefile" 336 337mkdir -p $target_dir 338ln -sf $source_path/Makefile.target $target_dir/Makefile 339 340echo "# Automatically generated by configure - do not modify" > $config_mak 341echo "/* Automatically generated by configure - do not modify */" > $config_h 342 343 344echo "include ../config-host.mak" >> $config_mak 345echo "#include \"../config-host.h\"" >> $config_h 346 347interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"` 348echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h 349 350if test "$target_cpu" = "i386" ; then 351 echo "TARGET_ARCH=i386" >> $config_mak 352 echo "#define TARGET_ARCH \"i386\"" >> $config_h 353 echo "#define TARGET_I386 1" >> $config_h 354elif test "$target_cpu" = "arm" ; then 355 echo "TARGET_ARCH=arm" >> $config_mak 356 echo "#define TARGET_ARCH \"arm\"" >> $config_h 357 echo "#define TARGET_ARM 1" >> $config_h 358elif test "$target_cpu" = "sparc" ; then 359 echo "TARGET_ARCH=sparc" >> $config_mak 360 echo "#define TARGET_ARCH \"sparc\"" >> $config_h 361 echo "#define TARGET_SPARC 1" >> $config_h 362elif test "$target_cpu" = "ppc" ; then 363 echo "TARGET_ARCH=ppc" >> $config_mak 364 echo "#define TARGET_ARCH \"ppc\"" >> $config_h 365 echo "#define TARGET_PPC 1" >> $config_h 366else 367 echo "Unsupported target CPU" 368 exit 1 369fi 370if test "$target_bigendian" = "yes" ; then 371 echo "TARGET_WORDS_BIGENDIAN=yes" >> $config_mak 372 echo "#define TARGET_WORDS_BIGENDIAN 1" >> $config_h 373fi 374if test "$target_softmmu" = "yes" ; then 375 echo "CONFIG_SOFTMMU=yes" >> $config_mak 376 echo "#define CONFIG_SOFTMMU 1" >> $config_h 377fi 378if test "$target_user_only" = "yes" ; then 379 echo "CONFIG_USER_ONLY=yes" >> $config_mak 380 echo "#define CONFIG_USER_ONLY 1" >> $config_h 381fi 382 383done # for target in $targets 384 385# build tree in object directory if source path is different from current one 386if test "$source_path_used" = "yes" ; then 387 DIRS="tests" 388 FILES="Makefile tests/Makefile" 389 for dir in $DIRS ; do 390 mkdir -p $dir 391 done 392 for f in $FILES ; do 393 ln -sf $source_path/$f $f 394 done 395fi 396 397rm -f $TMPO $TMPC $TMPE $TMPS 398