Statistics
| Branch: | Revision:

root / configure @ 67f86e8e

History | View | Annotate | Download (55.4 kB)

1
#!/bin/sh
2
#
3
# qemu configure script (c) 2003 Fabrice Bellard
4
#
5
# set temporary file name
6
if test ! -z "$TMPDIR" ; then
7
    TMPDIR1="${TMPDIR}"
8
elif test ! -z "$TEMPDIR" ; then
9
    TMPDIR1="${TEMPDIR}"
10
else
11
    TMPDIR1="/tmp"
12
fi
13

    
14
TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c"
15
TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o"
16
TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}"
17

    
18
trap "rm -f $TMPC $TMPO $TMPE ; exit" 0 2 3 15
19

    
20
compile_object() {
21
  $cc $QEMU_CFLAGS -c -o $TMPO $TMPC > /dev/null 2> /dev/null
22
}
23

    
24
compile_prog() {
25
  local_cflags="$1"
26
  local_ldflags="$2"
27
  $cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags > /dev/null 2> /dev/null
28
}
29

    
30
# default parameters
31
cpu=""
32
prefix=""
33
interp_prefix="/usr/gnemul/qemu-%M"
34
static="no"
35
sparc_cpu=""
36
cross_prefix=""
37
cc="gcc"
38
audio_drv_list=""
39
audio_card_list="ac97 es1370 sb16"
40
audio_possible_cards="ac97 es1370 sb16 cs4231a adlib gus"
41
host_cc="gcc"
42
ar="ar"
43
make="make"
44
install="install"
45
objcopy="objcopy"
46
ld="ld"
47
helper_cflags=""
48
libs_softmmu=""
49
audio_pt_int=""
50

    
51
# parse CC options first
52
for opt do
53
  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
54
  case "$opt" in
55
  --cross-prefix=*) cross_prefix="$optarg"
56
  ;;
57
  --cc=*) cc="$optarg"
58
  ;;
59
  --cpu=*) cpu="$optarg"
60
  ;;
61
  --extra-cflags=*) QEMU_CFLAGS="$optarg $QEMU_CFLAGS"
62
  ;;
63
  --extra-ldflags=*) LDFLAGS="$optarg $LDFLAGS"
64
  ;;
65
  --sparc_cpu=*)
66
    sparc_cpu="$optarg"
67
    case $sparc_cpu in
68
    v7|v8|v8plus|v8plusa)
69
      cpu="sparc"
70
    ;;
71
    v9)
72
      cpu="sparc64"
73
    ;;
74
    *)
75
      echo "undefined SPARC architecture. Exiting";
76
      exit 1
77
    ;;
78
    esac
79
  ;;
80
  esac
81
done
82
# OS specific
83
# Using uname is really, really broken.  Once we have the right set of checks
84
# we can eliminate it's usage altogether
85

    
86
cc="${cross_prefix}${cc}"
87
ar="${cross_prefix}${ar}"
88
objcopy="${cross_prefix}${objcopy}"
89
ld="${cross_prefix}${ld}"
90

    
91
# check that the C compiler works.
92
cat > $TMPC <<EOF
93
int main(void) {}
94
EOF
95

    
96
if compile_object ; then
97
  : C compiler works ok
98
else
99
    echo "ERROR: \"$cc\" either does not exist or does not work"
100
    exit 1
101
fi
102

    
103
check_define() {
104
cat > $TMPC <<EOF
105
#if !defined($1)
106
#error Not defined
107
#endif
108
int main(void) { return 0; }
109
EOF
110
  compile_object
111
}
112

    
113
if test ! -z "$cpu" ; then
114
  # command line argument
115
  :
116
elif check_define __i386__ ; then
117
  cpu="i386"
118
elif check_define __x86_64__ ; then
119
  cpu="x86_64"
120
elif check_define __sparc__ ; then
121
  # We can't check for 64 bit (when gcc is biarch) or V8PLUSA
122
  # They must be specified using --sparc_cpu
123
  if check_define __arch64__ ; then
124
    cpu="sparc64"
125
  else
126
    cpu="sparc"
127
  fi
128
elif check_define _ARCH_PPC ; then
129
  if check_define _ARCH_PPC64 ; then
130
    cpu="ppc64"
131
  else
132
    cpu="ppc"
133
  fi
134
else
135
  cpu=`uname -m`
136
fi
137

    
138
target_list=""
139
case "$cpu" in
140
  alpha|cris|ia64|m68k|microblaze|mips|mips64|ppc|ppc64|sparc64)
141
    cpu="$cpu"
142
  ;;
143
  i386|i486|i586|i686|i86pc|BePC)
144
    cpu="i386"
145
  ;;
146
  x86_64|amd64)
147
    cpu="x86_64"
148
  ;;
149
  armv*b)
150
    cpu="armv4b"
151
  ;;
152
  armv*l)
153
    cpu="armv4l"
154
  ;;
155
  parisc|parisc64)
156
    cpu="hppa"
157
  ;;
158
  s390*)
159
    cpu="s390"
160
  ;;
161
  sparc|sun4[cdmuv])
162
    cpu="sparc"
163
  ;;
164
  *)
165
    cpu="unknown"
166
  ;;
167
esac
168
brlapi="yes"
169
gprof="no"
170
debug_tcg="no"
171
debug="no"
172
sparse="no"
173
strip_opt="yes"
174
bigendian="no"
175
mingw32="no"
176
EXESUF=""
177
slirp="yes"
178
vde="yes"
179
fmod_lib=""
180
fmod_inc=""
181
oss_lib=""
182
vnc_tls="yes"
183
vnc_sasl="yes"
184
bsd="no"
185
linux="no"
186
solaris="no"
187
kqemu="no"
188
profiler="no"
189
cocoa="no"
190
softmmu="yes"
191
linux_user="no"
192
darwin_user="no"
193
bsd_user="no"
194
guest_base=""
195
build_docs="yes"
196
uname_release=""
197
curses="yes"
198
curl="yes"
199
pthread="yes"
200
aio="yes"
201
io_thread="no"
202
nptl="yes"
203
mixemu="no"
204
bluez="yes"
205
kvm="no"
206
kerneldir=""
207
aix="no"
208
blobs="yes"
209
fdt="yes"
210
sdl="yes"
211
xen="yes"
212
pkgversion=""
213

    
214
# OS specific
215
if check_define __linux__ ; then
216
  targetos="Linux"
217
elif check_define _WIN32 ; then
218
  targetos='MINGW32'
219
elif check_define __OpenBSD__ ; then
220
  targetos='OpenBSD'
221
elif check_define __sun__ ; then
222
  targetos='SunOS'
223
else
224
  targetos=`uname -s`
225
fi
226

    
227
case $targetos in
228
CYGWIN*)
229
  mingw32="yes"
230
  QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
231
  audio_possible_drivers="sdl"
232
;;
233
MINGW32*)
234
  mingw32="yes"
235
  audio_possible_drivers="dsound sdl fmod"
236
;;
237
GNU/kFreeBSD)
238
  audio_drv_list="oss"
239
  audio_possible_drivers="oss sdl esd pa"
240
  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
241
    kqemu="yes"
242
  fi
243
;;
244
FreeBSD)
245
  bsd="yes"
246
  audio_drv_list="oss"
247
  audio_possible_drivers="oss sdl esd pa"
248
  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
249
    kqemu="yes"
250
  fi
251
;;
252
DragonFly)
253
  bsd="yes"
254
  audio_drv_list="oss"
255
  audio_possible_drivers="oss sdl esd pa"
256
  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
257
    kqemu="yes"
258
  fi
259
  aio="no"
260
;;
261
NetBSD)
262
  bsd="yes"
263
  audio_drv_list="oss"
264
  audio_possible_drivers="oss sdl esd"
265
  oss_lib="-lossaudio"
266
;;
267
OpenBSD)
268
  bsd="yes"
269
  audio_drv_list="oss"
270
  audio_possible_drivers="oss sdl esd"
271
  oss_lib="-lossaudio"
272
;;
273
Darwin)
274
  bsd="yes"
275
  darwin="yes"
276
  # on Leopard most of the system is 32-bit, so we have to ask the kernel it if we can
277
  # run 64-bit userspace code
278
  if [ "$cpu" = "i386" ] ; then
279
    is_x86_64=`sysctl -n hw.optional.x86_64`
280
    [ "$is_x86_64" = "1" ] && cpu=x86_64
281
  fi
282
  if [ "$cpu" = "x86_64" ] ; then
283
    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
284
    LDFLAGS="-arch x86_64 $LDFLAGS"
285
  else
286
    QEMU_CFLAGS="-mdynamic-no-pic $QEMU_CFLAGS"
287
  fi
288
  darwin_user="yes"
289
  cocoa="yes"
290
  audio_drv_list="coreaudio"
291
  audio_possible_drivers="coreaudio sdl fmod"
292
  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
293
;;
294
SunOS)
295
  solaris="yes"
296
  make="gmake"
297
  install="ginstall"
298
  needs_libsunmath="no"
299
  solarisrev=`uname -r | cut -f2 -d.`
300
  # have to select again, because `uname -m` returns i86pc
301
  # even on an x86_64 box.
302
  solariscpu=`isainfo -k`
303
  if test "${solariscpu}" = "amd64" ; then
304
    cpu="x86_64"
305
  fi
306
  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
307
    if test "$solarisrev" -le 9 ; then
308
      if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
309
        needs_libsunmath="yes"
310
      else
311
        echo "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without"
312
        echo "libsunmath from the Sun Studio compilers tools, due to a lack of"
313
        echo "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86"
314
        echo "Studio 11 can be downloaded from www.sun.com."
315
        exit 1
316
      fi
317
    fi
318
    if test "$solarisrev" -ge 9 ; then
319
      kqemu="yes"
320
    fi
321
  fi
322
  if test -f /usr/include/sys/soundcard.h ; then
323
    audio_drv_list="oss"
324
  fi
325
  audio_possible_drivers="oss sdl"
326
  QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
327
  LIBS="-lsocket -lnsl -lresolv $LIBS"
328
;;
329
AIX)
330
  aix="yes"
331
  make="gmake"
332
;;
333
*)
334
  audio_drv_list="oss"
335
  audio_possible_drivers="oss alsa sdl esd pa"
336
  linux="yes"
337
  linux_user="yes"
338
  usb="linux"
339
  kvm="yes"
340
  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
