Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial wine port #307

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 144 additions & 0 deletions bootstrap.d/app-emulation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,18 @@ sources:
tag: 'v8.1.4'
version: '8.1.4'

- name: wine
subdir: 'ports'
git: 'https://gitlab.winehq.org/wine/wine.git'
tag: 'wine-9.7'
version: '9.7'
tools_required:
- host-automake-v1.15
regenerate:
- args: ['cp',
'@BUILD_ROOT@/tools/host-automake-v1.15/share/automake-1.15/config.sub',
'@THIS_SOURCE_DIR@/tools/']

tools:
- name: host-qemu
labels: [not-on-xbbs]
Expand All @@ -29,6 +41,63 @@ tools:
install:
- args: ['ninja', 'install']

- name: host-wine-tools
from_source: wine
tools_required:
- host-freetype
- host-pkg-config
- virtual: pkgconfig-for-host
program_name: host-pkg-config
configure:
- args:
- '@THIS_SOURCE_DIR@/configure'
- '--prefix=@PREFIX@'
- '--enable-win64'
- '--disable-tests'
- '--disable-win16'
- '--without-alsa'
- '--without-capi'
- '--without-cups'
- '--without-dbus'
- '--without-gettext'
- '--without-gphoto'
- '--without-gssapi'
- '--without-gstreamer'
- '--without-krb5'
- '--without-mingw'
- '--without-netapi'
- '--without-opencl'
- '--without-osmesa'
- '--without-oss'
- '--without-pcap'
- '--without-pulse'
- '--without-sane'
- '--without-sdl'
- '--without-unwind'
- '--without-usb'
- '--without-v4l2'
- '--without-vulkan'
- '--without-xcomposite'
- '--without-xinerama'
- '--without-xinput2'
- '--without-xshape'
- '--without-xcursor'
- '--without-xinput'
- '--without-xfixes'
- '--without-xrandr'
- '--without-xrender'
- '--without-xxf86vm'
- '--without-xshm'
- '--without-gnutls'
- '--without-opengl'
- '--without-udev'
environ:
PKG_CONFIG_LIBDIR: '@BUILD_ROOT@/tools/host-freetype/lib/pkgconfig'
compile:
- args: ['make', '-j@PARALLELISM@']
install:
- args: ['make', 'install', '-j@PARALLELISM@']

packages:
- name: qemu
architecture: '@OPTION:arch@'
Expand Down Expand Up @@ -77,3 +146,78 @@ packages:
DESTDIR: '@THIS_COLLECT_DIR@'
quiet: true

- name: wine
architecture: '@OPTION:arch@'
metadata:
summary: Free implementation of Windows(tm) on Unix, without external patchsets
description: Free implementation of Windows(tm) on Unix, without external patchsets
spdx: 'LGPL-2.1-or-later BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff'
website: 'https://www.winehq.org'
maintainer: 'Qwinci <[email protected]>'
categories: ['app-emulation']
from_source: wine
tools_required:
- host-pkg-config
- system-gcc
- virtual: pkgconfig-for-target
triple: '@OPTION:arch-triple@'
- host-wine-tools
pkgs_required:
- mlibc
- libxcursor
- libxfixes
- libxi
- libxrandr
- libxrender
- libxxf86vm
- libxshmfence
- libx11
- libxext
- mesa
- fontconfig
- sdl2
- gnutls
- freetype
- glib
- gst-plugins-base
- gstreamer
- eudev
- xorg-proto
configure:
- args:
- '@THIS_SOURCE_DIR@/configure'
- '--host=@OPTION:arch-triple@'
- '--prefix=/usr'
- '--disable-tests'
- '--enable-win64' # We want 64 bit after all
- '--disable-win16' # Don't care about 16 bit
- '--without-alsa'
- '--without-capi'
- '--without-cups'
- '--without-dbus'
- '--without-gettext'
- '--without-gphoto'
- '--without-gssapi'
- '--without-krb5'
- '--without-mingw' # Might want this later, but for now we don't have it
- '--without-netapi'
- '--without-opencl'
- '--without-osmesa'
- '--without-oss'
- '--without-pcap'
- '--without-pulse'
- '--without-sane'
- '--without-unwind'
- '--without-usb'
- '--without-v4l2'
- '--without-vulkan'
- '--without-xcomposite'
- '--without-xinerama'
- '--with-x'
- '--with-wine-tools=@BUILD_ROOT@/tool-builds/host-wine-tools/'
build:
- args: ['make', '-j@PARALLELISM@']
- args: ['make', 'install', '-j@PARALLELISM@']
environ:
DESTDIR: '@THIS_COLLECT_DIR@'
quiet: true
56 changes: 38 additions & 18 deletions bootstrap.d/media-libs.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,40 @@
sources:
- name: freetype
subdir: 'ports'
git: 'https://gitlab.freedesktop.org/freetype/freetype.git'
tag: 'VER-2-13-1'
version: '2.13.1'
tools_required:
- host-autoconf-v2.69
- host-automake-v1.15
- host-libtool
- host-pkg-config
regenerate:
- args: ['./autogen.sh']
isolate_network: false
environ:
NOCONFIGURE: '1'
- args: ['cp',
'@BUILD_ROOT@/tools/host-automake-v1.15/share/automake-1.15/config.sub',
'@THIS_SOURCE_DIR@/builds/unix/']

