summaryrefslogtreecommitdiff
path: root/Ports/openrct2
diff options
context:
space:
mode:
authorJulian Offenhäuser <offenhaeuser@protonmail.com>2023-02-08 12:22:45 +0100
committerLinus Groh <mail@linusgroh.de>2023-02-08 19:06:42 +0000
commitb1793868b0e76dd39f7343c451178cf05ceca47b (patch)
treed4c39085f5e8bedbf4c7a58a825c35d13c3ab460 /Ports/openrct2
parent839c23417dfc1dcb341ed4c27b96f10089ab4484 (diff)
downloadserenity-b1793868b0e76dd39f7343c451178cf05ceca47b.zip
Ports: Add OpenRCT2
Diffstat (limited to 'Ports/openrct2')
-rwxr-xr-xPorts/openrct2/package.sh53
-rw-r--r--Ports/openrct2/patches/0001-Add-SerenityOS-platform-detection.patch24
-rw-r--r--Ports/openrct2/patches/0002-Add-missing-includes.patch36
-rw-r--r--Ports/openrct2/patches/0003-Read-the-executable-path-from-proc-self-exe.patch23
-rw-r--r--Ports/openrct2/patches/0004-Remove-use-of-strptime.patch32
-rw-r--r--Ports/openrct2/patches/0005-Don-t-try-linking-to-stdc-fs.patch23
-rw-r--r--Ports/openrct2/patches/0006-Add-compile-options-to-CMakeLists.txt.patch32
-rw-r--r--Ports/openrct2/patches/0007-Disable-locale-detection-for-writing-the-default-con.patch30
-rw-r--r--Ports/openrct2/patches/0008-Disable-g2.dat-target.patch23
-rw-r--r--Ports/openrct2/patches/ReadMe.md50
10 files changed, 326 insertions, 0 deletions
diff --git a/Ports/openrct2/package.sh b/Ports/openrct2/package.sh
new file mode 100755
index 0000000000..3bb2633c43
--- /dev/null
+++ b/Ports/openrct2/package.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env -S bash ../.port_include.sh
+port='openrct2'
+version='0.4.3'
+auth_type='sha256'
+depends=(
+ 'curl'
+ 'flac'
+ 'fontconfig'
+ 'freetype'
+ 'libicu'
+ 'libogg'
+ 'libpng'
+ 'libvorbis'
+ 'libzip'
+ 'nlohmann-json'
+ 'openssl'
+ 'SDL2'
+ 'speexdsp'
+ 'zlib'
+)
+files="https://github.com/OpenRCT2/OpenRCT2/archive/refs/tags/v${version}.tar.gz ${port}-${version}.tar.gz 1269759b3a90717f379cd375f30629e3f24d3fdeb0c54cc1dca03676e64731ef
+https://github.com/OpenRCT2/OpenRCT2/releases/download/v${version}/OpenRCT2-${version}-linux-x86_64.tar.gz OpenRCT2-${version}-linux-x86_64.tar.gz 3691aa42e0b2eff80609688930d87b8cb8b97fb57f2ed624d3ed57e2eefb4fcf"
+useconfigure='true'
+workdir="OpenRCT2-${version}"
+configopts=(
+ "-DCMAKE_TOOLCHAIN_FILE=${SERENITY_BUILD_DIR}/CMakeToolchain.txt"
+ "-DCMAKE_INSTALL_PREFIX=${DESTDIR}/usr/local/"
+ "-DCMAKE_BUILD_TYPE=Release"
+ "-DDISABLE_DISCORD_RPC=ON"
+ "-DDISABLE_GOOGLE_BENCHMARK=ON"
+ "-DWITH_TESTS=OFF"
+ "-DDISABLE_OPENGL=ON")
+icon_file='resources/logo/icon_x16.png'
+launcher_name='OpenRCT2'
+launcher_category='Games'
+launcher_command='/usr/local/bin/openrct2'
+
+configure() {
+ mkdir -p "${PORT_BUILD_DIR}/OpenRCT2-${version}-build"
+ cd "${PORT_BUILD_DIR}/OpenRCT2-${version}-build"
+ cmake -G Ninja "${configopts[@]}" "${PORT_BUILD_DIR}/OpenRCT2-${version}"
+}
+
+build() {
+ cd "${PORT_BUILD_DIR}/OpenRCT2-${version}-build"
+ mv "${PORT_BUILD_DIR}/OpenRCT2/data/g2.dat" .
+ ninja
+}
+
+install() {
+ cd "${PORT_BUILD_DIR}/OpenRCT2-${version}-build"
+ ninja install
+}
diff --git a/Ports/openrct2/patches/0001-Add-SerenityOS-platform-detection.patch b/Ports/openrct2/patches/0001-Add-SerenityOS-platform-detection.patch
new file mode 100644
index 0000000000..018bb4cfc4
--- /dev/null
+++ b/Ports/openrct2/patches/0001-Add-SerenityOS-platform-detection.patch
@@ -0,0 +1,24 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Julian=20Offenh=C3=A4user?= <offenhaeuser@protonmail.com>
+Date: Tue, 7 Feb 2023 21:10:21 +0100
+Subject: [PATCH] Add SerenityOS platform detection
+
+We teach OpenRCT2 about the name of our platform.
+---
+ src/openrct2/Version.h | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/openrct2/Version.h b/src/openrct2/Version.h
+index 0e5d83aaf2cf0b0e2562065cab6c7b1526a0f1e9..428552a4f78cc9d21a15f4641144fe65b6c751e4 100644
+--- a/src/openrct2/Version.h
++++ b/src/openrct2/Version.h
+@@ -70,6 +70,9 @@
+ #ifdef __EMSCRIPTEN__
+ # define OPENRCT2_PLATFORM "Emscripten"
+ #endif
++#ifdef __serenity__
++# define OPENRCT2_PLATFORM "SerenityOS"
++#endif
+ #ifndef OPENRCT2_PLATFORM
+ # error Unknown platform!
+ #endif
diff --git a/Ports/openrct2/patches/0002-Add-missing-includes.patch b/Ports/openrct2/patches/0002-Add-missing-includes.patch
new file mode 100644
index 0000000000..820ada892b
--- /dev/null
+++ b/Ports/openrct2/patches/0002-Add-missing-includes.patch
@@ -0,0 +1,36 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Julian=20Offenh=C3=A4user?= <offenhaeuser@protonmail.com>
+Date: Tue, 7 Feb 2023 21:21:46 +0100
+Subject: [PATCH] Add missing includes
+
+These are missing when compiling the release build.
+---
+ src/openrct2/core/String.cpp | 1 +
+ src/openrct2/network/Socket.cpp | 2 ++
+ 2 files changed, 3 insertions(+)
+
+diff --git a/src/openrct2/core/String.cpp b/src/openrct2/core/String.cpp
+index 76c4574ed6e060dc7032b0a8c346bdbc3a435a2d..fbe23e4af894e3dbf4bc57ba3370e3f9e2ed24e7 100644
+--- a/src/openrct2/core/String.cpp
++++ b/src/openrct2/core/String.cpp
+@@ -14,6 +14,7 @@
+ #include <sstream>
+ #include <stdexcept>
+ #include <vector>
++#include <alloca.h>
+ #ifndef _WIN32
+ # include <unicode/ucnv.h>
+ # include <unicode/unistr.h>
+diff --git a/src/openrct2/network/Socket.cpp b/src/openrct2/network/Socket.cpp
+index 89803e28568efd38dd82845f89af97e47366f5b6..e166ed45d158d0cf516ff83b7992e04780f28edb 100644
+--- a/src/openrct2/network/Socket.cpp
++++ b/src/openrct2/network/Socket.cpp
+@@ -51,6 +51,8 @@
+ #include <netinet/tcp.h>
+ #include <sys/ioctl.h>
+ #include <sys/socket.h>
++ #include <sys/time.h>
++ #include <sys/select.h>
+ #include "../common.h"
+ using SOCKET = int32_t;
+ #define SOCKET_ERROR -1
diff --git a/Ports/openrct2/patches/0003-Read-the-executable-path-from-proc-self-exe.patch b/Ports/openrct2/patches/0003-Read-the-executable-path-from-proc-self-exe.patch
new file mode 100644
index 0000000000..1a31f133c7
--- /dev/null
+++ b/Ports/openrct2/patches/0003-Read-the-executable-path-from-proc-self-exe.patch
@@ -0,0 +1,23 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Julian=20Offenh=C3=A4user?= <offenhaeuser@protonmail.com>
+Date: Tue, 7 Feb 2023 21:25:16 +0100
+Subject: [PATCH] Read the executable path from /proc/self/exe
+
+When looking for the executable path, we behave exactly like Linux.
+---
+ src/openrct2/platform/Platform.Linux.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/openrct2/platform/Platform.Linux.cpp b/src/openrct2/platform/Platform.Linux.cpp
+index fb1f1e58d92a9e8823f1c8ff82bcf1efc448a8fd..eea10444874fced76027421350c7a4402bbbbfe0 100644
+--- a/src/openrct2/platform/Platform.Linux.cpp
++++ b/src/openrct2/platform/Platform.Linux.cpp
+@@ -129,7 +129,7 @@ namespace Platform
+ std::string GetCurrentExecutablePath()
+ {
+ char exePath[PATH_MAX] = { 0 };
+-# ifdef __linux__
++# if defined(__linux__) || defined(__serenity__)
+ auto bytesRead = readlink("/proc/self/exe", exePath, sizeof(exePath));
+ if (bytesRead == -1)
+ {
diff --git a/Ports/openrct2/patches/0004-Remove-use-of-strptime.patch b/Ports/openrct2/patches/0004-Remove-use-of-strptime.patch
new file mode 100644
index 0000000000..ab06d7c95e
--- /dev/null
+++ b/Ports/openrct2/patches/0004-Remove-use-of-strptime.patch
@@ -0,0 +1,32 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Julian=20Offenh=C3=A4user?= <offenhaeuser@protonmail.com>
+Date: Tue, 7 Feb 2023 21:36:54 +0100
+Subject: [PATCH] Remove use of strptime()
+
+This is a hack to patch out strptime() from duktape, which is not being used by this project.
+---
+ src/thirdparty/duktape/duk_config.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/thirdparty/duktape/duk_config.h b/src/thirdparty/duktape/duk_config.h
+index 4ac2e1d54dfc5da74136effbcb0e569c6ddea50a..b676781634c55ecb6c45f6cf01c0e9d1ee2afc75 100644
+--- a/src/thirdparty/duktape/duk_config.h
++++ b/src/thirdparty/duktape/duk_config.h
+@@ -221,7 +221,7 @@
+
+ /* Generic Unix (includes Cygwin) */
+ #if defined(__unix) || defined(__unix__) || defined(unix) || \
+- defined(DUK_F_LINUX) || defined(DUK_F_BSD)
++ defined(DUK_F_LINUX) || defined(DUK_F_BSD) || defined(__serenity__)
+ #define DUK_F_UNIX
+ #endif
+
+@@ -840,7 +840,7 @@
+ /* --- Generic UNIX --- */
+ #define DUK_USE_DATE_NOW_GETTIMEOFDAY
+ #define DUK_USE_DATE_TZO_GMTIME_R
+-#define DUK_USE_DATE_PRS_STRPTIME
++#undef DUK_USE_DATE_PRS_STRPTIME
+ #define DUK_USE_DATE_FMT_STRFTIME
+ #include <time.h>
+ #include <sys/time.h>
diff --git a/Ports/openrct2/patches/0005-Don-t-try-linking-to-stdc-fs.patch b/Ports/openrct2/patches/0005-Don-t-try-linking-to-stdc-fs.patch
new file mode 100644
index 0000000000..e745827918
--- /dev/null
+++ b/Ports/openrct2/patches/0005-Don-t-try-linking-to-stdc-fs.patch
@@ -0,0 +1,23 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Julian=20Offenh=C3=A4user?= <offenhaeuser@protonmail.com>
+Date: Tue, 7 Feb 2023 22:16:32 +0100
+Subject: [PATCH] Don't try linking to stdc++fs
+
+This code tried to link to stdc++fs for std::filesystem features, which are already included in our toolchain.
+---
+ src/openrct2/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/openrct2/CMakeLists.txt b/src/openrct2/CMakeLists.txt
+index 6a1a1f081a0131d0cd93b558802989804ba4df67..377c62dbd70fe359bf58f7dddd5c302c8f1a15a4 100644
+--- a/src/openrct2/CMakeLists.txt
++++ b/src/openrct2/CMakeLists.txt
+@@ -38,7 +38,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
+ SET_CHECK_CXX_FLAGS(${PROJECT_NAME})
+
+ # GCC / Clang likes us to pass the -lstdc++fs flag to link C++17 filesystem implementation.
+-if (NOT MINGW AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
++if (NOT MINGW AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD" AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "SerenityOS")
+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ target_link_libraries(${PROJECT_NAME} stdc++fs)
+ endif()
diff --git a/Ports/openrct2/patches/0006-Add-compile-options-to-CMakeLists.txt.patch b/Ports/openrct2/patches/0006-Add-compile-options-to-CMakeLists.txt.patch
new file mode 100644
index 0000000000..3cc6c47006
--- /dev/null
+++ b/Ports/openrct2/patches/0006-Add-compile-options-to-CMakeLists.txt.patch
@@ -0,0 +1,32 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Julian=20Offenh=C3=A4user?= <offenhaeuser@protonmail.com>
+Date: Wed, 8 Feb 2023 10:45:25 +0100
+Subject: [PATCH] Add compile options to CMakeLists.txt
+
+This irons out some compiler warnings that turned into errors when compiling a release build.
+---
+ CMakeLists.txt | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 76a17f24386dce3e364b292ac23867231123ebe5..687b2361b02ae1c82fc4de8320bdb28487872eec 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -298,6 +298,8 @@ else ()
+ # unused-const-variable[=2] would check for unused values from headers as well
+ ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_UNUSED_CONST_VARIABLE -Wunused-const-variable=1)
+ ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WNO_CLOBBERED -Wno-clobbered)
++ ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WNO_MAYBE_UNINITIALIZED -Wno-maybe-uninitialized)
++ ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WNO_NULL_DEREFERENCE -Wno-null-dereference)
+ # Disabled due to problems compiling OpenSSL on macOS.
+ # ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_DOCUMENTATION -Wdocumentation)
+
+@@ -307,7 +309,7 @@ else ()
+ ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_REDUNDANT_DECLS -Wredundant-decls)
+
+ # Currently used MinGW w/GCC 7.2 doesn't provide sane error messages for this
+- ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_NULL_DEREFERENCE -Wnull-dereference)
++ # ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS CXX_WARN_NULL_DEREFERENCE -Wnull-dereference)
+ endif ()
+ # These have no workarounds available when building with LTO
+ if (NOT IPO_BUILD_ENABLED)
diff --git a/Ports/openrct2/patches/0007-Disable-locale-detection-for-writing-the-default-con.patch b/Ports/openrct2/patches/0007-Disable-locale-detection-for-writing-the-default-con.patch
new file mode 100644
index 0000000000..3a082641f5
--- /dev/null
+++ b/Ports/openrct2/patches/0007-Disable-locale-detection-for-writing-the-default-con.patch
@@ -0,0 +1,30 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Julian=20Offenh=C3=A4user?= <offenhaeuser@protonmail.com>
+Date: Wed, 8 Feb 2023 11:32:30 +0100
+Subject: [PATCH] Disable locale detection for writing the default config.ini
+
+At the time of writing, locale support in Serenity is not great. We always returned the "C" locale, which this code interpreted wrong. Since this is just used for writing a default value to the game config (which can be changed later), we just default to English.
+---
+ src/openrct2/platform/Platform.Linux.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/openrct2/platform/Platform.Linux.cpp b/src/openrct2/platform/Platform.Linux.cpp
+index eea10444874fced76027421350c7a4402bbbbfe0..ecd97d9a708c61ff8ba3f5e3096f41a47bc7a34d 100644
+--- a/src/openrct2/platform/Platform.Linux.cpp
++++ b/src/openrct2/platform/Platform.Linux.cpp
+@@ -178,6 +178,7 @@ namespace Platform
+
+ uint16_t GetLocaleLanguage()
+ {
++#if !defined(__serenity__)
+ const char* langString = setlocale(LC_MESSAGES, "");
+ if (langString != nullptr)
+ {
+@@ -238,6 +239,7 @@ namespace Platform
+ }
+ }
+ }
++#endif
+ return LANGUAGE_ENGLISH_UK;
+ }
+
diff --git a/Ports/openrct2/patches/0008-Disable-g2.dat-target.patch b/Ports/openrct2/patches/0008-Disable-g2.dat-target.patch
new file mode 100644
index 0000000000..2de8baa21c
--- /dev/null
+++ b/Ports/openrct2/patches/0008-Disable-g2.dat-target.patch
@@ -0,0 +1,23 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Julian=20Offenh=C3=A4user?= <offenhaeuser@protonmail.com>
+Date: Wed, 8 Feb 2023 12:27:59 +0100
+Subject: [PATCH] Disable g2.dat target
+
+Normally, the build system uses one of the compiled binaries to pack assets into `g2.dat`. However, since we cross-compile this binary for Serenity, we can't do this on the host system. Instead, we download the latest Linux build of OpenRCT2 and copy its `g2.dat` into the disk image.
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 687b2361b02ae1c82fc4de8320bdb28487872eec..bb2cf3395d40c773dbb432ac81473358a3bb71cb 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -386,7 +386,7 @@ endif ()
+
+
+ # g2
+-if (NOT (MACOS_BUNDLE AND (NOT CMAKE_OSX_ARCHITECTURES MATCHES "${SYSTEM_MACOS_ARCH}")))
++if (NOT (MACOS_BUNDLE AND (NOT CMAKE_OSX_ARCHITECTURES MATCHES "${SYSTEM_MACOS_ARCH}")) AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "SerenityOS")
+ add_custom_command(
+ OUTPUT g2.dat
+ COMMAND ./openrct2-cli sprite build ${CMAKE_BINARY_DIR}/g2.dat ${ROOT_DIR}/resources/g2/sprites.json
diff --git a/Ports/openrct2/patches/ReadMe.md b/Ports/openrct2/patches/ReadMe.md
new file mode 100644
index 0000000000..ca8f985290
--- /dev/null
+++ b/Ports/openrct2/patches/ReadMe.md
@@ -0,0 +1,50 @@
+# Patches for openrct2 on SerenityOS
+
+## `0001-Add-SerenityOS-platform-detection.patch`
+
+Add SerenityOS platform detection
+
+We teach OpenRCT2 about the name of our platform.
+
+## `0002-Add-missing-includes.patch`
+
+Add missing includes
+
+These are missing when compiling the release build.
+
+## `0003-Read-the-executable-path-from-proc-self-exe.patch`
+
+Read the executable path from /proc/self/exe
+
+When looking for the executable path, we behave exactly like Linux.
+
+## `0004-Remove-use-of-strptime.patch`
+
+Remove use of strptime()
+
+This is a hack to patch out strptime() from duktape, which is not being used by this project.
+
+## `0005-Don-t-try-linking-to-stdc-fs.patch`
+
+Don't try linking to stdc++fs
+
+This code tried to link to stdc++fs for std::filesystem features, which are already included in our toolchain.
+
+## `0006-Add-compile-options-to-CMakeLists.txt.patch`
+
+Add compile options to CMakeLists.txt
+
+This irons out some compiler warnings that turned into errors when compiling a release build.
+
+## `0007-Disable-locale-detection-for-writing-the-default-con.patch`
+
+Disable locale detection for writing the default config.ini
+
+At the time of writing, locale support in Serenity is not great. We always returned the "C" locale, which this code interpreted wrong. Since this is just used for writing a default value to the game config (which can be changed later), we just default to English.
+
+## `0008-Disable-g2.dat-target.patch`
+
+Disable g2.dat target
+
+Normally, the build system uses one of the compiled binaries to pack assets into `g2.dat`. However, since we cross-compile this binary for Serenity, we can't do this on the host system. Instead, we download the latest Linux build of OpenRCT2 and copy its `g2.dat` into the disk image.
+