341
    kqemu="yes"
342
    audio_possible_drivers="$audio_possible_drivers fmod"
343
  fi
344
;;
345
esac
346

    
347
if [ "$bsd" = "yes" ] ; then
348
  if [ "$darwin" != "yes" ] ; then
349
    make="gmake"
350
    usb="bsd"
351
  fi
352
  bsd_user="yes"
353
fi
354

    
355
if test "$mingw32" = "yes" ; then
356
  if [ "$cpu" = "i386" ] ; then
357
    kqemu="yes"
358
  fi
359
  EXESUF=".exe"
360
  QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
361
  LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
362
fi
363

    
364
# find source path
365
source_path=`dirname "$0"`
366
source_path_used="no"
367
workdir=`pwd`
368
if [ -z "$source_path" ]; then
369
    source_path=$workdir
370
else
371
    source_path=`cd "$source_path"; pwd`
372
fi
373
[ -f "$workdir/vl.c" ] || source_path_used="yes"
374

    
375
werror=""
376

    
377
for opt do
378
  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
379
  case "$opt" in
380
  --help|-h) show_help=yes
381
  ;;
382
  --prefix=*) prefix="$optarg"
383
  ;;
384
  --interp-prefix=*) interp_prefix="$optarg"
385
  ;;
386
  --source-path=*) source_path="$optarg"
387
  source_path_used="yes"
388
  ;;
389
  --cross-prefix=*)
390
  ;;
391
  --cc=*)
392
  ;;
393
  --host-cc=*) host_cc="$optarg"
394
  ;;
395
  --make=*) make="$optarg"
396
  ;;
397
  --install=*) install="$optarg"
398
  ;;
399
  --extra-cflags=*)
400
  ;;
401
  --extra-ldflags=*)
402
  ;;
403
  --cpu=*)
404
  ;;
405
  --target-list=*) target_list="$optarg"
406
  ;;
407
  --enable-gprof) gprof="yes"
408
  ;;
409
  --static) static="yes"
410
  ;;
411
  --disable-sdl) sdl="no"
412
  ;;
413
  --fmod-lib=*) fmod_lib="$optarg"
414
  ;;
415
  --fmod-inc=*) fmod_inc="$optarg"
416
  ;;
417
  --oss-lib=*) oss_lib="$optarg"
418
  ;;
419
  --audio-card-list=*) audio_card_list=`echo "$optarg" | sed -e 's/,/ /g'`
420
  ;;
421
  --audio-drv-list=*) audio_drv_list="$optarg"
422
  ;;
423
  --enable-debug-tcg) debug_tcg="yes"
424
  ;;
425
  --disable-debug-tcg) debug_tcg="no"
426
  ;;
427
  --enable-debug)
428
      # Enable debugging options that aren't excessively noisy
429
      debug_tcg="yes"
430
      debug="yes"
431
      strip_opt="no"
432
  ;;
433
  --enable-sparse) sparse="yes"
434
  ;;
435
  --disable-sparse) sparse="no"
436
  ;;
437
  --disable-strip) strip_opt="no"
438
  ;;
439
  --disable-vnc-tls) vnc_tls="no"
440
  ;;
441
  --disable-vnc-sasl) vnc_sasl="no"
442
  ;;
443
  --disable-slirp) slirp="no"
444
  ;;
445
  --disable-vde) vde="no"
446
  ;;
447
  --disable-kqemu) kqemu="no"
448
  ;;
449
  --disable-xen) xen="no"
450
  ;;
451
  --disable-brlapi) brlapi="no"
452
  ;;
453
  --disable-bluez) bluez="no"
454
  ;;
455
  --disable-kvm) kvm="no"
456
  ;;
457
  --enable-profiler) profiler="yes"
458
  ;;
459
  --enable-cocoa)
460
      cocoa="yes" ;
461
      sdl="no" ;
462
      audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
463
  ;;
464
  --disable-system) softmmu="no"
465
  ;;
466
  --enable-system) softmmu="yes"
467
  ;;
468
  --disable-linux-user) linux_user="no"
469
  ;;
470
  --enable-linux-user) linux_user="yes"
471
  ;;
472
  --disable-darwin-user) darwin_user="no"
473
  ;;
474
  --enable-darwin-user) darwin_user="yes"
475
  ;;
476
  --disable-bsd-user) bsd_user="no"
477
  ;;
478
  --enable-bsd-user) bsd_user="yes"
479
  ;;
480
  --enable-guest-base) guest_base="yes"
481
  ;;
482
  --disable-guest-base) guest_base="no"
483
  ;;
484
  --enable-uname-release=*) uname_release="$optarg"
485
  ;;
486
  --sparc_cpu=*)
487
  ;;
488
  --enable-werror) werror="yes"
489
  ;;
490
  --disable-werror) werror="no"
491
  ;;
492
  --disable-curses) curses="no"
493
  ;;
494
  --disable-curl) curl="no"
495
  ;;
496
  --disable-nptl) nptl="no"
497
  ;;
498
  --enable-mixemu) mixemu="yes"
499
  ;;
500
  --disable-pthread) pthread="no"
501
  ;;
502
  --disable-aio) aio="no"
503
  ;;
504
  --enable-io-thread) io_thread="yes"
505
  ;;
506
  --disable-blobs) blobs="no"
507
  ;;
508
  --kerneldir=*) kerneldir="$optarg"
509
  ;;
510
  --with-pkgversion=*) pkgversion=" ($optarg)"
511
  ;;
512
  --disable-docs) build_docs="no"
513
  ;;
514
  *) echo "ERROR: unknown option $opt"; show_help="yes"
515
  ;;
516
  esac
517
done
518

    
519
#
520
# If cpu ~= sparc and  sparc_cpu hasn't been defined, plug in the right
521
# QEMU_CFLAGS/LDFLAGS (assume sparc_v8plus for 32-bit and sparc_v9 for 64-bit)
522
#
523
host_guest_base="no"
524
case "$cpu" in
525
    sparc) case $sparc_cpu in
526
           v7|v8)
527
             QEMU_CFLAGS="-mcpu=${sparc_cpu} -D__sparc_${sparc_cpu}__ $QEMU_CFLAGS"
528
           ;;
529
           v8plus|v8plusa)
530
             QEMU_CFLAGS="-mcpu=ultrasparc -D__sparc_${sparc_cpu}__ $QEMU_CFLAGS"
531
           ;;
532
           *) # sparc_cpu not defined in the command line
533
             QEMU_CFLAGS="-mcpu=ultrasparc -D__sparc_v8plus__ $QEMU_CFLAGS"
534
           esac
535
           LDFLAGS="-m32 $LDFLAGS"
536
           QEMU_CFLAGS="-m32 -ffixed-g2 -ffixed-g3 $QEMU_CFLAGS"
537
           if test "$solaris" = "no" ; then
538
             QEMU_CFLAGS="-ffixed-g1 -ffixed-g6 $QEMU_CFLAGS"
539
             helper_cflags="-ffixed-i0"
540
           fi
541
           ;;
542
    sparc64)
543
           QEMU_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_v9__ $QEMU_CFLAGS"
544
           LDFLAGS="-m64 $LDFLAGS"
545
           QEMU_CFLAGS="-ffixed-g5 -ffixed-g6 -ffixed-g7 $QEMU_CFLAGS"
546
           if test "$solaris" != "no" ; then
547
             QEMU_CFLAGS="-ffixed-g1 $QEMU_CFLAGS"
548
           fi
549
           ;;
550
    s390)
551
           QEMU_CFLAGS="-march=z900 $QEMU_CFLAGS"
552
           ;;
553
    i386)
554
           QEMU_CFLAGS="-m32 $QEMU_CFLAGS"
555
           LDFLAGS="-m32 $LDFLAGS"
556
           helper_cflags="-fomit-frame-pointer"
557
           host_guest_base="yes"
558
           ;;
559
    x86_64)
560
           QEMU_CFLAGS="-m64 $QEMU_CFLAGS"
561
           LDFLAGS="-m64 $LDFLAGS"
562
           host_guest_base="yes"
563
           ;;
564
    arm*)
565
           host_guest_base="yes"
566
           ;;
567
    ppc*)
568
           host_guest_base="yes"
569
           ;;