tools:
- name: host-freetype
from_source: freetype
configure:
- args:
- '@THIS_SOURCE_DIR@/configure'
- '--prefix=@PREFIX@'
- '--disable-static'
- '--with-harfbuzz=no'
- '--with-zlib=no'
- '--with-png=no'
- '--with-bzip2=no'
compile:
- args: ['make', '-j@PARALLELISM@']
install:
- args: ['make', 'install']

packages:
- name: alsa-lib
architecture: '@OPTION:arch@'
Expand Down Expand Up @@ -160,24 +197,7 @@ packages:
- name: freetype
labels: [aarch64]
architecture: '@OPTION:arch@'
source:
subdir: 'ports'
git: 'https://gitlab.freedesktop.org/freetype/freetype.git'
tag: 'VER-2-13-1'
version: '2.13.1'
tools_required:
- host-autoconf-v2.69
- host-automake-v1.15
- host-libtool
- host-pkg-config
regenerate:
- args: ['./autogen.sh']
isolate_network: false
environ:
NOCONFIGURE: '1'
- args: ['cp',
'@BUILD_ROOT@/tools/host-automake-v1.15/share/automake-1.15/config.sub',
'@THIS_SOURCE_DIR@/builds/unix/']
from_source: freetype
tools_required:
- system-gcc
pkgs_required:
Expand Down
99 changes: 99 additions & 0 deletions patches/wine/0001-Add-managarm-support.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
From f07b3895767beda7b19751042f9595a3891c6c3b Mon Sep 17 00:00:00 2001
From: Qwinci <[email protected]>
Date: Fri, 16 Feb 2024 00:25:36 +0200
Subject: [PATCH] Add managarm support

---
dlls/ntdll/unix/signal_x86_64.c | 39 +++++++++++++++++++++++++++++++++
dlls/ntdll/unix/system.c | 4 ++--
2 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
index ab54490..1e10a9b 100644
--- a/dlls/ntdll/unix/signal_x86_64.c
+++ b/dlls/ntdll/unix/signal_x86_64.c
@@ -75,6 +75,11 @@
#include "unix_private.h"
#include "wine/debug.h"

+#ifdef __managarm__
+#include <hel.h>
+#include <hel-syscalls.h>
+#endif
+
WINE_DEFAULT_DEBUG_CHANNEL(unwind);
WINE_DECLARE_DEBUG_CHANNEL(seh);

@@ -292,6 +297,38 @@ static inline XMM_SAVE_AREA32 *FPU_sig( const ucontext_t *context )

#define XState_sig(context) NULL

