From 4de7a417a9661225bf5c895957708b2cb49ebde2 Mon Sep 17 00:00:00 2001 From: thelemonman Date: Sat, 2 Nov 2013 19:24:26 +0000 Subject: [PATCH] Detect the host system and architecture at configure time, makes conditional compiling easier. Start the platform defines cleanup, there's still much left. Autodetect the number of cores for every platform (BSD is untested), the port mantainers should drop their own implementations. --- desmume/compile | 245 ++++++++++++++++++++++++++--- desmume/configure.ac | 17 +- desmume/src/NDSSystem.cpp | 2 +- desmume/src/NDSSystem.h | 6 +- desmume/src/arm_jit.cpp | 2 +- desmume/src/arm_jit.h | 4 +- desmume/src/cheatSystem.cpp | 2 +- desmume/src/commandline.cpp | 4 +- desmume/src/commandline.h | 2 +- desmume/src/driver.h | 2 +- desmume/src/emufile.cpp | 4 +- desmume/src/emufile.h | 2 +- desmume/src/filter/videofilter.cpp | 2 +- desmume/src/filter/videofilter.h | 2 +- desmume/src/path.cpp | 4 +- desmume/src/path.h | 26 +-- desmume/src/rasterize.cpp | 6 +- desmume/src/saves.cpp | 2 +- desmume/src/types.h | 4 +- desmume/src/utils/fsnitro.cpp | 4 +- desmume/src/utils/task.cpp | 29 +++- desmume/src/utils/task.h | 1 + desmume/src/version.cpp | 2 +- desmume/src/wifi.cpp | 2 +- 24 files changed, 313 insertions(+), 63 deletions(-) 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