570
esac
571

    
572
[ -z "$guest_base" ] && guest_base="$host_guest_base"
573

    
574
if test x"$show_help" = x"yes" ; then
575
cat << EOF
576

    
577
Usage: configure [options]
578
Options: [defaults in brackets after descriptions]
579

    
580
EOF
581
echo "Standard options:"
582
echo "  --help                   print this message"
583
echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
584
echo "  --interp-prefix=PREFIX   where to find shared libraries, etc."
585
echo "                           use %M for cpu name [$interp_prefix]"
586
echo "  --target-list=LIST       set target list [$target_list]"
587
echo ""
588
echo "kqemu kernel acceleration support:"
589
echo "  --disable-kqemu          disable kqemu support"
590
echo ""
591
echo "Advanced options (experts only):"
592
echo "  --source-path=PATH       path of source code [$source_path]"
593
echo "  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]"
594
echo "  --cc=CC                  use C compiler CC [$cc]"
595
echo "  --host-cc=CC             use C compiler CC [$host_cc] for dyngen etc."
596
echo "  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS"
597
echo "  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS"
598
echo "  --make=MAKE              use specified make [$make]"
599
echo "  --install=INSTALL        use specified install [$install]"
600
echo "  --static                 enable static build [$static]"
601
echo "  --enable-debug-tcg       enable TCG debugging"
602
echo "  --disable-debug-tcg      disable TCG debugging (default)"
603
echo "  --enable-debug           enable common debug build options"
604
echo "  --enable-sparse          enable sparse checker"
605
echo "  --disable-sparse         disable sparse checker (default)"
606
echo "  --disable-strip          disable stripping binaries"
607
echo "  --disable-werror         disable compilation abort on warning"
608
echo "  --disable-sdl            disable SDL"
609
echo "  --enable-cocoa           enable COCOA (Mac OS X only)"
610
echo "  --audio-drv-list=LIST    set audio drivers list:"
611
echo "                           Available drivers: $audio_possible_drivers"
612
echo "  --audio-card-list=LIST   set list of emulated audio cards [$audio_card_list]"
613
echo "                           Available cards: $audio_possible_cards"
614
echo "  --enable-mixemu          enable mixer emulation"
615
echo "  --disable-xen            disable xen backend driver support"
616
echo "  --disable-brlapi         disable BrlAPI"
617
echo "  --disable-vnc-tls        disable TLS encryption for VNC server"
618
echo "  --disable-vnc-sasl       disable SASL encryption for VNC server"
619
echo "  --disable-curses         disable curses output"
620
echo "  --disable-curl           disable curl connectivity"
621
echo "  --disable-bluez          disable bluez stack connectivity"
622
echo "  --disable-kvm            disable KVM acceleration support"
623
echo "  --disable-nptl           disable usermode NPTL support"
624
echo "  --enable-system          enable all system emulation targets"
625
echo "  --disable-system         disable all system emulation targets"
626
echo "  --enable-linux-user      enable all linux usermode emulation targets"
627
echo "  --disable-linux-user     disable all linux usermode emulation targets"
628
echo "  --enable-darwin-user     enable all darwin usermode emulation targets"
629
echo "  --disable-darwin-user    disable all darwin usermode emulation targets"
630
echo "  --enable-bsd-user        enable all BSD usermode emulation targets"
631
echo "  --disable-bsd-user       disable all BSD usermode emulation targets"
632
echo "  --enable-guest-base      enable GUEST_BASE support for usermode"
633
echo "                           emulation targets"
634
echo "  --disable-guest-base     disable GUEST_BASE support"
635
echo "  --fmod-lib               path to FMOD library"
636
echo "  --fmod-inc               path to FMOD includes"
637
echo "  --oss-lib                path to OSS library"
638
echo "  --enable-uname-release=R Return R for uname -r in usermode emulation"
639
echo "  --sparc_cpu=V            Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9"
640
echo "  --disable-vde            disable support for vde network"
641
echo "  --disable-pthread        disable pthread support"
642
echo "  --disable-aio            disable AIO support"
643
echo "  --enable-io-thread       enable IO thread"
644
echo "  --disable-blobs          disable installing provided firmware blobs"
645
echo "  --kerneldir=PATH         look for kernel includes in PATH"
646
echo ""
647
echo "NOTE: The object files are built at the place where configure is launched"
648
exit 1
649
fi
650

    
651
if test ! -x "$(which cgcc 2>/dev/null)"; then
652
    sparse="no"
653
fi
654

    
655
#
656
# Solaris specific configure tool chain decisions
657
#
658
if test "$solaris" = "yes" ; then
659
  solinst=`which $install 2> /dev/null | /usr/bin/grep -v "no $install in"`
660
  if test -z "$solinst" ; then
661
    echo "Solaris install program not found. Use --install=/usr/ucb/install or"
662
    echo "install fileutils from www.blastwave.org using pkg-get -i fileutils"
663
    echo "to get ginstall which is used by default (which lives in /opt/csw/bin)"
664
    exit 1
665
  fi
666
  if test "$solinst" = "/usr/sbin/install" ; then
667
    echo "Error: Solaris /usr/sbin/install is not an appropriate install program."
668
    echo "try ginstall from the GNU fileutils available from www.blastwave.org"
669
    echo "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
670
    exit 1
671
  fi
672
  sol_ar=`which ar 2> /dev/null | /usr/bin/grep -v "no ar in"`
673
  if test -z "$sol_ar" ; then
674
    echo "Error: No path includes ar"
675
    if test -f /usr/ccs/bin/ar ; then
676
      echo "Add /usr/ccs/bin to your path and rerun configure"
677
    fi
678
    exit 1
679
  fi
680
fi
681

    
682

    
683
if test -z "$target_list" ; then
684
# these targets are portable
685
    if [ "$softmmu" = "yes" ] ; then
686
        target_list="\
687
i386-softmmu \
688
x86_64-softmmu \
689
arm-softmmu \
690
cris-softmmu \
691
m68k-softmmu \
692
microblaze-softmmu \
693
mips-softmmu \
694
mipsel-softmmu \
695
mips64-softmmu \
696
mips64el-softmmu \
697
ppc-softmmu \
698
ppcemb-softmmu \
699
ppc64-softmmu \
700
sh4-softmmu \
701
sh4eb-softmmu \
702
sparc-softmmu \
703
sparc64-softmmu \
704
"
705
    fi
706
# the following are Linux specific
707
    if [ "$linux_user" = "yes" ] ; then
708
        target_list="${target_list}\
709
i386-linux-user \
710
x86_64-linux-user \
711
alpha-linux-user \
712
arm-linux-user \
713
armeb-linux-user \
714
cris-linux-user \
715
m68k-linux-user \
716
microblaze-linux-user \
717
mips-linux-user \
718
mipsel-linux-user \
719
ppc-linux-user \
720
ppc64-linux-user \
721
ppc64abi32-linux-user \
722
sh4-linux-user \
723
sh4eb-linux-user \
724
sparc-linux-user \
725
sparc64-linux-user \
726
sparc32plus-linux-user \
727
"
728
    fi
729
# the following are Darwin specific
730
    if [ "$darwin_user" = "yes" ] ; then
731
        target_list="$target_list i386-darwin-user ppc-darwin-user "
732
    fi
733
# the following are BSD specific
734
    if [ "$bsd_user" = "yes" ] ; then
735
        target_list="${target_list}\
736
i386-bsd-user \
737
x86_64-bsd-user \
738
sparc-bsd-user \
739
sparc64-bsd-user \
740
"
741
    fi
742
else
743
    target_list=`echo "$target_list" | sed -e 's/,/ /g'`
744
fi
745
if test -z "$target_list" ; then
746
    echo "No targets enabled"
747
    exit 1
748
fi
749

    
750
if test -z "$cross_prefix" ; then
751

    
752
# ---
753
# big/little endian test
754
cat > $TMPC << EOF
755
#include <inttypes.h>
756
int main(int argc, char ** argv){
757
        volatile uint32_t i=0x01234567;
758
        return (*((uint8_t*)(&i))) == 0x67;
759
}
760
EOF
761

    
762
if compile_prog "" "" ; then
763
$TMPE && bigendian="yes"
764
else
765
echo big/little test failed
766
fi
767

    
768
else
769

    
770
# if cross compiling, cannot launch a program, so make a static guess
771
case "$cpu" in
772
  armv4b|hppa|m68k|mips|mips64|ppc|ppc64|s390|sparc|sparc64)
773
    bigendian=yes
774
  ;;
775
esac
776

    
777
fi
778

    
779
# host long bits test
780
hostlongbits="32"
781
case "$cpu" in
782
  x86_64|alpha|ia64|sparc64|ppc64)
783
    hostlongbits=64
784
  ;;
785
esac
786

    
787
# Check host NPTL support
788
cat > $TMPC <<EOF
789
#include <sched.h>
790
#include <linux/futex.h>
791
void foo()
792
{
793
#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
794
#error bork
795
#endif
796
}
797
EOF
798

    
799
if compile_object ; then
800
  :
801
else
802
   nptl="no"
803
fi
804

    
805
##########################################
806
# zlib check
807

    
808
cat > $TMPC << EOF
809
#include <zlib.h>
810
int main(void) { zlibVersion(); return 0; }
811
EOF
812
if compile_prog "" "-lz" ; then
813
    :
814
else
815
    echo
816
    echo "Error: zlib check failed"
817
    echo "Make sure to have the zlib libs and headers installed."
818
    echo
819
    exit 1
820
fi
821

    
822
##########################################
823
# xen probe
824

    
825
if test "$xen" = "yes" ; then
826
  xen_libs="-lxenstore -lxenctrl -lxenguest"
827
  cat > $TMPC <<EOF
828
#include <xenctrl.h>
829
#include <xs.h>
830
int main(void) { xs_daemon_open(); xc_interface_open(); return 0; }
831
EOF
832
  if compile_prog "" "$xen_libs" ; then
833
    libs_softmmu="$xen_libs $libs_softmmu"
834
  else
835
    xen="no"
836
  fi
837
fi
838

    
839
##########################################
840
# SDL probe
841

    
842
sdl_too_old=no
843

    
844
if test "$sdl" = "yes" ; then
845
  sdl=no
846
  cat > $TMPC << EOF
847
#include <SDL.h>
848
#undef main /* We don't want SDL to override our main() */
849
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
850
EOF
851
  sdl_cflags=`sdl-config --cflags 2> /dev/null`
852
  sdl_libs=`sdl-config --libs 2> /dev/null`
853
  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
854
    _sdlversion=`sdl-config --version | sed 's/[^0-9]//g'`
855
    if test "$_sdlversion" -lt 121 ; then
856
      sdl_too_old=yes
857
    else
858
      if test "$cocoa" = "no" ; then
859
        sdl=yes
860
      fi
861
    fi
862

    
863
    # static link with sdl ?
864
    if test "$sdl" = "yes" -a "$static" = "yes" ; then
865
      sdl_libs=`sdl-config --static-libs 2>/dev/null`
866
      if test `sdl-config --static-libs 2>/dev/null | grep \\\-laa > /dev/null` ; then
867
         sdl_libs="$sdl_libs `aalib-config --static-libs >2 /dev/null`"
868
         sdl_cflags="$sd_cflags `aalib-config --cflags >2 /dev/null`"
869
      fi
870
      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
871
	:
872
      else
873
        sdl=no
874
      fi
875
    fi # static link
876
  fi # sdl compile test
877
fi
878

    
879
if test "$sdl" = "yes" ; then
880
  cat > $TMPC <<EOF
881
#include <SDL.h>
882
#if defined(SDL_VIDEO_DRIVER_X11)
883
#include <X11/XKBlib.h>
884
#else
885
#error No x11 support
886
#endif
887
int main(void) { return 0; }
888
EOF
889
  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
890
    sdl_libs="$sdl_libs -lX11"
891
  fi
892
  if test "$mingw32" = "yes" ; then
893
    sdl_libs="`echo $sdl_libs | sed s/-mwindows//g` -mconsole"
894
  fi
895
  libs_softmmu="$sdl_libs $libs_softmmu"
896
fi
897

    
898
##########################################
899
# VNC TLS detection
900
if test "$vnc_tls" = "yes" ; then
901
cat > $TMPC <<EOF
902
#include <gnutls/gnutls.h>
903
int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
904
EOF
905
    vnc_tls_cflags=`pkg-config --cflags gnutls 2> /dev/null`
906
    vnc_tls_libs=`pkg-config --libs gnutls 2> /dev/null`
907
    if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
