From b0ebe289a110a375b57d3c8b2d579e5c4140b95d Mon Sep 17 00:00:00 2001 From: Leonid Pospelov Date: Wed, 4 Sep 2024 00:20:34 +0500 Subject: [PATCH] [slikenet] fix wasm32-emscripten build (#40697) Co-authored-by: Kai Pastor --- ports/slikenet/fix-emscripten.patch | 208 ++++++++++++++++++++++++++++ ports/slikenet/portfile.cmake | 1 + ports/slikenet/vcpkg.json | 2 +- versions/baseline.json | 2 +- versions/s-/slikenet.json | 5 + 5 files changed, 216 insertions(+), 2 deletions(-) create mode 100644 ports/slikenet/fix-emscripten.patch diff --git a/ports/slikenet/fix-emscripten.patch b/ports/slikenet/fix-emscripten.patch new file mode 100644 index 0000000000..ced9417101 --- /dev/null +++ b/ports/slikenet/fix-emscripten.patch @@ -0,0 +1,208 @@ +diff --git a/Source/include/slikenet/LinuxStrings.h b/Source/include/slikenet/LinuxStrings.h +index c0fd72bee..53e02c834 100644 +--- a/Source/include/slikenet/LinuxStrings.h ++++ b/Source/include/slikenet/LinuxStrings.h +@@ -23,7 +23,7 @@ + int _strnicmp(const char* s1, const char* s2, size_t n); + char *_strlwr(char * str ); + #else +- #if (defined(__GNUC__) || defined(__GCCXML__) || defined(__S3E__) ) && !defined(_WIN32) ++ #if (defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__GCCXML__) || defined(__S3E__) ) && !defined(_WIN32) + #ifndef _stricmp + int _stricmp(const char* s1, const char* s2); + #endif +diff --git a/Source/include/slikenet/NativeTypes.h b/Source/include/slikenet/NativeTypes.h +index 0b1305e31..1a1112d63 100644 +--- a/Source/include/slikenet/NativeTypes.h ++++ b/Source/include/slikenet/NativeTypes.h +@@ -16,7 +16,7 @@ + #ifndef __NATIVE_TYPES_H + #define __NATIVE_TYPES_H + +-#if defined(__GNUC__) || defined(__GCCXML__) || defined(__SNC__) || defined(__S3E__) ++#if defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__GCCXML__) || defined(__SNC__) || defined(__S3E__) + #include + #elif !defined(_STDINT_H) && !defined(_SN_STDINT_H) && !defined(_SYS_STDINT_H_) && !defined(_STDINT) && !defined(_MACHTYPES_H_) && !defined(_STDINT_H_) + typedef unsigned char uint8_t; +diff --git a/Source/include/slikenet/_FindFirst.h b/Source/include/slikenet/_FindFirst.h +index 74f5d8aa0..8906063aa 100644 +--- a/Source/include/slikenet/_FindFirst.h ++++ b/Source/include/slikenet/_FindFirst.h +@@ -16,7 +16,7 @@ + #ifndef GCC_FINDFIRST_H + #define GCC_FINDFIRST_H + +-#if (defined(__GNUC__) || defined(__ARMCC_VERSION) || defined(__GCCXML__) || defined(__S3E__) ) && !defined(__WIN32) ++#if (defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__ARMCC_VERSION) || defined(__GCCXML__) || defined(__S3E__) ) && !defined(__WIN32) + + #include + +diff --git a/Source/include/slikenet/linux_adapter.h b/Source/include/slikenet/linux_adapter.h +index b8a228f2d..1b578d9e5 100644 +--- a/Source/include/slikenet/linux_adapter.h ++++ b/Source/include/slikenet/linux_adapter.h +@@ -9,7 +9,7 @@ + */ + #pragma once + +-#ifdef __linux__ ++#if defined(__linux__) || defined(__EMSCRIPTEN__) + #define _TRUNCATE ((size_t)-1) + typedef int errno_t; + +diff --git a/Source/include/slikenet/socket2.h b/Source/include/slikenet/socket2.h +index fde1ee471..52514512b 100644 +--- a/Source/include/slikenet/socket2.h ++++ b/Source/include/slikenet/socket2.h +@@ -354,7 +354,7 @@ class RNS2_Berkley : public IRNS2_Berkley + + + +-#if defined(_WIN32) || defined(__GNUC__) || defined(__GCCXML__) || defined(__S3E__) ++#if defined(_WIN32) || defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__GCCXML__) || defined(__S3E__) + class RNS2_Windows_Linux_360 + { + public: +diff --git a/Source/src/FileList.cpp b/Source/src/FileList.cpp +index 514d2aa88..77c6bf12a 100644 +--- a/Source/src/FileList.cpp ++++ b/Source/src/FileList.cpp +@@ -25,7 +25,7 @@ + #include + + +-#elif !defined ( __APPLE__ ) && !defined ( __APPLE_CC__ ) && !defined ( __PPC__ ) && !defined ( __FreeBSD__ ) && !defined ( __S3E__ ) ++#elif !defined ( __EMSCRIPTEN__ ) && !defined ( __APPLE__ ) && !defined ( __APPLE_CC__ ) && !defined ( __PPC__ ) && !defined ( __FreeBSD__ ) && !defined ( __S3E__ ) + #include + #endif + +diff --git a/Source/src/GetTime.cpp b/Source/src/GetTime.cpp +index 6e30e255c..67d69ace0 100644 +--- a/Source/src/GetTime.cpp ++++ b/Source/src/GetTime.cpp +@@ -182,7 +182,7 @@ SLNet::TimeUS GetTimeUS_Windows( void ) + return curTime; + #endif // #if defined(GET_TIME_SPIKE_LIMIT) && GET_TIME_SPIKE_LIMIT>0 + } +-#elif defined(__GNUC__) || defined(__GCCXML__) || defined(__S3E__) ++#elif defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__GCCXML__) || defined(__S3E__) + SLNet::TimeUS GetTimeUS_Linux( void ) + { + timeval tp; +diff --git a/Source/src/LinuxStrings.cpp b/Source/src/LinuxStrings.cpp +index 0a5583a0c..95bb2a093 100644 +--- a/Source/src/LinuxStrings.cpp ++++ b/Source/src/LinuxStrings.cpp +@@ -13,7 +13,7 @@ + * license found in the license.txt file in the root directory of this source tree. + */ + +-#if (defined(__GNUC__) || defined(__ARMCC_VERSION) || defined(__GCCXML__) || defined(__S3E__) ) && !defined(_WIN32) ++#if (defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__ARMCC_VERSION) || defined(__GCCXML__) || defined(__S3E__) ) && !defined(_WIN32) + #include + #ifndef _stricmp + int _stricmp(const char* s1, const char* s2) +diff --git a/Source/src/RakNetSocket2_Berkley.cpp b/Source/src/RakNetSocket2_Berkley.cpp +index 0592beed1..1a4aac8a2 100644 +--- a/Source/src/RakNetSocket2_Berkley.cpp ++++ b/Source/src/RakNetSocket2_Berkley.cpp +@@ -203,7 +203,7 @@ RNS2BindResult RNS2_Berkley::BindSharedIPV4( RNS2_BerkleyBindParameters *bindPar + #if defined(_WIN32) + closesocket__(rns2Socket); + return BR_FAILED_TO_BIND_SOCKET; +-#elif (defined(__GNUC__) || defined(__GCCXML__) ) && !defined(_WIN32) ++#elif (defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__GCCXML__) ) && !defined(_WIN32) + closesocket__(rns2Socket); + switch (errno) + { +diff --git a/Source/src/RakNetSocket2_Windows_Linux_360.cpp b/Source/src/RakNetSocket2_Windows_Linux_360.cpp +index ee7aedad9..de4e95628 100644 +--- a/Source/src/RakNetSocket2_Windows_Linux_360.cpp ++++ b/Source/src/RakNetSocket2_Windows_Linux_360.cpp +@@ -20,7 +20,7 @@ + #ifndef RAKNETSOCKET2_WINDOWS_LINUX_360_CPP + #define RAKNETSOCKET2_WINDOWS_LINUX_360_CPP + +-#if (defined(_WIN32) || defined(__GNUC__) || defined(__GCCXML__) || defined(__S3E__) ) && !defined(WINDOWS_STORE_RT) && !defined(__native_client__) ++#if (defined(_WIN32) || defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__GCCXML__) || defined(__S3E__) ) && !defined(WINDOWS_STORE_RT) && !defined(__native_client__) + + RNS2SendResult RNS2_Windows_Linux_360::Send_Windows_Linux_360NoVDP( RNS2Socket rns2Socket, RNS2_SendParameters *sendParameters, const char *file, unsigned int line ) { + +diff --git a/Source/src/SignaledEvent.cpp b/Source/src/SignaledEvent.cpp +index 5577cb442..3f623fcf8 100644 +--- a/Source/src/SignaledEvent.cpp ++++ b/Source/src/SignaledEvent.cpp +@@ -17,7 +17,7 @@ + #include "slikenet/assert.h" + #include "slikenet/sleep.h" + +-#if defined(__GNUC__) ++#if defined(__GNUC__) || defined(__EMSCRIPTEN__) + #include + #include + #endif +diff --git a/Source/src/SocketLayer.cpp b/Source/src/SocketLayer.cpp +index fd6722e7c..1a50128b4 100644 +--- a/Source/src/SocketLayer.cpp ++++ b/Source/src/SocketLayer.cpp +@@ -26,7 +26,7 @@ + #include "slikenet/SocketDefines.h" + #include "slikenet/linux_adapter.h" + #include "slikenet/osx_adapter.h" +-#if (defined(__GNUC__) || defined(__GCCXML__)) && !defined(__WIN32__) ++#if (defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__GCCXML__)) && !defined(__WIN32__) + #include + #endif + +diff --git a/Source/src/TCPInterface.cpp b/Source/src/TCPInterface.cpp +index 0ca8a868d..ec3f181ee 100644 +--- a/Source/src/TCPInterface.cpp ++++ b/Source/src/TCPInterface.cpp +@@ -44,7 +44,7 @@ + #include "slikenet/Itoa.h" + #include "slikenet/SocketLayer.h" + #include "slikenet/SocketDefines.h" +-#if (defined(__GNUC__) || defined(__GCCXML__)) && !defined(__WIN32__) ++#if (defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__GCCXML__)) && !defined(__WIN32__) + #include + #endif + +diff --git a/Source/src/UDPForwarder.cpp b/Source/src/UDPForwarder.cpp +index 317dc9f8b..20d067531 100644 +--- a/Source/src/UDPForwarder.cpp ++++ b/Source/src/UDPForwarder.cpp +@@ -212,7 +212,7 @@ void UDPForwarder::RecvFrom(SLNet::TimeMS curTime, ForwardEntry *forwardEntry) + sockAddrIn.sin_family = AF_INET; + #endif + +-#if defined(__GNUC__) ++#if defined(__GNUC__) || defined(__EMSCRIPTEN__) + #if defined(MSG_DONTWAIT) + const int flag=MSG_DONTWAIT; + #else +diff --git a/Source/src/_FindFirst.cpp b/Source/src/_FindFirst.cpp +index 10fab3462..1bc7990c7 100644 +--- a/Source/src/_FindFirst.cpp ++++ b/Source/src/_FindFirst.cpp +@@ -12,7 +12,7 @@ + * Original file by the_viking, fixed by RvĀ„mulo Fernandes, fixed by Emmanuel Nars + * Should emulate windows finddata structure + */ +-#if (defined(__GNUC__) || defined(__GCCXML__)) && !defined(_WIN32) ++#if (defined(__EMSCRIPTEN__) || defined(__GNUC__) || defined(__GCCXML__)) && !defined(_WIN32) + #include "slikenet/_FindFirst.h" + #include "slikenet/DS_List.h" + +diff --git a/Source/src/linux_adapter.cpp b/Source/src/linux_adapter.cpp +index fe25abe96..9d1f66e71 100644 +--- a/Source/src/linux_adapter.cpp ++++ b/Source/src/linux_adapter.cpp +@@ -8,7 +8,7 @@ + * This file defines adapters for all MS-specific functions used throughout SLikeNet. + */ + +-#ifdef __linux__ ++#if defined(__linux__) || defined(__EMSCRIPTEN__) + #include "slikenet/linux_adapter.h" + + #include // for std::max, std::min diff --git a/ports/slikenet/portfile.cmake b/ports/slikenet/portfile.cmake index 20418b47af..ea29d0dbf7 100644 --- a/ports/slikenet/portfile.cmake +++ b/ports/slikenet/portfile.cmake @@ -6,6 +6,7 @@ vcpkg_from_github( HEAD_REF master PATCHES fix-install.patch + fix-emscripten.patch ) #Uses an outdated OpenSSL version and is in an experimental namespace any way. As such we delete it here file(REMOVE_RECURSE "${SOURCE_PATH}/Source/src/crypto" "${SOURCE_PATH}/Source/include/slikenet/crypto") diff --git a/ports/slikenet/vcpkg.json b/ports/slikenet/vcpkg.json index 1339756984..de589c491a 100644 --- a/ports/slikenet/vcpkg.json +++ b/ports/slikenet/vcpkg.json @@ -1,7 +1,7 @@ { "name": "slikenet", "version-date": "2021-06-07", - "port-version": 2, + "port-version": 3, "description": "SLikeNetT is an Open Source/Free Software cross-platform network engine written in C++ and specifially designed for games (and applications which have comparable requirements on a network engine like games) building upon the discontinued RakNet network engine which had more than 13 years of active development.", "homepage": "https://github.com/SLikeSoft/SLikeNet", "supports": "!uwp", diff --git a/versions/baseline.json b/versions/baseline.json index 7095bd5dcf..7755126785 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -8314,7 +8314,7 @@ }, "slikenet": { "baseline": "2021-06-07", - "port-version": 2 + "port-version": 3 }, "sltbench": { "baseline": "2.4.0", diff --git a/versions/s-/slikenet.json b/versions/s-/slikenet.json index 16e130b137..3717748f06 100644 --- a/versions/s-/slikenet.json +++ b/versions/s-/slikenet.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "37216538e82557e699ffb5266e5a9d6c044205b0", + "version-date": "2021-06-07", + "port-version": 3 + }, { "git-tree": "1ae52d7161892faf627a65ae14f0700665069daf", "version-date": "2021-06-07",