mirror of
https://github.com/yann64/haikuports.git
synced 2026-04-23 12:10:06 +02:00
Add stub Dolphin recipe.
This commit is contained in:
59
games-emulation/dolphin/dolphin-5.0.13178.recipe
Normal file
59
games-emulation/dolphin/dolphin-5.0.13178.recipe
Normal file
@@ -0,0 +1,59 @@
|
||||
SUMMARY="A GameCube and Wii emulator"
|
||||
DESCRIPTION="Dolphin is an emulator for two recent Nintendo video game consoles: the \
|
||||
GameCube and the Wii. It allows PC gamers to enjoy games for these two consoles in \
|
||||
full HD (1080p) with several enhancements: compatibility with all PC controllers, \
|
||||
turbo speed, networked multiplayer, and even more!"
|
||||
HOMEPAGE="https://dolphin-emu.org/"
|
||||
COPYRIGHT="2020 Dolphin Emulator Project"
|
||||
LICENSE="GNU GPL v2"
|
||||
REVISION="1"
|
||||
gitRevision="a34823df61df65168aa40ef5e82e44defd4a0138"
|
||||
SOURCE_URI="https://github.com/dolphin-emu/dolphin/archive/$gitRevision.tar.gz"
|
||||
CHECKSUM_SHA256="f2fcdcd26e8156b15adc0bc031fdaae3ff29bee59f46376ad57d7165b3c1f0c9"
|
||||
SOURCE_DIR="dolphin-$gitRevision"
|
||||
PATCHES="dolphin-$portVersion.patch"
|
||||
|
||||
ARCHITECTURES="!x86_gcc2 !x86 ?x86_64"
|
||||
|
||||
PROVIDES="
|
||||
dolphin = $portVersion
|
||||
app:Dolphin = $portVersion
|
||||
"
|
||||
REQUIRES="
|
||||
haiku
|
||||
lib:libQt5Core
|
||||
lib:libQt5Widgets
|
||||
"
|
||||
|
||||
BUILD_REQUIRES="
|
||||
haiku${secondaryArchSuffix}_devel
|
||||
devel:libQt5Core
|
||||
devel:libQt5Widgets
|
||||
"
|
||||
BUILD_PREREQUIRES="
|
||||
cmd:cmake
|
||||
cmd:gcc
|
||||
cmd:ld
|
||||
cmd:lrelease >= 5
|
||||
cmd:ninja
|
||||
cmd:pkg_config
|
||||
"
|
||||
|
||||
BUILD()
|
||||
{
|
||||
cmake . \
|
||||
-GNinja \
|
||||
-DCMAKE_INSTALL_PREFIX=$appsDir/Dolphin/
|
||||
-DDOLPHIN_WC_DESCRIBE="$portVersion"
|
||||
-DENABLE_VULKAN=OFF \
|
||||
-DENABLE_NOGUI=OFF
|
||||
|
||||
ninja $jobArgs
|
||||
}
|
||||
|
||||
INSTALL()
|
||||
{
|
||||
ninja install
|
||||
|
||||
addAppDeskbarSymlink $appsDir/Dolphin/Dolphin Dolphin
|
||||
}
|
||||
296
games-emulation/dolphin/patches/dolphin-5.0.13178.patch
Normal file
296
games-emulation/dolphin/patches/dolphin-5.0.13178.patch
Normal file
@@ -0,0 +1,296 @@
|
||||
From 8a4481489dee5a41b35a150938306d05414e6989 Mon Sep 17 00:00:00 2001
|
||||
From: waddlesplash <waddlesplash@gmail.com>
|
||||
Date: Sat, 12 Dec 2020 15:25:51 -0500
|
||||
Subject: [PATCH] Rehabilitate Haiku support.
|
||||
|
||||
---
|
||||
CMakeLists.txt | 2 +-
|
||||
Source/Core/Common/CMakeLists.txt | 7 ++
|
||||
Source/Core/Common/GL/GLContext.cpp | 7 ++
|
||||
Source/Core/Common/GL/GLInterface/BGL.cpp | 93 ++++++++++++++++++++
|
||||
Source/Core/Common/GL/GLInterface/BGL.h | 36 ++++++++
|
||||
Source/Core/Common/WindowSystemInfo.h | 1 +
|
||||
Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h | 2 +-
|
||||
Source/Core/DolphinQt/MainWindow.cpp | 4 +-
|
||||
Source/Core/VideoCommon/DriverDetails.cpp | 2 +
|
||||
Source/Core/VideoCommon/DriverDetails.h | 1 +
|
||||
10 files changed, 152 insertions(+), 3 deletions(-)
|
||||
create mode 100644 Source/Core/Common/GL/GLInterface/BGL.cpp
|
||||
create mode 100644 Source/Core/Common/GL/GLInterface/BGL.h
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index b01b90fc548..06851076ce7 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -20,7 +20,7 @@ set(DISTRIBUTOR "None" CACHE STRING "Name of the distributor.")
|
||||
if(UNIX AND NOT APPLE AND NOT ANDROID)
|
||||
option(ENABLE_X11 "Enables X11 Support" ON)
|
||||
endif()
|
||||
-if(NOT WIN32 AND NOT APPLE)
|
||||
+if(NOT WIN32 AND NOT APPLE AND NOT HAIKU)
|
||||
option(ENABLE_EGL "Enables EGL OpenGL Interface" ON)
|
||||
endif()
|
||||
|
||||
diff --git a/Source/Core/Common/CMakeLists.txt b/Source/Core/Common/CMakeLists.txt
|
||||
index 543c4cf9bb9..7656fd1f589 100644
|
||||
--- a/Source/Core/Common/CMakeLists.txt
|
||||
+++ b/Source/Core/Common/CMakeLists.txt
|
||||
@@ -168,6 +168,8 @@ elseif (ANDROID)
|
||||
PRIVATE
|
||||
androidcommon
|
||||
)
|
||||
+elseif(HAIKU)
|
||||
+ target_link_libraries(common PRIVATE be GL)
|
||||
endif()
|
||||
|
||||
if(ANDROID)
|
||||
@@ -256,6 +258,11 @@ elseif(APPLE)
|
||||
GL/GLInterface/AGL.h
|
||||
GL/GLInterface/AGL.mm
|
||||
)
|
||||
+elseif(HAIKU)
|
||||
+ target_sources(common PRIVATE
|
||||
+ GL/GLInterface/BGL.h
|
||||
+ GL/GLInterface/BGL.cpp
|
||||
+ )
|
||||
elseif(ENABLE_X11 AND X11_FOUND)
|
||||
target_sources(common PRIVATE
|
||||
GL/GLX11Window.cpp
|
||||
diff --git a/Source/Core/Common/GL/GLContext.cpp b/Source/Core/Common/GL/GLContext.cpp
|
||||
index 2f72204af85..945008538f1 100644
|
||||
--- a/Source/Core/Common/GL/GLContext.cpp
|
||||
+++ b/Source/Core/Common/GL/GLContext.cpp
|
||||
@@ -12,6 +12,9 @@
|
||||
#if defined(_WIN32)
|
||||
#include "Common/GL/GLInterface/WGL.h"
|
||||
#endif
|
||||
+#if defined(__HAIKU__)
|
||||
+#include "Common/GL/GLInterface/BGL.h"
|
||||
+#endif
|
||||
#if HAVE_X11
|
||||
#include "Common/GL/GLInterface/GLX.h"
|
||||
#endif
|
||||
@@ -92,6 +95,10 @@ std::unique_ptr<GLContext> GLContext::Create(const WindowSystemInfo& wsi, bool s
|
||||
if (wsi.type == WindowSystemType::Android)
|
||||
context = std::make_unique<GLContextEGLAndroid>();
|
||||
#endif
|
||||
+#if defined(__HAIKU__)
|
||||
+ if (wsi.type == WindowSystemType::Haiku)
|
||||
+ context = std::make_unique<GLContextBGL>();
|
||||
+#endif
|
||||
#if HAVE_X11
|
||||
if (wsi.type == WindowSystemType::X11)
|
||||
{
|
||||
diff --git a/Source/Core/Common/GL/GLInterface/BGL.cpp b/Source/Core/Common/GL/GLInterface/BGL.cpp
|
||||
new file mode 100644
|
||||
index 00000000000..118639c2bbe
|
||||
--- /dev/null
|
||||
+++ b/Source/Core/Common/GL/GLInterface/BGL.cpp
|
||||
@@ -0,0 +1,93 @@
|
||||
+// Copyright 2017 Dolphin Emulator Project
|
||||
+// Licensed under GPLv2+
|
||||
+// Refer to the license.txt file included.
|
||||
+
|
||||
+#include "Common/GL/GLInterface/BGL.h"
|
||||
+
|
||||
+#include <GLView.h>
|
||||
+#include <Size.h>
|
||||
+#include <Window.h>
|
||||
+
|
||||
+BGLView* GLContextBGL::m_current = nullptr;
|
||||
+
|
||||
+GLContextBGL::~GLContextBGL()
|
||||
+{
|
||||
+ if (!m_window)
|
||||
+ delete m_gl;
|
||||
+}
|
||||
+
|
||||
+bool GLContextBGL::Initialize(const WindowSystemInfo& wsi, bool stereo, bool core)
|
||||
+{
|
||||
+ m_window = static_cast<BWindow*>(wsi.render_window);
|
||||
+
|
||||
+ m_gl = new BGLView(m_window ? m_window->Bounds() : BRect(), "GLContextBGL", B_FOLLOW_ALL_SIDES, 0,
|
||||
+ BGL_RGB | BGL_DOUBLE | BGL_ALPHA);
|
||||
+ if (m_window)
|
||||
+ m_window->AddChild(m_gl);
|
||||
+
|
||||
+ m_opengl_mode = Mode::OpenGL;
|
||||
+
|
||||
+ m_gl->LockLooper();
|
||||
+ BRect size = m_gl->Frame();
|
||||
+ m_gl->UnlockLooper();
|
||||
+
|
||||
+ m_backbuffer_width = size.IntegerWidth();
|
||||
+ m_backbuffer_height = size.IntegerHeight();
|
||||
+
|
||||
+ MakeCurrent();
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+bool GLContextBGL::IsHeadless() const
|
||||
+{
|
||||
+ return !m_window;
|
||||
+}
|
||||
+
|
||||
+bool GLContextBGL::MakeCurrent()
|
||||
+{
|
||||
+ if (m_current)
|
||||
+ m_current->UnlockGL();
|
||||
+ m_gl->LockGL();
|
||||
+ m_current = m_gl;
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+bool GLContextBGL::ClearCurrent()
|
||||
+{
|
||||
+ if (!m_current)
|
||||
+ return true;
|
||||
+
|
||||
+ //assert(m_gl == m_current);
|
||||
+ m_current->UnlockGL();
|
||||
+ m_current = nullptr;
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+void GLContextBGL::Swap()
|
||||
+{
|
||||
+ m_gl->SwapBuffers();
|
||||
+}
|
||||
+
|
||||
+void GLContextBGL::Update()
|
||||
+{
|
||||
+ m_gl->LockLooper();
|
||||
+ BRect size = m_gl->Frame();
|
||||
+ if (m_backbuffer_width == size.IntegerWidth() && m_backbuffer_height == size.IntegerHeight()) {
|
||||
+ m_gl->UnlockLooper();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ ClearCurrent();
|
||||
+ m_gl->FrameResized(size.Width(), size.Height());
|
||||
+ MakeCurrent();
|
||||
+ m_gl->UnlockLooper();
|
||||
+
|
||||
+ m_backbuffer_width = size.IntegerWidth();
|
||||
+ m_backbuffer_height = size.IntegerHeight();
|
||||
+}
|
||||
+
|
||||
+void* GLContextBGL::GetFuncAddress(const std::string& name)
|
||||
+{
|
||||
+ return m_gl->GetGLProcAddress(name.c_str());
|
||||
+}
|
||||
diff --git a/Source/Core/Common/GL/GLInterface/BGL.h b/Source/Core/Common/GL/GLInterface/BGL.h
|
||||
new file mode 100644
|
||||
index 00000000000..54089a324e6
|
||||
--- /dev/null
|
||||
+++ b/Source/Core/Common/GL/GLInterface/BGL.h
|
||||
@@ -0,0 +1,36 @@
|
||||
+// Copyright 2017 Dolphin Emulator Project
|
||||
+// Licensed under GPLv2+
|
||||
+// Refer to the license.txt file included.
|
||||
+
|
||||
+#pragma once
|
||||
+
|
||||
+#include "Common/GL/GLContext.h"
|
||||
+
|
||||
+class BWindow;
|
||||
+class BGLView;
|
||||
+
|
||||
+class GLContextBGL final : public GLContext
|
||||
+{
|
||||
+public:
|
||||
+ ~GLContextBGL() override;
|
||||
+
|
||||
+ bool IsHeadless() const override;
|
||||
+
|
||||
+ bool MakeCurrent() override;
|
||||
+ bool ClearCurrent() override;
|
||||
+
|
||||
+ void Update() override;
|
||||
+
|
||||
+ void Swap() override;
|
||||
+
|
||||
+ void* GetFuncAddress(const std::string& name) override;
|
||||
+
|
||||
+protected:
|
||||
+ bool Initialize(const WindowSystemInfo& wsi, bool stereo, bool core) override;
|
||||
+
|
||||
+private:
|
||||
+ BWindow* m_window;
|
||||
+ BGLView* m_gl;
|
||||
+
|
||||
+ static BGLView* m_current;
|
||||
+};
|
||||
diff --git a/Source/Core/Common/WindowSystemInfo.h b/Source/Core/Common/WindowSystemInfo.h
|
||||
index 244a985cdfe..ff2bebabedd 100644
|
||||
--- a/Source/Core/Common/WindowSystemInfo.h
|
||||
+++ b/Source/Core/Common/WindowSystemInfo.h
|
||||
@@ -13,6 +13,7 @@ enum class WindowSystemType
|
||||
X11,
|
||||
Wayland,
|
||||
FBDev,
|
||||
+ Haiku,
|
||||
};
|
||||
|
||||
struct WindowSystemInfo
|
||||
diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h b/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h
|
||||
index ed79b9a9b17..0075e40aaa9 100644
|
||||
--- a/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h
|
||||
+++ b/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h
|
||||
@@ -383,7 +383,7 @@ class CEXIETHERNET : public IEXIDevice
|
||||
bool m_bba_link_up = false;
|
||||
bool m_bba_failure_notified = false;
|
||||
#if defined(WIN32) || defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \
|
||||
- defined(__OpenBSD__)
|
||||
+ defined(__OpenBSD__) || defined(__HAIKU__)
|
||||
sf::UdpSocket m_sf_socket;
|
||||
sf::IpAddress m_sf_recipient_ip;
|
||||
char m_in_frame[9004];
|
||||
diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp
|
||||
index 54deeb47c6c..f4a062a8f55 100644
|
||||
--- a/Source/Core/DolphinQt/MainWindow.cpp
|
||||
+++ b/Source/Core/DolphinQt/MainWindow.cpp
|
||||
@@ -152,6 +152,8 @@ static WindowSystemType GetWindowSystemType()
|
||||
return WindowSystemType::X11;
|
||||
else if (platform_name == QStringLiteral("wayland"))
|
||||
return WindowSystemType::Wayland;
|
||||
+ else if (platform_name == QStringLiteral("haiku"))
|
||||
+ return WindowSystemType::Haiku;
|
||||
|
||||
ModalMessageBox::critical(
|
||||
nullptr, QStringLiteral("Error"),
|
||||
@@ -165,7 +167,7 @@ static WindowSystemInfo GetWindowSystemInfo(QWindow* window)
|
||||
wsi.type = GetWindowSystemType();
|
||||
|
||||
// Our Win32 Qt external doesn't have the private API.
|
||||
-#if defined(WIN32) || defined(__APPLE__)
|
||||
+#if defined(WIN32) || defined(__APPLE__) || defined(__HAIKU__)
|
||||
wsi.render_window = window ? reinterpret_cast<void*>(window->winId()) : nullptr;
|
||||
wsi.render_surface = wsi.render_window;
|
||||
#else
|
||||
diff --git a/Source/Core/VideoCommon/DriverDetails.cpp b/Source/Core/VideoCommon/DriverDetails.cpp
|
||||
index 88a482ecf83..990894f8714 100644
|
||||
--- a/Source/Core/VideoCommon/DriverDetails.cpp
|
||||
+++ b/Source/Core/VideoCommon/DriverDetails.cpp
|
||||
@@ -35,6 +35,8 @@ constexpr u32 m_os = OS_ALL | OS_LINUX;
|
||||
constexpr u32 m_os = OS_ALL | OS_FREEBSD;
|
||||
#elif __OpenBSD__
|
||||
constexpr u32 m_os = OS_ALL | OS_OPENBSD;
|
||||
+#elif __HAIKU__
|
||||
+constexpr u32 m_os = OS_ALL | OS_HAIKU;
|
||||
#endif
|
||||
|
||||
static API m_api = API_OPENGL;
|
||||
diff --git a/Source/Core/VideoCommon/DriverDetails.h b/Source/Core/VideoCommon/DriverDetails.h
|
||||
index 3e58a5fb586..9707b1b0da0 100644
|
||||
--- a/Source/Core/VideoCommon/DriverDetails.h
|
||||
+++ b/Source/Core/VideoCommon/DriverDetails.h
|
||||
@@ -27,6 +27,7 @@ enum OS
|
||||
OS_ANDROID = (1 << 4),
|
||||
OS_FREEBSD = (1 << 5),
|
||||
OS_OPENBSD = (1 << 6),
|
||||
+ OS_HAIKU = (1 << 7),
|
||||
};
|
||||
// Enum of known vendors
|
||||
// Tegra and Nvidia are separated out due to such substantial differences
|
||||
Reference in New Issue
Block a user