Posts Compilando las DLLs de DXVK en Gentoo
Post
Cancel

Compilando las DLLs de DXVK en Gentoo

English version

La forma mas sencilla de compilar DXVK en Gentoo es con una chroot de Debian, pero… Donde está la diversión en eso? La primera vez que lo intenté me topé con varios problemas y no encontré documentado el proceso en ningún sitio. Esta entrada es un intento de resolver ese problema.


Dependencias

Según la documentación oficial necesitamos:

  • wine 3.10 or newer
  • Meson build system (at least version 0.43)
  • MinGW64 compiler and headers (requires threading support)
  • glslang front end and validator
# emerge virtual/wine dev-util/meson dev-util/glslang

MinGW64

Se necesita MinGW con threads de POSIX. Por suerte existe crossdev, el problema es que por defecto compila GCC con threads de Win32.

Se crea primero la toolchain, la tupla para x86 es i686-w64-mingw32 y para x64 x86_64-w64-mingw32.

# crossdev -t i686-w64-mingw32
# crossdev -t x86_64-w64-mingw32

Para arreglar GCC se necesitan dos cosas, indicar que lo queremos con posix threads y las librerías que hacen falta para compilarlo.

# mkdir /etc/portage/{env,package.env}
# echo 'EXTRA_ECONF="--enable-threads=posix"' > /etc/portage/env/mingw32_posix_threads
# echo -e 'cross-i686-w64-mingw32/gcc mingw32_posix_threads\ncross-x86_64-w64-mingw32/gcc mingw32_posix_threads' > /etc/portage/package.env/mingw32_posix_threads

Se añade la USE libraries al runtime.

cross-i686-w64-mingw32/mingw64-runtime libraries
cross-x86_64-w64-mingw32/mingw64-runtime libraries

Por último recompila mingw64-runtime y gcc por separado, en ese orden.

# emerge -1 cross-i686-w64-mingw32/mingw64-runtime cross-x86_64-w64-mingw32/mingw64-runtime
# emerge -1 cross-i686-w64-mingw32/gcc cross-x86_64-w64-mingw32/gcc

Dependiendo de la versión del runtime puede que se instalen algunas librerias en el lugar equivocado y esto impide compilar GCC, si es el caso basta con hacer enlaces. Bug #653246
Ejemplo:

# ln -s /usr/x86_64-w64-mingw32/usr/lib64/{libmangle.a,libpthread.a,libpthread.dll.a,libwinpthread.a,libwinpthread.dll.a,libwinpthread.la} /usr/x86_64-w64-mingw32/usr/lib/

El resultado final debe ser este:

# i686-w64-mingw32-gcc -v
# x86_64-w64-mingw32-gcc -v
...
Thread model: posix
...

Compilar las DLLs

# su user
$ cd
$ git clone https://github.com/doitsujin/dxvk.git
$ cd dxvk

### 32-bit build. For 64-bit builds, replace
### build-win32.txt with build-win64.txt
### build.w32 with build.w64

$ meson --cross-file build-win32.txt --prefix /some/install/prefix build.w32
$ cd build.w32/
$ meson configure -Dbuildtype=release
$ ninja
$ ninja install
$ ls /some/install/prefix/bin
d3d11.dll  dxgi.dll  setup_dxvk.sh

Estas son las toolchains que usé y que producen binarios que funcionan.

cross-i686-w64-mingw32/binutils-2.30-r3
cross-i686-w64-mingw32/gcc-7.3.0-r3
cross-i686-w64-mingw32/mingw64-runtime-5.0.4

cross-x86_64-w64-mingw32/binutils-2.30-r3
cross-x86_64-w64-mingw32/gcc-7.3.0-r3
### Requiere symlinkear de ...lib64/ -> ...lib/
cross-x86_64-w64-mingw32/mingw64-runtime-5.0.4

Fuentes:

DXVK Github
Bug #631460
Bug #653246

OLDER POST NEWER POST

Comments powered by Disqus.

Search Results