From 106ffa53ba9c61d766d15b414acef3276679a03a Mon Sep 17 00:00:00 2001 From: miqlas <5569059+extrowerk@users.noreply.github.com> Date: Wed, 1 May 2019 10:06:04 +0200 Subject: [PATCH] Preliminary Haiku support (#94) --- 3rdParty/StormLib/src/StormPort.h | 29 +++++++++++- 3rdParty/asio/include/asio/detail/config.hpp | 6 ++- CMakeLists.txt | 8 ++++ resources/haiku/devilutionX.rdef.in | 50 ++++++++++++++++++++ 4 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 resources/haiku/devilutionX.rdef.in diff --git a/3rdParty/StormLib/src/StormPort.h b/3rdParty/StormLib/src/StormPort.h index 9e1fba0fe..c2c456855 100644 --- a/3rdParty/StormLib/src/StormPort.h +++ b/3rdParty/StormLib/src/StormPort.h @@ -101,6 +101,31 @@ #define PLATFORM_DEFINED // The platform is known now #endif + +#if !defined(PLATFORM_DEFINED) && defined(__HAIKU__) + + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + #include + + #ifndef __BIG_ENDIAN__ + #define PLATFORM_LITTLE_ENDIAN + #endif + + #define PLATFORM_HAIKU + #define PLATFORM_DEFINED // The platform is known now + +#endif //----------------------------------------------------------------------------- // Assumption: we are not on Windows nor Macintosh, so this must be linux *grin* @@ -199,7 +224,7 @@ #endif // !PLATFORM_WINDOWS // 64-bit calls are supplied by "normal" calls on Mac -#if defined(PLATFORM_MAC) +#if defined(PLATFORM_MAC) || defined(PLATFORM_HAIKU) #define stat64 stat #define fstat64 fstat #define lseek64 lseek @@ -209,7 +234,7 @@ #endif // Platform-specific error codes for UNIX-based platforms -#if defined(PLATFORM_MAC) || defined(PLATFORM_LINUX) +#if defined(PLATFORM_MAC) || defined(PLATFORM_LINUX) || defined(PLATFORM_HAIKU) #define ERROR_SUCCESS 0 #define ERROR_FILE_NOT_FOUND ENOENT #define ERROR_ACCESS_DENIED EPERM diff --git a/3rdParty/asio/include/asio/detail/config.hpp b/3rdParty/asio/include/asio/detail/config.hpp index e54eea744..681f89e8e 100644 --- a/3rdParty/asio/include/asio/detail/config.hpp +++ b/3rdParty/asio/include/asio/detail/config.hpp @@ -1003,7 +1003,8 @@ || defined(__FreeBSD__) \ || defined(__NetBSD__) \ || defined(__OpenBSD__) \ - || defined(__linux__) + || defined(__linux__) \ + || defined(__HAIKU__) # define ASIO_HAS_UNISTD_H 1 # endif # endif // !defined(ASIO_HAS_BOOST_CONFIG) @@ -1215,7 +1216,8 @@ # if defined(ASIO_HAS_BOOST_CONFIG) && defined(BOOST_HAS_THREADS) # define ASIO_HAS_THREADS 1 # elif defined(__GNUC__) && !defined(__MINGW32__) \ - && !defined(linux) && !defined(__linux) && !defined(__linux__) + && !defined(linux) && !defined(__linux) && !defined(__linux__) \ + && !defined(__HAIKU__) # define ASIO_HAS_THREADS 1 # elif defined(_MT) || defined(__MT__) # define ASIO_HAS_THREADS 1 diff --git a/CMakeLists.txt b/CMakeLists.txt index d74874e79..415083fab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,10 @@ endif() if(WIN32) set(ASAN OFF) set(DIST ON) +endif() + +if(HAIKU) + set(ASAN OFF) endif() if(DIST) @@ -236,6 +240,10 @@ endif() if(WIN32) target_link_libraries(devilutionx PRIVATE wsock32 ws2_32 wininet) target_compile_options(devilution PUBLIC $<$:-gstabs>) +endif() + +if(HAIKU) + target_link_libraries(devilutionx PRIVATE network) endif() if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") diff --git a/resources/haiku/devilutionX.rdef.in b/resources/haiku/devilutionX.rdef.in new file mode 100644 index 000000000..341573957 --- /dev/null +++ b/resources/haiku/devilutionX.rdef.in @@ -0,0 +1,50 @@ +/* + * Resources for Haiku + */ + +resource app_flags B_SINGLE_LAUNCH; + +resource app_version { + major = @MAJOR@, + middle = @MIDDLE@, + minor = @MINOR@, + + variety = B_APPV_FINAL, + internal = 0, + + short_info = "devilutionX", + long_info = "Diablo build for modern operating systems" +}; + +resource app_signature "application/x-vnd.diasurgical-devilutionX"; + +resource vector_icon { + $"6E6369660A050004016C03400000020106023EF000000000000000401800477F" + $"FF49200000FD5252FFFF0606038E020202000602381D74BA3DDC3CAC7E3A85D7" + $"474E1B48C45A00FFFFFFFFFF29290381030303EB3939020106023E1000000000" + $"0000003E300048600043000000FF7C7CFFCD0505037103030E0204C282C38EC2" + $"82C38ECB18CA6ECA21C0BABF67B9BDCA21C0BACA0CC181CA0CC181C0A3BAD1C2" + $"75C495CC5CCB38C275C4950204C282C38EC282C38ECB18CA6ECA21C0BABF67B9" + $"BDCA21C0BACA0CC181CA0CC181C0A3BAD1C275C495CC5CCB38C275C4950607FE" + $"1BBE7CCC84C21ACC84C04BCC84C3E9CC84C76FCB79C5CACB6ACB30CB9CCA5FC9" + $"08CCAEC9C1C8FDC899C61FC7E7C72AC8A0C4CBC6FAC21AC6BAC9420A0DB8B2BB" + $"E0B8B2C206BA25C379BA25C99FBB97CA58BC50CA58BCADCAE3BE7CCBCAC160C8" + $"E6C160C4EBC2D3C379C2D339BBF4B9B50A0BB8B2BBE0B8B2C206BA25C379BA25" + $"C99FBB97CA58BC50CA58BCADCAE3BE7CCBCABE7CC5A4BFEEC5A4BFEEBF220A06" + $"B8B2BBE0BFEEBF22C2D339BDC3BC9ABFEDBB83BBF4B9B50A08BFEEC5A4BE7CC5" + $"A4BE7CCBCAC160C8E6C160C4EBC2D3C379C2D339BFEEBF220A04BE7CC5A4BE7C" + $"C7D0C160C4EBBFEEC5A40A03BDC3BC9AC2D339BFEEBB84020ABDC3B617BE1FB6" + $"17BD66B617BCB3B657BD09B62EBC5CB67FBB13B48ABB59B444BACEB4CFBB1EB7" + $"ECBB46B795BAF5B843BADEB8FCBADEB89FBADEBA6EBDC3BBE0BC50BBE0BF35BB" + $"E0C0A7B8FCC0A7BA6EC0A7B89FC068B7ECC090B843C03FB795C144B51CC189B5" + $"62C0FEB4D7BED3B657BF29B67FBE7CB62E0A04BB97CA58BC50CA58BC50C548BB" + $"97C4EB0805C906C096C8B3C141CAECC2ACCA3FBF61C93EC06C0805C906C096C8" + $"B3C141CAECC2ACCA3FBF61C93EC06C020ABDC3B617BE1FB617BD66B617BCB3B6" + $"57BD09B62EBC5CB67FBB09B475BB4EB42FBAC3B4BABB1EB7ECBB46B795BAF5B8" + $"43BADEB8FCBADEB89FBADEBA6EBDC3BBE0BC50BBE0BF35BBE0C0A7B8FCC0A7BA" + $"6EC0A7B89FC068B7ECC090B843C03FB79544B512C19EB557C113B4CDBED3B657" + $"BF29B67FBE7CB62E0E0A070100000A0001011001178100040A010102000A0001" + $"031001178300040A030104000A050105000A040106000A020107000A09010800" + $"0A0001091001178300040A06010A000A07010B000A00010C1001178100040A08" + $"010D00" +};