Opened 8 years ago
Closed 7 years ago
#53651 closed enhancement (fixed)
wine, wine-crossover, wine-devel: add 64-bit support
Reported by: | axet (Alexey Kuznetsov) | Owned by: | ryandesign (Ryan Carsten Schmidt) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | |
Keywords: | Cc: | jyrkiwahlstedt, mojca (Mojca Miklavec), 1-61803 | |
Port: | wine wine-crossover wine-devel |
Description
Hello!
According to wine FAQ here is a two type of prefixes 32 and 64 bits. But macports wine seems to be compiled without 64 bit support
axet-laptop:~ axet$ WINEARCH=win64 WINEPREFIX=~/test wine winecfg wine: created the configuration directory '/Users/axet/test' wine: WINEARCH set to win64 but '/Users/axet/test' is a 32-bit installation.
mac osx 10.12.3, wine-devel
Change History (14)
comment:1 Changed 8 years ago by kencu (Ken)
comment:2 follow-up: 3 Changed 8 years ago by ryandesign (Ryan Carsten Schmidt)
Cc: | jyrkiwahlstedt added; ryandesign@… jwa@… removed |
---|---|
Owner: | set to ryandesign |
Port: | wine wine-crossover added |
Status: | new → assigned |
Summary: | WINEARCH=win64 not working → wine, wine-crossover, wine-devel: add 64-bit support |
Type: | defect → enhancement |
Yes, wine ports in MacPorts are compiled for 32-bit only, based on this statement on why 64-bit Windows apps cannot run in Wine on macOS:
https://www.winehq.org/wwn/364#Wine64%20on%20Mac%20OS%20X
Nevertheless, wine apparently compiles 64-bit on macOS now and may work for some Windows programs; the developers offer separate 32-bit and 64-bit macOS binaries for wine. I have not yet attempted to build the wine ports 64-bit and don't know what would happen if we did that. Can a 32-bit Windows program run in 64-bit wine? If not, most users would probably want to build wine universal.
comment:3 Changed 8 years ago by casr (Chris Rawnsley)
Replying to ryandesign:
Nevertheless, wine apparently compiles 64-bit on macOS now
Yes, but only as recently as the 2.0 release.
Can a 32-bit Windows program run in 64-bit wine?
Not directly but the 64-bit version can utilise the 32-bit binaries via WoW (Windows on Windows).
I have been looking into updating the Wine port to have 64-bit support and it looks to be an unusual one. A quick summary of the build process is roughly:
tar xjf wine-2.0.tar.bz2 # Directory wine-2.0 is created mkdir wine32-build wine64-build # Make sure 64-bit headers and libs are available... cd wine64-build; ../wine-2.0/configure --enable-win64; make # Make sure 32-bit headers and libs are available... cd wine32-build; ../wine-2.0/configure --with-wine64=../wine-64-build; make
I'm not sure of the best way to handle this within MacPorts but I imagine it would be something like creating a wine64
port and then referencing it in the original wine
port. The switch --with-wine64=../wine-64-build
is where is where I get stuck though. How would you reference another port’s build directory?
comment:4 Changed 8 years ago by casr (Chris Rawnsley)
I discovered the muniversal port group today and created the patch below. It's going in the right direction but be aware of:
- that it currently does not download nor install wine-mono for x86_64 version
/opt/local/lib64
is created
I tried --libdir=${prefix}/lib
but lipo
didn't know what to do with the fakedll directory so I'm leaving it for now.
--- x11/wine/Portfile.orig +++ x11/wine/Portfile @@ -1,6 +1,7 @@ # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4 PortSystem 1.0 +PortGroup muniversal 1.0 PortGroup compiler_blacklist_versions 1.0 # Please keep the wine, wine-devel and wine-crossover ports as similar as possible. @@ -13,12 +14,14 @@ name wine conflicts wine-devel wine-crossover set my_name wine version 2.0 +revision 1 set branch [lindex [split ${version} .] 0].0 license LGPL-2.1+ categories x11 maintainers ryandesign jwa openmaintainer homepage https://www.winehq.org platforms darwin +supported_archs i386 x86_64 use_bzip2 yes distname ${my_name}-${version} dist_subdir ${my_name} @@ -95,6 +98,16 @@ patchfiles BOOL.patch \ mach_machine.patch \ tiger-shell.patch +pre-configure { + if {[variant_isset universal]} { + foreach arch ${universal_archs_to_use} { + file mkdir ${worksrcpath}-${arch} + } + + configure.cmd ${worksrcpath}/configure + } +} + # Wine requires the program specified in INSTALL to create intermediate # directories; /usr/bin/install doesn't. # http://bugs.winehq.org/show_bug.cgi?id=35310 @@ -141,9 +154,14 @@ configure.args --without-alsa \ --x-include=${prefix}/include \ --x-lib=${prefix}/lib -# 64-bit Wine exists for Linux, but does not work on OS X. -# http://www.winehq.org/pipermail/wine-devel/2014-February/103074.html -supported_archs i386 +configure.universal_args + +set merger_configure_args(x86_64) --enable-win64 +set merger_configure_args(i386) --with-wine64=${workpath}/${worksrcdir}-x86_64 + +if {${build_arch} eq "x86_64"} { + default_variants +universal +} # llvm-gcc-4.2 doesn't respect force_align_arg_pointer; wine builds but fails to run # http://bugs.winehq.org/show_bug.cgi?id=28030
comment:5 Changed 8 years ago by casr (Chris Rawnsley)
Okay, so I had a bit more of a tinker around and patched it so that the DLL directory is treated separately; patch below.
--- x11/wine/Portfile.orig 2017-03-10 23:49:01.000000000 +0000 +++ x11/wine/Portfile 2017-03-10 23:48:32.000000000 +0000 @@ -1,6 +1,7 @@ # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4 PortSystem 1.0 +PortGroup muniversal 1.0 PortGroup compiler_blacklist_versions 1.0 # Please keep the wine, wine-devel and wine-crossover ports as similar as possible. @@ -13,12 +14,14 @@ conflicts wine-devel wine-crossover set my_name wine version 2.0 +revision 2 set branch [lindex [split ${version} .] 0].0 license LGPL-2.1+ categories x11 maintainers ryandesign jwa openmaintainer homepage https://www.winehq.org platforms darwin +supported_archs i386 x86_64 use_bzip2 yes distname ${my_name}-${version} dist_subdir ${my_name} @@ -91,10 +94,21 @@ port:pkgconfig patchfiles BOOL.patch \ + patch-configure.diff \ cups_headers.patch \ mach_machine.patch \ tiger-shell.patch +pre-configure { + if {[variant_isset universal]} { + foreach arch ${universal_archs_to_use} { + file mkdir ${worksrcpath}-${arch} + } + + configure.cmd ${worksrcpath}/configure + } +} + # Wine requires the program specified in INSTALL to create intermediate # directories; /usr/bin/install doesn't. # http://bugs.winehq.org/show_bug.cgi?id=35310 @@ -141,9 +155,14 @@ --x-include=${prefix}/include \ --x-lib=${prefix}/lib -# 64-bit Wine exists for Linux, but does not work on OS X. -# http://www.winehq.org/pipermail/wine-devel/2014-February/103074.html -supported_archs i386 +configure.universal_args + +set merger_configure_args(x86_64) "--enable-win64 --libdir=${prefix}/lib" +set merger_configure_args(i386) --with-wine64=${workpath}/${worksrcdir}-x86_64 + +if {${build_arch} eq "x86_64"} { + default_variants +universal +} # llvm-gcc-4.2 doesn't respect force_align_arg_pointer; wine builds but fails to run # http://bugs.winehq.org/show_bug.cgi?id=28030 --- /dev/null 2017-03-10 23:49:01.000000000 +0000 +++ x11/wine/files/patch-configure.diff 2017-03-10 23:43:19.000000000 +0000 @@ -0,0 +1,19 @@ +# Output DLLs to different directories so that we don't have a clash when +# they're merged back together + +--- configure.orig ++++ configure +@@ -7320,7 +7320,12 @@ + + + +-dlldir="\${libdir}/wine" ++if test "x$enable_win64" = "xyes" ++then ++ dlldir="\${libdir}/wine64" ++else ++ dlldir="\${libdir}/wine" ++fi + + DLLFLAGS="-D_REENTRANT" +
comment:6 Changed 8 years ago by pete27
Thanks for the patch. Any idea how I can get wine-mono and wine-gecko x64 to work?
comment:7 Changed 8 years ago by mojca (Mojca Miklavec)
Cc: | mojca added |
---|
comment:8 Changed 8 years ago by casr (Chris Rawnsley)
comment:9 Changed 7 years ago by 1-61803
Cc: | 1-61803 added |
---|
comment:10 Changed 7 years ago by Chris Rawnsley <chris@…>
comment:11 Changed 7 years ago by raimue (Rainer Müller)
comment:12 Changed 7 years ago by raimue (Rainer Müller)
comment:13 Changed 7 years ago by raimue (Rainer Müller)
comment:14 Changed 7 years ago by raimue (Rainer Müller)
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
As per that FAQ you referenced, 64 bit wine is really only for Linux at present. There are some MacOS initiatives for it, it appears, but also some ABI issues that might make it never work generally.