ValveSoftware / Proton

Compatibility tool for Steam Play based on Wine and additional components
Other
24.42k stars 1.07k forks source link

[macOS] build failed on processing DXVK #497

Closed MaxGivno closed 6 years ago

MaxGivno commented 6 years ago

iMac 2012 macOS 10.13.6

Happens after yesterday's update.

[1/2] Installing files.
Installing src/dxgi/dxgi.dll to /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/bin
Stripping target 'src/dxgi/dxgi.dll'
Installing src/dxgi/libdxgi.dll.a to /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/lib
Installing src/d3d11/d3d11.dll to /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/bin
Stripping target 'src/d3d11/d3d11.dll'
Installing src/d3d11/libd3d11.dll.a to /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/lib
Installing src/d3d10/d3d10core.dll to /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/bin
Stripping target 'src/d3d10/d3d10core.dll'
Traceback (most recent call last):
  File "/usr/local/Cellar/meson/0.47.1/libexec/bin/meson", line 29, in <module>
    sys.exit(mesonmain.main())
  File "/usr/local/lib/python3.7/site-packages/mesonbuild/mesonmain.py", line 379, in main
    return run(sys.argv[1:], launcher)
  File "/usr/local/lib/python3.7/site-packages/mesonbuild/mesonmain.py", line 284, in run
    return minstall.run(remaining_args)
  File "/usr/local/lib/python3.7/site-packages/mesonbuild/minstall.py", line 466, in run
    installer.do_install(datafilename)
  File "/usr/local/lib/python3.7/site-packages/mesonbuild/minstall.py", line 298, in do_install
    self.install_targets(d)
  File "/usr/local/lib/python3.7/site-packages/mesonbuild/minstall.py", line 442, in install_targets
    install_name_mappings, verbose=False)
  File "/usr/local/lib/python3.7/site-packages/mesonbuild/scripts/depfixer.py", line 412, in fix_rpath
    fix_darwin(fname, new_rpath, final_path, install_name_mappings)
  File "/usr/local/lib/python3.7/site-packages/mesonbuild/scripts/depfixer.py", line 394, in fix_darwin
    stderr=subprocess.DEVNULL)
  File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 328, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['install_name_tool', '/Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/bin/d3d10core.dll', '-change', '@rpath/d3d11.dylib', '/Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/bin/d3d11.dll']' returned non-zero exit status 1.
FAILED: meson-install 
/usr/local/opt/python/bin/python3.7 /usr/local/Cellar/meson/0.47.1/libexec/bin/meson install --no-rebuild
ninja: build stopped: subcommand failed.
flukejones commented 6 years ago

This is a DXVK issue - I've created the issue here.

flukejones commented 6 years ago

To continue building with new git release of Proton, in dxvk/src/meson.build remove subdir('d3d10'). Issue looks like meson is trying to correct an rpath using the wrong tool.

MaxGivno commented 6 years ago

Something is definitely wrong with this build of DXVK:

[1/2] Installing files.
Installing src/dxgi/dxgi.dll to /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/bin
Stripping target 'src/dxgi/dxgi.dll'
Installing src/dxgi/libdxgi.dll.a to /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/lib
Installing src/d3d11/d3d11.dll to /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/bin
Stripping target 'src/d3d11/d3d11.dll'
Installing src/d3d11/libd3d11.dll.a to /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/lib
Installing /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/utils/setup_dxvk.sh to /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win32/bin
The Meson build system
Version: 0.47.1
Source dir: /Volumes/MacHDD/Users/harley/dev/proton/dxvk
Build dir: /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win64
Build type: cross build
Project name: dxvk
Project version: v0.70
0009:err:process:create_process 64-bit application L"Z:\\Volumes\\MacHDD\\Users\\harley\\dev\\proton\\build\\dxvk.win64\\meson-private\\sanitycheckc_cross.exe" not supported in 32-bit prefix
wine: Bad EXE format for Z:\Volumes\MacHDD\Users\harley\dev\proton\build\dxvk.win64\meson-private\sanitycheckc_cross.exe.

meson.build:1:0: ERROR:  Executables created by c compiler x86_64-w64-mingw32-gcc are not runnable.

A full log can be found at /Volumes/MacHDD/Users/harley/dev/proton/build/dxvk.win64/meson-logs/meson-log.txt

Seems it tries to run 64bit exe in 32bit environment. I've found a similar issue in DXVK's repository, but it seems to be fixed back then. Looking for a fix.

pchome commented 6 years ago

@MaxGivno Looks like you trying to use 32 bit wine prefix for 64 bit build. You can try to change your cross-files like this: https://github.com/doitsujin/dxvk/pull/575

