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" 183ef693a0SbellardTMPH="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.h" 197d13299dSbellard 207d13299dSbellard# default parameters 217d13299dSbellardprefix="/usr/local" 227d13299dSbellardcross_prefix="" 237d13299dSbellardcc="gcc" 247d13299dSbellardhost_cc="gcc" 257d13299dSbellardar="ar" 267d13299dSbellardmake="make" 277d13299dSbellardstrip="strip" 287d13299dSbellardcpu=`uname -m` 297d13299dSbellardcase "$cpu" in 307d13299dSbellard i386|i486|i586|i686|i86pc|BePC) 317d13299dSbellard cpu="x86" 327d13299dSbellard ;; 337d13299dSbellard armv4l) 347d13299dSbellard cpu="armv4l" 357d13299dSbellard ;; 367d13299dSbellard alpha) 377d13299dSbellard cpu="alpha" 387d13299dSbellard ;; 397d13299dSbellard "Power Macintosh"|ppc) 407d13299dSbellard cpu="powerpc" 417d13299dSbellard ;; 427d13299dSbellard mips) 437d13299dSbellard cpu="mips" 447d13299dSbellard ;; 45*fb3e5849Sbellard s390) 46*fb3e5849Sbellard cpu="s390" 47*fb3e5849Sbellard ;; 487d13299dSbellard *) 497d13299dSbellard cpu="unknown" 507d13299dSbellard ;; 517d13299dSbellardesac 527d13299dSbellardgprof="no" 537d13299dSbellardbigendian="no" 547d13299dSbellard 557d13299dSbellard# OS specific 567d13299dSbellardtargetos=`uname -s` 577d13299dSbellardcase $targetos in 587d13299dSbellardBeOS) 597d13299dSbellardprefix="/boot/home/config" 607d13299dSbellard# helps building libavcodec 617d13299dSbellardCFLAGS="-O2 -DPIC" 627d13299dSbellard# no need for libm, but the inet stuff 637d13299dSbellard# Check for BONE 647d13299dSbellardif (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then 657d13299dSbellardextralibs="-lbind -lsocket" 667d13299dSbellardelse 677d13299dSbellardecho "Not sure building for net_server will succeed... good luck." 687d13299dSbellardextralibs="-lsocket" 697d13299dSbellardfi ;; 707d13299dSbellardBSD/OS) 717d13299dSbellardextralibs="-lpoll -lgnugetopt -lm" 727d13299dSbellardmake="gmake" 737d13299dSbellard;; 747d13299dSbellard*) ;; 757d13299dSbellardesac 767d13299dSbellard 777d13299dSbellard# find source path 787d13299dSbellard# XXX: we assume an absolute path is given when launching configure, 797d13299dSbellard# except in './configure' case. 807d13299dSbellardsource_path=${0%configure} 817d13299dSbellardsource_path=${source_path%/} 827d13299dSbellardsource_path_used="yes" 837d13299dSbellardif test -z "$source_path" -o "$source_path" = "." ; then 847d13299dSbellard source_path=`pwd` 857d13299dSbellard source_path_used="no" 867d13299dSbellardfi 877d13299dSbellard 887d13299dSbellardfor opt do 897d13299dSbellard case "$opt" in 907d13299dSbellard --prefix=*) prefix=`echo $opt | cut -d '=' -f 2` 917d13299dSbellard ;; 927d13299dSbellard --source-path=*) source_path=`echo $opt | cut -d '=' -f 2` 937d13299dSbellard ;; 947d13299dSbellard --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2` 957d13299dSbellard ;; 967d13299dSbellard --cc=*) cc=`echo $opt | cut -d '=' -f 2` 977d13299dSbellard ;; 987d13299dSbellard --make=*) make=`echo $opt | cut -d '=' -f 2` 997d13299dSbellard ;; 1007d13299dSbellard --extra-cflags=*) CFLAGS="${opt#--extra-cflags=}" 1017d13299dSbellard ;; 1027d13299dSbellard --extra-ldflags=*) LDFLAGS="${opt#--extra-ldflags=}" 1037d13299dSbellard ;; 1047d13299dSbellard --extra-libs=*) extralibs=${opt#--extra-libs=} 1057d13299dSbellard ;; 1067d13299dSbellard --cpu=*) cpu=`echo $opt | cut -d '=' -f 2` 1077d13299dSbellard ;; 1087d13299dSbellard --enable-gprof) gprof="yes" 1097d13299dSbellard ;; 1107d13299dSbellard esac 1117d13299dSbellarddone 1127d13299dSbellard 1137d13299dSbellard# Checking for CFLAGS 1147d13299dSbellardif test -z "$CFLAGS"; then 1157d13299dSbellard CFLAGS="-O2" 1167d13299dSbellardfi 1177d13299dSbellard 1187d13299dSbellardcc="${cross_prefix}${cc}" 1197d13299dSbellardar="${cross_prefix}${ar}" 1207d13299dSbellardstrip="${cross_prefix}${strip}" 1217d13299dSbellard 1227d13299dSbellardif test -z "$cross_prefix" ; then 1237d13299dSbellard 1247d13299dSbellard# --- 1257d13299dSbellard# big/little endian test 1267d13299dSbellardcat > $TMPC << EOF 1277d13299dSbellard#include <inttypes.h> 1287d13299dSbellardint main(int argc, char ** argv){ 1297d13299dSbellard volatile uint32_t i=0x01234567; 1307d13299dSbellard return (*((uint8_t*)(&i))) == 0x67; 1317d13299dSbellard} 1327d13299dSbellardEOF 1337d13299dSbellard 1347d13299dSbellardif $cc -o $TMPE $TMPC 2>/dev/null ; then 1357d13299dSbellard$TMPE && bigendian="yes" 1367d13299dSbellardelse 1377d13299dSbellardecho big/little test failed 1387d13299dSbellardfi 1397d13299dSbellard 1407d13299dSbellardelse 1417d13299dSbellard 1427d13299dSbellard# if cross compiling, cannot launch a program, so make a static guess 143*fb3e5849Sbellardif test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "s390" ; then 1447d13299dSbellard bigendian="yes" 1457d13299dSbellardfi 1467d13299dSbellard 1477d13299dSbellardfi 1487d13299dSbellard 149ca735206Sbellard# check gcc version 15004369ff2Sbellardcat > $TMPC <<EOF 15104369ff2Sbellardint main(void) { 15204369ff2Sbellard#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2) 15304369ff2Sbellardreturn 0; 15404369ff2Sbellard#else 15504369ff2Sbellard#error gcc < 3.2 15604369ff2Sbellard#endif 15704369ff2Sbellard} 15804369ff2SbellardEOF 15904369ff2Sbellard 160ca735206Sbellardgcc_major="2" 16104369ff2Sbellardif $cc -o $TMPO $TMPC 2> /dev/null ; then 16204369ff2Sbellard gcc_major="3" 16304369ff2Sbellardfi 164ca735206Sbellard 1657d13299dSbellardif test x"$1" = x"-h" -o x"$1" = x"--help" ; then 1667d13299dSbellardcat << EOF 1677d13299dSbellard 1687d13299dSbellardUsage: configure [options] 1697d13299dSbellardOptions: [defaults in brackets after descriptions] 1707d13299dSbellard 1717d13299dSbellardEOF 1727d13299dSbellardecho "Standard options:" 1737d13299dSbellardecho " --help print this message" 1747d13299dSbellardecho " --prefix=PREFIX install in PREFIX [$prefix]" 1757d13299dSbellardecho " for audio/video/image support" 1767d13299dSbellardecho "" 1777d13299dSbellardecho "Advanced options (experts only):" 1787d13299dSbellardecho " --source-path=PATH path of source code [$source_path]" 1797d13299dSbellardecho " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]" 1807d13299dSbellardecho " --cc=CC use C compiler CC [$cc]" 1817d13299dSbellardecho " --make=MAKE use specified make [$make]" 1827d13299dSbellardecho "" 1837d13299dSbellardecho "NOTE: The object files are build at the place where configure is launched" 1847d13299dSbellardexit 1 1857d13299dSbellardfi 1867d13299dSbellard 1877d13299dSbellardecho "Install prefix $prefix" 1887d13299dSbellardecho "Source path $source_path" 1897d13299dSbellardecho "C compiler $cc" 1907d13299dSbellardecho "make $make" 1917d13299dSbellardecho "CPU $cpu" 1927d13299dSbellardecho "Big Endian $bigendian" 1937d13299dSbellardecho "gprof enabled $gprof" 1947d13299dSbellard 1957d13299dSbellardecho "Creating config.mak and config.h" 1967d13299dSbellard 1977d13299dSbellardecho "# Automatically generated by configure - do not modify" > config.mak 1987d13299dSbellardecho "/* Automatically generated by configure - do not modify */" > $TMPH 1997d13299dSbellard 2007d13299dSbellardecho "prefix=$prefix" >> config.mak 2013ef693a0Sbellardecho "#define CONFIG_QEMU_PREFIX \"$prefix\"" >> $TMPH 2027d13299dSbellardecho "MAKE=$make" >> config.mak 2037d13299dSbellardecho "CC=$cc" >> config.mak 204ca735206Sbellardecho "GCC_MAJOR=$gcc_major" >> config.mak 2057d13299dSbellardecho "HOST_CC=$host_cc" >> config.mak 2067d13299dSbellardecho "AR=$ar" >> config.mak 2077d13299dSbellardecho "STRIP=$strip -s -R .comment -R .note" >> config.mak 2087d13299dSbellardecho "CFLAGS=$CFLAGS" >> config.mak 2097d13299dSbellardecho "LDFLAGS=$LDFLAGS" >> config.mak 2107d13299dSbellardif test "$cpu" = "x86" ; then 2117d13299dSbellard echo "ARCH=i386" >> config.mak 2127d13299dSbellardelif test "$cpu" = "armv4l" ; then 2137d13299dSbellard echo "ARCH=arm" >> config.mak 2147d13299dSbellardelif test "$cpu" = "powerpc" ; then 21504369ff2Sbellard echo "ARCH=ppc" >> config.mak 2167d13299dSbellardelif test "$cpu" = "mips" ; then 21704369ff2Sbellard echo "ARCH=mips" >> config.mak 218*fb3e5849Sbellardelif test "$cpu" = "s390" ; then 219*fb3e5849Sbellard echo "ARCH=s390" >> config.mak 2207d13299dSbellardelse 2217d13299dSbellard echo "Unsupported CPU" 2227d13299dSbellard exit 1 2237d13299dSbellardfi 2247d13299dSbellardif test "$bigendian" = "yes" ; then 2257d13299dSbellard echo "WORDS_BIGENDIAN=yes" >> config.mak 2267d13299dSbellard echo "#define WORDS_BIGENDIAN 1" >> $TMPH 2277d13299dSbellardfi 2287d13299dSbellardif test "$gprof" = "yes" ; then 2297d13299dSbellard echo "TARGET_GPROF=yes" >> config.mak 2307d13299dSbellard echo "#define HAVE_GPROF 1" >> $TMPH 2317d13299dSbellardfi 2327d13299dSbellardecho -n "VERSION=" >>config.mak 2337d13299dSbellardhead $source_path/VERSION >>config.mak 2347d13299dSbellardecho "" >>config.mak 2353ef693a0Sbellardecho -n "#define QEMU_VERSION \"" >> $TMPH 2367d13299dSbellardhead $source_path/VERSION >> $TMPH 2377d13299dSbellardecho "\"" >> $TMPH 2387d13299dSbellardif test "$network" = "yes" ; then 2397d13299dSbellard echo "#define CONFIG_NETWORK 1" >> $TMPH 2407d13299dSbellard echo "CONFIG_NETWORK=yes" >> config.mak 2417d13299dSbellardfi 2427d13299dSbellard 2437d13299dSbellard# build tree in object directory if source path is different from current one 2447d13299dSbellardif test "$source_path_used" = "yes" ; then 2457d13299dSbellard DIRS="tests" 2467d13299dSbellard FILES="Makefile tests/Makefile" 2477d13299dSbellard for dir in $DIRS ; do 2487d13299dSbellard mkdir -p $dir 2497d13299dSbellard done 2507d13299dSbellard for f in $FILES ; do 2517d13299dSbellard ln -sf $source_path/$f $f 2527d13299dSbellard done 2537d13299dSbellardfi 2547d13299dSbellardecho "SRC_PATH=$source_path" >> config.mak 2557d13299dSbellard 2567d13299dSbellarddiff $TMPH config.h >/dev/null 2>&1 2577d13299dSbellardif test $? -ne 0 ; then 2587d13299dSbellard mv -f $TMPH config.h 2597d13299dSbellardelse 2607d13299dSbellard echo "config.h is unchanged" 2617d13299dSbellardfi 2627d13299dSbellard 2637d13299dSbellardrm -f $TMPH 264