1 #!/bin/sh 2 # 3 # this script is used to rebuild the Android emulator from sources 4 # in the current directory. It also contains logic to speed up the 5 # rebuild if it detects that you're using the Android build system 6 # 7 # here's the list of environment variables you can define before 8 # calling this script to control it (besides options): 9 # 10 # 11 12 # first, let's see which system we're running this on 13 cd `dirname $0` 14 15 # source common functions definitions 16 . android/build/common.sh 17 18 # Parse options 19 OPTION_TARGETS="" 20 OPTION_DEBUG=no 21 OPTION_IGNORE_AUDIO=no 22 OPTION_NO_PREBUILTS=no 23 OPTION_OUT_DIR= 24 OPTION_HELP=no 25 OPTION_STATIC=no 26 OPTION_MINGW=no 27 28 GLES_DIR= 29 GLES_SUPPORT=no 30 GLES_PROBE=yes 31 32 PCBIOS_PROBE=yes 33 34 HOST_CC=${CC:-gcc} 35 OPTION_CC= 36 37 for opt do 38 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` 39 case "$opt" in 40 --help|-h|-\?) OPTION_HELP=yes 41 ;; 42 --verbose) 43 if [ "$VERBOSE" = "yes" ] ; then 44 VERBOSE2=yes 45 else 46 VERBOSE=yes 47 fi 48 ;; 49 --debug) OPTION_DEBUG=yes 50 ;; 51 --install=*) OPTION_TARGETS="$OPTION_TARGETS $optarg"; 52 ;; 53 --sdl-config=*) SDL_CONFIG=$optarg 54 ;; 55 --mingw) OPTION_MINGW=yes 56 ;; 57 --cc=*) OPTION_CC="$optarg" 58 ;; 59 --no-strip) OPTION_NO_STRIP=yes 60 ;; 61 --out-dir=*) OPTION_OUT_DIR=$optarg 62 ;; 63 --ignore-audio) OPTION_IGNORE_AUDIO=yes 64 ;; 65 --no-prebuilts) OPTION_NO_PREBUILTS=yes 66 ;; 67 --static) OPTION_STATIC=yes 68 ;; 69 --gles-dir=*) GLES_DIR=$optarg 70 ;; 71 --no-gles) GLES_PROBE=no 72 ;; 73 --no-pcbios) PCBIOS_PROBE=no 74 ;; 75 --no-tests) 76 # Ignore this option, only used by android-rebuild.sh 77 ;; 78 *) 79 echo "unknown option '$opt', use --help" 80 exit 1 81 esac 82 done 83 84 # Print the help message 85 # 86 if [ "$OPTION_HELP" = "yes" ] ; then 87 cat << EOF 88 89 Usage: rebuild.sh [options] 90 Options: [defaults in brackets after descriptions] 91 EOF 92 echo "Standard options:" 93 echo " --help print this message" 94 echo " --install=FILEPATH copy emulator executable to FILEPATH [$TARGETS]" 95 echo " --cc=PATH specify C compiler [$HOST_CC]" 96 echo " --sdl-config=FILE use specific sdl-config script [$SDL_CONFIG]" 97 echo " --no-strip do not strip emulator executable" 98 echo " --debug enable debug (-O0 -g) build" 99 echo " --ignore-audio ignore audio messages (may build sound-less emulator)" 100 echo " --no-prebuilts do not use prebuilt libraries and compiler" 101 echo " --out-dir=<path> use specific output directory [objs/]" 102 echo " --mingw build Windows executable on Linux" 103 echo " --static build a completely static executable" 104 echo " --verbose verbose configuration" 105 echo " --debug build debug version of the emulator" 106 echo " --gles-dir=PATH specify path to GLES host emulation sources [auto-detected]" 107 echo " --no-gles disable GLES emulation support" 108 echo " --no-pcbios disable copying of PC Bios files" 109 echo " --no-tests don't run unit test suite" 110 echo "" 111 exit 1 112 fi 113 114 # On Linux, try to use our prebuilt toolchain to generate binaries 115 # that are compatible with Ubuntu 10.4 116 if [ -z "$CC" -a -z "$OPTION_CC" -a "$HOST_OS" = linux ] ; then 117 PREBUILTS_HOST_GCC=$(dirname $0)/../../prebuilts/gcc/linux-x86/host 118 # NOTE: GCC 4.8 is currently disabled because this breaks MIPS emulation 119 # For some odd reason. Remove the 'DISABLED_' prefix below to re-enable it, 120 # e.g. once the MIPS backend has been updated to a more recent version. 121 # This only affects Linux emulator binaries. 122 PROBE_HOST_CC=$PREBUILTS_HOST_GCC/DISABLED_x86_64-linux-glibc2.11-4.8/bin/x86_64-linux-gcc 123 if [ ! -f "$PROBE_HOST_CC" ]; then 124 PROBE_HOST_CC=$PREBUILTS_HOST_GCC/x86_64-linux-glibc2.11-4.6/bin/x86_64-linux-gcc 125 if [ ! -f "$PROBE_HOST_CC" ] ; then 126 PROBE_HOST_CC=$(dirname $0)/../../prebuilts/tools/gcc-sdk/gcc 127 fi 128 fi 129 if [ -f "$PROBE_HOST_CC" ] ; then 130 echo "Using prebuilt toolchain: $PROBE_HOST_CC" 131 CC="$PROBE_HOST_CC" 132 fi 133 fi 134 135 if [ -n "$OPTION_CC" ]; then 136 echo "Using specified C compiler: $OPTION_CC" 137 CC="$OPTION_CC" 138 fi 139 140 if [ -z "$CC" ]; then 141 CC=$HOST_CC 142 fi 143 144 # By default, generate 32-bit binaries, the Makefile have targets that 145 # generate 64-bit ones by using -m64 on the command-line. 146 force_32bit_binaries 147 148 case $OS in 149 linux-*) 150 TARGET_DLL_SUFFIX=.so 151 ;; 152 darwin-*) 153 TARGET_DLL_SUFFIX=.dylib 154 ;; 155 windows*) 156 TARGET_DLL_SUFFIX=.dll 157 esac 158 159 TARGET_OS=$OS 160 161 setup_toolchain 162 163 BUILD_AR=$AR 164 BUILD_CC=$CC 165 BUILD_CXX=$CC 166 BUILD_LD=$LD 167 BUILD_AR=$AR 168 BUILD_CFLAGS=$CFLAGS 169 BUILD_CXXFLAGS=$CXXFLAGS 170 BUILD_LDFLAGS=$LDFLAGS 171 172 if [ "$OPTION_MINGW" = "yes" ] ; then 173 enable_linux_mingw 174 TARGET_OS=windows 175 TARGET_DLL_SUFFIX=.dll 176 else 177 enable_cygwin 178 fi 179 180 if [ "$OPTION_OUT_DIR" ]; then 181 OUT_DIR="$OPTION_OUT_DIR" 182 mkdir -p "$OUT_DIR" || panic "Could not create output directory: $OUT_DIR" 183 else 184 OUT_DIR=objs 185 log "Auto-config: --out-dir=objs" 186 fi 187 188 # Are we running in the Android build system ? 189 check_android_build 190 191 192 # Adjust a few things when we're building within the Android build 193 # system: 194 # - locate prebuilt directory 195 # - locate and use prebuilt libraries 196 # - copy the new binary to the correct location 197 # 198 if [ "$OPTION_NO_PREBUILTS" = "yes" ] ; then 199 IN_ANDROID_BUILD=no 200 fi 201 202 if [ "$IN_ANDROID_BUILD" = "yes" ] ; then 203 locate_android_prebuilt 204 205 # use ccache if USE_CCACHE is defined and the corresponding 206 # binary is available. 207 # 208 if [ -n "$USE_CCACHE" ] ; then 209 CCACHE="$ANDROID_PREBUILT/ccache/ccache$EXE" 210 if [ ! -f $CCACHE ] ; then 211 CCACHE="$ANDROID_PREBUILTS/ccache/ccache$EXE" 212 fi 213 fi 214 215 # finally ensure that our new binary is copied to the 'out' 216 # subdirectory as 'emulator' 217 HOST_BIN=$(get_android_abs_build_var HOST_OUT_EXECUTABLES) 218 if [ "$TARGET_OS" = "windows" ]; then 219 HOST_BIN=$(echo $HOST_BIN | sed "s%$OS/bin%windows/bin%") 220 fi 221 if [ -n "$HOST_BIN" ] ; then 222 OPTION_TARGETS="$OPTION_TARGETS $HOST_BIN/emulator$EXE" 223 log "Targets : TARGETS=$OPTION_TARGETS" 224 fi 225 226 # find the Android SDK Tools revision number 227 TOOLS_PROPS=$ANDROID_TOP/sdk/files/tools_source.properties 228 if [ -f $TOOLS_PROPS ] ; then 229 ANDROID_SDK_TOOLS_REVISION=`awk -F= '/Pkg.Revision/ { print $2; }' $TOOLS_PROPS 2> /dev/null` 230 log "Tools : Found tools revision number $ANDROID_SDK_TOOLS_REVISION" 231 else 232 log "Tools : Could not locate $TOOLS_PROPS !?" 233 fi 234 else 235 if [ "$USE_CCACHE" != 0 ]; then 236 CCACHE=$(which ccache 2>/dev/null) 237 fi 238 fi # IN_ANDROID_BUILD = no 239 240 if [ -n "$CCACHE" -a -f "$CCACHE" ] ; then 241 CC="$CCACHE $CC" 242 log "Prebuilt : CCACHE=$CCACHE" 243 else 244 log "Prebuilt : CCACHE can't be found" 245 CCACHE= 246 fi 247 248 # Try to find the GLES emulation headers and libraries automatically 249 if [ "$GLES_PROBE" = "yes" ]; then 250 GLES_SUPPORT=yes 251 if [ -z "$GLES_DIR" ]; then 252 GLES_DIR=../../sdk/emulator/opengl 253 log2 "GLES : Probing source dir: $GLES_DIR" 254 if [ ! -d "$GLES_DIR" ]; then 255 GLES_DIR=../opengl 256 log2 "GLES : Probing source dir: $GLES_DIR" 257 if [ ! -d "$GLES_DIR" ]; then 258 GLES_DIR= 259 fi 260 fi 261 if [ -z "$GLES_DIR" ]; then 262 echo "GLES : Could not find GPU emulation sources!" 263 GLES_SUPPORT=no 264 else 265 echo "GLES : Found GPU emulation sources: $GLES_DIR" 266 GLES_SUPPORT=yes 267 fi 268 fi 269 fi 270 271 if [ "$PCBIOS_PROBE" = "yes" ]; then 272 PCBIOS_DIR=$(dirname "$0")/../../prebuilts/qemu-kernel/x86/pc-bios 273 if [ ! -d "$PCBIOS_DIR" ]; then 274 log2 "PC Bios : Probing $PCBIOS_DIR (missing)" 275 PCBIOS_DIR=../pc-bios 276 fi 277 log2 "PC Bios : Probing $PCBIOS_DIR" 278 if [ ! -d "$PCBIOS_DIR" ]; then 279 log "PC Bios : Could not find prebuilts directory." 280 else 281 mkdir -p $OUT_DIR/lib/pc-bios 282 for BIOS_FILE in bios.bin vgabios-cirrus.bin; do 283 log "PC Bios : Copying $BIOS_FILE" 284 cp -f $PCBIOS_DIR/$BIOS_FILE $OUT_DIR/lib/pc-bios/$BIOS_FILE 285 done 286 fi 287 fi 288 289 # For OS X, detect the location of the SDK to use. 290 if [ "$HOST_OS" = darwin ]; then 291 OSX_VERSION=$(sw_vers -productVersion) 292 OSX_SDK_SUPPORTED="10.6 10.7 10.8" 293 OSX_SDK_INSTALLED_LIST=$(xcodebuild -showsdks 2>/dev/null | grep macosx | sed -e "s/.*macosx//g" | sort -n) 294 if [ -z "$OSX_SDK_INSTALLED_LIST" ]; then 295 echo "ERROR: Please install XCode on this machine!" 296 exit 1 297 fi 298 log "OSX: Installed SDKs: $OSX_SDK_INSTALLED_LIST" 299 300 OSX_SDK_VERSION=$(echo "$OSX_SDK_INSTALLED_LIST" | tr ' ' '\n' | head -1) 301 log "OSX: Using SDK version $OSX_SDK_VERSION" 302 303 XCODE_PATH=$(xcode-select -print-path 2>/dev/null) 304 log "OSX: XCode path: $XCODE_PATH" 305 306 OSX_SDK_ROOT=$XCODE_PATH/Platforms/MacOSX.platform/Developer/SDKs/MacOSX${OSX_SDK_VERSION}.sdk 307 log "OSX: Looking for $OSX_SDK_ROOT" 308 if [ ! -d "$OSX_SDK_ROOT" ]; then 309 OSX_SDK_ROOT=/Developer/SDKs/MaxOSX${OSX_SDK_VERSION}.sdk 310 log "OSX: Looking for $OSX_SDK_ROOT" 311 if [ ! -d "$OSX_SDK_ROOT" ]; then 312 echo "ERROR: Could not find SDK $OSX_SDK_VERSION at $OSX_SDK_ROOT" 313 exit 1 314 fi 315 fi 316 echo "OSX SDK : Found at $OSX_SDK_ROOT" 317 fi 318 319 # we can build the emulator with Cygwin, so enable it 320 enable_cygwin 321 322 setup_toolchain 323 324 ### 325 ### SDL Probe 326 ### 327 328 if [ -n "$SDL_CONFIG" ] ; then 329 330 # check that we can link statically with the library. 331 # 332 SDL_CFLAGS=`$SDL_CONFIG --cflags` 333 SDL_LIBS=`$SDL_CONFIG --static-libs` 334 335 # quick hack, remove the -D_GNU_SOURCE=1 of some SDL Cflags 336 # since they break recent Mingw releases 337 SDL_CFLAGS=`echo $SDL_CFLAGS | sed -e s/-D_GNU_SOURCE=1//g` 338 339 log "SDL-probe : SDL_CFLAGS = $SDL_CFLAGS" 340 log "SDL-probe : SDL_LIBS = $SDL_LIBS" 341 342 343 EXTRA_CFLAGS="$SDL_CFLAGS" 344 EXTRA_LDFLAGS="$SDL_LIBS" 345 346 case "$OS" in 347 freebsd-*) 348 EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lm -lpthread" 349 ;; 350 esac 351 352 cat > $TMPC << EOF 353 #include <SDL.h> 354 #undef main 355 int main( int argc, char** argv ) { 356 return SDL_Init (SDL_INIT_VIDEO); 357 } 358 EOF 359 feature_check_link SDL_LINKING 360 361 if [ $SDL_LINKING != "yes" ] ; then 362 echo "You provided an explicit sdl-config script, but the corresponding library" 363 echo "cannot be statically linked with the Android emulator directly." 364 echo "Error message:" 365 cat $TMPL 366 clean_exit 367 fi 368 log "SDL-probe : static linking ok" 369 370 # now, let's check that the SDL library has the special functions 371 # we added to our own sources 372 # 373 cat > $TMPC << EOF 374 #include <SDL.h> 375 #undef main 376 int main( int argc, char** argv ) { 377 int x, y; 378 SDL_Rect r; 379 SDL_WM_GetPos(&x, &y); 380 SDL_WM_SetPos(x, y); 381 SDL_WM_GetMonitorDPI(&x, &y); 382 SDL_WM_GetMonitorRect(&r); 383 return SDL_Init (SDL_INIT_VIDEO); 384 } 385 EOF 386 feature_check_link SDL_LINKING 387 388 if [ $SDL_LINKING != "yes" ] ; then 389 echo "You provided an explicit sdl-config script in SDL_CONFIG, but the" 390 echo "corresponding library doesn't have the patches required to link" 391 echo "with the Android emulator. Unsetting SDL_CONFIG will use the" 392 echo "sources bundled with the emulator instead" 393 echo "Error:" 394 cat $TMPL 395 clean_exit 396 fi 397 398 log "SDL-probe : extra features ok" 399 clean_temp 400 401 EXTRA_CFLAGS= 402 EXTRA_LDFLAGS= 403 fi 404 405 ### 406 ### Audio subsystems probes 407 ### 408 PROBE_COREAUDIO=no 409 PROBE_ALSA=no 410 PROBE_OSS=no 411 PROBE_ESD=no 412 PROBE_PULSEAUDIO=no 413 PROBE_WINAUDIO=no 414 415 case "$TARGET_OS" in 416 darwin*) PROBE_COREAUDIO=yes; 417 ;; 418 linux-*) PROBE_ALSA=yes; PROBE_OSS=yes; PROBE_ESD=yes; PROBE_PULSEAUDIO=yes; 419 ;; 420 freebsd-*) PROBE_OSS=yes; 421 ;; 422 windows) PROBE_WINAUDIO=yes 423 ;; 424 esac 425 426 ORG_CFLAGS=$CFLAGS 427 ORG_LDFLAGS=$LDFLAGS 428 429 if [ "$OPTION_IGNORE_AUDIO" = "yes" ] ; then 430 PROBE_ESD_ESD=no 431 PROBE_ALSA=no 432 PROBE_PULSEAUDIO=no 433 fi 434 435 # Probe a system library 436 # 437 # $1: Variable name (e.g. PROBE_ESD) 438 # $2: Library name (e.g. "Alsa") 439 # $3: Path to source file for probe program (e.g. android/config/check-alsa.c) 440 # $4: Package name (e.g. libasound-dev) 441 # 442 probe_system_library () 443 { 444 if [ `var_value $1` = yes ] ; then 445 CFLAGS="$ORG_CFLAGS" 446 LDFLAGS="$ORG_LDFLAGS -ldl" 447 cp -f android/config/check-esd.c $TMPC 448 compile 449 if [ $? = 0 ] ; then 450 log "AudioProbe : $2 seems to be usable on this system" 451 else 452 if [ "$OPTION_IGNORE_AUDIO" = no ] ; then 453 echo "The $2 development files do not seem to be installed on this system" 454 echo "Are you missing the $4 package ?" 455 echo "You can ignore this error with --ignore-audio, otherwise correct" 456 echo "the issue(s) below and try again:" 457 cat $TMPL 458 clean_exit 459 fi 460 eval $1=no 461 log "AudioProbe : $2 seems to be UNUSABLE on this system !!" 462 fi 463 clean_temp 464 fi 465 } 466 467 probe_system_library PROBE_ESD ESounD android/config/check-esd.c libesd-dev 468 probe_system_library PROBE_ALSA Alsa android/config/check-alsa.c libasound-dev 469 probe_system_library PROBE_PULSEAUDIO PulseAudio android/config/check-pulseaudio.c libpulse-dev 470 471 CFLAGS=$ORG_CFLAGS 472 LDFLAGS=$ORG_LDFLAGS 473 474 # create the objs directory that is going to contain all generated files 475 # including the configuration ones 476 # 477 mkdir -p $OUT_DIR 478 479 ### 480 ### Compiler probe 481 ### 482 483 #### 484 #### Host system probe 485 #### 486 487 # because the previous version could be read-only 488 clean_temp 489 490 # check host endianess 491 # 492 HOST_BIGENDIAN=no 493 if [ "$TARGET_OS" = "$OS" ] ; then 494 cat > $TMPC << EOF 495 #include <inttypes.h> 496 int main(int argc, char ** argv){ 497 volatile uint32_t i=0x01234567; 498 return (*((uint8_t*)(&i))) == 0x01; 499 } 500 EOF 501 feature_run_exec HOST_BIGENDIAN 502 fi 503 504 # check whether we have <byteswap.h> 505 # 506 feature_check_header HAVE_BYTESWAP_H "<byteswap.h>" 507 feature_check_header HAVE_MACHINE_BSWAP_H "<machine/bswap.h>" 508 feature_check_header HAVE_FNMATCH_H "<fnmatch.h>" 509 510 # check for Mingw version. 511 MINGW_VERSION= 512 if [ "$TARGET_OS" = "windows" ]; then 513 log "Mingw : Probing for GCC version." 514 GCC_VERSION=$($CC -v 2>&1 | awk '$1 == "gcc" && $2 == "version" { print $3; }') 515 GCC_MAJOR=$(echo "$GCC_VERSION" | cut -f1 -d.) 516 GCC_MINOR=$(echo "$GCC_VERSION" | cut -f2 -d.) 517 log "Mingw : Found GCC version $GCC_MAJOR.$GCC_MINOR [$GCC_VERSION]" 518 MINGW_GCC_VERSION=$(( $GCC_MAJOR * 100 + $GCC_MINOR )) 519 fi 520 # Build the config.make file 521 # 522 523 case $OS in 524 windows) 525 HOST_EXEEXT=.exe 526 HOST_DLLEXT=.dll 527 ;; 528 darwin) 529 HOST_EXEEXT= 530 HOST_DLLEXT=.dylib 531 ;; 532 *) 533 HOST_EXEEXT= 534 HOST_DLLEXT= 535 ;; 536 esac 537 538 case $TARGET_OS in 539 windows) 540 TARGET_EXEEXT=.exe 541 TARGET_DLLEXT=.dll 542 ;; 543 darwin) 544 TARGET_EXEXT= 545 TARGET_DLLEXT=.dylib 546 ;; 547 *) 548 TARGET_EXEEXT= 549 TARGET_DLLEXT=.so 550 ;; 551 esac 552 553 # Strip executables and shared libraries unless --debug is used. 554 if [ "$OPTION_DEBUG" != "yes" -a "$OPTION_NO_STRIP" != "yes" ]; then 555 case $HOST_OS in 556 darwin) 557 LDFLAGS="$LDFLAGS -Wl,-S" 558 ;; 559 *) 560 LDFLAGS="$LDFLAGS -Wl,--strip-all" 561 ;; 562 esac 563 fi 564 565 create_config_mk "$OUT_DIR" 566 echo "" >> $config_mk 567 echo "HOST_PREBUILT_TAG := $TARGET_OS" >> $config_mk 568 echo "HOST_EXEEXT := $TARGET_EXEEXT" >> $config_mk 569 echo "HOST_DLLEXT := $TARGET_DLLEXT" >> $config_mk 570 echo "PREBUILT := $ANDROID_PREBUILT" >> $config_mk 571 echo "PREBUILTS := $ANDROID_PREBUILTS" >> $config_mk 572 573 echo "" >> $config_mk 574 echo "BUILD_OS := $HOST_OS" >> $config_mk 575 echo "BUILD_ARCH := $HOST_ARCH" >> $config_mk 576 echo "BUILD_EXEEXT := $HOST_EXEEXT" >> $config_mk 577 echo "BUILD_DLLEXT := $HOST_DLLEXT" >> $config_mk 578 echo "BUILD_AR := $BUILD_AR" >> $config_mk 579 echo "BUILD_CC := $BUILD_CC" >> $config_mk 580 echo "BUILD_CXX := $BUILD_CXX" >> $config_mk 581 echo "BUILD_LD := $BUILD_LD" >> $config_mk 582 echo "BUILD_CFLAGS := $BUILD_CFLAGS" >> $config_mk 583 echo "BUILD_LDFLAGS := $BUILD_LDFLAGS" >> $config_mk 584 585 PWD=`pwd` 586 echo "SRC_PATH := $PWD" >> $config_mk 587 if [ -n "$SDL_CONFIG" ] ; then 588 echo "QEMU_SDL_CONFIG := $SDL_CONFIG" >> $config_mk 589 fi 590 echo "CONFIG_COREAUDIO := $PROBE_COREAUDIO" >> $config_mk 591 echo "CONFIG_WINAUDIO := $PROBE_WINAUDIO" >> $config_mk 592 echo "CONFIG_ESD := $PROBE_ESD" >> $config_mk 593 echo "CONFIG_ALSA := $PROBE_ALSA" >> $config_mk 594 echo "CONFIG_OSS := $PROBE_OSS" >> $config_mk 595 echo "CONFIG_PULSEAUDIO := $PROBE_PULSEAUDIO" >> $config_mk 596 echo "BUILD_STANDALONE_EMULATOR := true" >> $config_mk 597 if [ $OPTION_DEBUG = yes ] ; then 598 echo "BUILD_DEBUG_EMULATOR := true" >> $config_mk 599 fi 600 if [ $OPTION_STATIC = yes ] ; then 601 echo "CONFIG_STATIC_EXECUTABLE := true" >> $config_mk 602 fi 603 if [ "$GLES_SUPPORT" = "yes" ]; then 604 echo "EMULATOR_BUILD_EMUGL := true" >> $config_mk 605 echo "EMULATOR_EMUGL_SOURCES_DIR := $GLES_DIR" >> $config_mk 606 fi 607 608 if [ -n "$ANDROID_SDK_TOOLS_REVISION" ] ; then 609 echo "ANDROID_SDK_TOOLS_REVISION := $ANDROID_SDK_TOOLS_REVISION" >> $config_mk 610 fi 611 612 if [ "$OPTION_MINGW" = "yes" ] ; then 613 echo "" >> $config_mk 614 echo "USE_MINGW := 1" >> $config_mk 615 echo "HOST_OS := windows" >> $config_mk 616 echo "HOST_MINGW_VERSION := $MINGW_GCC_VERSION" >> $config_mk 617 fi 618 619 if [ "$HOST_OS" = "darwin" ]; then 620 echo "mac_sdk_root := $OSX_SDK_ROOT" >> $config_mk 621 echo "mac_sdk_version := $OSX_SDK_VERSION" >> $config_mk 622 fi 623 624 # Build the config-host.h file 625 # 626 config_h=$OUT_DIR/config-host.h 627 cat > $config_h <<EOF 628 /* This file was autogenerated by '$PROGNAME' */ 629 630 #define CONFIG_QEMU_SHAREDIR "/usr/local/share/qemu" 631 632 EOF 633 634 if [ "$HAVE_BYTESWAP_H" = "yes" ] ; then 635 echo "#define CONFIG_BYTESWAP_H 1" >> $config_h 636 fi 637 if [ "$HAVE_MACHINE_BYTESWAP_H" = "yes" ] ; then 638 echo "#define CONFIG_MACHINE_BSWAP_H 1" >> $config_h 639 fi 640 if [ "$HAVE_FNMATCH_H" = "yes" ] ; then 641 echo "#define CONFIG_FNMATCH 1" >> $config_h 642 fi 643 echo "#define CONFIG_GDBSTUB 1" >> $config_h 644 echo "#define CONFIG_SLIRP 1" >> $config_h 645 echo "#define CONFIG_SKINS 1" >> $config_h 646 echo "#define CONFIG_TRACE 1" >> $config_h 647 648 case "$TARGET_OS" in 649 windows) 650 echo "#define CONFIG_WIN32 1" >> $config_h 651 ;; 652 *) 653 echo "#define CONFIG_POSIX 1" >> $config_h 654 ;; 655 esac 656 657 case "$TARGET_OS" in 658 linux-*) 659 echo "#define CONFIG_KVM_GS_RESTORE 1" >> $config_h 660 ;; 661 esac 662 663 # only Linux has fdatasync() 664 case "$TARGET_OS" in 665 linux-*) 666 echo "#define CONFIG_FDATASYNC 1" >> $config_h 667 ;; 668 esac 669 670 case "$TARGET_OS" in 671 linux-*|darwin-*) 672 echo "#define CONFIG_MADVISE 1" >> $config_h 673 ;; 674 esac 675 676 # the -nand-limits options can only work on non-windows systems 677 if [ "$TARGET_OS" != "windows" ] ; then 678 echo "#define CONFIG_NAND_LIMITS 1" >> $config_h 679 fi 680 echo "#define QEMU_VERSION \"0.10.50\"" >> $config_h 681 echo "#define QEMU_PKGVERSION \"Android\"" >> $config_h 682 case "$CPU" in 683 x86) CONFIG_CPU=I386 684 ;; 685 ppc) CONFIG_CPU=PPC 686 ;; 687 x86_64) CONFIG_CPU=X86_64 688 ;; 689 *) CONFIG_CPU=$CPU 690 ;; 691 esac 692 if [ "$HOST_BIGENDIAN" = "1" ] ; then 693 echo "#define HOST_WORDS_BIGENDIAN 1" >> $config_h 694 fi 695 BSD=0 696 case "$TARGET_OS" in 697 linux-*) CONFIG_OS=LINUX 698 ;; 699 darwin-*) CONFIG_OS=DARWIN 700 BSD=1 701 ;; 702 freebsd-*) CONFIG_OS=FREEBSD 703 BSD=1 704 ;; 705 windows*) CONFIG_OS=WIN32 706 ;; 707 *) CONFIG_OS=$OS 708 esac 709 710 if [ "$OPTION_STATIC" = "yes" ] ; then 711 echo "CONFIG_STATIC_EXECUTABLE := true" >> $config_mk 712 echo "#define CONFIG_STATIC_EXECUTABLE 1" >> $config_h 713 fi 714 715 case $TARGET_OS in 716 linux-*|darwin-*) 717 echo "#define CONFIG_IOVEC 1" >> $config_h 718 ;; 719 esac 720 721 echo "#define CONFIG_$CONFIG_OS 1" >> $config_h 722 if [ $BSD = 1 ] ; then 723 echo "#define CONFIG_BSD 1" >> $config_h 724 echo "#define O_LARGEFILE 0" >> $config_h 725 echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h 726 fi 727 728 case "$TARGET_OS" in 729 linux-*) 730 echo "#define CONFIG_SIGNALFD 1" >> $config_h 731 ;; 732 esac 733 734 echo "#define CONFIG_ANDROID 1" >> $config_h 735 736 log "Generate : $config_h" 737 738 # Generate the QAPI headers and sources from qapi-schema.json 739 # Ideally, this would be done in our Makefiles, but as far as I 740 # understand, the platform build doesn't support a single tool 741 # that generates several sources files, nor the standalone one. 742 export PYTHONDONTWRITEBYTECODE=1 743 AUTOGENERATED_DIR=qapi-auto-generated 744 python scripts/qapi-types.py qapi.types --output-dir=$AUTOGENERATED_DIR -b < qapi-schema.json 745 python scripts/qapi-visit.py --output-dir=$AUTOGENERATED_DIR -b < qapi-schema.json 746 python scripts/qapi-commands.py --output-dir=$AUTOGENERATED_DIR -m < qapi-schema.json 747 log "Generate : $AUTOGENERATED_DIR" 748 749 clean_temp 750 751 echo "Ready to go. Type 'make' to build emulator" 752