MaxGivno commented 6 years ago

@pchome Thanks, it does the trick :)

flukejones commented 6 years ago

Not sure where else to ask as there seem to be no forums of mailing list for those of us tinkering with macOS Proton: have either of you succeeded in running DX11 games of demos? Any Vulkan games or demos?

MaxGivno commented 6 years ago

@Luke-Nukem I haven't tested it properly 'cause it tricky to install and launch games since Steam itself is not supported macOS build of Proton. Also, as I read in issue that you've created, dxvk isn't of any real use on mac until it's able to link to MoltenVK. So it seems it will take some work to make this happens.

flukejones commented 6 years ago

If anybody wants to try DX10, you can make the changes in this PR.

To try with upstream DXVK use these changes.

Edit: It occurs to me that the DX10 libs are not copied to the dist.

MaxGivno commented 6 years ago

@Luke-Nukem Nope

[170/176] Linking target src/d3d10/d3d10core.dll.
FAILED: src/d3d10/d3d10core.dll 
i686-w64-mingw32-g++  -o src/d3d10/d3d10core.dll 'src/d3d10/src@d3d10@@d3d10core@sha/d3d10_main.cpp.obj' 'src/d3d10/src@d3d10@@d3d10core@sha/d3d10_reflection.cpp.obj' ../../dxvk/src/d3d10/d3d10core.def -Wl,--as-needed -Wl,-O1 -shared ../../dxvk/src/d3d10/d3d10core.def -Wl,--start-group -Wl,--out-implib=src/d3d10/libd3d10core.dll.a src/util/libutil.a src/dxbc/libdxbc.a src/dxvk/libdxvk.a src/spirv/libspirv.a /Volumes/MacHDD/Users/harley/dev/proton/dxvk/lib32/d3dcompiler_43.lib -ldxgi -ld3d11 /Volumes/MacHDD/Users/harley/dev/proton/dxvk/lib32/vulkan-1.lib -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -Wl,--end-group '-Wl,-rpath,$ORIGIN/../../../../dxvk/lib32' -static -static-libgcc -static-libstdc++ -Wl,--add-stdcall-alias,--enable-stdcall-fixup 
/usr/local/Cellar/mingw-w64/5.0.4_1/toolchain-i686/bin/i686-w64-mingw32-ld: src/d3d10/src@d3d10@@d3d10core@sha/d3d10_main.cpp.obj:d3d10_main.cpp:(.text+0x89): undefined reference to `D3D11CoreCreateDevice@24'
collect2: error: ld returned 1 exit status
[174/176] Compiling C++ object 'src/d3d10/src@d3d10@@d3d10_1@sha/d3d10_main.cpp.obj'.
ninja: build stopped: subcommand failed.
flukejones commented 6 years ago

@MaxGivno yeah, works for the 64bit build fine. It's all a bit of a pain on macOS, not sure what will happen for Steam once Apple forces phasing out of 32bit.

If you want to do a build of wine from winehq with MoltenVK enabled I can help with that - but, I don't know of any DX games or apps that are 32bit so you can try DXVK. Doom (2016) still crashes with a threading error with winehq macOS builds.

pchome commented 6 years ago

I don't know of any DX games or apps that are 32bit so you can try DXVK

DXVK contains simple tests (meson --cross-file ... -Denable_tests=true), use d3d11-triangle test if succeeded.

flukejones commented 6 years ago

Thanks @pchome.

Given that macOS is going to depreciate 32-bit compatibility soon, and that MoltenVK currently doesn't build for 32-bits, I think we should look at building proton and support libs as 64-bit only on macOS.

I read somewhere (I wish I had bookmarked it) that someone at Code Weavers was looking at getting 64-bit wine builds on macOS to run/translate 32-bit Windowes apps.

@MaxGivno you can get a perfectly functional build by removing all 32-bit support.

MaxGivno commented 6 years ago

@Luke-Nukem will try, thanks :)

MaxGivno commented 6 years ago

@Luke-Nukem Well, it's not that perfect ;) It seems like current Wine build doesn't support Vulkan on Mac. But WineHQ's one does. I've managed to build Proton with Wine 3.14 yesterday and it would ran cube.exe and vkQuake. But I wasn't able to test DXVK with d3d11-triangle. I've got this:

free142:bin mryazanov$ STEAM_COMPAT_DATA_PATH=~/.proton/ ~/Documents/dev/proton/dist/proton run d3d11-triangle.exe 
info:  Game: d3d11-triangle.exe
info:  DXVK: v0.65-82-gc24497d
warn:  OpenVR: Failed to initialize OpenVR
info:  Required Vulkan extension VK_KHR_get_physical_device_properties2 not supported
err:   DxvkInstance: Failed to create instance
Failed to create DXGI factory
MaxGivno commented 6 years ago

Tried today with MoltenVK 1.0.20, DXVK 0.71 and Wine dev 3.15:

info:  Game: d3d11-triangle.exe
info:  DXVK: v0.65-82-gc24497d
warn:  OpenVR: Failed to initialize OpenVR
info:  Enabled instance extensions:
info:    VK_KHR_get_physical_device_properties2
info:    VK_KHR_surface
info:    VK_KHR_win32_surface
[mvk-info] MoltenVK version 1.0.20. Vulkan version 1.0.83.
    The following Vulkan extensions are supported:
        VK_MVK_moltenvk v7
        VK_MVK_macos_surface v2
        VK_KHR_surface v25
        VK_KHR_swapchain v70
        VK_KHR_maintenance1 v2
        VK_KHR_shader_draw_parameters v1
        VK_KHR_get_physical_device_properties2 v1
        VK_KHR_push_descriptor v2
    Created VkInstance with the following Vulkan extensions enabled:
        VK_MVK_macos_surface v2
        VK_KHR_surface v25
        VK_KHR_get_physical_device_properties2 v1
[mvk-info] GPU device:
        model: NVIDIA GeForce GTX 1060 3GB
        type: Discrete
        vendorID: 0x10de
        deviceID: 0x1c02
        pipelineCacheUUID: 00000000-0000-0000-0000-271300002724
    supports the following Metal Feature Sets:
        macOS GPU Family 1 v3
        macOS GPU Family 1 v2
        macOS GPU Family 1 v1
info:  NVIDIA GeForce GTX 1060 3GB:
info:    Driver: 0.0.156
info:    Vulkan: 1.0.83
info:    Memory Heap[0]: 
info:      Size: 3072 MiB
info:      Flags: 0x1
info:      Memory Type[0]: Property Flags = 0x1
info:      Memory Type[1]: Property Flags = 0xf
info:      Memory Type[2]: Property Flags = 0xb
info:  D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_11_0
info:  D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_10_1
info:  D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_10_0
info:  D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_9_3
info:  D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_9_2
info:  D3D11CoreCreateDevice: Probing D3D_FEATURE_LEVEL_9_1
err:   D3D11CoreCreateDevice: Requested feature level not supported
Failed to create D3D11 device

It's confusing how DXVK reports version 0.65-82-gc24497d instead of 0.71.

suicvne commented 6 years ago

i've jumped on this bandwagon and i'm curious as to how you guys are getting this to build. i was working on my own set of patches, i did figure out i needed these things on my High Sierra Hackintosh.

brew install cmake nasm libtool automake mingw-w64 python3
brew postinstall python3

# Install meson through pip3
pip3 install meson

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

I'm now getting stuck on SDL of all things. I've tweaked some more stuff in the build_proton.sh and i'll edit back if that fixes things.

It's specifically during the wine build ( ) ld: symbol(s) not found for architecture i386 I've been adding if statements around 32-bit build steps to skip them on Darwin so I'm very confused as to where this came from.

MaxGivno commented 6 years ago

@suicvne First of all I'm not a real 'fireman' ;) so treat my advices lightly.

I'm not sure if it's matter, but I've read that it's not recommended to use different repos for dependencies. It could break something. So use either brew or pip but not both.

For Xcode command line tools I've used just xcode-select --install. Also not sure if it's critical.

Make sure you follow install instructions in Proton readme. Clone proton, then update submodules.

At this point you should be set to build. I had just one bummer with DXVK 0.70 stuck on d3d10 32-bit. So I just deleted subdir('d3d10') in proton/dxvk/src/meson.build.

It does it for me but there is some caveats for macOS. Wine 3.7 in current Proton build doesn't have Vulcan support for Mac. And MoltenVK seems do not have required capabilities for work with DXVK.

suicvne commented 6 years ago

And follow instructions I have been. A lot of the stuff I have listed are workarounds I personally had to use. I've got a fully functioning Xcode command line tools and Xcode 9 and 10 beta. Deleted subdir('d3d10') already. Everything's being built from the submodules.

The fact that the version of Wine they're using doesn't even support MoltenVK yet makes this seem counterintuitive to even attempt to build but I think it would still be fun to see the progress being made on it. I look forward to Valve putting in the work to make this great on macOS because it looks really promising already for Linux. Hopefully the day comes soon where I can permanently abandon my Windows partition.

aaronfranke commented 6 years ago

macOS support has been removed: https://github.com/ValveSoftware/Proton/commit/a84120449d8177fa40f3de729e55d238d3c24877