#!/bin/sh # # configure -- custom configure script for ScummVM. # # ScummVM is the legal property of its developers, whose names # are too numerous to list here. Please refer to the COPYRIGHT # file distributed with this source distribution. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # $URL$ # $Id$ # Save the current environment variables for next runs SAVED_CONFIGFLAGS=$@ SAVED_LDFLAGS=$LDFLAGS SAVED_CXX=$CXX SAVED_CXXFLAGS=$CXXFLAGS SAVED_CPPFLAGS=$CPPFLAGS SAVED_ASFLAGS=$ASFLAGS SAVED_WINDRESFLAGS=$WINDRESFLAGS # Use environment vars if set CXXFLAGS="$CXXFLAGS $CPPFLAGS" # Backslashes into forward slashes: # The following OS/2 specific code is performed to deal with handling of backslashes by ksh. # Borrowed from the Sane configure script if test "$ac_emxsupport" != "no" -a "$ac_emxsupport" != "NO"; then ac_save_IFS="$IFS" IFS="\\" ac_TEMP_PATH= for ac_dir in $PATH; do IFS=$ac_save_IFS if test -z "$ac_TEMP_PATH"; then ac_TEMP_PATH="$ac_dir" else ac_TEMP_PATH="$ac_TEMP_PATH/$ac_dir" fi done PATH="$ac_TEMP_PATH" export PATH unset ac_TEMP_PATH fi set_var() { eval ${1}='${2}' } get_var() { eval echo \$${1} } # Add an engine: id name build subengines add_engine() { _engines="${_engines} ${1}" set_var _engine_${1}_name "${2}" set_var _engine_${1}_build "${3}" set_var _engine_${1}_subengines "${4}" for sub in ${4}; do set_var _engine_${sub}_sub "yes" done } add_engine scumm "SCUMM" yes "scumm_7_8 he" add_engine scumm_7_8 "v7 & v8 games" yes add_engine he "HE71+ games" yes add_engine agi "AGI" yes add_engine agos "AGOS" yes "agos2" add_engine agos2 "AGOS 2 games" yes add_engine cine "Cinematique evo 1" yes add_engine cruise "Cinematique evo 2" yes add_engine draci "Dragon History" yes add_engine drascula "Drascula: The Vampire Strikes Back" yes add_engine gob "Gobli*ns" yes add_engine groovie "Groovie" yes "groovie2" add_engine groovie2 "Groovie 2 games" no add_engine kyra "Legend of Kyrandia" yes "lol" add_engine lol "Lands of Lore" no add_engine lure "Lure of the Temptress" yes add_engine m4 "M4/MADS" no add_engine made "MADE" yes add_engine mohawk "Mohawk" no add_engine parallaction "Parallaction" yes add_engine queen "Flight of the Amazon Queen" yes add_engine saga "SAGA" yes "ihnm saga2" add_engine ihnm "IHNM" yes add_engine saga2 "SAGA 2 games" no add_engine sci "SCI" yes "sci32" add_engine sci32 "SCI32 games" no add_engine sky "Beneath a Steel Sky" yes add_engine sword1 "Broken Sword" yes add_engine sword2 "Broken Sword II" yes add_engine teenagent "Teen Agent" yes add_engine tinsel "Tinsel" yes add_engine touche "Touche: The Adventures of the Fifth Musketeer" yes add_engine tucker "Bud Tucker in Double Trouble" yes # # Default settings # # Default lib behaviour yes/no/auto _vorbis=auto _tremor=auto _flac=auto _mad=auto _alsa=auto _zlib=auto _mpeg2=no _fluidsynth=auto _16bit=auto _readline=auto # Default option behaviour yes/no _debug_build=auto _release_build=auto _text_console=no _mt32emu=yes _build_scalers=yes _build_hq_scalers=yes _indeo3=auto _enable_prof=no # Default vkeybd/keymapper options _vkeybd=no _keymapper=no # GUI translation options _translation=yes # Default platform settings _backend=sdl _endian=unknown _need_memalign=no _have_x86=no _verbose_build=no _dynamic_modules=no _plugins_default=static _nasm=auto # Default commands _ranlib=ranlib _strip=strip _ar="ar cru" _as="as" _windres=windres _win32path="C:/scummvm" _aos4path="Games:ScummVM" _staticlibpath=/sw _sdlconfig=sdl-config _sdlpath="$PATH" _nasmpath="$PATH" NASMFLAGS="" NASM="" # Directories for installing ScummVM. # This list is closely based on what GNU autoconf does, # although the default value for datadir differs. # Like GNU autoconf, we distinguish datadir and datarootdir # to make it possible to change e.g. the location of the # man pages independently of that of the engine data files, # which are placed inside $datadir/scummvm exec_prefix=NONE prefix=NONE bindir='${exec_prefix}/bin' datarootdir='${prefix}/share' datadir='${datarootdir}/scummvm' docdir='${datarootdir}/doc/scummvm' libdir='${exec_prefix}/lib' #localedir='${datarootdir}/locale' mandir='${datarootdir}/man' # For cross compiling _host="" _host_cpu="" _host_vendor="" _host_os="" _host_alias="" _srcdir=`dirname $0` _port_mk="ports.mk" # Determine a tmp file name, using mktemp(1) when available. if type mktemp > /dev/null 2>&1 ; then TMPO=`mktemp /tmp/scummvm-conf.XXXXXXXXXX` else TMPO=./scummvm-conf fi TMPC=${TMPO}.cpp TMPLOG=config.log cc_check_no_clean() { echo >> "$TMPLOG" cat "$TMPC" >> "$TMPLOG" echo >> "$TMPLOG" echo "$CXX $LDFLAGS $CXXFLAGS $TMPC -o $TMPO$HOSTEXEEXT $@" >> "$TMPLOG" rm -f "$TMPO$HOSTEXEEXT" ( $CXX $LDFLAGS $CXXFLAGS "$TMPC" -o "$TMPO$HOSTEXEEXT" "$@" ) >> "$TMPLOG" 2>&1 TMP="$?" echo "return code: $TMP" >> "$TMPLOG" echo >> "$TMPLOG" return "$TMP" } cc_check_clean() { rm -rf $TMPC $TMPO $TMPO.o $TMPO.dSYM $TMPO$HOSTEXEEXT "$@" } cc_check() { cc_check_no_clean "$@" TMP="$?" cc_check_clean return "$TMP" } cc_check_define() { cat > $TMPC << EOF int main(void) { #ifndef $1 syntax error #endif return 0; } EOF cc_check -c return $? } gcc_get_define() { # Note: The AmigaOS compiler doesn't like the "-" input file, so a real file # is used instead rm -f $TMPC touch $TMPC $CXX -dM -E $TMPC | fgrep "$1" | head -n1 | cut -d ' ' -f 3- rm -f $TMPC } # # Function to provide echo -n for bourne shells that don't have it # echo_n() { printf "$@" } echocheck() { echo_n "Checking for $@... " } # Add a line of data to config.mk. add_line_to_config_mk() { _config_mk_data="$_config_mk_data"' '"$1" } # Add a line of data to config.h. add_line_to_config_h() { _config_h_data="$_config_h_data"' '"$1" } add_to_config_h_if_yes() { if test "$1" = yes ; then add_line_to_config_h "$2" else add_line_to_config_h "/* $2 */" fi } # Conditionally add a line of data to config.mk. Takes two parameters: # The first one can be set to 'no' to "comment out" the line, i.e. # make it ineffective, use 'yes' otherwise. # The second param is the line to insert. add_to_config_mk_if_yes() { if test "$1" = yes ; then add_line_to_config_mk "$2" else add_line_to_config_mk "# $2" fi } # Conditionally add a line of data to config.mk. Takes two parameters: # The first one can be set to 'yes' to "comment out" the line, i.e. # make it ineffective, use 'no' otherwise. # The second param is the line to insert. add_to_config_mk_if_no() { if test "$1" = no ; then add_line_to_config_mk "$2" else add_line_to_config_mk "# $2" fi } # # Determine sdl-config # # TODO: small bit of code to test sdl usability find_sdlconfig() { echo_n "Looking for sdl-config... " sdlconfigs="$_sdlconfig:sdl-config:sdl11-config:sdl12-config" _sdlconfig= IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="$SEPARATOR" for path_dir in $_sdlpath; do #reset separator to parse sdlconfigs IFS=":" for sdlconfig in $sdlconfigs; do if test -f "$path_dir/$sdlconfig" ; then _sdlconfig="$path_dir/$sdlconfig" echo $_sdlconfig # Save the prefix _sdlpath=$path_dir if test `basename $path_dir` = bin ; then _sdlpath=`dirname $path_dir` fi # break at first sdl-config found in path break 2 fi done done IFS="$ac_save_ifs" if test -z "$_sdlconfig"; then echo "none found!" exit 1 fi } # # Determine extension used for executables # get_system_exe_extension() { case $1 in arm-riscos) _exeext=",ff8" ;; dreamcast | gamecube | ds | ps2 | psp | wii) _exeext=".elf" ;; gp2x-linux) _exeext=".gp2x" ;; gp2xwiz-linux) _exeext=".wiz" ;; mingw* | *os2-emx | wince) _exeext=".exe" ;; *) _exeext="" ;; esac } # # Generic options functions # # Show the configure help line for an option option_help() { tmpopt=`echo $1 | sed 's/_/-/g'` option=`echo "--${tmpopt} " | sed "s/\(.\{23\}\).*/\1/"` echo " ${option} ${2}" } # Show an error about an unknown option option_error() { echo "error: unrecognised option: $ac_option Try \`$0 --help' for more information." >&2 exit 1 } # # Engine handling functions # # Get the name of the engine get_engine_name() { get_var _engine_$1_name } # Will this engine be built? get_engine_build() { get_var _engine_$1_build } # Get the subengines get_engine_subengines() { get_var _engine_$1_subengines } # Ask if this is a subengine get_engine_sub() { sub=`get_var _engine_$1_sub` if test -z "$sub" ; then sub=no fi echo $sub } # Enable *all* engines engine_enable_all() { for engine in $_engines; do set_var _engine_${engine}_build "yes" done } # Disable *all* engines engine_disable_all() { for engine in $_engines; do set_var _engine_${engine}_build "no" done } # Enable the given engine engine_enable() { # Get the parameter if ( echo $1 | grep '=' ) 2> /dev/null > /dev/null ; then eng=`echo $1 | cut -d '=' -f 1` opt=`echo $1 | cut -d '=' -f 2` else eng=$1 opt=yes fi engine=`echo $eng | sed 's/-/_/g'` # Filter the parameter for the subengines if test "`get_engine_sub ${engine}`" != "no" -a "$opt" != "yes" ; then option_error return fi if test "$opt" = "static" -o "$opt" = "dynamic" -o "$opt" = "yes" ; then if test "`get_engine_name ${engine}`" != "" ; then set_var _engine_${engine}_build "$opt" else option_error fi else option_error fi } # Disable the given engine engine_disable() { # Filter malformed options if ( echo $1 | grep '=' ) 2> /dev/null > /dev/null ; then option_error return fi engine=`echo $1 | sed 's/-/_/g'` if test "`get_engine_name ${engine}`" != "" ; then set_var _engine_${engine}_build "no" else option_error fi } # Show the configure help line for a given engine show_engine_help() { if test `get_engine_build $1` = yes ; then option="disable" do="don't " else option="enable" do="" fi name=`get_engine_name $1` option_help ${option}-${1} "${do}build the ${name} engine" for sub in `get_engine_subengines $1`; do show_subengine_help $sub $1 done } # Show the configure help line for a given subengine show_subengine_help() { if test `get_engine_build $1` = yes ; then option="disable" do="exclude" else option="enable" do="include" fi name=`get_engine_name $1` parent=`get_engine_name $2` option_help ${option}-${1} "${do} the ${name} in ${parent} engine" } # Prepare the strings about the engines to build prepare_engine_build_strings() { string=`get_engine_build_string $1 static` if test -n "$string" ; then _engines_built_static="${_engines_built_static}#$string@" fi string=`get_engine_build_string $1 dynamic` if test -n "$string" ; then _engines_built_dynamic="${_engines_built_dynamic}#$string@" fi string=`get_engine_build_string $1 no` if test -n "$string" ; then _engines_skipped="${_engines_skipped}#$string@" fi } # Get the string about building an engine get_engine_build_string() { engine_string="" engine_build=`get_engine_build $1` show=no # Check if the current engine should be shown for the current status if test $engine_build = $2 ; then show=yes else # Test for disabled sub-engines if test $2 = no ; then for subeng in `get_engine_subengines $1` ; do if test `get_engine_build $subeng` = no ; then engine_build=no show=yes fi done fi fi # Convert static/dynamic to yes to ease the check of subengines if test $engine_build != no ; then engine_build=yes fi # The engine should be shown, build the string if test $show = yes ; then build_string_func=get_${1}_build_string if ( type $build_string_func | grep function ) 2> /dev/null > /dev/null ; then engine_string=`$build_string_func $1 $engine_build` else engine_string=`get_subengines_build_string $1 $engine_build` fi engine_string="`get_engine_name $1` $engine_string" fi echo $engine_string } # Get the string about building subengines get_subengines_build_string() { all=yes subengine_string=$3 for subeng in `get_engine_subengines $1` ; do if test `get_engine_build $subeng` = $2 ; then subengine_string="$subengine_string [`get_engine_name $subeng`]" else all=no fi done if test $2 != no ; then if test -n "$subengine_string" ; then if test $all = yes ; then subengine_string="[all games]" fi fi fi echo $subengine_string } # Engine specific build strings get_scumm_build_string() { if test `get_engine_build $1` != no ; then if test $2 != no ; then base="[v0-v6 games]" fi get_subengines_build_string $1 $2 "$base" fi } get_saga_build_string() { if test `get_engine_build $1` != no ; then if test $2 != no ; then base="[ITE]" fi get_subengines_build_string $1 $2 "$base" fi } # # Greet user # echo "Running ScummVM configure..." echo "Configure run on" `date` > $TMPLOG # # Check any parameters we received # # TODO: # * Change --disable-mad / --enable-mad to the way it's done in autoconf: # That is, --without-mad / --with-mad=/prefix/to/mad. Useful for people # who have Mad/Vorbis/ALSA installed in a non-standard locations. # for parm in "$@" ; do if test "$parm" = "--help" || test "$parm" = "-help" || test "$parm" = "-h" ; then for engine in $_engines; do if test `get_engine_sub $engine` = no ; then engines_help="$engines_help`show_engine_help $engine` " fi done cat << EOF Usage: $0 [OPTIONS]... Configuration: -h, --help display this help and exit --backend=BACKEND backend to build (dc, gp2x, gp2xwiz, iphone, linuxmoto, ds, null, ps2, psp, sdl, wii, wince) [sdl] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`/usr/local/bin', \`/usr/local/lib' etc. You can specify an installation prefix other than \`/usr/local' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --libdir=DIR object code libraries [EPREFIX/lib] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR/scummvm] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/scummvm] Special configuration feature: --host=HOST cross-compile to target HOST (arm-linux, ...) special targets: dreamcast for Sega Dreamcast gamecube for Nintendo GameCube iphone for Apple iPhone linupy for Yopy PDA ds for Nintendo DS ps2 for PlayStation 2 psp for PlayStation Portable wii for Nintendo Wii wince for Windows CE Game engines: --enable-all-engines enable all engines --disable-all-engines disable all engines $engines_help Optional Features: --disable-debug disable building with debugging symbols --enable-Werror treat warnings as errors --enable-release enable building in release mode (this activates optimizations) --enable-profiling enable profiling --enable-plugins enable the support for dynamic plugins --default-dynamic make plugins dynamic by default --disable-mt32emu don't enable the integrated MT-32 emulator --disable-16bit don't enable 16bit color support --disable-scalers exclude scalers --disable-hq-scalers exclude HQ2x and HQ3x scalers --disable-translation don't build support for translated messages --enable-text-console use text console instead of graphical console --enable-verbose-build enable regular echoing of commands during build process Optional Libraries: --with-alsa-prefix=DIR Prefix where alsa is installed (optional) --disable-alsa disable ALSA midi sound support [autodetect] --with-ogg-prefix=DIR Prefix where libogg is installed (optional) --with-vorbis-prefix=DIR Prefix where libvorbis is installed (optional) --disable-vorbis disable Ogg Vorbis support [autodetect] --with-tremor-prefix=DIR Prefix where tremor is installed (optional) --disable-tremor disable tremor support [autodetect] --with-mad-prefix=DIR Prefix where libmad is installed (optional) --disable-mad disable libmad (MP3) support [autodetect] --with-flac-prefix=DIR Prefix where libFLAC is installed (optional) --disable-flac disable FLAC support [autodetect] --with-zlib-prefix=DIR Prefix where zlib is installed (optional) --disable-zlib disable zlib (compression) support [autodetect] --with-mpeg2-prefix=DIR Prefix where libmpeg2 is installed (optional) --enable-mpeg2 enable mpeg2 codec for cutscenes [no] --disable-indeo3 disable Indeo3 decoder [autodetect] --with-fluidsynth-prefix=DIR Prefix where libfluidsynth is installed (optional) --disable-fluidsynth disable fluidsynth MIDI driver [autodetect] --with-sdl-prefix=DIR Prefix where the sdl-config script is installed (optional) --with-nasm-prefix=DIR Prefix where nasm executable is installed (optional) --disable-nasm disable assembly language optimizations [autodetect] --with-readline-prefix=DIR Prefix where readline is installed (optional) --disable-readline disable readline support in text console [autodetect] Some influential environment variables: LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPPFLAGS C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory ASFLAGS assembler flags WINDRESFLAGS Windows resource compiler flags EOF exit 0 fi done # for parm in ... for ac_option in $@; do case "$ac_option" in --disable-16bit) _16bit=no ;; --disable-scalers) _build_scalers=no ;; --disable-hq-scalers) _build_hq_scalers=no ;; --enable-alsa) _alsa=yes ;; --disable-alsa) _alsa=no ;; --enable-vorbis) _vorbis=yes ;; --disable-vorbis) _vorbis=no ;; --enable-tremor) _tremor=yes ;; --disable-tremor) _tremor=no ;; --enable-flac) _flac=yes ;; --disable-flac) _flac=no ;; --enable-mad) _mad=yes ;; --disable-mad) _mad=no ;; --enable-zlib) _zlib=yes ;; --disable-zlib) _zlib=no ;; --enable-nasm) _nasm=yes ;; --disable-nasm) _nasm=no ;; --enable-mpeg2) _mpeg2=yes ;; --disable-indeo3) _indeo3=no ;; --enable-indeo3) _indeo3=yes ;; --disable-fluidsynth) _fluidsynth=no ;; --enable-readline) _readline=yes ;; --disable-readline) _readline=no ;; --enable-verbose-build) _verbose_build=yes ;; --enable-plugins) _dynamic_modules=yes ;; --default-dynamic) _plugins_default=dynamic ;; --enable-mt32emu) _mt32emu=yes ;; --disable-mt32emu) _mt32emu=no ;; --enable-translation) _translation=yes ;; --disable-translation) _translation=no ;; --enable-vkeybd) _vkeybd=yes ;; --disable-vkeybd) _vkeybd=no ;; --enable-keymapper) _keymapper=yes ;; --disable-keymapper) _keymapper=no ;; --enable-text-console) _text_console=yes ;; --disable-text-console) _text_console=no ;; --with-fluidsynth-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` FLUIDSYNTH_CFLAGS="-I$arg/include" FLUIDSYNTH_LIBS="-L$arg/lib" ;; --with-mpeg2-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` MPEG2_CFLAGS="-I$arg/include" MPEG2_LIBS="-L$arg/lib" ;; --with-alsa-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` ALSA_CFLAGS="-I$arg/include" ALSA_LIBS="-L$arg/lib" ;; --with-ogg-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` OGG_CFLAGS="-I$arg/include" OGG_LIBS="-L$arg/lib" ;; --with-vorbis-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` VORBIS_CFLAGS="-I$arg/include" VORBIS_LIBS="-L$arg/lib" ;; --with-tremor-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` TREMOR_CFLAGS="-I$arg/include" TREMOR_LIBS="-L$arg/lib" ;; --with-flac-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` FLAC_CFLAGS="-I$arg/include" FLAC_LIBS="-L$arg/lib" ;; --with-mad-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` MAD_CFLAGS="-I$arg/include" MAD_LIBS="-L$arg/lib" ;; --with-zlib-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` ZLIB_CFLAGS="-I$arg/include" ZLIB_LIBS="-L$arg/lib" ;; --with-readline-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` READLINE_CFLAGS="-I$arg/include" READLINE_LIBS="-L$arg/lib" ;; --backend=*) _backend=`echo $ac_option | cut -d '=' -f 2` ;; --enable-debug) _debug_build=yes ;; --disable-debug) _debug_build=no ;; --enable-Werror) CXXFLAGS="$CXXFLAGS -Werror" ;; --enable-release) _release_build=yes ;; --disable-release) _release_build=no ;; --enable-profiling) _enable_prof=yes ;; --with-sdl-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` _sdlpath="$arg:$arg/bin" ;; --with-nasm-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` _nasmpath="$arg:$arg/bin" ;; --with-staticlib-prefix=*) _staticlibpath=`echo $ac_option | cut -d '=' -f 2` ;; --host=*) _host=`echo $ac_option | cut -d '=' -f 2` ;; --exec-prefix=*) exec_prefix=`echo $ac_option | cut -d '=' -f 2` ;; --prefix=*) prefix=`echo $ac_option | cut -d '=' -f 2` ;; --bindir=*) bindir=`echo $ac_option | cut -d '=' -f 2` ;; --mandir=*) mandir=`echo $ac_option | cut -d '=' -f 2` ;; --datarootdir=*) datarootdir=`echo $ac_option | cut -d '=' -f 2` ;; --datadir=*) datadir=`echo $ac_option | cut -d '=' -f 2` ;; --libdir=*) libdir=`echo $ac_option | cut -d '=' -f 2` ;; --enable-all-engines) engine_enable_all ;; --disable-all-engines) engine_disable_all ;; --enable-*) engine_enable `echo $ac_option | cut -d '-' -f 4-` ;; --disable-*) engine_disable `echo $ac_option | cut -d '-' -f 4-` ;; *) option_error ;; esac; done; guessed_host=`$_srcdir/config.guess` get_system_exe_extension $guessed_host NATIVEEXEEXT=$_exeext case $_host in arm-riscos) _host_os=riscos _host_cpu=arm ;; dreamcast) _host_os=dreamcast _host_cpu=sh _host_alias=sh-elf CXXFLAGS="$CXXFLAGS -ml -m4-single-only" LDFLAGS="$LDFLAGS -ml -m4-single-only" ;; gamecube) _host_os=gamecube _host_cpu=ppc _host_alias=powerpc-gekko ;; gp2x) _host_os=gp2x-linux _host_cpu=arm _host_alias=arm-open2x-linux ;; gp2xwiz) _host_os=gp2xwiz-linux _host_cpu=arm _host_alias=arm-open2x-linux ;; i586-mingw32msvc) _host_os=mingw32msvc _host_cpu=i586 ;; iphone) _host_os=iphone _host_cpu=arm _host_alias=arm-apple-darwin9 ;; linupy) _host_os=linux _host_cpu=arm ;; motoezx) _host_os=linux _host_cpu=arm _host_alias=arm-linux-gnu ;; motomagx) _host_os=linux _host_cpu=arm _host_alias=arm-linux-gnueabi ;; ds) _host_os=ds _host_cpu=arm _host_alias=arm-eabi ;; neuros) _host_os=linux _host_cpu=arm ;; ppc-amigaos) _host_os=amigaos _host_cpu=ppc ;; ps2) _host_os=ps2 _host_cpu=mips64r5900el _host_alias=ee if test "$_debug_build" = auto; then # Disable debug mode by default. The resulting binaries are far too big in general, # and one has to disable multiple engines to make it usable. _debug_build=no fi if test "$_release_build" = auto; then # Enable release build by default. _release_build=yes fi ;; psp) _host_os=psp _host_cpu=mipsallegrexel _host_alias=psp if test -z "$PSPDEV"; then PSPDEV=`psp-config --pspdev-path` fi if test -d "$PSPDEV/psp/lib"; then LDFLAGS="$LDFLAGS -L$PSPDEV/psp/lib" fi LDFLAGS="$LDFLAGS -L$PSPDEV/psp/sdk/lib -specs=$_srcdir/backends/platform/psp/psp.spec" ;; samsungtv) _host_os=linux _host_cpu=arm _host_alias=arm-linux-gnueabi ;; wii) _host_os=wii _host_cpu=ppc _host_alias=powerpc-gekko ;; wince) _host_os=wince _host_cpu=arm _host_alias=arm-wince-mingw32ce ;; android) _host_os=android _host_cpu=arm _host_alias=arm-oe-linux-androideabi ;; *) if test -n "$_host"; then guessed_host=`$_srcdir/config.sub $_host` fi _host_cpu=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` _host_vendor=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` _host_os=`echo $guessed_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ;; esac if test -z "$_host_alias"; then _host_alias="$_host_cpu-$_host_os" else # if _host_alias was set, default to the standard GNU tools _ranlib=$_host_alias-ranlib _strip=$_host_alias-strip _ar="$_host_alias-ar cru" _as="$_host_alias-as" _windres=$_host_alias-windres fi # # Determine extra build flags for debug and/or release builds # if test "$_debug_build" != no; then # debug mode not explicitly disabled -> compile with -g CXXFLAGS="$CXXFLAGS -g" fi if test "$_release_build" = yes; then # Release mode enabled: enable optimizations. This also # makes it possible to use -Wuninitialized, so let's do that. # We will also add a define, which indicates we are doing # an build for a release version. CXXFLAGS="$CXXFLAGS -O2 -Wuninitialized -DRELEASE_BUILD" fi # # Determine extension used for executables # get_system_exe_extension $_host_os HOSTEXEEXT=$_exeext # # Determine separator used for $PATH # case $_host_os in os2-emx* ) SEPARATOR=";" ;; * ) SEPARATOR=":" ;; esac # # Platform specific sanity checks # case $_host_os in gamecube | ds | wii) if test -z "$DEVKITPRO"; then echo "Please set DEVKITPRO in your environment. export DEVKITPRO=" exit 1 fi ;; ps2) if test -z "$PS2SDK"; then echo "Please set PS2SDK in your environment. export PS2SDK=" exit 1 fi ;; psp) PSPSDK=`psp-config --pspsdk-path` if test -z "$PSPSDK"; then echo "Please set the path to PSPSDK in your environment." exit 1 fi ;; android) if test -z "$ANDROID_SDK"; then echo "Please set ANDROID_SDK in your environment. export ANDROID_SDK=" exit 1 fi ;; *) ;; esac # # Determine the C++ compiler # echo_n "Looking for C++ compiler... " # Check whether the given command is a working C++ compiler test_compiler() { cat > tmp_cxx_compiler.cpp << EOF class Foo { int a; }; int main(int argc, char **argv) { Foo *a = new Foo(); delete a; return 0; } EOF echo "testing compiler: $1" >> "$TMPLOG" if test -n "$_host"; then # In cross-compiling mode, we cannot run the result eval "$1 $CXXFLAGS $LDFLAGS -o $TMPO.o -c tmp_cxx_compiler.cpp" 2> /dev/null && cc_check_clean tmp_cxx_compiler.cpp else eval "$1 $CXXFLAGS $LDFLAGS -o $TMPO$HOSTEXEEXT tmp_cxx_compiler.cpp" 2> /dev/null && eval "$TMPO$HOSTEXEEXT 2> /dev/null" && cc_check_clean tmp_cxx_compiler.cpp fi } # Prepare a list of candidates for the C++ compiler if test -n "$CXX" && test_compiler "$CXX"; then # Use the compiler specified in CXX echo $CXX else if test -n "$_host"; then compilers="$_host_alias-g++ $_host_alias-c++ $_host-g++ $_host-c++" else compilers="g++ c++" fi # Iterate over all candidates, pick the first working one CXX= for compiler in $compilers; do if test_compiler $compiler; then echo "success testing compiler: $1" >> "$TMPLOG" CXX=$compiler echo $CXX break else echo "failure testing compiler: $1" >> "$TMPLOG" fi done fi if test -z "$CXX"; then echo "none found!" exit 1 fi # By default, use the C++ compiler as linker LD=$CXX # # Determine the compiler version # echocheck "compiler version" have_gcc=no cc_check_define __GNUC__ && have_gcc=yes if test "$have_gcc" = yes; then add_line_to_config_mk 'HAVE_GCC = 1' _cxx_major=`gcc_get_define __GNUC__` _cxx_minor=`gcc_get_define __GNUC_MINOR__` cxx_version="`( $CXX -dumpversion ) 2>&1`" if test -n "`gcc_get_define __clang__`"; then add_line_to_config_mk 'HAVE_CLANG = 1' fi if test "$_cxx_major" -eq 2 && test "$_cxx_minor" -ge 95 || \ test "$_cxx_major" -gt 2 ; then cxx_version="$cxx_version, ok" cxx_verc_fail=no else cxx_version="$cxx_version, bad" cxx_verc_fail=yes fi else # TODO: Big scary warning about unsupported compilers cxx_version=`( $CXX -version ) 2>&1` if test "$?" -eq 0; then cxx_version="`echo "${cxx_version}" | sed -ne 's/^.*[^0-9]\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/gp'`" if test -z "${cxx_version}"; then cxx_version="not found" cxx_verc_fail=yes fi echo non-gcc compiler version ${cxx_version} else cxx_version="not found" cxx_verc_fail=yes echo found non-gcc compiler version ${cxx_version} fi case $_host_os in irix*) case $cxx_version in 7.4.4*) # We just assume this is SGI MIPSpro _cxx_major=7 _cxx_minor=4 cxx_verc_fail=no add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MDupdate "$(*D)/$(DEPDIR)/$(*F).d"' add_line_to_config_mk '-include Makedepend' ;; *) cxx_version="$cxx_version, bad" cxx_verc_fail=yes ;; esac ;; *) cxx_version="$cxx_version, bad" cxx_verc_fail=yes ;; esac fi echo "$cxx_version" if test "$cxx_verc_fail" = yes ; then echo echo "The version of your compiler is not supported at this time" echo "Please ensure you are using GCC >= 2.95" exit 1 fi # # Check for endianness # echo_n "Checking endianness... " cat > tmp_endianness_check.cpp << EOF short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; void _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; } short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; void _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; } int main() { _ascii (); _ebcdic (); return 0; } EOF $CXX $CXXFLAGS -c -o $TMPO.o tmp_endianness_check.cpp if strings $TMPO.o | grep BIGenDianSyS >/dev/null; then _endian=big else _endian=little fi echo $_endian; cc_check_clean tmp_endianness_check.cpp # # Determine a data type with the given length # find_type_with_size() { for datatype in int short char long unknown; do cat > tmp_find_type_with_size.cpp << EOF typedef $datatype ac__type_sizeof_; int main() { static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) == $1)]; test_array [0] = 0; return 0; } EOF if $CXX $CXXFLAGS -c -o $TMPO.o tmp_find_type_with_size.cpp 2>/dev/null ; then break else if test "$datatype" = "unknown"; then echo "couldn't find data type with $1 bytes" exit 1 fi continue fi done cc_check_clean tmp_find_type_with_size.cpp echo $datatype } # # Determine data type sizes # echo_n "Type with 1 byte... " type_1_byte=`find_type_with_size 1` TMP="$?" echo "$type_1_byte" test $TMP -eq 0 || exit 1 # check exit code of subshell echo_n "Type with 2 bytes... " type_2_byte=`find_type_with_size 2` TMP="$?" echo "$type_2_byte" test $TMP -eq 0 || exit 1 # check exit code of subshell echo_n "Type with 4 bytes... " type_4_byte=`find_type_with_size 4` TMP="$?" echo "$type_4_byte" test $TMP -eq 0 || exit 1 # check exit code of subshell # # Check whether we can use x86 asm routines # echo_n "Compiling for x86... " case $_host_cpu in i386|i486|i586|i686) _have_x86=yes ;; *) _have_x86=no ;; esac echo "$_have_x86" # # Determine build settings # echo_n "Checking hosttype... " echo $_host_os case $_host_os in amigaos*) CXXFLAGS="$CXXFLAGS -mcrt=newlib -mstrict-align -mcpu=750 -mtune=7400" LDFLAGS="$LDFLAGS -mcrt=newlib -use-dynld -Lsobjs:" # We have to use 'long' for our 4 byte typedef because AmigaOS already typedefs (u)int32 # as (unsigned) long, and consequently we'd get a compiler error otherwise. type_4_byte='long' ;; beos*) DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE" # Needs -lbind -lsocket for the timidity MIDI driver LDFLAGS="-L/boot/home/config/lib" CFLAGS="-I/boot/home/config/include" CXXFLAGS="$CXXFLAGS -fhuge-objects" LIBS="$LIBS -lbind -lsocket" ;; bsd* | hpux* | netbsd* | openbsd* | sunos*) DEFINES="$DEFINES -DUNIX" ;; cygwin*) echo ERROR: Cygwin building is not supported by ScummVM anymore. Consider using MinGW. exit 1 ;; darwin*) DEFINES="$DEFINES -DUNIX -DMACOSX" LIBS="$LIBS -framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI" add_line_to_config_mk 'MACOSX = 1' ;; dreamcast) DEFINES="$DEFINES -D__DC__ -DNONSTANDARD_PORT" ;; freebsd*) DEFINES="$DEFINES -DUNIX" LDFLAGS="$LDFLAGS -L/usr/local/lib" CXXFLAGS="$CXXFLAGS -I/usr/local/include" ;; gamecube) CXXFLAGS="$CXXFLAGS -Os -mogc -mcpu=750 -meabi -mhard-float" CXXFLAGS="$CXXFLAGS -ffunction-sections -fdata-sections -fmodulo-sched" CXXFLAGS="$CXXFLAGS -I$DEVKITPRO/libogc/include -I$DEVKITPRO/cube/include" # libogc is required to link the cc tests (includes _start()) LDFLAGS="$LDFLAGS -mogc -mcpu=750 -L$DEVKITPRO/libogc/lib/cube -L$DEVKITPRO/cube/lib -logc" ;; haiku*) DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE" # Needs -lnetwork for the timidity MIDI driver LIBS="$LIBS -lnetwork" CXXFLAGS="$CXXFLAGS -fhuge-objects" ;; irix*) DEFINES="$DEFINES -DUNIX -DIRIX -DSYSTEM_NOT_SUPPORTING_D_TYPE" LIBS="$LIBS -lmd -lfastm -lm" _ranlib=: ;; linux* | uclinux*) # When not cross-compiling, enable large file support, but don't # care if getconf doesn't exist or doesn't recognize LFS_CFLAGS. if test -z "$_host"; then CXXFLAGS="$CXXFLAGS $(getconf LFS_CFLAGS 2>/dev/null)" fi DEFINES="$DEFINES -DUNIX" ;; mingw*) DEFINES="$DEFINES -DWIN32 -D__USE_MINGW_ANSI_STDIO=0" LIBS="$LIBS -lmingw32 -lwinmm" OBJS="$OBJS scummvmico.o" ;; mint*) DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE" ;; ds) # TODO Nintendo DS DEFINES="$DEFINES -D__DS__ -DNDS -DARM9 -DARM -DNONSTANDARD_PORT -I$DEVKITPRO/libnds/include -isystem $DEVKITPRO/devkitARM/arm-eabi/include" ;; os2-emx*) DEFINES="$DEFINES -DUNIX" ;; ps2) # TODO ps2 CXXFLAGS="$CXXFLAGS -G2" DEFINES="$DEFINES -D_EE -D__PLAYSTATION2__" ;; psp) CXXFLAGS="$CXXFLAGS -O3 -I$PSPSDK/include -D_PSP_FW_VERSION=150" ;; solaris*) DEFINES="$DEFINES -DUNIX -DSOLARIS -DSYSTEM_NOT_SUPPORTING_D_TYPE" # Needs -lbind -lsocket for the timidity MIDI driver LIBS="$LIBS -lnsl -lsocket" ;; wii) CXXFLAGS="$CXXFLAGS -Os -mrvl -mcpu=750 -meabi -mhard-float" CXXFLAGS="$CXXFLAGS -ffunction-sections -fdata-sections -fmodulo-sched" CXXFLAGS="$CXXFLAGS -I$DEVKITPRO/libogc/include -I$DEVKITPRO/wii/include" # libogc is required to link the cc tests (includes _start()) LDFLAGS="$LDFLAGS -mrvl -mcpu=750 -L$DEVKITPRO/libogc/lib/wii -L$DEVKITPRO/wii/lib -logc" ;; wince) CXXFLAGS="$CXXFLAGS -O3 -march=armv4 -mtune=xscale" DEFINES="$DEFINES -D_WIN32_WCE=300 -D__ARM__ -D_ARM_ -DUNICODE -DFPM_DEFAULT -DNONSTANDARD_PORT" DEFINES="$DEFINES -DWIN32 -Dcdecl= -D__cdecl__=" ;; android) DEFINES="$DEFINES -DUNIX" CXXFLAGS="$CXXFLAGS -Os -msoft-float -mtune=xscale -march=armv5te -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__" add_line_to_config_mk "ANDROID_SDK = $ANDROID_SDK" ;; # given this is a shell script assume some type of unix *) echo "WARNING: could not establish system type, assuming unix like" DEFINES="$DEFINES -DUNIX" ;; esac if test -n "$_host"; then # Cross-compiling mode - add your target here if needed echo "Cross-compiling to $_host" case "$_host" in arm-linux|arm*-linux-gnueabi|arm-*-linux) DEFINES="$DEFINES -DUNIX" _need_memalign=yes add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' add_line_to_config_mk 'USE_ARM_GFX_ASM = 1' add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1' add_line_to_config_mk 'USE_ARM_SCALER_ASM = 1' ;; arm-riscos|linupy) DEFINES="$DEFINES -DUNIX -DLINUPY" _need_memalign=yes ;; bfin*) _need_memalign=yes ;; *darwin*) _ranlib=$_host-ranlib _strip=$_host-strip ;; dreamcast) DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE" CXXFLAGS="$CXXFLAGS -O3 -funroll-loops -fschedule-insns2 -fomit-frame-pointer -fdelete-null-pointer-checks" _need_memalign=yes _backend="dc" _build_scalers="no" _mad="yes" _zlib="yes" add_line_to_config_mk 'ronindir = /usr/local/ronin' _port_mk="backends/platform/dc/dreamcast.mk" ;; gamecube) _endian=big _need_memalign=yes _backend="wii" _build_scalers="no" _mt32emu="no" _port_mk="backends/platform/wii/wii.mk" add_line_to_config_mk 'GAMECUBE = 1' add_line_to_config_h '#define GAMECUBE' add_line_to_config_h "/* #define DEBUG_WII_USBGECKO */" add_line_to_config_h "/* #define DEBUG_WII_MEMSTATS */" add_line_to_config_h "/* #define DEBUG_WII_GDB */" ;; gp2x) DEFINES="$DEFINES -DUNIX -DGP2X -DNDEBUG" CXXFLAGS="$CXXFLAGS -march=armv4t" ASFLAGS="$ASFLAGS -mfloat-abi=soft" LDFLAGS="$LDFLAGS -static" _need_memalign=yes add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' add_line_to_config_mk 'USE_ARM_GFX_ASM = 1' add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1' add_line_to_config_mk 'USE_ARM_SCALER_ASM = 1' _backend="gp2x" _build_hq_scalers="no" _mt32emu="no" _vkeybd="yes" _port_mk="backends/platform/gp2x/gp2x-bundle.mk" ;; gp2xwiz) DEFINES="$DEFINES -DUNIX -DGP2XWIZ -DNDEBUG" CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s -mtune=arm926ej-s" ASFLAGS="$ASFLAGS -mfloat-abi=soft" _need_memalign=yes add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' add_line_to_config_mk 'USE_ARM_GFX_ASM = 1' add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1' add_line_to_config_mk 'USE_ARM_SCALER_ASM = 1' _backend="gp2xwiz" _build_hq_scalers="no" _mt32emu="no" _vkeybd="yes" _port_mk="backends/platform/gp2xwiz/gp2xwiz-bundle.mk" ;; iphone) DEFINES="$DEFINES -DIPHONE -DUNIX" _need_memalign=yes add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' _backend="iphone" _build_hq_scalers="no" ;; m68k-atari-mint) DEFINES="$DEFINES -DUNIX -DSYSTEM_NOT_SUPPORTING_D_TYPE" _endian=big _need_memalign=yes _ranlib=m68k-atari-mint-ranlib _ar="m68k-atari-mint-ar cru" ;; *mingw32*) _sdlconfig=$_host-sdl-config _windres=$_host-windres _ar="$_host-ar cru" _ranlib=$_host-ranlib ;; mips-sgi*) _endian=big _need_memalign=yes ;; motoezx) DEFINES="$DEFINES -DUNIX -DMOTOEZX" ASFLAGS="$ASFLAGS -mfpu=vfp" _need_memalign=yes add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' add_line_to_config_mk 'USE_ARM_GFX_ASM = 1' add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1' add_line_to_config_mk 'USE_ARM_SCALER_ASM = 1' _backend="linuxmoto" _build_hq_scalers="no" _mt32emu="no" _vkeybd="yes" _port_mk="backends/platform/linuxmoto/linuxmoto.mk" ;; motomagx) DEFINES="$DEFINES -DUNIX -DMOTOMAGX" ASFLAGS="$ASFLAGS -mfpu=vfp" _need_memalign=yes add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' add_line_to_config_mk 'USE_ARM_GFX_ASM = 1' add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1' add_line_to_config_mk 'USE_ARM_SCALER_ASM = 1' _backend="linuxmoto" _build_hq_scalers="no" _mt32emu="no" _vkeybd="yes" _port_mk="backends/platform/linuxmoto/linuxmoto.mk" ;; ds) # TODO: complete this DEFINES="$DEFINES -DDISABLE_FANCY_THEMES -DVECTOR_RENDERER_FORMAT=1555" DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER" DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE -DSTREAM_AUDIO_FROM_DISK" DEFINES="$DEFINES -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE" _need_memalign=yes _backend="ds" _build_hq_scalers="no" _mt32emu="no" _port_mk="backends/platform/ds/ds.mk" # TODO: Enable more ARM optimizations -- requires testing! add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' #add_line_to_config_mk 'USE_ARM_GFX_ASM = 1' #add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1' #add_line_to_config_mk 'USE_ARM_SCALER_ASM = 1' ;; neuros) DEFINES="$DEFINES -DUNIX -DNEUROS" _need_memalign=yes _backend='null' _build_hq_scalers="no" _mt32emu="no" ;; ppc-amigaos) _endian=big _need_memalign=yes ;; ps2) # TODO: complete this DEFINES="$DEFINES -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE -DDISABLE_DOSBOX_OPL" _need_memalign=yes _backend="ps2" _build_scalers="no" _mt32emu="no" # HACK to enable mad & zlib (they are not properly detected due to linker issues). # This trick doesn't work for tremor right now, as the PS2 port the resulting library # libtremor, while our code later on expects it to be called libvorbisidec. # TODO: Enable tremor, e.g. by adding -ltremor or by renaming the lib. _mad="yes" _zlib="yes" # HACK to fix compilation of C source files for now. add_line_to_config_mk 'CC = ee-gcc' # HACK to fix linking for now. It seems ee-g++ does not handle linking correctly. LD=ee-gcc if test "$_debug_build" = yes; then # TODO: Setup debug build properly DEFINES="$DEFINES -D__PS2_DEBUG__" #INCLUDES="$INCLUDES -I$(PS2GDB)/ee" #LDFLAGS="$LDFLAGS -L$(PS2GDB)/lib" LDFLAGS="$LDFLAGS -lps2gdbStub -lps2ip -ldebug" else # If not building for debug mode, strip binaries. CXXFLAGS="$CXXFLAGS -s" fi ;; psp) _need_memalign=yes _backend="psp" _build_scalers="no" _mt32emu="no" _port_mk="backends/platform/psp/psp.mk" ;; samsungtv) DEFINES="$DEFINES -DUNIX -DSAMSUNGTV -DDISABLE_COMMAND_LINE" ASFLAGS="$ASFLAGS -mfpu=vfp" HOSTEXEEXT=".so" _need_memalign=yes add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' add_line_to_config_mk 'USE_ARM_GFX_ASM = 1' add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1' add_line_to_config_mk 'USE_ARM_SCALER_ASM = 1' _backend="samsungtv" _mt32emu="no" _vkeybd="yes" ;; wii) _endian=big _need_memalign=yes _backend="wii" _build_scalers="no" _port_mk="backends/platform/wii/wii.mk" add_line_to_config_mk 'GAMECUBE = 0' add_line_to_config_h "#define DEBUG_WII_USBGECKO" add_line_to_config_h "/* #define DEBUG_WII_MEMSTATS */" add_line_to_config_h "/* #define DEBUG_WII_GDB */" add_line_to_config_h "#define USE_WII_DI" add_line_to_config_h "#define USE_WII_SMB" add_line_to_config_h "#define USE_WII_KBD" ;; wince) LDFLAGS="$LDFLAGS -Wl,-Map,scummvm.exe.map -Wl,--stack,65536" _need_memalign=yes add_line_to_config_mk 'USE_TREMOLO = 1' add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' add_line_to_config_mk 'USE_ARM_GFX_ASM = 1' add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1' add_line_to_config_mk 'USE_ARM_SCALER_ASM = 1' _backend="wince" _mt32emu="no" _port_mk="backends/platform/wince/wince.mk" ;; android) DEFINES="$DEFINES -DANDROID -DUNIX -DUSE_ARM_SMUSH_ASM" _need_memalign=yes add_line_to_config_mk 'USE_ARM_SOUND_ASM = 1' add_line_to_config_mk 'USE_ARM_SMUSH_ASM = 1' add_line_to_config_mk 'USE_ARM_GFX_ASM = 1' add_line_to_config_mk 'USE_ARM_SCALER_ASM = 1' add_line_to_config_mk 'USE_ARM_COSTUME_ASM = 1' _backend="android" _port_mk="backends/platform/android/android.mk" ;; *) echo "WARNING: Unknown target, continuing with auto-detected values" ;; esac else # # Check whether memory alignment is required # echo_n "Alignment required... " case $_host_cpu in alpha*) # Hardcode alignment requirements for Alpha processsors _need_memalign=yes ;; arm*) _need_memalign=yes ;; mips*) # Hardcode alignment requirements for MIPS processsors. # While these can emulate unaligned memory access, this # emulation is rather slow. _need_memalign=yes ;; sh*) # Hardcode alignment requirements for SH processsors. # While these can emulate unaligned memory access, this # emulation is rather slow. _need_memalign=yes ;; *) # Try to auto-detect.... cat > $TMPC << EOF #include #include int main(int argc, char **argv) { unsigned char test[8] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; signal(SIGBUS, exit); signal(SIGABRT, exit); signal(SIGSEGV, exit); if (*((unsigned int *)(test + 1)) != 0x55443322 && *((unsigned int *)(test + 1)) != 0x22334455) { return 1; } return 0; } EOF _need_memalign=yes cc_check_no_clean && $TMPO$HOSTEXEEXT && _need_memalign=no cc_check_clean ;; esac echo "$_need_memalign" fi # # Enable 16bit support only for backends which support it # case $_backend in dreamcast | samsungtv | sdl | wii | psp) if test "$_16bit" = auto ; then _16bit=yes else _16bit=no fi ;; *) _16bit=no ;; esac # # Add the results of the above checks to config.h # case $_endian in big) add_line_to_config_h '/* #define SCUMM_LITTLE_ENDIAN */' add_line_to_config_h '#define SCUMM_BIG_ENDIAN' ;; little) add_line_to_config_h '#define SCUMM_LITTLE_ENDIAN' add_line_to_config_h '/* #define SCUMM_BIG_ENDIAN */' ;; *) exit 1 ;; esac add_to_config_h_if_yes $_have_x86 '#define HAVE_X86' add_to_config_h_if_yes $_need_memalign '#define SCUMM_NEED_ALIGNMENT' # # Check whether to enable a verbose build # echo_n "Checking whether to have a verbose build... " echo "$_verbose_build" add_to_config_mk_if_yes "$_verbose_build" 'VERBOSE_BUILD = 1' # # Check whether plugin support is requested and possible # echo_n "Checking whether building plugins was requested... " echo "$_dynamic_modules" _mak_plugins= _def_plugin="/* -> plugins disabled */" if test "$_dynamic_modules" = yes ; then echo_n "Checking whether building plugins is supported... " case $_host_os in darwin*) _def_plugin=' #define PLUGIN_PREFIX "" #define PLUGIN_SUFFIX ".plugin" ' _mak_plugins=' DYNAMIC_MODULES := 1 PLUGIN_PREFIX := PLUGIN_SUFFIX := .plugin PLUGIN_EXTRA_DEPS = $(EXECUTABLE) CXXFLAGS += -DDYNAMIC_MODULES PLUGIN_LDFLAGS += -bundle -bundle_loader $(EXECUTABLE) -exported_symbols_list "$(srcdir)/plugin.exp" PRE_OBJS_FLAGS := -all_load POST_OBJS_FLAGS := LIBS += -ldl ' ;; dreamcast) _def_plugin=' #define PLUGIN_PREFIX "" #define PLUGIN_SUFFIX ".plg" ' _mak_plugins=' DYNAMIC_MODULES := 1 PLUGIN_PREFIX := PLUGIN_SUFFIX := .plg PLUGIN_EXTRA_DEPS = $(abspath $(srcdir)/backends/platform/dc/plugin.x $(srcdir)/backends/platform/dc/plugin.syms) $(EXECUTABLE) CXXFLAGS += -DDYNAMIC_MODULES PLUGIN_LDFLAGS = -ml -m4-single-only -nostartfiles -Wl,-q,-T$(srcdir)/backends/platform/dc/plugin.x,--just-symbols,$(EXECUTABLE),--retain-symbols-file,$(srcdir)/backends/platform/dc/plugin.syms -L$(ronindir)/lib PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--no-whole-archive ' ;; freebsd*) _def_plugin=' #define PLUGIN_PREFIX "lib" #define PLUGIN_SUFFIX ".so" ' _mak_plugins=' DYNAMIC_MODULES := 1 PLUGIN_PREFIX := lib PLUGIN_SUFFIX := .so PLUGIN_EXTRA_DEPS = CXXFLAGS += -DDYNAMIC_MODULES CXXFLAGS += -fpic PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; gp2xwiz*) _def_plugin=' #define PLUGIN_PREFIX "" #define PLUGIN_SUFFIX ".plugin" ' _mak_plugins=' DYNAMIC_MODULES := 1 PLUGIN_PREFIX := PLUGIN_SUFFIX := .plugin PLUGIN_EXTRA_DEPS = $(EXECUTABLE) CXXFLAGS += -DDYNAMIC_MODULES CXXFLAGS += -fpic PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive LIBS += -ldl ' ;; linux*|android) _def_plugin=' #define PLUGIN_PREFIX "lib" #define PLUGIN_SUFFIX ".so" ' _mak_plugins=' DYNAMIC_MODULES := 1 PLUGIN_PREFIX := lib PLUGIN_SUFFIX := .so PLUGIN_EXTRA_DEPS = CXXFLAGS += -DDYNAMIC_MODULES CXXFLAGS += -fpic PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive LIBS += -ldl ' ;; *mingw32*) _def_plugin=' #define PLUGIN_PREFIX "" #define PLUGIN_SUFFIX ".dll" ' _mak_plugins=' DYNAMIC_MODULES := 1 PLUGIN_PREFIX := PLUGIN_SUFFIX := .dll PLUGIN_EXTRA_DEPS = $(EXECUTABLE) CXXFLAGS += -DDYNAMIC_MODULES PLUGIN_LDFLAGS := -Wl,--enable-auto-import -shared ./libscummvm.a PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--export-all-symbols -Wl,--no-whole-archive -Wl,--out-implib,./libscummvm.a ' ;; psp) _def_plugin=' #define PLUGIN_PREFIX "" #define PLUGIN_SUFFIX ".plg" ' _mak_plugins=' DYNAMIC_MODULES := 1 PLUGIN_PREFIX := PLUGIN_SUFFIX := .plg PLUGIN_EXTRA_DEPS = $(EXECUTABLE) CXXFLAGS += -DDYNAMIC_MODULES LDFLAGS += -Wl,-T$(srcdir)/backends/platform/psp/main_prog.ld PLUGIN_LDFLAGS = -nostartfiles -Wl,-q,--just-symbols,$(EXECUTABLE),--retain-symbols-file,$(srcdir)/backends/platform/psp/plugin.syms,-T$(srcdir)/backends/platform/psp/plugin.ld -lstdc++ -lc -lm PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--no-whole-archive ' ;; *) _dynamic_modules=no _mak_plugins= _def_plugin= ;; esac echo "$_dynamic_modules" fi # # Check whether integrated MT-32 emulator support is requested # if test "$_mt32emu" = no ; then _def_mt32emu='#undef USE_MT32EMU' else _def_mt32emu='#define USE_MT32EMU' fi add_to_config_mk_if_yes "$_mt32emu" 'USE_MT32EMU = 1' # # Check whether 16bit color support is requested # if test "$_16bit" = no ; then _def_16bit='#undef USE_RGB_COLOR' else _def_16bit='#define USE_RGB_COLOR' fi add_to_config_mk_if_yes "$_16bit" 'USE_RGB_COLOR = 1' # # Check whether to enable the (hq) scalers # if test "$_build_scalers" = no ; then _build_hq_scalers=no _def_scalers='#undef USE_SCALERS' else _def_scalers='#define USE_SCALERS' fi add_to_config_mk_if_yes "$_build_scalers" 'USE_SCALERS = 1' if test "$_build_hq_scalers" = no ; then _def_hq_scalers='#undef USE_HQ_SCALERS' else _def_hq_scalers='#define USE_HQ_SCALERS' fi add_to_config_mk_if_yes "$_build_hq_scalers" 'USE_HQ_SCALERS = 1' # # Check whether to compile the Indeo3 decoder # if test "$_indeo3" = auto ; then # Autodetect. Build if either the gob engine or plugins are enabled if test `get_engine_build gob` = yes || test "$_dynamic_modules" = yes ; then _indeo3="yes" else _indeo3="no" fi fi if test "$_indeo3" = no ; then _def_indeo3='#undef USE_INDEO3' else _def_indeo3='#define USE_INDEO3' fi add_to_config_mk_if_yes "$_indeo3" 'USE_INDEO3 = 1' # # Check for math lib # cat > $TMPC << EOF int main(void) { return 0; } EOF cc_check -lm && LIBS="$LIBS -lm" # # Check for Ogg Vorbis # echocheck "Ogg Vorbis" if test "$_vorbis" = auto ; then _vorbis=no cat > $TMPC << EOF #include int main(void) { vorbis_packet_blocksize(0,0); return 0; } EOF cc_check $OGG_CFLAGS $OGG_LIBS $VORBIS_CFLAGS $VORBIS_LIBS \ -lvorbisfile -lvorbis -logg && _vorbis=yes fi if test "$_vorbis" = yes ; then _def_vorbis='#define USE_VORBIS' LIBS="$LIBS $OGG_LIBS $VORBIS_LIBS -lvorbisfile -lvorbis -logg" INCLUDES="$INCLUDES $OGG_CFLAGS $VORBIS_CFLAGS" else _def_vorbis='#undef USE_VORBIS' fi add_to_config_mk_if_yes "$_vorbis" 'USE_VORBIS = 1' echo "$_vorbis" # # Check for Tremor # echocheck "Tremor" if test "$_tremor" = auto ; then _tremor=no cat > $TMPC << EOF #include int main(void) { vorbis_info_init(0); return 0; } EOF cc_check $TREMOR_CFLAGS $TREMOR_LIBS -lvorbisidec && \ _tremor=yes fi if test "$_tremor" = yes && test "$_vorbis" = no; then _def_tremor='#define USE_TREMOR' _def_vorbis='#define USE_VORBIS' LIBS="$LIBS $TREMOR_LIBS -lvorbisidec" INCLUDES="$INCLUDES $TREMOR_CFLAGS" else if test "$_vorbis" = yes; then _tremor="no (Ogg Vorbis/Tremor support is mutually exclusive)" fi _def_tremor='#undef USE_TREMOR' fi add_to_config_mk_if_yes "$_tremor" 'USE_TREMOR = 1' echo "$_tremor" # # Check for FLAC # echocheck "FLAC >= 1.0.1" if test "$_flac" = auto ; then _flac=no cat > $TMPC << EOF #include int main(void) { return FLAC__STREAM_SYNC_LEN >> 30; /* guaranteed to be 0 */ } EOF if test "$_vorbis" = yes ; then cc_check $FLAC_CFLAGS $FLAC_LIBS $OGG_CFLAGS $OGG_LIBS \ -lFLAC -logg && _flac=yes else cc_check $FLAC_CFLAGS $FLAC_LIBS \ -lFLAC && _flac=yes fi fi if test "$_flac" = yes ; then _def_flac='#define USE_FLAC' if test "$_vorbis" = yes ; then LIBS="$LIBS $FLAC_LIBS $OGG_LIBS -lFLAC -logg" else LIBS="$LIBS $FLAC_LIBS -lFLAC" fi INCLUDES="$INCLUDES $FLAC_CFLAGS" else _def_flac='#undef USE_FLAC' fi add_to_config_mk_if_yes "$_flac" 'USE_FLAC = 1' echo "$_flac" # # Check for MAD (MP3 library) # echocheck "MAD" if test "$_mad" = auto ; then _mad=no cat > $TMPC << EOF #include int main(void) { return 0; } EOF cc_check $MAD_CFLAGS $MAD_LIBS -lmad && _mad=yes fi if test "$_mad" = yes ; then _def_mad='#define USE_MAD' LIBS="$LIBS $MAD_LIBS -lmad" INCLUDES="$INCLUDES $MAD_CFLAGS" else _def_mad='#undef USE_MAD' fi add_to_config_mk_if_yes "$_mad" 'USE_MAD = 1' echo "$_mad" # # Check for ALSA # echocheck "ALSA >= 0.9" if test "$_alsa" = auto ; then _alsa=no cat > $TMPC << EOF #include int main(void) { return (!(SND_LIB_MAJOR==0 && SND_LIB_MINOR==9)); } EOF cc_check $ALSA_CFLAGS $ALSA_LIBS -lasound && _alsa=yes fi if test "$_alsa" = yes ; then _def_alsa='#define USE_ALSA' LIBS="$LIBS $ALSA_LIBS -lasound" INCLUDES="$INCLUDES $ALSA_CFLAGS" else _def_alsa='#undef USE_ALSA' fi echo "$_alsa" # # Check for ZLib # echocheck "zlib" if test "$_zlib" = auto ; then _zlib=no cat > $TMPC << EOF #include #include int main(void) { return strcmp(ZLIB_VERSION, zlibVersion()); } EOF cc_check $ZLIB_CFLAGS $ZLIB_LIBS -lz && _zlib=yes fi if test "$_zlib" = yes ; then _def_zlib='#define USE_ZLIB' LIBS="$LIBS $ZLIB_LIBS -lz" INCLUDES="$INCLUDES $ZLIB_CFLAGS" else _def_zlib='#undef USE_ZLIB' fi add_to_config_mk_if_yes "$_zlib" 'USE_ZLIB = 1' echo "$_zlib" # # Check for LibMPEG2 # echocheck "libmpeg2 >= 0.3.2" if test "$_mpeg2" = auto ; then _mpeg2=no cat > $TMPC << EOF typedef signed $type_1_byte int8_t; typedef signed $type_2_byte int16_t; typedef signed $type_4_byte int32_t; typedef unsigned $type_1_byte uint8_t; typedef unsigned $type_2_byte uint16_t; typedef unsigned $type_4_byte uint32_t; #include int main(void) { /* mpeg2_state_t first appears in 0.4.0 */ mpeg2_state_t state; #ifdef MPEG2_RELEASE if (MPEG2_RELEASE >= MPEG2_VERSION(0, 3, 2)) return 0; #endif return 1; } EOF if test -n "$_host"; then # don't execute while cross compiling cc_check $MPEG2_CFLAGS $MPEG2_LIBS -lmpeg2 && _mpeg2=yes else cc_check_no_clean $MPEG2_CFLAGS $MPEG2_LIBS -lmpeg2 && $TMPO$HOSTEXEEXT && _mpeg2=yes cc_check_clean fi fi if test "$_mpeg2" = yes ; then _def_mpeg2='#define USE_MPEG2' INCLUDES="$INCLUDES $MPEG2_CFLAGS" LIBS="$LIBS $MPEG2_LIBS -lmpeg2" else _def_mpeg2='#undef USE_MPEG2' fi add_to_config_mk_if_yes "$_mpeg2" 'USE_MPEG2 = 1' echo "$_mpeg2" # # Check for libfluidsynth # echocheck "libfluidsynth" if test "$_fluidsynth" = auto ; then _fluidsynth=no cat > $TMPC << EOF #include int main(void) { return 0; } EOF cc_check $FLUIDSYNTH_CFLAGS $FLUIDSYNTH_LIBS -lfluidsynth && _fluidsynth=yes fi if test "$_fluidsynth" = yes ; then _def_fluidsynth='#define USE_FLUIDSYNTH' case $_host_os in mingw*) LIBS="$LIBS $FLUIDSYNTH_LIBS -lfluidsynth -ldsound -lwinmm" ;; *) LIBS="$LIBS $FLUIDSYNTH_LIBS -lfluidsynth" ;; esac INCLUDES="$INCLUDES $FLUIDSYNTH_CFLAGS" else _def_fluidsynth='#undef USE_FLUIDSYNTH' fi echo "$_fluidsynth" # # Check for readline if text_console is enabled # echocheck "readline" if test "$_text_console" = yes ; then _READLINE_LIBS="-lreadline" if test "$_readline" = auto ; then _readline=no cat > $TMPC << EOF #include #include #include int main(void) { char *x = readline(""); } EOF cc_check $READLINE_CFLAGS $READLINE_LIBS $_READLINE_LIBS && _readline=yes if test "$_readline" = no ; then _READLINE_LIBS="-lreadline -ltermcap" cc_check $READLINE_CFLAGS $READLINE_LIBS $_READLINE_LIBS && _readline=yes fi fi echo "$_readline" else _readline=no echo "skipping (text console disabled)" fi if test "$_readline" = yes ; then _def_readline='#define USE_READLINE' LIBS="$LIBS $READLINE_LIBS $_READLINE_LIBS" INCLUDES="$INCLUDES $READLINE_CFLAGS" else _def_readline='#undef USE_READLINE' fi if test "$_text_console" = yes ; then _def_text_console='#define USE_TEXT_CONSOLE' else _def_text_console='#undef USE_TEXT_CONSOLE' fi # # Check for nasm # if test "$_have_x86" = yes ; then echocheck "nasm" if test "$_nasm" = no ; then echo "disabled" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$SEPARATOR for path_dir in $_nasmpath; do if test -x "$path_dir/nasm$NATIVEEXEEXT" ; then NASM="$path_dir/nasm$NATIVEEXEEXT" NASMFLAGS="-O1 -g" echo $NASM break fi done # fallback to the nasm compatible yasm if test x$NASM = x -o x$NASM = x'"$NASM"'; then for path_dir in $_nasmpath; do if test -x "$path_dir/yasm$NATIVEEXEEXT" ; then NASM="$path_dir/yasm$NATIVEEXEEXT" NASMFLAGS="-a x86 -m x86" echo $NASM break fi done fi IFS="$ac_save_ifs" if test x$NASM = x -o x$NASM = x'"$NASM"'; then echo "not found" _nasm=no else case $_host_os in os2-emx*) NASMFLAGS="$NASMFLAGS -f aout" ;; mingw*) NASMFLAGS="$NASMFLAGS -f win32" ;; darwin*) NASMFLAGS="$NASMFLAGS -f macho" ;; *) NASMFLAGS="$NASMFLAGS -f elf" ;; esac _nasm=yes fi fi fi add_to_config_h_if_yes $_nasm '#define USE_NASM' add_to_config_mk_if_yes $_nasm 'USE_NASM = 1' # # Enable vkeybd / keymapper # if test "$_vkeybd" = yes ; then DEFINES="$DEFINES -DENABLE_VKEYBD" fi if test "$_keymapper" = yes ; then DEFINES="$DEFINES -DENABLE_KEYMAPPER" fi # Check whether to build translation support # echo_n "Building translation support... " add_to_config_mk_if_yes $_translation 'USE_TRANSLATION = 1' add_to_config_h_if_yes $_translation '#define USE_TRANSLATION' if test "$_translation" = no ; then echo "no" else echo_n "yes (" cat > $TMPC << EOF #include int main(void) { setlocale(LC_ALL, ""); return 0; } EOF _detectlang=no cc_check $LDFLAGS $CXXFLAGS && _detectlang=yes add_to_config_h_if_yes $_detectlang '#define USE_DETECTLANG' if test "$_detectlang" = yes ; then echo "with runtime language detection)" else echo "without runtime language detection)" fi fi # # Figure out installation directories # test "x$prefix" = xNONE && prefix=/usr/local test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFINES="$DEFINES -DDATA_PATH=\\\"$datadir\\\"" DEFINES="$DEFINES -DPLUGIN_DIRECTORY=\\\"$libdir/scummvm\\\"" # # Set variables for profiling. # We need to do it here to prevent mess-ups with the tests e.g. on the PSP # if test "$_enable_prof" = yes ; then CXXFLAGS="$CXXFLAGS -pg" LDFLAGS="$LDFLAGS -pg" DEFINES="$DEFINES -DENABLE_PROFILING" fi echo_n "Backend... " echo_n "$_backend" if test "$_nasm" = yes ; then echo_n ", assembly routines" fi if test "$_16bit" = yes ; then echo_n ", 16bit color" fi if test "$_build_scalers" = yes ; then if test "$_build_hq_scalers" = yes ; then echo_n ", HQ scalers" else echo_n ", scalers" fi fi if test "$_mt32emu" = yes ; then echo_n ", MT-32 emu" fi if test "$_indeo3" = yes ; then echo_n ", Indeo3 decoder" fi if test "$_text_console" = yes ; then echo_n ", text console" fi if test "$_vkeybd" = yes ; then echo_n ", virtual keyboard" fi if test "$_keymapper" = yes ; then echo ", keymapper" else echo fi # # Backend related stuff # case $_backend in dc) INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/dc -isystem $(ronindir)/include' LDFLAGS="$LDFLAGS -Wl,-Ttext,0x8c010000 -nostartfiles "'$(ronindir)/lib/crt0.o -L$(ronindir)/lib' LIBS="$LIBS -lronin -lm" ;; gp2x) find_sdlconfig INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" LDFLAGS="$LDFLAGS -static" CXXFLAGS="$CXXFLAGS -march=armv4t" ;; gp2xwiz) find_sdlconfig INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" LDFLAGS="$LDFLAGS" CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s -mtune=arm926ej-s" ;; iphone) OBJCFLAGS="$OBJCFLAGS --std=c99" LIBS="$LIBS -lobjc -framework UIKit -framework CoreGraphics -framework OpenGLES -framework QuartzCore -framework GraphicsServices -framework CoreFoundation -framework Foundation -framework AudioToolbox -framework CoreAudio" ;; linuxmoto) find_sdlconfig INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" DEFINES="$DEFINES -DSDL_BACKEND -DLINUXMOTO" ;; ds) # TODO ds INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/ds/arm9/source -I$(srcdir)/backends/platform/ds/commoninclude' ;; null) DEFINES="$DEFINES -DUSE_NULL_DRIVER" ;; ps2) # TODO ps2 DEFINES="$DEFINES -D_EE -DFORCE_RTL" INCLUDES="$INCLUDES -I$PS2SDK/ee/include -I$PS2SDK/common/include -I$PS2SDK/ports/include" LDFLAGS="$LDFLAGS -mno-crt0 $PS2SDK/ee/startup/crt0.o -T $PS2SDK/ee/startup/linkfile" LDFLAGS="$LDFLAGS -L$PS2SDK/ee/lib -L$PS2SDK/ports/lib" LIBS="$LIBS -lmc -lpad -lmouse -lhdd -lpoweroff -lsjpcm -lm -lc -lfileXio -lkernel -lstdc++ " ;; psp) DEFINES="$DEFINES -D__PSP__ -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE -DDISABLE_DOSBOX_OPL" LIBS="$LIBS -lpng -Wl,-Map,mapfile.txt" ;; samsungtv) find_sdlconfig INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" DEFINES="$DEFINES -DSDL_BACKEND -DSAMSUNGTV" LDFLAGS="$LDFLAGS -shared -fpic" MODULES="$MODULES backends/platform/sdl" ;; sdl) find_sdlconfig INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" DEFINES="$DEFINES -DSDL_BACKEND" ;; wii) DEFINES="$DEFINES -D__WII__ -DGEKKO" case $_host_os in gamecube) LIBS="$LIBS -lgxflux -lfat -logc -ldb" ;; *) LIBS="$LIBS -lgxflux -ldi -ltinysmb -lfat -lwiiuse -lbte -logc -lwiikeyboard -ldb" ;; esac ;; wince) INCLUDES="$INCLUDES "'-I$(srcdir) -I$(srcdir)/backends/platform/wince -I$(srcdir)/engines -I$(srcdir)/backends/platform/wince/missing/gcc -I$(srcdir)/backends/platform/wince/CEgui -I$(srcdir)/backends/platform/wince/CEkeys' LIBS="$LIBS -static -lSDL" ;; android) static_libs='' system_libs='' for lib in $LIBS; do case $lib in -lz|-lm) system_libs="$system_libs $lib" ;; *) static_libs="$static_libs $lib" ;; esac done # -lgcc is carefully placed here - we want to catch # all toolchain symbols in *our* libraries rather # than pick up anything unhygenic from the Android libs. LIBS="-Wl,-Bstatic $static_libs -Wl,-Bdynamic -lgcc $system_libs -lstdc++ -llog -lGLESv1_CM -lEGL" DEFINES="$DEFINES -D__ANDROID__ -DANDROID_BACKEND -DREDUCE_MEMORY_USAGE" add_line_to_config_mk 'PLUGIN_LDFLAGS += $(LDFLAGS) -Wl,-shared,-Bsymbolic' # Work around an Android 2.0+ run-time linker bug: # The linker doesn't actually look in previously # loaded libraries when trying to resolve symbols - # effectively turning all dlopen(RTLD_GLOBAL) calls # into dlopen(RTLD_LOCAL). It *does* look in # DT_NEEDED libraries, so the workaround is to add an # (otherwise unnecessary) dependency from plugins back # to the main libscummvm.so. add_line_to_config_mk 'PLUGIN_LDFLAGS += -Lbuild.tmp -lscummvm' add_line_to_config_mk 'PLUGIN_EXTRA_DEPS += build.tmp/libscummvm.so' ;; *) echo "support for $_backend backend not implemented in configure script yet" exit 1 ;; esac MODULES="$MODULES backends/platform/$_backend" # # Do CXXFLAGS now that we know the compiler version # if test "$have_gcc" = yes ; then if test "$_cxx_major" -ge "3" ; then case $_host_os in # newlib-based system include files suppress non-C89 function # declarations under __STRICT_ANSI__ mingw* | dreamcast | wii | gamecube | ds | psp | wince | amigaos* | android) CXXFLAGS="$CXXFLAGS -W -Wno-unused-parameter" ;; *) CXXFLAGS="$CXXFLAGS -ansi -W -Wno-unused-parameter" ;; esac add_line_to_config_mk 'HAVE_GCC3 = 1' add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' fi; if test "$_cxx_major" -eq 4 && test "$_cxx_minor" -ge 3 || \ test "$_cxx_major" -gt 4 ; then CXXFLAGS="$CXXFLAGS -Wno-empty-body" else CXXFLAGS="$CXXFLAGS -Wconversion" fi; fi; # Some platforms use certain GNU extensions in header files case $_host_os in gamecube | psp | wii | android) ;; *) CXXFLAGS="$CXXFLAGS -pedantic" ;; esac # # Engine selection # _engines_built_static="" _engines_built_dynamic="" _engines_skipped="" for engine in $_engines; do if test "`get_engine_sub $engine`" = "no" ; then # It's a main engine if test `get_engine_build $engine` = no ; then isbuilt=no else # If dynamic plugins aren't supported, mark # all the engines as static if test $_dynamic_modules = no ; then set_var _engine_${engine}_build "static" else # If it wasn't explicitly marked as static or # dynamic, use the configured default if test `get_engine_build $engine` = yes ; then set_var _engine_${engine}_build "${_plugins_default}" fi fi # Prepare the defines if test `get_engine_build $engine` = dynamic ; then isbuilt=DYNAMIC_PLUGIN else set_var _engine_${engine}_build "static" isbuilt=STATIC_PLUGIN fi fi # Prepare the information to be shown prepare_engine_build_strings $engine else # It's a subengine, just say yes or no if test "`get_engine_build $engine`" = "no" ; then isbuilt=no else isbuilt=1 fi fi # Save the settings defname="ENABLE_`echo $engine | tr '[a-z]' '[A-Z]'`" if test "$isbuilt" = "no" ; then add_line_to_config_mk "# $defname" else add_line_to_config_mk "$defname = $isbuilt" fi done # # Show which engines ("frontends") are to be built # echo if test -n "$_engines_built_static" ; then echo "Engines (builtin):" echo $_engines_built_static | sed 's/@/\ /g s/#/ /g' fi if test -n "$_engines_built_dynamic" ; then echo "Engines (plugins):" echo $_engines_built_dynamic | sed 's/@/\ /g s/#/ /g' fi if test -n "$_engines_skipped" ; then echo "Engines Skipped:" echo $_engines_skipped | sed 's/@/\ /g s/#/ /g' fi echo echo "Creating config.h" cat > config.h << EOF /* This file is automatically generated by configure */ /* DO NOT EDIT MANUALLY */ #ifndef CONFIG_H #define CONFIG_H $_config_h_data /* Data types */ typedef unsigned $type_1_byte byte; typedef unsigned int uint; typedef unsigned $type_1_byte uint8; typedef unsigned $type_2_byte uint16; typedef unsigned $type_4_byte uint32; typedef signed $type_1_byte int8; typedef signed $type_2_byte int16; typedef signed $type_4_byte int32; /* Libs */ $_def_vorbis $_def_tremor $_def_flac $_def_mad $_def_alsa $_def_zlib $_def_mpeg2 $_def_fluidsynth $_def_readline /* Options */ $_def_text_console $_def_mt32emu $_def_indeo3 $_def_16bit $_def_scalers $_def_hq_scalers /* Plugin settings */ $_def_plugin #endif /* CONFIG_H */ EOF echo "Creating config.mk" cat > config.mk << EOF # -------- Generated by configure ----------- CXX := $CXX CXXFLAGS := $CXXFLAGS LD := $LD LIBS += $LIBS RANLIB := $_ranlib STRIP := $_strip AR := $_ar AS := $_as ASFLAGS := $ASFLAGS WINDRES := $_windres WINDRESFLAGS := $WINDRESFLAGS WIN32PATH=$_win32path AOS4PATH=$_aos4path STATICLIBPATH=$_staticlibpath BACKEND := $_backend MODULES += $MODULES MODULE_DIRS += $MODULE_DIRS EXEEXT := $HOSTEXEEXT NASM := $NASM NASMFLAGS := $NASMFLAGS prefix = $prefix exec_prefix = $exec_prefix bindir = $bindir datarootdir = $datarootdir datadir = $datadir docdir = $docdir libdir = $libdir mandir = $mandir $_config_mk_data INCLUDES += $INCLUDES OBJS += $OBJS DEFINES += $DEFINES LDFLAGS += $LDFLAGS $_mak_plugins port_mk = $_port_mk SAVED_CONFIGFLAGS := $SAVED_CONFIGFLAGS SAVED_LDFLAGS := $SAVED_LDFLAGS SAVED_CXX := $SAVED_CXX SAVED_CXXFLAGS := $SAVED_CXXFLAGS SAVED_CPPFLAGS := $SAVED_CPPFLAGS SAVED_ASFLAGS := $SAVED_ASFLAGS SAVED_WINDRESFLAGS := $SAVED_WINDRESFLAGS EOF # # Create a custom Makefile when building outside the source tree # TODO: Add a better check than just looking for 'Makefile' # if test ! -f Makefile.common ; then echo "Creating Makefile" cat > Makefile << EOF # -------- Generated by configure ----------- srcdir = $_srcdir vpath %.h \$(srcdir) vpath %.cpp \$(srcdir) vpath %.c \$(srcdir) vpath %.m \$(srcdir) vpath %.mm \$(srcdir) vpath %.asm \$(srcdir) vpath %.s \$(srcdir) vpath %.S \$(srcdir) include \$(srcdir)/Makefile EOF fi