908
	libs_softmmu="$vnc_tls_libs $libs_softmmu"
909
    else
910
	vnc_tls="no"
911
    fi
912
fi
913

    
914
##########################################
915
# VNC SASL detection
916
if test "$vnc_sasl" = "yes" ; then
917
cat > $TMPC <<EOF
918
#include <sasl/sasl.h>
919
#include <stdio.h>
920
int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
921
EOF
922
    # Assuming Cyrus-SASL installed in /usr prefix
923
    vnc_sasl_cflags=""
924
    vnc_sasl_libs="-lsasl2"
925
    if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
926
	libs_softmmu="$vnc_sasl_libs $libs_softmmu"
927
    else
928
	vnc_sasl="no"
929
    fi
930
fi
931

    
932
##########################################
933
# fnmatch() probe, used for ACL routines
934
fnmatch="no"
935
cat > $TMPC << EOF
936
#include <fnmatch.h>
937
int main(void)
938
{
939
    fnmatch("foo", "foo", 0);
940
    return 0;
941
}
942
EOF
943
if compile_prog "" "" ; then
944
   fnmatch="yes"
945
fi
946

    
947
##########################################
948
# vde libraries probe
949
if test "$vde" = "yes" ; then
950
  vde=no
951
  vde_libs="-lvdeplug"
952
  cat > $TMPC << EOF
953
#include <libvdeplug.h>
954
int main(void)
955
{
956
    struct vde_open_args a = {0, 0, 0};
957
    vde_open("", "", &a);
958
    return 0;
959
}
960
EOF
961
  if compile_prog "" "$vde_libs" ; then
962
    vde=yes
963
  fi
964
fi
965

    
966
##########################################
967
# Sound support libraries probe
968

    
969
audio_drv_probe()
970
{
971
    drv=$1
972
    hdr=$2
973
    lib=$3
974
    exp=$4
975
    cfl=$5
976
        cat > $TMPC << EOF
977
#include <$hdr>
978
int main(void) { $exp }
979
EOF
980
    if compile_prog "$cfl" "$lib" ; then
981
        :
982
    else
983
        echo
984
        echo "Error: $drv check failed"
985
        echo "Make sure to have the $drv libs and headers installed."
986
        echo
987
        exit 1
988
    fi
989
}
990

    
991
audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
992
for drv in $audio_drv_list; do
993
    case $drv in
994
    alsa)
995
    audio_drv_probe $drv alsa/asoundlib.h -lasound \
996
        "snd_pcm_t **handle; return snd_pcm_close(*handle);"
997
    libs_softmmu="-lasound $libs_softmmu"
998
    ;;
999

    
1000
    fmod)
1001
    if test -z $fmod_lib || test -z $fmod_inc; then
1002
        echo
1003
        echo "Error: You must specify path to FMOD library and headers"
1004
        echo "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so"
1005
        echo
1006
        exit 1
1007
    fi
1008
    audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc"
1009
    libs_softmmu="$fmod_lib $libs_softmmu"
1010
    ;;
1011

    
1012
    esd)
1013
    audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);'
1014
    libs_softmmu="-lesd $libs_softmmu"
1015
    audio_pt_int="yes"
1016
    ;;
1017

    
1018
    pa)
1019
    audio_drv_probe $drv pulse/simple.h -lpulse-simple \
1020
        "pa_simple *s = NULL; pa_simple_free(s); return 0;"
1021
    libs_softmmu="-lpulse-simple $libs_softmmu"
1022
    audio_pt_int="yes"
1023
    ;;
1024

    
1025
    coreaudio)
1026
      libs_softmmu="-framework CoreAudio $libs_softmmu"
1027
    ;;
1028

    
1029
    dsound)
1030
      libs_softmmu="-lole32 -ldxguid $libs_softmmu"
1031
    ;;
1032

    
1033
    oss)
1034
      libs_softmmu="$oss_lib $libs_softmmu"
1035
    ;;
1036

    
1037
    sdl|wav)
1038
    # XXX: Probes for CoreAudio, DirectSound, SDL(?)
1039
    ;;
1040

    
1041
    *)
1042
    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
1043
        echo
1044
        echo "Error: Unknown driver '$drv' selected"
1045
        echo "Possible drivers are: $audio_possible_drivers"
1046
        echo
1047
        exit 1
1048
    }
1049
    ;;
1050
    esac
1051
done
1052

    
1053
##########################################
1054
# BrlAPI probe
1055

    
1056
if test "$brlapi" = "yes" ; then
1057
  brlapi=no
1058
  brlapi_libs="-lbrlapi"
1059
  cat > $TMPC << EOF
1060
#include <brlapi.h>
1061
int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
1062
EOF
1063
  if compile_prog "" "$brlapi_libs" ; then
1064
    brlapi=yes
1065
    libs_softmmu="$brlapi_libs $libs_softmmu"
1066
  fi
1067
fi
1068

    
1069
##########################################
1070
# curses probe
1071

    
1072
if test "$curses" = "yes" ; then
1073
  cat > $TMPC << EOF
1074
#include <curses.h>
1075
#ifdef __OpenBSD__
1076
#define resize_term resizeterm
1077
#endif
1078
int main(void) { resize_term(0, 0); return curses_version(); }
1079
EOF
1080
  if compile_prog "" "-lncurses" ; then
1081
    libs_softmmu="-lncurses $libs_softmmu"
1082
  elif compile_prog "" "-lcurses" ; then
1083
    libs_softmmu="-lcurses $libs_softmmu"
1084
  else
1085
    curses=no
1086
  fi
1087
fi # test "$curses"
1088

    
1089
##########################################
1090
# curl probe
1091

    
1092
if test "$curl" = "yes" ; then
1093
  curl=no
1094
  cat > $TMPC << EOF
1095
#include <curl/curl.h>
1096
int main(void) { return curl_easy_init(); }
1097
EOF
1098
  curl_cflags=`curl-config --cflags 2>/dev/null`
1099
  curl_libs=`curl-config --libs 2>/dev/null`
1100
  if compile_prog "$curl_cflags" "$curl_libs" ; then
1101
    curl=yes
1102
  fi
1103
fi # test "$curl"
1104

    
1105
##########################################
1106
# bluez support probe
1107
if test "$bluez" = "yes" ; then
1108
  `pkg-config bluez 2> /dev/null` || bluez="no"
1109
fi
1110
if test "$bluez" = "yes" ; then
1111
  cat > $TMPC << EOF
1112
#include <bluetooth/bluetooth.h>
1113
int main(void) { return bt_error(0); }
1114
EOF
1115
  bluez_cflags=`pkg-config --cflags bluez 2> /dev/null`
1116
  bluez_libs=`pkg-config --libs bluez 2> /dev/null`
1117
  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
1118
    libs_softmmu="$bluez_libs $libs_softmmu"
1119
  else
1120
    bluez="no"
1121
  fi
1122
fi
1123

    
1124
##########################################
1125
# kvm probe
1126
if test "$kvm" = "yes" ; then
1127
    cat > $TMPC <<EOF
1128
#include <linux/kvm.h>
1129
#if !defined(KVM_API_VERSION) || KVM_API_VERSION < 12 || KVM_API_VERSION > 12
1130
#error Invalid KVM version
1131
#endif
1132
#if !defined(KVM_CAP_USER_MEMORY)
1133
#error Missing KVM capability KVM_CAP_USER_MEMORY
1134
#endif
1135
#if !defined(KVM_CAP_SET_TSS_ADDR)
1136
#error Missing KVM capability KVM_CAP_SET_TSS_ADDR
1137
#endif
1138
#if !defined(KVM_CAP_DESTROY_MEMORY_REGION_WORKS)
1139
#error Missing KVM capability KVM_CAP_DESTROY_MEMORY_REGION_WORKS
1140
#endif
1141
int main(void) { return 0; }
1142
EOF
1143
  if test "$kerneldir" != "" ; then
1144
      kvm_cflags=-I"$kerneldir"/include
1145
      if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) \
1146
         -a -d "$kerneldir/arch/x86/include" ; then
1147
            kvm_cflags="$kvm_cflags -I$kerneldir/arch/x86/include"
1148
	elif test "$cpu" = "ppc" -a -d "$kerneldir/arch/powerpc/include" ; then
1149
	    kvm_cflags="$kvm_cflags -I$kerneldir/arch/powerpc/include"
1150
        elif test -d "$kerneldir/arch/$cpu/include" ; then
1151
            kvm_cflags="$kvm_cflags -I$kerneldir/arch/$cpu/include"
1152
      fi
1153
  else
1154
      kvm_cflags=""
1155
  fi
1156
  if compile_prog "$kvm_cflags" "" ; then
1157
    :
1158
  else
1159
    kvm="no";
1160
    if [ -x "`which awk 2>/dev/null`" ] && \
1161
       [ -x "`which grep 2>/dev/null`" ]; then
1162
      kvmerr=`LANG=C $cc $QEMU_CFLAGS -o $TMPE $kvm_cflags $TMPC 2>&1 \
1163
	| grep "error: " \
1164
	| awk -F "error: " '{if (NR>1) printf(", "); printf("%s",$2);}'`
1165
      if test "$kvmerr" != "" ; then
1166
        kvm="no - (${kvmerr})\n\
1167
    NOTE: To enable KVM support, update your kernel to 2.6.29+ or install \
1168
recent kvm-kmod from http://sourceforge.net/projects/kvm."
1169
      fi
1170
    fi
1171
  fi
1172
fi
1173

    
1174
##########################################
1175
# pthread probe
1176
PTHREADLIBS_LIST="-lpthread -lpthreadGC2"
1177

    
1178
if test "$pthread" = yes; then
1179
  pthread=no
1180
cat > $TMPC << EOF
1181
#include <pthread.h>
1182
int main(void) { pthread_create(0,0,0,0); return 0; }
1183
EOF
1184
  for pthread_lib in $PTHREADLIBS_LIST; do
1185
    if compile_prog "" "$pthread_lib" ; then
1186
      pthread=yes
1187
      LIBS="$pthread_lib $LIBS"
1188
      break
1189
    fi
1190
  done
1191
fi
1192

    
1193
if test "$pthread" = no; then
1194
   aio=no
1195
   io_thread=no
