----
The wiki page for emulators/i386-wine{-devel}, the port for delivering a 32-bit Wine (for running 32-bit Microsoft Windows applications) capable of installing and running under %%FreeBSD%%/amd64.
This port can **only be built in an i386 environment** as the %%FreeBSD%% Port's Collection does not support cross compiling.
====== Packages ======
Packages for i386-wine{-devel} are provided for all supported %%FreeBSD%% releases and %%FreeBSD%%-current via the normal %%FreeBSD%% Ports repository.
You do need a system installed with lib32 libraries. If unsure, test if /libexec/ld-elf32.so.1 is present on your system.
If not you can fetch the set "lib32.txz" from the [[https://download.freebsd.org/ftp/releases/|FreeBSD FTP Archives]] and install it the following way (for example, on an amd64 installation of 10.3-RELEASE):
# fetch -arRo /tmp/ https://download.freebsd.org/ftp/releases/amd64/10.3-RELEASE/lib32.txz
# tar -xpf /tmp/lib32.txz -C /
To install wine do one of the following:
# pkg install i386-wine
for the stable version of wine, or
# pkg install i386-wine-devel
for the development version of wine.
Alternatively you can install directly from the Ports Collection under emulators/i386-wine{-devel} however both approaches uses the same precompiled binaries. For example:
# cd /usr/ports/emulators/i386-wine-devel
# make install
To update the installed wine:
# pkg upgrade
====== Binary Image Activation ======
The %%FreeBSD%% kernel can be configured to detect a Microsoft Windows binary and to automatically launch Wine to run the Windows binary. This allows one to treat Windows binaries like normal binaries (i.e. no need to call ''%%wine foo.exe%%'').
As root do:
# binmiscctl add wine32 --interpreter /usr/local/bin32/wine \
--magic "\x4d\x5a\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00\xff\xff\x00\x00\xb8\x00\x00\x00" \
--mask "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" \
--size 20 --set-enabled
====== Building ======
===== Manual =====
To build the i386-Wine port an i386 environment is required. If such an environment is not available then it can be created from %%FreeBSD%%/amd64:
# cd /usr/src
# make buildworld TARGET=i386
# make installworld TARGET=i386 DESTDIR=/compat/i386
# make distribution TARGET=i386 DESTDIR=/compat/i386
# ln /etc/resolv.conf /compat/i386/etc
# mkdir /compat/i386/usr/ports
# mount -t devfs devfs /compat/i386/dev
# mount -t nullfs /usr/ports /compat/i386/usr/ports
When ''%%chroot%%''ing to ''%%/compat/i386%%'' do these additional setups:
# chroot /compat/i386
# setenv MACHINE i386
# setenv UNAME_m i386
# setenv UNAME_p i386
# service ldconfig start
Lastly, the package can be created:
# cd /usr/ports/emulators/i386-wine-devel
# make package -DWINE_CROSS_BUILD
The package created had an architecture label of, for example ''%%freebsd:11:x86:32%%'', and will not install in a 64-bit environment unless you use ''%%pkg add -f%%''. The package is available at:
# echo /compat/i386/$(make -V PKGFILE)
===== Poudriere =====
Poudriere can be used to compile i386-wine by doing the following (using %%FreeBSD%% 10.1 as an example):
# pkg install poudriere
# poudriere ports -c
# poudriere jail -c -j wine-build -a i386 -v 10.3-RELEASE
# echo "WINE_CROSS_BUILD=yes" >> /usr/local/etc/poudriere.d/make.conf
# poudriere bulk -j wine-build emulators/i386-wine
The package is available at
# echo /usr/local/poudriere/data/packages/wine-build-default/All/$(make -C /usr/ports/emulators/i386-wine -V PKGNAME ARCH=i386).txz
and can be installed using
# pkg install -f /usr/local/poudriere/data/packages/wine-build-default/All/$(make -C /usr/ports/emulators/i386-wine -V KGNAME ARCH=i386).txz
====== TODO ======
* Add wow64 support
* Add HAVE_STRUCT___RES_STATE patch to port (and upstream)__
* Add warning for user when nvidia is installed but not up-to-date (helps with cryptic crashes)
* Add libva support