#!/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 3 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, see . # set -a # NLS nuisances. LC_ALL=C LANGUAGE=C # Save the current environment variables for next runs SAVED_CONFIGFLAGS=$@ SAVED_AR=$AR SAVED_AS=$AS SAVED_ASFLAGS=$ASFLAGS SAVED_CPPFLAGS=$CPPFLAGS SAVED_CXX=$CXX SAVED_CXXFLAGS=$CXXFLAGS SAVED_DWP=$DWP SAVED_LD=$LD SAVED_LDFLAGS=$LDFLAGS SAVED_PKG_CONFIG_LIBDIR=${PKG_CONFIG_LIBDIR:-unset} SAVED_RANLIB=$RANLIB SAVED_SDL_CONFIG=$SDL_CONFIG SAVED_STRIP=$STRIP SAVED_WINDRES=$WINDRES SAVED_WINDRESFLAGS=$WINDRESFLAGS # Use environment vars if set CXXFLAGS="$CXXFLAGS $CPPFLAGS" PLUGIN_LDFLAGS=$LDFLAGS # 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" unset ac_TEMP_PATH fi set_var() { eval ${1}='${2}' } get_var() { eval echo \$${1} } append_var() { VAR=${1} shift if eval test -z \"\$${VAR}\" ; then eval ${VAR}='$@' else eval ${VAR}=\"\$${VAR} \"'$@' fi } prepend_var() { VAR=${1} shift if eval test -z \"\$${VAR}\" ; then eval ${VAR}='$@' else eval ${VAR}='$@'\" \$${VAR}\" fi } # Add an engine: id name build subengines base-games dependencies add_engine() { _engines="${_engines} ${1}" if test "${3}" = "no" ; then set_var _wip_engines "${_wip_engines} ${1}" fi set_var _engine_${1}_name "${2}" set_var _engine_${1}_build "${3}" set_var _engine_${1}_build_default "${3}" set_var _engine_${1}_subengines "${4}" set_var _engine_${1}_base "${5}" set_var _engine_${1}_deps "${6}" for sub in ${4}; do set_var _engine_${sub}_sub "yes" set_var _engine_${sub}_parent "${1}" done } # Add a feature: id name settings-list add_feature() { set_var _feature_${1}_name "${2}" # This is a list of settings, where one must be "yes" for the feature to # be enabled set_var _feature_${1}_settings "${3}" } _srcdir=`dirname $0` # Read list of engines for i in $_srcdir/engines/*/configure.engine; do . "$i" done # # Default settings # # Default lib behavior yes/no/auto _sdl=no _ogg=auto _vorbis=auto _sdlnet=auto _libcurl=auto _enet=yes _tremor=auto _tremolo=no _flac=auto _mad=auto _opl2lpt=no _retrowave=auto _alsa=auto _seq_midi=auto _sndio=auto _timidity=auto _zlib=auto _mpeg2=auto _a52=auto _sparkle=auto _osxdockplugin=auto _jpeg=auto _png=auto _gif=auto _theoradec=auto _vpx=auto _faad=auto _fluidsynth=auto _fluidlite=auto _sonivox=auto _opengl_mode=auto _opengl_game_classic=auto _opengl_game_shaders=auto _tinygl=yes _readline=auto _freetype2=auto _libmikmod=auto _libopenmpt=auto _libmpcdec=auto _taskbar=auto _updates=no _libunity=auto _dialogs=auto _tts=auto _gtk=auto _fribidi=auto _discord=auto _test_cxx11=no # Default option behavior yes/no _debug_build=auto _release_build=auto _optimizations=auto _verbose_build=no _werror_build=no _text_console=no _mt32emu=yes _lua=yes _build_scalers=yes _build_hq_scalers=yes _build_edge_scalers=yes _build_aspect=yes _enable_prof=no _enable_asan=no _enable_tsan=no _enable_ubsan=no _bink=yes _cloud=auto _dlc=no _scummvmdlc=no _pandoc=no _curl=yes _lld=no _mold=no _gold=yes # Default vkeybd/eventrec options _vkeybd=no _eventrec=no # GUI translation options _translation=yes # Default platform settings _backend=sdl _16bit=auto _highres=auto _savegame_timestamp=auto _dynamic_modules=no _elf_loader=no _plugins_default=static _plugin_prefix= _plugin_suffix= _nasm=auto _optimization_level= _default_optimization_level=-O2 _nuked_opl=yes _builtin_resources=yes _windows_console=yes _windows_unicode=yes _cygwin_build=no _ext_sse2=auto _ext_avx2=auto _ext_neon=auto # Default commands _ranlib=ranlib _strip=strip _ar="ar cr" _as="as" _dwp=dwp _windres=windres _ldd=ldd _stagingpath="staging" _amigaospath="install" _morphospath="PROGDIR:" _staticlibpath= _xcodetoolspath= _sparklepath= _pkgconfig=pkg-config _sdlconfig=sdl2-config _libcurlconfig=curl-config _libmikmodconfig=libmikmod-config _freetypeconfig=freetype-config _freetype_found="false" _sdlpath="$PATH" _freetypepath="$PATH" _libcurlpath="$PATH" _libmikmodpath="$PATH" _nasmpath="$PATH" NASMFLAGS="" NASM="" _tainted_build=no _pandocformat="default" _pandocext="default" _manualversion="latest" # Detection features to be linked into executable or not _detection_features_static=yes _detection_features_full=yes # The following variables are automatically detected, and should not # be modified otherwise. Consider them read-only. _posix=no _has_posix_spawn=no _has_fseeko_offt_64=no _has_fseeko64=no _has_fopen64=no _endian=unknown _need_memalign=yes _have_x86=no _have_amd64=no _imgui=yes # Add (virtual) features add_feature 16bit "16bit color" "_16bit" add_feature bink "Bink" "_bink" add_feature cloud "cloud" "_cloud" add_feature faad "libfaad" "_faad" add_feature flac "FLAC" "_flac" add_feature freetype2 "FreeType2" "_freetype2" add_feature highres "high resolution" "_highres" add_feature mad "MAD" "_mad" add_feature jpeg "JPEG" "_jpeg" add_feature mpeg2 "mpeg2" "_mpeg2" add_feature opengl_game_classic "OpenGL (classic)" "_opengl_game_classic" add_feature opengl_game_shaders "OpenGL with shaders" "_opengl_game_shaders" add_feature png "PNG" "_png" add_feature gif "GIF" "_gif" add_feature theoradec "libtheoradec" "_theoradec" add_feature tinygl "TinyGL" "_tinygl" add_feature vpx "libvpx" "_vpx" add_feature vorbis "Vorbis file support" "_vorbis _tremor" add_feature zlib "zlib" "_zlib" add_feature lua "lua" "_lua" add_feature fribidi "FriBidi" "_fribidi" add_feature test_cxx11 "Test C++11" "_test_cxx11" add_feature imgui "imgui" "_imgui" # 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 prefix=NONE exec_prefix=NONE bindir='${exec_prefix}/bin' libdir='${exec_prefix}/lib' datarootdir='${prefix}/share' datadir='${datarootdir}/scummvm' mandir='${datarootdir}/man' docdir='${datarootdir}/doc/scummvm' #localedir='${datarootdir}/locale' # For cross compiling _host="" _host_cpu="" _host_vendor="" _host_os="" _host_alias="" _port_mk="ports.mk" # Use temp files in the build directory TMPO=./scummvm-conf 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" if test "-c" = "$*" ; then ( $CXX $CXXFLAGS "$TMPC" -o "$TMPO$HOSTEXEEXT" "$@" ) >> "$TMPLOG" 2>&1 else ( $CXX $LDFLAGS $CXXFLAGS "$TMPC" -o "$TMPO$HOSTEXEEXT" "$@" ) >> "$TMPLOG" 2>&1 fi TMPR="$?" echo "return code: $TMPR" >> "$TMPLOG" echo >> "$TMPLOG" return "$TMPR" } cc_check_clean() { rm -rf $TMPC $TMPO $TMPO.o $TMPO.dwo $TMPO.dSYM $TMPO$HOSTEXEEXT "$@" } cc_check() { cc_check_no_clean "$@" TMPR="$?" cc_check_clean return "$TMPR" } cc_check_define() { cat > $TMPC << EOF int main(void) { #ifndef $1 syntax error #endif return 0; } EOF cc_check -c return $? } gcc_get_define() { echo "" | $CXX -dM -E - | grep -F "$1" | head -n1 | cut -d ' ' -f 3- } # # 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" } # Conditionally add a line of data to config.h. 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_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 '#define' line to config.h. Takes two parameters: # The first one can be set to 'yes' or 'no'. If 'yes' is used, then # the line "#define $2" is added to config.h, otherwise "#undef $2". define_in_config_h_if_yes() { if test "$1" = yes ; then add_line_to_config_h "#define $2" else add_line_to_config_h "#undef $2" fi } # Conditionally add definitions to config.h and config.mk. Takes two parameters: # The first one can be set to 'yes' or 'no'. If 'yes' is used, then # the line "#define $2" is added to config.h and "$2 = 1" to config.mk. # Otherwise "#undef $2" is added to config.h and "# $2 = 1" to config.mk define_in_config_if_yes() { if test "$1" = yes ; then add_line_to_config_h "#define $2" add_line_to_config_mk "$2 = 1" else add_line_to_config_h "#undef $2" add_line_to_config_mk "# $2 = 1" fi } define_in_config_if_no() { if test "$1" = no ; then add_line_to_config_h "#define $2" add_line_to_config_mk "$2 = 1" else add_line_to_config_h "#undef $2" add_line_to_config_mk "# $2 = 1" fi } # # Determine sdl-config # # TODO: small bit of code to test sdl usability find_sdlconfig() { echo_n "Looking for sdl-config... " sdlconfigs="$SDL_CONFIG:$_sdlconfig:sdl2-config:sdl12-config:sdl11-config:sdl-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 # 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 freetype-config # find_freetypeconfig() { echo_n "Looking for freetype-config... " freetypeconfigs="$_freetypeconfig" _freetypeconfig= IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="$SEPARATOR" for path_dir in $_freetypepath; do #reset separator to parse freetypeconfigs IFS=":" for freetypeconfig in $freetypeconfigs; do if test -f "$path_dir/$freetypeconfig" ; then _freetypeconfig="$path_dir/$freetypeconfig" echo $_freetypeconfig # Save the prefix _freetypepath=$path_dir if test `basename $path_dir` = bin ; then _freetypepath=`dirname $path_dir` fi # break at first freetype-config found in path break 2 fi done done IFS="$ac_save_ifs" if test -z "$_freetypeconfig"; then echo "none found!" fi } # # Determine curl-config # find_libcurlconfig() { echo_n "Looking for curl-config... " libcurlconfigs="$_libcurlconfig" _libcurlconfig= IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="$SEPARATOR" for path_dir in $_libcurlpath; do #reset separator to parse sdlconfigs IFS=":" for libcurlconfig in $libcurlconfigs; do if test -f "$path_dir/$libcurlconfig" ; then _libcurlconfig="$path_dir/$libcurlconfig" echo $_libcurlconfig # Save the prefix _libcurlpath=$path_dir if test `basename $path_dir` = bin ; then _libcurlpath=`dirname $path_dir` fi # break at first curl-config found in path break 2 fi done done IFS="$ac_save_ifs" if test -z "$_libcurlconfig"; then echo "none found!" fi } # # Determine libmikmod-config # find_libmikmodconfig() { echo_n "Looking for mikmod-config... " libmikmodconfigs="$_libmikmodconfig" _libmikmodconfig= IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="$SEPARATOR" for path_dir in $_libmikmodpath; do #reset separator to parse mikmodconfig IFS=":" for libmikmodconfig in $libmikmodconfigs; do if test -f "$path_dir/$libmikmodconfig" ; then _libmikmodconfig="$path_dir/$libmikmodconfig" echo $_libmikmodconfig # Save the prefix _libmikmodpath=$path_dir if test `basename $path_dir` = bin ; then _libmikmodpath=`dirname $path_dir` fi # break at first mikmod-config found in path break 2 fi done done IFS="$ac_save_ifs" if test -z "$_libmikmodconfig"; then echo "none found!" fi } # # Determine extension used for executables # get_system_exe_extension() { case $1 in riscos) _exeext=",e1f" ;; 3ds | dreamcast | ds | gamecube | n64 | psp | switch | wii) _exeext=".elf" ;; kolibrios | kos32) _exeext=".dll" ;; mingw* | *os2-emx) _exeext=".exe" ;; mint) if test "$_backend" = "atari"; then # ATARI backend _exeext=".ttp" else # SDL backend _exeext=".gtp" fi ;; emscripten) _exeext=".html" ;; *) _exeext="" ;; esac } # # Generic options functions # # Show the configure help line for an option option_help() { option=$(echo "${3:---}${1} " | sed -e "s/\(.\{23\}\).*/\1/" -e "s/_/-/g") echo " ${option} ${2}" } # Show an error about an unknown option option_error() { echo "error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 exit 1 } # Show an error about an unknown engine engine_option_error() { echo "error: unrecognized engine: $1 Try \`$0 --help' for more information." >&2 exit 1 } # Show an error about an invalid subengine option subengine_option_error() { echo "error: this option is invalid for the subengine $1: $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 } # Was this engine set to be built by default? get_engine_build_default() { get_var _engine_$1_build_default } # Get the subengines get_engine_subengines() { get_var _engine_$1_subengines } # Ask if this is a subengine check_is_subengine() { if test -z "$(get_var _engine_$1_sub)" ; then return 1 fi return 0 } # Get a subengine's parent (undefined for non-subengines) get_subengine_parent() { get_var _engine_$1_parent } # 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 all unstable engines engine_enable_all_unstable() { for engine in $_engines; do engine_build_default=`get_engine_build_default $engine` if test $engine_build_default = no ; then set_var _engine_${engine}_build "yes" fi done } # Disable all unstable engines engine_disable_all_unstable() { for engine in $_engines; do engine_build_default=`get_engine_build_default $engine` if test $engine_build_default = no ; then set_var _engine_${engine}_build "no" fi 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 check_is_subengine ${engine} ; then if test "$opt" != "yes" ; then subengine_option_error ${engine} return fi parent=`get_subengine_parent ${engine}` if test `get_engine_build ${parent}` = "no" ; then set_var _engine_${parent}_build "yes" fi fi if test "$opt" != "static" -a "$opt" != "dynamic" -a "$opt" != "yes" ; then option_error return fi subengines= if test "${engine%_all}" != "${engine}" ; then engine="${engine%_all}" subengines=$(get_engine_subengines ${engine}) if test "$subengines" = "" ; then engine_option_error "${engine}*" return fi fi if test "`get_engine_name ${engine}`" = "" ; then engine_option_error ${engine} return fi set_var _engine_${engine}_build "$opt" for subengine in $subengines ; do set_var _engine_${subengine}_build "$opt" done } # 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 engine_option_error ${engine} fi } # Show the configure help line for a given engine show_engine_help() { name=`get_engine_name $1` option_help "${1}" "${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() { name=`get_engine_name $1` parent=`get_engine_name $2` option_help "- ${1}" "${name} in ${parent} engine" " " } # Copy first argument to second one if they are different. Otherwise, delete the first one. # Touch the optional third argument on change copy_if_changed() { if cmp -s $1 $2; then rm -f $1 else mv -f $1 $2 if test -n "$3" ; then touch "$3" fi fi } # # 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 ! check_is_subengine $engine ; 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 (3ds, atari, android, dc, ds, ios7, maemo, n64, null, opendingux, openpandora, psp, psp2, samsungtv, sdl, switch, wii) [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: 3ds for Nintendo 3DS android-arm-v7a for Android ARMv7-A (armeabi-v7a) android-arm64-v8a for Android ARMv8-A (arm64-v8a) android-x86 for Android x86 android-x86_64 for Android x86_64 raspberrypi for Raspberry Pi dreamcast for Sega Dreamcast ds for Nintendo DS gamecube for Nintendo GameCube ios7 for Apple iPhone / iPad (iOS >= 7) ios7-arm64 for Apple iPhone / iPad (iOS >= 7, 64-bit) kos32 for Kolibri OS maemo for Nokia Maemo miyoo for 1st generation Miyoo miyoomini for Miyoo Mini n64 for Nintendo 64 opendingux-gcw0 for GCW0 with Opendingux Beta opendingux-lepus for Lepus with Opendingux Beta opendingux-rs90 for RS90 and RG99 with Opendingux Beta openpandora for OpenPandora ouya for OUYA ps3 for PlayStation 3 psp2 for PlayStation Vita psp for PlayStation Portable sailfish for SailfishOS samsungtv for Samsung TV switch for Nintendo Switch tvos for Apple TV (tvOS 9.0+) wasm32-unknown-emscripten for WebAssembly wii for Nintendo Wii Game engines: --enable-all-engines enable all engines, including those which are broken or unsupported --disable-all-engines disable all engines --enable-all-unstable-engines enable the engines which are broken or unsupported --disable-all-unstable-engines disable only the engines which are broken or unsupported --enable-engine=[,...] enable engine(s) listed --disable-engine=[,...] disable engine(s) listed --enable-engine-static=[,...] enable engine(s) listed as static builtin (when plugins are enabled) --enable-engine-dynamic=[,...] enable engine(s) listed as dynamic plugin (when plugins are enabled) The values of for these options are as follows: $engines_help Optional Features: --enable-static build a static binary instead of using shared objects --enable-detection-static build detection features into executable (default) --enable-detection-dynamic build detection features into a library --disable-detection-full add detection only for the engines which were enabled --disable-debug disable building with debugging symbols --enable-Werror treat warnings as errors --enable-release enable building in release mode (this activates optimizations) --enable-release-mode enable building in release mode (without optimizations) --enable-optimizations enable optimizations --enable-asan enable Address Sanitizer for memory-related debugging --enable-tsan enable Thread Sanitizer for thread-related debugging --enable-ubsan enable Undefined Behavior Sanitizer for undefined-behavior-related debugging --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-lua don't enable Lua support --disable-nuked-opl don't build Nuked OPL driver --disable-16bit don't enable 16bit color support --disable-highres don't enable support for high resolution engines >320x240 --disable-savegame-timestamp don't use timestamps for blank savegame descriptions --disable-scalers exclude scalers --disable-hq-scalers exclude HQ2x and HQ3x scalers (disables Edge scalers as well) --disable-edge-scalers exclude Edge2x and Edge3x scalers --disable-aspect exclude aspect ratio correction --disable-translation don't build support for translated messages --disable-taskbar don't build support for taskbar and launcher integration --disable-cloud don't build cloud support --disable-system-dialogs don't build support for system dialogs --enable-vkeybd build virtual keyboard support --enable-dlc build scummvm dlc downloading support --enable-scummvmdlc build scummvm dlc downloading support using ScummVM Cloud --enable-eventrecorder enable event recording functionality --disable-eventrecorder disable event recording functionality --enable-updates build support for updates --enable-text-console use text console instead of graphical console --enable-verbose-build enable regular echoing of commands during build process --enable-tts build support for text to speech --disable-tts don't build support for text to speech --disable-bink don't build with Bink video support --opengl-mode=MODE OpenGL (ES) mode to use for OpenGL output [auto] available modes: auto for autodetection none for disabling any OpenGL usage any for runtime detection gl for forcing OpenGL gles for forcing OpenGL ES gles2 for forcing OpenGL ES 2 WARNING: only specify this manually if you know what you are doing! --no-builtin-resources do not include additional resources (e.g. engine data, fonts) into the ScummVM binary --enable-windows-console show console output on Windows (default) --disable-windows-console do not show console output on Windows --enable-windows-unicode use Windows Unicode APIs (default) --disable-windows-unicode use Windows ANSI APIs --enable-ext-sse2 allow code to use sse2 extensions on x86/amd64 --enable-ext-avx2 allow code to use avx2 extensions on x86/amd64 --enable-ext-neon allow code to use neon extensions on ARM Optional Documentation Options: --with-manual-version=VERSION version to use when generating the manual (optional) --with-pandoc-format=FORMAT pandoc format to use during the conversion (optional) 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) --disable-ogg disable Ogg support [autodetect] --with-vorbis-prefix=DIR prefix where libvorbis is installed (optional) --disable-vorbis disable 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-fribidi-prefix=DIR prefix where libfribidi is installed --disable-fribidi disable libfribidi 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 [autodetect] --with-mikmod-prefix=DIR Prefix where libmikmod is installed (optional) --enable-mikmod enable mikmod module for playing various sound formats like impulsetracker [autodetect] --with-openmpt-prefix=DIR Prefix where libopenmpt is installed (optional) --enable-openmpt enable openmpt module for playing various sound formats like impulsetracker [autodetect] --with-mpcdec-prefix=DIR Prefix where libmpcdec is installed (optional) --enable-mpcdec enable libmpcdec for playing musepack format audio [autodetect] --with-a52-prefix=DIR Prefix where liba52 is installed (optional) --enable-a52 enable a52 codec for MPEG decoder [autodetect] --with-opengl-prefix=DIR prefix where OpenGL (ES) is installed (optional) --disable-opengl-game disable OpenGL (ES) support in game [autodetect] --disable-opengl-game-classic disable OpenGL classic support in game --disable-opengl-game-shaders disable use of modern OpenGL with shaders in game --with-jpeg-prefix=DIR Prefix where libjpeg is installed (optional) --disable-jpeg disable JPEG decoder [autodetect] --with-png-prefix=DIR prefix where libpng is installed (optional) --disable-png disable PNG decoder [autodetect] --with-gif-prefix=DIR prefix where giflib is installed (optional) --disable-gif disable GIF decoder [autodetect] --with-theoradec-prefix=DIR prefix where libtheoradec is installed (optional) --disable-theoradec disable Theora decoder [autodetect] --with-vpx-prefix=DIR prefix where libtvpx is installed (optional) --disable-vpx disable VP8/VP9 decoder [autodetect] --with-faad-prefix=DIR prefix where libfaad is installed (optional) --disable-faad disable AAC decoder [autodetect] --with-fluidsynth-prefix=DIR prefix where libfluidsynth is installed (optional) --disable-fluidsynth disable fluidsynth MIDI driver [autodetect] --with-fluidlite-prefix=DIR prefix where libfluidlite is installed (optional) --disable-fluidlite disable fluidlite MIDI driver [autodetect] --with-sonivox-prefix=DIR prefix where libsonivox is installed (optional) --disable-sonivox disable EAS MIDI driver [autodetect] --with-ieee1284-prefix=DIR prefix where libieee1284 is installed (optional) --enable-opl2lpt enable OPL2LPT support --with-retrowave-prefix=DIR prefix where libretrowave is installed (optional) --enable-retrowave enable RetroWave OPL3 support --with-sparkle-prefix=DIR prefix where sparkle is installed (macOS/Windows only - optional) --disable-sparkle disable sparkle automatic update support [macOS/Windows only - autodetect] --disable-osx-dock-plugin disable the NSDockTilePlugin support [macOS only - autodetect] --with-sdl-prefix=DIR prefix where the SDL package is installed (optional) e.g., if sdl-config script is at: /opt/mxe/usr/i686-w64-mingw32.static/bin/sdl2-config then you should pass: '--with-sdl-prefix=/opt/mxe/usr/i686-w64-mingw32.static' --with-freetype2-prefix=DIR prefix where the freetype-config script is installed (optional) --disable-freetype2 disable freetype2 TTF library usage [autodetect] --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] --with-libunity-prefix=DIR prefix where libunity is installed (optional) --disable-libunity disable Unity launcher integration [autodetect] --with-gtk-prefix=DIR prefix where gtk is installed (optional) --disable-gtk disable GTK dialog integration [autodetect] --with-sndio-prefix=DIR prefix where sndio is installed (optional) --disable-sndio disable sndio MIDI driver [autodetect] --with-sdlnet-prefix=DIR prefix where SDL_Net is installed (optional) --disable-sdlnet disable SDL_Net networking library [autodetect] --with-libcurl-prefix=DIR prefix where libcurl is installed (optional) --disable-libcurl disable libcurl networking library [autodetect] --disable-enet don't enable ENet networking support --with-discord-prefix=DIR prefix where discord-rpc is installed (optional) --disable-discord disable Discord rich presence integration [autodetect] Some influential environment variables: AR archiver command AS assembler command ASFLAGS assembler flags CONFIGURE_NO_HOST Ignore the cross-compile target set by the --host= option CPPFLAGS C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags DWP DWARF packing utility command LD linker command LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory PKG_CONFIG_LIBDIR list of directories where pkg-config '.pc' files are looked up RANLIB archive indexer command SDL_CONFIG SDL configurer script name (not path) STRIP symbol stripper command WINDRES Windows resource compiler command WINDRESFLAGS Windows resource compiler flags EOF exit 0 fi done # for parm in ... # # If we're not showing help, greet the user and start the log file # echo "Running ScummVM configure..." echo "Configure run on" `date` > $TMPLOG cat >> $TMPLOG <&2 fi ;; --prefix=*) prefix=`echo $ac_option | cut -d '=' -f 2` ;; --exec-prefix=*) exec_prefix=`echo $ac_option | cut -d '=' -f 2` ;; --bindir=*) bindir=`echo $ac_option | cut -d '=' -f 2` ;; --libdir=*) libdir=`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` ;; --mandir=*) mandir=`echo $ac_option | cut -d '=' -f 2` ;; --docdir=*) docdir=`echo $ac_option | cut -d '=' -f 2` ;; --enable-all-engines) engine_enable_all ;; --disable-all-engines) engine_disable_all ;; --enable-all-unstable-engines) engine_enable_all_unstable ;; --disable-all-unstable-engines) engine_disable_all_unstable ;; --enable-engine=* | --enable-engines=*) for engine_name in `echo $ac_option | cut -d '=' -f 2- | tr ',' '\n'`; do engine_enable "${engine_name}" done ;; --enable-engine-static=* | --enable-engines-static=*) for engine_name in `echo $ac_option | cut -d '=' -f 2- | tr ',' '\n'`; do engine_enable "${engine_name}:static" done ;; --enable-engine-dynamic=* | --enable-engines-dynamic=*) for engine_name in `echo $ac_option | cut -d '=' -f 2- | tr ',' '\n'`; do engine_enable "${engine_name}:dynamic" done ;; --disable-engine=* | --disable-engines=*) for engine_name in `echo $ac_option | cut -d '=' -f 2 | tr ',' '\n'`; do engine_disable ${engine_name} done ;; *) option_error ;; esac done guessed_host=`$_srcdir/config.guess` get_system_exe_extension $guessed_host NATIVEEXEEXT=$_exeext case $_host in 3ds) _host_os=3ds _host_cpu=arm _host_alias=arm-none-eabi test "x$prefix" = xNONE && prefix=romfs: datarootdir='${prefix}' datadir='${datarootdir}' docdir='${prefix}/doc' ;; android-arm-v7a | android-armeabi-v7a | ouya) _host_os=android _host_cpu=arm _host_alias=arm-linux-androideabi ;; android-arm64-v8a) _host_os=android _host_cpu=aarch64 _host_alias=aarch64-linux-android ;; android-x86) _host_os=android _host_cpu=i686 _host_alias=i686-linux-android ;; android-x86_64) _host_os=android _host_cpu=x86_64 _host_alias=x86_64-linux-android ;; arm-vfp-riscos) _host_os=riscos _host_cpu=arm _host_alias=arm-unknown-riscos datarootdir='/\' datadir='${datarootdir}/data' docdir='${datarootdir}/docs' ;; arm-*riscos) _host_os=riscos _host_cpu=arm _host_alias=$_host datarootdir='/\' datadir='${datarootdir}/data' docdir='${datarootdir}/docs' ;; raspberrypi) _host_os=linux _host_cpu=arm # This tuple is the one used by the official Rpi toolchain. # It may change in the future. _host_alias=arm-linux-gnueabihf ;; opendingux-*) _host_os=linux _host_cpu=mipsel _host_alias=mipsel-linux ;; dreamcast) _host_os=dreamcast _host_cpu=sh _host_alias=sh-elf append_var CXXFLAGS "-ml -m4-single-only" append_var LDFLAGS "-ml -m4-single-only" ;; ds) _host_os=ds _host_cpu=arm _host_alias=arm-none-eabi ;; gamecube) _host_os=gamecube _host_cpu=powerpc _host_alias=powerpc-eabi ;; i586-mingw32msvc) _host_os=mingw32msvc _host_cpu=i586 ;; ios7) _host_os=iphoneos _host_cpu=arm _host_alias=arm-apple-darwin11 ;; ios7-arm64) _host_os=iphoneos # Remains of configure not knowing about arm64 _host_cpu=aarch64 _host_alias=arm64-apple-darwin11 ;; kos32) _host_os=kolibrios _host_cpu=i686 _host_alias=kos32 ;; m68k-atari-mint*) _host_os=mint _host_cpu=m68k _host_alias=$_host ;; maemo) _host_os=maemo _host_cpu=arm _host_alias=arm-none-linux-gnueabi # The prefix is always the same on Maemo so we hardcode the default # here. It is still possible to define a custom prefix which is # needed when packaging the app with a user-specific app ID. test "x$prefix" = xNONE && prefix=/opt/scummvm # Maemo apps are installed into app-specific directories. The # default directory structure of ScummVM makes no sense here so we # hardcode Maemo specific directories here. datarootdir='${prefix}/share' datadir=/opt/scummvm/share docdir='${datarootdir}/doc/scummvm' ;; miyoo) _host_os=linux _host_cpu=arm _host_alias=arm-linux ;; miyoomini) _host_os=linux _host_cpu=arm _host_alias=arm-linux-gnueabihf ;; n64) _host_os=n64 _host_cpu=mips _host_alias=mips64 ;; neuros) _host_os=linux _host_cpu=arm ;; openpandora) _host_os=linux _host_cpu=arm _host_alias=arm-angstrom-linux-gnueabi ;; ppc-amigaos) _host_os=amigaos _host_cpu=powerpc _host_alias=$_host ;; ppc-morphos) _host_os=morphos _host_cpu=powerpc _host_alias=$_host ;; ps3) _host_os=ps3 _host_cpu=powerpc _host_alias=powerpc64-ps3-elf # The prefix is always the same on PS3 so we hardcode the default # here. It is still possible to define a custom prefix which is # needed when packaging the app with a user-specific app ID. test "x$prefix" = xNONE && prefix=/dev_hdd0/game/SCUM12000/USRDIR # PS3 apps are installed into app-specific directories. The # default directory structure of ScummVM makes no sense here so we # hardcode PS3 specific directories here. datarootdir='${prefix}/data' datadir='${datarootdir}' docdir='${prefix}/doc' ;; psp2) _host_os=psp2 _host_cpu=arm _host_alias=arm-vita-eabi # The prefix is always the same on PSP2 so we hardcode the default # here. It is still possible to define a custom prefix which is # needed when packaging the app with a user-specific app ID. test "x$prefix" = xNONE && prefix=app0: # PSP2 apps are installed into app-specific directories. The # default directory structure of ScummVM makes no sense here so we # hardcode PSP2 specific directories here. datarootdir='${prefix}/data' datadir='${datarootdir}' docdir='${prefix}/doc' ;; psp) _host_os=psp _host_cpu=mipsallegrexel _host_alias=psp ;; samsungtv) _host_os=linux _host_cpu=arm _host_alias=arm-linux-gnueabi ;; sailfish) _host_os=linux test "x$prefix" = xNONE && prefix=/usr datarootdir='/usr/share/org.scummvm.scummvm' datadir='${datarootdir}/scummvm' docdir='/usr/share/org.scummvm.scummvm/doc/scummvm' # Use static libraries on Sailfish. Sailfish limits our # ability to link with libraries from other packages. And if we ship # dynamic library but always load it and noone else uses it, then we're # no better off than using static libraries. Additionally shipping # libraries is a hassle. if [ -n "$JPEG_PREFIX" ]; then JPEG_LIBS="$JPEG_PREFIX/lib/libjpeg.a" fi if [ -n "$FLAC_PREFIX" ]; then FLAC_LIBS="$FLAC_PREFIX/lib/libFLAC.a" fi if [ -n "$THEORADEC_PREFIX" ]; then THEORADEC_LIBS="$THEORADEC_PREFIX/lib/libtheoradec.a" fi ;; switch) _host_os=switch _host_cpu=aarch64 _host_alias=aarch64-none-elf test "x$prefix" = xNONE && prefix=. datarootdir='${prefix}/data' datadir='${datarootdir}' docdir='${prefix}/doc' ;; tvos) _host_os=iphoneos # Remains of configure not knowing about arm64 _host_cpu=aarch64 _host_alias=arm64-apple-darwin11 ;; wasm32-*) _endian=little # the endian check below fails, but emscripten is always little endian anyway _host_os=emscripten _host_cpu=wasm32 datadir='/data' CXX="em++" ;; wii) _host_os=wii _host_cpu=powerpc _host_alias=powerpc-eabi ;; *) 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 cr" _as="$_host_alias-as" _dwp=$_host_alias-dwp _windres=$_host_alias-windres fi case $_host in arm-*riscos | ds | openpandora | psp | psp2 | switch) if test "$_debug_build" = auto; then # If you want to debug one of these platforms, use '--disable-optimizations --enable-debug' _debug_build=no fi if test "$_optimizations" = auto; then # Enable optimizations by default. _optimizations=yes fi ;; esac # # Determine extension used for executables # get_system_exe_extension $_host_os HOSTEXEPRE= HOSTEXEEXT=$_exeext # # Determine separator used for $PATH # case $_host_os in os2-emx*) SEPARATOR=";" ;; *) SEPARATOR=":" ;; esac # # Platform specific sanity checks # case $_host_os in android) if test -z "$ANDROID_SDK_ROOT"; then echo "Please set ANDROID_SDK_ROOT in your environment: export ANDROID_SDK_ROOT=" exit 1 fi if test -z "$ANDROID_NDK_ROOT"; then echo "Please set ANDROID_NDK_ROOT in your environment: export ANDROID_NDK_ROOT=" exit 1 fi ;; 3ds) if test -z "$DEVKITPRO"; then echo "Please set DEVKITPRO in your environment. export DEVKITPRO=" exit 1 fi _as="$DEVKITPRO/devkitARM/bin/arm-none-eabi-as" _ar="$DEVKITPRO/devkitARM/bin/arm-none-eabi-ar cr" _ranlib="$DEVKITPRO/devkitARM/bin/arm-none-eabi-ranlib" _strip="$DEVKITPRO/devkitARM/bin/arm-none-eabi-strip" if test -z "$CXX"; then CXX="$DEVKITPRO/devkitARM/bin/arm-none-eabi-g++" fi if test -z "$PKG_CONFIG_LIBDIR"; then PKG_CONFIG_LIBDIR="$DEVKITPRO/portlibs/3ds/lib/pkgconfig" fi if test -z "$PKG_CONFIG_PATH"; then PKG_CONFIG_PATH="$DEVKITPRO/portlibs/3ds/lib/pkgconfig" fi ;; ds | gamecube | switch | wii) if test -z "$DEVKITPRO"; then echo "Please set DEVKITPRO in your environment. export DEVKITPRO=" exit 1 fi ;; dreamcast) if test -z "$RONINDIR"; then echo "Please set RONINDIR in your environment. export RONINDIR=" exit 1 fi ;; emscripten) if test -z "$EMSDK"; then echo "Please set EMSDK in your environment. export EMSDK=" exit 1 fi ;; kolibrios) if test -z "$KOS32_SDK_DIR" || test -z "$KOS32_AUTOBUILD"; then echo "Please set KOS32_SDK_DIR and KOS32_AUTOBUILD in your environment. export KOS32_SDK_DIR= and export KOS32_AUTOBUILD=" exit 1 fi _as="${KOS32_AUTOBUILD}/tools/win32/bin/kos32-as" _ar="${KOS32_AUTOBUILD}/tools/win32/bin/kos32-ar cr" _ranlib="${KOS32_AUTOBUILD}/tools/win32/bin/kos32-ar -s" _strip="${KOS32_AUTOBUILD}/tools/win32/bin/kos32-strip" if test -z "$CXX"; then CXX="${KOS32_AUTOBUILD}/tools/win32/bin/kos32-g++" fi append_var DEFINES "-U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32 -DKOLIBRIOS=1 -D_POSIX_C_SOURCE=1 -D_XOPEN_SOURCE=1" append_var CXXFLAGS "-I${KOS32_SDK_DIR}/sources/newlib/libc/include -I${KOS32_SDK_DIR}/sources/libstdc++-v3/include -fno-ident -fomit-frame-pointer" # Final executable will be a DLL but for tests we need to stick to a standard binary because DLLs having a main function trigger a build failure # We will add the -shared option at the end append_var LDFLAGS "-specs=$_srcdir/backends/platform/sdl/kolibrios/kolibrios.spec" ;; n64) if test -z "$N64SDK"; then echo "Please set N64SDK in your environment. export N64SDK=" exit 1 fi ;; ps3) if test -z "$PS3DEV"; then echo "Please set PS3DEV in your environment. export PS3DEV=" exit 1 fi if test -z "$PSL1GHT"; then echo "Please set PSL1GHT in your environment. export PSL1GHT=" exit 1 fi ;; psp2) if test -z "$VITASDK"; then echo "Please set VITASDK in your environment. export VITASDK=" exit 1 fi ;; psp) if test -z "$PSPDEV"; then PSPDEV=`psp-config --pspdev-path` fi # TODO: Should we also insist on a valid PSPDEV value? if test -z "$PSPSDK"; then PSPSDK=`psp-config --pspsdk-path` fi if test -z "$PSPSDK"; then echo "Please set PSPSDK in your environment. export PSPSDK=" exit 1 fi # These have to be set early because the compiler will not link successfully # during testing otherwise if test -d "$PSPDEV/psp/lib"; then append_var LDFLAGS "-L$PSPDEV/psp/lib" fi append_var LDFLAGS "-L$PSPSDK/lib" append_var LDFLAGS "-specs=$_srcdir/backends/platform/psp/psp.spec" ;; riscos) if test -z "$GCCSDK_INSTALL_ENV"; then echo "Please set GCCSDK_INSTALL_ENV in your environment. export GCCSDK_INSTALL_ENV=" exit 1 fi if test -e "$GCCSDK_INSTALL_ENV/bin/tokenize"; then add_line_to_config_mk "TOKENIZE := $GCCSDK_INSTALL_ENV/bin/tokenize" elif `which tokenize >/dev/null 2>&1`; then add_line_to_config_mk "TOKENIZE := tokenize" fi if test -e "$GCCSDK_INSTALL_ENV/bin/makerun"; then add_line_to_config_mk "MAKERUN := $GCCSDK_INSTALL_ENV/bin/makerun" elif `which makerun >/dev/null 2>&1`; then add_line_to_config_mk "MAKERUN := makerun" fi ;; *) ;; esac # Toolchain for Android is in NDK and is using different naming convention if test "$_host_os" = android; then # Check that we have the correct NDK version echo_n "Checking NDK version... " _ndk_gradle=$(grep "^[[:space:]]*ndkVersion" $_srcdir/dists/android/build.gradle | sed 's/[^0-9\.]//g') _ndk_version=$(grep "Pkg.Revision" $ANDROID_NDK_ROOT/source.properties | sed 's/[^0-9\.]//g' | sed 's/.//') if test "$_ndk_version" = "$_ndk_gradle"; then echo "$_ndk_version" else echo "$_ndk_version (Expected $_ndk_gradle)" exit 1 fi # Try to use a known to work toolchain android_toolchains="windows-x86_64 darwin-x86_64 linux-x86_64" for toolchain in $android_toolchains; do _android_toolchain="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$toolchain" if test -d "$_android_toolchain"; then break fi done # See if an explicit toolchain is used if test -n "$ANDROID_TOOLCHAIN"; then _android_toolchain="$ANDROID_TOOLCHAIN" fi case $_host_cpu in arm | i686) _android_version=16 ;; aarch64 | x86_64) # Platform version 21 is needed as earlier versions of platform do not support this architecture. _android_version=21 ;; esac # If CXX environment variable is not set, try to set known to work defaults if test -z "$CXX"; then case $_host_cpu in arm) _android_target="armv7a-linux-androideabi$_android_version" ;; aarch64) _android_target="aarch64-linux-android$_android_version" ;; i686) _android_target="i686-linux-android$_android_version" ;; x86_64) _android_target="x86_64-linux-android$_android_version" ;; esac CXX="$_android_toolchain/bin/clang++" # If CXX is defined, don't alter CXXFLAGS and LDFLAGS as it can be done by the user explicitly append_var CXXFLAGS "-target ${_android_target}" append_var LDFLAGS "-target ${_android_target}" fi case $_host_cpu in aarch64) ;; arm|i686|x86_64) add_line_to_config_mk 'NEED_ANDROID_CPUFEATURES = 1' ;; esac # These values can get overriden below by environments variables _ar="$_android_toolchain/bin/llvm-ar cr" _as="$_android_toolchain/bin/llvm-as" _dwp="$_android_toolchain/bin/llvm-dwp" _ranlib="$_android_toolchain/bin/llvm-ranlib" _strip="$_android_toolchain/bin/llvm-strip" if test -z "$STRINGS"; then STRINGS="$_android_toolchain/bin/llvm-strings" fi if test -z "$PKG_CONFIG_LIBDIR"; then PKG_CONFIG_LIBDIR="$_android_toolchain/sysroot/usr/lib/$_host_alias/$_android_version/pkgconfig" fi _libcurlpath="$_android_toolchain/sysroot/usr/bin/$_host_alias/$_android_version:$_libcurlpath" fi # # 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 -o $TMPO.o -c tmp_cxx_compiler.cpp" 2>> "$TMPLOG" && cc_check_clean tmp_cxx_compiler.cpp else eval "$1 $CXXFLAGS $LDFLAGS -o $TMPO$HOSTEXEEXT tmp_cxx_compiler.cpp" 2>> "$TMPLOG" && eval "$TMPO$HOSTEXEEXT 2>> $TMPLOG" && 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 # Sailfish is a cross-compile environment but it uses g++ name # Yes, it's black magic what they do. if test -n "$_host" && test "$_host" != sailfish ; then compilers="$_host_alias-g++ $_host_alias-c++ $_host_alias-clang++ $_host-g++ $_host-c++ $_host-clang++" else compilers="g++ c++ clang++" 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: $compiler" >> "$TMPLOG" CXX=$compiler echo $CXX break else echo "failure testing compiler: $compiler" >> "$TMPLOG" fi done fi if test -z "$CXX"; then echo "none found!" exit 1 fi if test -n "$RANLIB"; then _ranlib=$RANLIB fi if test -n "$STRIP"; then _strip=$STRIP fi if test -n "$AR"; then _ar="$AR cr" fi if test -n "$AS"; then _as=$AS fi if test -n "$DWP"; then _dwp=$DWP fi if test -n "$WINDRES"; then _windres=$WINDRES fi LD=$CXX # # Check whether the compiler supports C++11 # echo_n "Checking if compiler supports C++11... " have_cxx11=no cat > $TMPC << EOF int main(int argc, char *argv[]) { if (argv == nullptr) return -1; else return 0; } EOF cc_check -std=c++11 && have_cxx11=yes echo $have_cxx11 if test "$have_cxx11" = "no" ; then echo echo "ScummVM requires C++11 compiler support. Please ensure your compiler supports it" exit 1 fi # # Determine the compiler version # echocheck "compiler version" # Some compilers pretend to be gcc to ease compatibility with # common Linux etc. programs. We first check for some of these here. have_gcc=no cc_check_define __GNUC__ && have_gcc=yes have_icc=no cc_check_define __INTEL_COMPILER && have_icc=yes have_clang=no cc_check_define __clang__ && have_clang=yes if test "$have_icc" = yes; then add_line_to_config_mk 'HAVE_ICC = 1' # Make ICC error out on unknown command line options instead of printing # a warning. This is for example required to make the -Wglobal-constructors # detection work correctly. append_var CXXFLAGS "-diag-error 10006,10148" # ICC doesn't accept all gcc options, so we disable have_gcc, even if # ICC does have the gcc-compatibility defines. have_gcc=no fi if test "$have_clang" = yes; then add_line_to_config_mk 'HAVE_CLANG = 1' # clang does accept all gcc options we use, so we keep have_gcc fi 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 "$have_clang" = yes; then # Clang sets a gcc version number for compatibility. # We keep that as _cxx_minor/_cxx_major for later # compiler version checks. # For the version reported in the configure log (cxx_version), # we get the actual clang version. cxx_version=`gcc_get_define __clang_version__` cxx_version="`echo "${cxx_version}" | sed -e 's/"\([^ ]*\) .*/\1/'`" cxx_version="clang $cxx_version, ok" _clang_major=`gcc_get_define __clang_major__` _clang_minor=`gcc_get_define __clang_minor__` append_var CXXFLAGS "-Wshadow" else cxx_version="GCC $cxx_version, ok" # Some warnings exist in earlier GCC releases, but produce way # too many false positives... if test $_cxx_major -ge 5; then append_var CXXFLAGS "-Wshadow" else append_var CXXFLAGS "-Wno-missing-field-initializers" if test $_cxx_major -eq 4; then # Many false positives with templates if test $_cxx_minor -le 7; then append_var CXXFLAGS "-Wno-type-limits" append_var CXXFLAGS "-Wno-uninitialized" append_var CXXFLAGS "-Wno-array-bounds" fi if test $_cxx_minor -le 8; then append_var CXXFLAGS "-Wno-maybe-uninitialized" fi fi fi fi elif test "$have_icc" = yes; then cxx_version="`( $CXX -dumpversion ) 2>/dev/null`" _cxx_major="`echo "${cxx_version}" | sed -ne 's/\([0-9][0-9]*\)\..*/\1/gp'`" _cxx_minor="`echo "${cxx_version}" | sed -ne 's/[0-9][0-9]*\.\([0-9][0-9]*\)/\1/gp'`" cxx_version="ICC $cxx_version, ok" 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" fi echo non-gcc compiler version ${cxx_version} else cxx_version="not found" echo non-gcc compiler version ${cxx_version} fi cxx_verc_fail=yes cxx_version="$cxx_version, bad" fi echo "$cxx_version" # # Bail out now if no useable compiler was found. # if test "$cxx_verc_fail" = yes ; then echo echo "The version of your compiler is not supported at this time" exit 1 fi # # Setup compiler specific CXXFLAGS now that we know the compiler version. # Foremost, this means enabling various warnings. # In addition, we set CXX_UPDATE_DEP_FLAG for GCC and ICC. # # By default compile with strict C++ std_variant=c++ pedantic=no if test "$have_gcc" = yes ; then # By default, we add -pedantic to the CXXFLAGS to catch some potentially # non-portable constructs, like use of GNU extensions. # However, some platforms use GNU extensions in system header files, so # for these we must not use -pedantic. pedantic=yes case $_host_os in # newlib-based system include files suppress non-C89 function # declarations under __STRICT_ANSI__, undefine it 3ds | android | gamecube | kolibrios | psp | switch | wii) std_variant=gnu++ pedantic=no ;; amigaos* | dreamcast | ds | mingw* | mint* | morphos | n64 | ps3 | psp2) std_variant=gnu++ ;; openbsd*) pedantic=no ;; riscos) # -Wformat complains about '%z' and so on. Don't know if it's related to # the older compiler not being completely C+11-aware, or something else. if test "$have_gcc" = yes && test $_cxx_major -eq 4 && test $_cxx_minor -le 7; then std_variant=gnu++ pedantic=no fi ;; *) ;; esac if test -n "$_host"; then case "$_host" in raspberrypi) pedantic=no ;; esac fi append_var CXXFLAGS "-W -Wno-unused-parameter" add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' append_var CXXFLAGS "-Wno-empty-body" append_var CXXFLAGS "-fno-operator-names" elif test "$have_icc" = yes ; then # ICC does not support pedantic, while GCC and clang do. add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' fi # # Set status about C++11 mode # append_var CXXFLAGS "-std=${std_variant}11" if test "$pedantic" = yes ; then append_var CXXFLAGS "-pedantic" fi # # Additional tests for C++11 features that may not be present # # Check if initializer list is available echo_n "Checking if C++11 initializer list is available... " cat > $TMPC << EOF #include #include class FOO { public: FOO(std::initializer_list list) : _size(list.size()) {} size_t _size; }; int main(int argc, char *argv[]) { return 0; } EOF cc_check if test "$TMPR" -eq 0; then echo yes else echo no define_in_config_if_yes yes 'NO_CXX11_INITIALIZER_LIST' fi # Check if std::nullptr_t is available echo_n "Checking if C++11 std::nullptr_t is available... " cat > $TMPC << EOF #include int main(int argc, char *argv[]) { std::nullptr_t i = nullptr; return 0; } EOF cc_check if test "$TMPR" -eq 0; then echo yes else echo no define_in_config_if_yes yes 'NO_CXX11_NULLPTR_T' fi # Check if alignas and alignof are available echo_n "Checking if C++11 alignas and alignof keywords are available... " cat > $TMPC << EOF #include struct test { char c; alignas(max_align_t) size_t _size; }; static const size_t LENGTH = alignof(max_align_t); int main(int argc, char *argv[]) { return 0; } EOF cc_check if test "$TMPR" -eq 0; then echo yes else echo no define_in_config_if_yes yes 'NO_CXX11_ALIGNAS' fi # # Determine extra build flags for debug and/or release builds # if test "$_debug_build" = auto && test "$_release_build" = yes; then _debug_build=no fi if test "$_debug_build" != no; then # debug mode not explicitly disabled -> compile with debug information echo_n "Checking best debug mode... " debug_mode=-g test "$_host_os" = amigaos && debug_mode=-gstabs append_var CXXFLAGS "$debug_mode" echo_n -- "$debug_mode" echo "int main() { return 0; }" > $TMPC # HACK: The default DWARF version "for most targets" is 5. However, # that version causes dwp to segfault. According to # https://sourceware.org/bugzilla/show_bug.cgi?id=26219 it just # isn't implemented, and there's no fix in sight. So we force # DWARF version 4 and hope that works for, well... "most targets". if `which $_dwp >/dev/null 2>&1` && cc_check_no_clean $debug_mode -gsplit-dwarf -gdwarf-4 && `$_dwp -e $TMPO -o /dev/null >/dev/null 2>&1`; then append_var CXXFLAGS "-gsplit-dwarf -gdwarf-4" add_line_to_config_mk "SPLIT_DWARF = 1" echo_n -- " + split DWARF" if test "$_lld" = yes && cc_check_no_clean $debug_mode -gsplit-dwarf -fuse-ld=lld -Wl,--gdb-index; then append_var LDFLAGS "-fuse-ld=lld" append_var LDFLAGS "-Wl,--gdb-index" echo_n -- " + LLD" elif test "$_mold" = yes && cc_check_no_clean $debug_mode -gsplit-dwarf -fuse-ld=mold -Wl,--gdb-index; then append_var LDFLAGS "-fuse-ld=mold" append_var LDFLAGS "-Wl,--gdb-index" echo_n -- " + Mold" elif test "$_gold" = yes && cc_check_no_clean $debug_mode -gsplit-dwarf -fuse-ld=gold -Wl,--gdb-index; then append_var LDFLAGS "-fuse-ld=gold" append_var LDFLAGS "-Wl,--gdb-index" echo_n -- " + Gold" fi fi if cc_check_no_clean $debug_mode -fvar-tracking-assignments; then append_var CXXFLAGS "-fvar-tracking-assignments" echo_n -- " + var tracking" fi cc_check_clean echo "" fi if ! echo "$LDFLAGS" | grep -q -e -fuse-ld; then echo "Using LLD linker... $_lld" if test "$_lld" = yes ; then append_var LDFLAGS -fuse-ld=lld fi fi if ! echo "$LDFLAGS" | grep -q -e -fuse-ld; then echo "Using Mold linker... $_mold" if test "$_mold" = yes ; then append_var LDFLAGS -fuse-ld=mold fi fi if test "$_release_build" = yes; then # Add a define, which indicates we are doing # a build for a release version. append_var DEFINES "-DRELEASE_BUILD" fi set_flag_if_supported() { echocheck "whether C++ compiler accepts $1" cat > $TMPC << EOF int main() { return 0; } EOF # Note: we check for -Wxxx instead of -Wno-xxx as not all compilers error # out on unknown -Wno-xxx flags. if cc_check $(echo $1 | sed 's/-Wno-/-W/') -Werror; then append_var CXXFLAGS "$1" echo yes else echo no fi } set_flag_if_supported -Wglobal-constructors # If the compiler supports the -Wundefined-var-template flag, silence that warning. # We get this warning a lot with regard to the Singleton class as we explicitly # instantiate each specialisation. An alternate way to deal with it would be to # change the way we instantiate the singleton classes as done in PR #967. # Note: we check the -Wundefined-var-template as gcc does not error out on unknown # -Wno-xxx flags. set_flag_if_supported -Wno-undefined-var-template # Vanilla clang 6 enables the new -Wpragma-pack which warns when leaving an # included file which changes the current alignment. # As our common/pack-{start,end}.h trigger this we disable this warning. # Because there is no correlation between the version reported by Apple Xcode # clang and vanilla clang we cannot rely on the __clang_major__/clang_minor__ # macros. set_flag_if_supported -Wno-pragma-pack set_flag_if_supported -Wno-address-of-packed-member if test -n "$STRINGS"; then _strings=$STRINGS else echo_n "Checking for $_host_alias-strings... " >> "$TMPLOG" if `which $_host_alias-strings >/dev/null 2>&1`; then _strings=$_host_alias-strings echo yes >> "$TMPLOG" else _strings=strings echo no >> "$TMPLOG" fi fi # # Check for endianness # echo_n "Checking endianness... " cat > tmp_endianness_check.cpp << EOF #ifndef __GNUC__ #define __attribute__(x) #endif __attribute__ ((used)) unsigned short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; __attribute__ ((used)) unsigned short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; const char * _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; return s; } __attribute__ ((used)) unsigned short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; __attribute__ ((used)) unsigned short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; const char * _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; return s; } int main() { _ascii (); _ebcdic (); return 0; } EOF $CXX $LDFLAGS $CXXFLAGS -o $TMPO$HOSTEXEEXT tmp_endianness_check.cpp >> "$TMPLOG" 2>&1 if $_strings $TMPO$HOSTEXEEXT 2>> "$TMPLOG"| grep BIGenDianSyS >/dev/null; then _endian=big elif $_strings $TMPO$HOSTEXEEXT 2>> "$TMPLOG" | grep LiTTleEnDian >/dev/null; then _endian=little fi echo $_endian; cc_check_clean tmp_endianness_check.cpp $TMPO-tmp_endianness_check.dwo case $_endian in big) add_line_to_config_h '#undef 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 '#undef SCUMM_BIG_ENDIAN' ;; *) exit 1 ;; esac # # Check whether memory alignment is required # # For some CPU types, unaligned memory access is either not supported at # all (and so leads to a crash), requires a super-slow emulation via an # exception handler, or just results in incorrect results. # On the other hand, accessing data in a manner that works regardless of # alignment can be a lot slower than regular access, so we don't want # to use it if we don't have to. # # So we do the following: For CPU families where we know whether unaligned # access is safe & fast, we enable / disable unaligned access accordingly. # Otherwise, we just disable memory alignment. # # NOTE: In the past, for non-cross compiled builds, we would also run some code # which would try to test whether unaligned access worked or not. But this test # could not reliably determine whether unaligned access really worked in all # situations (and across different implementations of the target CPU arch), nor # whether it was fast (as opposed to slowly emulated by fault handlers). Hence, # we do not use this approach anymore. # # NOTE: The only kinds of unaligned access we allow are for 2 byte and 4 # byte loads / stores. No promises are made for bigger sizes, such as 8 # or 16 byte loads, for which architectures may behave differently than # for the smaller sizes. echo_n "Alignment required... " case $_host_cpu in i[3-6]86 | amd64 | x86_64 | powerpc* | ppc* | m68k) # Unaligned access should work _need_memalign=no ;; alpha* | arm* | bfin* | hp* | mips* | sh* | sparc* | ia64 | nv1*) # Unaligned access is not supported or extremely slow. _need_memalign=yes ;; *) # Status of unaligned access is unknown, so assume the worst. _need_memalign=yes ;; esac if test "$_enable_ubsan" = yes ; then # UBSan implies -fsanitize=alignment, so avoid false positives. _need_memalign=yes fi echo "$_need_memalign" define_in_config_h_if_yes $_need_memalign 'SCUMM_NEED_ALIGNMENT' # # Check the CPU architecture # echo_n "Checking host CPU architecture... " case $_host_cpu in aarch64) echo "aarch64" ;; alpha*) echo "Alpha" ;; arm*) echo "ARM" case $_host in openpandora) define_in_config_if_yes yes 'USE_ARM_NEON_ASPECT_CORRECTOR' ;; maemo ) define_in_config_if_yes yes 'USE_ARM_SCALER_ASM' define_in_config_if_yes yes 'USE_ARM_SMUSH_ASM' define_in_config_if_yes yes 'USE_ARM_GFX_ASM' # FIXME: The following feature exhibits a bug during the intro scene of Indy 4 # (on Pandora and iPhone at least) #define_in_config_if_yes yes 'USE_ARM_COSTUME_ASM' ;; esac append_var DEFINES "-DARM_TARGET" ;; hppa* | parisc*) echo "PA-RISC" ;; i[3-6]86) echo "x86" _have_x86=yes define_in_config_h_if_yes $_have_x86 'HAVE_X86' ;; ia64*) echo "Itanium" ;; m68*) echo "m68k" ;; mips*) echo "MIPS" append_var DEFINES "-DMIPS_TARGET" ;; powerpc* | ppc*) echo "PowerPC" append_var DEFINES "-DPPC_TARGET" ;; riscv*) echo "RISC-V" ;; sh*) echo "SuperH" ;; sparc*) echo "SPARC" ;; wasm32) echo "wasm32" ;; x86_64 | amd64) echo "x86_64" _have_amd64=yes define_in_config_h_if_yes $_have_amd64 'HAVE_AMD64' ;; *) echo "unknown ($_host_cpu)" ;; esac # # Determine build settings # echo_n "Checking hosttype... " echo $_host_os case $_host_os in 3ds) _optimization_level=-O2 append_var DEFINES "-D__3DS__" append_var DEFINES "-DARM" append_var DEFINES "-DARM11" append_var CXXFLAGS "-march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft" append_var CXXFLAGS "-mword-relocations" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-I$DEVKITPRO/libctru/include" append_var CXXFLAGS "-I$DEVKITPRO/portlibs/3ds/include" append_var LDFLAGS "-march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft" append_var LDFLAGS "-L$DEVKITPRO/libctru/lib" append_var LDFLAGS "-L$DEVKITPRO/portlibs/3ds/lib" append_var LDFLAGS "-specs=3dsx.specs -lctru" append_var LIBS "-lcitro3d" ;; amigaos*) # AmigaOS (PPC) target _port_mk="backends/platform/sdl/amigaos/amigaos.mk" add_line_to_config_mk 'AMIGAOS = 1' # -mlongcall is needed to fix relocation errors, # otherwise we crash with big engines (i.e. AGS) append_var CXXFLAGS "-mlongcall" # Dependencies might also be compiled with stack protection append_var LDFLAGS "-fstack-protector" # Enable full optimizations for non-debug builds if test "$_debug_build" = no; then _optimization_level=-O3 else _optimization_level=-O0 define_in_config_if_yes "$_debug_build" 'DEBUG_BUILD' fi # dynamic builds leave out resources to save binary size # and detection features *must* be static if test "$_dynamic_modules" = yes ; then _builtin_resources=no _plugins_default=dynamic else _plugins_default=static _static_build=yes fi # use 'long' for ScummVM's 4 byte typedef, because AmigaOS # already typedefs (u)int32 as (unsigned) long and suppress # those noisy format warnings caused by the 'long' 4 byte append_var CXXFLAGS "-Wno-format" ;; android) case $_host in android-arm-v7a | android-armeabi-v7a) # Disable NEON for older devices (like with Tegra 2) append_var CXXFLAGS "-mfpu=vfp" # This is really old CPU but might be still used with android 4.1, it slightly increases code size and decreases performance. append_var LDFLAGS "-Wl,--fix-cortex-a8" # Allow NEON optimized code after runtime detection _ext_neon=yes ABI="armeabi-v7a" ;; android-arm64-v8a) ABI="arm64-v8a" ;; android-x86) ABI="x86" ;; android-x86_64) ABI="x86_64" ;; ouya) append_var CXXFLAGS "-mtune=cortex-a9" ABI="armeabi-v7a" ;; esac append_var CXXFLAGS "-Wno-inconsistent-missing-override" append_var CXXFLAGS "-fpic" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-funwind-tables" if test "$_debug_build" = no; then _optimization_level=-Os append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-fstrict-aliasing" else _optimization_level=-O0 append_var CXXFLAGS "-fno-omit-frame-pointer" append_var CXXFLAGS "-fno-strict-aliasing" fi # Build ID is needed for native debugging in Android Studio append_var LDFLAGS "-Wl,--build-id=sha1" add_line_to_config_mk "ANDROID_SDK_ROOT := $ANDROID_SDK_ROOT" add_line_to_config_mk "ANDROID_NDK_ROOT := $ANDROID_NDK_ROOT" _seq_midi=no ;; beos*) append_var DEFINES "-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" append_var CXXFLAGS "-fhuge-objects" append_var LIBS "-lbind -lsocket" _seq_midi=no ;; cygwin*) if test "$_cygwin_build" = no; then echo ERROR: Cygwin building is not supported by ScummVM anymore. Consider using MinGW. exit 1 else echo WARNING: Cygwin building is not supported by ScummVM anymore. echo Cygwin should be used only for development purposes and testing POSIX code on Windows. echo Consider using MinGW instead. append_var DEFINES "-D_GNU_SOURCE" fi ;; darwin*) case $_host_cpu in powerpc*) if test "$_dynamic_modules" = no ; then echo "WARNING: Building static engines will probably fail at link time on Mac PowerPC" fi ;; esac append_var DEFINES "-DMACOSX" append_var LIBS "-framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI" # SDL2 doesn't seem to add Cocoa for us. append_var LIBS "-framework Cocoa" add_line_to_config_mk 'MACOSX = 1' _seq_midi=no # Now we may have MacPorts or Fink installed # Which put libraries and headers in non-standard places # Checking them here # MacPorts # There is no way to get the prefix, so implementing a hack here macport_version=`port version 2>/dev/null` if test "$?" -eq 0; then macport_version="`echo "${macport_version}" | sed -ne 's/Version: \([0-9]\.[0-9]\.[0-9]\)/\1/gp'`" echo_n "You seem to be running MacPorts version ${macport_version}..." macport_prefix=`which port` # strip off /bin/port from /opt/local/bin/port macport_prefix=`dirname ${macport_prefix}` macport_prefix=`dirname ${macport_prefix}` echo "adding ${macport_prefix} to paths" LDFLAGS="-L${macport_prefix}/lib $LDFLAGS" CXXFLAGS="-I${macport_prefix}/include $CXXFLAGS" if test -z "$_staticlibpath"; then _staticlibpath=${macport_prefix} echo "Set staticlib-prefix to ${_staticlibpath}" fi fi # Fink # There is no way to get the prefix, so implementing a hack here fink_version=`fink -V 2>/dev/null` if test "$?" -eq 0; then fink_version="`echo "${fink_version}" | sed -ne 's/Package manager version: \([0-9.]*\)/\1/gp'`" echo_n "You seem to be running Fink version ${fink_version}..." fink_prefix=`which fink` # strip off /bin/fink from /sw/bin/port fink_prefix=`dirname ${fink_prefix}` fink_prefix=`dirname ${fink_prefix}` echo "adding ${fink_prefix} to paths" LDFLAGS="-L${fink_prefix}/lib $LDFLAGS" CXXFLAGS="-I${fink_prefix}/include $CXXFLAGS" if test -z "$_staticlibpath"; then _staticlibpath=${fink_prefix} echo "Set staticlib-prefix to ${_staticlibpath}" fi fi # Homebrew brew_version=`brew -v 2>/dev/null` if test "$?" -eq 0; then brew_version="`echo "${brew_version}" | sed -ne 's/Homebrew \([0-9.]*\)/\1/gp'`" echo_n "You seem to be running Homebrew version ${brew_version}..." brew_prefix=`brew --prefix` echo "adding ${brew_prefix} to paths" LDFLAGS="-L${brew_prefix}/lib $LDFLAGS" CXXFLAGS="-I${brew_prefix}/include $CXXFLAGS" if test -z "$_staticlibpath"; then _staticlibpath=${brew_prefix} echo "Set staticlib-prefix to ${_staticlibpath}" fi fi # If _staticlibpath is not set yet try first /sw (fink) then /usr/local # (the macports case is handled above). if test -z "$_staticlibpath"; then if test -d "/sw"; then _staticlibpath=/sw echo "Set staticlib-prefix to ${_staticlibpath}" elif test -d "/usr/local"; then _staticlibpath=/usr/local echo "Set staticlib-prefix to ${_staticlibpath}" else echo "Could not determine prefix for static libraries" fi fi # If _xcodetoolspath is not set yet use xcode-select to get the path if test -z "$_xcodetoolspath"; then _xcodetoolspath= if command -v xcode-select >/dev/null 2>&1; then _xcodetoolspath=`xcode-select -print-path`/Tools if test -d "$_xcodetoolspath"; then echo "Set xcodetools-path to ${_xcodetoolspath}" fi fi if test -z "$_xcodetoolspath"; then echo "Could not determine path for Xcode Tools" fi fi echocheck "macOS deployment target" cat > $TMPC << EOF #include "AvailabilityMacros.h" #define _DIGIT(x) #x #define DIGIT(x) _DIGIT(x) const char version[] = "Version:" DIGIT(MAC_OS_X_VERSION_MIN_REQUIRED); const char *_version() { char *s = (char *)version; return s; } int main(int argc, char *argv[]) { _version(); return 0; } EOF cc_check_no_clean if $_strings $TMPO$HOSTEXEEXT | grep Version: >/dev/null; then _macos_min_version=`$_strings $TMPO$HOSTEXEEXT | grep Version:` _macos_min_version="${_macos_min_version#Version:}" fi cc_check_clean # Also get a dot version of the min version _macos_min_version_dot=undefined if test -n "$_macos_min_version" ; then if test "$_macos_min_version" -lt 101000; then _macos_min_ver_major=$((${_macos_min_version}/100)) _macos_min_ver_minor=$((${_macos_min_version}/10 - 10*${_macos_min_ver_major})) _macos_min_version_dot=${_macos_min_ver_major}.${_macos_min_ver_minor} else _macos_min_ver_major=$((${_macos_min_version}/10000)) _macos_min_ver_minor=$((${_macos_min_version}/100 - 100*${_macos_min_ver_major})) _macos_min_version_dot=${_macos_min_ver_major}.${_macos_min_ver_minor} fi fi echo $_macos_min_version_dot # Version-specific quirks if test -n "$_macos_min_version" ; then # When building for MacOS X 10.5 or below if test "$_macos_min_version" -lt 1060 ; then add_line_to_config_mk 'MACOSX_LEOPARD_OR_BELOW = 1' if test "$_debug_build" != no ; then # Prefer DWARF over stabs on older OSX; this requires a # newer GDB, but we need it for the updated toolchain # anyway. This improves the debugging experience quite # a lot, and it still creates meaningful traces for the # Crash Reporter of OSX 10.4. append_var CXXFLAGS "-gdwarf-2" fi fi # When building with SDK 10.14 or above, we cannot compile the 32 bits dock plugin # Assume the SDK version is the same as the min version. if test "$_macos_min_version" -gt 101399 ; then add_line_to_config_mk 'MACOSX_64_BITS_ONLY = 1' fi fi if test "$_host_cpu" = "aarch64" ; then add_line_to_config_mk 'MACOSX_ARM64 = 1' fi # Avoid "file has no symbols" noise from ranlib, if it's new enough ranlib_version=`$_ranlib -V 2>/dev/null` if test -n "$ranlib_version" ; then ranlib_version="`echo "${ranlib_version}" | sed -ne 's/.*cctools-\([0-9]\{1,\}\).*/\1/gp'`" if test -n "$ranlib_version" && test "$ranlib_version" -ge 862 ; then append_var _ranlib "-no_warning_for_no_symbols" # Also tell ar not to do its own calls to ranlib append_var _ar "-S" fi fi # Use pandoc to generate README and NEWS file for the bundle # Also default to HTML rather than plain text as it gives a nicer # formating, especially for the README. We could consider using RTF # as well, but TextEdit does not support links within the document, # and having a TOC with links, which we do with html, is quite convenient. _pandoc=yes if test "$_pandocformat" = "default"; then _pandocformat="html" fi ;; dreamcast) append_var DEFINES "-D__DC__" append_var DEFINES "-DNONSTANDARD_PORT" _detection_features_full=no if test "$_dynamic_modules" = yes ; then _detection_features_static=no fi # XXX: Enabling SCUMM v7+ hasn't been useful on DC for many years (bug #6008), # and may confuse users, since this is one of the most popular engines, so make # sure that it won't be enabled (until a better backend capability requirement # feature is implemented). This may also help SCUMMv6 and below behave better # on this very memory-limited platform. engine_disable scumm_7_8 ;; ds) _optimization_level=-Os append_var DEFINES "-D__DS__" append_var DEFINES "-DNDS" append_var DEFINES "-DARM9" append_var DEFINES "-DARM" append_var DEFINES "-DNONSTANDARD_PORT" append_var CXXFLAGS "-isystem $DEVKITPRO/libnds/include" append_var CXXFLAGS "-isystem $DEVKITPRO/portlibs/nds/include" append_var CXXFLAGS "-isystem $DEVKITPRO/portlibs/armv5te/include" append_var CXXFLAGS "-march=armv5te" append_var CXXFLAGS "-mtune=arm946e-s" append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-mthumb" append_var CXXFLAGS "-mthumb-interwork" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-fdata-sections" append_var CXXFLAGS "-fno-strict-aliasing" append_var CXXFLAGS "-fno-threadsafe-statics" append_var CXXFLAGS "-fuse-cxa-atexit" # Suppress format warnings as the long 4 byte causes noisy warnings. append_var CXXFLAGS "-Wno-format" append_var LDFLAGS "-mthumb" append_var LDFLAGS "-mthumb-interwork" append_var LDFLAGS "-mfloat-abi=soft" append_var LDFLAGS "-Wl,-Map,map.txt" append_var LDFLAGS "-L$DEVKITPRO/libnds/lib" append_var LDFLAGS "-L$DEVKITPRO/portlibs/nds/lib" append_var LDFLAGS "-L$DEVKITPRO/portlibs/armv5te/lib" append_var LIBS "-specs=ds_arm9.specs" append_var LIBS "-lfilesystem" append_var LIBS "-lfat" append_var LIBS "-lmm9" append_var LIBS "-lnds9" ;; emscripten) append_var DEFINES "-DEMSCRIPTEN" add_line_to_config_mk 'EMSCRIPTEN = 1' _port_mk="backends/platform/sdl/emscripten/emscripten.mk" append_var LDFLAGS "-s FORCE_FILESYSTEM" append_var LDFLAGS "-s INITIAL_MEMORY=128MB -s TOTAL_STACK=32MB -s ALLOW_MEMORY_GROWTH=1" append_var LDFLAGS "-s ASYNCIFY=1 -s ASYNCIFY_STACK_SIZE=1048576" if test "$_debug_build" = yes; then _optimization_level=-O2 append_var LDFLAGS "-O2 -g3 -s ASSERTIONS=2" else _optimization_level=-O3 append_var LDFLAGS "-O3" fi # activate emscripten-ports if test "$_sdl" != no; then # we enable SDL2 by default append_var LDFLAGS "-s USE_SDL=2 " fi # We explicitly disable optional libraries if not enabled. "auto" would depend # on whether the port has been used before (and is detected) which is unpredictable. if test "$_freetype2" = yes; then # neither pkg-config nor freetype-config work, so we setup freetype manually append_var LDFLAGS "-s USE_FREETYPE=1" _freetype_found="true" _freetypepath="$EMSDK/upstream/emscripten/cache/sysroot/include/freetype2/" FREETYPE2_CFLAGS="-I$_freetypepath" else _freetype2=no fi if test "$_gif" = yes; then append_var LDFLAGS "-s USE_GIFLIB=1" else _gif=no fi if test "$_jpeg" = yes; then append_var LDFLAGS "-s USE_LIBJPEG=1" else _jpeg=no fi if test "$_ogg" = yes; then append_var LDFLAGS "-s USE_OGG=1" else _ogg=no fi if test "$_png" = yes; then append_var LDFLAGS "-s USE_LIBPNG=1" else _png=no fi if test "$_vorbis" = yes; then append_var LDFLAGS "-s USE_VORBIS=1" else _vorbis=no fi if test "$_zlib" = yes; then append_var LDFLAGS "-s USE_ZLIB=1" else _zlib=no fi ;; freebsd* | dragonfly*) append_var LDFLAGS "-L/usr/local/lib" append_var CXXFLAGS "-I/usr/local/include" ;; gamecube) _optimization_level=-Os append_var CXXFLAGS "-mogc" append_var CXXFLAGS "-mcpu=750" append_var CXXFLAGS "-meabi" append_var CXXFLAGS "-mhard-float" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-fdata-sections" append_var CXXFLAGS "-fmodulo-sched" append_var CXXFLAGS "-fuse-cxa-atexit" append_var CXXFLAGS "-I$DEVKITPRO/libogc/include" append_var CXXFLAGS "-I$DEVKITPRO/portlibs/ppc/include" # libogc is required to link the cc tests (includes _start()) append_var LDFLAGS "-mogc" append_var LDFLAGS "-mcpu=750" append_var LDFLAGS "-L$DEVKITPRO/libogc/lib/cube" append_var LDFLAGS "-L$DEVKITPRO/portlibs/ppc/lib" append_var LDFLAGS "-logc" if test "$_dynamic_modules" = "yes" ; then # retarded toolchain patch forces --gc-sections, overwrite it append_var LDFLAGS "-Wl,--no-gc-sections" fi ;; haiku*) append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" append_var DEFINES "-D_GNU_SOURCE" # Needs -lnetwork for the timidity MIDI driver append_var LIBS "-lnetwork" _seq_midi=no ;; irix*) append_var DEFINES "-DIRIX" append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" append_var LIBS "-lmd -lfastm -lm" _ranlib=: ;; linux* | uclinux*) ;; mingw*) append_var DEFINES "-DWIN32" # append_var DEFINES "-D__USE_MINGW_ANSI_STDIO=0" # Modern MinGW does not need it append_var LDFLAGS "-static-libgcc -static-libstdc++" append_var LIBS "-lmingw32 -lwinmm -lgdi32" append_var OBJS "dists/scummvm.o" add_line_to_config_mk 'WIN32 = 1' _port_mk="backends/platform/sdl/win32/win32.mk" ;; mint*) append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" append_var DEFINES "-D_GNU_SOURCE" append_var DEFINES "-D_ISOC11_SOURCE" ;; morphos*) if test "$_debug_build" = no; then _optimization_level=-O2 fi append_var LDFLAGS "-Wl,--export-dynamic" append_var LDFLAGS "-L/usr/local/lib" append_var CXXFLAGS "-D__MORPHOS_SHAREDLIBS" # Suppress format warnings as the long 4 byte causes noisy warnings. append_var CXXFLAGS "-Wno-format" add_line_to_config_mk 'MORPHOS = 1' _port_mk="backends/platform/sdl/morphos/morphos.mk" # use SDL2 _sdlconfig=sdl2-config ;; msys) echo ERROR: Using the MSYS shell in msys mode is not supported. Please use the MSYS shell in mingw mode instead. exit 1 ;; n64) append_var DEFINES "-D__N64__" append_var DEFINES "-DLIMIT_FPS" append_var DEFINES "-DNONSTANDARD_PORT" append_var DEFINES "-DDISABLE_COMMAND_LINE" append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER" append_var DEFINES "-DDISABLE_DOSBOX_OPL" append_var DEFINES "-DDISABLE_FANCY_THEMES" append_var DEFINES "-DDISABLE_NES_APU" append_var DEFINES "-DDISABLE_SID" append_var DEFINES "-DREDUCE_MEMORY_USAGE" add_line_to_config_mk 'N64 = 1' _detection_features_full=no _nuked_opl=no ;; openbsd*) append_var LDFLAGS "-L/usr/local/lib" append_var CXXFLAGS "-I/usr/local/include" _seq_midi=no ;; ps3) # Force use of SDL and freetype from the ps3 toolchain _sdlpath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin" _freetypepath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin" _libcurlpath="$PS3DEV/portlibs/ppu:$PS3DEV/portlibs/ppu/bin" append_var DEFINES "-DPLAYSTATION3" append_var CXXFLAGS "-mcpu=cell -mno-fp-in-toc -I$PSL1GHT/ppu/include -I$PS3DEV/portlibs/ppu/include" append_var LDFLAGS "-L$PSL1GHT/ppu/lib -L$PS3DEV/portlibs/ppu/lib" # The network libraries are statically linked and need to be specified in the following order append_var SDL_NET_LIBS "-lSDL2_net -lnet -lnetctl -lsysmodule" add_line_to_config_mk 'PLAYSTATION3 = 1' add_line_to_config_h "#define PREFIX \"${prefix}\"" # PS3 has no OpenGL support at all even though it's SDL based _opengl_mode=none ;; psp2) _freetypepath="$VITASDK/arm-vita-eabi/bin" _freetype2=yes _libcurlpath="$VITASDK/arm-vita-eabi/bin" append_var CXXFLAGS "--sysroot=$VITASDK/arm-vita-eabi" append_var LDFLAGS "--sysroot=$VITASDK/arm-vita-eabi" append_var DEFINES "-DPSP2 -DSYSTEM_NOT_SUPPORTING_D_TYPE" append_var CXXFLAGS "-Wl,-q -I$VITASDK/arm-vita-eabi/include" append_var CXXFLAGS "-march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard" append_var LDFLAGS "-Wl,-q -L$VITASDK/arm-vita-eabi/lib" #the next line fixes a crash when starting scumm-7-8 games (The Dig etc.) #when either -O2, -O3 or -Os optimizations are enabled append_var CXXFLAGS "-fno-optimize-sibling-calls" #the next line fixes "branch out of range" error in gob engine when -Os is used append_var CXXFLAGS "-mlong-calls" append_var CXXFLAGS "-mword-relocations" append_var CXXFLAGS "-fomit-frame-pointer" #ensure verbose output during linking to prevent buildbot kills after 1200 seconds if test "$_verbose_build" = yes ; then append_var LDFLAGS "-Wl,-v --verbose" fi if test "$_dynamic_modules" = yes ; then _detection_features_static=no _plugins_default=dynamic fi if test "$_debug_build" = no; then #optimize for smallest file size. This is necessary to prevent a crash on startup #due to the large executable file size when many engines are enabled #for example when --enable-all-engines is used to enable all the unstable engines _optimization_level=-Os fi if test "$_debug_build" = yes; then _optimization_level=-O0 append_var DEFINES "-D__PSP2_DEBUG__" append_var LIBS "-lpsp2shell" fi add_line_to_config_mk 'PSP2 = 1' add_line_to_config_h "#define PREFIX \"${prefix}\"" ;; psp) _optimization_level=-O2 _freetypepath="$PSPDEV/psp/bin" append_var CXXFLAGS "-I$PSPSDK/include" # FIXME: Why is the following in CXXFLAGS and not in DEFINES? Change or document this. append_var CXXFLAGS "-D_PSP_FW_VERSION=150" append_var CXXFLAGS "-mno-gpopt" add_line_to_config_mk 'PSP = 1' ;; riscos) define_in_config_if_yes yes 'RISCOS' append_var LDFLAGS "-static" _optimization_level=-O3 _port_mk="backends/platform/sdl/riscos/riscos.mk" _pandoc=yes _sdlconfig=sdl-config # RiscOS has no OpenGL support at all even though it's SDL based _opengl_mode=none if test "$_dynamic_modules" = yes ; then _plugins_default=dynamic fi _detection_features_full=no ;; solaris*) append_var DEFINES "-DSOLARIS" append_var DEFINES "-DSYSTEM_NOT_SUPPORTING_D_TYPE" # Needs -lbind -lsocket for the timidity MIDI driver append_var LIBS "-lnsl -lsocket" ;; switch) _pkgconfig="$DEVKITPRO/portlibs/switch/bin/aarch64-none-elf-pkg-config" _libcurlpath="$DEVKITPRO/portlibs/switch/bin" _sdlpath="$DEVKITPRO/portlibs/switch/bin" append_var DEFINES "-DSWITCH -D__SWITCH__ -DNINTENDO_SWITCH" append_var CXXFLAGS "-march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE -ftls-model=local-exec" append_var CXXFLAGS "-ffunction-sections -fdata-sections" append_var CXXFLAGS "-I$DEVKITPRO/libnx/include -I$DEVKITPRO/portlibs/switch/include" append_var LDFLAGS "-L$DEVKITPRO/libnx/lib -L$DEVKITPRO/portlibs/switch/lib" append_var LDFLAGS "-specs=$DEVKITPRO/libnx/switch.specs" add_line_to_config_mk 'SWITCH = 1' if test "$_debug_build" = yes; then append_var DEFINES "-D__SWITCH_DEBUG__" else _optimization_level=-O3 fi ;; wii) _optimization_level=-Os append_var CXXFLAGS "-mrvl" append_var CXXFLAGS "-mcpu=750" append_var CXXFLAGS "-meabi" append_var CXXFLAGS "-mhard-float" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-fdata-sections" append_var CXXFLAGS "-fmodulo-sched" append_var CXXFLAGS "-fuse-cxa-atexit" append_var CXXFLAGS "-I$DEVKITPRO/libogc/include" append_var CXXFLAGS "-I$DEVKITPRO/portlibs/ppc/include" # libogc is required to link the cc tests (includes _start()) append_var LDFLAGS "-mrvl" append_var LDFLAGS "-mcpu=750" append_var LDFLAGS "-L$DEVKITPRO/libogc/lib/wii" append_var LDFLAGS "-L$DEVKITPRO/portlibs/ppc/lib" append_var LDFLAGS "-logc" if test "$_dynamic_modules" = "yes" ; then # retarded toolchain patch forces --gc-sections, overwrite it append_var LDFLAGS "-Wl,--no-gc-sections" fi ;; esac if test -n "$_host"; then # Cross-compiling mode - add your target here if needed echo "Cross-compiling to $_host" case "$_host" in 3ds) if test "$_dynamic_modules" = yes ; then _detection_features_static=no _plugins_default=dynamic else _detection_features_full=no fi append_var DEFINES "-DDISABLE_FANCY_THEMES" append_var DEFINES "-DDISABLE_HELP_STRINGS" append_var DEFINES "-DDISABLE_NES_APU" _backend="3ds" _build_scalers=no _vkeybd=yes _seq_midi=no _mt32emu=no _timidity=no # Should use Tremor instead of Vorbis _vorbis=no _port_mk="backends/platform/3ds/3ds.mk" ;; android-* | ouya) # __ANDROID__ is defined by Clang in the NDK # we link a .so as default append_var LDFLAGS "-shared" append_var LDFLAGS "-Wl,-Bsymbolic,--no-undefined" append_var LDFLAGS "-static-libstdc++" HOSTEXEPRE=lib HOSTEXEEXT=.so _backend="android" _port_mk="backends/platform/$_backend/android.mk" _build_aspect=no _seq_midi=no _timidity=no ;; arm-linux|arm*-linux-gnueabi|arm-*-linux) ;; arm-vfp-riscos) append_var LDFLAGS "-L$GCCSDK_INSTALL_ENV/vfp/lib" append_var PLUGIN_LDFLAGS "-L$GCCSDK_INSTALL_ENV/vfp/lib" append_var CXXFLAGS "-isystem $GCCSDK_INSTALL_ENV/vfp/include" if test -z "$PKG_CONFIG_LIBDIR"; then PKG_CONFIG_LIBDIR="$GCCSDK_INSTALL_ENV/vfp/lib/pkgconfig" fi _sdlpath=$GCCSDK_INSTALL_ENV/vfp/bin _freetypepath=$GCCSDK_INSTALL_ENV/vfp/bin _libcurlpath=$GCCSDK_INSTALL_ENV/vfp/bin append_var CXXFLAGS "-march=armv6zk" append_var CXXFLAGS "-mtune=cortex-a9" append_var CXXFLAGS "-mfpu=vfp" append_var LDFLAGS "-mfpu=vfp" append_var PLUGIN_LDFLAGS "-mfpu=vfp" append_var ASFLAGS "-mfpu=vfp" ;; arm-*riscos) append_var LDFLAGS "-L$GCCSDK_INSTALL_ENV/lib" append_var PLUGIN_LDFLAGS "-L$GCCSDK_INSTALL_ENV/lib" append_var CXXFLAGS "-isystem $GCCSDK_INSTALL_ENV/include" if test -z "$PKG_CONFIG_LIBDIR"; then PKG_CONFIG_LIBDIR="$GCCSDK_INSTALL_ENV/lib/pkgconfig" fi _sdlpath=$GCCSDK_INSTALL_ENV/bin _freetypepath=$GCCSDK_INSTALL_ENV/bin _libcurlpath=$GCCSDK_INSTALL_ENV/bin append_var CXXFLAGS "-march=armv3m" append_var CXXFLAGS "-mtune=xscale" _vorbis=no ;; bfin*) ;; *darwin*) _ranlib=$_host-ranlib _strip=$_host-strip ;; wasm*-emscripten) _backend="sdl" # Disable cloud and SDL_Net as this is handled in the browser _cloud=no _sdlnet=no _libcurl=no _curl=no _enet=no _ar="emar cr" _ranlib="emranlib" ;; raspberrypi) _libcurlpath=$RPI_ROOT/usr/bin # This is needed because the official cross compiler doesn't have multiarch enabled # but Raspbian does. # Be careful as it's the linker (LDFLAGS) which must know about sysroot. # These are needed to build against Raspbian's libSDL. append_var LDFLAGS "--sysroot=$RPI_ROOT" append_var LDFLAGS "-B$RPI_ROOT/usr/lib/arm-linux-gnueabihf" append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/usr/lib/arm-linux-gnueabihf/pulseaudio" append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/usr/lib/arm-linux-gnueabihf" append_var LDFLAGS "-Xlinker --rpath-link=$RPI_ROOT/lib/arm-linux-gnueabihf" append_var CXXFLAGS "-isystem $RPI_ROOT/usr/include/arm-linux-gnueabihf" append_var CXXFLAGS "-I$RPI_ROOT/usr/include" # We prefer SDL2 on the Raspberry Pi: acceleration now depends on it # since SDL2 manages dispmanx/GLES2 very well internally. # SDL1 is bit-rotten on this platform. _sdlconfig=sdl2-config ;; dreamcast) append_var DEFINES "-DDISABLE_DEFAULT_SAVEFILEMANAGER" append_var DEFINES "-DDISABLE_TEXT_CONSOLE" append_var DEFINES "-DDISABLE_COMMAND_LINE" # Enable serial debugging output only when --enable-debug is passed if test "$_release_build" = yes -o "$_debug_build" != yes; then append_var DEFINES "-DNOSERIAL" fi _optimization_level=-O3 append_var CXXFLAGS "-funroll-loops" append_var CXXFLAGS "-fschedule-insns2" append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-fdelete-null-pointer-checks" _backend="dc" _build_scalers=no _build_aspect=no _tinygl=no # These two are needed due to shortcomings of the # detection systems. Do not remove until auto- # detection works correctly. _mad=yes _zlib=yes _port_mk="backends/platform/dc/dreamcast.mk" ;; ds) if test "$_dynamic_modules" = yes ; then _detection_features_static=no _plugins_default=dynamic fi _detection_features_full=no if test "$_debug_build" != yes; then append_var DEFINES "-DDISABLE_TEXT_CONSOLE" fi append_var DEFINES "-DDISABLE_HELP_STRINGS" append_var DEFINES "-DDISABLE_DOSBOX_OPL" append_var DEFINES "-DDISABLE_FANCY_THEMES" append_var DEFINES "-DDISABLE_NES_APU" append_var DEFINES "-DREDUCE_MEMORY_USAGE" append_var DEFINES "-DSTREAM_AUDIO_FROM_DISK" append_var DEFINES "-DVECTOR_RENDERER_FORMAT=1555" _backend="ds" _build_scalers=no _build_aspect=no _mt32emu=no _nuked_opl=no _tinygl=no _bink=no _lua=no _png=no _freetype2=no _port_mk="backends/platform/ds/ds.mk" ;; gamecube) _backend="wii" _build_scalers=no _build_aspect=no _vkeybd=yes _mt32emu=no _port_mk="backends/platform/wii/wii.mk" add_line_to_config_mk 'GAMECUBE = 1' add_line_to_config_h '#define AUDIO_REVERSE_STEREO' 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 */" add_line_to_config_h "/* #define DEBUG_WII_GDB_NETWORK */" add_line_to_config_h "#define USE_WII_DI" ;; ios7*) add_line_to_config_mk 'IPHONE = 1' append_var DEFINES "-DIPHONE -DIPHONE_IOS7" _backend="ios7" _seq_midi=no _timidity=no _ext_neon=yes ;; kos32) # neither pkg-config nor *-config work, so we setup everything manually _pkgconfig=/bin/false _pkg_config=no ZLIB_CFLAGS="-I${KOS32_SDK_DIR}/sources/zlib" if test "$_png" != no; then PNG_CFLAGS="-I${KOS32_SDK_DIR}/sources/libpng" PNG_LIBS="-lpng16 -lz" _png=yes fi JPEG_CFLAGS="-I${KOS32_SDK_DIR}/sources/libjpeg" FREETYPE2_STATIC_LIBS="-lfreetype" FREETYPE2_CFLAGS="-I${KOS32_SDK_DIR}/sources/freetype/include" _freetype_found="true" SDL_CFLAGS="-I${KOS32_SDK_DIR}/sources/SDL-1.2.2_newlib/include" SDL_LIBS="-lSDLn -lsound" _sdl=yes _sdlversion=1.2.2 _backend="kolibrios" _timidity=no add_line_to_config_mk 'KOLIBRIOS = 1' add_line_to_config_mk 'KOS32_AUTOBUILD = '"${KOS32_AUTOBUILD}" add_line_to_config_mk 'KOS32_SDK_DIR = '"${KOS32_SDK_DIR}" _port_mk="backends/platform/sdl/kolibrios/kolibrios.mk" ;; m68k-atari-mint*) # auto -> yes (overriden by $_release_build = yes) #if test "$_debug_build" = "no"; then # # --disable-debug # append_var LDFLAGS "-s" #fi # auto -> no if test "$_optimizations" = "yes"; then # --enable-release, --enable-optimizations append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-fno-exceptions" append_var CXXFLAGS "-ffast-math -fno-unsafe-math-optimizations" fi # auto -> no if test "$_release_build" = "yes"; then # --enable-release append_var DEFINES "-DNDEBUG" #append_var DEFINES "-DDISABLE_TEXT_CONSOLE" fi append_var LDFLAGS "-Wl,--msuper-memory" _seq_midi=no _timidity=no ;; maemo) _optimization_level=-Os append_var CXXFLAGS "-mcpu=arm926ej-s" append_var CXXFLAGS "-fomit-frame-pointer" append_var INCLUDES "-I/usr/X11R6/include" append_var LIBS "-L/usr/lib" _backend="maemo" _vkeybd=yes _build_hq_scalers=no _mt32emu=no _alsa=no _mad=yes _tremor=yes _zlib=yes ;; *mingw32*) _sdlconfig=$_host-sdl2-config _libcurlconfig=$_host-curl-config _pkgconfig=$_host-pkg-config _windres=$_host-windres _ar="$_host-ar cr" _ranlib=$_host-ranlib _strip=$_host-strip if `which $_host-peldd >/dev/null 2>&1`; then _ldd="$_host-peldd -t --ignore-errors" fi ;; mips-sgi*) append_var LDFLAGS "-static-libgcc" append_var LIBS "-laudio" ;; miyoo) _sysroot=`$CXX --print-sysroot` _sdlpath=$_sysroot/usr/bin append_var DEFINES "-DMIYOO -DREDUCE_MEMORY_USAGE -DUNCACHED_PLUGINS" append_var CXXFLAGS "-march=armv5te -mtune=arm926ej-s -ffast-math -fomit-frame-pointer -ffunction-sections -fdata-sections" append_var LDFLAGS "-march=armv5te -mtune=arm926ej-s -ffast-math -fomit-frame-pointer -ffunction-sections -fdata-sections" append_var LDFLAGS "-O3 -Wl,--as-needed,--gc-sections" _vkeybd=yes _alsa=no # Explicitly use tremor _vorbis=no _tremor=yes _mt32emu=no _timidity=no _fluidsynth=no _highres=no # TODO: There's some problem with libFLAC availability. Fix and reenable _flac=no _seq_midi=no _nuked_opl=no _curl=no _optimization_level=-O3 _backend="miyoo" _port_mk="backends/platform/sdl/miyoo/miyoo.mk" add_line_to_config_mk 'MIYOO = 1' add_line_to_config_mk "MIYOO_TARGET = miyoo" ;; miyoomini) _sysroot=`$CXX --print-sysroot` _sdlpath=$_sysroot/usr/bin append_var DEFINES "-DMIYOOMINI -DREDUCE_MEMORY_USAGE -DUNCACHED_PLUGINS" append_var CXXFLAGS "-marm -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -O3 -march=armv7ve -ffast-math -fomit-frame-pointer -fno-strength-reduce" append_var LDFLAGS "-marm -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -O3 -march=armv7ve -ffast-math -fomit-frame-pointer -fno-strength-reduce" append_var LDFLAGS "-O3 -Wl,--as-needed,--gc-sections" _vkeybd=yes _alsa=no _mt32emu=no _timidity=no _fluidsynth=no _highres=yes _seq_midi=no _nuked_opl=no _curl=no _optimization_level=-O3 _backend="miyoo" _port_mk="backends/platform/sdl/miyoo/miyoo.mk" add_line_to_config_mk 'MIYOO = 1' add_line_to_config_mk "MIYOO_TARGET = miyoomini" ;; n64) append_var CXXFLAGS "-mno-extern-sdata" append_var CXXFLAGS "--param max-inline-insns-auto=20" append_var CXXFLAGS "-fomit-frame-pointer" append_var CXXFLAGS "-march=vr4300" append_var CXXFLAGS "-mtune=vr4300" append_var CXXFLAGS "-mhard-float" append_var LDFLAGS "-march=vr4300" append_var LDFLAGS "-mtune=vr4300" append_var LDFLAGS "-nodefaultlibs" append_var LDFLAGS "-nostartfiles" append_var LDFLAGS "-mno-crt0" append_var LDFLAGS "-L$N64SDK/hkz-libn64" append_var LDFLAGS "-L$N64SDK/lib" append_var LDFLAGS "-T n64ld_cpp.x -Xlinker -Map -Xlinker scummvm.map" _backend="n64" _mt32emu=no _build_scalers=no _build_aspect=no _savegame_timestamp=no _translation=no _text_console=no _vkeybd=yes _dynamic_modules=no _plugins_default=static # Force use of libmad, libtremor and zlib _mad=no _tremor=yes _zlib=yes _port_mk="backends/platform/n64/n64.mk" ;; neuros) append_var DEFINES "-DNEUROS" _backend='null' _build_hq_scalers=no _mt32emu=no ;; opendingux-*) _sysroot=`$CXX --print-sysroot` _sdlpath=$_sysroot/usr/bin append_var DEFINES "-DDINGUX -DOPENDINGUX -DREDUCE_MEMORY_USAGE -DUNCACHED_PLUGINS" append_var CXXFLAGS "-fdata-sections -ffunction-sections -mplt" append_var LDFLAGS "-fdata-sections -ffunction-sections -mplt" append_var LDFLAGS "-O3 -Wl,--as-needed,--gc-sections" if [ x"$_dynamic_modules" != xyes ]; then append_var CXXFLAGS "-mno-shared" append_var LDFLAGS "-mno-shared" fi _vkeybd=yes _alsa=no _vorbis=no _mt32emu=no _timidity=no _fluidsynth=no _theoradec=no _seq_midi=no _nuked_opl=no _curl=no _optimization_level=-O3 _backend="opendingux" _port_mk="backends/platform/sdl/opendingux/opendingux.mk" add_line_to_config_mk 'OPENDINGUX = 1' add_line_to_config_mk "OPENDINGUX_TARGET = ${_host#opendingux-}" case "$_host" in opendingux-gcw0) ;; opendingux-lepus) append_var DEFINES "-DLEPUS" _highres=no _build_hq_scalers=no ;; opendingux-rs90) append_var DEFINES "-DRS90 -DDISABLE_FANCY_THEMES" _16bit=no _highres=no # Scaling is handled by IPU _build_scalers=no ;; *) echo "WARNING: Unknown OpenDingux target" ;; esac ;; openpandora) # Use -O3 on the OpenPandora for optimized builds. if test "$_optimizations" = yes; then _optimization_level=-O3 fi append_var CXXFLAGS "-march=armv7-a" append_var CXXFLAGS "-mtune=cortex-a8" append_var CXXFLAGS "-mfloat-abi=softfp" append_var CXXFLAGS "-mfpu=neon" append_var CXXFLAGS "-fsingle-precision-constant" append_var ASFLAGS "-mfloat-abi=softfp" _backend="openpandora" _build_hq_scalers=yes _build_edge_scalers=no _vkeybd=no _mt32emu=no _seq_midi=no _port_mk="backends/platform/openpandora/op-bundle.mk" ;; ppc-amigaos) # PPC Linker requires this to fix relocation errors append_var CXXFLAGS "-mlongcall" _port_mk="backends/platform/sdl/amigaos/amigaos.mk" ;; ppc-morphos) # PPC Linker requires this to fix relocation errors append_var CXXFLAGS "-mlongcall" _port_mk="backends/platform/sdl/morphos/morphos.mk" ;; ps3) _timidity=no _vkeybd=yes _port_mk="backends/platform/sdl/ps3/ps3.mk" ;; psp2) _backend="psp2" _vkeybd=yes _build_scalers=yes _build_hq_scalers=no _mt32emu=no _timidity=no _port_mk="backends/platform/sdl/psp2/psp2.mk" #the -gcc- variants allow link time optimization _ar="$_host_alias-gcc-ar cr" _ranlib=$_host_alias-gcc-ranlib ;; psp) _backend="psp" _build_scalers=no _build_aspect=no _mt32emu=no _port_mk="backends/platform/psp/psp.mk" _pkgconfig="${PSPDEV}/bin/psp-pkg-config" ;; tvos) add_line_to_config_mk 'IPHONE = 1' append_var DEFINES "-DIPHONE -DIPHONE_IOS7" _backend="ios7" _seq_midi=no _timidity=no ;; sailfish) append_var DEFINES "-DSAILFISH" append_var LDFLAGS "-Wl,-rpath,/usr/share/org.scummvm.scummvm/lib" _vkeybd=yes HOSTEXEPRE=org.scummvm. _backend="sailfish" add_line_to_config_mk 'SAILFISH = 1' ;; samsungtv) append_var DEFINES "-DSAMSUNGTV" append_var DEFINES "-DDISABLE_COMMAND_LINE" append_var ASFLAGS "-mfpu=vfp" HOSTEXEEXT=".so" _backend="samsungtv" _mt32emu=no _vkeybd=yes ;; switch) _backend="switch" # Switch port crashes when switching between SDL2 and OpenGL # graphics. But OpenGL works when it is enabled from the start. # This might be related to a known crash on OpenGL de-init due # to the OpenGL implementation on this platform. _vkeybd=yes _seq_midi=no _timidity=no _port_mk="backends/platform/sdl/switch/switch.mk" ;; wii) _backend="wii" _build_scalers=no _build_aspect=no _tinygl=no _nuked_opl=no _mt32emu=no _vkeybd=yes _port_mk="backends/platform/wii/wii.mk" add_line_to_config_mk 'GAMECUBE = 0' add_line_to_config_h '#define AUDIO_REVERSE_STEREO' 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 DEBUG_WII_GDB_NETWORK */" 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" ;; *) echo "WARNING: Unknown target, continuing with auto-detected values" ;; esac fi # # Backend related stuff # case $_backend in 3ds) ;; android) append_var DEFINES "-DREDUCE_MEMORY_USAGE" append_var DEFINES "-DNONSTANDARD_PORT" append_var DEFINES "-DANDROID_BACKEND" append_var INCLUDES '-I$(srcdir)/backends/platform/'$_backend append_var CXXFLAGS "-Wa,--noexecstack" append_var LDFLAGS "-Wl,-z,noexecstack" # Newer Android devices will have 16K pages so we must be aligned append_var LDFLAGS "-Wl,-z,max-page-size=16384" # removed the following directive - was causing compilation issues when not also explicitly using --disable-mt32emu # append_var INCLUDES "-isystem $ANDROID_NDK/sources/cxx-stl/system/include" _sdl=no if test "$_host" = ouya; then _sdlnet=no fi ;; atari) define_in_config_if_yes yes "ATARI" append_var DEFINES "-DDISABLE_LAUNCHERDISPLAY_GRID" append_var DEFINES "-DDISABLE_SID" append_var DEFINES "-DDISABLE_NES_APU" #append_var DEFINES "-DDISABLE_DOSBOX_OPL" append_var LIBS "-lgem" ;; dc) append_var INCLUDES '-I$(srcdir)/backends/platform/dc' append_var INCLUDES "-isystem $RONINDIR/include" append_var LDFLAGS "-Wl,-Ttext,0x8c010000" append_var LDFLAGS "-nostartfiles" append_var LDFLAGS "-L$RONINDIR/lib" append_var LDFLAGS "$RONINDIR/lib/crt0.o" # Enable serial debugging output only when --enable-debug is passed if test "$_release_build" = yes -o "$_debug_build" != yes; then append_var LIBS "-lronin-noserial -lm" append_var LDFLAGS "-lronin-noserial -lm" else append_var LIBS "-lronin -lm" append_var LDFLAGS "-lronin -lm" fi ;; ds) append_var INCLUDES '-I$(srcdir)/backends/platform/ds' ;; ios7) append_var LIBS "-lobjc -framework UIKit -framework CoreGraphics -framework OpenGLES" append_var LIBS "-framework QuartzCore -framework CoreFoundation -framework Foundation" append_var LIBS "-framework AudioToolbox -framework CoreAudio -framework SystemConfiguration " append_var LIBS "-framework GameController" if test "$_host" = 'tvos'; then append_var LDFLAGS "-mtvos-version-min=9 -arch arm64" append_var CFLAGS "-mtvos-version-min=9 -arch arm64" append_var CXXFLAGS "-mtvos-version-min=9 -arch arm64" elif test "$_host_cpu" = 'aarch64' ; then append_var LDFLAGS "-miphoneos-version-min=7.1 -arch arm64" append_var CFLAGS "-miphoneos-version-min=7.1 -arch arm64" append_var CXXFLAGS "-miphoneos-version-min=7.1 -arch arm64" else append_var LDFLAGS "-miphoneos-version-min=7.1 -arch armv7" append_var CFLAGS "-miphoneos-version-min=7.1 -arch armv7" append_var CXXFLAGS "-miphoneos-version-min=7.1 -arch armv7" fi if test -n "$SDKROOT"; then append_var LDFLAGS "-mlinker-version=134.9 -B/usr/local/bin/arm-apple-darwin11-" append_var CFLAGS "-isysroot $SDKROOT -F$SDKROOT/System/Library/Frameworks" append_var CXXFLAGS "-isysroot $SDKROOT -I$SDKROOT/usr/include/c++/4.2.1 -F$SDKROOT/System/Library/Frameworks" fi ;; kolibrios) _sdl=yes append_var MODULES "backends/platform/sdl" ;; maemo) append_var DEFINES "-DMAEMO" append_var LIBS "-lX11" _sdlconfig=sdl-config _sdl=auto ;; n64) append_var INCLUDES '-I$(N64SDK)/include' append_var INCLUDES '-I$(N64SDK)/mips64/include' append_var INCLUDES '-I$(N64SDK)/hkz-libn64' append_var INCLUDES '-I$(srcdir)/backends/platform/n64' append_var LIBS "-lpakfs -lframfs -ln64 -ln64utils -lromfs" append_var LIBS "-lm -lstdc++ -lz" ;; null) append_var DEFINES "-DUSE_NULL_DRIVER" _text_console=yes ;; opendingux | miyoo | miyoomini | sailfish) _sdlconfig=sdl-config _sdl=auto append_var MODULES "backends/platform/sdl" ;; openpandora) append_var DEFINES "-DOPENPANDORA" append_var DEFINES "-DREDUCE_MEMORY_USAGE" if test "$_release_build" = no; then append_var DEFINES "-DOP_DEBUG" fi _sdl=auto ;; psp) append_var DEFINES "-D__PSP__" append_var DEFINES "-DDISABLE_COMMAND_LINE" append_var DEFINES "-DDISABLE_DOSBOX_OPL" append_var LIBS "-lpng" append_var LIBS "-Wl,-Map,mapfile.txt" _nuked_opl=no ;; psp2) append_var LIBS "-lSDL2 -lSceCommonDialog_stub" append_var LIBS "-lSceSysmodule_stub -lSceDisplay_stub -lSceGxm_stub" append_var LIBS "-lSceAudio_stub -lSceAudioIn_stub -lSceCtrl_stub -lScePower_stub" append_var LIBS "-lSceNet_stub -lSceNetCtl_stub" append_var LIBS "-lSceAppMgr_stub -lSceAppUtil_stub -lScePgf_stub" append_var LIBS "-lSceTouch_stub -lSceHid_stub -lSceMotion_stub" _sdl=yes _sdlversion=2.0.0 append_var MODULES "backends/platform/sdl" append_var INCLUDES "-I$VITASDK/arm-vita-eabi/include/SDL2" ;; samsungtv) append_var DEFINES "-DSAMSUNGTV" append_var LDFLAGS "-shared" append_var LDFLAGS "-fpic" _sdl=auto ;; sdl) _sdl=auto ;; switch) _sdl=auto append_var MODULES "backends/platform/sdl" ;; wii) append_var DEFINES "-D__WII__" append_var DEFINES "-DGEKKO" case $_host_os in gamecube) append_var LIBS "-lgxflux -liso9660 -lfat -logc -ldb" ;; *) append_var LIBS "-lgxflux -ldi -liso9660 -ltinysmb -lfat -lwiiuse -lbte -logc -lwiikeyboard -ldb" ;; esac ;; *) echo "support for $_backend backend not implemented in configure script yet" exit 1 ;; esac append_var MODULES "backends/platform/$_backend" # # Check for pkg-config # echocheck "pkg-config" _pkg_config=no command -v $_pkgconfig >/dev/null 2>&1 && _pkg_config=yes echo "$_pkg_config" if test "$_pkg_config" = yes && test -n "$_host" && test -z "$PKG_CONFIG_LIBDIR" && test "$_pkgconfig" = pkg-config; then echo "WARNING: When cross-compiling PKG_CONFIG_LIBDIR must be set to the location of the .pc files for the target" fi # # Setup SDL specifics for SDL based backends # if test "$_sdl" = auto ; then find_sdlconfig append_var SDL_CFLAGS "`$_sdlconfig --cflags | sed 's/[[:space:]]*-Dmain=SDL_main//g'`" if test "$_static_build" = yes ; then append_var SDL_LIBS "`$_sdlconfig --static-libs`" else append_var SDL_LIBS "`$_sdlconfig --libs`" fi _sdlversion=`$_sdlconfig --version` echocheck "SDL" _sdl=no cat > $TMPC << EOF #include "SDL.h" int main(int argc, char *argv[]) { SDL_Init(0); return 0; } EOF cc_check $LIBS $SDL_LIBS $INCLUDES $SDL_CFLAGS && _sdl=yes echo "$_sdl" if test "$_sdl" = no ; then exit 1 fi fi _sdlMajorVersionNumber=0 if test "$_sdl" = yes ; then append_var DEFINES "-DSDL_BACKEND" add_line_to_config_mk "SDL_BACKEND = 1" append_var INCLUDES "$SDL_CFLAGS" append_var LIBS "$SDL_LIBS" case $_sdlversion in 2.*.*) append_var DEFINES "-DUSE_SDL2" add_line_to_config_mk "USE_SDL2 = 1" _sdlMajorVersionNumber=2 ;; 1.2.*) _sdlMajorVersionNumber=1 ;; *) echo "support for SDL $_sdlversion not implemented yet" exit 1 ;; esac fi # # Some platforms (eg. Android, iOS) may use an edited version # of SDL-net or SDL2-net that does not require SDL or SDL2 respectively # if test "$_sdlnet" = auto ; then # If SDL2 was detected, then test for SDL2_net exclusively # If SDL was detected, then test for SDL_net exclusively # If neither SDL nor SDL2 detected, then test for both (SDL2_net success takes priority) set_var SDL2_NET_LIBS "$SDL_NET_LIBS" set_var SDL2_NET_CFLAGS "$SDL_NET_CFLAGS" set_var SDL1_NET_LIBS "$SDL_NET_LIBS" set_var SDL1_NET_CFLAGS "$SDL_NET_CFLAGS" if test "$_sdl" = no || test "$_sdlMajorVersionNumber" = 2; then if test "$_pkg_config" = "yes" && $_pkgconfig --exists SDL2_net; then append_var SDL2_NET_LIBS "`$_pkgconfig --libs SDL2_net`" append_var SDL2_NET_CFLAGS "`$_pkgconfig --cflags SDL2_net | sed 's/[[:space:]]*-Dmain=SDL_main//g'`" else append_var SDL2_NET_LIBS "-lSDL2_net" fi fi if test "$_sdl" = no || test "$_sdlMajorVersionNumber" = 1; then if test "$_pkg_config" = "yes" && $_pkgconfig --exists SDL_net; then append_var SDL1_NET_LIBS "`$_pkgconfig --libs SDL_net`" append_var SDL1_NET_CFLAGS "`$_pkgconfig --cflags SDL_net | sed 's/[[:space:]]*-Dmain=SDL_main//g'`" else append_var SDL1_NET_LIBS "-lSDL_net" fi fi # Check for SDL_Net echocheck "SDL_Net" _sdlnet=no cat > $TMPC << EOF #include "SDL_net.h" int main(int argc, char *argv[]) { SDLNet_Init(); return 0; } EOF cc_check $SDL2_NET_LIBS $LIBS $INCLUDES $SDL2_NET_CFLAGS && _sdlnet=yes if test "$_sdlnet" = yes ; then set_var SDL_NET_LIBS "$SDL2_NET_LIBS" set_var SDL_NET_CFLAGS "$SDL2_NET_CFLAGS" add_line_to_config_mk "SDL_NET_MAJOR = 2" else cat > $TMPC << EOF #include "SDL_net.h" int main(int argc, char *argv[]) { SDLNet_Init(); return 0; } EOF cc_check $SDL1_NET_LIBS $LIBS $INCLUDES $SDL1_NET_CFLAGS && _sdlnet=yes if test "$_sdlnet" = yes ; then set_var SDL_NET_LIBS "$SDL1_NET_LIBS" set_var SDL_NET_CFLAGS "$SDL1_NET_CFLAGS" add_line_to_config_mk "SDL_NET_MAJOR = 1" fi fi if test "$_sdlnet" = yes ; then # Some platforms require SDL to be after SDL_Net, thus we prepend var prepend_var LIBS "$SDL_NET_LIBS" append_var INCLUDES "$SDL_NET_CFLAGS" fi define_in_config_if_no "$_sdl" 'WITHOUT_SDL' define_in_config_if_yes "$_sdlnet" 'USE_SDL_NET' echo "$_sdlnet" fi # # Check for stuff required for ENet to compile # if test "$_enet" = yes ; then case "$_host_os" in mingw*) # Skip for mingw. ;; *) echo "Checks for ENet..." echo_n " " echocheck "sendmsg" cat > $TMPC << EOF #include #include int main(void) { return sendmsg(0, 0, 0); } EOF cc_check if test "$TMPR" -eq 0; then echo "yes" else echo "no, required for ENet. Disabling." _enet=no fi echo_n " " echocheck "recvmsg" cat > $TMPC << EOF #include #include int main(void) { return recvmsg(0, 0, 0); } EOF cc_check if test "$TMPR" -eq 0; then echo "yes" else echo "no, required for ENet. Disabling." _enet=no fi ;; esac fi # # Check whether ENet networking support is requested # define_in_config_if_yes "$_enet" 'USE_ENET' # # Check and set additional stuff needed for ENet. # if test "$_enet" = yes ; then case "$_host_os" in mingw*) # Additional libraries. append_var LIBS "-lwinmm -lws2_32" ;; *) # Check for features and define. echo "Optional checks for ENet..." echo_n " " echocheck "getaddrinfo" cat > $TMPC << EOF #include #include #include int main(void) { return getaddrinfo(0, 0, 0, 0); } EOF cc_check if test "$TMPR" -eq 0; then append_var DEFINES "-DHAS_GETADDRINFO" echo "yes" else echo "no" fi echo_n " " echocheck "getnameinfo" cat > $TMPC << EOF #include #include #include int main(void) { return getnameinfo(0, 0, 0, 0, 0, 0, 0); } EOF cc_check if test "$TMPR" -eq 0; then append_var DEFINES "-DHAS_GETNAMEINFO" echo "yes" else echo "no" fi echo_n " " echocheck "gethostbyaddr_r" cat > $TMPC << EOF #include int main(void) { return gethostbyaddr_r(0, 0, 0, 0, 0, 0, 0, 0); } EOF cc_check if test "$TMPR" -eq 0; then append_var DEFINES "-DHAS_GETHOSTBYADDR_R" echo "yes" else echo "no" fi echo_n " " echocheck "gethostbyname_r" cat > $TMPC << EOF #include int main(void) { return gethostbyname_r(0, 0, 0, 0, 0, 0); } EOF cc_check if test "$TMPR" -eq 0; then append_var DEFINES "-DHAS_GETHOSTBYNAME_R" echo "yes" else echo "no" fi echo_n " " echocheck "poll" cat > $TMPC << EOF #include int main(void) { return poll(0, 0, 0); } EOF cc_check if test "$TMPR" -eq 0; then append_var DEFINES "-DHAS_POLL" echo "yes" else echo "no" fi echo_n " " echocheck "fcntl" cat > $TMPC << EOF #include #include int main(void) { return fcntl(0, 0); } EOF cc_check if test "$TMPR" -eq 0; then append_var DEFINES "-DHAS_FCNTL" echo "yes" else echo "no" fi echo_n " " echocheck "inet_pton" cat > $TMPC << EOF #include #include int main(void) { return inet_pton(0, 0, 0); } EOF cc_check if test "$TMPR" -eq 0; then append_var DEFINES "-DHAS_INET_PTON" echo "yes" else echo "no" fi echo_n " " echocheck "inet_ntop" cat > $TMPC << EOF #include #include int main(void) { inet_ntop(0, 0, 0, 0); return 0; } EOF cc_check if test "$TMPR" -eq 0; then append_var DEFINES "-DHAS_INET_NTOP" echo "yes" else echo "no" fi echo_n " " echocheck "msghdr.msg_flags" cat > $TMPC << EOF #include struct msghdr msg; int main(void) { return msg.msg_flags; } EOF cc_check if test "$TMPR" -eq 0; then append_var DEFINES "-DHAS_MSGHDR_FLAGS" echo "yes" else echo "no" fi echo_n " " echocheck "socklen_t" cat > $TMPC << EOF #include int main(void) { socklen_t len = 0; return 0; } EOF cc_check if test "$TMPR" -eq 0; then append_var DEFINES "-DHAS_SOCKLEN_T" echo "yes" else echo "no" fi ;; esac fi # # Enable 16bit support only for backends which support it # case $_backend in 3ds | android | dc | ds | ios7 | kolibrios | maemo | null | opendingux | miyoomini | miyoo | openpandora | psp | psp2 | sailfish | samsungtv | sdl | switch | wii) if test "$_16bit" = auto ; then _16bit=yes else _16bit=no fi ;; *) _16bit=no ;; esac # # Enable High resolution engines (>320x240) support only for backends which support it # case $_host in ds) if test "$_highres" = yes ; then _highres=yes else _highres=no fi ;; *) if test "$_highres" = no ; then _highres=no else _highres=yes fi ;; esac # # Enable Event Recorder only for backends that support it # case $_backend in sdl) ;; *) _eventrec=no ;; esac # # Disable savegame timestamp support for backends which don't have a reliable real time clock # case $_backend in n64) if test "$_savegame_timestamp" = auto ; then _savegame_timestamp=no else _savegame_timestamp=yes fi ;; *) if test "$_savegame_timestamp" = auto ; then _savegame_timestamp=yes else _savegame_timestamp=no fi ;; esac # # Determine whether host is POSIX compliant, or at least POSIX # compatible enough to support our POSIX code (including dlsym(), # mkdir() and some other APIs). # # TODO: Instead of basing this on the host name, we should really base # this on the presence of features (such as the dlsym and mkdir APIs). # echo_n "Checking if host is POSIX compliant... " case $_host_os in amigaos* | dreamcast | ds | gamecube | kolibrios | mingw* | morphos | n64 | ps3 | psp2 | psp | riscos | wii) _posix=no ;; 3ds | android | beos* | bsd* | cygwin* | darwin* | dragonfly* | freebsd* | gnu* | haiku* | hpux* | iphoneos | irix*| k*bsd*-gnu* | linux* | maemo | mint* | netbsd* | openbsd* | redox* | serenity* | solaris* | sunos* | switch | uclinux*) _posix=yes ;; os2-emx*) _posix=yes # FIXME: Really??? ;; emscripten) _posix=yes ;; *) # given this is a shell script, we might assume some type of posix. # However, the host system might be a totally different one, so # we can assume nothing about it. # Indeed, as mentioned further above, we really should test for the # presences of relevant APIs on the host anyway... _posix=no ;; esac echo $_posix if test "$_posix" = yes ; then append_var DEFINES "-DPOSIX" add_line_to_config_mk 'POSIX = 1' echo_n "Checking if posix_spawn is supported... " cat > $TMPC << EOF #include int main(void) { return posix_spawn(0, 0, 0, 0, 0, 0); } EOF cc_check && test "$_host_os" != "emscripten" && _has_posix_spawn=yes echo $_has_posix_spawn if test "$_has_posix_spawn" = yes ; then append_var DEFINES "-DHAS_POSIX_SPAWN" fi fi # # Check for 64-bit file offset compatibility # # This is currently only used by StdioStream. If nothing is found, # you'll be limited to <2GB files, which still covers the vast majority # of supported games. # case $_host_os in mingw*) # StdioStream just uses _ftelli64 ;; *) echo_n "Checking if fseeko with 64-bit off_t is supported... " cat > $TMPC << EOF #include #include /* off_t on legacy systems */ int main() { static int test_array[1 - 2 * !(sizeof(off_t) >= 8)]; fseeko(stdin, 0, SEEK_SET); test_array[0] = 0; return 0; } EOF cc_check_no_clean && _has_fseeko_offt_64=yes # Good, there's fseeko with a 64-bit off_t by default if test "$_has_fseeko_offt_64" = yes ; then echo yes append_var DEFINES "-DHAS_FSEEKO_OFFT_64" else # Otherwise, when not cross-compiling, try with LFS_CFLAGS if test -z "$_host"; then TMPFLAGS=`getconf LFS_CFLAGS 2>/dev/null` if test $? -eq 0 && test ! -z "$TMPFLAGS" && test "$TMPFLAGS" != undefined ; then cc_check_no_clean $TMPFLAGS && _has_fseeko_offt_64=yes if test "$_has_fseeko_offt_64" = yes ; then echo "yes (adding $TMPFLAGS)" append_var DEFINES "-DHAS_FSEEKO_OFFT_64" append_var CXXFLAGS "$TMPFLAGS" fi fi fi # Otherwise, try the usual magical suspects if test "$_has_fseeko_offt_64" = no ; then # note: -D__LARGE64_FILES is another option, but it may be broken on # some platforms, so add it to your platform defines instead, if it # requires it and you've checked that the result works. for largeflag in "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES" "-D_LARGEFILE_SOURCE" ; do cc_check_no_clean $largeflag && _has_fseeko_offt_64=yes if test "$_has_fseeko_offt_64" = yes ; then echo "yes (adding $largeflag)" append_var DEFINES "-DHAS_FSEEKO_OFFT_64" append_var CXXFLAGS "$largeflag" break fi done fi # Otherwise, fseeko64 is your last chance if test "$_has_fseeko_offt_64" = no ; then echo no echo_n "Checking if fseeko64 is supported... " cat > $TMPC << EOF #include int main() { fseeko64(stdin, 0, SEEK_SET); return 0; } EOF cc_check_no_clean -D_LARGEFILE64_SOURCE && _has_fseeko64=yes echo $_has_fseeko64 if test "$_has_fseeko64" = yes ; then append_var DEFINES "-DHAS_FSEEKO64" append_var CXXFLAGS "-D_LARGEFILE64_SOURCE" # On some platforms, fopen64 is required in addition to fseeko64/ftello64 echo_n "Checking if fopen64 is supported... " cat > $TMPC << EOF #include int main() { FILE *f = fopen64("file", "rb"); return (f != NULL); } EOF cc_check_no_clean && _has_fopen64=yes echo $_has_fopen64 if test "$_has_fopen64" = yes ; then append_var DEFINES "-DHAS_FOPEN64" fi fi fi fi cc_check_clean ;; esac # # 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' # # If a specific optimization level was requested, enable optimizations # if test -n "$_optimization_level" ; then # Ports will specify an optimization level and expect that to be enabled if test "$_optimizations" != no ; then _optimizations=yes fi else _optimization_level=$_default_optimization_level fi # # Check whether to enable optimizations # if test "$_optimizations" = yes ; then # Enable optimizations append_var CXXFLAGS "$_optimization_level" # Optimizations make it possible to use -Wuninitialized, so let's do that # (but only when the compiler has a reliable -Wuninitialized, see the # other _cxx_major/_cxx_minor checks above) if test "$have_gcc" = yes && test $_cxx_major -eq 4 && test $_cxx_minor -le 7; then : nothing else append_var CXXFLAGS "-Wuninitialized" fi fi # # Check whether plugin support is requested and possible # echo_n "Checking whether building plugins was requested... " echo "$_dynamic_modules" _mak_plugins= if test "$_dynamic_modules" = yes ; then echo_n "Checking whether building plugins is supported... " case $_host_os in 3ds) _elf_loader=yes append_var DEFINES "-DUNCACHED_PLUGINS" _mak_plugins=' PLUGIN_LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/3ds/plugin.ld -march=armv6k -mfloat-abi=hard ' ;; amigaos) _plugin_prefix="" _plugin_suffix=".plugin" append_var CXXFLAGS "-fPIC" append_var LIBS "-use-dynld" append_var LIBS "-lauto" _mak_plugins=' PLUGIN_EXTRA_DEPS = PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; android) _plugin_prefix="lib" _plugin_suffix=".so" append_var CXXFLAGS "-fpic" append_var LIBS "-ldl" # 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. _mak_plugins=' PLUGIN_EXTRA_DEPS = libscummvm.so PLUGIN_LDFLAGS += $(LDFLAGS) -L. -lscummvm PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; darwin*) _plugin_prefix="" _plugin_suffix=".plugin" append_var LIBS "-ldl" append_var _strip "-x" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(EXECUTABLE) PLUGIN_LDFLAGS += -bundle -bundle_loader $(EXECUTABLE) -exported_symbols_list "$(srcdir)/plugin.exp" PRE_OBJS_FLAGS := -all_load POST_OBJS_FLAGS := ' ;; dreamcast) _plugin_prefix="" _plugin_suffix=".plg" append_var DEFINES "-DUNCACHED_PLUGINS" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(abspath $(srcdir)/backends/platform/dc/plugin.x $(srcdir)/backends/platform/dc/plugin.syms) $(EXECUTABLE) backends/platform/dc/plugin_head.o 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 backends/platform/dc/plugin_head.o PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--no-whole-archive ' ;; ds) _elf_loader=yes append_var DEFINES "-DELF_LOADER_CXA_ATEXIT" append_var DEFINES "-DUNCACHED_PLUGINS" append_var DEFINES "-DELF_NO_MEM_MANAGER" _mak_plugins=' PLUGIN_LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/ds/plugin.ld -mthumb -mthumb-interwork -mfloat-abi=soft ' ;; emscripten) _plugin_prefix="lib" _plugin_suffix=".so" append_var DEFINES "-DUNCACHED_PLUGINS" append_var CXXFLAGS "-fPIC" append_var LIBS "" _mak_plugins=' PLUGIN_EXTRA_DEPS = PLUGIN_LDFLAGS += -s SIDE_MODULE=1 -s ASYNCIFY=1 -s ASYNCIFY_IMPORTS=["*"] -s EXPORT_ALL=1 PRE_OBJS_FLAGS := -s MAIN_MODULE=1 -s EXPORT_ALL=1 POST_OBJS_FLAGS := ' ;; freebsd* | openbsd*) _plugin_prefix="lib" _plugin_suffix=".so" append_var CXXFLAGS "-fPIC" _mak_plugins=' PLUGIN_EXTRA_DEPS = PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; gamecube | wii) _elf_loader=yes append_var DEFINES "-DELF_LOADER_CXA_ATEXIT" append_var DEFINES "-DUNCACHED_PLUGINS" _mak_plugins=' PLUGIN_LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/wii/plugin.ld ' ;; irix*) _plugin_prefix="lib" _plugin_suffix=".so" append_var CXXFLAGS "-fpic" append_var LIBS "-ldl" _mak_plugins=' PLUGIN_EXTRA_DEPS = PLUGIN_LDFLAGS += -shared -static-libgcc PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; kolibrios) _plugin_suffix=".svm.dll" append_var DEFINES "-DUNCACHED_PLUGINS" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(EXECUTABLE) PLUGIN_LDFLAGS += -specs=$(srcdir)/backends/platform/sdl/kolibrios/kolibrios.spec -mdll -Wl,-q,--retain-symbols-file,$(srcdir)/backends/plugins/elf/plugin.syms -Wl,--enable-auto-import ./libscummvm.a PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--export-all-symbols -Wl,--no-whole-archive -Wl,--out-implib,./libscummvm.a ' ;; linux* | gnu* | k*bsd*-gnu*) _plugin_prefix="lib" _plugin_suffix=".so" append_var CXXFLAGS "-fPIC" append_var LIBS "-ldl" _mak_plugins=' PLUGIN_EXTRA_DEPS = PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; *cygwin* | *mingw32* | mingw64) _plugin_prefix="" _plugin_suffix=".dll" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(EXECUTABLE) 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 ' ;; morphos) _plugin_prefix="lib" _plugin_suffix=".so" append_var CXXFLAGS "-fPIC" append_var LIBS "-use-dynld" _mak_plugins=' PLUGIN_EXTRA_DEPS = PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive ' ;; psp) _elf_loader=yes append_var DEFINES "-DUNCACHED_PLUGINS" _mak_plugins=' LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/psp/main_prog.ld -Wl,-zmax-page-size=128 PLUGIN_LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/psp/plugin.ld -Wl,-zmax-page-size=128 -lstdc++ ' ;; psp2) _plugin_prefix="" # This will create an ELF with a suprx extension which we will have to mangle when packaging _plugin_suffix=".suprx" append_var CXXFLAGS "-fuse-cxa-atexit" append_var DEFINES "-DUNCACHED_PLUGINS" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(EXECUTABLE) backends/plugins/psp2/plugin.o PLUGIN_OBJ_FILES += backends/plugins/psp2/plugin.o PLUGIN_LDFLAGS += -nostartfiles -nodefaultlibs backends/plugins/psp2/plugin.o -Wl,-q -Xlinker --just-symbols -Xlinker $(EXECUTABLE) -lgcc PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--no-whole-archive ' ;; riscos) _elf_loader=yes append_var DEFINES "-DELF_LOADER_CXA_ATEXIT" append_var CXXFLAGS "-fuse-cxa-atexit" append_var DEFINES "-DUNCACHED_PLUGINS" append_var DEFINES "-DELF_NO_MEM_MANAGER" _mak_plugins=' PLUGIN_EXTRA_DEPS += backends/plugins/riscos/plugin.o PLUGIN_OBJ_FILES += backends/plugins/riscos/plugin.o PLUGIN_LDFLAGS += -static -Wl,-T$(srcdir)/backends/plugins/riscos/plugin.ld backends/plugins/riscos/plugin.o -Wl,--wrap=__rt_stkovf_split_small -Wl,--wrap=__rt_stkovf_split_big ' ;; *) _dynamic_modules=no _mak_plugins= ;; esac echo "$_dynamic_modules" fi # # Check whether integrated ELF loader support is requested # define_in_config_if_yes "$_elf_loader" 'USE_ELF_LOADER' if test "$_elf_loader" = yes; then _plugin_prefix="" _plugin_suffix=".plg" _mak_plugins=' PLUGIN_EXTRA_DEPS = $(EXECUTABLE) PLUGIN_LDFLAGS += -nostartfiles backends/plugins/elf/version.o -Wl,-q,--retain-symbols-file,$(srcdir)/backends/plugins/elf/plugin.syms -Xlinker --just-symbols -Xlinker $(EXECUTABLE) PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--no-whole-archive '"$_mak_plugins" fi # # Set up some common plugin settings in config.h and config.mk, if enabled # define_in_config_if_yes "$_dynamic_modules" 'DYNAMIC_MODULES' if test "$_dynamic_modules" = yes ; then add_line_to_config_h "#define PLUGIN_PREFIX \"$_plugin_prefix\"" add_line_to_config_h "#define PLUGIN_SUFFIX \"$_plugin_suffix\"" add_line_to_config_mk "PLUGIN_PREFIX := $_plugin_prefix" add_line_to_config_mk "PLUGIN_SUFFIX := $_plugin_suffix" fi if test "$_detection_features_static" = no ; then if test "$_dynamic_modules" = no ; then echo "Inconsistency detected: dynamic detection plugin enabled while static plugins are requested." echo " ...forcing detection plugin to be static too. Add --enable-plugins if you really want it" _detection_features_static=yes fi fi # # Set up a define for detection to be used as static or not # define_in_config_if_yes "$_detection_features_static" "DETECTION_STATIC" echo_n "Checking if detection features building statically... " echo "$_detection_features_static" # # Set up a define for detection to be used as static or not # define_in_config_if_yes "$_detection_features_full" "DETECTION_FULL" echo_n "Checking if building detection features for all engines... " echo "$_detection_features_full" # # Check whether integrated MT-32 emulator support is requested # define_in_config_if_yes "$_mt32emu" 'USE_MT32EMU' # # Check whether Lua support is requested # define_in_config_if_yes "$_lua" 'USE_LUA' # # Check whether Nuked OPL emulator support is disabled # define_in_config_if_no "$_nuked_opl" 'DISABLE_NUKED_OPL' # # Check whether 16bit color support is requested # define_in_config_if_yes "$_16bit" 'USE_RGB_COLOR' # # Check whether High resolution graphics support is requested # define_in_config_if_yes "$_highres" 'USE_HIGHRES' # # Check whether save games use the current time as default description # define_in_config_if_yes "$_savegame_timestamp" 'USE_SAVEGAME_TIMESTAMP' # # Check whether to enable the (hq (and edge)) scalers # if test "$_build_scalers" = no ; then _build_hq_scalers=no _build_edge_scalers=no elif test "$_build_hq_scalers" = no ; then _build_edge_scalers=no fi define_in_config_if_yes "$_build_scalers" 'USE_SCALERS' define_in_config_if_yes "$_build_hq_scalers" 'USE_HQ_SCALERS' define_in_config_if_yes "$_build_edge_scalers" 'USE_EDGE_SCALERS' define_in_config_if_yes "$_build_aspect" 'USE_ASPECT' # # Check for math lib # cat > $TMPC << EOF int main(void) { return 0; } EOF cc_check -lm && append_var LIBS "-lm" # # Check for Ogg # echocheck "Ogg" if test "$_ogg" = auto ; then _ogg=no cat > $TMPC << EOF #include int main(void) { return 0; } EOF cc_check $OGG_CFLAGS $OGG_LIBS -logg && _ogg=yes fi define_in_config_if_yes "$_ogg" 'USE_OGG' echo "$_ogg" # # Check for TTS # echocheck "TTS libraries" if test "$_tts" = auto ; then _tts=no case $_host_os in mingw*) cat > $TMPC << EOF #include #include #include int main(void) { return 0; } EOF cc_check -lsapi -lole32 && _tts=yes ;; linux* | freebsd* | openbsd*) cat > $TMPC << EOF #include int main(void) { return 0; } EOF cc_check -lspeechd && _tts=yes ;; darwin*) # Check the API is available. The most recent API we need is for the NSSpeechSynthesizerDelegate protocol cat > $TMPC << EOF #include @interface SpeechDelegate : NSObject { } @end int main(void) { return 0; } EOF cc_check -ObjC++ -lobjc && _tts=yes ;; esac fi echo "$_tts" # # Check for Vorbis # echocheck "Vorbis" VORBISFILE=-lvorbisfile if test "$_host_os" = kolibrios ; then VORBISFILE= fi if test "$_vorbis" = auto ; then _vorbis=no cat > $TMPC << EOF #include int main(void) { vorbis_packet_blocksize(0,0); return 0; } EOF if test "$_ogg" = yes ; then cc_check $OGG_CFLAGS $OGG_LIBS $VORBIS_CFLAGS $VORBIS_LIBS \ $VORBISFILE -lvorbis -logg && _vorbis=yes else cc_check $VORBIS_CFLAGS $VORBIS_LIBS \ $VORBISFILE -lvorbis && _vorbis=yes fi fi if test "$_vorbis" = yes ; then append_var LIBS "$VORBIS_LIBS $VORBISFILE -lvorbis" append_var INCLUDES "$VORBIS_CFLAGS" fi define_in_config_if_yes "$_vorbis" 'USE_VORBIS' echo "$_vorbis" # # Check for Tremor # echocheck "Tremor" if test "$_tremolo" = yes ; then _tremor=yes fi if test "$_tremor" = auto ; then _tremor=no cat > $TMPC << EOF #include int main(void) { vorbis_info_init(0); return 0; } EOF if test "$_ogg" = yes ; then cc_check $TREMOR_CFLAGS $TREMOR_LIBS $OGG_CFLAGS $OGG_LIBS \ -lvorbisidec -logg && _tremor=yes else cc_check $TREMOR_CFLAGS $TREMOR_LIBS -lvorbisidec && \ _tremor=yes fi fi if test "$_tremor" = yes && test "$_vorbis" = no; then add_line_to_config_h '#define USE_TREMOR' add_line_to_config_h '#define USE_VORBIS' if test "$_tremolo" = yes ; then add_line_to_config_h '#define USE_TREMOLO' append_var LIBS "$TREMOR_LIBS -ltremolo" else append_var LIBS "$TREMOR_LIBS -lvorbisidec" fi append_var INCLUDES "$TREMOR_CFLAGS" else if test "$_vorbis" = yes; then _tremor="no (Vorbis/Tremor support is mutually exclusive)" fi add_line_to_config_h '#undef USE_TREMOR' fi add_to_config_mk_if_yes "$_tremor" 'USE_TREMOR = 1' echo "$_tremor" # # Check for IEEE1284 for OPL2lPT # echocheck "OPL2LPT" if test "$_opl2lpt" = yes ; then _opl2lpt=no cat > $TMPC << EOF #include struct parport_list parports; int main(void) { ieee1284_find_ports(&parports, 0); return 0; } EOF cc_check $IEEE1284_CFLAGS $IEEE1284_LIBS -lieee1284 && \ _opl2lpt=yes fi if test "$_opl2lpt" = yes; then append_var LIBS "$IEEE1284_LIBS -lieee1284" append_var INCLUDES "$IEEE1284_CFLAGS" fi define_in_config_if_yes "$_opl2lpt" 'ENABLE_OPL2LPT' echo "$_opl2lpt" # # Check for retrowave for RetroWave OPL3 # echocheck "RetroWave OPL3" if test "$_retrowave" = auto ; then _retrowave=no cat > $TMPC << EOF #include RetroWaveContext context; int main(void) { retrowave_init(&context); return 0; } EOF cc_check $RETROWAVE_CFLAGS $RETROWAVE_LIBS -lRetroWave && \ _retrowave=yes fi if test "$_retrowave" = yes; then append_var LIBS "$RETROWAVE_LIBS -lRetroWave" append_var INCLUDES "$RETROWAVE_CFLAGS" fi define_in_config_if_yes "$_retrowave" 'USE_RETROWAVE' echo "$_retrowave" # # Check for FLAC # echocheck "FLAC >= 1.1.3" if test "$_flac" = auto ; then _flac=no cat > $TMPC << EOF #define FLAC__NO_DLL // Like in audio/decoders/flac.cpp #include #include #include int main(void) { #if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8 syntax error #endif FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new(); FLAC__stream_decoder_delete(decoder); return FLAC__STREAM_SYNC_LEN >> 30; /* guaranteed to be 0 */ } EOF if test "$_ogg" = yes ; then cc_check $FLAC_CFLAGS $FLAC_LIBS $OGG_CFLAGS $OGG_LIBS \ -logg && _flac=yes else cc_check $FLAC_CFLAGS $FLAC_LIBS \ && _flac=yes fi fi if test "$_flac" = yes ; then append_var LIBS "$FLAC_LIBS" append_var INCLUDES "$FLAC_CFLAGS" fi define_in_config_if_yes "$_flac" 'USE_FLAC' echo "$_flac" # Add the link to ogg only after vorbis, tremor and flac as it might be used by those. if test "$_ogg" = yes ; then append_var LIBS "$OGG_LIBS -logg" append_var INCLUDES "$OGG_CFLAGS" fi # # 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 append_var LIBS "$MAD_LIBS -lmad" append_var INCLUDES "$MAD_CFLAGS" fi define_in_config_if_yes "$_mad" 'USE_MAD' 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 append_var LIBS "$ALSA_LIBS -lasound" append_var INCLUDES "$ALSA_CFLAGS" fi define_in_config_if_yes "$_alsa" 'USE_ALSA' echo "$_alsa" # # Check for libjpeg # echocheck "libjpeg >= v6b" if test "$_jpeg" = auto ; then _jpeg=no cat > $TMPC << EOF #include #include int main(void) { #if JPEG_LIB_VERSION >= 62 #else syntax error #endif return 0; } EOF cc_check $JPEG_CFLAGS $JPEG_LIBS && _jpeg=yes fi if test "$_jpeg" = yes ; then append_var LIBS "$JPEG_LIBS" append_var INCLUDES "$JPEG_CFLAGS" fi define_in_config_if_yes "$_jpeg" 'USE_JPEG' echo "$_jpeg" # # Check for PNG # echocheck "PNG >= 1.2.8" if test "$_pkg_config" = "yes" && $_pkgconfig --exists libpng; then append_var PNG_LIBS "`$_pkgconfig --libs libpng`" append_var PNG_CFLAGS "`$_pkgconfig --cflags libpng`" else append_var PNG_LIBS "-lpng -lz" fi if test "$_png" = auto ; then _png=no cat > $TMPC << EOF #include int main(void) { #if PNG_LIBPNG_VER >= 10208 #else syntax error #endif return 0; } EOF cc_check $PNG_CFLAGS $PNG_LIBS && _png=yes fi if test "$_png" = yes ; then append_var LIBS "$PNG_LIBS" append_var INCLUDES "$PNG_CFLAGS" fi define_in_config_if_yes "$_png" 'USE_PNG' echo "$_png" # # Check for GIF # echocheck "GIF >= 5.0.0" if test "$_pkg_config" = "yes" && $_pkgconfig --exists libgif; then append_var GIF_LIBS "`$_pkgconfig --libs libgif`" append_var GIF_CFLAGS "`$_pkgconfig --cflags libgif`" else append_var GIF_LIBS "-lgif" fi if test "$_gif" = auto ; then _gif=no cat > $TMPC << EOF #include int main(void) { #if GIFLIB_MAJOR >= 5 #else syntax error #endif return 0; } EOF cc_check $GIF_CFLAGS $GIF_LIBS && _gif=yes fi if test "$_gif" = yes ; then append_var LIBS "$GIF_LIBS" append_var INCLUDES "$GIF_CFLAGS" fi define_in_config_if_yes "$_gif" 'USE_GIF' echo "$_gif" # # Check for Theora Decoder # echocheck "libtheoradec >= 1.0" if test "$_vorbis" = no && test "$_tremor" = no ; then echo "skipping. no vorbis" _theoradec=notsupported fi if test "$_theoradec" = auto ; then _theoradec=no cat > $TMPC << EOF #include int main(void) { th_ycbcr_buffer yuv; th_decode_ycbcr_out(NULL, yuv); } EOF cc_check $THEORADEC_CFLAGS $THEORADEC_LIBS && _theoradec=yes fi if test "$_theoradec" = yes ; then append_var LIBS "$THEORADEC_LIBS" append_var INCLUDES "$THEORADEC_CFLAGS" fi define_in_config_if_yes "$_theoradec" 'USE_THEORADEC' if test ! "$_theoradec" = notsupported ; then echo "$_theoradec" fi # # Check for VP8/VP9 Decoder # echocheck "libvpx >= 1.6" if test "$_vorbis" = no && test "$_tremor" = no ; then echo "skipping. no vorbis" _vpx=notsupported fi if test "$_vpx" = auto ; then _vpx=no if test "$_pkg_config" = "yes" && $_pkgconfig --exists vpx; then append_var VPX_LIBS "`$_pkgconfig --libs vpx`" append_var VPX_STATIC_LIBS "`$_pkgconfig --static --libs vpx`" append_var VPX_CFLAGS "`$_pkgconfig --cflags vpx`" else append_var VPX_LIBS "-lvpx" fi cat > $TMPC << EOF #include "vpx/vpx_decoder.h" #include "vpx/vp8dx.h" int main(void) { vpx_codec_ctx_t codec; vpx_codec_dec_init(&codec, &vpx_codec_vp8_dx_algo, NULL, 0); #if VPX_DECODER_ABI_VERSION >= 10 // Check for 1.6 #else syntax error #endif return 0; } EOF cc_check_no_clean $VPX_CFLAGS $VPX_LIBS && _vpx=yes # If it fails, try with static libs, it may help if test "$_vpx" != "yes"; then VPX_LIBS="$VPX_STATIC_LIBS" cc_check_no_clean $VPX_CFLAGS $VPX_LIBS && _vpx=yes fi cc_check_clean fi if test "$_vpx" = yes ; then append_var LIBS "$VPX_LIBS -lvpx" append_var INCLUDES "$VPX_CFLAGS" fi define_in_config_if_yes "$_vpx" 'USE_VPX' if test ! "$_vpx" = notsupported ; then echo "$_vpx" fi # # Check for the AAC decoder # echocheck "libfaad" if test "$_faad" = auto ; then _faad=no cat > $TMPC << EOF #include int main(void) { NeAACDecGetCapabilities(); return 0; } EOF cc_check $FAAD_CFLAGS $FAAD_LIBS -lfaad && _faad=yes fi if test "$_faad" = yes ; then append_var LIBS "$FAAD_LIBS -lfaad" append_var INCLUDES "$FAAD_CFLAGS" fi define_in_config_if_yes "$_faad" 'USE_FAAD' echo "$_faad" # # Check for SEQ MIDI # echocheck "SEQ MIDI" if test "$_seq_midi" = auto ; then # TODO: Test for /dev/sequencer presence? Or maybe just for /dev ? # For now, we just always enable it when "posix" mode is on (backends # that do not want it can disable it by setting _seq_midi=no). _seq_midi="$_posix" fi define_in_config_h_if_yes "$_seq_midi" 'USE_SEQ_MIDI' echo "$_seq_midi" # # Check for sndio # echocheck "sndio" if test "$_sndio" = auto ; then _sndio=no cat > $TMPC << EOF #include int main(void) { struct sio_par par; sio_initpar(&par); return 0; } EOF cc_check $SNDIO_CFLAGS $SNDIO_LIBS -lsndio && _sndio=yes fi if test "$_sndio" = yes ; then append_var LIBS "$SNDIO_LIBS -lsndio" append_var INCLUDES "$SNDIO_CFLAGS" fi define_in_config_h_if_yes "$_sndio" 'USE_SNDIO' echo "$_sndio" # # Check for TiMidity(++) # echocheck "TiMidity" if test "$_timidity" = auto ; then # TODO: Is there a good possibility of auto detecting whether we # should include TiMidity support? It can only be used on Unix # currently so we use that as "detection" for now. _timidity="$_posix" fi define_in_config_h_if_yes "$_timidity" 'USE_TIMIDITY' echo "$_timidity" # # 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 append_var ZLIB_LIBS "-lz" append_var LIBS "$ZLIB_LIBS" append_var INCLUDES "$ZLIB_CFLAGS" fi define_in_config_if_yes "$_zlib" 'USE_ZLIB' echo "$_zlib" # # Check for LibMPEG2 # echocheck "libmpeg2 >= 0.4.0" if test "$_mpeg2" = auto ; then _mpeg2=no cat > $TMPC << EOF #include extern "C" { #include } int main(void) { #if MPEG2_RELEASE < MPEG2_VERSION(0, 4, 0) #error libmpeg2 version too low #endif /* mpeg2_state_t first appears in 0.4.0 */ mpeg2_state_t state; return 0; } 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 append_var INCLUDES "$MPEG2_CFLAGS" append_var LIBS "$MPEG2_LIBS -lmpeg2" fi define_in_config_if_yes "$_mpeg2" 'USE_MPEG2' echo "$_mpeg2" # # Check for liba52 # echocheck "liba52" if test "$_a52" = auto ; then _a52=no cat > $TMPC << EOF #include extern "C" { #include } int main(void) { a52_state_t *state = a52_init(0); a52_free(state); return 0; } EOF if test -n "$_host"; then # don't execute while cross compiling cc_check $A52_CFLAGS $A52_LIBS -la52 && _a52=yes else cc_check_no_clean $A52_CFLAGS $A52_LIBS -la52 && $TMPO$HOSTEXEEXT 2>/dev/null && _a52=yes cc_check_clean fi fi if test "$_a52" = yes ; then INCLUDES="$INCLUDES $A52_FLAGS" LIBS="$LIBS $A52_LIBS -la52" fi define_in_config_if_yes "$_a52" 'USE_A52' echo "$_a52" # # Check for Sparkle if updates support is enabled # case $_host_os in darwin*) echocheck "Sparkle >= 2.0" if test "$_updates" = no; then _sparkle=no else if test -z $_sparklepath; then _sparklepath=/Library/Frameworks fi SPARKLE_CFLAGS="-F$_sparklepath" SPARKLE_LIBS="-F$_sparklepath" if test "$_sparkle" = auto ; then _sparkle=no cat > $TMPC << EOF #include #include int main(void) { SPUStandardUpdaterController *updater = [[SPUStandardUpdaterController alloc] initWithUpdaterDelegate:nil userDriverDelegate:nil]; return 0; } EOF cc_check $SPARKLE_CFLAGS $SPARKLE_LIBS -framework Sparkle -ObjC++ -lobjc && _sparkle=yes fi if test "$_sparkle" = yes ; then append_var LIBS "$SPARKLE_LIBS -framework Sparkle" append_var INCLUDES "$SPARKLE_CFLAGS" fi define_in_config_if_yes "$_sparkle" 'USE_SPARKLE' fi echo "$_sparkle" ;; mingw*) echocheck "Sparkle" if test "$_updates" = no; then _sparkle=no else if test ! -z $_sparklepath ; then SPARKLE_CFLAGS="-I$_sparklepath/include" SPARKLE_LIBS="-L$_sparklepath/Release -L$_sparklepath/x64/Release" fi if test "$_sparkle" = auto ; then _sparkle=no cat > $TMPC << EOF #include int main(void) { win_sparkle_get_update_check_interval(); return 0; } EOF cc_check $SPARKLE_CFLAGS $SPARKLE_LIBS -lWinSparkle && _sparkle=yes fi if test "$_sparkle" = yes ; then append_var LIBS "$SPARKLE_LIBS -lWinSparkle" append_var INCLUDES "$SPARKLE_CFLAGS" fi define_in_config_if_yes "$_sparkle" 'USE_SPARKLE' fi echo "$_sparkle" ;; *) _sparkle=no ;; esac # # Check for libcurl to be present # if test "$_libcurl" != "no"; then # Look for the curl-config script find_libcurlconfig if test -z "$_libcurlconfig"; then _libcurl=no else if test -n "$_staticlibpath"; then LIBCURL_LIBS=`$_libcurlconfig --static-libs` else LIBCURL_LIBS=`$_libcurlconfig --libs` fi LIBCURL_CFLAGS=`$_libcurlconfig --cflags` case $_host_os in amigaos* | morphos*) append_var LIBCURL_LIBS "-lpthread" ;; # macOS does not allow static libs, overriding darwin*) LIBCURL_LIBS=`$_libcurlconfig --libs` ;; psp2*) append_var LIBCURL_LIBS "-lssl -lcrypto" ;; esac if test "$_libcurl" = "auto"; then _libcurl=no cat > $TMPC << EOF #include int main(int argc, char *argv[]) { int x; curl_easy_setopt(NULL,CURLOPT_URL,NULL); x=CURL_ERROR_SIZE; x=CURLOPT_WRITEFUNCTION; x=CURLOPT_WRITEDATA; x=CURLOPT_ERRORBUFFER; x=CURLOPT_STDERR; x=CURLOPT_VERBOSE; curl_version_info_data *data = curl_version_info(CURLVERSION_NOW); if (data->features & CURL_VERSION_SSL) return 0; return 1; } EOF cc_check_no_clean $LIBCURL_CFLAGS $LIBCURL_LIBS if test "$?" -eq 0; then if test -n "$_host"; then # In cross-compiling mode, we cannot run the result, assume SSL is available _libcurl=yes else $TMPO$HOSTEXEEXT if test "$?" -eq 0; then _libcurl=yes else _libcurl="no SSL support" fi fi fi cc_check_clean fi if test "$_libcurl" = "yes"; then append_var LIBS "$LIBCURL_LIBS" append_var INCLUDES "$LIBCURL_CFLAGS" fi fi fi echocheck "libcurl" echo "$_libcurl" define_in_config_if_yes "$_libcurl" "USE_LIBCURL" # # Check for libopenmpt to be present # echocheck "libopenmpt" if test "$_libopenmpt" != "no"; then if test "$_pkg_config" = "yes" && $_pkgconfig --exists libopenmpt; then append_var LIBOPENMPT_LIBS "`$_pkgconfig --libs libopenmpt`" append_var LIBOPENMPT_CFLAGS "`$_pkgconfig --cflags libopenmpt`" else append_var LIBOPENMPT_LIBS "-lopenmpt" fi if test "$_libopenmpt" = "auto"; then _libopenmpt=no cat > $TMPC << EOF #include #include int main(void) { openmpt_module *mod = 0; FILE *file = 0; file = fopen("abc", "rb"); mod = openmpt_module_create2( openmpt_stream_get_file_callbacks2(), file, NULL, NULL, NULL, NULL, NULL, NULL, NULL ); fclose(file); return 0; } EOF cc_check $LIBOPENMPT_CFLAGS $LIBOPENMPT_LIBS && _libopenmpt=yes fi if test "$_libopenmpt" = "yes"; then append_var LIBS "$LIBOPENMPT_LIBS" append_var INCLUDES "$LIBOPENMPT_CFLAGS" fi fi define_in_config_if_yes "$_libopenmpt" "USE_OPENMPT" echo "$_libopenmpt" # # Check for libmikmod to be present # if test "$_libmikmod" != no && test "$_libopenmpt" = no; then # Look for the mikmod-config script find_libmikmodconfig echocheck "libmikmod" if test -z "$_libmikmodconfig"; then _libmikmod=no else LIBMIKMOD_LIBS=`$_libmikmodconfig --libs` LIBMIKMOD_CFLAGS=`$_libmikmodconfig --cflags` if test "$_libmikmod" = "auto"; then _libmikmod=no cat > $TMPC << EOF #include int main(void) { SAMPLE *spl = Sample_Load("abcd"); Sample_Free(spl); return 0; } EOF cc_check $LIBMIKMOD_CFLAGS $LIBMIKMOD_LIBS && _libmikmod=yes fi if test "$_libmikmod" = "yes"; then append_var LIBS "$LIBMIKMOD_LIBS" append_var INCLUDES "$LIBMIKMOD_CFLAGS" fi fi else echocheck "libmikmod" # Skip mikmod detection if openmpt is detected _libmikmod="no (OpenMPT/MikMod support is mutually exclusive)" fi echo "$_libmikmod" define_in_config_if_yes "$_libmikmod" "USE_MIKMOD" # # Check for libmpcdec to be present # echocheck "libmpcdec" if test "$_libmpcdec" != "no"; then append_var LIBMPCDEC_LIBS "-lmpcdec" if test "$_libmpcdec" = "auto"; then _libmpcdec=no cat > $TMPC << EOF #include int main(void) { mpc_streaminfo info; mpc_decoder *decoder = mpc_decoder_init(&info); return 0; } EOF if cc_check $LIBMPCDEC_CFLAGS $LIBMPCDEC_LIBS; then _libmpcdec=yes else cat > $TMPC << EOF #include int main(void) { mpc_decoder decoder; mpc_reader reader; mpc_streaminfo info; mpc_decoder_setup(&decoder, &reader); mpc_decoder_initialize(&decoder, &info); return 0; } EOF if cc_check $LIBMPCDEC_CFLAGS $LIBMPCDEC_LIBS; then _libmpcdec=yes add_line_to_config_h '#define USE_MPCDEC_OLD_API' fi fi fi if test "$_libmpcdec" = "yes"; then append_var LIBS "$LIBMPCDEC_LIBS" append_var INCLUDES "$LIBMPCDEC_CFLAGS" fi fi define_in_config_if_yes "$_libmpcdec" "USE_MPCDEC" echo "$_libmpcdec" # # Check whether to build cloud integration support # echo_n "Cloud integration... " if test "$_cloud" = "no"; then echo "no" else _cloud=no if test "$_sdlnet" = "yes"; then _cloud=yes echo_n "local" fi if test "$_libcurl" = "yes"; then if test "$_cloud" = "yes"; then echo_n ", "; fi _cloud=yes echo_n "servers" fi if test "$_cloud" = "no"; then echo_n "no" fi echo # newline fi define_in_config_if_yes $_cloud 'USE_CLOUD' if test "$_scummvmdlc" = "yes"; then if test "$_libcurl" = "yes"; then _dlc=yes fi fi define_in_config_if_yes $_dlc 'USE_DLC' define_in_config_if_yes $_scummvmdlc 'USE_SCUMMVMDLC' # # Check is NSDockTilePlugIn protocol is supported # case $_host_os in darwin*) # NSDockTilePlugIn was added in OS X 10.6, so will not be available when compiling on older macOS versions. echocheck "DockTilePlugin" if test "$_osxdockplugin" = auto ; then _osxdockplugin=no cat > $TMPC << EOF #include @interface ScummVMDockTilePlugIn : NSObject { } @end EOF cc_check -c -ObjC++ && _osxdockplugin=yes fi define_in_config_if_yes "$_osxdockplugin" 'USE_DOCKTILEPLUGIN' echo "$_osxdockplugin" ;; *) _osxdockplugin=no ;; esac # # Check for FluidSynth # echocheck "FluidSynth" append_var FLUIDSYNTH_LIBS "-lfluidsynth" case $_host_os in mingw*) FLUIDSYNTH_STATIC_LIBS="$FLUIDSYNTH_LIBS -lglib-2.0 -lintl -liconv -lws2_32 -lole32 -lshlwapi -lpcre -ldsound -lwinmm" ;; darwin*) FLUIDSYNTH_STATIC_LIBS="$FLUIDSYNTH_LIBS -framework Foundation -framework CoreServices -framework CoreMIDI -framework CoreAudio -framework AudioToolbox -lglib-2.0 -lintl -liconv -lreadline" ;; iphoneos) FLUIDSYNTH_STATIC_LIBS="$FLUIDSYNTH_LIBS -framework Foundation -framework CoreMIDI -lglib-2.0 -lintl -liconv" ;; switch) FLUIDSYNTH_STATIC_LIBS="$FLUIDSYNTH_LIBS -lnx" ;; psp2) FLUIDSYNTH_STATIC_LIBS="$FLUIDSYNTH_LIBS -lpthread" ;; *) FLUIDSYNTH_STATIC_LIBS="$FLUIDSYNTH_LIBS -lglib-2.0 -lintl -liconv" ;; esac if test "$_fluidsynth" = auto; then _fluidsynth=no cat > $TMPC << EOF #include int main(void) { delete_fluid_settings(new_fluid_settings()); return 0; } EOF cc_check_no_clean $FLUIDSYNTH_CFLAGS $FLUIDSYNTH_LIBS && _fluidsynth=yes if test "$_fluidsynth" != yes && test "$_pkg_config" = "yes" && $_pkgconfig --exists fluidsynth; then FLUIDSYNTH_LIBS="`$_pkgconfig --static --libs fluidsynth`" cc_check_no_clean $FLUIDSYNTH_CFLAGS $FLUIDSYNTH_LIBS && _fluidsynth=yes fi if test "$_fluidsynth" != yes; then FLUIDSYNTH_LIBS="$FLUIDSYNTH_STATIC_LIBS" cc_check_no_clean $FLUIDSYNTH_CFLAGS $FLUIDSYNTH_LIBS && _fluidsynth=yes fi cc_check_clean fi if test "$_fluidsynth" = yes; then append_var LIBS "$FLUIDSYNTH_LIBS" append_var INCLUDES "$FLUIDSYNTH_CFLAGS" fi define_in_config_if_yes "$_fluidsynth" 'USE_FLUIDSYNTH' echo "$_fluidsynth" # # Check for FluidLite # echocheck "FluidLite" append_var FLUIDLITE_LIBS "-lfluidlite" if test "$_fluidlite" = auto; then _fluidlite=no cat > $TMPC << EOF #include int main(void) { delete_fluid_settings(new_fluid_settings()); return 0; } EOF cc_check_no_clean $FLUIDLITE_CFLAGS $FLUIDLITE_LIBS && _fluidlite=yes if test "$_fluidlite" != yes && test "$_pkg_config" = "yes" && $_pkgconfig --exists fluidlite; then FLUIDLITE_LIBS="`$_pkgconfig --static --libs fluidlite`" cc_check_no_clean $FLUIDLITE_CFLAGS $FLUIDLITE_LIBS && _fluidlite=yes fi cc_check_clean fi if test "$_fluidlite" = yes && test "$_fluidsynth" = no; then define_in_config_if_yes "$_fluidlite" 'USE_FLUIDLITE' define_in_config_if_yes "$_fluidlite" 'USE_FLUIDSYNTH' append_var LIBS "$FLUIDLITE_LIBS" append_var INCLUDES "$FLUIDLITE_CFLAGS" else if test "$_fluidsynth" = yes; then _fluidlite="no (FluidSynth/FluidLite support is mutually exclusive)" fi add_line_to_config_h '#undef USE_FLUIDLITE' fi echo "$_fluidlite" # # Check for Sonivox # echocheck "Sonivox >= 3.6.12" append_var SONIVOX_LIBS "-lsonivox" if test "$_sonivox" = auto; then _sonivox=no cat > $TMPC << EOF #include #include EAS_DATA_HANDLE mEASDataHandle = NULL; int main(void) { EAS_Init(&mEASDataHandle); EAS_LoadDLSCollection(mEASDataHandle, NULL, NULL); return 0; } EOF cc_check_no_clean $SONIVOX_CFLAGS $SONIVOX_LIBS && _sonivox=yes if test "$_sonivox" != yes && test "$_pkg_config" = "yes" && $_pkgconfig --exists sonivox; then SONIVOX_LIBS="`$_pkgconfig --static --libs sonivox`" cc_check_no_clean $SONIVOX_CFLAGS $SONIVOX_LIBS && _sonivox=yes fi if test "$_sonivox" != yes ; then if test "$_pkg_config" = "yes" && $_pkgconfig --exists sonivox-static; then SONIVOX_LIBS="`$_pkgconfig --static --libs sonivox-static`" cc_check_no_clean $SONIVOX_CFLAGS $SONIVOX_LIBS && _sonivox=yes fi if test "$_sonivox" != yes ; then SONIVOX_LIBS="-lsonivox-static" cc_check_no_clean $SONIVOX_CFLAGS $SONIVOX_LIBS && _sonivox=yes fi fi cc_check_clean fi if test "$_sonivox" = yes; then append_var LIBS "$SONIVOX_LIBS" append_var INCLUDES "$SONIVOX_CFLAGS" fi define_in_config_if_yes "$_sonivox" 'USE_SONIVOX' echo "$_sonivox" # # 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) { rl_hook_func_t f; // not present in apple's libedit char *x = readline(""); } EOF cc_check_no_clean $READLINE_CFLAGS $READLINE_LIBS $_READLINE_LIBS && _readline=yes if test "$_readline" = no ; then _READLINE_LIBS="-lreadline -ltermcap" cc_check_no_clean $READLINE_CFLAGS $READLINE_LIBS $_READLINE_LIBS && _readline=yes fi fi cc_check_clean echo "$_readline" else _readline=no echo "skipping (text console disabled)" fi if test "$_readline" = yes ; then # # Check the type of rl_completion_entry_function. # It can be int(*)(const char *, int) or char *(*)(const char *, int). # cat > $TMPC << EOF #include #include #include int readline_completionFunction(const char *, int); int main(void) { char *x = readline(""); rl_completion_entry_function = &readline_completionFunction; } EOF cc_check $READLINE_CFLAGS $READLINE_LIBS $_READLINE_LIBS -c && add_line_to_config_h '#define USE_READLINE_INT_COMPLETION' fi if test "$_readline" = yes ; then append_var LIBS "$READLINE_LIBS $_READLINE_LIBS" append_var INCLUDES "$READLINE_CFLAGS" fi define_in_config_h_if_yes "$_readline" 'USE_READLINE' define_in_config_h_if_yes "$_text_console" 'USE_TEXT_CONSOLE_FOR_DEBUGGER' # # Check for Unity if taskbar integration is enabled # echocheck "libunity" if test "$_unix" = no || test "$_taskbar" = no || test "$_pkg_config" = no; then _libunity=no else if test "$_libunity" = auto ; then case $_host_os in mingw*) # unity is not supported on mingw _libunity=no ;; *) # Unity has a lot of dependencies, update the libs and cflags var with them LIBUNITY_LIBS="$LIBUNITY_LIBS `$_pkgconfig --libs 'unity > 3.8.1' 2>> "$TMPLOG"`" LIBUNITY_CFLAGS="$LIBUNITY_CFLAGS `$_pkgconfig --cflags 'unity > 3.8.1' 2>> "$TMPLOG"`" _libunity=no cat > $TMPC << EOF #include int main(void) { unity_launcher_entry_get_for_desktop_id("scummvm.desktop"); return 0; } EOF cc_check $LIBUNITY_CFLAGS $LIBUNITY_LIBS && _libunity=yes ;; esac fi if test "$_libunity" = yes ; then if test "$LIBUNITY_CFLAGS" = "" || test "$LIBUNITY_LIBS" = ""; then LIBUNITY_LIBS="$LIBUNITY_LIBS `$_pkgconfig --libs 'unity > 3.8.1' 2>> "$TMPLOG"`" LIBUNITY_CFLAGS="$LIBUNITY_CFLAGS `$_pkgconfig --cflags 'unity > 3.8.1' 2>> "$TMPLOG"`" fi append_var LIBS "$LIBUNITY_LIBS" append_var CXXFLAGS "$LIBUNITY_CFLAGS" fi define_in_config_h_if_yes "$_libunity" 'USE_UNITY' fi echo "$_libunity" # # Check for GTK if system dialogs are enabled # echocheck "gtk" if test "$_unix" = no || test "$_dialogs" = no || test "$_pkg_config" = no; then _gtk=no else if test "$_gtk" = auto ; then case $_host_os in mingw*) # gtk is not required on mingw _gtk=no ;; *) # GTK has a lot of dependencies, update the libs and cflags var with them GTK_LIBS="$GTK_LIBS `$_pkgconfig --libs gtk+-3.0 2>> "$TMPLOG"`" GTK_CFLAGS="$GTK_CFLAGS `$_pkgconfig --cflags gtk+-3.0 2>> "$TMPLOG"`" _gtk=no cat > $TMPC << EOF #include int main(void) { gtk_init_check(NULL, NULL); return 0; } EOF cc_check $GTK_CFLAGS $GTK_LIBS && _gtk=yes ;; esac fi if test "$_gtk" = yes ; then if test "$GTK_CFLAGS" = "" || test "$GTK_LIBS" = ""; then GTK_LIBS="$GTK_LIBS `$_pkgconfig --libs gtk+-3.0 2>> "$TMPLOG"`" GTK_CFLAGS="$GTK_CFLAGS `$_pkgconfig --cflags gtk+-3.0 2>> "$TMPLOG"`" fi append_var LIBS "$GTK_LIBS" append_var CXXFLAGS "$GTK_CFLAGS" fi define_in_config_h_if_yes "$_gtk" 'USE_GTK' fi echo "$_gtk" # # Check for FreeType2 to be present # find_freetype() { # Wrapper function which tries to find freetype # either by calling freetype-config or by using # pkg-config. # As of freetype-2.9.1 the freetype-config file # no longer gets installed by default. if test "$_pkg_config" = "yes" && $_pkgconfig --exists freetype2; then FREETYPE2_LIBS=`$_pkgconfig --libs freetype2` FREETYPE2_CFLAGS=`$_pkgconfig --cflags freetype2` FREETYPE2_STATIC_LIBS=`$_pkgconfig --static --libs freetype2` _freetype_found="true" else # Look for the freetype-config script find_freetypeconfig if test -n "$_freetypeconfig"; then # Since 2.3.12, freetype-config prepends $SYSROOT to everything. # This means we can't pass it a --prefix that includes $SYSROOT. freetypeprefix="$_freetypepath" if test -n "$SYSROOT" -a "$SYSROOT" != "/"; then teststring=VeryImplausibleSysrootX1Y2Z3 if ( env SYSROOT=/$teststring "$_freetypeconfig" --cflags | grep $teststring 2> /dev/null > /dev/null ); then echo "Adapting FreeType prefix to SYSROOT" >> "$TMPLOG" freetypeprefix="${freetypeprefix##$SYSROOT}" fi fi FREETYPE2_LIBS=`$_freetypeconfig --prefix="$freetypeprefix" --libs` FREETYPE2_CFLAGS=`$_freetypeconfig --prefix="$freetypeprefix" --cflags` FREETYPE2_STATIC_LIBS=`$_freetypeconfig --prefix="$freetypeprefix" --static --libs 2>/dev/null` _freetype_found="true" fi fi } if test "$_freetype2" != "no"; then find_freetype if test $_freetype_found != true; then _freetype2=no else if test "$_freetype2" = "auto"; then _freetype2=no cat > $TMPC << EOF #include #include FT_FREETYPE_H int main(int argc, char *argv[]) { FT_Library library; FT_Error error = FT_Init_FreeType(&library); FT_Done_FreeType(library); } EOF cc_check_no_clean $FREETYPE2_CFLAGS $FREETYPE2_LIBS && _freetype2=yes # Modern freetype-config scripts accept --static to get all # required flags for static linking. We abuse this to detect # FreeType2 builds which are static themselves. if test "$_freetype2" != "yes"; then FREETYPE2_LIBS="$FREETYPE2_STATIC_LIBS" cc_check_no_clean $FREETYPE2_CFLAGS $FREETYPE2_LIBS && _freetype2=yes fi cc_check_clean fi if test "$_freetype2" = "yes"; then append_var LIBS "$FREETYPE2_LIBS" append_var CXXFLAGS "$FREETYPE2_CFLAGS" fi fi fi echocheck "FreeType2" echo "$_freetype2" define_in_config_if_yes "$_freetype2" "USE_FREETYPE2" # # Check for OpenGL (ES) # echocheck "OpenGL" _opengl_glad=no if test "$_opengl_mode" != none ; then case $_backend in android) # We require API level 16 while GLES2 APIs have been added in level 8 so we are safe for compilation _opengl_mode=gles2 _opengl_glad=yes ;; ios7) _opengl_mode=gles2 _opengl_glad=yes ;; openpandora) # Enable GLES only if user explicitely requested it # Backend is SDL based so GLAD is supported test "$_opengl_mode" != "gles" && _opengl_mode=none test "$_opengl_mode" != "none" && _opengl_glad=yes ;; sdl) # This case is for pure SDL backend. Many platforms overload it and create a new backend # They still make use of SDL but it's handled below in the default case _opengl_glad=yes case $_sdlversion in 1.2.*) # Stock SDL 1.2 only supports OpenGL contexts. _opengl_mode=gl ;; *) # SDL2 supports both OpenGL + OpenGL ES contexts. # However, macOS only allows OpenGL context creation at # this time, thus we limit us to OpenGL on that platform. case $_host_os in darwin*) _opengl_mode=gl ;; emscripten) _opengl_mode=gles2 _opengl_glad=no # https://github.com/Dav1dde/glad-web/issues/12 append_var OPENGL_LIBS "-s FULL_ES2=1 -s MAX_WEBGL_VERSION=1" ;; *) # As SDL2 supports everything, let the user choose if he wants to test "$_opengl_mode" = "auto" && _opengl_mode=any ;; esac ;; esac ;; sailfish) _opengl_mode=gles2 _opengl_glad=yes ;; switch) _opengl_mode=gles2 _opengl_glad=yes ;; *) # On all other platforms, by default don't enable OpenGL test "$_opengl_mode" = "auto" && _opengl_mode=none # We only support OpenGL on SDL based backends and Android (already handled) test "$_sdl" = "no" && _opengl_mode=none # If it's a SDL based backend and OpenGL is really enabled, use GLAD test "$_opengl_mode" != "none" && test "$_sdl" != "no" && _opengl_glad=yes ;; esac fi if test "$_opengl_glad" = "no" -a "$_opengl_mode" != "none"; then # Try different header filenames # 1) GL/gl.h This is usually used on POSIX and Windows systems # 2) OpenGL/gl.h This is used on macOS # 3) GLES2/gl2.h This is used for OpenGL ES 2.x # 3) GLES/gl.h This is used for OpenGL ES 1.x _opengl_can_compile=no for i in "GL/gl.h" "OpenGL/gl.h" "GLES2/gl2.h" "GLES/gl.h"; do # Test the current header for OpenGL if test "$_opengl_mode" = "gl" -o "$_opengl_mode" = "any" ; then cat > $TMPC << EOF #include <$i> #include int main(void) { printf("ANTIVIRUS FALSE POSITIVE WORKAROUND"); return GL_VERSION_1_1; } EOF cc_check $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS && _opengl_can_compile=yes && break # Desktop often has multiple implementations GL/GLES/GLES2 fi # Test the current header for OpenGL ES2 if test "$_opengl_mode" = "gles2" -o "$_opengl_mode" = "any" ; then cat > $TMPC << EOF #include <$i> int main(void) { return GL_ES_VERSION_2_0; } EOF cc_check $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS && _opengl_can_compile=yes && _opengl_mode=gles2 && break fi # Test the current header for OpenGL ES if test "$_opengl_mode" = "gles" -o "$_opengl_mode" = "any" ; then cat > $TMPC << EOF #include <$i> int main(void) { return GL_VERSION_ES_CM_1_0; } EOF cc_check $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS && _opengl_can_compile=yes && _opengl_mode=gles && break fi done if test "$_opengl_can_compile" = yes; then # Our simple test case cat > $TMPC << EOF int main(void) { return 0; } EOF _opengl_can_compile=no # Try different library names if test "$_opengl_mode" = "gles2" ; then # GLESv2 This is generally used by nearly all platforms for OpenGL ES 2 for lib in "-lGLESv2"; do if cc_check_no_clean $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS $lib; then append_var OPENGL_LIBS "$lib" _opengl_can_compile=yes break fi done elif test "$_opengl_mode" = "gles" ; then OPENGL_LIBS="-lGLESv1_CM" if cc_check_no_clean $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS; then _opengl_can_compile=yes fi else case $_host_os in darwin*) OPENGL_LIBS="-framework OpenGL" ;; mingw*) OPENGL_LIBS="-lopengl32" ;; serenity*) OPENGL_LIBS="-lgl" ;; *) OPENGL_LIBS="-lGL" ;; esac if cc_check_no_clean $DEFINES $OPENGL_CFLAGS $OPENGL_LIBS; then _opengl_can_compile=yes fi fi fi if test "$_opengl_can_compile" = yes ; then append_var INCLUDES "$OPENGL_CFLAGS" append_var LIBS "$OPENGL_LIBS" append_var LIBS_3D "$OPENGL_LIBS" fi cc_check_clean elif test "$_opengl_glad" = "yes"; then _opengl_can_compile=yes fi _opengl=yes case $_opengl_mode in none) echo "no" _opengl=no ;; any) echo "yes (runtime detection)" add_line_to_config_h "#undef USE_GLES_MODE" ;; gl) echo "yes (OpenGL)" add_line_to_config_h "#define USE_GLES_MODE 0" ;; gles) echo "yes (OpenGL ES)" add_line_to_config_h "#define USE_GLES_MODE 1" ;; gles2) echo "yes (OpenGL ES 2)" add_line_to_config_h "#define USE_GLES_MODE 2" ;; *) echo "invalid mode specification '$_opengl_mode'. Aborting." exit 1 ;; esac # # Check for OpenGL (ES) for game # echocheck "OpenGL for game" if test "$_opengl_can_compile" = "yes"; then if test "$_opengl_mode" = "gles"; then # GLES 1.x is not supported for 3D games _opengl_game_classic=no _opengl_game_shaders=no elif test "$_opengl_mode" = "gles2"; then # GLES2 doesn't support GL classic _opengl_game_classic=no if test "$_opengl_game_shaders" != "no"; then _opengl_game_shaders=yes fi else # We can compile GL desktop if test "$_opengl_game_classic" != "no"; then _opengl_game_classic=yes fi if test "$_opengl_game_shaders" != "no"; then _opengl_game_shaders=yes fi fi else _opengl_game_classic=no _opengl_game_shaders=no fi if test "$_opengl_game_shaders" = "yes" ; then if test "$_opengl_mode" = "gles2" ; then echo "yes (OpenGL ES2)" else echo "yes (shaders enabled)" fi elif test "$_opengl_game_classic" = "yes" ; then echo "yes (shaders disabled)" else echo "no" fi define_in_config_if_yes "$_opengl" "USE_OPENGL" define_in_config_if_yes "$_opengl_glad" "USE_GLAD" define_in_config_if_yes "$_opengl_game_classic" "USE_OPENGL_GAME" define_in_config_if_yes "$_opengl_game_shaders" "USE_OPENGL_SHADERS" if test "$_dynamic_modules" = yes ; then case $_host_os in amigaos*) # miniGL on AmigaOS is a static library so don't link with it in plugins # instead link against it and include all symbols append_var LIBS "-Wl,-whole-archive $LIBS_3D -Wl,-no-whole-archive" LIBS_3D= ;; *) ;; esac fi # If we have OpenGL libraries, then add them to plugins # so they could link if test -n "$LIBS_3D" ; then _mak_plugins=$_mak_plugins"PLUGIN_LDFLAGS += $LIBS_3D" fi # # Check for Linux CD-ROM support # case $_host_os in *linux*) echocheck "Linux CD-ROM" linuxcd=no cat > $TMPC << EOF #include #include #include int main(void) { int x = CDROMREADAUDIO; dev_t dev; return major(dev) + x; } EOF cc_check && linuxcd=yes define_in_config_if_yes "$linuxcd" 'USE_LINUXCD' echo "$linuxcd" ;; esac # # 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 darwin*) append_var NASMFLAGS "-f macho" ;; mingw* | kolibrios) append_var NASMFLAGS "-f win32" ;; os2-emx*) append_var NASMFLAGS "-f aout" ;; *) append_var NASMFLAGS "-f elf" if $LD $LDFLAGS -Wl,--version 2>/dev/null | grep -q -e 'GNU gold'; then # gold throws an internal error when nasm uses dwarf, force older stabs in this case append_var NASMFLAGS "-F stabs" fi ;; esac _nasm=yes fi fi fi define_in_config_if_yes $_nasm 'USE_NASM' # # Check for pandoc # if test "$_pandoc" = yes ; then echocheck "pandoc" command -v pandoc >/dev/null 2>&1 && _pandoc=yes || _pandoc=no echo $_pandoc fi define_in_config_if_yes $_pandoc 'USE_PANDOC' # # Check for curl # if test "$_curl" = yes ; then echocheck "curl" command -v curl >/dev/null 2>&1 && _curl=yes || _curl=no echo $_curl fi define_in_config_if_yes $_curl 'USE_CURL' # # Check for FriBidi # echocheck "FriBidi" if test "$_pkg_config" = "yes" && $_pkgconfig --exists fribidi; then append_var FRIBIDI_LIBS "`$_pkgconfig --libs fribidi`" append_var FRIBIDI_CFLAGS "`$_pkgconfig --cflags fribidi`" else append_var FRIBIDI_LIBS "-lfribidi" fi if test "$_fribidi" = auto ; then _fribidi=no cat > $TMPC << EOF #include int main(void) { return 0; } EOF cc_check $FRIBIDI_CFLAGS $FRIBIDI_LIBS && _fribidi=yes fi if test "$_fribidi" = yes ; then append_var LIBS "$FRIBIDI_LIBS" append_var INCLUDES "$FRIBIDI_CFLAGS" fi define_in_config_if_yes "$_fribidi" 'USE_FRIBIDI' echo "$_fribidi" # # Test C++11 Compatibility # define_in_config_if_yes "$_test_cxx11" 'ENABLE_TEST_CPP_11' echo_n "Test C++11 compatibility during compilation... " echo "$_test_cxx11" # Default to plain text output for pandoc if test -z "$_pandocformat" -o "$_pandocformat" = "default"; then _pandocformat="plain" fi if test "$_pandocext" = "default"; then if test "$_pandocformat" = plain; then _pandocext="" else _pandocext=".$_pandocformat" fi fi # # Check for Discord # echocheck "Discord RPC" if test "$_discord" = auto ; then _discord=no cat > $TMPC << EOF #include int main(void) { Discord_Shutdown(); return 0; } EOF cc_check $DISCORD_CFLAGS $DISCORD_LIBS -ldiscord-rpc && _discord=yes fi if test "$_discord" = yes ; then append_var LIBS "$DISCORD_LIBS -ldiscord-rpc" append_var INCLUDES "$DISCORD_CFLAGS" fi define_in_config_if_yes "$_discord" 'USE_DISCORD' echo "$_discord" # # Check for ImGui # echocheck "ImGui" if test "$_imgui" != no ; then if test "$_freetype2" = yes ; then case $_backend in sdl | sailfish) if test "$_sdlMajorVersionNumber" -ge 2 ; then cat > $TMPC << EOF #include "SDL.h" #if !SDL_VERSION_ATLEAST(2,0,18) #error Missing SDL_RenderGeometryRaw() function #endif int main(int argc, char *argv[]) { return 0; } EOF if cc_check $LIBS $SDL_LIBS $INCLUDES $SDL_CFLAGS; then define_in_config_if_yes yes 'USE_IMGUI_SDLRENDERER2' _imgui=yes echo "yes" elif test "$_opengl" = yes; then _imgui=yes echo "yes" else _imgui=no echo "no (requires OpenGL or recent SDL)" fi else _imgui=no echo "no (backend unsupported)" fi ;; *) # For now, only SDL supports ImGui _imgui=no echo "no (backend unsupported)" ;; esac else _imgui=no echo "no (requires FreeType2)" fi else echo "$_imgui" fi define_in_config_if_yes "$_imgui" 'USE_IMGUI' # # Enable vkeybd / event recorder # define_in_config_if_yes $_vkeybd 'ENABLE_VKEYBD' define_in_config_if_yes $_eventrec 'ENABLE_EVENTRECORDER' # Check whether to build translation support # echo_n "Building translation support... " define_in_config_if_yes $_translation 'USE_TRANSLATION' if test "$_translation" = no ; then echo "no" else echo_n "yes (" if test "$_detectlang" != yes ; then cat > $TMPC << EOF #include int main(void) { setlocale(LC_ALL, ""); return 0; } EOF _detectlang=no cc_check && _detectlang=yes fi define_in_config_h_if_yes $_detectlang 'USE_DETECTLANG' if test "$_detectlang" = yes ; then echo "with runtime language detection)" else echo "without runtime language detection)" fi fi # # Check whether to build taskbar integration support # echo_n "Building taskbar integration support... " if test "$_taskbar" = "no"; then echo "no" else case $_host_os in mingw*) append_var LIBS "-lole32 -luuid" echo "win32" _taskbar=yes ;; darwin*) echo "osx" _taskbar=yes ;; *) if test "$_libunity" = yes; then echo "unity" _taskbar=yes else echo "no" _taskbar=no fi ;; esac fi define_in_config_if_yes $_taskbar 'USE_TASKBAR' # # Check whether to build system dialogs support # echo_n "Building system dialogs support... " if test "$_dialogs" = "no"; then echo "no" else case $_host_os in amigaos* | morphos*) echo "asl" _dialogs=yes ;; darwin*) echo "osx" _dialogs=yes ;; mingw*) append_var LIBS "-lole32 -luuid" echo "win32" _dialogs=yes ;; *) if test "$_gtk" = yes; then echo "gtk" _dialogs=yes else echo "no" _dialogs=no fi ;; esac fi define_in_config_if_yes $_dialogs 'USE_SYSDIALOGS' # # Check whether to build TTS integration support # echo_n "Building text-to-speech support... " if test "$_tts" = "no"; then echo "no" else case $_host_os in linux* | freebsd* | openbsd*) echo "speech dispatcher" _tts=yes define_in_config_if_yes $_tts 'USE_SPEECH_DISPATCHER' append_var LIBS '-lspeechd -lpthread' ;; mingw*) echo "win32" _tts=yes append_var LIBS '-lsapi -lole32' ;; darwin*) echo "osx" _tts=yes ;; *) echo "no" _tts=no ;; esac fi define_in_config_if_yes $_tts 'USE_TTS' # # Check whether to build with TinyGL support # echo_n "Building TinyGL support... " if test "$_16bit" = "no"; then _tinygl=no fi define_in_config_if_yes $_tinygl 'USE_TINYGL' echo "$_tinygl" # # Check whether to build Bink video support # echo_n "Building Bink video support... " define_in_config_if_yes $_bink 'USE_BINK' echo "$_bink" # # Check whether to build updates support # echo_n "Building updates support... " if test "$_updates" = yes; then if test "$_sparkle" = yes; then echo "Sparkle" else _updates=no; echo "$_updates" fi else echo "$_updates" fi define_in_config_if_yes $_updates 'USE_UPDATES' # # Check whether to create a build with all resources files linked into the binary # define_in_config_if_yes "$_builtin_resources" 'BUILTIN_RESOURCES' # # Figure out installation directories # test "x$prefix" = xNONE && prefix=/usr/local test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' case $_host_os in android | ds | mingw*) # Android don't have a fixed prefix # Windows stores all the external data files in executable file. ;; *) append_var DEFINES "-DDATA_PATH=\\\"$datadir\\\"" ;; esac case $_host in 3ds) append_var DEFINES "-DPLUGIN_DIRECTORY=\\\"$datadir/plugins\\\"" ;; android-*) # Android don't have a fixed prefix ;; ds) ;; *-emscripten) append_var DEFINES "-DPLUGIN_DIRECTORY=\\\"$datadir/plugins\\\"" ;; openpandora) # Add ../plugins as a path so plugins can be found when running from a .PND. append_var DEFINES "-DPLUGIN_DIRECTORY=\\\"../plugins\\\"" ;; maemo) # The Maemo apps want the plugins in the "lib" directory # without a scummvm sub directory. append_var DEFINES "-DPLUGIN_DIRECTORY=\\\"$libdir\\\"" ;; arm-*riscos) append_var DEFINES "-DPLUGIN_DIRECTORY=\\\"\${datarootdir}/plugins\\\"" ;; *) append_var DEFINES "-DPLUGIN_DIRECTORY=\\\"$libdir/scummvm\\\"" ;; esac # # 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 append_var CXXFLAGS "-pg" append_var LDFLAGS "-pg" append_var DEFINES "-DENABLE_PROFILING" fi echo_n "Enabling Address Sanitizer... " if test "$_enable_asan" = yes ; then if test "$_enable_tsan" = yes ; then echo_n "conflicting with tsan, disabling... " _enable_asan=no else append_var CXXFLAGS "-fsanitize=address -fno-omit-frame-pointer" append_var LDFLAGS "-fsanitize=address -fno-omit-frame-pointer" append_var PLUGIN_LDFLAGS "-fsanitize=address -fno-omit-frame-pointer" fi fi echo "$_enable_asan" echo_n "Enabling Thread Sanitizer... " if test "$_enable_tsan" = yes ; then append_var CXXFLAGS "-fsanitize=thread" append_var LDFLAGS "-fsanitize=thread" append_var PLUGIN_LDFLAGS "-fsanitize=thread" fi echo "$_enable_tsan" echo_n "Enabling Undefined Behavior Sanitizer... " if test "$_enable_ubsan" = yes ; then append_var CXXFLAGS "-fsanitize=undefined" append_var LDFLAGS "-fsanitize=undefined" append_var PLUGIN_LDFLAGS "-fsanitize=undefined" fi echo "$_enable_ubsan" # # Whether to add compiler options and preprocessor defines for SIMD extensions # # Automatically detect if SSE2, NEON, AVX2 can be compiled (not if they can # be run at runtime) case $_host_cpu in x86_64 | amd64) if test "$_ext_sse2" = auto ; then _ext_sse2=yes fi if test "$_ext_avx2" = auto ; then _ext_avx2=yes fi _ext_neon=no # SSE2 is always available on x86_64 if ! (test "$have_clang" = yes && (test $_clang_major -gt 5 || (test $_clang_major -eq 5 && test $_clang_minor -gt 0))) && ! (test "$have_gcc" = yes && (test $_cxx_major -gt 4 || (test $_cxx_major -eq 4 && test $_cxx_minor -gt 9))); then # Need GCC 4.9+ or Clang 5.0+ for target pragma _ext_avx2=no fi ;; i[3-6]86) if test "$_ext_sse2" = auto ; then _ext_sse2=yes fi if test "$_ext_avx2" = auto ; then _ext_avx2=no fi _ext_neon=no if ! (test "$have_clang" = yes && (test $_clang_major -gt 5 || (test $_clang_major -eq 5 && test $_clang_minor -gt 0))) && ! (test "$have_gcc" = yes && (test $_cxx_major -gt 4 || (test $_cxx_major -eq 4 && test $_cxx_minor -gt 9))); then # Need GCC 4.9+ or Clang 5.0+ for target pragma _ext_sse2=no _ext_avx2=no fi ;; aarch64) if test "$_ext_neon" = auto ; then _ext_neon=yes fi _ext_sse2=no _ext_avx2=no # On aarch64 neon is always available and doesn't need a target pragma ;; arm*) if test "$_ext_neon" = auto ; then _ext_neon=no fi _ext_sse2=no _ext_avx2=no if ! (test "$have_clang" = yes && (test $_clang_major -gt 19 || (test $_clang_major -eq 19 && test $_clang_minor -gt 1))) && ! (test "$have_gcc" = yes && (test $_cxx_major -gt 4 || (test $_cxx_major -eq 4 && test $_cxx_minor -gt 9))); then # Need GCC 4.9+ or Clang 19.1+ for target pragma _ext_neon=no fi ;; *) _ext_sse2=no _ext_avx2=no _ext_neon=no ;; esac define_in_config_if_yes "$_ext_sse2" 'SCUMMVM_SSE2' echo_n "Enabling x86/amd64 SSE2... " echo "$_ext_sse2" define_in_config_if_yes "$_ext_avx2" 'SCUMMVM_AVX2' echo_n "Enabling x86/amd64 AVX2... " echo "$_ext_avx2" define_in_config_if_yes "$_ext_neon" 'SCUMMVM_NEON' echo_n "Enabling ARM NEON... " echo "$_ext_neon" echo_n "Backend... " echo_n "$_backend" if test "$_sdl" = yes -a -n "$_sdlversion"; then if test "$_backend" = sdl; then echo_n " ($_sdlversion)" else echo_n " (SDL $_sdlversion)" fi fi if test "$_nasm" = yes ; then echo_n ", assembly routines" fi if test "$_16bit" = yes ; then echo_n ", 16bit color" fi if test "$_highres" = yes ; then echo_n ", high resolution" fi if test "$_tinygl" = yes ; then echo_n ", TinyGL" fi if test "$_savegame_timestamp" = yes ; then echo_n ", savegame timestamp" fi if test "$_build_scalers" = yes ; then if test "$_build_hq_scalers" = yes ; then if test "$_build_edge_scalers" = yes ; then echo_n ", HQ and Edge scalers" else echo_n ", HQ scalers" fi else echo_n ", scalers" fi fi if test "$_build_aspect" = yes; then echo_n ", aspect ratio correction" fi if test "$_mt32emu" = yes ; then echo_n ", MT-32 emulator" fi if test "$_lua" = yes ; then echo_n ", Lua" fi if test "$_nuked_opl" = yes ; then echo_n ", Nuked OPL emulator" fi if test "$_text_console" = yes ; then echo_n ", text console" if test "$_windows_console" = no ; then case "$_host_os" in mingw*) _windows_console=yes ;; esac fi fi if test "$_windows_console" = yes ; then case "$_host_os" in mingw*) echo_n ", Windows console" ;; esac fi if test "$_vkeybd" = yes ; then echo_n ", virtual keyboard" fi if test "$_eventrec" = yes ; then echo_n ", event recorder" fi if test "$_cloud" = yes ; then echo_n ", cloud" fi if test "$_dlc" = yes ; then echo_n ", dlc" fi if test "$_scummvmdlc" = yes ; then echo_n ", scummvmdlc" fi if test "$_enet" = yes ; then echo ", ENet" else echo fi # # Some last-minute platform specific stuff, executed # after all of CXXFLAGS, LDFLAGS, LIBS etc. have been setup # case $_host_os in 3ds) if test "$_freetype2" = yes -a "$_png" = yes; then append_var LIBS "-lbz2" append_var LIBS "-lpng" fi if test "$_tremor" = yes -o "$_flac" = yes; then append_var LIBS "-logg" fi # Moved -Wl,--gc-sections here to avoid it interfering with the library checks if test "$_dynamic_modules" = no ; then append_var LDFLAGS "-Wl,--gc-sections" else append_var LDFLAGS "-Wl,--no-gc-sections" fi ;; amigaos*) # In release mode use LTO to improve performance if test "$_release_build" = yes; then append_var CXXFLAGS "-flto" append_var PLUGIN_LDFLAGS "-flto=jobserver" fi ;; android) # Force treating unqualified char variables as signed by default. # NDK compiler for ARM will treat them as unsigned otherwise, which creates bugs in the code. # We apply this to all Android architectures (arm, arm64, and x86, x86-64) # albeit only the ARM architectures really required it (the others are not affected by this addition). echo "(Android) Treating char as signed char by default" append_var CXXFLAGS "-fsigned-char" # ssp at this point so the cxxtests link if test "$_debug_build" = yes; then append_var CXXFLAGS "-fstack-protector" else append_var CXXFLAGS "-fno-stack-protector" fi static_libs='' system_libs='' for lib in $LIBS; do case $lib in -lz|-lm|-ldl) system_libs="$system_libs $lib" ;; *) static_libs="$static_libs $lib" ;; esac done LIBS="-Wl,-Bstatic $static_libs -Wl,-Bdynamic $system_libs -llog -landroid -ljnigraphics -lEGL" ;; ds) # Moved -Wl,--gc-sections here to avoid it interfering with the library checks if test "$_dynamic_modules" = no ; then append_var LDFLAGS "-Wl,--gc-sections" else append_var LDFLAGS "-Wl,--no-gc-sections" # TODO: automate this required 2 step linking phase # append_var LDFLAGS "-Wl,--retain-symbols-file,ds.syms" fi ;; emscripten) append_var LDFLAGS "--pre-js ./dists/emscripten/custom_shell-pre.js --post-js ./dists/emscripten/custom_shell-post.js --shell-file ./dists/emscripten/custom_shell.html" # we remove some linker flags for libs which will be added by emscripten from emscripten-ports to avoid duplicate symbols if test "${LDFLAGS#*-s USE_GIFLIB=1}" != "$LDFLAGS"; then LIBS=`echo ${LIBS} | sed 's/-lgif//g'` fi if test "${LDFLAGS#*-s USE_LIBJPEG=1}" != "$LDFLAGS"; then LIBS=`echo ${LIBS} | sed 's/-ljpeg//g'` fi if test "${LDFLAGS#*-s USE_OGG=1}" != "$LDFLAGS"; then LIBS=`echo ${LIBS} | sed 's/-logg//g'` fi if test "${LDFLAGS#*-s USE_LIBPNG=1}" != "$LDFLAGS"; then LIBS=`echo ${LIBS} | sed 's/-lpng -lz//g'` fi if test "${LDFLAGS#*-s USE_VORBIS=1}" != "$LDFLAGS"; then LIBS=`echo ${LIBS} | sed 's/-lvorbisfile//g;'` LIBS=`echo ${LIBS} | sed 's/-lvorbis//g'` fi if test "${LDFLAGS#*-s USE_ZLIB=1}" != "$LDFLAGS"; then LIBS=`echo ${LIBS} | sed 's/-lz//g'` fi ;; kolibrios) # In reality we will build a DLL append_var LDFLAGS "-shared" # kos32 toolchain only has libpng16 LIBS=`echo ${LIBS} | sed 's/-lpng //g'` ;; mingw*) if test "$_windows_unicode" = yes; then append_var DEFINES "-DUNICODE -D_UNICODE" fi # SDL2 sets -mwindows flag by default in sdl2.pc # We need to directly replace this in the SDL pkg-config if test "$_windows_console" = yes; then LIBS=`echo $LIBS | sed -e 's/-mconsole//g' -e 's/-mwindows//g'` fi ;; riscos) if test "$_dynamic_modules" = no ; then append_var LDFLAGS "-Wl,--gc-sections" append_var CXXFLAGS "-ffunction-sections" append_var CXXFLAGS "-fdata-sections" else # toolchain asks for gc-sections append_var LDFLAGS "-Wl,--no-gc-sections" append_var PLUGIN_LDFLAGS "-Wl,--no-gc-sections" append_var CXXFLAGS "-mlong-calls" fi ;; n64) # Move some libs down here, otherwise some symbols required by libvorbis aren't found # during linking stage append_var LIBS "-lc -lgcc -lnosys" ;; psp2) if test "$_dynamic_modules" = no ; then #use link time optimization to further reduce exe size append_var CXXFLAGS "-flto" append_var LDFLAGS "-flto=jobserver" #use linker dead code elimination to further reduce exe size append_var CXXFLAGS "-ffunction-sections -fdata-sections" append_var LDFLAGS "-Wl,--gc-sections" fi ;; esac if test "$_werror_build" = yes; then # --enable-Werror shouldn't be applied before being done testing all system # features and libraries. Otherwise, some of them could just end up being silently # disabled, when any small warning appears in a test. append_var CXXFLAGS "-Werror" fi # # Engine selection # _engines_built_static="" _engines_built_dynamic="" _engines_skipped="" awk -f "$_srcdir/engines.awk" < /dev/null echo "Creating config.h" cat > config.h.new << EOF /* This file is automatically generated by configure */ /* DO NOT EDIT MANUALLY */ #ifndef CONFIG_H #define CONFIG_H $_config_h_data $(cat config.h.engines) #endif /* CONFIG_H */ EOF rm -f config.h.engines copy_if_changed config.h.new config.h echo "Creating config.mk" cat > config.mk.new << EOF # -------- Generated by configure ----------- SAVED_CONFIGFLAGS := $SAVED_CONFIGFLAGS SAVED_AR := $SAVED_AR SAVED_AS := $SAVED_AS SAVED_ASFLAGS := $SAVED_ASFLAGS SAVED_CPPFLAGS := $SAVED_CPPFLAGS SAVED_CXX := $SAVED_CXX SAVED_CXXFLAGS := $SAVED_CXXFLAGS SAVED_DWP := $SAVED_DWP SAVED_LD := $SAVED_LD SAVED_LDFLAGS := $SAVED_LDFLAGS SAVED_PKG_CONFIG_LIBDIR := $SAVED_PKG_CONFIG_LIBDIR SAVED_RANLIB := $SAVED_RANLIB SAVED_SDL_CONFIG := $SAVED_SDL_CONFIG SAVED_STRIP := $SAVED_STRIP SAVED_WINDRES := $SAVED_WINDRES SAVED_WINDRESFLAGS := $SAVED_WINDRESFLAGS CXX := $CXX CXXFLAGS := $CXXFLAGS LD := $LD LIBS += $LIBS RANLIB := $_ranlib STRIP := $_strip AR := $_ar AS := $_as ASFLAGS := $ASFLAGS DWP := $_dwp WINDRES := $_windres LDD := $_ldd WINDRESFLAGS := $WINDRESFLAGS STAGINGPATH=$_stagingpath AMIGAOSPATH=$_amigaospath MORPHOSPATH=$_morphospath STATICLIBPATH=$_staticlibpath XCODETOOLSPATH=$_xcodetoolspath SPARKLEPATH=$_sparklepath SDLCONFIG=$_sdlconfig ABI := $ABI BACKEND := $_backend MODULES += $MODULES MODULE_DIRS += $MODULE_DIRS EXEPRE := $HOSTEXEPRE EXEEXT := $HOSTEXEEXT NASM := $NASM NASMFLAGS := $NASMFLAGS PANDOC := pandoc CURL := curl PANDOCFORMAT := $_pandocformat PANDOCEXT := $_pandocext MANUALVERSION := $_manualversion ZLIB_LIBS := $ZLIB_LIBS ZLIB_CFLAGS := $ZLIB_CFLAGS prefix = $prefix exec_prefix = $exec_prefix bindir = $bindir libdir = $libdir datarootdir = $datarootdir datadir = $datadir mandir = $mandir docdir = $docdir $_config_mk_data $(cat config.mk.engines) INCLUDES += $INCLUDES OBJS += $OBJS DEFINES += $DEFINES LDFLAGS += $LDFLAGS PLUGIN_LDFLAGS = $PLUGIN_LDFLAGS $_mak_plugins port_mk = $_port_mk EOF rm -f config.mk.engines copy_if_changed config.mk.new config.mk config.h # # 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.new << 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) vpath %.rc \$(srcdir) vpath %.md \$(srcdir) include \$(srcdir)/Makefile EOF copy_if_changed Makefile.new Makefile fi copy_if_changed engines/engines.mk.new engines/engines.mk copy_if_changed engines/detection_table.h.new engines/detection_table.h copy_if_changed engines/plugins_table.h.new engines/plugins_table.h touch configure.stamp