1196
fi
1197

    
1198
##########################################
1199
# iovec probe
1200
cat > $TMPC <<EOF
1201
#include <sys/types.h>
1202
#include <sys/uio.h>
1203
#include <unistd.h>
1204
int main(void) { struct iovec iov; return 0; }
1205
EOF
1206
iovec=no
1207
if compile_prog "" "" ; then
1208
  iovec=yes
1209
fi
1210

    
1211
##########################################
1212
# preadv probe
1213
cat > $TMPC <<EOF
1214
#include <sys/types.h>
1215
#include <sys/uio.h>
1216
#include <unistd.h>
1217
int main(void) { preadv; }
1218
EOF
1219
preadv=no
1220
if compile_prog "" "" ; then
1221
  preadv=yes
1222
fi
1223

    
1224
##########################################
1225
# fdt probe
1226
if test "$fdt" = "yes" ; then
1227
  fdt=no
1228
  fdt_libs="-lfdt"
1229
  cat > $TMPC << EOF
1230
int main(void) { return 0; }
1231
EOF
1232
  if compile_prog "" "$fdt_libs" ; then
1233
    fdt=yes
1234
    libs_softmmu="$fdt_libs $libs_softmmu"
1235
  fi
1236
fi
1237

    
1238
#
1239
# Check for xxxat() functions when we are building linux-user
1240
# emulator.  This is done because older glibc versions don't
1241
# have syscall stubs for these implemented.
1242
#
1243
atfile=no
1244
cat > $TMPC << EOF
1245
#define _ATFILE_SOURCE
1246
#include <sys/types.h>
1247
#include <fcntl.h>
1248
#include <unistd.h>
1249

    
1250
int
1251
main(void)
1252
{
1253
	/* try to unlink nonexisting file */
1254
	return (unlinkat(AT_FDCWD, "nonexistent_file", 0));
1255
}
1256
EOF
1257
if compile_prog "" "" ; then
1258
  atfile=yes
1259
fi
1260

    
1261
# Check for inotify functions when we are building linux-user
1262
# emulator.  This is done because older glibc versions don't
1263
# have syscall stubs for these implemented.  In that case we
1264
# don't provide them even if kernel supports them.
1265
#
1266
inotify=no
1267
cat > $TMPC << EOF
1268
#include <sys/inotify.h>
1269

    
1270
int
1271
main(void)
1272
{
1273
	/* try to start inotify */
1274
	return inotify_init();
1275
}
1276
EOF
1277
if compile_prog "" "" ; then
1278
  inotify=yes
1279
fi
1280

    
1281
# check if utimensat and futimens are supported
1282
utimens=no
1283
cat > $TMPC << EOF
1284
#define _ATFILE_SOURCE
1285
#define _GNU_SOURCE
1286
#include <stddef.h>
1287
#include <fcntl.h>
1288

    
1289
int main(void)
1290
{
1291
    utimensat(AT_FDCWD, "foo", NULL, 0);
1292
    futimens(0, NULL);
1293
    return 0;
1294
}
1295
EOF
1296
if compile_prog "" "" ; then
1297
  utimens=yes
1298
fi
1299

    
1300
# check if pipe2 is there
1301
pipe2=no
1302
cat > $TMPC << EOF
1303
#define _GNU_SOURCE
1304
#include <unistd.h>
1305
#include <fcntl.h>
1306

    
1307
int main(void)
1308
{
1309
    int pipefd[2];
1310
    pipe2(pipefd, O_CLOEXEC);
1311
    return 0;
1312
}
1313
EOF
1314
if compile_prog "" "" ; then
1315
  pipe2=yes
1316
fi
1317

    
1318
# check if tee/splice is there. vmsplice was added same time.
1319
splice=no
1320
cat > $TMPC << EOF
1321
#define _GNU_SOURCE
1322
#include <unistd.h>
1323
#include <fcntl.h>
1324
#include <limits.h>
1325

    
1326
int main(void)
1327
{
1328
    int len, fd;
1329
    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
1330
    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
1331
    return 0;
1332
}
1333
EOF
1334
if compile_prog "" "" ; then
1335
  splice=yes
1336
fi
1337

    
1338
# Check if tools are available to build documentation.
1339
if test "$build_docs" = "yes" -a \( ! -x "`which texi2html 2>/dev/null`" -o ! -x "`which pod2man 2>/dev/null`" \) ; then
1340
  build_docs="no"
1341
fi
1342

    
1343
# Search for bsawp_32 function
1344
byteswap_h=no
1345
cat > $TMPC << EOF
1346
#include <byteswap.h>
1347
int main(void) { return bswap_32(0); }
1348
EOF
1349
if compile_prog "" "" ; then
1350
  byteswap_h=yes
1351
fi
1352

    
1353
# Search for bsawp_32 function
1354
bswap_h=no
1355
cat > $TMPC << EOF
1356
#include <sys/endian.h>
1357
#include <sys/types.h>
1358
#include <machine/bswap.h>
1359
int main(void) { return bswap32(0); }
1360
EOF
1361
if compile_prog "" "" ; then
1362
  bswap_h=yes
1363
fi
1364

    
1365
##########################################
1366
# Do we need librt
1367
cat > $TMPC <<EOF
1368
#include <signal.h>
1369
#include <time.h>
1370
int main(void) { clockid_t id; return clock_gettime(id, NULL); }
1371
EOF
1372

    
1373
if compile_prog "" "" ; then
1374
  :
1375
elif compile_prog "" "-lrt" ; then
1376
  LIBS="-lrt $LIBS"
1377
fi
1378

    
1379
# Determine what linker flags to use to force archive inclusion
1380
check_linker_flags()
1381
{
1382
    w2=
1383
    if test "$2" ; then
1384
	w2=-Wl,$2
1385
    fi
1386
    compile_prog "" "-Wl,$1 ${w2}"
1387
}
1388

    
1389
cat > $TMPC << EOF
1390
int main(void) { }
1391
EOF
1392
if check_linker_flags --whole-archive --no-whole-archive ; then
1393
    # GNU ld
1394
    arlibs_begin="-Wl,--whole-archive"
1395
    arlibs_end="-Wl,--no-whole-archive"
1396
elif check_linker_flags -z,allextract -z,defaultextract ; then
1397
    # Solaris ld
1398
    arlibs_begin"=-Wl,-z,allextract"
1399
    arlibs_end="-Wl,-z,defaultextract"
1400
elif check_linker_flags -all_load ; then
1401
    # Mac OS X
1402
    arlibs_begin="-all_load"
1403
    arlibs_end=""
1404
else
1405
    echo "Error: your linker does not support --whole-archive or -z."
1406
    echo "Please report to qemu-devel@nongnu.org"
1407
    exit 1
1408
fi
1409

    
1410
if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaries" != yes -a \
1411
        "$aix" != "yes" ; then
1412
    libs_softmmu="-lutil $libs_softmmu"
1413
fi
1414

    
1415
# End of CC checks
1416
# After here, no more $cc or $ld runs
1417

    
1418
# default flags for all hosts
1419
QEMU_CFLAGS="-fno-strict-aliasing $QEMU_CFLAGS"
1420
CFLAGS="-g $CFLAGS"
1421
if test "$debug" = "no" ; then
1422
  CFLAGS="-O2 $CFLAGS"
1423
fi
1424
QEMU_CFLAGS="-Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
1425
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
1426
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
1427
QEMU_CFLAGS="-U_FORTIFY_SOURCE $QEMU_CFLAGS"
1428
QEMU_CFLAGS="-I. -I\$(SRC_PATH) -MMD -MP -MT \$@ $QEMU_CFLAGS"
1429
LDFLAGS="-g $LDFLAGS"
1430

    
1431
# Consult white-list to determine whether to enable werror
1432
# by default.  Only enable by default for git builds
1433
if test -z "$werror" ; then
1434
    z_version=`cut -f3 -d. $source_path/VERSION`
1435
    if test "$z_version" = "50" -a \
1436
        "$linux" = "yes" ; then
1437
        werror="yes"
1438
    else
1439
        werror="no"
1440
    fi
1441
fi
1442

    
1443
if test "$werror" = "yes" ; then
1444
    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
1445
fi
1446

    
1447
if test "$solaris" = "no" ; then
1448
    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
1449
        LDFLAGS="-Wl,--warn-common $LDFLAGS"
1450
    fi
1451
fi
1452

    
1453
if test "$mingw32" = "yes" ; then
1454
  if test -z "$prefix" ; then
1455
      prefix="c:/Program Files/Qemu"
1456
  fi
1457
  mansuffix=""
1458
  datasuffix=""
1459
  docsuffix=""
1460
  binsuffix=""
1461
else
1462
  if test -z "$prefix" ; then
1463
      prefix="/usr/local"
1464
  fi
1465
  mansuffix="/share/man"
1466
  datasuffix="/share/qemu"
1467
  docsuffix="/share/doc/qemu"
1468
  binsuffix="/bin"
1469
fi
1470

    
1471
echo "Install prefix    $prefix"
1472
echo "BIOS directory    $prefix$datasuffix"
1473
echo "binary directory  $prefix$binsuffix"
1474
if test "$mingw32" = "no" ; then
1475
echo "Manual directory  $prefix$mansuffix"
1476
echo "ELF interp prefix $interp_prefix"
1477
fi
1478
echo "Source path       $source_path"
1479
echo "C compiler        $cc"
1480
echo "Host C compiler   $host_cc"
1481
echo "CFLAGS            $CFLAGS"
1482
echo "QEMU_CFLAGS       $QEMU_CFLAGS"
1483
echo "LDFLAGS           $LDFLAGS"
1484
echo "make              $make"
1485
echo "install           $install"
1486
echo "host CPU          $cpu"
1487
echo "host big endian   $bigendian"
1488
echo "target list       $target_list"
1489
echo "tcg debug enabled $debug_tcg"
1490
echo "gprof enabled     $gprof"
1491
echo "sparse enabled    $sparse"
1492
echo "strip binaries    $strip_opt"
1493
echo "profiler          $profiler"
1494
echo "static build      $static"
1495
echo "-Werror enabled   $werror"
1496
if test "$darwin" = "yes" ; then
1497
    echo "Cocoa support     $cocoa"
1498
fi
1499
echo "SDL support       $sdl"
1500
echo "curses support    $curses"
1501
echo "curl support      $curl"
1502
echo "mingw32 support   $mingw32"
1503
echo "Audio drivers     $audio_drv_list"
1504
echo "Extra audio cards $audio_card_list"
1505
echo "Mixer emulation   $mixemu"
1506
echo "VNC TLS support   $vnc_tls"
1507
if test "$vnc_tls" = "yes" ; then
1508
    echo "    TLS CFLAGS    $vnc_tls_cflags"
