diff --git a/common.gypi b/common.gypi index 998d7db6c..6a5b89a19 100644 --- a/common.gypi +++ b/common.gypi @@ -95,7 +95,7 @@ ], 'cflags': [ - '-std=c99', + #'-std=c99', ], 'configurations': { diff --git a/src/xenia/atomic.h b/src/xenia/atomic.h index 33c9d09ee..d1ac3b539 100644 --- a/src/xenia/atomic.h +++ b/src/xenia/atomic.h @@ -69,7 +69,16 @@ XEFORCEINLINE void* xe_atomic_stack_dequeue(xe_atomic_stack_t* stack, #elif XE_LIKE(POSIX) -#error TODO(benvanik): POSIX atomic primitives +#define xe_atomic_inc_32(value) \ + __sync_add_and_fetch(value, 1) +#define xe_atomic_dec_32(value) \ + __sync_sub_and_fetch(value, 1) +#define xe_atomic_add_32(amount, value) \ + __sync_fetch_and_add(value, amount) +#define xe_atomic_sub_32(amount, value) \ + __sync_fetch_and_sub(value, amount) +#define xe_atomic_cas_32(oldValue, newValue, value) \ + __sync_bool_compare_and_swap(value, oldValue, newValue) #else diff --git a/src/xenia/byte_order.h b/src/xenia/byte_order.h index e0cdfdca4..b9a73e3ae 100644 --- a/src/xenia/byte_order.h +++ b/src/xenia/byte_order.h @@ -24,9 +24,9 @@ #define XESWAP32 OSSwapInt32 #define XESWAP64 OSSwapInt64 #else -#define XESWAP16 bswap_16 -#define XESWAP32 bswap_32 -#define XESWAP64 bswap_64 +#define XESWAP16 __bswap_16 +#define XESWAP32 __bswap_32 +#define XESWAP64 __bswap_64 #endif diff --git a/src/xenia/core/socket_posix.cc b/src/xenia/core/socket_posix.cc index 7ffb7508f..5ba16271a 100644 --- a/src/xenia/core/socket_posix.cc +++ b/src/xenia/core/socket_posix.cc @@ -185,7 +185,7 @@ int xe_socket_loop_poll(xe_socket_loop_t* loop, XEIGNORE(recv(loop->notify_rd_id, &dummy, 1, 0)); } loop->events[1].revents = 0; - loop->events[1].events = POLL_IN; + loop->events[1].events = POLLIN; // Check send/recv. loop->pending_recv = (loop->events[0].revents & POLLIN) != 0; diff --git a/src/xenia/core/thread.cc b/src/xenia/core/thread.cc index 8bf055e68..59d585fd6 100644 --- a/src/xenia/core/thread.cc +++ b/src/xenia/core/thread.cc @@ -109,7 +109,11 @@ int xe_thread_start(xe_thread_ref thread) { static void* xe_thread_callback_pthreads(void* param) { xe_thread_t* thread = reinterpret_cast(param); +#if XE_LIKE(OSX) XEIGNORE(pthread_setname_np(thread->name)); +#else + pthread_setname_np(pthread_self(), thread->name); +#endif // OSX thread->callback(thread->callback_param); return 0; } diff --git a/src/xenia/dbg/simple_sha1.cc b/src/xenia/dbg/simple_sha1.cc index daa112470..8529a6560 100644 --- a/src/xenia/dbg/simple_sha1.cc +++ b/src/xenia/dbg/simple_sha1.cc @@ -12,6 +12,7 @@ #if XE_PLATFORM(WIN32) #include #else +#include #endif // WIN32 diff --git a/src/xenia/kernel/modules/xboxkrnl/objects/xthread.cc b/src/xenia/kernel/modules/xboxkrnl/objects/xthread.cc index 6293b2a59..336fe8af8 100644 --- a/src/xenia/kernel/modules/xboxkrnl/objects/xthread.cc +++ b/src/xenia/kernel/modules/xboxkrnl/objects/xthread.cc @@ -186,11 +186,16 @@ X_STATUS XThread::PlatformCreate() { int result_code; if (creation_params_.creation_flags & X_CREATE_SUSPENDED) { +#if XE_PLATFORM(OSX) result_code = pthread_create_suspended_np( reinterpret_cast(&thread_handle_), &attr, &XThreadStartCallbackPthreads, this); +#else + // TODO(benvanik): pthread_create_suspended_np on linux + XEASSERTALWAYS(); +#endif // OSX } else { result_code = pthread_create( reinterpret_cast(&thread_handle_), diff --git a/src/xenia/platform.h b/src/xenia/platform.h index d3b156ba2..300a634e8 100644 --- a/src/xenia/platform.h +++ b/src/xenia/platform.h @@ -153,7 +153,7 @@ int xe_main_thunk( void* user_main, const char* usage); #define XE_MAIN_THUNK(NAME, USAGE) \ int main(int argc, char **argv) { \ - return xe_main_thunk(argc, argv, NAME, USAGE); \ + return xe_main_thunk(argc, argv, (void*)NAME, USAGE); \ } #endif // WIN32 diff --git a/src/xenia/platform_includes.h b/src/xenia/platform_includes.h index 039216591..60d81bc2e 100644 --- a/src/xenia/platform_includes.h +++ b/src/xenia/platform_includes.h @@ -33,6 +33,11 @@ #pragma warning(disable : 4068) #endif // MSVC +#if XE_LIKE(POSIX) +#include +#include +#endif // POSIX + #include #include #include diff --git a/xenia.gyp b/xenia.gyp index 1cd4209a7..e752d5e53 100644 --- a/xenia.gyp +++ b/xenia.gyp @@ -49,6 +49,14 @@ ], }, }], + ['OS == "linux"', { + 'libraries': [ + '-L../../../<@(llvm_libdir)/', + '