xref: /kvm-unit-tests/configure (revision 1b7dd7d312b93a5622b3df9886bd5017243d2deb)
1*1b7dd7d3SSergey Bronnikov#!/usr/bin/env bash
27d36db35SAvi Kivity
37d36db35SAvi Kivityprefix=/usr/local
47d36db35SAvi Kivitycc=gcc
57d36db35SAvi Kivityld=ld
67d36db35SAvi Kivityobjcopy=objcopy
7de9d141bSAndrew Jonesobjdump=objdump
87d36db35SAvi Kivityar=ar
9e593c4fdSAndrew Jonesaddr2line=addr2line
10810e9728SLaurent Vivierarch=`uname -m | sed -e 's/i.86/i386/;s/arm.*/arm/;s/ppc64.*/ppc64/'`
11c4306560SAlex Bennéehost=$arch
127d36db35SAvi Kivitycross_prefix=
13f1ccf5d2SLaurent Vivierendian=""
1456c886b0SPeter Feinerpretty_print_stacks=yes
1544f64120SAndrew Jonesu32_long=
167d36db35SAvi Kivity
177d36db35SAvi Kivityusage() {
187d36db35SAvi Kivity    cat <<-EOF
197d36db35SAvi Kivity	Usage: $0 [options]
207d36db35SAvi Kivity
217d36db35SAvi Kivity	Options include:
227d36db35SAvi Kivity	    --arch=ARCH            architecture to compile for ($arch)
235e61cba0SAndrew Jones	    --processor=PROCESSOR  processor to compile for ($arch)
247d36db35SAvi Kivity	    --cross-prefix=PREFIX  cross compiler prefix
257d36db35SAvi Kivity	    --cc=CC		   c compiler to use ($cc)
267d36db35SAvi Kivity	    --ld=LD		   ld linker to use ($ld)
277d36db35SAvi Kivity	    --prefix=PREFIX        where to install things ($prefix)
28f1ccf5d2SLaurent Vivier	    --endian=ENDIAN        endianness to compile for (little or big, ppc64 only)
2956c886b0SPeter Feiner	    --[enable|disable]-pretty-print-stacks
3056c886b0SPeter Feiner	                           enable or disable pretty stack printing (enabled by default)
317d36db35SAvi KivityEOF
327d36db35SAvi Kivity    exit 1
337d36db35SAvi Kivity}
347d36db35SAvi Kivity
357d36db35SAvi Kivitywhile [[ "$1" = -* ]]; do
367d36db35SAvi Kivity    opt="$1"; shift
377d36db35SAvi Kivity    arg=
387d36db35SAvi Kivity    if [[ "$opt" = *=* ]]; then
397d36db35SAvi Kivity	arg="${opt#*=}"
407d36db35SAvi Kivity	opt="${opt%%=*}"
417d36db35SAvi Kivity    fi
427d36db35SAvi Kivity    case "$opt" in
437d36db35SAvi Kivity	--prefix)
447d36db35SAvi Kivity	    prefix="$arg"
457d36db35SAvi Kivity	    ;;
467d36db35SAvi Kivity        --arch)
477d36db35SAvi Kivity	    arch="$arg"
487d36db35SAvi Kivity	    ;;
497d36db35SAvi Kivity        --processor)
507d36db35SAvi Kivity	    processor="$arg"
517d36db35SAvi Kivity	    ;;
527d36db35SAvi Kivity	--cross-prefix)
537d36db35SAvi Kivity	    cross_prefix="$arg"
547d36db35SAvi Kivity	    ;;
55f1ccf5d2SLaurent Vivier	--endian)
56f1ccf5d2SLaurent Vivier	    endian="$arg"
57f1ccf5d2SLaurent Vivier	    ;;
587d36db35SAvi Kivity	--cc)
597d36db35SAvi Kivity	    cc="$arg"
607d36db35SAvi Kivity	    ;;
617d36db35SAvi Kivity	--ld)
627d36db35SAvi Kivity	    ld="$arg"
637d36db35SAvi Kivity	    ;;
6456c886b0SPeter Feiner	--enable-pretty-print-stacks)
6556c886b0SPeter Feiner	    pretty_print_stacks=yes
6656c886b0SPeter Feiner	    ;;
6756c886b0SPeter Feiner	--disable-pretty-print-stacks)
6856c886b0SPeter Feiner	    pretty_print_stacks=no
6956c886b0SPeter Feiner	    ;;
707d36db35SAvi Kivity	--help)
717d36db35SAvi Kivity	    usage
727d36db35SAvi Kivity	    ;;
737d36db35SAvi Kivity	*)
747d36db35SAvi Kivity	    usage
757d36db35SAvi Kivity	    ;;
767d36db35SAvi Kivity    esac
777d36db35SAvi Kivitydone
7839ac3f84SAndrew Jones
7939ac3f84SAndrew Jonesarch_name=$arch
8039ac3f84SAndrew Jones[ "$arch" = "aarch64" ] && arch="arm64"
8139ac3f84SAndrew Jones[ "$arch_name" = "arm64" ] && arch_name="aarch64"
8239ac3f84SAndrew Jones
835e61cba0SAndrew Jones[ -z "$processor" ] && processor="$arch"
845e61cba0SAndrew Jones
8539ac3f84SAndrew Jonesif [ "$processor" = "arm64" ]; then
8639ac3f84SAndrew Jones    processor="cortex-a57"
8739ac3f84SAndrew Joneselif [ "$processor" = "arm" ]; then
885e61cba0SAndrew Jones    processor="cortex-a15"
895e61cba0SAndrew Jonesfi
905e61cba0SAndrew Jones
91761db0bdSAndrew Jonesif [ "$arch" = "i386" ] || [ "$arch" = "x86_64" ]; then
92761db0bdSAndrew Jones    testdir=x86
9339ac3f84SAndrew Joneselif [ "$arch" = "arm" ] || [ "$arch" = "arm64" ]; then
9439ac3f84SAndrew Jones    testdir=arm
951e95c7ccSAndrew Joneselif [ "$arch" = "ppc64" ]; then
961e95c7ccSAndrew Jones    testdir=powerpc
973f8d4194SAndrew Jones    firmware="$testdir/boot_rom.bin"
98f1ccf5d2SLaurent Vivier    if [ "$endian" != "little" ] && [ "$endian" != "big" ]; then
99f1ccf5d2SLaurent Vivier        echo "You must provide endianness (big or little)!"
100f1ccf5d2SLaurent Vivier        usage
101f1ccf5d2SLaurent Vivier    fi
102761db0bdSAndrew Joneselse
103761db0bdSAndrew Jones    testdir=$arch
104761db0bdSAndrew Jonesfi
105761db0bdSAndrew Jonesif [ ! -d $testdir ]; then
106761db0bdSAndrew Jones    echo "$testdir does not exist!"
107761db0bdSAndrew Jones    exit 1
108761db0bdSAndrew Jonesfi
109761db0bdSAndrew Jonesif [ -f $testdir/run ]; then
110761db0bdSAndrew Jones    ln -fs $testdir/run $testdir-run
111761db0bdSAndrew Jonesfi
1127d36db35SAvi Kivity
113529046c3SAlex Bennée# check if uint32_t needs a long format modifier
11444f64120SAndrew Jonescat << EOF > lib-test.c
11544f64120SAndrew Jones__UINT32_TYPE__
116529046c3SAlex BennéeEOF
11744f64120SAndrew Jonesu32_long=$($cross_prefix$cc -E lib-test.c | grep -v '^#' | grep -q long && echo yes)
11844f64120SAndrew Jonesrm -f lib-test.c
119529046c3SAlex Bennée
120f9561e8dSConny Seidel# check for dependent 32 bit libraries
1215e61cba0SAndrew Jonesif [ "$arch" != "arm" ]; then
122f9561e8dSConny Seidelcat << EOF > lib_test.c
123f9561e8dSConny Seidel#include <stdc++.h>
124f9561e8dSConny Seidel#include <boost_thread-mt.h>
125f9561e8dSConny Seidel#include <pthread.h>
126f9561e8dSConny Seidel
127f9561e8dSConny Seidelint main ()
128f9561e8dSConny Seidel{}
129f9561e8dSConny SeidelEOF
130f9561e8dSConny Seidel$cc -m32 -o /dev/null lib_test.c &> /dev/null
131f9561e8dSConny Seidelexit=$?
132f9561e8dSConny Seidelif [ $exit -eq 0 ]; then
133f9561e8dSConny Seidel    api=true
134f9561e8dSConny Seidelfi
135f9561e8dSConny Seidelrm -f lib_test.c
1365e61cba0SAndrew Jonesfi
137f9561e8dSConny Seidel
1383df0ccccSAndrew Jones# link lib/asm for the architecture
1393df0ccccSAndrew Jonesrm -f lib/asm
1403df0ccccSAndrew Jonesasm=asm-generic
1413df0ccccSAndrew Jonesif [ -d lib/$arch/asm ]; then
1423df0ccccSAndrew Jones	asm=$arch/asm
1433df0ccccSAndrew Joneselif [ -d lib/$testdir/asm ]; then
1443df0ccccSAndrew Jones	asm=$testdir/asm
1453df0ccccSAndrew Jonesfi
1463df0ccccSAndrew Jonesln -s $asm lib/asm
1473df0ccccSAndrew Jones
1483df0ccccSAndrew Jones# create the config
1497d36db35SAvi Kivitycat <<EOF > config.mak
1507d36db35SAvi KivityPREFIX=$prefix
151c4306560SAlex BennéeHOST=$host
1527d36db35SAvi KivityARCH=$arch
15339ac3f84SAndrew JonesARCH_NAME=$arch_name
1547d36db35SAvi KivityPROCESSOR=$processor
1557d36db35SAvi KivityCC=$cross_prefix$cc
1567d36db35SAvi KivityLD=$cross_prefix$ld
1577d36db35SAvi KivityOBJCOPY=$cross_prefix$objcopy
158de9d141bSAndrew JonesOBJDUMP=$cross_prefix$objdump
1597d36db35SAvi KivityAR=$cross_prefix$ar
160e593c4fdSAndrew JonesADDR2LINE=$cross_prefix$addr2line
161f9561e8dSConny SeidelAPI=$api
162761db0bdSAndrew JonesTEST_DIR=$testdir
1633f8d4194SAndrew JonesFIRMWARE=$firmware
164f1ccf5d2SLaurent VivierENDIAN=$endian
16556c886b0SPeter FeinerPRETTY_PRINT_STACKS=$pretty_print_stacks
166529046c3SAlex BennéeU32_LONG_FMT=$u32_long
1677d36db35SAvi KivityEOF
168