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-i386" 22static="no" 23cross_prefix="" 24cc="gcc" 25host_cc="gcc" 26ar="ar" 27make="make" 28strip="strip" 29cpu=`uname -m` 30target_list="i386 i386-softmmu arm" 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. [$interp_prefix]" 197echo " --target-list=LIST set target list [$target_list]" 198echo "" 199echo "Advanced options (experts only):" 200echo " --source-path=PATH path of source code [$source_path]" 201echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]" 202echo " --cc=CC use C compiler CC [$cc]" 203echo " --make=MAKE use specified make [$make]" 204echo " --static enable static build [$static]" 205echo "" 206echo "NOTE: The object files are build at the place where configure is launched" 207exit 1 208fi 209 210echo "Install prefix $prefix" 211echo "Source path $source_path" 212echo "ELF interp prefix $interp_prefix" 213echo "C compiler $cc" 214echo "make $make" 215echo "host CPU $cpu" 216echo "host big endian $bigendian" 217echo "target list $target_list" 218echo "gprof enabled $gprof" 219echo "static build $static" 220echo "SDL support $sdl" 221if test $sdl_too_old = "yes"; then 222echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support" 223fi 224 225config_mak="config-host.mak" 226config_h="config-host.h" 227 228echo "Creating $config_mak and $config_h" 229 230echo "# Automatically generated by configure - do not modify" > $config_mak 231echo "/* Automatically generated by configure - do not modify */" > $config_h 232 233echo "prefix=$prefix" >> $config_mak 234echo "MAKE=$make" >> $config_mak 235echo "CC=$cc" >> $config_mak 236if test "$have_gcc3_options" = "yes" ; then 237 echo "HAVE_GCC3_OPTIONS=yes" >> $config_mak 238fi 239echo "HOST_CC=$host_cc" >> $config_mak 240echo "AR=$ar" >> $config_mak 241echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak 242echo "CFLAGS=$CFLAGS" >> $config_mak 243echo "LDFLAGS=$LDFLAGS" >> $config_mak 244if test "$cpu" = "i386" ; then 245 echo "ARCH=i386" >> $config_mak 246 echo "#define HOST_I386 1" >> $config_h 247elif test "$cpu" = "armv4l" ; then 248 echo "ARCH=arm" >> $config_mak 249 echo "#define HOST_ARM 1" >> $config_h 250elif test "$cpu" = "powerpc" ; then 251 echo "ARCH=ppc" >> $config_mak 252 echo "#define HOST_PPC 1" >> $config_h 253elif test "$cpu" = "mips" ; then 254 echo "ARCH=mips" >> $config_mak 255 echo "#define HOST_MIPS 1" >> $config_h 256elif test "$cpu" = "s390" ; then 257 echo "ARCH=s390" >> $config_mak 258 echo "#define HOST_S390 1" >> $config_h 259elif test "$cpu" = "alpha" ; then 260 echo "ARCH=alpha" >> $config_mak 261 echo "#define HOST_ALPHA 1" >> $config_h 262elif test "$cpu" = "sparc" ; then 263 echo "ARCH=sparc" >> $config_mak 264 echo "#define HOST_SPARC 1" >> $config_h 265elif test "$cpu" = "sparc64" ; then 266 echo "ARCH=sparc64" >> $config_mak 267 echo "#define HOST_SPARC64 1" >> $config_h 268elif test "$cpu" = "ia64" ; then 269 echo "ARCH=ia64" >> $config_mak 270 echo "#define HOST_IA64 1" >> $config_h 271elif test "$cpu" = "m68k" ; then 272 echo "ARCH=m68k" >> config.mak 273 echo "#define HOST_M68K 1" >> $TMPH 274else 275 echo "Unsupported CPU" 276 exit 1 277fi 278if test "$bigendian" = "yes" ; then 279 echo "WORDS_BIGENDIAN=yes" >> $config_mak 280 echo "#define WORDS_BIGENDIAN 1" >> $config_h 281fi 282echo "#define HAVE_BYTESWAP_H 1" >> $config_h 283if test "$gprof" = "yes" ; then 284 echo "TARGET_GPROF=yes" >> $config_mak 285 echo "#define HAVE_GPROF 1" >> $config_h 286fi 287if test "$static" = "yes" ; then 288 echo "CONFIG_STATIC=yes" >> $config_mak 289fi 290if test "$sdl" = "yes" ; then 291 echo "CONFIG_SDL=yes" >> $config_mak 292 echo "#define CONFIG_SDL 1" >> $config_h 293 echo "SDL_LIBS=`sdl-config --libs`" >> $config_mak 294 echo "SDL_CFLAGS=`sdl-config --cflags`" >> $config_mak 295fi 296echo -n "VERSION=" >>$config_mak 297head $source_path/VERSION >>$config_mak 298echo "" >>$config_mak 299echo -n "#define QEMU_VERSION \"" >> $config_h 300head $source_path/VERSION >> $config_h 301echo "\"" >> $config_h 302 303echo "SRC_PATH=$source_path" >> $config_mak 304echo "TARGET_DIRS=$target_list" >> $config_mak 305 306for target in $target_list; do 307 308target_dir="$target" 309config_mak=$target_dir/config.mak 310config_h=$target_dir/config.h 311target_cpu=`echo $target | cut -d '-' -f 1` 312target_bigendian="no" 313target_softmmu="no" 314if expr $target : '.*-softmmu' > /dev/null ; then 315 target_softmmu="yes" 316fi 317 318echo "Creating $config_mak, $config_h and $target_dir/Makefile" 319 320mkdir -p $target_dir 321ln -sf $source_path/Makefile.target $target_dir/Makefile 322 323echo "# Automatically generated by configure - do not modify" > $config_mak 324echo "/* Automatically generated by configure - do not modify */" > $config_h 325 326 327echo "include ../config-host.mak" >> $config_mak 328echo "#include \"../config-host.h\"" >> $config_h 329echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix\"" >> $config_h 330 331if test "$target_cpu" = "i386" ; then 332 echo "TARGET_ARCH=i386" >> $config_mak 333 echo "#define TARGET_ARCH \"i386\"" >> $config_h 334 echo "#define TARGET_I386 1" >> $config_h 335elif test "$target_cpu" = "arm" ; then 336 echo "TARGET_ARCH=arm" >> $config_mak 337 echo "#define TARGET_ARCH \"arm\"" >> $config_h 338 echo "#define TARGET_ARM 1" >> $config_h 339else 340 echo "Unsupported target CPU" 341 exit 1 342fi 343if test "$target_bigendian" = "yes" ; then 344 echo "TARGET_WORDS_BIGENDIAN=yes" >> $config_mak 345 echo "#define TARGET_WORDS_BIGENDIAN 1" >> $config_h 346fi 347if test "$target_softmmu" = "yes" ; then 348 echo "CONFIG_SOFTMMU=yes" >> $config_mak 349 echo "#define CONFIG_SOFTMMU 1" >> $config_h 350fi 351 352done # for target in $targets 353 354# build tree in object directory if source path is different from current one 355if test "$source_path_used" = "yes" ; then 356 DIRS="tests" 357 FILES="Makefile tests/Makefile" 358 for dir in $DIRS ; do 359 mkdir -p $dir 360 done 361 for f in $FILES ; do 362 ln -sf $source_path/$f $f 363 done 364fi 365 366rm -f $TMPO $TMPC $TMPE $TMPS 367