diff --git a/README.md b/README.md index bc4e796f27..9a453b09b7 100644 --- a/README.md +++ b/README.md @@ -22,10 +22,15 @@ __Windows__ __Linux__ * Debian & Ubuntu: `sudo apt-get install libopenal-dev libwxgtk3.0-dev build-essential` +__Mac OSX__ +* Install with Homebrew: `brew install glew wxwidgets` +* Remove '-framework QuickTime' from '_ldflags' in /usr/local/bin/wx-config + ### Building To initialize the repository don't forget to execute `git submodule update --init` to pull the wxWidgets source. * __Windows__: Install *Visual Studio 2013*. Then open the *.SLN* file, and press *Build* > *Rebuild Solution*. -* __Linux__: +* __Linux & Mac OSX__: `cd rpcs3 && cmake CMakeLists.txt && make && cd ../` Then run with `cd bin && ./rpcs3` + diff --git a/Utilities/GNU.cpp b/Utilities/GNU.cpp new file mode 100644 index 0000000000..bb0a784fe7 --- /dev/null +++ b/Utilities/GNU.cpp @@ -0,0 +1,20 @@ +#include +#include +#include "GNU.h" + +#ifdef __APPLE__ +void * _aligned_malloc(size_t size, size_t alignment) { + void *buffer; + posix_memalign(&buffer, alignment, size); + return buffer; +} + +int clock_gettime(int foo, struct timespec *ts) { + struct timeval tv; + + gettimeofday(&tv, NULL); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + return(0); +} +#endif /* !__APPLE__ */ diff --git a/Utilities/GNU.h b/Utilities/GNU.h index 9d0ba8abb2..f5324c5cfe 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -3,7 +3,10 @@ #if defined(__GNUG__) #include #include + +#ifndef __APPLE__ #include +#endif #define _fpclass(x) std::fpclassify(x) #define __forceinline __attribute__((always_inline)) @@ -16,8 +19,22 @@ #define _CRT_ALIGN(x) __attribute__((aligned(x))) #define InterlockedCompareExchange(ptr,new_val,old_val) __sync_val_compare_and_swap(ptr,old_val,new_val) #define InterlockedCompareExchange64(ptr,new_val,old_val) __sync_val_compare_and_swap(ptr,old_val,new_val) + +#ifndef __APPLE__ #define _aligned_malloc(size,alignment) memalign(alignment,size) -#define _aligned_free free +#else +void * _aligned_malloc(size_t size, size_t alignment); +int clock_gettime(int foo, struct timespec *ts); +#define wxIsNaN(x) ((x) != (x)) + +#ifndef CLOCK_MONOTONIC +#define CLOCK_MONOTONIC 0 +#endif /* !CLOCK_MONOTONIC */ + +#endif /* !__APPLE__ */ + +#define _aligned_free free + #define DWORD int32_t #endif diff --git a/Utilities/SMutex.cpp b/Utilities/SMutex.cpp index 541d20b276..06820a7afa 100644 --- a/Utilities/SMutex.cpp +++ b/Utilities/SMutex.cpp @@ -8,6 +8,8 @@ __forceinline void SM_Sleep() #ifdef _WIN32 __declspec(thread) +#elif __APPLE__ +__thread #else thread_local #endif diff --git a/Utilities/Thread.cpp b/Utilities/Thread.cpp index 940e6b94e9..6ad547bfff 100644 --- a/Utilities/Thread.cpp +++ b/Utilities/Thread.cpp @@ -3,6 +3,8 @@ #ifdef _WIN32 __declspec(thread) +#elif __APPLE__ +__thread #else thread_local #endif diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index 68ef012f69..7ad4795be7 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -42,9 +42,21 @@ find_package(OpenAL REQUIRED) include("${wxWidgets_USE_FILE}") if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(PLATFORM_ARCH "linux/x86_64") + if(APPLE) + set(PLATFORM_ARCH "macosx/x86_64") + elseif(WIN32) + set(PLATFORM_ARCH "Windows/x86_64") + else() + set(PLATFORM_ARCH "linux/x86_64") + endif() else() - set(PLATFORM_ARCH "linux/x86") + if(APPLE) + set(PLATFORM_ARCH "macosx/x86") + elseif(WIN32) + set(PLATFORM_ARCH "Windows/x86") + else() + set(PLATFORM_ARCH "linux/x86") + endif() endif() include_directories( @@ -72,6 +84,7 @@ GLOB_RECURSE RPCS3_SRC "${RPCS3_SRC_DIR}/rpcs3.cpp" "${RPCS3_SRC_DIR}/Ini.cpp" +"${RPCS3_SRC_DIR}/../Utilities/GNU.cpp" "${RPCS3_SRC_DIR}/Emu/*" "${RPCS3_SRC_DIR}/Gui/*" "${RPCS3_SRC_DIR}/Loader/*" diff --git a/rpcs3/Emu/GS/GL/OpenGL.h b/rpcs3/Emu/GS/GL/OpenGL.h index 2288c8ce02..fb8cbdfb16 100644 --- a/rpcs3/Emu/GS/GL/OpenGL.h +++ b/rpcs3/Emu/GS/GL/OpenGL.h @@ -2,8 +2,6 @@ #ifndef _WIN32 #include #endif -#include -#include "GL/glext.h" #ifdef _WIN32 typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC) (int interval); @@ -14,7 +12,12 @@ typedef BOOL (WINAPI* PFNWGLSWAPINTERVALEXTPROC) (int interval); #undef OPENGL_PROC #undef OPENGL_PROC2 +#elif __APPLE__ +#include +#include + #else +#include #include #include #endif diff --git a/rpcs3/rpcs3.cpp b/rpcs3/rpcs3.cpp index 3bf28ccc5e..28bed7caf8 100644 --- a/rpcs3/rpcs3.cpp +++ b/rpcs3/rpcs3.cpp @@ -73,8 +73,10 @@ void Rpcs3App::SendDbgCommand(DbgCommand id, CPUThread* thr) Rpcs3App::Rpcs3App() { #ifdef __UNIX__ + #ifndef __APPLE__ XInitThreads(); #endif + #endif } /* CPUThread& GetCPU(const u8 core) diff --git a/stblib/stb_truetype.h b/stblib/stb_truetype.h index 94f27df15e..e453f024e3 100644 --- a/stblib/stb_truetype.h +++ b/stblib/stb_truetype.h @@ -366,7 +366,9 @@ int main(int arg, char **argv) // #define your own functions "STBTT_malloc" / "STBTT_free" to avoid malloc.h #ifndef STBTT_malloc + #ifndef __APPLE__ #include + #endif #define STBTT_malloc(x,u) malloc(x) #define STBTT_free(x,u) free(x) #endif