1509
    echo "    TLS LIBS      $vnc_tls_libs"
1510
fi
1511
echo "VNC SASL support  $vnc_sasl"
1512
if test "$vnc_sasl" = "yes" ; then
1513
    echo "    SASL CFLAGS    $vnc_sasl_cflags"
1514
    echo "    SASL LIBS      $vnc_sasl_libs"
1515
fi
1516
if test -n "$sparc_cpu"; then
1517
    echo "Target Sparc Arch $sparc_cpu"
1518
fi
1519
echo "kqemu support     $kqemu"
1520
echo "xen support       $xen"
1521
echo "brlapi support    $brlapi"
1522
echo "Documentation     $build_docs"
1523
[ ! -z "$uname_release" ] && \
1524
echo "uname -r          $uname_release"
1525
echo "NPTL support      $nptl"
1526
echo "GUEST_BASE        $guest_base"
1527
echo "vde support       $vde"
1528
echo "AIO support       $aio"
1529
echo "IO thread         $io_thread"
1530
echo "Install blobs     $blobs"
1531
echo -e "KVM support       $kvm"
1532
echo "fdt support       $fdt"
1533
echo "preadv support    $preadv"
1534

    
1535
if test $sdl_too_old = "yes"; then
1536
echo "-> Your SDL version is too old - please upgrade to have SDL support"
1537
fi
1538

    
1539
config_host_mak="config-host.mak"
1540
config_host_h="config-host.h"
1541
config_host_ld="config-host.ld"
1542

    
1543
#echo "Creating $config_host_mak and $config_host_h"
1544

    
1545
test -f $config_host_h && mv $config_host_h ${config_host_h}~
1546

    
1547
echo "# Automatically generated by configure - do not modify" > $config_host_mak
1548
printf "# Configured with:" >> $config_host_mak
1549
printf " '%s'" "$0" "$@" >> $config_host_mak
1550
echo >> $config_host_mak
1551

    
1552
echo "CONFIG_QEMU_SHAREDIR=\"$prefix$datasuffix\"" >> $config_host_mak
1553

    
1554
case "$cpu" in
1555
  i386|x86_64|alpha|cris|hppa|ia64|m68k|microblaze|mips|mips64|ppc|ppc64|s390|sparc|sparc64)
1556
    ARCH=$cpu
1557
  ;;
1558
  armv4b|armv4l)
1559
    ARCH=arm
1560
  ;;
1561
  *)
1562
    echo "Unsupported CPU = $cpu"
1563
    exit 1
1564
  ;;
1565
esac
1566
echo "ARCH=$ARCH" >> $config_host_mak
1567
if test "$debug_tcg" = "yes" ; then
1568
  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
1569
fi
1570
if test "$debug" = "yes" ; then
1571
  echo "CONFIG_DEBUG_EXEC=y" >> $config_host_mak
1572
fi
1573
if test "$strip_opt" = "yes" ; then
1574
  echo "STRIP_OPT=-s" >> $config_host_mak
1575
fi
1576
if test "$bigendian" = "yes" ; then
1577
  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
1578
fi
1579
echo "HOST_LONG_BITS=$hostlongbits" >> $config_host_mak
1580
if test "$mingw32" = "yes" ; then
1581
  echo "CONFIG_WIN32=y" >> $config_host_mak
1582
else
1583
  echo "CONFIG_POSIX=y" >> $config_host_mak
1584
fi
1585

    
1586
if test "$darwin" = "yes" ; then
1587
  echo "CONFIG_DARWIN=y" >> $config_host_mak
1588
fi
1589

    
1590
if test "$aix" = "yes" ; then
1591
  echo "CONFIG_AIX=y" >> $config_host_mak
1592
fi
1593

    
1594
if test "$solaris" = "yes" ; then
1595
  echo "CONFIG_SOLARIS=y" >> $config_host_mak
1596
  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
1597
  if test "$needs_libsunmath" = "yes" ; then
1598
    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
1599
  fi
1600
fi
1601
if test "$static" = "yes" ; then
1602
  echo "CONFIG_STATIC=y" >> $config_host_mak
1603
  LDFLAGS="-static $LDFLAGS"
1604
fi
1605
if test $profiler = "yes" ; then
1606
  echo "CONFIG_PROFILER=y" >> $config_host_mak
1607
fi
1608
if test "$slirp" = "yes" ; then
1609
  echo "CONFIG_SLIRP=y" >> $config_host_mak
1610
  CFLAGS="-I\$(SRC_PATH)/slirp $CFLAGS"
1611
fi
1612
if test "$vde" = "yes" ; then
1613
  echo "CONFIG_VDE=y" >> $config_host_mak
1614
  echo "VDE_LIBS=$vde_libs" >> $config_host_mak
1615
fi
1616
for card in $audio_card_list; do
1617
    def=CONFIG_`echo $card | tr '[:lower:]' '[:upper:]'`
1618
    echo "$def=y" >> $config_host_mak
1619
done
1620
echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
1621
for drv in $audio_drv_list; do
1622
    def=CONFIG_`echo $drv | tr '[:lower:]' '[:upper:]'`
1623
    echo "$def=y" >> $config_host_mak
1624
    if test "$drv" = "fmod"; then
1625
        echo "FMOD_CFLAGS=-I$fmod_inc" >> $config_host_mak
1626
    fi
1627
done
1628
if test "$audio_pt_int" = "yes" ; then
1629
  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
1630
fi
1631
if test "$mixemu" = "yes" ; then
1632
  echo "CONFIG_MIXEMU=y" >> $config_host_mak
1633
fi
1634
if test "$vnc_tls" = "yes" ; then
1635
  echo "CONFIG_VNC_TLS=y" >> $config_host_mak
1636
  echo "VNC_TLS_CFLAGS=$vnc_tls_cflags" >> $config_host_mak
1637
fi
1638
if test "$vnc_sasl" = "yes" ; then
1639
  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
1640
  echo "VNC_SASL_CFLAGS=$vnc_sasl_cflags" >> $config_host_mak
1641
fi
1642
if test "$fnmatch" = "yes" ; then
1643
  echo "CONFIG_FNMATCH=y" >> $config_host_mak
1644
fi
1645
qemu_version=`head $source_path/VERSION`
1646
echo "VERSION=$qemu_version" >>$config_host_mak
1647
echo "PKGVERSION=$pkgversion" >>$config_host_mak
1648
echo "SRC_PATH=$source_path" >> $config_host_mak
1649
if [ "$source_path_used" = "yes" ]; then
1650
  echo "VPATH=$source_path" >> $config_host_mak
1651
fi
1652
echo "TARGET_DIRS=$target_list" >> $config_host_mak
1653
if [ "$build_docs" = "yes" ] ; then
1654
  echo "BUILD_DOCS=yes" >> $config_host_mak
1655
fi
1656
if test "$sdl" = "yes" ; then
1657
  echo "CONFIG_SDL=y" >> $config_host_mak
1658
  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
1659
fi
1660
if test "$cocoa" = "yes" ; then
1661
  echo "CONFIG_COCOA=y" >> $config_host_mak
1662
fi
1663
if test "$curses" = "yes" ; then
1664
  echo "CONFIG_CURSES=y" >> $config_host_mak
1665
fi
1666
if test "$atfile" = "yes" ; then
1667
  echo "CONFIG_ATFILE=y" >> $config_host_mak
1668
fi
1669
if test "$utimens" = "yes" ; then
1670
  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
1671
fi
1672
if test "$pipe2" = "yes" ; then
1673
  echo "CONFIG_PIPE2=y" >> $config_host_mak
1674
fi
1675
if test "$splice" = "yes" ; then
1676
  echo "CONFIG_SPLICE=y" >> $config_host_mak
1677
fi
1678
if test "$inotify" = "yes" ; then
1679
  echo "CONFIG_INOTIFY=y" >> $config_host_mak
1680
fi
1681
if test "$byteswap_h" = "yes" ; then
1682
  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
1683
fi
1684
if test "$bswap_h" = "yes" ; then
1685
  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
1686
fi
1687
if test "$curl" = "yes" ; then
1688
  echo "CONFIG_CURL=y" >> $config_host_mak
1689
  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
1690
  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
1691
fi
1692
if test "$brlapi" = "yes" ; then
1693
  echo "CONFIG_BRLAPI=y" >> $config_host_mak
1694
fi
1695
if test "$bluez" = "yes" ; then
1696
  echo "CONFIG_BLUEZ=y" >> $config_host_mak
1697
  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
1698
fi
1699
if test "$xen" = "yes" ; then
1700
  echo "CONFIG_XEN=y" >> $config_host_mak
1701
fi
1702
if test "$aio" = "yes" ; then
1703
  echo "CONFIG_AIO=y" >> $config_host_mak
1704
fi
1705
if test "$io_thread" = "yes" ; then
1706
  echo "CONFIG_IOTHREAD=y" >> $config_host_mak
1707
fi
1708
if test "$blobs" = "yes" ; then
1709
  echo "INSTALL_BLOBS=yes" >> $config_host_mak
1710
fi
1711
if test "$iovec" = "yes" ; then
1712
  echo "CONFIG_IOVEC=y" >> $config_host_mak
1713
fi
1714
if test "$preadv" = "yes" ; then
1715
  echo "CONFIG_PREADV=y" >> $config_host_mak
1716
fi
1717
if test "$fdt" = "yes" ; then
1718
  echo "CONFIG_FDT=y" >> $config_host_mak
1719
fi
1720

    
1721
# XXX: suppress that
1722
if [ "$bsd" = "yes" ] ; then
1723
  echo "CONFIG_BSD=y" >> $config_host_mak
1724
fi
1725

    
1726
echo "CONFIG_UNAME_RELEASE=\"$uname_release\"" >> $config_host_mak
1727

    
1728
# USB host support
1729
case "$usb" in
1730
linux)
1731
  echo "HOST_USB=linux" >> $config_host_mak
1732
;;
1733
bsd)
1734
  echo "HOST_USB=bsd" >> $config_host_mak
1735
;;
1736
*)
1737
  echo "HOST_USB=stub" >> $config_host_mak
1738
;;
1739
esac
1740

    
1741
tools=
1742
if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then
1743
  tools="qemu-img\$(EXESUF) $tools"