+#elif defined(__managarm__)
+
+#ifndef FP_XSTATE_MAGIC1
+#define FP_XSTATE_MAGIC1 0x46505853
+#endif
+
+#define RAX_sig(context) ((context)->uc_mcontext.gregs[REG_RAX])
+#define RBX_sig(context) ((context)->uc_mcontext.gregs[REG_RBX])
+#define RCX_sig(context) ((context)->uc_mcontext.gregs[REG_RCX])
+#define RDX_sig(context) ((context)->uc_mcontext.gregs[REG_RDX])
+#define RSI_sig(context) ((context)->uc_mcontext.gregs[REG_RSI])
+#define RDI_sig(context) ((context)->uc_mcontext.gregs[REG_RDI])
+#define RBP_sig(context) ((context)->uc_mcontext.gregs[REG_RBP])
+#define R8_sig(context) ((context)->uc_mcontext.gregs[REG_R8])
+#define R9_sig(context) ((context)->uc_mcontext.gregs[REG_R9])
+#define R10_sig(context) ((context)->uc_mcontext.gregs[REG_R10])
+#define R11_sig(context) ((context)->uc_mcontext.gregs[REG_R11])
+#define R12_sig(context) ((context)->uc_mcontext.gregs[REG_R12])
+#define R13_sig(context) ((context)->uc_mcontext.gregs[REG_R13])
+#define R14_sig(context) ((context)->uc_mcontext.gregs[REG_R14])
+#define R15_sig(context) ((context)->uc_mcontext.gregs[REG_R15])
+#define CS_sig(context) (*((WORD *)&(context)->uc_mcontext.gregs[REG_CSGSFS] + 0))
+#define GS_sig(context) (*((WORD *)&(context)->uc_mcontext.gregs[REG_CSGSFS] + 1))
+#define FS_sig(context) (*((WORD *)&(context)->uc_mcontext.gregs[REG_CSGSFS] + 2))
+#define RSP_sig(context) ((context)->uc_mcontext.gregs[REG_RSP])
+#define RIP_sig(context) ((context)->uc_mcontext.gregs[REG_RIP])
+#define EFL_sig(context) ((context)->uc_mcontext.gregs[REG_EFL])
+#define TRAP_sig(context) ((context)->uc_mcontext.gregs[REG_TRAPNO])
+#define ERROR_sig(context) ((context)->uc_mcontext.gregs[REG_ERR])
+#define FPU_sig(context) ((XMM_SAVE_AREA32 *)((context)->uc_mcontext.fpregs))
+#define XState_sig(fpu) (((unsigned int *)fpu->Reserved4)[12] == FP_XSTATE_MAGIC1 ? (XSTATE *)(fpu + 1) : NULL)
+
#else
#error You must define the signal context functions for your platform
#endif
@@ -2496,6 +2533,8 @@ void call_init_thunk( LPTHREAD_START_ROUTINE entry, void *arg, BOOL suspend, TEB
thread's gsbase. Have each thread record its gsbase pointer into its
TEB so alloc_tls_slot() can find it. */
teb->Instrumentation[0] = thread_data->pthread_teb;
+#elif defined(__managarm__)
+ helWriteGsBase(teb);
#else
# error Please define setting %gs for your architecture
#endif
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c
index 879a589..24228ac 100644
--- a/dlls/ntdll/unix/system.c
+++ b/dlls/ntdll/unix/system.c
@@ -1369,7 +1369,7 @@ static NTSTATUS create_cpuset_info(SYSTEM_CPU_SET_INFORMATION *info)
return STATUS_SUCCESS;
}

-#if defined(linux) || defined(__APPLE__)
+#if defined(linux) || defined(__APPLE__) || defined(__managarm__)

static void copy_smbios_string( char **buffer, const char *s, size_t len )
{
@@ -1561,7 +1561,7 @@ static NTSTATUS create_smbios_tables( SYSTEM_FIRMWARE_TABLE_INFORMATION *sfti, U

#endif

-#ifdef linux
+#if defined(linux) || defined(__managarm__)

static size_t get_smbios_string( const char *path, char *str, size_t size )
{
--
2.43.1

Loading