diff --git a/bootstrap.d/app-emulation.yml b/bootstrap.d/app-emulation.yml index f2c631930..783d0ac50 100644 --- a/bootstrap.d/app-emulation.yml +++ b/bootstrap.d/app-emulation.yml @@ -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] @@ -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@' @@ -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 ' + 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 diff --git a/patches/wine/0001-Add-managarm-support.patch b/patches/wine/0001-Add-managarm-support.patch new file mode 100644 index 000000000..44700a13a --- /dev/null +++ b/patches/wine/0001-Add-managarm-support.patch @@ -0,0 +1,99 @@ +From f07b3895767beda7b19751042f9595a3891c6c3b Mon Sep 17 00:00:00 2001 +From: Qwinci <32550582+Qwinci@users.noreply.github.com> +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 ++#include ++#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 +