1744
  if [ "$linux" = "yes" ] ; then
1745
      tools="qemu-nbd\$(EXESUF) qemu-io\$(EXESUF) $tools"
1746
  fi
1747
fi
1748
echo "TOOLS=$tools" >> $config_host_mak
1749

    
1750
# Mac OS X ships with a broken assembler
1751
roms=
1752
if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
1753
        "$targetos" != "Darwin" ; then
1754
  roms="optionrom"
1755
fi
1756
echo "ROMS=$roms" >> $config_host_mak
1757

    
1758
echo "prefix=$prefix" >> $config_host_mak
1759
echo "bindir=\${prefix}$binsuffix" >> $config_host_mak
1760
echo "mandir=\${prefix}$mansuffix" >> $config_host_mak
1761
echo "datadir=\${prefix}$datasuffix" >> $config_host_mak
1762
echo "docdir=\${prefix}$docsuffix" >> $config_host_mak
1763
echo "MAKE=$make" >> $config_host_mak
1764
echo "INSTALL=$install" >> $config_host_mak
1765
echo "INSTALL_DIR=$install -d -m0755 -p" >> $config_host_mak
1766
echo "INSTALL_DATA=$install -m0644 -p" >> $config_host_mak
1767
echo "INSTALL_PROG=$install -m0755 -p" >> $config_host_mak
1768
echo "CC=$cc" >> $config_host_mak
1769
echo "HOST_CC=$host_cc" >> $config_host_mak
1770
if test "$sparse" = "yes" ; then
1771
  echo "CC      := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
1772
  echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
1773
  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
1774
fi
1775
echo "AR=$ar" >> $config_host_mak
1776
echo "OBJCOPY=$objcopy" >> $config_host_mak
1777
echo "LD=$ld" >> $config_host_mak
1778
echo "CFLAGS=$CFLAGS" >> $config_host_mak
1779
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
1780
echo "HELPER_CFLAGS=$helper_cflags" >> $config_host_mak
1781
echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
1782
echo "ARLIBS_BEGIN=$arlibs_begin" >> $config_host_mak
1783
echo "ARLIBS_END=$arlibs_end" >> $config_host_mak
1784
echo "LIBS+=$LIBS" >> $config_host_mak
1785
echo "EXESUF=$EXESUF" >> $config_host_mak
1786

    
1787
echo "/* Automatically generated by configure - do not modify */" > $config_host_h
1788

    
1789
$SHELL $source_path/create_config < $config_host_mak >> $config_host_h
1790

    
1791
if test -f ${config_host_h}~ ; then
1792
  if cmp -s $config_host_h ${config_host_h}~ ; then
1793
    mv ${config_host_h}~ $config_host_h
1794
  else
1795
    rm ${config_host_h}~
1796
  fi
1797
fi
1798

    
1799
# generate list of library paths for linker script
1800

    
1801
$ld --verbose -v 2> /dev/null | grep SEARCH_DIR > ${config_host_ld}
1802

    
1803
if test -f ${config_host_ld}~ ; then
1804
  if cmp -s $config_host_ld ${config_host_ld}~ ; then
1805
    mv ${config_host_ld}~ $config_host_ld
1806
  else
1807
    rm ${config_host_ld}~
1808
  fi
1809
fi
1810

    
1811
for target in $target_list; do
1812
target_dir="$target"
1813
config_mak=$target_dir/config.mak
1814
config_h=$target_dir/config.h
1815
target_arch2=`echo $target | cut -d '-' -f 1`
1816
target_bigendian="no"
1817
case "$target_arch2" in
1818
  armeb|m68k|microblaze|mips|mipsn32|mips64|ppc|ppcemb|ppc64|ppc64abi32|sh4eb|sparc|sparc64|sparc32plus)
1819
  target_bigendian=yes
1820
  ;;
1821
esac
1822
target_softmmu="no"
1823
target_user_only="no"
1824
target_linux_user="no"
1825
target_darwin_user="no"
1826
target_bsd_user="no"
1827
case "$target" in
1828
  ${target_arch2}-softmmu)
1829
    target_softmmu="yes"
1830
    ;;
1831
  ${target_arch2}-linux-user)
1832
    target_user_only="yes"
1833
    target_linux_user="yes"
1834
    ;;
1835
  ${target_arch2}-darwin-user)
1836
    target_user_only="yes"
1837
    target_darwin_user="yes"
1838
    ;;
1839
  ${target_arch2}-bsd-user)
1840
    target_user_only="yes"
1841
    target_bsd_user="yes"
1842
    ;;
1843
  *)
1844
    echo "ERROR: Target '$target' not recognised"
1845
    exit 1
1846
    ;;
1847
esac
1848

    
1849
#echo "Creating $config_mak, $config_h and $target_dir/Makefile"
1850

    
1851
test -f $config_h && mv $config_h ${config_h}~
1852

    
1853
mkdir -p $target_dir
1854
mkdir -p $target_dir/fpu
1855
mkdir -p $target_dir/tcg
1856
if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$target" = "arm-bsd-user" -o "$target" = "armeb-bsd-user" ; then
1857
  mkdir -p $target_dir/nwfpe
1858
fi
1859

    
1860
#
1861
# don't use ln -sf as not all "ln -sf" over write the file/link
1862
#
1863
rm -f $target_dir/Makefile
1864
ln -s $source_path/Makefile.target $target_dir/Makefile
1865

    
1866

    
1867
echo "# Automatically generated by configure - do not modify" > $config_mak
1868

    
1869
echo "include ../config-host.mak" >> $config_mak
1870

    
1871
bflt="no"
1872
elfload32="no"
1873
target_nptl="no"
1874
interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_arch2/g"`
1875
echo "CONFIG_QEMU_PREFIX=\"$interp_prefix1\"" >> $config_mak
1876
gdb_xml_files=""
1877

    
1878
TARGET_ARCH="$target_arch2"
1879
TARGET_BASE_ARCH=""
1880
TARGET_ABI_DIR=""
1881

    
1882
case "$target_arch2" in
1883
  i386)
1884
    target_phys_bits=32
1885
  ;;
1886
  x86_64)
1887
    TARGET_BASE_ARCH=i386
1888
    target_phys_bits=64
1889
  ;;
1890
  alpha)
1891
    target_phys_bits=64
1892
  ;;
1893
  arm|armeb)
1894
    TARGET_ARCH=arm
1895
    bflt="yes"
1896
    target_nptl="yes"
1897
    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
1898
    target_phys_bits=32
1899
  ;;
1900
  cris)
1901
    target_nptl="yes"
1902
    target_phys_bits=32
1903
  ;;
1904
  m68k)
1905
    bflt="yes"
1906
    gdb_xml_files="cf-core.xml cf-fp.xml"
1907
    target_phys_bits=32
1908
  ;;
1909
  microblaze)
1910
    bflt="yes"
1911
    target_nptl="yes"
1912
    target_phys_bits=32
1913
  ;;
1914
  mips|mipsel)
1915
    TARGET_ARCH=mips
1916
    echo "TARGET_ABI_MIPSO32=y" >> $config_mak
1917
    target_nptl="yes"
1918
    target_phys_bits=64
1919
  ;;
1920
  mipsn32|mipsn32el)
1921
    TARGET_ARCH=mipsn32
1922
    TARGET_BASE_ARCH=mips
1923
    echo "TARGET_ABI_MIPSN32=y" >> $config_mak
1924
    target_phys_bits=64
1925
  ;;
1926
  mips64|mips64el)
1927
    TARGET_ARCH=mips64
1928
    TARGET_BASE_ARCH=mips
1929
    echo "TARGET_ABI_MIPSN64=y" >> $config_mak
1930
    target_phys_bits=64
1931
  ;;
1932
  ppc)
1933
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
1934
    target_phys_bits=32
1935
    target_nptl="yes"
1936
  ;;
1937
  ppcemb)
1938
    TARGET_BASE_ARCH=ppc
1939
    TARGET_ABI_DIR=ppc
1940
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
1941
    target_phys_bits=64
1942
    target_nptl="yes"
1943
  ;;
1944
  ppc64)
1945
    TARGET_BASE_ARCH=ppc
1946
    TARGET_ABI_DIR=ppc
1947
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
1948
    target_phys_bits=64
1949
  ;;
1950
  ppc64abi32)
1951
    TARGET_ARCH=ppc64
1952
    TARGET_BASE_ARCH=ppc
1953
    TARGET_ABI_DIR=ppc
1954
    echo "TARGET_ABI32=y" >> $config_mak
1955
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
1956
    target_phys_bits=64
1957
  ;;
1958
  sh4|sh4eb)
1959
    TARGET_ARCH=sh4
1960
    bflt="yes"
1961
    target_nptl="yes"
1962
    target_phys_bits=32
1963
  ;;
1964
  sparc)
1965
    target_phys_bits=64
1966
  ;;
1967
  sparc64)
1968
    TARGET_BASE_ARCH=sparc
1969
    elfload32="yes"
1970
    target_phys_bits=64
1971
  ;;
1972
  sparc32plus)
1973
    TARGET_ARCH=sparc64
1974
    TARGET_BASE_ARCH=sparc
1975
    TARGET_ABI_DIR=sparc
1976
    echo "TARGET_ABI32=y" >> $config_mak
1977
    target_phys_bits=64
1978
  ;;
1979
  *)
1980
    echo "Unsupported target CPU"
1981
    exit 1
1982
  ;;
1983
esac
1984
echo "TARGET_ARCH=$TARGET_ARCH" >> $config_mak
1985
echo "TARGET_ARCH2=$target_arch2" >> $config_mak
1986
# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
1987
if [ "$TARGET_BASE_ARCH" = "" ]; then
1988
  TARGET_BASE_ARCH=$TARGET_ARCH
1989
fi
1990
echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_mak
1991
if [ "$TARGET_ABI_DIR" = "" ]; then
1992
  TARGET_ABI_DIR=$TARGET_ARCH
1993
fi
1994
echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_mak
1995
if [ $target_phys_bits -lt $hostlongbits ] ; then
1996
  target_phys_bits=$hostlongbits
1997
fi
1998
case "$target_arch2" in
1999
  i386|x86_64)
2000
    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
2001
      echo "CONFIG_XEN=y" >> $config_mak
2002
    fi
2003
    if test $kqemu = "yes" -a "$target_softmmu" = "yes"
