Merge pull request #2123 from jbeich/freebsd
Fix build on DragonFly and FreeBSD
This commit is contained in:
commit
946b62c03d
11 changed files with 68 additions and 37 deletions
|
@ -23,7 +23,7 @@ if (MSVC)
|
|||
endif()
|
||||
target_link_libraries(citra ${PLATFORM_LIBRARIES} Threads::Threads)
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|FreeBSD|OpenBSD|NetBSD")
|
||||
if(UNIX AND NOT APPLE)
|
||||
install(TARGETS citra RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
|
||||
endif()
|
||||
|
||||
|
|
|
@ -104,7 +104,7 @@ target_link_libraries(citra-qt core video_core audio_core common qhexedit)
|
|||
target_link_libraries(citra-qt ${OPENGL_gl_LIBRARY} ${CITRA_QT_LIBS})
|
||||
target_link_libraries(citra-qt ${PLATFORM_LIBRARIES} Threads::Threads)
|
||||
|
||||
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|FreeBSD|OpenBSD|NetBSD")
|
||||
if(UNIX AND NOT APPLE)
|
||||
install(TARGETS citra-qt RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
|
||||
endif()
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
#define fseeko _fseeki64
|
||||
#define ftello _ftelli64
|
||||
#define atoll _atoi64
|
||||
#define stat64 _stat64
|
||||
#define fstat64 _fstat64
|
||||
#define stat _stat64
|
||||
#define fstat _fstat64
|
||||
#define fileno _fileno
|
||||
#else
|
||||
#ifdef __APPLE__
|
||||
|
@ -52,11 +52,6 @@
|
|||
#define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR)
|
||||
#endif
|
||||
|
||||
#ifdef BSD4_4
|
||||
#define stat64 stat
|
||||
#define fstat64 fstat
|
||||
#endif
|
||||
|
||||
// This namespace has various generic functions related to files and paths.
|
||||
// The code still needs a ton of cleanup.
|
||||
// REMEMBER: strdup considered harmful!
|
||||
|
@ -76,7 +71,7 @@ static void StripTailDirSlashes(std::string& fname) {
|
|||
|
||||
// Returns true if file filename exists
|
||||
bool Exists(const std::string& filename) {
|
||||
struct stat64 file_info;
|
||||
struct stat file_info;
|
||||
|
||||
std::string copy(filename);
|
||||
StripTailDirSlashes(copy);
|
||||
|
@ -88,7 +83,7 @@ bool Exists(const std::string& filename) {
|
|||
|
||||
int result = _wstat64(Common::UTF8ToUTF16W(copy).c_str(), &file_info);
|
||||
#else
|
||||
int result = stat64(copy.c_str(), &file_info);
|
||||
int result = stat(copy.c_str(), &file_info);
|
||||
#endif
|
||||
|
||||
return (result == 0);
|
||||
|
@ -96,7 +91,7 @@ bool Exists(const std::string& filename) {
|
|||
|
||||
// Returns true if filename is a directory
|
||||
bool IsDirectory(const std::string& filename) {
|
||||
struct stat64 file_info;
|
||||
struct stat file_info;
|
||||
|
||||
std::string copy(filename);
|
||||
StripTailDirSlashes(copy);
|
||||
|
@ -108,7 +103,7 @@ bool IsDirectory(const std::string& filename) {
|
|||
|
||||
int result = _wstat64(Common::UTF8ToUTF16W(copy).c_str(), &file_info);
|
||||
#else
|
||||
int result = stat64(copy.c_str(), &file_info);
|
||||
int result = stat(copy.c_str(), &file_info);
|
||||
#endif
|
||||
|
||||
if (result < 0) {
|
||||
|
@ -339,11 +334,11 @@ u64 GetSize(const std::string& filename) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
struct stat64 buf;
|
||||
struct stat buf;
|
||||
#ifdef _WIN32
|
||||
if (_wstat64(Common::UTF8ToUTF16W(filename).c_str(), &buf) == 0)
|
||||
#else
|
||||
if (stat64(filename.c_str(), &buf) == 0)
|
||||
if (stat(filename.c_str(), &buf) == 0)
|
||||
#endif
|
||||
{
|
||||
LOG_TRACE(Common_Filesystem, "%s: %lld", filename.c_str(), (long long)buf.st_size);
|
||||
|
@ -356,8 +351,8 @@ u64 GetSize(const std::string& filename) {
|
|||
|
||||
// Overloaded GetSize, accepts file descriptor
|
||||
u64 GetSize(const int fd) {
|
||||
struct stat64 buf;
|
||||
if (fstat64(fd, &buf) != 0) {
|
||||
struct stat buf;
|
||||
if (fstat(fd, &buf) != 0) {
|
||||
LOG_ERROR(Common_Filesystem, "GetSize: stat failed %i: %s", fd, GetLastErrorMsg());
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -21,7 +21,8 @@
|
|||
#include <cstdlib>
|
||||
#elif defined(__linux__)
|
||||
#include <byteswap.h>
|
||||
#elif defined(__FreeBSD__)
|
||||
#elif defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || \
|
||||
defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
#include <sys/endian.h>
|
||||
#endif
|
||||
#include <cstring>
|
||||
|
@ -101,7 +102,9 @@ inline __attribute__((always_inline)) u32 swap32(u32 _data) {
|
|||
inline __attribute__((always_inline)) u64 swap64(u64 _data) {
|
||||
return __builtin_bswap64(_data);
|
||||
}
|
||||
#elif __FreeBSD__
|
||||
#elif defined(__Bitrig__) || defined(__OpenBSD__)
|
||||
// swap16, swap32, swap64 are left as is
|
||||
#elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__)
|
||||
inline u16 swap16(u16 _data) {
|
||||
return bswap16(_data);
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#elif defined(_WIN32)
|
||||
#include <Windows.h>
|
||||
#else
|
||||
#if defined(BSD4_4) || defined(__OpenBSD__)
|
||||
#if defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||
#include <pthread_np.h>
|
||||
#else
|
||||
#include <pthread.h>
|
||||
|
@ -19,6 +19,10 @@
|
|||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#define cpu_set_t cpuset_t
|
||||
#endif
|
||||
|
||||
namespace Common {
|
||||
|
||||
int CurrentThreadId() {
|
||||
|
@ -86,7 +90,7 @@ void SetCurrentThreadName(const char* szThreadName) {
|
|||
void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask) {
|
||||
#ifdef __APPLE__
|
||||
thread_policy_set(pthread_mach_thread_np(thread), THREAD_AFFINITY_POLICY, (integer_t*)&mask, 1);
|
||||
#elif (defined __linux__ || defined BSD4_4) && !(defined ANDROID)
|
||||
#elif (defined __linux__ || defined __FreeBSD__) && !(defined ANDROID)
|
||||
cpu_set_t cpu_set;
|
||||
CPU_ZERO(&cpu_set);
|
||||
|
||||
|
@ -117,8 +121,10 @@ void SwitchCurrentThread() {
|
|||
void SetCurrentThreadName(const char* szThreadName) {
|
||||
#ifdef __APPLE__
|
||||
pthread_setname_np(szThreadName);
|
||||
#elif defined(__OpenBSD__)
|
||||
#elif defined(__Bitrig__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__OpenBSD__)
|
||||
pthread_set_name_np(pthread_self(), szThreadName);
|
||||
#elif defined(__NetBSD__)
|
||||
pthread_setname_np(pthread_self(), "%s", (void*)szThreadName);
|
||||
#else
|
||||
pthread_setname_np(pthread_self(), szThreadName);
|
||||
#endif
|
||||
|
|
|
@ -12,13 +12,15 @@ namespace Common {
|
|||
|
||||
#ifndef _MSC_VER
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#include <machine/cpufunc.h>
|
||||
#if defined(__DragonFly__) || defined(__FreeBSD__)
|
||||
// clang-format off
|
||||
#include <sys/types.h>
|
||||
#include <machine/cpufunc.h>
|
||||
// clang-format on
|
||||
#endif
|
||||
|
||||
static inline void __cpuidex(int info[4], int function_id, int subfunction_id) {
|
||||
#ifdef __FreeBSD__
|
||||
#if defined(__DragonFly__) || defined(__FreeBSD__)
|
||||
// Despite the name, this is just do_cpuid() with ECX as second input.
|
||||
cpuid_count((u_int)function_id, (u_int)subfunction_id, (u_int*)info);
|
||||
#else
|
||||
|
|
|
@ -104,7 +104,9 @@ static const std::unordered_map<int, int> error_map = {{
|
|||
{ERRNO(ENETUNREACH), 40},
|
||||
{ENFILE, 41},
|
||||
{ERRNO(ENOBUFS), 42},
|
||||
#ifdef ENODATA
|
||||
{ENODATA, 43},
|
||||
#endif
|
||||
{ENODEV, 44},
|
||||
{ENOENT, 45},
|
||||
{ENOEXEC, 46},
|
||||
|
@ -114,8 +116,12 @@ static const std::unordered_map<int, int> error_map = {{
|
|||
{ENOMSG, 50},
|
||||
{ERRNO(ENOPROTOOPT), 51},
|
||||
{ENOSPC, 52},
|
||||
#ifdef ENOSR
|
||||
{ENOSR, 53},
|
||||
#endif
|
||||
#ifdef ENOSTR
|
||||
{ENOSTR, 54},
|
||||
#endif
|
||||
{ENOSYS, 55},
|
||||
{ERRNO(ENOTCONN), 56},
|
||||
{ENOTDIR, 57},
|
||||
|
@ -136,7 +142,9 @@ static const std::unordered_map<int, int> error_map = {{
|
|||
{ESPIPE, 72},
|
||||
{ESRCH, 73},
|
||||
{ERRNO(ESTALE), 74},
|
||||
#ifdef ETIME
|
||||
{ETIME, 75},
|
||||
#endif
|
||||
{ERRNO(ETIMEDOUT), 76},
|
||||
}};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue