Ports: Add quake3 port :^)
This commit is contained in:
parent
c08dfe063a
commit
e2f1da8cec
Notes:
sideshowbarker
2024-07-17 14:15:12 +09:00
Author: https://github.com/Quaker762 Commit: https://github.com/SerenityOS/serenity/commit/e2f1da8cec Pull-request: https://github.com/SerenityOS/serenity/pull/13271 Reviewed-by: https://github.com/ADKaster ✅ Reviewed-by: https://github.com/EWouters Reviewed-by: https://github.com/awesomekling Reviewed-by: https://github.com/gmta Reviewed-by: https://github.com/sunverwerth ✅
11 changed files with 571 additions and 0 deletions
|
@ -178,6 +178,7 @@ Please make sure to keep this list up to date when adding and updating ports. :^
|
|||
| [`qt6-serenity`](qt6-serenity/) | QSerenityPlatform | | https://github.com/SerenityPorts/QSerenityPlatform |
|
||||
| [`quake`](quake/) | Quake | 0.65 | https://github.com/SerenityOS/SerenityQuake |
|
||||
| [`quake2`](quake2/) | QuakeII | 0.1 | https://github.com/SerenityOS/SerenityQuakeII |
|
||||
| [`quake3`](quake3/) | QuakeIII | 1.34 | https://github.com/ioquake/ioq3 |
|
||||
| [`r0`](r0/) | r0 (minimalistic commandline hexadecimal editor) | 0.8 | https://github.com/radareorg/r0 |
|
||||
| [`vlang`](vlang/) | V programming language | weekly.2021.31 | https://github.com/vlang/v |
|
||||
| [`radare2`](radare2/) | radare2 reverse engineering framework | 5.4.0-git | https://github.com/radareorg/radare2 |
|
||||
|
|
34
Ports/quake3/package.sh
Executable file
34
Ports/quake3/package.sh
Executable file
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/env -S bash ../.port_include.sh
|
||||
port=quake3
|
||||
version=1.34
|
||||
commit_hash=6d74896557d8c193a9f19bc6845a47e9d0f77db2
|
||||
archive_hash=1db91cfd05170ed5b37c1ab56cdf7bbe6b3c86fc6baee8b68e8e539fddfd88c1
|
||||
files="https://github.com/ioquake/ioq3/archive/$commit_hash.tar.gz ioq3.tar.gz $archive_hash"
|
||||
auth_type=sha256
|
||||
workdir="ioq3-${commit_hash}"
|
||||
depends=("SDL2")
|
||||
launcher_name="QuakeIII: Arena"
|
||||
launcher_category="Games"
|
||||
launcher_command=/usr/local/games/quake3/ioquake3
|
||||
icon_file="misc/quake3.png"
|
||||
|
||||
install() {
|
||||
run make COPYDIR=${SERENITY_INSTALL_ROOT}/usr/local/games/quake3/ copyfiles
|
||||
}
|
||||
|
||||
post_install() {
|
||||
# Let's create a more Serenity friendly `autoexec.cfg` file :^)
|
||||
cat <<- 'EOF' > ${SERENITY_INSTALL_ROOT}/usr/local/games/quake3/baseq3/autoexec.cfg
|
||||
set cl_renderer "opengl1"
|
||||
set r_fullscreen "0"
|
||||
set cg_drawfps "1"
|
||||
EOF
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo "==== Post installation instructions ===="
|
||||
echo "Please remember to install baseq3 from your Quake3 install"
|
||||
echo "into /usr/local/games/quake3/"
|
||||
echo "Don't forget to add the following to Base/etc/fstab/:"
|
||||
echo "/usr/local/games/quake3 /usr/local/games/quake3 bind bind,nodev,nosuid,wxallowed"
|
||||
}
|
|
@ -0,0 +1,125 @@
|
|||
From 7658f60b1a064ca08da8e71c4f44c4505df6f571 Mon Sep 17 00:00:00 2001
|
||||
From: Jesse Buhagiar <jooster669@gmail.com>
|
||||
Date: Fri, 25 Mar 2022 09:39:21 +1100
|
||||
Subject: [PATCH 1/8] Meta: Refactor Makefile to support Serenity
|
||||
|
||||
---
|
||||
Makefile | 36 ++++++++++++++++--------------------
|
||||
1 file changed, 16 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 9e535559..b26ceb7f 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -3,8 +3,8 @@
|
||||
#
|
||||
# GNU Make required
|
||||
#
|
||||
-COMPILE_PLATFORM=$(shell uname | sed -e 's/_.*//' | tr '[:upper:]' '[:lower:]' | sed -e 's/\//_/g')
|
||||
-COMPILE_ARCH=$(shell uname -m | sed -e 's/i.86/x86/' | sed -e 's/^arm.*/arm/')
|
||||
+COMPILE_PLATFORM=serenity
|
||||
+COMPILE_ARCH=${SERENITY_ARCH}
|
||||
|
||||
#arm64 hack!
|
||||
ifeq ($(shell uname -m), arm64)
|
||||
@@ -35,13 +35,13 @@ ifndef BUILD_GAME_QVM
|
||||
BUILD_GAME_QVM =
|
||||
endif
|
||||
ifndef BUILD_BASEGAME
|
||||
- BUILD_BASEGAME =
|
||||
+ BUILD_BASEGAME =1
|
||||
endif
|
||||
ifndef BUILD_MISSIONPACK
|
||||
- BUILD_MISSIONPACK=
|
||||
+ BUILD_MISSIONPACK=0
|
||||
endif
|
||||
ifndef BUILD_RENDERER_OPENGL2
|
||||
- BUILD_RENDERER_OPENGL2=
|
||||
+ BUILD_RENDERER_OPENGL2=0
|
||||
endif
|
||||
ifndef BUILD_AUTOUPDATER # DON'T build unless you mean to!
|
||||
BUILD_AUTOUPDATER=0
|
||||
@@ -164,39 +164,39 @@ GENERATE_DEPENDENCIES=1
|
||||
endif
|
||||
|
||||
ifndef USE_OPENAL
|
||||
-USE_OPENAL=1
|
||||
+USE_OPENAL=0
|
||||
endif
|
||||
|
||||
ifndef USE_OPENAL_DLOPEN
|
||||
-USE_OPENAL_DLOPEN=1
|
||||
+USE_OPENAL_DLOPEN=0
|
||||
endif
|
||||
|
||||
ifndef USE_CURL
|
||||
-USE_CURL=1
|
||||
+USE_CURL=0
|
||||
endif
|
||||
|
||||
ifndef USE_CURL_DLOPEN
|
||||
ifdef MINGW
|
||||
USE_CURL_DLOPEN=0
|
||||
else
|
||||
- USE_CURL_DLOPEN=1
|
||||
+ USE_CURL_DLOPEN=0
|
||||
endif
|
||||
endif
|
||||
|
||||
ifndef USE_CODEC_VORBIS
|
||||
-USE_CODEC_VORBIS=1
|
||||
+USE_CODEC_VORBIS=0
|
||||
endif
|
||||
|
||||
ifndef USE_CODEC_OPUS
|
||||
-USE_CODEC_OPUS=1
|
||||
+USE_CODEC_OPUS=0
|
||||
endif
|
||||
|
||||
ifndef USE_MUMBLE
|
||||
-USE_MUMBLE=1
|
||||
+USE_MUMBLE=0
|
||||
endif
|
||||
|
||||
ifndef USE_VOIP
|
||||
-USE_VOIP=1
|
||||
+USE_VOIP=0
|
||||
endif
|
||||
|
||||
ifndef USE_FREETYPE
|
||||
@@ -505,10 +505,6 @@ ifeq ($(PLATFORM),darwin)
|
||||
ifeq ($(CROSS_COMPILING),1)
|
||||
# If CC is already set to something generic, we probably want to use
|
||||
# something more specific
|
||||
- ifneq ($(findstring $(strip $(CC)),cc gcc),)
|
||||
- CC=
|
||||
- endif
|
||||
-
|
||||
ifndef CC
|
||||
ifndef DARWIN
|
||||
# macOS 10.9 SDK
|
||||
@@ -817,11 +813,10 @@ ifeq ($(PLATFORM),freebsd)
|
||||
else # ifeq freebsd
|
||||
|
||||
#############################################################################
|
||||
-# SETUP AND BUILD -- OPENBSD
|
||||
+# SETUP AND BUILD -- SERENITY
|
||||
#############################################################################
|
||||
|
||||
-ifeq ($(PLATFORM),openbsd)
|
||||
-
|
||||
+ifeq ($(PLATFORM),serenity)
|
||||
BASE_CFLAGS = -Wall -fno-strict-aliasing -Wimplicit -Wstrict-prototypes \
|
||||
-pipe -DUSE_ICON -DMAP_ANONYMOUS=MAP_ANON
|
||||
CLIENT_CFLAGS += $(SDL_CFLAGS)
|
||||
@@ -1000,6 +995,7 @@ ifeq ($(PLATFORM),sunos)
|
||||
|
||||
else # ifeq sunos
|
||||
|
||||
+
|
||||
#############################################################################
|
||||
# SETUP AND BUILD -- GENERIC
|
||||
#############################################################################
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
From a5f5bd1db818a315cf7da0211a20718f7879791e Mon Sep 17 00:00:00 2001
|
||||
From: Jesse Buhagiar <jooster669@gmail.com>
|
||||
Date: Fri, 25 Mar 2022 09:39:42 +1100
|
||||
Subject: [PATCH 2/8] Engine: Add Serenity so `q_platform.h`
|
||||
|
||||
---
|
||||
code/qcommon/q_platform.h | 29 +++++++++++++++++++++++++++++
|
||||
1 file changed, 29 insertions(+)
|
||||
|
||||
diff --git a/code/qcommon/q_platform.h b/code/qcommon/q_platform.h
|
||||
index 72dbfe1d..3bd829d4 100644
|
||||
--- a/code/qcommon/q_platform.h
|
||||
+++ b/code/qcommon/q_platform.h
|
||||
@@ -290,6 +290,35 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
#endif
|
||||
|
||||
+//=================================================================== SERENITY ===
|
||||
+
|
||||
+#if defined(__serenity__)
|
||||
+
|
||||
+#include <sys/types.h>
|
||||
+
|
||||
+#ifndef __serenity__
|
||||
+ #define __serenity__
|
||||
+#endif
|
||||
+
|
||||
+#define Q3_LITTLE_ENDIAN
|
||||
+
|
||||
+#define OS_STRING "serenity"
|
||||
+
|
||||
+#define ID_INLINE inline
|
||||
+#define PATH_SEP '/'
|
||||
+
|
||||
+#ifdef __i386__
|
||||
+#define ARCH_STRING "x86"
|
||||
+#elif defined __amd64__
|
||||
+#undef idx64
|
||||
+#define idx64 1
|
||||
+#define ARCH_STRING "x86_64"
|
||||
+#endif
|
||||
+
|
||||
+#define DLL_EXT ".so"
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
//================================================================== Q3VM ===
|
||||
|
||||
#ifdef Q3_VM
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
From c7106223c30a896a576c44ce735d4772c283afac Mon Sep 17 00:00:00 2001
|
||||
From: Jesse Buhagiar <jooster669@gmail.com>
|
||||
Date: Fri, 25 Mar 2022 09:40:41 +1100
|
||||
Subject: [PATCH 3/8] Engine: Add `<sys/select.h>` include for Serenity
|
||||
|
||||
QuakeIII makes extensive use of the `select()` syscall for its' netcode.
|
||||
It seems that Linux has this in a header that isn't `<sys/select.h>`
|
||||
like us, which results in an implicit declaration error.
|
||||
---
|
||||
code/qcommon/net_ip.c | 7 +++++++
|
||||
code/sys/con_tty.c | 4 ++++
|
||||
code/sys/sys_unix.c | 4 ++++
|
||||
3 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/code/qcommon/net_ip.c b/code/qcommon/net_ip.c
|
||||
index bcccda20..ea940f59 100644
|
||||
--- a/code/qcommon/net_ip.c
|
||||
+++ b/code/qcommon/net_ip.c
|
||||
@@ -81,6 +81,10 @@ static qboolean winsockInitialized = qfalse;
|
||||
# include <sys/filio.h>
|
||||
# endif
|
||||
|
||||
+#ifdef __serenity__
|
||||
+#include <sys/select.h>
|
||||
+#endif
|
||||
+
|
||||
typedef int SOCKET;
|
||||
# define INVALID_SOCKET -1
|
||||
# define SOCKET_ERROR -1
|
||||
@@ -996,6 +1000,7 @@ NET_JoinMulticast
|
||||
Join an ipv6 multicast group
|
||||
====================
|
||||
*/
|
||||
+#ifndef __serenity__
|
||||
void NET_JoinMulticast6(void)
|
||||
{
|
||||
int err;
|
||||
@@ -1059,6 +1064,8 @@ void NET_LeaveMulticast6()
|
||||
}
|
||||
}
|
||||
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
====================
|
||||
NET_OpenSocks
|
||||
diff --git a/code/sys/con_tty.c b/code/sys/con_tty.c
|
||||
index 58f178ad..74e1c60d 100644
|
||||
--- a/code/sys/con_tty.c
|
||||
+++ b/code/sys/con_tty.c
|
||||
@@ -34,6 +34,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#include <fcntl.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
+#ifdef __serenity__
|
||||
+#include <sys/select.h>
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
=============================================================
|
||||
tty console routines
|
||||
diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c
|
||||
index e0c63238..05f311bb 100644
|
||||
--- a/code/sys/sys_unix.c
|
||||
+++ b/code/sys/sys_unix.c
|
||||
@@ -39,6 +39,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#include <fenv.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
+#ifdef __serenity__
|
||||
+#include <sys/select.h>
|
||||
+#endif
|
||||
+
|
||||
qboolean stdinIsATTY;
|
||||
|
||||
// Used to determine where to store user-specific files
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
From 5efef55d7dc570bcef21533a952267e6b107d495 Mon Sep 17 00:00:00 2001
|
||||
From: Jesse Buhagiar <jooster669@gmail.com>
|
||||
Date: Fri, 25 Mar 2022 09:45:12 +1100
|
||||
Subject: [PATCH 4/8] Meta: Add `-ldl` library for Serenity target
|
||||
|
||||
---
|
||||
Makefile | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index b26ceb7f..035fea77 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -868,7 +868,7 @@ ifeq ($(PLATFORM),serenity)
|
||||
SHLIBLDFLAGS=-shared $(LDFLAGS)
|
||||
|
||||
THREAD_LIBS=-lpthread
|
||||
- LIBS=-lm
|
||||
+ LIBS=-lm -ldl
|
||||
|
||||
CLIENT_LIBS =
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
From 1d85a563613d3ea2f6cb03c01a4f4bbda2051e79 Mon Sep 17 00:00:00 2001
|
||||
From: Jesse Buhagiar <jooster669@gmail.com>
|
||||
Date: Fri, 25 Mar 2022 09:45:32 +1100
|
||||
Subject: [PATCH 5/8] Engine: Move `#ifdef` to more sensible location
|
||||
|
||||
No linker errors in this dojo!
|
||||
---
|
||||
code/qcommon/net_ip.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/code/qcommon/net_ip.c b/code/qcommon/net_ip.c
|
||||
index ea940f59..aaba8321 100644
|
||||
--- a/code/qcommon/net_ip.c
|
||||
+++ b/code/qcommon/net_ip.c
|
||||
@@ -1000,9 +1000,9 @@ NET_JoinMulticast
|
||||
Join an ipv6 multicast group
|
||||
====================
|
||||
*/
|
||||
-#ifndef __serenity__
|
||||
void NET_JoinMulticast6(void)
|
||||
{
|
||||
+#ifndef __serenity__
|
||||
int err;
|
||||
|
||||
if(ip6_socket == INVALID_SOCKET || multicast6_socket != INVALID_SOCKET || (net_enabled->integer & NET_DISABLEMCAST))
|
||||
@@ -1049,10 +1049,12 @@ void NET_JoinMulticast6(void)
|
||||
return;
|
||||
}
|
||||
}
|
||||
+#endif
|
||||
}
|
||||
|
||||
void NET_LeaveMulticast6()
|
||||
{
|
||||
+#ifndef __serenity__
|
||||
if(multicast6_socket != INVALID_SOCKET)
|
||||
{
|
||||
if(multicast6_socket != ip6_socket)
|
||||
@@ -1062,9 +1064,8 @@ void NET_LeaveMulticast6()
|
||||
|
||||
multicast6_socket = INVALID_SOCKET;
|
||||
}
|
||||
-}
|
||||
-
|
||||
#endif
|
||||
+}
|
||||
|
||||
/*
|
||||
====================
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
From 4c52876ae0217438e97ee9092533bbb29ee1739e Mon Sep 17 00:00:00 2001
|
||||
From: Jesse Buhagiar <jooster669@gmail.com>
|
||||
Date: Fri, 25 Mar 2022 21:46:14 +1100
|
||||
Subject: [PATCH 6/8] Meta: Add ARCH to TOOLS_CFLAGS
|
||||
|
||||
---
|
||||
Makefile | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 035fea77..c5a27abe 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -821,6 +821,8 @@ ifeq ($(PLATFORM),serenity)
|
||||
-pipe -DUSE_ICON -DMAP_ANONYMOUS=MAP_ANON
|
||||
CLIENT_CFLAGS += $(SDL_CFLAGS)
|
||||
|
||||
+ TOOLS_CFLAGS += -DARCH_STRING=\"$(COMPILE_ARCH)\"
|
||||
+
|
||||
OPTIMIZEVM = -O3
|
||||
OPTIMIZE = $(OPTIMIZEVM) -ffast-math
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
From 4d5d4cd86c7e94b3f4b2d8cdaf3909a5016aec23 Mon Sep 17 00:00:00 2001
|
||||
From: Jesse Buhagiar <jooster669@gmail.com>
|
||||
Date: Fri, 25 Mar 2022 22:04:17 +1100
|
||||
Subject: [PATCH 7/8] Meta: Remove extension from main game exe
|
||||
|
||||
---
|
||||
Makefile | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index c5a27abe..c0e62001 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1046,12 +1046,12 @@ endif
|
||||
|
||||
ifneq ($(BUILD_CLIENT),0)
|
||||
ifneq ($(USE_RENDERER_DLOPEN),0)
|
||||
- TARGETS += $(B)/$(CLIENTBIN)$(FULLBINEXT) $(B)/renderer_opengl1_$(SHLIBNAME)
|
||||
+ TARGETS += $(B)/$(CLIENTBIN) $(B)/renderer_opengl1_$(SHLIBNAME)
|
||||
ifneq ($(BUILD_RENDERER_OPENGL2),0)
|
||||
TARGETS += $(B)/renderer_opengl2_$(SHLIBNAME)
|
||||
endif
|
||||
else
|
||||
- TARGETS += $(B)/$(CLIENTBIN)$(FULLBINEXT)
|
||||
+ TARGETS += $(B)/$(CLIENTBIN)
|
||||
ifneq ($(BUILD_RENDERER_OPENGL2),0)
|
||||
TARGETS += $(B)/$(CLIENTBIN)_opengl2$(FULLBINEXT)
|
||||
endif
|
||||
@@ -2246,7 +2246,7 @@ ifeq ($(USE_MUMBLE),1)
|
||||
endif
|
||||
|
||||
ifneq ($(USE_RENDERER_DLOPEN),0)
|
||||
-$(B)/$(CLIENTBIN)$(FULLBINEXT): $(Q3OBJ) $(LIBSDLMAIN)
|
||||
+$(B)/$(CLIENTBIN): $(Q3OBJ) $(LIBSDLMAIN)
|
||||
$(echo_cmd) "LD $@"
|
||||
$(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) $(NOTSHLIBLDFLAGS) \
|
||||
-o $@ $(Q3OBJ) \
|
||||
@@ -2262,7 +2262,7 @@ $(B)/renderer_opengl2_$(SHLIBNAME): $(Q3R2OBJ) $(Q3R2STRINGOBJ) $(JPGOBJ)
|
||||
$(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3R2OBJ) $(Q3R2STRINGOBJ) $(JPGOBJ) \
|
||||
$(THREAD_LIBS) $(LIBSDLMAIN) $(RENDERER_LIBS) $(LIBS)
|
||||
else
|
||||
-$(B)/$(CLIENTBIN)$(FULLBINEXT): $(Q3OBJ) $(Q3ROBJ) $(JPGOBJ) $(LIBSDLMAIN)
|
||||
+$(B)/$(CLIENTBIN): $(Q3OBJ) $(Q3ROBJ) $(JPGOBJ) $(LIBSDLMAIN)
|
||||
$(echo_cmd) "LD $@"
|
||||
$(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) $(NOTSHLIBLDFLAGS) \
|
||||
-o $@ $(Q3OBJ) $(Q3ROBJ) $(JPGOBJ) \
|
||||
@@ -2945,7 +2945,7 @@ ifneq ($(BUILD_GAME_SO),0)
|
||||
endif
|
||||
|
||||
ifneq ($(BUILD_CLIENT),0)
|
||||
- $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/$(CLIENTBIN)$(FULLBINEXT) $(COPYBINDIR)/$(CLIENTBIN)$(FULLBINEXT)
|
||||
+ $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/$(CLIENTBIN) $(COPYBINDIR)/$(CLIENTBIN)
|
||||
ifneq ($(USE_RENDERER_DLOPEN),0)
|
||||
$(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/renderer_opengl1_$(SHLIBNAME) $(COPYBINDIR)/renderer_opengl1_$(SHLIBNAME)
|
||||
ifneq ($(BUILD_RENDERER_OPENGL2),0)
|
||||
--
|
||||
2.35.1
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
From 488dfbc449db59057afabb92d2843a2ae63741ac Mon Sep 17 00:00:00 2001
|
||||
From: Jesse Buhagiar <jooster669@gmail.com>
|
||||
Date: Sat, 26 Mar 2022 00:08:46 +1100
|
||||
Subject: [PATCH 8/8] Engine: Use Serenity style PROT_EXEC mmap
|
||||
|
||||
The code for this was really old and crusty, so let's `ifdef` it out and
|
||||
use some more friendly Serenity style memory code.
|
||||
---
|
||||
code/qcommon/vm_x86.c | 29 +++++++++++++++++++++++++++--
|
||||
1 file changed, 27 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/code/qcommon/vm_x86.c b/code/qcommon/vm_x86.c
|
||||
index 8d6321a6..d155efc2 100644
|
||||
--- a/code/qcommon/vm_x86.c
|
||||
+++ b/code/qcommon/vm_x86.c
|
||||
@@ -42,6 +42,12 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+#ifdef __serenity__
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h> // for `pledge()`
|
||||
+#include <serenity.h>
|
||||
+#endif
|
||||
+
|
||||
#if defined (__i386__) || defined(__x86_64__)
|
||||
static void VM_Destroy_Compiled(vm_t* self);
|
||||
|
||||
@@ -1649,9 +1655,24 @@ void VM_Compile(vm_t *vm, vmHeader_t *header)
|
||||
// copy to an exact sized buffer with the appropriate permission bits
|
||||
vm->codeLength = compiledOfs;
|
||||
#ifdef VM_X86_MMAP
|
||||
+#ifdef __serenity__
|
||||
+ // Round up by a page for `anon_create` (so we don't blow up in the Kernel)
|
||||
+ int compiledOfsPageAligned = compiledOfs + (4096u - (compiledOfs % 4096u));
|
||||
+
|
||||
+ // Create the fd...
|
||||
+ int fd = anon_create(compiledOfsPageAligned, O_CLOEXEC);
|
||||
+ if (fd == -1)
|
||||
+ Com_Error(ERR_FATAL, "VM_CompileX86: anon_create failed (a very bad thing!)");
|
||||
+
|
||||
+ vm->codeBase = mmap_with_name(NULL, compiledOfs, PROT_WRITE|PROT_READ|PROT_EXEC, MAP_SHARED, fd, 0, "Quake3 VM Page");
|
||||
+ if(vm->codeBase == MAP_FAILED)
|
||||
+ Com_Error(ERR_FATAL, "VM_CompileX86: can't mmap memory");
|
||||
+ close(fd);
|
||||
+#else
|
||||
vm->codeBase = mmap(NULL, compiledOfs, PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
|
||||
if(vm->codeBase == MAP_FAILED)
|
||||
Com_Error(ERR_FATAL, "VM_CompileX86: can't mmap memory");
|
||||
+#endif
|
||||
#elif _WIN32
|
||||
// allocate memory with EXECUTE permissions under windows.
|
||||
vm->codeBase = VirtualAlloc(NULL, compiledOfs, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
||||
@@ -1665,9 +1686,13 @@ void VM_Compile(vm_t *vm, vmHeader_t *header)
|
||||
|
||||
Com_Memcpy( vm->codeBase, buf, compiledOfs );
|
||||
|
||||
+
|
||||
#ifdef VM_X86_MMAP
|
||||
- if(mprotect(vm->codeBase, compiledOfs, PROT_READ|PROT_EXEC))
|
||||
- Com_Error(ERR_FATAL, "VM_CompileX86: mprotect failed");
|
||||
+#ifndef __serenity__
|
||||
+ int rc = mprotect(vm->codeBase, compiledOfs, PROT_READ|PROT_EXEC);
|
||||
+ if(rc)
|
||||
+ Com_Error(ERR_FATAL, "VM_CompileX86: mprotect failed with %d", rc);
|
||||
+#endif
|
||||
#elif _WIN32
|
||||
{
|
||||
DWORD oldProtect = 0;
|
||||
--
|
||||
2.35.1
|
||||
|
48
Ports/quake3/patches/ReadMe.md
Normal file
48
Ports/quake3/patches/ReadMe.md
Normal file
|
@ -0,0 +1,48 @@
|
|||
# Patches for quake3 on SerenityOS
|
||||
|
||||
## `0001-Meta-Refactor-Makefile-to-support-Serenity.patch`
|
||||
|
||||
Meta: Refactor Makefile to support Serenity
|
||||
|
||||
|
||||
## `0002-Engine-Add-Serenity-so-q_platform.h.patch`
|
||||
|
||||
Engine: Add Serenity so `q_platform.h`
|
||||
|
||||
|
||||
## `0003-Engine-Add-sys-select.h-include-for-Serenity.patch`
|
||||
|
||||
Engine: Add `<sys/select.h>` include for Serenity
|
||||
|
||||
QuakeIII makes extensive use of the `select()` syscall for its' netcode.
|
||||
It seems that Linux has this in a header that isn't `<sys/select.h>`
|
||||
like us, which results in an implicit declaration error.
|
||||
|
||||
## `0004-Meta-Add-ldl-library-for-Serenity-target.patch`
|
||||
|
||||
Meta: Add `-ldl` library for Serenity target
|
||||
|
||||
|
||||
## `0005-Engine-Move-ifdef-to-more-sensible-location.patch`
|
||||
|
||||
Engine: Move `#ifdef` to more sensible location
|
||||
|
||||
No linker errors in this dojo!
|
||||
|
||||
## `0006-Meta-Add-ARCH-to-TOOLS_CFLAGS.patch`
|
||||
|
||||
Meta: Add ARCH to TOOLS_CFLAGS
|
||||
|
||||
|
||||
## `0007-Meta-Remove-extension-from-main-game-exe.patch`
|
||||
|
||||
Meta: Remove extension from main game exe
|
||||
|
||||
|
||||
## `0008-Engine-Use-Serenity-style-PROT_EXEC-mmap.patch`
|
||||
|
||||
Engine: Use Serenity style PROT_EXEC mmap
|
||||
|
||||
The code for this was really old and crusty, so let's `ifdef` it out and
|
||||
use some more friendly Serenity style memory code.
|
||||
|
Loading…
Add table
Reference in a new issue