2004
    then
2005
      echo "CONFIG_KQEMU=y" >> $config_mak
2006
    fi
2007
esac
2008
case "$target_arch2" in
2009
  i386|x86_64|ppcemb|ppc|ppc64)
2010
    # Make sure the target and host cpus are compatible
2011
    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
2012
      \( "$target_arch2" = "$cpu" -o \
2013
      \( "$target_arch2" = "ppcemb" -a "$cpu" = "ppc" \) -o \
2014
      \( "$target_arch2" = "ppc64"  -a "$cpu" = "ppc" \) -o \
2015
      \( "$target_arch2" = "x86_64" -a "$cpu" = "i386"   \) -o \
2016
      \( "$target_arch2" = "i386"   -a "$cpu" = "x86_64" \) \) ; then
2017
      echo "CONFIG_KVM=y" >> $config_mak
2018
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
2019
    fi
2020
esac
2021
echo "HWLIB=../libhw$target_phys_bits/libqemuhw$target_phys_bits.a" >> $config_mak
2022
echo "TARGET_PHYS_ADDR_BITS=$target_phys_bits" >> $config_mak
2023
echo "subdir-$target: subdir-libhw$target_phys_bits" >> $config_host_mak
2024
if test "$target_bigendian" = "yes" ; then
2025
  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_mak
2026
fi
2027
if test "$target_softmmu" = "yes" ; then
2028
  echo "CONFIG_SOFTMMU=y" >> $config_mak
2029
  echo "LIBS+=$libs_softmmu" >> $config_mak
2030
fi
2031
if test "$target_user_only" = "yes" ; then
2032
  echo "CONFIG_USER_ONLY=y" >> $config_mak
2033
fi
2034
if test "$target_linux_user" = "yes" ; then
2035
  echo "CONFIG_LINUX_USER=y" >> $config_mak
2036
fi
2037
if test "$target_darwin_user" = "yes" ; then
2038
  echo "CONFIG_DARWIN_USER=y" >> $config_mak
2039
fi
2040
list=""
2041
if test ! -z "$gdb_xml_files" ; then
2042
  for x in $gdb_xml_files; do
2043
    list="$list $source_path/gdb-xml/$x"
2044
  done
2045
fi
2046
echo "TARGET_XML_FILES=$list" >> $config_mak
2047

    
2048
case "$target_arch2" in
2049
  arm|armeb|m68k|microblaze|mips|mipsel|mipsn32|mipsn32el|mips64|mips64el|ppc|ppc64|ppc64abi32|ppcemb|sparc|sparc64|sparc32plus)
2050
    echo "CONFIG_SOFTFLOAT=y" >> $config_mak
2051
    ;;
2052
  *)
2053
    echo "CONFIG_NOSOFTFLOAT=y" >> $config_mak
2054
    ;;
2055
esac
2056

    
2057
if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
2058
  echo "TARGET_HAS_BFLT=y" >> $config_mak
2059
fi
2060
if test "$target_user_only" = "yes" \
2061
        -a "$nptl" = "yes" -a "$target_nptl" = "yes"; then
2062
  echo "CONFIG_USE_NPTL=y" >> $config_mak
2063
fi
2064
# 32 bit ELF loader in addition to native 64 bit loader?
2065
if test "$target_user_only" = "yes" -a "$elfload32" = "yes"; then
2066
  echo "TARGET_HAS_ELFLOAD32=y" >> $config_mak
2067
fi
2068
if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
2069
  echo "CONFIG_USE_GUEST_BASE=y" >> $config_mak
2070
fi
2071
if test "$target_bsd_user" = "yes" ; then
2072
  echo "CONFIG_BSD_USER=y" >> $config_mak
2073
fi
2074

    
2075
# generate QEMU_CFLAGS/LDFLAGS for targets
2076

    
2077
cflags=""
2078
ldflags=""
2079

    
2080
if test "$ARCH" = "sparc64" ; then
2081
  cflags="-I\$(SRC_PATH)/tcg/sparc $cflags"
2082
else
2083
  cflags="-I\$(SRC_PATH)/tcg/\$(ARCH) $cflags"
2084
fi
2085
cflags="-I\$(SRC_PATH)/tcg $cflags"
2086
cflags="-I\$(SRC_PATH)/fpu $cflags"
2087

    
2088
for i in $ARCH $TARGET_BASE_ARCH ; do
2089
  case "$i" in
2090
  alpha)
2091
    echo "CONFIG_ALPHA_DIS=y"  >> $config_mak
2092
  ;;
2093
  arm)
2094
    echo "CONFIG_ARM_DIS=y"  >> $config_mak
2095
  ;;
2096
  cris)
2097
    echo "CONFIG_CRIS_DIS=y"  >> $config_mak
2098
  ;;
2099
  hppa)
2100
    echo "CONFIG_HPPA_DIS=y"  >> $config_mak
2101
  ;;
2102
  i386|x86_64)
2103
    echo "CONFIG_I386_DIS=y"  >> $config_mak
2104
  ;;
2105
  m68k)
2106
    echo "CONFIG_M68K_DIS=y"  >> $config_mak
2107
  ;;
2108
  microblaze)
2109
    echo "CONFIG_MICROBLAZE_DIS=y"  >> $config_mak
2110
  ;;
2111
  mips*)
2112
    echo "CONFIG_MIPS_DIS=y"  >> $config_mak
2113
  ;;
2114
  ppc*)
2115
    echo "CONFIG_PPC_DIS=y"  >> $config_mak
2116
  ;;
2117
  s390)
2118
    echo "CONFIG_S390_DIS=y"  >> $config_mak
2119
  ;;
2120
  sh4)
2121
    echo "CONFIG_SH4_DIS=y"  >> $config_mak
2122
  ;;
2123
  sparc*)
2124
    echo "CONFIG_SPARC_DIS=y"  >> $config_mak
2125
  ;;
2126
  esac
2127
done
2128

    
2129
case "$ARCH" in
2130
alpha)
2131
  # Ensure there's only a single GP
2132
  cflags="-msmall-data $cflags"
2133
;;
2134
ia64)
2135
  cflags="-mno-sdata $cflags"
2136
;;
2137
esac
2138

    
2139
if test "$target_softmmu" = "yes" -a \( \
2140
        "$TARGET_ARCH" = "microblaze" -o \
2141
        "$TARGET_ARCH" = "cris" \) ; then
2142
  echo "CONFIG_NEED_MMU=y" >> $config_mak
2143
fi
2144

    
2145
if test "$gprof" = "yes" ; then
2146
  echo "TARGET_GPROF=yes" >> $config_mak
2147
  if test "$target_linux_user" = "yes" ; then
2148
    cflags="-p $cflags"
2149
    ldflags="-p $ldflags"
2150
  fi
2151
  if test "$target_softmmu" = "yes" ; then
2152
    ldflags="-p $ldflags"
2153
  fi
2154
fi
2155

    
2156
linker_script="-Wl,-T../config-host.ld -Wl,-T,\$(SRC_PATH)/\$(ARCH).ld"
2157
if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
2158
  case "$ARCH" in
2159
  i386)
2160
    if test "$gprof" = "yes" -o "$static" = "yes" ; then
2161
      ldflags="$linker_script $ldflags"
2162
    else
2163
      # WARNING: this LDFLAGS is _very_ tricky : qemu is an ELF shared object
2164
      # that the kernel ELF loader considers as an executable. I think this
2165
      # is the simplest way to make it self virtualizable!
2166
      ldflags="-Wl,-shared $ldflags"
2167
    fi
2168
    ;;
2169
  sparc)
2170
    # -static is used to avoid g1/g3 usage by the dynamic linker
2171
    ldflags="$linker_script -static $ldflags"
2172
    ;;
2173
  ia64)
2174
    ldflags="-Wl,-G0 $linker_script -static $ldflags"
2175
    ;;
2176
  x86_64|ppc|ppc64|s390|sparc64|alpha|arm|m68k|mips|mips64)
2177
    ldflags="$linker_script $ldflags"
2178
    ;;
2179
  esac
2180
fi
2181
if test "$target_softmmu" = "yes" ; then
2182
  case "$ARCH" in
2183
  ia64)
2184
    ldflags="-Wl,-G0 $linker_script -static $ldflags"
2185
    ;;
2186
  esac
2187
fi
2188

    
2189
echo "LDFLAGS+=$ldflags" >> $config_mak
2190
echo "QEMU_CFLAGS+=$cflags" >> $config_mak
2191

    
2192
echo "/* Automatically generated by configure - do not modify */" > $config_h
2193
echo "#include \"../config-host.h\"" >> $config_h
2194

    
2195
$SHELL $source_path/create_config < $config_mak >> $config_h
2196

    
2197
if test -f ${config_h}~ ; then
2198
  if cmp -s $config_h ${config_h}~ ; then
2199
    mv ${config_h}~ $config_h
2200
  else
2201
    rm ${config_h}~
2202
  fi
2203
fi
2204

    
2205
done # for target in $targets
2206

    
2207
# build tree in object directory if source path is different from current one
2208
if test "$source_path_used" = "yes" ; then
2209
    DIRS="tests tests/cris slirp audio block pc-bios/optionrom"
2210
    FILES="Makefile tests/Makefile"
2211
    FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit"
2212
    FILES="$FILES tests/test-mmap.c"
2213
    FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps pc-bios/video.x"
2214
    for bios_file in $source_path/pc-bios/*.bin $source_path/pc-bios/*.dtb $source_path/pc-bios/openbios-*; do
2215
        FILES="$FILES pc-bios/`basename $bios_file`"
2216
    done
2217
    for dir in $DIRS ; do
2218
            mkdir -p $dir
2219
    done
2220
    # remove the link and recreate it, as not all "ln -sf" overwrite the link
2221
    for f in $FILES ; do
2222
        rm -f $f
2223
        ln -s $source_path/$f $f
2224
    done
2225
fi
2226

    
2227
for hwlib in 32 64; do
2228
  d=libhw$hwlib
2229
  mkdir -p $d
2230
  rm -f $d/Makefile
2231
  ln -s $source_path/Makefile.hw $d/Makefile
2232
  echo "HWLIB=libqemuhw$hwlib.a" > $d/config.mak
2233
  echo "QEMU_CFLAGS+=-DTARGET_PHYS_ADDR_BITS=$hwlib" >> $d/config.mak
2234
done