diff --git a/desmume/compile b/desmume/compile index 1b1d23216..531136b06 100755 --- a/desmume/compile +++ b/desmume/compile @@ -1,9 +1,9 @@ #! /bin/sh -# Wrapper for compilers which do not understand `-c -o'. +# Wrapper for compilers which do not understand '-c -o'. -scriptversion=2005-05-14.22 +scriptversion=2012-10-14.11; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -17,8 +17,7 @@ scriptversion=2005-05-14.22 # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -29,21 +28,224 @@ scriptversion=2005-05-14.22 # bugs to or send patches to # . +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + case $1 in '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] -Wrapper for compilers which do not understand `-c -o'. -Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the -right script to run: please start by reading the file `INSTALL'. +right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF @@ -53,11 +255,13 @@ EOF echo "compile $scriptversion" exit $? ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; esac ofile= cfile= -eat= for arg do @@ -66,8 +270,8 @@ do else case $1 in -o) - # configure might choose to run compile as `compile cc -o foo foo.c'. - # So we strip `-o arg' only if arg is an object. + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) @@ -94,22 +298,22 @@ do done if test -z "$ofile" || test -z "$cfile"; then - # If no `-o' option was seen then we might have been invoked from a + # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no - # `.c' file was seen then we are probably linking. That is also + # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. -# Note: use `[/.-]' here to ensure that we don't use the same name +# Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break @@ -124,9 +328,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15 ret=$? if test -f "$cofile"; then - mv "$cofile" "$ofile" + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then - mv "${cofile}bj" "$ofile" + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" @@ -138,5 +342,6 @@ exit $ret # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff --git a/desmume/configure.ac b/desmume/configure.ac index bb1cd901c..873cf6eec 100644 --- a/desmume/configure.ac +++ b/desmume/configure.ac @@ -260,12 +260,27 @@ case $host in AC_DEFINE(HAVE_OPENAL) LIBS="$LIBS -framework OpenGL -framework OpenAL" CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/OpenAL.framework/Headers" - AC_SUBST(CPPFLAGS) dnl - extra hackery needed for X includes AC_PATH_XTRA ;; esac +# Detect the host platform and architecture and feed them to the compiler as +# defines +AS_CASE([$host], + [*linux*], [AC_DEFINE(HOST_LINUX)], + [*bsd*] , [AC_DEFINE(HOST_BSD)], + [*mingw*], [AC_DEFINE(HOST_WINDOWS)], + [*darwin*],[AC_DEFINE(HOST_DARWIN)], + [AC_DEFINE(HOST_UNK)] +) + +AS_CASE([$host_cpu], + [x86_64], [AC_DEFINE(HOST_64)], + [amd64], [AC_DEFINE(HOST_64)], + [AC_DEFINE(HOST_32)] +) + AC_SUBST(UI_DIR) AC_SUBST(PO_DIR) diff --git a/desmume/src/NDSSystem.cpp b/desmume/src/NDSSystem.cpp index c6334db54..e5b3798ce 100644 --- a/desmume/src/NDSSystem.cpp +++ b/desmume/src/NDSSystem.cpp @@ -1317,7 +1317,7 @@ struct TSequenceItem_divider : public TSequenceItem { IF_DEVELOPER(DEBUG_statistics.sequencerExecutionCounters[2]++); MMU_new.div.busy = 0; -#ifdef _WIN64 +#ifdef HOST_64 T1WriteQuad(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2A0, MMU.divResult); T1WriteQuad(MMU.MMU_MEM[ARMCPU_ARM9][0x40], 0x2A8, MMU.divMod); #else diff --git a/desmume/src/NDSSystem.h b/desmume/src/NDSSystem.h index fc822c62f..3271c096d 100644 --- a/desmume/src/NDSSystem.h +++ b/desmume/src/NDSSystem.h @@ -30,10 +30,11 @@ #include "emufile.h" #include "firmware.h" #include "types.h" +#include "utils/task.h" #include -#if defined(_WINDOWS) +#if defined(HOST_WINDOWS) #include "pathsettings.h" #endif @@ -507,7 +508,6 @@ extern struct TCommonSettings { , DebugConsole(false) , EnsataEmulation(false) , cheatsDisable(false) - , num_cores(1) , rigorous_timing(false) , advanced_timing(true) , micMode(InternalNoise) @@ -542,6 +542,8 @@ extern struct TCommonSettings { #else use_jit = false; #endif + + num_cores = getOnlineCores(); } bool GFX3D_HighResolutionInterpolateColor; bool GFX3D_EdgeMark; diff --git a/desmume/src/arm_jit.cpp b/desmume/src/arm_jit.cpp index 3663ce5fd..8152ab348 100644 --- a/desmume/src/arm_jit.cpp +++ b/desmume/src/arm_jit.cpp @@ -18,7 +18,7 @@ #include "types.h" #ifdef HAVE_JIT -#if !defined(__x86_64__) && !defined(__LP64) && !defined(__IA64__) && !defined(_M_X64) && !defined(_WIN64) && !defined(_M_IX86) && !defined(__INTEL__) && !defined(__i386__) +#if !defined(HOST_32) && !defined(HOST_64) #error "ERROR: JIT compiler - unsupported target platform" #endif #ifdef _WINDOWS diff --git a/desmume/src/arm_jit.h b/desmume/src/arm_jit.h index 88124e8d5..bcb1e5116 100644 --- a/desmume/src/arm_jit.h +++ b/desmume/src/arm_jit.h @@ -20,7 +20,7 @@ #define ARM_JIT #include "types.h" -#ifndef _MSC_VER +#ifndef _MSC_VER #include #endif @@ -31,7 +31,7 @@ void arm_jit_close(); void arm_jit_sync(); template u32 arm_jit_compile(); -#if defined(_WINDOWS) || defined(DESMUME_COCOA) +#if defined(HOST_WINDOWS) || defined(HOST_DARWIN) #define MAPPED_JIT_FUNCS #endif #ifdef MAPPED_JIT_FUNCS diff --git a/desmume/src/cheatSystem.cpp b/desmume/src/cheatSystem.cpp index a48f7a1ef..c5b0ead87 100644 --- a/desmume/src/cheatSystem.cpp +++ b/desmume/src/cheatSystem.cpp @@ -23,7 +23,7 @@ #include "debug.h" #include "utils/xstring.h" -#ifndef _MSC_VER +#ifndef _MSC_VER #include #endif diff --git a/desmume/src/commandline.cpp b/desmume/src/commandline.cpp index e6b5db792..aa7acdeaa 100644 --- a/desmume/src/commandline.cpp +++ b/desmume/src/commandline.cpp @@ -62,7 +62,7 @@ CommandLine::CommandLine() , start_paused(FALSE) , autodetect_method(-1) { -#ifndef _MSC_VER +#ifndef HOST_WINDOWS disable_sound = 0; disable_limiter = 0; #endif @@ -108,7 +108,7 @@ void CommandLine::loadCommonOptions() { "cpu-mode", 0, 0, G_OPTION_ARG_INT, &_cpu_mode, "ARM CPU emulation mode: 0 - interpreter, 1 - dynarec (default 1)", NULL}, { "jit-size", 0, 0, G_OPTION_ARG_INT, &_jit_size, "ARM JIT block size: 1..100 (1 - accuracy, 100 - faster) (default 100)", NULL}, #endif -#ifndef _MSC_VER +#ifndef HOST_WINDOWS { "disable-sound", 0, 0, G_OPTION_ARG_NONE, &disable_sound, "Disables the sound emulation", NULL}, { "disable-limiter", 0, 0, G_OPTION_ARG_NONE, &disable_limiter, "Disables the 60fps limiter", NULL}, { "nojoy", 0, 0, G_OPTION_ARG_INT, &_commandline_linux_nojoy, "Disables joystick support", "NOJOY"}, diff --git a/desmume/src/commandline.h b/desmume/src/commandline.h index 270827cab..d6f984399 100644 --- a/desmume/src/commandline.h +++ b/desmume/src/commandline.h @@ -50,7 +50,7 @@ public: std::string slot1; std::string console_type; std::string slot1_fat_dir; -#ifndef _MSC_VER +#ifndef HOST_WINDOWS int disable_sound; int disable_limiter; #endif diff --git a/desmume/src/driver.h b/desmume/src/driver.h index 57bff2cad..ba885dacb 100644 --- a/desmume/src/driver.h +++ b/desmume/src/driver.h @@ -92,7 +92,7 @@ public: }; extern BaseDriver* driver; -#ifndef _WINDOWS +#ifndef HOST_WINDOWS class UnixDriver : public BaseDriver { #ifdef EXPERIMENTAL_WIFI_COMM diff --git a/desmume/src/emufile.cpp b/desmume/src/emufile.cpp index ed21f6a77..4e9f02642 100644 --- a/desmume/src/emufile.cpp +++ b/desmume/src/emufile.cpp @@ -64,7 +64,7 @@ size_t EMUFILE_MEMORY::_fread(const void *ptr, size_t bytes){ void EMUFILE_FILE::truncate(s32 length) { ::fflush(fp); - #ifdef _MSC_VER + #ifdef HOST_WINDOWS _chsize(_fileno(fp),length); #else ftruncate(fileno(fp),length); @@ -279,4 +279,4 @@ void EMUFILE::readMemoryStream(EMUFILE_MEMORY* ms) fread(&temp[0],size); ms->fwrite(&temp[0],size); } -} \ No newline at end of file +} diff --git a/desmume/src/emufile.h b/desmume/src/emufile.h index 4e60ebb8a..0d188ee2e 100644 --- a/desmume/src/emufile.h +++ b/desmume/src/emufile.h @@ -37,7 +37,7 @@ THE SOFTWARE. #include "emufile_types.h" -#ifdef _MSC_VER +#ifdef HOST_WINDOWS #include #else #include diff --git a/desmume/src/filter/videofilter.cpp b/desmume/src/filter/videofilter.cpp index 541f4e565..0d283eb21 100644 --- a/desmume/src/filter/videofilter.cpp +++ b/desmume/src/filter/videofilter.cpp @@ -770,7 +770,7 @@ static void* RunVideoFilterTask(void *arg) return NULL; } -#ifdef _MSC_VER +#ifdef HOST_WINDOWS void ThreadLockInit(ThreadLock *theLock) { InitializeCriticalSection(theLock); diff --git a/desmume/src/filter/videofilter.h b/desmume/src/filter/videofilter.h index cfc4f6394..df7993e26 100644 --- a/desmume/src/filter/videofilter.h +++ b/desmume/src/filter/videofilter.h @@ -19,7 +19,7 @@ #ifndef _VIDEOFILTER_ #define _VIDEOFILTER_ -#if defined(_MSC_VER) +#ifdef HOST_WINDOWS typedef unsigned __int32 uint32_t; #include typedef CRITICAL_SECTION ThreadLock; diff --git a/desmume/src/path.cpp b/desmume/src/path.cpp index fe591b46d..0ad07586c 100644 --- a/desmume/src/path.cpp +++ b/desmume/src/path.cpp @@ -29,7 +29,7 @@ static const char InvalidPathChars[] = { '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1A', '\x1B', '\x1C', '\x1D', '\x1E', '\x1F' //but I added this - #ifdef _WINDOWS + #ifdef HOST_WINDOWS ,'\x2F' #endif }; @@ -145,7 +145,7 @@ std::string Path::GetFileExt(std::string fileName) } //----------------------------------- -#ifdef _WINDOWS +#ifdef HOST_WINDOWS void FCEUD_MakePathDirs(const char *fname) { char path[MAX_PATH]; diff --git a/desmume/src/path.h b/desmume/src/path.h index a3d7a649d..26056e6e3 100644 --- a/desmume/src/path.h +++ b/desmume/src/path.h @@ -17,25 +17,25 @@ #include -#ifdef _MSC_VER +#ifdef HOST_WINDOWS #define mkdir _mkdir #endif -#if defined(_WINDOWS) +#if defined(HOST_WINDOWS) #include #include #include #include "winutil.h" #include "common.h" #include "resource.h" -#elif !defined(DESMUME_COCOA) +#elif !defined(HOST_DARWIN) #include -#endif /* _WINDOWS */ +#endif /* HOST_WINDOWS */ #include "time.h" #include "utils/xstring.h" -#ifdef _WINDOWS +#ifdef HOST_WINDOWS #define FILE_EXT_DELIMITER_CHAR '.' #define DIRECTORY_DELIMITER_CHAR '\\' #define ALL_DIRECTORY_DELIMITER_STRING "/\\" @@ -45,7 +45,7 @@ #define ALL_DIRECTORY_DELIMITER_STRING "/" #endif -#ifdef _WINDOWS +#ifdef HOST_WINDOWS void FCEUD_MakePathDirs(const char *fname); #endif @@ -126,7 +126,7 @@ public: std::vector parts = tokenize_str(filename,"|"); SetRomName(parts[parts.size()-1].c_str()); LoadModulePath(); -#if !defined(WIN32) && !defined(DESMUME_COCOA) +#if !defined(WIN32) && !defined(HOST_DARWIN) ReadPathSettings(); #endif @@ -134,7 +134,7 @@ public: void LoadModulePath() { -#if defined(_WINDOWS) +#if defined(HOST_WINDOWS) char *p; ZeroMemory(pathToModule, sizeof(pathToModule)); @@ -149,7 +149,7 @@ public: { strcpy(pathToModule,_hack_alternateModulePath); } -#elif defined(DESMUME_COCOA) +#elif defined(HOST_DARWIN) std::string pathStr = Path::GetFileDirectoryPath(path); strncpy(pathToModule, pathStr.c_str(), MAX_PATH); @@ -169,7 +169,7 @@ public: void GetDefaultPath(char *pathToDefault, const char *key, int maxCount) { -#ifdef _WINDOWS +#ifdef HOST_WINDOWS std::string temp = (std::string)"." + DIRECTORY_DELIMITER_CHAR + pathToDefault; strncpy(pathToDefault, temp.c_str(), maxCount); #else @@ -179,7 +179,7 @@ public: void ReadKey(char *pathToRead, const char *key) { -#ifdef _WINDOWS +#ifdef HOST_WINDOWS GetPrivateProfileString(SECTION, key, key, pathToRead, MAX_PATH, IniName); if(strcmp(pathToRead, key) == 0) { //since the variables are all intialized in this file they all use MAX_PATH @@ -206,7 +206,7 @@ public: ReadKey(pathToFirmware, FIRMWAREKEY); ReadKey(pathToLua, LUAKEY); ReadKey(pathToSlot1D, SLOT1DKEY); -#ifdef _WINDOWS +#ifdef HOST_WINDOWS GetPrivateProfileString(SECTION, FORMATKEY, "%f_%s_%r", screenshotFormat, MAX_FORMAT, IniName); savelastromvisit = GetPrivateProfileBool(SECTION, LASTVISITKEY, true, IniName); currentimageformat = (ImageFormat)GetPrivateProfileInt(SECTION, DEFAULTFORMATKEY, PNG, IniName); @@ -282,7 +282,7 @@ public: } strncpy(buffer, thePath.c_str(), MAX_PATH); - #ifdef _WINDOWS + #ifdef HOST_WINDOWS FCEUD_MakePathDirs(buffer); #endif } diff --git a/desmume/src/rasterize.cpp b/desmume/src/rasterize.cpp index b0135c41e..d004c892d 100644 --- a/desmume/src/rasterize.cpp +++ b/desmume/src/rasterize.cpp @@ -33,7 +33,7 @@ #include #include -#ifndef _MSC_VER +#ifndef _MSC_VER #include #endif @@ -1099,9 +1099,11 @@ static char SoftRastInit(void) _HACK_viewer_rasterizerUnit.SLI_VALUE = 0; rasterizerCores = CommonSettings.num_cores; + if (rasterizerCores > _MAX_CORES) rasterizerCores = _MAX_CORES; - if(CommonSettings.num_cores <= 1) + + if(CommonSettings.num_cores == 1) { rasterizerCores = 1; rasterizerUnit[0].SLI_MASK = 0; diff --git a/desmume/src/saves.cpp b/desmume/src/saves.cpp index e4341b8c4..52820ba94 100644 --- a/desmume/src/saves.cpp +++ b/desmume/src/saves.cpp @@ -47,7 +47,7 @@ #include "path.h" -#ifdef _WINDOWS +#ifdef HOST_WINDOWS #include "windows/main.h" #endif diff --git a/desmume/src/types.h b/desmume/src/types.h index 75c081032..72c333485 100644 --- a/desmume/src/types.h +++ b/desmume/src/types.h @@ -21,7 +21,7 @@ //analyze microsoft compilers #ifdef _MSC_VER -#define _WINDOWS +#define HOST_WINDOWS //todo - everyone will want to support this eventually, i suppose #include "config.h" #endif @@ -37,7 +37,7 @@ #define IF_DEVELOPER(X) #endif -#ifdef _WINDOWS +#ifdef HOST_WINDOWS #define HAVE_LIBAGG #define ENABLE_SSE #define ENABLE_SSE2 diff --git a/desmume/src/utils/fsnitro.cpp b/desmume/src/utils/fsnitro.cpp index aa4c0b91a..36cd4c2e4 100644 --- a/desmume/src/utils/fsnitro.cpp +++ b/desmume/src/utils/fsnitro.cpp @@ -17,7 +17,7 @@ #include #include -#ifdef _MSC_VER +#ifdef HOST_WINDOWS #include #include #define __mkdir(x) mkdir(x) @@ -32,7 +32,7 @@ using namespace std; -#ifdef _WINDOWS +#ifdef HOST_WINDOWS #define FS_DIRECTORY_DELIMITER_CHAR "\\" #else #define FS_DIRECTORY_DELIMITER_CHAR "/" diff --git a/desmume/src/utils/task.cpp b/desmume/src/utils/task.cpp index e8ff73c8a..a169276dc 100644 --- a/desmume/src/utils/task.cpp +++ b/desmume/src/utils/task.cpp @@ -19,13 +19,38 @@ #include "task.h" #include -#ifdef _WINDOWS +#ifdef HOST_WINDOWS #include #else #include +#if defined HOST_LINUX || defined HOST_DARWIN +#include +#elif defined HOST_BSD +#include #endif +#endif // HOST_WINDOWS -#ifdef _MSC_VER +// http://stackoverflow.com/questions/150355/programmatically-find-the-number-of-cores-on-a-machine +int getOnlineCores (void) +{ +#ifdef HOST_WINDOWS + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; +#elif defined HOST_LINUX || defined HOST_DARWIN + return sysconf(_SC_NPROCESSORS_ONLN); +#elif defined HOST_BSD + int cores; + const int mib[4] = { CTL_HW, HW_NCPU, 0, 0 }; + const size_t len = sizeof(cores); + sysctl(mib, 2, &cores, &len, NULL, 0); + return (cores < 1) ? 1 : cores; +#else + return 1; +#endif +} + +#ifdef HOST_WINDOWS class Task::Impl { public: Impl(); diff --git a/desmume/src/utils/task.h b/desmume/src/utils/task.h index 30c59ed4b..b5b5f6f46 100644 --- a/desmume/src/utils/task.h +++ b/desmume/src/utils/task.h @@ -45,5 +45,6 @@ public: }; +int getOnlineCores (void); #endif diff --git a/desmume/src/version.cpp b/desmume/src/version.cpp index 22d7065c0..98c40b1a4 100644 --- a/desmume/src/version.cpp +++ b/desmume/src/version.cpp @@ -32,7 +32,7 @@ #endif //todo - everyone will want to support this eventually, i suppose -#if defined(_WINDOWS) || defined(DESMUME_COCOA) +#if defined(HOST_WINDOWS) || defined(HOST_DARWIN) #include "svnrev.h" #else #ifdef SVN_REV diff --git a/desmume/src/wifi.cpp b/desmume/src/wifi.cpp index 4a15b0b08..ed84b319c 100644 --- a/desmume/src/wifi.cpp +++ b/desmume/src/wifi.cpp @@ -24,7 +24,7 @@ #include "bits.h" -#ifdef _WINDOWS +#ifdef HOST_WINDOWS #include #include #define socket_t SOCKET