mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	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