Compare commits

..

18 commits

Author SHA1 Message Date
Andrew Eikum
08bbe98933 update dxvk 2021-03-11 07:25:04 -06:00
Andrew Eikum
2580a9e23f lsteamclient: generate 1.51 support 2021-03-11 07:25:04 -06:00
Andrew Eikum
71027a5616 lsteamclient: import steamworks sdk 1.51 2021-03-11 07:25:04 -06:00
Paul Gofman
33f896adb9 wineopenxr: Support XR_KHR_vulkan_enable2 extension. 2021-03-11 07:25:04 -06:00
Paul Gofman
e8ca8bf2ac wineopexr: Don't consider XrCompositionLayerColorScaleBiasKHR in convert_XrCompositionLayer().
This structure is not inherited from XrCompositionLayerBaseHeader but
is supposed to be passed as chained structure with a layer.
2021-03-11 07:25:04 -06:00
Paul Gofman
487e75d767 wineopenxr: Update to 1.0.13 registry version. 2021-03-11 07:25:04 -06:00
Paul Gofman
5c1f2bc209 wineopenxr: Call extra init-related functions from wine_xrCreateSession().
Based on a patch by Andrew Eikum.
2021-03-11 07:25:04 -06:00
Paul Gofman
832c366ac3 wineopenxr: Use registry key to query VR availability. 2021-03-11 07:25:04 -06:00
Paul Gofman
bf53451f71 vrclient_x64: Translate action manifest path in startup info. 2021-03-11 07:25:04 -06:00
Paul Gofman
234191d1db steam_helper: Store OpenVR status and required extensions in registry on startup. 2021-03-11 07:25:04 -06:00
Andrew Eikum
0695823d30 update wine 2021-03-11 07:25:04 -06:00
Paul Gofman
e1ff3caee4 vrclient_x64: Use staging texture for the right eye in case of submitted d3d11 texture array. 2021-02-17 10:22:55 -06:00
Paul Gofman
728b7b34db vrclient_x64: Set explicit timing mode when d3d11 application uses PostPresentHandoff. 2021-02-17 10:22:55 -06:00
Paul Gofman
50dbbddbb0 vrclient_x64: Use static internal compositor data.
VRCompositor ought to be a singleton. Some applications (Gravity Sketch
VR) access VRCompositor multiple times, so we need to share data between
instances.
2021-02-17 10:22:18 -06:00
Paul Gofman
c0144a188b vrclient_x64: Perform skybox textures conversion for dxvk textures. 2021-02-17 09:28:19 -06:00
Paul Gofman
4ca1999211 vrclient_x64: Unload native vrclient shared library on process detach. 2021-02-17 09:28:19 -06:00
Paul Gofman
92b6125338 vrclient_x64: Resolve absolute path in vrclient_dos_path_to_unix_path(). 2021-02-17 09:28:19 -06:00
Andrew Eikum
55cca0e1f8 proton: Don't disable mfplay 2021-02-17 09:21:11 -06:00
1604 changed files with 366242 additions and 862691 deletions

View file

@ -10,7 +10,7 @@ about: Game compatibility issues.
## System Information ## System Information
- GPU: <!-- e.g. RX 580 or GTX 970 --> - GPU: <!-- e.g. RX 580 or GTX 970 -->
- Video driver version: <!-- e.g. Mesa 18.2 or nvidia 396.54 --> - Driver/LLVM version: <!-- e.g. Mesa 18.2/7.0.0 or nvidia 396.54 -->
- Kernel version: <!-- e.g. 4.17 --> - Kernel version: <!-- e.g. 4.17 -->
- Link to full system information report as [Gist](https://gist.github.com/): - Link to full system information report as [Gist](https://gist.github.com/):
- Proton version: - Proton version:
@ -19,9 +19,8 @@ about: Game compatibility issues.
- [ ] that I haven't found an existing compatibility report for this game. - [ ] that I haven't found an existing compatibility report for this game.
- [ ] that I have checked whether there are updates for my system available. - [ ] that I have checked whether there are updates for my system available.
<!-- Please add `PROTON_LOG=1 %command%` to the game's launch options and <!-- Please add `PROTON_LOG=1 %command%` to the game's launch options and drag
attach the generated $HOME/steam-$APPID.log to this issue report as a file. and drop the generated `$HOME/steam-$APPID.log` into this issue report -->
(Proton logs compress well if needed.)-->
## Symptoms <!-- What's the problem? --> ## Symptoms <!-- What's the problem? -->
@ -39,8 +38,6 @@ attach the generated $HOME/steam-$APPID.log to this issue report as a file.
4. Please copy it to your clipboard by pressing `Ctrl+A` and then `Ctrl+C`. 4. Please copy it to your clipboard by pressing `Ctrl+A` and then `Ctrl+C`.
Then paste it in a [Gist](https://gist.github.com/) and post the link in Then paste it in a [Gist](https://gist.github.com/) and post the link in
this issue. this issue.
5. Also, please copy the contents of `Help` > `Steam Runtime Diagnostics` to 5. Please search for open issues and pull requests by the name of the game and
the gist.
6. Please search for open issues and pull requests by the name of the game and
find out whether they are relevant and should be referenced above. find out whether they are relevant and should be referenced above.
--> -->

View file

@ -10,7 +10,7 @@ about: Games tested and found to have no issues.
## System Information ## System Information
- GPU: <!-- e.g. RX 580 or GTX 970 --> - GPU: <!-- e.g. RX 580 or GTX 970 -->
- Video driver version: <!-- e.g. Mesa 18.2 or nvidia 396.54 --> - Driver/LLVM version: <!-- e.g. Mesa 18.2/7.0.0 or nvidia 396.54 -->
- Distro version: <!-- e.g. Ubuntu 18.04 --> - Distro version: <!-- e.g. Ubuntu 18.04 -->
- Link to full system information report as [Gist](https://gist.github.com/): - Link to full system information report as [Gist](https://gist.github.com/):
- Proton version: - Proton version:

1
.gitignore vendored
View file

@ -5,4 +5,3 @@
/.vagrant/ /.vagrant/
/vagrant_share/ /vagrant_share/
/build/

52
.gitmodules vendored
View file

@ -1,57 +1,33 @@
[submodule "wine"] [submodule "wine"]
path = wine path = wine
url = ../wine url = https://github.com/ValveSoftware/wine
[submodule "dxvk"] [submodule "dxvk"]
path = dxvk path = dxvk
url = https://github.com/doitsujin/dxvk.git url = https://github.com/ValveSoftware/dxvk
[submodule "openvr"] [submodule "openvr"]
path = openvr path = openvr
url = https://github.com/ValveSoftware/openvr url = https://github.com/ValveSoftware/openvr
[submodule "fonts/liberation-fonts"] [submodule "fonts/liberation-fonts"]
path = fonts/liberation-fonts path = fonts/liberation-fonts
url = https://github.com/liberationfonts/liberation-fonts url = https://github.com/liberationfonts/liberation-fonts
[submodule "FAudio"]
path = FAudio
url = https://github.com/FNA-XNA/FAudio
[submodule "gstreamer"] [submodule "gstreamer"]
path = gstreamer path = gstreamer
url = https://github.com/GStreamer/gstreamer.git url = https://gitlab.freedesktop.org/gstreamer/gstreamer.git
[submodule "gst-plugins-base"]
path = gst-plugins-base
url = https://gitlab.freedesktop.org/gstreamer/gst-plugins-base.git
[submodule "gst-plugins-good"]
path = gst-plugins-good
url = https://gitlab.freedesktop.org/gstreamer/gst-plugins-good.git
[submodule "gst-orc"] [submodule "gst-orc"]
path = gst-orc path = gst-orc
url = https://github.com/GStreamer/orc.git url = https://gitlab.freedesktop.org/gstreamer/orc.git
[submodule "vkd3d-proton"] [submodule "vkd3d-proton"]
path = vkd3d-proton path = vkd3d-proton
url = https://github.com/HansKristian-Work/vkd3d-proton url = https://github.com/HansKristian-Work/vkd3d-proton
[submodule "OpenXR-SDK"] [submodule "OpenXR-SDK"]
path = OpenXR-SDK path = OpenXR-SDK
url = https://github.com/KhronosGroup/OpenXR-SDK url = https://github.com/KhronosGroup/OpenXR-SDK
[submodule "dxvk-nvapi"]
path = dxvk-nvapi
url = https://github.com/jp7677/dxvk-nvapi
[submodule "vkd3d"]
path = vkd3d
url = https://github.com/ValveSoftware/vkd3d
[submodule "Vulkan-Headers"]
path = Vulkan-Headers
url = https://github.com/KhronosGroup/Vulkan-Headers
[submodule "SPIRV-Headers"]
path = SPIRV-Headers
url = https://github.com/KhronosGroup/SPIRV-Headers
[submodule "Vulkan-Loader"]
path = Vulkan-Loader
url = https://github.com/KhronosGroup/Vulkan-Loader
[submodule "gst-libav"]
path = gst-libav
url = https://github.com/GStreamer/gst-libav
[submodule "ffmpeg"]
path = ffmpeg
url = https://github.com/FFmpeg/FFmpeg
[submodule "dav1d"]
path = dav1d
url = https://github.com/videolan/dav1d.git
[submodule "gst-plugins-rs"]
path = gst-plugins-rs
url = https://github.com/sdroege/gst-plugin-rs
[submodule "graphene"]
path = graphene
url = https://github.com/ebassi/graphene
[submodule "glslang"]
path = glslang
url = https://github.com/KhronosGroup/glslang

1
FAudio Submodule

@ -0,0 +1 @@
Subproject commit aa158544b6402e6a37517c0ffa142a5edae927b0

View file

@ -1,10 +1,10 @@
Copyright (c) 2018-2022, Valve Corporation Copyright (c) 2018-2020, Valve Corporation
All rights reserved. All rights reserved.
Redistribution and use of Proton in source and binary forms is governed Redistribution and use of Proton in source and binary forms is governed
by a variety of licenses. by a variety of licenses.
Refer to the contents of LICENSE.proton for the license for the top Refer to the contents of LICENCE.proton for the license for the top
level contents of the Proton project. level contents of the Proton project.
Proton uses a variety of other software, each of which is governed Proton uses a variety of other software, each of which is governed

View file

@ -1,4 +1,4 @@
Copyright (c) 2018-2022, Valve Corporation Copyright (c) 2018-2020, Valve Corporation
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, Redistribution and use in source and binary forms, with or without modification,

224
Makefile
View file

@ -13,29 +13,26 @@ endif
# remove special chars # remove special chars
override _build_name := $(shell echo $(_build_name) | tr -dc '[:alnum:] ._-') override _build_name := $(shell echo $(_build_name) | tr -dc '[:alnum:] ._-')
BUILD_ROOT := build
# make doesn't handle spaces well... replace them with underscores in paths
BUILD_DIR := $(BUILD_ROOT)/build-$(shell echo $(_build_name) | sed -e 's/ /_/g')
STEAM_DIR := $(HOME)/.steam/root STEAM_DIR := $(HOME)/.steam/root
BUILD_DIR := $(_build_name)
ifeq ($(build_name),) ifeq ($(build_name),)
DEPLOY_DIR := $(shell git describe --tags --always --exclude proton-sdk*) DEPLOY_DIR := $(shell git describe --tags --always)
else else
DEPLOY_DIR := $(_build_name) DEPLOY_DIR := $(_build_name)
endif endif
enable_ccache := 1
ifneq ($(enable_ccache),0)
CCACHE_FLAG := ENABLE_CCACHE=1
endif
ifneq ($(module),) ifneq ($(module),)
ifneq ($(findstring .drv,$(module)),) ifneq ($(findstring .,$(module)),)
MODULE_PEFILE := $(module) MODULE_SFX :=
MODULE_SOFILE := $(subst .drv,.so,$(module)) else
else ifneq ($(findstring .sys,$(module)),) MODULE_SFX := .dll
MODULE_PEFILE := $(module) endif
MODULE_SOFILE := $(subst .sys,.so,$(module))
else
MODULE_PEFILE := $(module).dll
MODULE_SOFILE := $(module).so
endif
endif endif
ifneq ($(unstripped),) ifneq ($(unstripped),)
@ -43,26 +40,17 @@ ifneq ($(unstripped),)
DEPLOY_DIR := $(DEPLOY_DIR)_unstripped DEPLOY_DIR := $(DEPLOY_DIR)_unstripped
endif endif
CONFIGURE_CMD := ../../configure.sh \ protonsdk_version := 0.20210126.1-0
CONFIGURE_CMD := ../proton/configure.sh \
--steam-runtime-image=steam-proton-dev \
--build-name="$(_build_name)" --build-name="$(_build_name)"
ifneq ($(protonsdk_version),) # make doesn't handle spaces well... replace them with underscores in paths
CONFIGURE_CMD += --proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:$(protonsdk_version) BUILD_DIR := "build-$(shell echo $(_build_name) | sed -e 's/ /_/g')"
else
protonsdk_version := $(shell grep '^arg_protonsdk_image=' configure.sh|xargs echo|cut -d: -f2)
endif
enable_ccache := 1
ifneq ($(enable_ccache),0)
CONFIGURE_CMD += --enable-ccache
endif
TOPLEVELGOALS := all any clean configure deploy downloads help install module proton protonsdk redist
CONTAINERGOALS := $(filter-out $(TOPLEVELGOALS),$(MAKECMDGOALS))
CONTAINERGOALS := $(filter-out $(BUILD_ROOT)/%,$(CONTAINERGOALS))
all: help all: help
.PHONY: $(TOPLEVELGOALS)
.PHONY: help vagrant clean configure proton install deploy module protonsdk
help: help:
@echo "Proton Makefile instructions" @echo "Proton Makefile instructions"
@ -70,8 +58,8 @@ help:
@echo "\"Quick start\" Makefile targets:" @echo "\"Quick start\" Makefile targets:"
@echo " install - Install Proton into current user's Steam installation" @echo " install - Install Proton into current user's Steam installation"
@echo " redist - Build a package suitable for manual installation or distribution" @echo " redist - Build a package suitable for manual installation or distribution"
@echo " to other users in $(BUILD_ROOT)/ named after the nearest git tag" @echo " to other users in vagrant_share/ named after the nearest git tag"
@echo " deploy - Build Steam deployment files into a directory in $(BUILD_ROOT)/ named" @echo " deploy - Build Steam deployment files into a directory in vagrant_share/ named"
@echo " after the nearest git tag" @echo " after the nearest git tag"
@echo " clean - Delete the Proton build directory" @echo " clean - Delete the Proton build directory"
@echo "" @echo ""
@ -82,144 +70,120 @@ help:
@echo " remember to always set it!" @echo " remember to always set it!"
@echo " Current build name: $(_build_name)" @echo " Current build name: $(_build_name)"
@echo " unstripped - Set to non-empty to avoid stripping installed library files." @echo " unstripped - Set to non-empty to avoid stripping installed library files."
@echo " enable_ccache - Enabled by default, set to 0 prior to configuring to disable ccache." @echo " enable_ccache - Enabled by default, set to 0 to disable ccache."
@echo " protonsdk_version - Version of the proton sdk image to use for building," @echo " protonsdk_version - Version of the proton sdk image to use for building,"
@echo " use protonsdk_version=local to build it locally." @echo " use protonsdk_version=local to build it locally."
@echo "" @echo ""
@echo "Development targets:" @echo "Development targets:"
@echo " vagrant - Start Vagrant VM"
@echo " configure - Configure Proton build directory" @echo " configure - Configure Proton build directory"
@echo " proton - Build Proton" @echo " proton - Build Proton"
@echo "" @echo ""
@echo " The following targets are development targets only useful after building Proton." @echo " The following targets are development targets only useful after building Proton."
@echo " module - Rebuild a single Wine module and copy into $(BUILD_ROOT)/<module>/." @echo " module - Rebuild a single Wine module and copy into vagrant_share/."
@echo " Specify module variable: make module=kernel32 module" @echo " Specify module variable: make module=kernel32 module"
@echo " dxvk - Rebuild DXVK and copy it into $(BUILD_ROOT)/." @echo " dxvk - Rebuild DXVK and copy it into vagrant_share/."
@echo " lsteamclient - Rebuild the Steam client wrapper and copy it into $(BUILD_ROOT)/." @echo " lsteamclient - Rebuild the Steam client wrapper and copy it into vagrant_share/."
@echo "" @echo ""
@echo "Examples:" @echo "Examples:"
@echo " make install - Build Proton and install into this user's Steam installation," @echo " make install - Build Proton and install into this user's Steam installation,"
@echo " with the current Proton branch name as the tool's name." @echo " with the current Proton branch name as the tool's name."
@echo "" @echo ""
@echo " make redist - Build a Proton redistribution package in a tagged directory" @echo " make redist - Build a Proton redistribution package in a tagged directory"
@echo " in $(BUILD_ROOT)/." @echo " in vagrant_share/."
@echo "" @echo ""
@echo " make build_name=mytest install - Build Proton with the tool name \"mytest\" and" @echo " make build_name=mytest install - Build Proton with the tool name \"mytest\" and"
@echo " install into this user's Steam installation." @echo " install into this user's Steam installation."
@echo "" @echo ""
@echo " make build_name=mytest module=dsound module - Build only the dsound module" @echo " make build_name=mytest module=dsound module - Build only the dsound module"
@echo " in the \"mytest\" build directory and place it into $(BUILD_ROOT)/dsound/." @echo " in the \"mytest\" build directory and place it into vagrant_share/dsound/."
@echo ""
@echo "Running out of disk space in the VM? See resize-vagrant-disk.sh"
clean: vagrant:
rm -rf $(BUILD_DIR) vagrant up
vagrant rsync debian10
protonsdk: clean: vagrant
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C docker $(UNSTRIPPED) PROTONSDK_VERSION=$(protonsdk_version) proton vagrant ssh -c 'rm -rf $(BUILD_DIR)/'
configure: | $(BUILD_DIR) protonsdk: vagrant
if [ ! -e $(BUILD_DIR)/Makefile ]; then \ vagrant ssh -c 'make -C proton/docker $(UNSTRIPPED) $(CCACHE_FLAG) PROTONSDK_VERSION=$(protonsdk_version) proton'
(cd $(BUILD_DIR) && $(CONFIGURE_CMD)); \
fi configure: vagrant
@vagrant ssh -c 'if [ ! -e $(BUILD_DIR)/Makefile ]; then mkdir -p $(BUILD_DIR); (cd $(BUILD_DIR) && $(CONFIGURE_CMD)); fi && make -C $(BUILD_DIR) downloads'
ifeq ($(protonsdk_version),local) ifeq ($(protonsdk_version),local)
configure: protonsdk configure: protonsdk
endif endif
proton: configure proton: configure
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) dist && \ vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) dist'
echo "Proton built locally. Use 'install', 'deploy' or 'redist' targets." echo "Proton built in VM. Use 'install' or 'deploy' targets to retrieve the build."
install: configure install: configure
rm -rf $(STEAM_DIR)/compatibilitytools.d/$(_build_name)/files/ #remove proton's internal files, but preserve user_settings etc from top-level vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) STEAM_DIR=/vagrant/ install'
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) install mkdir -p $(STEAM_DIR)/compatibilitytools.d/
cp -Rf --no-dereference --preserve=mode,links vagrant_share/compatibilitytools.d/$(_build_name) $(STEAM_DIR)/compatibilitytools.d/
echo "Proton installed to your local Steam installation" echo "Proton installed to your local Steam installation"
redist: | $(BUILD_ROOT)/$(DEPLOY_DIR)
redist: configure redist: configure
rm -rf $(BUILD_ROOT)/$(DEPLOY_DIR)/* && \ mkdir -p vagrant_share/$(DEPLOY_DIR)
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) redist && \ vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) redist && cp $(BUILD_DIR)/redist/* /vagrant/$(DEPLOY_DIR)'
cp -Rf $(BUILD_DIR)/redist/* $(BUILD_ROOT)/$(DEPLOY_DIR) && \ echo "Proton build available at vagrant_share/$(DEPLOY_DIR)"
echo "Proton build available at $(BUILD_ROOT)/$(DEPLOY_DIR)"
deploy: | $(BUILD_ROOT)/$(DEPLOY_DIR)-deploy
deploy: configure deploy: configure
rm -rf $(BUILD_ROOT)/$(DEPLOY_DIR)-deploy/* && \ mkdir -p vagrant_share/$(DEPLOY_DIR)-deploy
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) deploy && \ vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) deploy && cp $(BUILD_DIR)/deploy/* /vagrant/$(DEPLOY_DIR)-deploy'
cp -Rf $(BUILD_DIR)/deploy/* $(BUILD_ROOT)/$(DEPLOY_DIR)-deploy && \ echo "Proton deployed to vagrant_share/$(DEPLOY_DIR)-deploy"
echo "Proton deployed to $(BUILD_ROOT)/$(DEPLOY_DIR)-deploy"
module: | $(BUILD_ROOT)/$(module)/lib/wine/i386-windows
module: | $(BUILD_ROOT)/$(module)/lib/wine/i386-unix
module: | $(BUILD_ROOT)/$(module)/lib64/wine/x86_64-windows
module: | $(BUILD_ROOT)/$(module)/lib64/wine/x86_64-unix
module: configure module: configure
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) module=$(module) module && \ mkdir -p vagrant_share/$(module)/lib/wine/ vagrant_share/$(module)/lib64/wine/
cp -f $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(MODULE_PEFILE) $(BUILD_ROOT)/$(module)/lib/wine/i386-windows/ && \ vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) module=$(module) module && \
cp -f $(BUILD_DIR)/obj-wine64/dlls/$(module)/$(MODULE_PEFILE) $(BUILD_ROOT)/$(module)/lib64/wine/x86_64-windows/ && \ cp -f $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(module)$(MODULE_SFX)* /vagrant/$(module)/lib/wine/ && \
if [ -e $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(MODULE_PEFILE).so ]; then \ cp -f $(BUILD_DIR)/obj-wine64/dlls/$(module)/$(module)$(MODULE_SFX)* /vagrant/$(module)/lib64/wine/ && \
cp -f $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(MODULE_PEFILE).so $(BUILD_ROOT)/$(module)/lib/wine/i386-unix/ && \ if [ -e $(BUILD_DIR)/obj-wine64/dlls/$(module)/$(module).so ]; then \
cp -f $(BUILD_DIR)/obj-wine64/dlls/$(module)/$(MODULE_PEFILE).so $(BUILD_ROOT)/$(module)/lib64/wine/x86_64-unix/; \ cp -f $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(module).so /vagrant/$(module)/lib/wine/ && \
fi cp -f $(BUILD_DIR)/obj-wine64/dlls/$(module)/$(module).so /vagrant/$(module)/lib64/wine/; \
if [ -e $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(MODULE_SOFILE) ]; then \ fi'
cp -f $(BUILD_DIR)/obj-wine32/dlls/$(module)/$(MODULE_SOFILE) $(BUILD_ROOT)/$(module)/lib/wine/i386-unix/ && \ rm -f vagrant_share/$(module)/lib*/wine/*.fake
cp -f $(BUILD_DIR)/obj-wine64/dlls/$(module)/$(MODULE_SOFILE) $(BUILD_ROOT)/$(module)/lib64/wine/x86_64-unix/; \
fi
any $(CONTAINERGOALS): configure dxvk: configure
$(MAKE) $(MFLAGS) $(MAKEOVERRIDES) -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CONTAINERGOALS) mkdir -p vagrant_share/dxvk/lib/wine/dxvk/
mkdir -p vagrant_share/dxvk/lib64/wine/dxvk/
vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) dxvk && \
cp -f $(BUILD_DIR)/dist/dist/lib/wine/dxvk/*.dll /vagrant/dxvk/lib/wine/dxvk/ && \
cp -f $(BUILD_DIR)/dist/dist/lib64/wine/dxvk/*.dll /vagrant/dxvk/lib64/wine/dxvk/'
dxvk: | $(BUILD_ROOT)/dxvk/lib/wine/dxvk d9vk: configure
dxvk: | $(BUILD_ROOT)/dxvk/lib64/wine/dxvk mkdir -p vagrant_share/d9vk/lib/wine/dxvk/
dxvk: any mkdir -p vagrant_share/d9vk/lib64/wine/dxvk/
cp -f $(BUILD_DIR)/dist/files/lib/wine/dxvk/*.dll $(BUILD_ROOT)/dxvk/lib/wine/dxvk/ && \ vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) d9vk && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/dxvk/*.dll $(BUILD_ROOT)/dxvk/lib64/wine/dxvk/ cp -f $(BUILD_DIR)/dist/dist/lib/wine/dxvk/*.dll /vagrant/d9vk/lib/wine/dxvk/ && \
cp -f $(BUILD_DIR)/dist/dist/lib64/wine/dxvk/*.dll /vagrant/d9vk/lib64/wine/dxvk/'
dxvk-nvapi: | $(BUILD_ROOT)/dxvk-nvapi/lib/wine/nvapi vkd3d-proton: configure
dxvk-nvapi: | $(BUILD_ROOT)/dxvk-nvapi/lib64/wine/nvapi mkdir -p vagrant_share/vkd3d-proton/lib/wine/vkd3d-proton/
dxvk-nvapi: any mkdir -p vagrant_share/vkd3d-proton/lib64/wine/vkd3d-proton/
cp -f $(BUILD_DIR)/dist/files/lib/wine/nvapi/*.dll $(BUILD_ROOT)/dxvk-nvapi/lib/wine/nvapi/ && \ vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) vkd3d-proton && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/nvapi/*.dll $(BUILD_ROOT)/dxvk-nvapi/lib64/wine/nvapi/ cp -f $(BUILD_DIR)/dist/dist/lib/wine/vkd3d-proton/*.dll /vagrant/vkd3d-proton/lib/wine/vkd3d-proton/ && \
cp -f $(BUILD_DIR)/dist/dist/lib64/wine/vkd3d-proton/*.dll /vagrant/vkd3d-proton/lib64/wine/vkd3d-proton/'
vkd3d-proton: | $(BUILD_ROOT)/vkd3d-proton/lib/wine/vkd3d-proton lsteamclient: configure
vkd3d-proton: | $(BUILD_ROOT)/vkd3d-proton/lib64/wine/vkd3d-proton mkdir -p vagrant_share/lsteamclient/lib/wine
vkd3d-proton: any mkdir -p vagrant_share/lsteamclient/lib64/wine
cp -f $(BUILD_DIR)/dist/files/lib/wine/vkd3d-proton/*.dll $(BUILD_ROOT)/vkd3d-proton/lib/wine/vkd3d-proton/ && \ vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) lsteamclient && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/vkd3d-proton/*.dll $(BUILD_ROOT)/vkd3d-proton/lib64/wine/vkd3d-proton/ cp -f $(BUILD_DIR)/dist/dist/lib/wine/lsteamclient.dll.so /vagrant/lsteamclient/lib/wine && \
cp -f $(BUILD_DIR)/dist/dist/lib64/wine/lsteamclient.dll.so /vagrant/lsteamclient/lib64/wine'
lsteamclient: | $(BUILD_ROOT)/lsteamclient/lib/wine/i386-windows vrclient: configure
lsteamclient: | $(BUILD_ROOT)/lsteamclient/lib/wine/i386-unix mkdir -p vagrant_share/vrclient/lib/wine
lsteamclient: | $(BUILD_ROOT)/lsteamclient/lib64/wine/x86_64-windows mkdir -p vagrant_share/vrclient/lib64/wine
lsteamclient: | $(BUILD_ROOT)/lsteamclient/lib64/wine/x86_64-unix vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) vrclient && \
lsteamclient: any cp -f $(BUILD_DIR)/dist/dist/lib/wine/vrclient.dll.so /vagrant/vrclient/lib/wine && \
cp -f $(BUILD_DIR)/dist/files/lib/wine/i386-windows/lsteamclient.dll $(BUILD_ROOT)/lsteamclient/lib/wine/i386-windows/ && \ cp -f $(BUILD_DIR)/dist/dist/lib64/wine/vrclient_x64.dll.so /vagrant/vrclient/lib64/wine'
cp -f $(BUILD_DIR)/dist/files/lib/wine/i386-unix/lsteamclient.dll.so $(BUILD_ROOT)/lsteamclient/lib/wine/i386-unix/ && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-windows/lsteamclient.dll $(BUILD_ROOT)/lsteamclient/lib64/wine/x86_64-windows/ && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-unix/lsteamclient.dll.so $(BUILD_ROOT)/lsteamclient/lib64/wine/x86_64-unix/
vrclient: | $(BUILD_ROOT)/vrclient/lib/wine/i386-windows wineopenxr: configure
vrclient: | $(BUILD_ROOT)/vrclient/lib/wine/i386-unix mkdir -p vagrant_share/wineopenxr/lib64/wine
vrclient: | $(BUILD_ROOT)/vrclient/lib64/wine/x86_64-windows vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) wineopenxr && \
vrclient: | $(BUILD_ROOT)/vrclient/lib64/wine/x86_64-unix cp -f $(BUILD_DIR)/dist/dist/lib64/wine/wineopenxr.dll.so /vagrant/wineopenxr/lib64/wine'
vrclient: any
cp -f $(BUILD_DIR)/dist/files/lib/wine/i386-windows/vrclient.dll $(BUILD_ROOT)/vrclient/lib/wine/i386-windows/ && \
cp -f $(BUILD_DIR)/dist/files/lib/wine/i386-unix/vrclient.dll.so $(BUILD_ROOT)/vrclient/lib/wine/i386-unix/ && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-windows/vrclient_x64.dll $(BUILD_ROOT)/vrclient/lib64/wine/x86_64-windows/ && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-unix/vrclient_x64.dll.so $(BUILD_ROOT)/vrclient/lib64/wine/x86_64-unix/
wineopenxr: | $(BUILD_ROOT)/wineopenxr/lib64/wine/x86_64-windows
wineopenxr: | $(BUILD_ROOT)/wineopenxr/lib64/wine/x86_64-unix
wineopenxr: any
cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-windows/wineopenxr.dll $(BUILD_ROOT)/wineopenxr/lib64/wine/x86_64-windows/ && \
cp -f $(BUILD_DIR)/dist/files/lib64/wine/x86_64-unix/wineopenxr.dll.so $(BUILD_ROOT)/wineopenxr/lib64/wine/x86_64-unix/
battleye: | $(BUILD_ROOT)/battleye/v1/lib/wine/i386-windows
battleye: | $(BUILD_ROOT)/battleye/v1/lib/wine/i386-unix
battleye: | $(BUILD_ROOT)/battleye/v1/lib64/wine/x86_64-windows
battleye: | $(BUILD_ROOT)/battleye/v1/lib64/wine/x86_64-unix
battleye: any
cp -f $(BUILD_DIR)/dist-battleye/v1/lib/wine/i386-windows/beclient.dll $(BUILD_ROOT)/battleye/v1/lib/wine/i386-windows/ && \
cp -f $(BUILD_DIR)/dist-battleye/v1/lib/wine/i386-unix/beclient.dll.so $(BUILD_ROOT)/battleye/v1/lib/wine/i386-unix/ && \
cp -f $(BUILD_DIR)/dist-battleye/v1/lib64/wine/x86_64-windows/beclient_x64.dll $(BUILD_ROOT)/battleye/v1/lib64/wine/x86_64-windows/ && \
cp -f $(BUILD_DIR)/dist-battleye/v1/lib64/wine/x86_64-unix/beclient_x64.dll.so $(BUILD_ROOT)/battleye/v1/lib64/wine/x86_64-unix/
$(BUILD_ROOT)/%:
mkdir -p $@

File diff suppressed because it is too large Load diff

@ -1 +1 @@
Subproject commit 8899a91c17ce9618f565f42408b47db1d6e9ccc7 Subproject commit 5197afbf199c026eca82a47a8573ed10b0c6fa4e

429
README.md
View file

@ -1,267 +1,248 @@
---
Introduction Introduction
------------ ---
Proton is a tool for use with the Steam client which allows games which are
**Proton** is a tool for use with the Steam client which allows games which are
exclusive to Windows to run on the Linux operating system. It uses Wine to exclusive to Windows to run on the Linux operating system. It uses Wine to
facilitate this. facilitate this.
**Most users should use Proton provided by the Steam Client itself.** See Most users will prefer to use Proton provided by the Steam client itself. The
[this Steam Community post][steam-play-introduction] for more details. source code is provided to enable advanced users the ability to alter
Proton. For example, some users may wish to use a different version of Wine with
a particular title.
The source code is provided to enable advanced users the ability to alter ---
Proton. For example, some users may wish to use a different version of Wine Getting Started with Proton from Steam Play
with a particular title. ---
* As the new Steam Play is still in Beta, it is recommended that you opt into the [Steam Client Beta](https://steamcommunity.com/sharedfiles/filedetails/?id=182912431) for the latest features and fixes.
* Proton requires graphics drivers that are more recent than what is typically packaged in most distributions; please read the [list of requirements and quickstart for Ubuntu 18.04 users](https://github.com/ValveSoftware/Proton/wiki/Requirements)
* Install and play games! Please refer to [this post](https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561) for more information.
* Visit the [changelog](https://github.com/ValveSoftware/Proton/wiki/Changelog) for information about recent updates.
**The changelog** is available on [our wiki][changelog]. ---
Obtaining Proton from source
---
**NOTE:** If you are not comfortable in a command line terminal, or if you find
any of the information presented in here strange and uncomfortable, then
this is probably not for you. The instructions are likely to be incomplete
and require some knowledge and skill on your part, and there is no warranty
or guarantee that anyone will help you with this process.
[steam-play-introduction]: https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561 We strongly recommend that most users use the production build of Proton.
[changelog]: https://github.com/ValveSoftware/Proton/wiki/Changelog
Obtaining Proton sources
------------------------
Acquire Proton's source by cloning <https://github.com/ValveSoftware/Proton> Acquire Proton's source by cloning <https://github.com/ValveSoftware/Proton>
and checking out the branch you desire. and checking out the branch you desire. Be sure to update submodules when
switching branches.
You can clone the latest Proton to your system with this command: You can clone the latest Proton to your system with this command:
```bash git clone --recurse-submodules https://github.com/ValveSoftware/Proton.git proton
git clone --recurse-submodules https://github.com/ValveSoftware/Proton.git proton cd proton
```
Be sure to update submodules when switching between branches: If you wish to change any subcomponent, now is the time to do so.
For example, if you wish make changes to Wine, you would apply those
changes to the <tt>wine/</tt> directory.
```bash ---
git checkout experimental_6.3 Easy build path
git submodule update --init --recursive ---
```
If you want to change any subcomponent, now is the time to do so. For Building Proton is quite complicated. We provide a top-level Makefile which
example, if you wish to make changes to Wine, you would apply them to the will execute most of the build commands for you. This section describes how to
`wine/` directory. use this Makefile for simple Proton builds.
This Makefile uses a virtual machine to create a consistent build environment.
The VM is managed with [Vagrant](https://www.vagrantup.com/), which you will
need to install before invoking these commands. Proton's build system is most
well tested with Vagrant's VirtualBox and libvirt/qemu backends. It also
requires the vagrant-sshfs plugin. You may run into problems with the shared
folder (`vagrant_share`) and/or CPU and memory usage with other backends.
Building Proton If your build VM gets cluttered, or falls out of date, you can use `vagrant
--------------- destroy` to wipe the VM clean, then invoke one of the below commands to start
over.
Most of Proton builds inside the Proton SDK container with very few After checking out Proton and updating its submodules, you can use these
dependencies on the host side. targets to build Proton:
## Preparing the build environment `make install` - This will install Proton into your user's Steam directory.
You may need to restart the Steam client to see it. The tool's name in the
Steam client will be based on the currently checked out branch of Proton. You
can override this name using the `build_name` variable.
You need either a Docker or a Podman setup. We highly recommend [the rootless `make redist` - This will create a build which you can easily redistribute to
Podman setup][rootless-podman]. Please refer to your distribution's other users. The package will be dropped into a new directory in
documentation for setup instructions (e.g. Arch [Podman][arch-podman] / `vagrant_share/`, named after the nearest Git tag (see `git describe`). Copying
[Docker][arch-docker], Debian [Podman][debian-podman] / this directory into `~/.steam/root/compatibilitytools.d/` will make the build
[Docker][debian-docker]). available after restarting the Steam client.
[rootless-podman]: https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md `make deploy` - This will create a deployment tarball and set of files which
[arch-podman]: https://wiki.archlinux.org/title/Podman can be distributed as a Proton package. This is what we use to deploy Proton to
[arch-docker]: https://wiki.archlinux.org/title/Docker Steam users. The package will be dropped into a new directory in
[debian-podman]: https://wiki.debian.org/Podman `vagrant_share/`, named after the nearest Git tag (see `git describe`).
[debian-docker]: https://wiki.debian.org/Docker
`make clean` - This will completely erase the build tree in the VM.
## The Easy Way `make help` - View the Makefile documentation and examples.
We provide a top-level Makefile which will execute most of the build commands We also provide targets useful for simple Wine development:
for you.
After checking out the repository and updating its submodules, assuming that `make proton` - This will build Proton without copying its files out of the VM.
you have a working Docker or Podman setup, you can build and install Proton
with a simple:
```bash `make module=<module> module` - This will build both 32- and 64-bit versions of
make install the specified module, and copy the result into the `vagrant_share` directory.
``` This allows rapid iteration on one module. This target is only useful after
building Proton.
If your build system is missing dependencies, it will fail quickly with a clear `make dxvk` - This will rebuild DXVK and copy it into `vagrant_share`.
error message.
After the build finishes, you may need to restart the Steam client to see the If you are doing significant Wine development or want to control the build with
new Proton tool. The tool's name in the Steam client will be based on the more fine detail, see the full documentation below.
currently checked out branch of Proton. You can override this name using the
`build_name` variable.
See `make help` for other build targets and options. ---
Building
---
At a high level, the build instructions are:
1. Set up your build environment
1. Configure the build
1. Build Proton
1. Install Proton locally (optional)
See below for more details on all of these steps. Please read all of the
instructions before proceeding.
## Manual building ---
Set up the build environment
---
Proton has a lot of build-time dependencies. The following instructions
describe how we create the build environment for the production builds of
Proton. For reproducibility and security reasons, we will be setting up a
Debian virtual machine. However, you should be able to follow these
instructions on other distributions as well.
### Configuring the build Proton provides a Vagrantfile, which will automatically set up the Debian VM
for you. After installing [Vagrant](https://www.vagrantup.com/), initialize the
VM by running from within the Proton directory:
```bash vagrant up
mkdir ../build && cd ../build
../proton/configure.sh --enable-ccache --build-name=my_build
```
Running `configure.sh` will create a `Makefile` allowing you to build Proton. It will take a long time to download and install the Steam runtime containers
The scripts checks if containers are functional and prompt you if any and so on. Eventually it will complete. You can SSH into the virtual machine
host-side dependencies are missing. You should run the command from a with:
directory created specifically for your build.
The configuration script tries to discover a working Docker or Podman setup vagrant ssh
to use, but you can force a compatible engine with
`--container-engine=<executable_name>`.
You can enable ccache with `--enable-cache` flag. This will mount your At this point you will need to configure the build directory. See below.
`$CCACHE_DIR` or `$HOME/.ccache` inside the container.
`--proton-sdk-image=registry.gitlab.steamos.cloud/proton/soldier/sdk:<version>` The Vagrantfile is set up to rsync the `proton` directory into the VM on boot.
can be used to build with a custom version of the Proton SDK images. On the host machine, you can use `vagrant rsync-auto` to have Vagrant
automatically sync changes on your host machine into the build machine. It is
recommended that you make changes on your host machine, and then perform the
build in the VM. Any changes you make in the `proton` directory on the VM may
be overwritten by later rsync updates from the host machine.
Check `--help` for other configuration options. The Vagrantfile also creates a directory called `vagrant_share` in the `proton`
directory of your host machine, which is mounted at `/vagrant` within the VM.
You can use this shared folder to move your Proton build out of the VM, or as
one way to copy files into the VM.
NOTE: If **SELinux** is in use, the Proton build container may fail to access When you are done with the VM, you can shut it down from the host machine:
your user's files. This is caused by [SELinux's filesystem
labels][selinux-labels]. You may pass the `--relabel-volumes` switch to
configure to cause the [container engine to relabel its
bind-mounts][bind-mounts] and allow access to those files from within the
container. This can be dangerous when used with system directories. Proceed
with caution and refer your container engine's manual.
[selinux-labels]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-working_with_selinux-selinux_contexts_labeling_files vagrant halt
[bind-mounts]: https://docs.docker.com/storage/bind-mounts/
Please read the Vagrant documentation for more information about how to use
Vagrant VMs.
### Building If you do not wish to use Vagrant, you can read through both Vagrantfile and
`vagrant-user-setup.sh` for the list of dependencies and instructions on how to
set up your own machine or another VM of your choosing. It is aimed at Debian
10, but you should be able to adapt them for other distributions.
``` ---
make Alternative: Building without the Steam Runtime
``` ---
The Steam Runtime provides a clean and consistent set of libraries. Software
distributed through Steam should depend only on libraries available through the
runtime, and so we build in that environment for production Proton builds. The
Vagrantfile described above will set this up for you. However, if you are
simply making a build for yourself, you may want to skip setting up the Steam
runtime, as it takes a very long time to set up. To do this, edit the
`vagrant-user-setup.sh` script appropriately before running `vagrant up`.
**Important make targets:** ---
Configure the build
---
After setting up the build system, it is time to run the configure script which
will generate the Makefile to build your project. Run these steps. You may of
course use whatever paths you like.
`make install` - install Proton into your user's Steam directory, see the [install Proton mkdir build/
locally](#install-proton-locally) section for details. cd build
../proton/configure.sh --steam-runtime-image=steam-proton-dev
`make redist` - create a redistribute build (`redist/`) that can be copied to If you are building without the Steam runtime, then instead use:
`~/.steam/root/compatibilitytools.d/`.
`make deploy` - create a deployment build (`deploy/`). This is what we use to ../proton/configure.sh --no-steam-runtime
deploy Proton to Steam users via Steamworks.
`make module=<module> module` - build both 32- and 64-bit versions of the **Tip**: If you are building without the Steam runtime, you should now run
specified wine module. This allows rapid iteration on one module. This target `make obj-wine64/Makefile obj-wine32/Makefile` and check the files
is only useful after building Proton. `obj-wine64/config.log` and `obj-wine32/config.log` for missing packages.
Search for `won't be supported`. A couple of missing packages are normal:
`opencv`, `oss`. More than that may indicate a problem. Please see your
distro's documentation to acquire the considerable build dependencies for Wine.
`make dxvk` / `make vkd3d-proton` - rebuild DXVK / vkd3d-proton. ---
Build Proton
---
A couple of Makefile targets are provided.
`make dist` will create a Proton installation in `dist/` that you can install
manually (see below), or automatically with `make install`.
### Debug Builds `make deploy` will package Proton up for distribution via Steamworks.
To prevent symbol stripping add `UNSTRIPPED_BUILD=1` to the `make`
invocation. This should be used only with a clean build directory.
E.g.:
```
mkdir ../debug-proton-build && cd ../debug-proton-build
../proton/configure.sh --enable-ccache --build-name=debug_build
make UNSTRIPPED_BUILD=1 install
```
---
Install Proton locally Install Proton locally
---------------------- ---
Steam ships with several versions of Proton, which games will use by default or Steam ships with several versions of Proton, which games will use by default or
that you can select in Steam Settings' Steam Play page. Steam also supports that you can select in Steam Settings's SteamPlay page. Steam also supports
running games with local builds of Proton, which you can install on your running games with local builds of Proton, which you can install on your
machine. machine. The `install` target will perform the below steps for you.
To install a local build of Proton into Steam, make a new directory in To install a local build of Proton into Steam, make a new directory in
`~/.steam/root/compatibilitytools.d/` with a tool name of your choosing and `~/.steam/root/compatibilitytools.d/` with a tool name of your choosing and
place the directory containing your redistributable build under that path. place the contents of `dist` into that folder. The `make install` target will
perform this task for you, installing the Proton build into the Steam folder
for the current user. You will have to restart the Steam client for it to pick
up on a new tool.
The `make install` target will perform this task for you, installing the A correct local tool installation should look like this:
Proton build into the Steam folder for the current user. You will have to
restart the Steam client for it to pick up on a new tool.
A correct local tool installation should look similar to this: compatibilitytools.d/my_proton/
├── compatibilitytool.vdf
``` ├── filelock.py
compatibilitytools.d/my_proton/ ├── LICENSE
├── compatibilitytool.vdf ├── proton
├── filelock.py ├── proton_dist.tar
├── LICENSE ├── toolmanifest.vdf
├── proton ├── user_settings.sample.py
├── proton_dist.tar └── version
├── toolmanifest.vdf
├── user_settings.sample.py
└── version
```
To enable your local build in Steam, go to the Steam Play section of the To enable your local build in Steam, go to the Steam Play section of the
Settings window. If the build was correctly installed, you should see Settings window. If the build was correctly installed, you should see
"proton-localbuild" in the drop-down list of compatibility tools. "proton-localbuild" in the drop-down list of compatibility tools.
Each component of this software is used under the terms of their licenses. Each component of this software is used under the terms of their licenses. See
See the `LICENSE` files here, as well as the `LICENSE`, `COPYING`, etc files the <tt>LICENSE</tt> files here, as well as the <tt>LICENSE</tt>,
in each submodule and directory for details. If you distribute a built <tt>COPYING</tt>, etc files in each submodule and directory for details. If you
version of Proton to other users, you must adhere to the terms of these distribute a built version of Proton to other users, you must adhere to the
licenses. terms of these licenses.
Debugging
---------
Proton builds have their symbols stripped by default. You can switch to
"debug" beta branch in Steam (search for Proton in your library,
Properties... -> BETAS -> select "debug") or build without stripping (see
[Debug Builds section](#debug-builds)).
The symbols are provided through the accompanying `.debug` files which may
need to be explicitly loaded by the debugging tools. For GDB there's a helper
script `wine/tools/gdbinit.py` (source it) that provides `load-symbol-files`
(or `lsf` for short) command which loads the symbols for all the mapped files.
For tips on debugging see [docs/DEBUGGING.md](docs/DEBUGGING.md).
`compile_commands.json`
-----------------------
For use with [clangd](https://clangd.llvm.org/) LSP server and similar tooling.
Projects built using cmake or meson (e.g. vkd3d-proton) automatically come with
`compile_commands.json`. For autotools (e.g. wine) you have to [configure the
build](#configuring-the-build) with `--enable-bear` that uses
[bear](https://github.com/rizsotto/Bear) to create the compilation database.
It's not on by default as it make the build slightly slower.
The build system collects all the created compile_commands.json files in a
build subdirectory named `compile_commands/`.
The paths are translated to point to the real source (i.e. not the rsynced
copy). It still may depend on build directory for things like auto-generated
`config.h` though and for wine it may be beneficial to run `tools/make_requests`
in you source directories as those changes are not committed.
You can then configure your editor to use that file for clangd in a few ways:
1) directly - some editors/plugins allow you to specify the path to `compile_commands.json`
2) via `.clangd` file, e.g.
```bash
cd src/proton/wine/
cat > .clangd <<EOF
CompileFlags:
CompilationDatabase: ../build/current-dev/compile_commands/wine64/
EOF
```
3) by symlinking:
```bash
ln -s ../build/current-dev/compile_commands/wine64/compile_commands.json .
```
----
Runtime Config Options Runtime Config Options
---------------------- ----
Proton can be tuned at runtime to help certain games run. The Steam client sets Proton can be tuned at runtime to help certain games run. The Steam client sets
some options for known games using the `STEAM_COMPAT_CONFIG` variable. some options for known games using the <tt>STEAM_COMPAT_CONFIG</tt> variable.
You can override these options using the environment variables described below. You can override these options using the environment variables described below.
The best way to set these environment overrides for all games is by renaming The best way to set these environment overrides for all games is by renaming
@ -275,42 +256,36 @@ Steam client. Set the variable, followed by `%command%`. For example, input
"`PROTON_USE_WINED3D=1 %command%`" to use the OpenGL-based wined3d renderer "`PROTON_USE_WINED3D=1 %command%`" to use the OpenGL-based wined3d renderer
instead of the Vulkan-based DXVK renderer. instead of the Vulkan-based DXVK renderer.
To enable an option, set the variable to a non-`0` value. To disable an To enable an option, set the variable to a non-<tt>0</tt> value. To disable an
option, set the variable to `0`. To use Steam's default configuration, do option, set the variable to <tt>0</tt>. To use Steam's default configuration, do
not specify the variable at all. not specify the variable at all.
All of the below are runtime options. They do not effect permanent changes to All of the below are runtime options. They do not effect permanent changes to
the Wine prefix. Removing the option will revert to the previous behavior. the Wine prefix. Removing the option will revert to the previous behavior.
| Compat config string | Environment Variable | Description | | Compat config string | Environment Variable | Description |
| :-------------------- | :--------------------------------- | :----------- | | :-------------------- | :----------------------------- | :----------- |
| | `PROTON_LOG` | Convenience method for dumping a useful debug log to `$PROTON_LOG_DIR/steam-$APPID.log`. Set to `1` to enable default logging, or set to a string to be appended to the default `WINEDEBUG` channels. | | | <tt>PROTON_LOG</tt> | Convenience method for dumping a useful debug log to `$PROTON_LOG_DIR/steam-$APPID.log` For more thorough logging, use `user_settings.py`. |
| | `PROTON_LOG_DIR` | Output log files into the directory specified. Defaults to your home directory. | | | <tt>PROTON_LOG_DIR</tt> | Output log files into the directory specified. Defaults to your home directory. |
| | `PROTON_WAIT_ATTACH` | Wait for a debugger to attach to steam.exe before launching the game process. To attach to the game process at startup, debuggers should be set to follow child processes. | | | <tt>PROTON_DUMP_DEBUG_COMMANDS</tt> | When running a game, Proton will write some useful debug scripts for that game into `$PROTON_DEBUG_DIR/proton_$USER/`. |
| | `PROTON_CRASH_REPORT_DIR` | Write crash logs into this directory. Does not clean up old logs, so may eat all your disk space eventually. | | | <tt>PROTON_DEBUG_DIR</tt> | Root directory for the Proton debug scripts, `/tmp` by default. |
| `wined3d` | `PROTON_USE_WINED3D` | Use OpenGL-based wined3d instead of Vulkan-based DXVK for d3d11, d3d10, and d3d9. | | <tt>wined3d</tt> | <tt>PROTON_USE_WINED3D</tt> | Use OpenGL-based wined3d instead of Vulkan-based DXVK for d3d11, d3d10, and d3d9. |
| `nod3d11` | `PROTON_NO_D3D11` | Disable `d3d11.dll`, for d3d11 games which can fall back to and run better with d3d9. | | <tt>nod3d11</tt> | <tt>PROTON_NO_D3D11</tt> | Disable <tt>d3d11.dll</tt>, for d3d11 games which can fall back to and run better with d3d9. |
| `nod3d10` | `PROTON_NO_D3D10` | Disable `d3d10.dll` and `dxgi.dll`, for d3d10 games which can fall back to and run better with d3d9. | | <tt>nod3d10</tt> | <tt>PROTON_NO_D3D10</tt> | Disable <tt>d3d10.dll</tt> and <tt>dxgi.dll</tt>, for d3d10 games which can fall back to and run better with d3d9. |
| `dxvkd3d8` | `PROTON_DXVK_D3D8` | Use DXVK's `d3d8.dll`. | | <tt>noesync</tt> | <tt>PROTON_NO_ESYNC</tt> | Do not use eventfd-based in-process synchronization primitives. |
| `noesync` | `PROTON_NO_ESYNC` | Do not use eventfd-based in-process synchronization primitives. | | <tt>nofsync</tt> | <tt>PROTON_NO_FSYNC</tt> | Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no `FUTEX_WAIT_MULTIPLE` support.) |
| `nofsync` | `PROTON_NO_FSYNC` | Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems with no `FUTEX_WAIT_MULTIPLE` support.) | | <tt>nativevulkanloader</tt> | | Use the Vulkan loader shipped with the game instead of Proton's built-in Vulkan loader. This breaks VR support, but is required by a few games. |
| `noxim` | `PROTON_NO_XIM` | Enabled by default. Do not attempt to use XIM (X Input Methods) support. XIM support is known to cause crashes with libx11 older than version 1.7. | | <tt>forcelgadd</tt> | <tt>PROTON_FORCE_LARGE_ADDRESS_AWARE</tt> | Force Wine to enable the LARGE_ADDRESS_AWARE flag for all executables. Enabled by default. |
| `disablenvapi` | `PROTON_DISABLE_NVAPI` | Disable NVIDIA's NVAPI GPU support library. | | <tt>gamedrive</tt> | <tt>PROTON_SET_GAME_DRIVE</tt> | Create an S: drive which points to the Steam Library which contains the game. |
| `nativevulkanloader` | | Use the Vulkan loader shipped with the game instead of Proton's built-in Vulkan loader. This breaks VR support, but is required by a few games. | | <tt>noforcelgadd</tt> | | Disable forcelgadd. If both this and `forcelgadd` are set, enabled wins. |
| `forcelgadd` | `PROTON_FORCE_LARGE_ADDRESS_AWARE` | Force Wine to enable the LARGE_ADDRESS_AWARE flag for all executables. Enabled by default. | | <tt>oldglstr</tt> | <tt>PROTON_OLD_GL_STRING</tt> | Set some driver overrides to limit the length of the GL extension string, for old games that crash on very long extension strings. |
| `heapdelayfree` | `PROTON_HEAP_DELAY_FREE` | Delay freeing some memory, to work around application use-after-free bugs. | | <tt>vkd3dfl12</tt> | | Force the Direct3D 12 feature level to 12, regardless of driver support. |
| `gamedrive` | `PROTON_SET_GAME_DRIVE` | Create an S: drive which points to the Steam Library which contains the game. | | <tt>vkd3dbindlesstb</tt>| | Put `force_bindless_texel_buffer` into `VKD3D_CONFIG`. |
| `noforcelgadd` | | Disable forcelgadd. If both this and `forcelgadd` are set, enabled wins. | | <tt>hidenvgpu</tt> | <tt>PROTON_HIDE_NVIDIA_GPU</tt>| Force Nvidia GPUs to always be reported as AMD GPUs. Some games require this if they depend on Windows-only Nvidia driver functionality. See also DXVK's nvapiHack config, which only affects reporting from Direct3D. |
| `oldglstr` | `PROTON_OLD_GL_STRING` | Set some driver overrides to limit the length of the GL extension string, for old games that crash on very long extension strings. | | | <tt>WINE_FULLSCREEN_INTEGER_SCALING</tt> | Enable integer scaling mode, to give sharp pixels when upscaling. |
| `vkd3dfl12` | | Force the Direct3D 12 feature level to 12, regardless of driver support. | | <tt>cmdlineappend:</tt>| | Append the string after the colon as an argument to the game command. May be specified more than once. Escape commas and backslashes with a backslash. |
| `vkd3dbindlesstb` | | Put `force_bindless_texel_buffer` into `VKD3D_CONFIG`. | | <tt>nowritewatch</tt> | <tt>PROTON_NO_WRITE_WATCH</tt> | Disable support for memory write watches in ntdll. This is a very dangerous hack and should only be applied if you have verified that the game can operate without write watches. This improves performance for some very specific games (e.g. CoreRT-based games). |
| `nomfdxgiman` | `WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER` | Enable hack to work around video issues in some games due to incomplete IMFDXGIDeviceManager support. | | <tt>seccomp</tt> | <tt>PROTON_USE_SECCOMP</tt> | **Note: Obsoleted in Proton 5.13.** In older versions, enable seccomp-bpf filter to emulate native syscalls, required for some DRM protections to work. |
| `noopwr` | `WINE_DISABLE_VULKAN_OPWR` | Enable hack to disable Vulkan other process window rendering which sometimes causes issues on Wayland due to blit being one frame behind. | | <tt>d9vk</tt> | <tt>PROTON_USE_D9VK</tt> | **Note: Obsoleted in Proton 5.0.** In older versions, use Vulkan-based DXVK instead of OpenGL-based wined3d for d3d9. |
| `hidenvgpu` | `PROTON_HIDE_NVIDIA_GPU` | Force Nvidia GPUs to always be reported as AMD GPUs. Some games require this if they depend on Windows-only Nvidia driver functionality. See also DXVK's nvapiHack config, which only affects reporting from Direct3D. |
| | `WINE_FULLSCREEN_INTEGER_SCALING` | Enable integer scaling mode, to give sharp pixels when upscaling. |
| `cmdlineappend:` | | Append the string after the colon as an argument to the game command. May be specified more than once. Escape commas and backslashes with a backslash. |
| `xalia` | `PROTON_USE_XALIA` | Enable Xalia, a program that can add a gamepad UI for some keyboard/mouse interfaces. |
| `seccomp` | `PROTON_USE_SECCOMP` | **Note: Obsoleted in Proton 5.13.** In older versions, enable seccomp-bpf filter to emulate native syscalls, required for some DRM protections to work. |
| `d9vk` | `PROTON_USE_D9VK` | **Note: Obsoleted in Proton 5.0.** In older versions, use Vulkan-based DXVK instead of OpenGL-based wined3d for d3d9. |
<!-- Target: GitHub Flavor Markdown. To test locally: pandoc -f markdown_github -t html README.md --> <!-- Target: GitHub Flavor Markdown. To test locally: pandoc -f markdown_github -t html README.md -->

@ -1 +0,0 @@
Subproject commit 6cae8216a6ea19ff3f237af01e54378c1ff81fcd

112
Vagrantfile vendored Normal file
View file

@ -0,0 +1,112 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">= 2.2.0"
module OS
def OS.windows?
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
end
def OS.mac?
(/darwin/ =~ RUBY_PLATFORM) != nil
end
def OS.unix?
!OS.windows?
end
def OS.linux?
OS.unix? and not OS.mac?
end
end
# Vagrant file for setting up a build environment for Proton.
if OS.linux?
cpus = `nproc`.to_i
# meminfo shows KB and we need to convert to MB
memory = `grep 'MemTotal' /proc/meminfo | sed -e 's/MemTotal://' -e 's/ kB//'`.to_i / 1024 / 2
elsif OS.mac?
cpus = `sysctl -n hw.physicalcpu`.to_i
# sysctl shows bytes and we need to convert to MB
memory = `sysctl hw.memsize | sed -e 's/hw.memsize: //'`.to_i / 1024 / 1024 / 2
else
cpus = 1
memory = 1024
puts "Vagrant launched from unsupported platform."
end
memory = [memory, 4096].max
puts "Platform: " + cpus.to_s + " CPUs, " + memory.to_s + " MB memory"
Vagrant.configure(2) do |config|
#libvirt doesn't have a decent synced folder, so we have to use vagrant-sshfs.
#This is not needed for virtualbox, but I couldn't find a way to use a
#different synced folder type per provider, so we always use it.
config.vagrant.plugins = "vagrant-sshfs"
config.vm.provider "virtualbox" do |v|
v.cpus = [cpus, 32].min # virtualbox limit is 32 cpus
v.memory = memory
end
config.vm.provider "libvirt" do |v|
v.cpus = cpus
v.memory = memory
v.random_hostname = true
v.default_prefix = ENV['USER'].to_s.dup.concat('_').concat(File.basename(Dir.pwd))
end
#debian10-based build VM
config.vm.define "debian10", primary: true do |debian10|
debian10.vm.box = "generic/debian10"
debian10.vm.synced_folder "./vagrant_share/", "/vagrant/", create: true, type: "sshfs", sshfs_opts_append: "-o cache=no"
debian10.vm.synced_folder ".", "/home/vagrant/proton", id: "proton", type: "rsync", rsync__exclude: ["vagrant_share"]
debian10.vm.provision "shell", privileged: "true", inline: <<-SHELL
#install docker and steam-runtime dependencies
dpkg --add-architecture i386
apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
#add docker repo
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"
#install host build-time dependencies
apt-get update
apt-get install -y ccache texinfo gpgv2 gnupg2 git docker-ce docker-ce-cli containerd.io \
fontforge-nox python-debian python-pip meson libmpc-dev libmpc-dev:i386 \
gcc g++ gcc-i686-linux-gnu g++-i686-linux-gnu binutils-i686-linux-gnu \
gcc-mingw-w64-i686 gcc-mingw-w64-x86-64 \
g++-mingw-w64-i686 g++-mingw-w64-x86-64
update-alternatives --set x86_64-w64-mingw32-gcc `which x86_64-w64-mingw32-gcc-posix`
update-alternatives --set x86_64-w64-mingw32-g++ `which x86_64-w64-mingw32-g++-posix`
update-alternatives --set i686-w64-mingw32-gcc `which i686-w64-mingw32-gcc-posix`
update-alternatives --set i686-w64-mingw32-g++ `which i686-w64-mingw32-g++-posix`
#install adobe font devkit to build source san hans
pip install afdko
#allow vagrant user to run docker
adduser vagrant docker
#add steamrt docker
docker pull registry.gitlab.steamos.cloud/steamrt/soldier/sdk
docker image tag registry.gitlab.steamos.cloud/steamrt/soldier/sdk steam-proton-dev
#allow user to run stuff in steamrt
sysctl kernel.unprivileged_userns_clone=1
mkdir -p /etc/sysctl.d/
echo kernel.unprivileged_userns_clone=1 > /etc/sysctl.d/docker_user.conf
# the script below will set up the steam-runtime docker containers
sudo -u vagrant /home/vagrant/proton/vagrant-user-setup.sh
#ensure we use only the mingw-w64 that we built
apt-get remove -y '*mingw-w64*'
SHELL
end
end

@ -1 +0,0 @@
Subproject commit 8c1c27d5a9b9de8a17f500053bd08c7ca6bba19c

229
build-mingw-w64.sh Executable file
View file

@ -0,0 +1,229 @@
#!/bin/bash
set -e
# We need two cross-compilers to build Proton:
#
# 64-bit cross-compiler:
# Build (where the compiler is built): 64-bit linux (our VM)
# Host (where the compiler is run): 64-bit linux (64-bit Steam runtime)
# Target (what the compiler outputs): 64-bit win32 (PE files to be run)
#
# 32-bit cross-compiler:
# Build (where the compiler is built): 64-bit linux (our VM)
# Host (where the compiler is run): 64-bit linux (64-bit Steam runtime)
# Target (what the compiler outputs): 32-bit win32 (PE files to be run)
if [ -z "$1" ]; then
echo "Makes a local build of mingw-w64 in this directory and installs it to the given path."
echo ""
echo "Note: Requires a system mingw-w64 compiler to be present already on your build machine, for us to bootstrap with."
echo ""
echo "usage:"
echo -e "\t$0 <installation path e.g. \$HOME/.local>"
exit 1
fi
if [ -z "$MAKEFLAGS" ]; then
JOBS=-j$(($(nproc) - 1))
fi
DST_DIR="$1"
BINUTILS_VER=2.35
BINUTILS_SRCTARBALL=binutils-$BINUTILS_VER.tar.xz
BINUTILS_URL="https://ftp.gnu.org/gnu/binutils/$BINUTILS_SRCTARBALL"
BINUTILS_SRCDIR=binutils-$BINUTILS_VER
GCC_VER=9.3.0
GCC_SRCTARBALL=gcc-$GCC_VER.tar.xz
GCC_URL="https://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/$GCC_SRCTARBALL"
GCC_SRCDIR=gcc-$GCC_VER
MINGW_W64_GITVER=v8.0.0
MINGW_W64_GITURL="git://git.code.sf.net/p/mingw-w64/mingw-w64"
MINGW_W64_SRCDIR=mingw-w64-git
ISL_VER=0.22.1
ISL_SRCTARBALL=isl-$ISL_VER.tar.bz2
ISL_URL="http://isl.gforge.inria.fr/isl-$ISL_VER.tar.bz2"
ISL_SRCDIR=isl-$ISL_VER
function setup_src {
if [ ! -e "$BINUTILS_SRCTARBALL" ]; then
wget -O "$BINUTILS_SRCTARBALL" "$BINUTILS_URL"
fi
if [ ! -e "$BINUTILS_SRCDIR" ]; then
tar -xf "$BINUTILS_SRCTARBALL"
fi
if [ ! -e "$ISL_SRCTARBALL" ]; then
wget -O "$ISL_SRCTARBALL" "$ISL_URL"
fi
if [ ! -e "$ISL_SRCDIR" ]; then
tar -xf "$ISL_SRCTARBALL"
fi
if [ ! -e "$GCC_SRCTARBALL" ]; then
wget -O "$GCC_SRCTARBALL" "$GCC_URL"
fi
if [ ! -e "$GCC_SRCDIR" ]; then
tar -xf "$GCC_SRCTARBALL"
ln -s ../$ISL_SRCDIR $GCC_SRCDIR/isl
for f in $(dirname $0)/mingw-w64-patches/gcc-*; do
patch -d "$GCC_SRCDIR" -p1 < $f
done
fi
if [ ! -e "$MINGW_W64_SRCDIR" ]; then
#shallow clone, we just want this one version
git clone -b $MINGW_W64_GITVER --depth 1 \
"$MINGW_W64_GITURL" "$MINGW_W64_SRCDIR"
fi
}
function build_arch {
BUILD_ARCH=$(gcc -dumpmachine) #machine which is building the compiler
HOST_ARCH=$1 #machine which will run the compiler
WIN32_TARGET_ARCH=$2 #machine which we are building for
NEWPATH=$DST_DIR/bin:$PATH
mkdir -p build-$WIN32_TARGET_ARCH/
pushd build-$WIN32_TARGET_ARCH/
mkdir -p binutils/
pushd binutils/
if [ ! -e Makefile ]; then
../../$BINUTILS_SRCDIR/configure \
--prefix=$DST_DIR/ \
--build=$BUILD_ARCH \
--host=$HOST_ARCH \
--target=$WIN32_TARGET_ARCH \
--enable-lto \
--enable-plugins \
--enable-deterministic-archives \
--disable-multilib \
--disable-nls \
--disable-werror \
$BINUTILS_EXTRA_CONFIGURE
fi
make $JOBS configure-host
make $JOBS LDFLAGS=-all-static
make $JOBS install
popd
mkdir -p mingw-w64-headers/
pushd mingw-w64-headers/
if [ ! -e Makefile ]; then
PATH=$NEWPATH:$PATH ../../$MINGW_W64_SRCDIR/mingw-w64-headers/configure \
--prefix=$DST_DIR/$WIN32_TARGET_ARCH/ \
--host=$WIN32_TARGET_ARCH \
--enable-sdk=all \
--enable-secure-api \
$MINGW_W64_HEADERS_EXTRA_CONFIGURE
fi
PATH=$NEWPATH:$PATH make $JOBS install
popd
mkdir -p gcc/
pushd gcc/
if [ ! -e Makefile ]; then
#arguments mostly taken from Arch AUR mingw-w64-gcc PKGBUILD,
#except "--disable-dw2-exceptions" swapped for "--disable-sjlj-exceptions --with-dwarf2"
#for performance reasons on 32-bit
LDFLAGS=-static PATH=$NEWPATH:$PATH ../../$GCC_SRCDIR/configure \
--prefix=$DST_DIR/ \
--build=$BUILD_ARCH \
--host=$HOST_ARCH \
--target=$WIN32_TARGET_ARCH \
--enable-static \
--enable-shared \
--enable-languages=c,lto,c++ \
--disable-multilib \
--enable-threads=posix \
--enable-fully-dynamic-string \
--enable-libstdcxx-time=yes \
--enable-libstdcxx-filesystem-ts=yes \
--enable-cloog-backend=isl \
--enable-libgomp \
--enable-lto \
--disable-sjlj-exceptions \
--with-dwarf2 \
$GCC_EXTRA_CONFIGURE
fi
PATH=$NEWPATH make $JOBS all-gcc
PATH=$NEWPATH make $JOBS install-gcc
popd
mkdir -p mingw-w64-crt/
pushd mingw-w64-crt/
if [ ! -e Makefile ]; then
PATH=$NEWPATH ../../$MINGW_W64_SRCDIR/mingw-w64-crt/configure \
--prefix=$DST_DIR/$WIN32_TARGET_ARCH/ \
--host=$WIN32_TARGET_ARCH \
--enable-wildcard \
$MINGW_W64_CRT_EXTRA_CONFIGURE
fi
PATH=$NEWPATH make $JOBS
PATH=$NEWPATH make $JOBS install
popd
mkdir -p mingw-w64-winpthreads/
pushd mingw-w64-winpthreads/
if [ ! -e Makefile ]; then
PATH=$NEWPATH ../../$MINGW_W64_SRCDIR/mingw-w64-libraries/winpthreads/configure \
--prefix=$DST_DIR/$WIN32_TARGET_ARCH/ \
--host=$WIN32_TARGET_ARCH \
--enable-static \
--enable-shared \
$MINGW_W64_WINPTHREADS_EXTRA_CONFIGURE
fi
PATH=$NEWPATH make $JOBS
PATH=$NEWPATH make $JOBS install
popd
pushd gcc/
#next step requires libgcc in default library location, but
#"canadian" build doesn't handle that(?), so install it explicitly
PATH=$NEWPATH make configure-target-libgcc
PATH=$NEWPATH make -C $WIN32_TARGET_ARCH/libgcc $JOBS
PATH=$NEWPATH make -C $WIN32_TARGET_ARCH/libgcc $JOBS install
#install libstdc++ and other stuff
PATH=$NEWPATH make $JOBS
PATH=$NEWPATH make $JOBS install
#libstdc++ requires that libstdc++ is installed in order to find gettimeofday(???)
#so, rebuild libstdc++ after installing it above
PATH=$NEWPATH make $JOBS -C $WIN32_TARGET_ARCH/libstdc++-v3/ distclean
PATH=$NEWPATH make $JOBS
PATH=$NEWPATH make $JOBS install
popd
mkdir -p mingw-w64-tools/widl
pushd mingw-w64-tools/widl/
if [ ! -e Makefile ]; then
PATH=$NEWPATH ../../../$MINGW_W64_SRCDIR/mingw-w64-tools/widl/configure \
--prefix=$DST_DIR/ \
--target=$WIN32_TARGET_ARCH \
--program-prefix="${WIN32_TARGET_ARCH}-"
fi
PATH=$NEWPATH make $JOBS
PATH=$NEWPATH make $JOBS install
popd
popd
}
setup_src
mkdir -p $DST_DIR
MINGW_W64_CRT_EXTRA_CONFIGURE="--disable-lib64 --enable-lib32" build_arch x86_64-linux-gnu i686-w64-mingw32
MINGW_W64_CRT_EXTRA_CONFIGURE="--disable-lib32 --enable-lib64" build_arch x86_64-linux-gnu x86_64-w64-mingw32
echo "Done!"

1688
build/makefile_base.mak Normal file

File diff suppressed because it is too large Load diff

View file

@ -19,9 +19,9 @@ if [[ $(tput colors 2>/dev/null || echo 0) -gt 0 ]]; then
COLOR_CLEAR=$'\e[0m' COLOR_CLEAR=$'\e[0m'
fi fi
sh_quote() { sh_quote() {
local quoted local quoted
quoted="$(printf '%q ' "$@")"; [[ $# -eq 0 ]] || echo "${quoted:0:-1}"; quoted="$(printf '%q ' "$@")"; [[ $# -eq 0 ]] || echo "${quoted:0:-1}";
} }
err() { echo >&2 "${COLOR_ERR}!!${COLOR_CLEAR} $*"; } err() { echo >&2 "${COLOR_ERR}!!${COLOR_CLEAR} $*"; }
stat() { echo >&2 "${COLOR_STAT}::${COLOR_CLEAR} $*"; } stat() { echo >&2 "${COLOR_STAT}::${COLOR_CLEAR} $*"; }
@ -31,50 +31,6 @@ die() { err "$@"; exit 1; }
finish() { stat "$@"; exit 0; } finish() { stat "$@"; exit 0; }
cmd() { showcmd "$@"; "$@"; } cmd() { showcmd "$@"; "$@"; }
#
# Dependency Checks
#
MISSING_DEPENDENCIES=0
dependency_command() {
local COMMAND=$1
shift
if ! command -v "$COMMAND" &> /dev/null; then
err "Couldn't find command '$COMMAND'. Please install ${@:-$COMMAND}."
MISSING_DEPENDENCIES=1
fi
}
CONTAINER_MOUNT_OPTS=""
check_container_engine() {
stat "Trying $1."
if ! cmd $1 run --rm $2; then
info "$1 is unable to run the container."
return 1
fi
touch permission_check
local inner_uid="$($1 run -v "$(pwd):/test$CONTAINER_MOUNT_OPTS" \
--rm $2 \
stat --format "%u" /test/permission_check 2>&1)"
rm permission_check
if [[ $inner_uid == *"Permission denied"* ]]; then
err "The container cannot access files. Are you using SELinux?"
die "Please read README.md and check your $1 setup works."
elif [ "$inner_uid" -eq 0 ]; then
# namespace maps the user as root or the build is performed as host's root
ROOTLESS_CONTAINER=1
elif [ "$inner_uid" -eq "$(id -u)" ]; then
ROOTLESS_CONTAINER=0
else
err "File owner's UID doesn't map to 0 or $(id -u) in the container."
die "Don't know how to map permissions. Please check your $1 setup."
fi
}
# #
# Configure # Configure
# #
@ -94,21 +50,11 @@ function escape_for_make() {
} }
function configure() { function configure() {
local steamrt_image="$arg_protonsdk_image" local steamrt_image="$1"
local steamrt_name="$2"
local srcdir local srcdir
srcdir="$(dirname "$0")" srcdir="$(dirname "$0")"
if [[ "$srcdir" = "." ]]; then
err "Cannot do a top level in-tree build."
die "Create a subdirectory in build/ or outside of the tree and run configure.sh from there."
fi
# nothing specified, getting the default value from the Makefile to test the
# container engine
if [[ -z $steamrt_image ]]; then
steamrt_image="$(sed -n 's/STEAMRT_IMAGE ?= //p' $SRCDIR/Makefile.in)"
fi
# Build name # Build name
local build_name="$arg_build_name" local build_name="$arg_build_name"
if [[ -n $build_name ]]; then if [[ -n $build_name ]]; then
@ -118,31 +64,6 @@ function configure() {
info "No build name specified, using default: $build_name" info "No build name specified, using default: $build_name"
fi fi
dependency_command make "GNU Make"
if [ "$MISSING_DEPENDENCIES" -ne 0 ]; then
die "Missing dependencies, cannot continue."
fi
if [[ -n "$arg_relabel_volumes" ]]; then
CONTAINER_MOUNT_OPTS=:Z
fi
if [[ -n "$arg_container_engine" ]]; then
check_container_engine "$arg_container_engine" "$steamrt_image" || die "Specified container engine \"$arg_container_engine\" doesn't work"
else
stat "Trying to find usable container engine."
if check_container_engine docker "$steamrt_image"; then
arg_container_engine="docker"
elif check_container_engine podman "$steamrt_image"; then
arg_container_engine="podman"
else
die "${arg_container_engine:-Container engine discovery} has failed. Please fix your setup."
fi
fi
stat "Using $arg_container_engine."
## Write out config ## Write out config
# Don't die after this point or we'll have rather unhelpfully deleted the Makefile # Don't die after this point or we'll have rather unhelpfully deleted the Makefile
[[ ! -e "$MAKEFILE" ]] || rm "$MAKEFILE" [[ ! -e "$MAKEFILE" ]] || rm "$MAKEFILE"
@ -154,29 +75,17 @@ function configure() {
echo "SRCDIR := $(escape_for_make "$srcdir")" echo "SRCDIR := $(escape_for_make "$srcdir")"
echo "BUILD_NAME := $(escape_for_make "$build_name")" echo "BUILD_NAME := $(escape_for_make "$build_name")"
# SteamRT was specified, baking it into the Makefile # SteamRT
if [[ -n $arg_protonsdk_image ]]; then echo "STEAMRT_NAME := $(escape_for_make "$steamrt_name")"
echo "STEAMRT_IMAGE := $(escape_for_make "$arg_protonsdk_image")" echo "STEAMRT_IMAGE := $(escape_for_make "$steamrt_image")"
fi
echo "ROOTLESS_CONTAINER := $ROOTLESS_CONTAINER"
echo "CONTAINER_ENGINE := $arg_container_engine"
if [[ -n "$arg_docker_opts" ]]; then if [[ -n "$arg_docker_opts" ]]; then
echo "DOCKER_OPTS := $arg_docker_opts" echo "DOCKER_OPTS := $arg_docker_opts"
fi fi
if [[ -n "$CONTAINER_MOUNT_OPTS" ]]; then
echo "CONTAINER_MOUNT_OPTS := $CONTAINER_MOUNT_OPTS"
fi
if [[ -n "$arg_enable_ccache" ]]; then
echo "ENABLE_CCACHE := 1"
fi
if [[ -n "$arg_enable_bear" ]]; then
echo "ENABLE_BEAR := 1"
fi
# Include base # Include base
echo "" echo ""
echo "include \$(SRCDIR)/Makefile.in" echo "include \$(SRCDIR)/build/makefile_base.mak"
} >> "$MAKEFILE" } >> "$MAKEFILE"
stat "Created $MAKEFILE, now run make to build." stat "Created $MAKEFILE, now run make to build."
@ -187,13 +96,11 @@ function configure() {
# Parse arguments # Parse arguments
# #
arg_protonsdk_image="" arg_steamrt="soldier"
arg_steamrt_image=""
arg_no_steamrt=""
arg_build_name="" arg_build_name=""
arg_container_engine=""
arg_docker_opts="" arg_docker_opts=""
arg_relabel_volumes=""
arg_enable_ccache=""
arg_enable_bear=""
arg_help="" arg_help=""
invalid_args="" invalid_args=""
function parse_args() { function parse_args() {
@ -230,21 +137,17 @@ function parse_args() {
elif [[ $arg = --build-name ]]; then elif [[ $arg = --build-name ]]; then
arg_build_name="$val" arg_build_name="$val"
val_used=1 val_used=1
elif [[ $arg = --container-engine ]]; then
arg_container_engine="$val"
val_used=1
elif [[ $arg = --docker-opts ]]; then elif [[ $arg = --docker-opts ]]; then
arg_docker_opts="$val" arg_docker_opts="$val"
val_used=1 val_used=1
elif [[ $arg = --relabel-volumes ]]; then elif [[ $arg = --steam-runtime-image ]]; then
arg_relabel_volumes="1"
elif [[ $arg = --enable-ccache ]]; then
arg_enable_ccache="1"
elif [[ $arg = --enable-bear ]]; then
arg_enable_bear="1"
elif [[ $arg = --proton-sdk-image ]]; then
val_used=1 val_used=1
arg_protonsdk_image="$val" arg_steamrt_image="$val"
elif [[ $arg = --steam-runtime ]]; then
val_used=1
arg_steamrt="$val"
elif [[ $arg = --no-steam-runtime ]]; then
arg_no_steamrt=1
else else
err "Unrecognized option $arg" err "Unrecognized option $arg"
return 1 return 1
@ -279,7 +182,7 @@ function parse_args() {
} }
usage() { usage() {
"$1" "Usage: $0 { --proton-sdk-image=<image> }" "$1" "Usage: $0 { --no-steam-runtime | --steam-runtime-image=<image> --steam-runtime=<name> }"
"$1" " Generate a Makefile for building Proton. May be run from another directory to create" "$1" " Generate a Makefile for building Proton. May be run from another directory to create"
"$1" " out-of-tree build directories (e.g. mkdir mybuild && cd mybuild && ../configure.sh)" "$1" " out-of-tree build directories (e.g. mkdir mybuild && cd mybuild && ../configure.sh)"
"$1" "" "$1" ""
@ -288,29 +191,32 @@ usage() {
"$1" "" "$1" ""
"$1" " --build-name=<name> Set the name of the build that displays when used in Steam" "$1" " --build-name=<name> Set the name of the build that displays when used in Steam"
"$1" "" "$1" ""
"$1" " --container-engine=<engine> Which Docker-compatible container engine to use,"
"$1" " e.g. podman. Tries to do autodiscovery when not specified."
"$1" ""
"$1" " --docker-opts='<options>' Extra options to pass to Docker when invoking the runtime." "$1" " --docker-opts='<options>' Extra options to pass to Docker when invoking the runtime."
"$1" "" "$1" ""
"$1" " --relabel-volumes Bind-mounted volumes will be relabeled. Use with caution."
"$1" ""
"$1" " --enable-ccache Mount \$CCACHE_DIR or \$HOME/.ccache inside of the container and use ccache for the build."
"$1" ""
"$1" " --enable-bear Invokes make via bear creating compile_commands.json."
"$1" ""
"$1" " Steam Runtime" "$1" " Steam Runtime"
"$1" " Proton builds that are to be installed & run under the steam client must be built with" "$1" " Proton builds that are to be installed & run under the steam client must be built with"
"$1" " the Steam Runtime SDK to ensure compatibility. See README.md for more information." "$1" " the Steam Runtime SDK to ensure compatibility. See README.md for more information."
"$1" "" "$1" ""
"$1" " --proton-sdk-image=<image> Automatically invoke the Steam Runtime SDK in <image>" "$1" " --steam-runtime-image=<image> Automatically invoke the Steam Runtime SDK in <image>"
"$1" " for build steps that must be run in an SDK" "$1" " for build steps that must be run in an SDK"
"$1" " environment. See README.md for instructions to" "$1" " environment. See README.md for instructions to"
"$1" " create this image." "$1" " create this image."
"$1" " --steam-runtime=soldier Name of the steam runtime release to build for (soldier, scout)."
"$1" ""
"$1" " --no-steam-runtime Do not automatically invoke any runtime SDK as part of the build."
"$1" " Build steps may still be manually run in a runtime environment."
exit 1; exit 1;
} }
[[ $# -gt 0 ]] || usage info
parse_args "$@" || usage err parse_args "$@" || usage err
[[ -z $arg_help ]] || usage info [[ -z $arg_help ]] || usage info
configure # Sanity check arguments
if [[ -n $arg_no_steamrt && -n $arg_steamrt_image ]]; then
die "Cannot specify --steam-runtime-image as well as --no-steam-runtime"
elif [[ -z $arg_no_steamrt && -z $arg_steamrt_image ]]; then
die "Must specify either --no-steam-runtime or --steam-runtime-image"
fi
configure "$arg_steamrt_image" "$arg_steamrt"

1
dav1d

@ -1 +0,0 @@
Subproject commit 8a6f054ef1e0f7886bc6e53e6be97c427154fe85

View file

@ -6,7 +6,6 @@
import os import os
import subprocess import subprocess
import re
def file_is_wine_builtin_dll(path): def file_is_wine_builtin_dll(path):
if not os.path.exists(path): if not os.path.exists(path):
@ -51,83 +50,42 @@ def make_relative_symlink(target, linkname):
os.symlink(rel, linkname) os.symlink(rel, linkname)
def setup_dll_symlinks(default_pfx_dir, dist_dir): def setup_dll_symlinks(default_pfx_dir, dist_dir):
skip_dlls = [ 'amd_ags_x64.dll' ]
for walk_dir, dirs, files in os.walk(default_pfx_dir): for walk_dir, dirs, files in os.walk(default_pfx_dir):
for file_ in files: for file_ in files:
filename = os.path.join(walk_dir, file_) filename = os.path.join(walk_dir, file_)
if file_ in skip_dlls:
continue
if os.path.isfile(filename) and file_is_wine_builtin_dll(filename): if os.path.isfile(filename) and file_is_wine_builtin_dll(filename):
bitness = dll_bitness(filename) bitness = dll_bitness(filename)
if bitness == 32: if bitness == 32:
libdir = os.path.join(dist_dir, 'lib/wine/i386-windows') libdir = os.path.join(dist_dir, 'lib/wine')
elif bitness == 64: elif bitness == 64:
libdir = os.path.join(dist_dir, 'lib64/wine/x86_64-windows') libdir = os.path.join(dist_dir, 'lib64/wine')
else: else:
continue continue
if os.path.exists(os.path.join(libdir, file_)): if os.path.exists(os.path.join(libdir, file_)):
target = os.path.join(libdir, file_) target = os.path.join(libdir, file_)
elif os.path.exists(os.path.join(libdir, 'fakedlls', file_)):
target = os.path.join(libdir, 'fakedlls', file_)
else: else:
continue continue
os.unlink(filename) os.unlink(filename)
make_relative_symlink(target, filename) make_relative_symlink(target, filename)
KEY_RE = re.compile(r'\[(.+)\] ([0-9]+)') def make_default_pfx(default_pfx_dir, dist_dir, runtime):
VALUE_RE = re.compile(r'"(.*)"="(.+)"')
def filter_registry(filename):
"""Remove registry values that contain a fully qualified path
inside some well-known registry keys. These paths are devised on
the build machine and it makes no sense to distribute them. Plus,
they are known to cause bugs."""
FILTER_KEYS = [
r'Software\\Microsoft\\Windows\\CurrentVersion\\Fonts',
r'Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts',
r'Software\\Wine\\Fonts\\External Fonts',
]
filtering = False
with open(filename) as fin:
with open(filename + '.tmp', 'w') as fout:
for line in fin:
line = line.strip()
match = KEY_RE.match(line)
if match is not None:
fout.write(line + '\n')
filtering = match.group(1) in FILTER_KEYS
continue
match = VALUE_RE.match(line)
if match is not None:
if not filtering or match.group(2)[1:2] != ':':
fout.write(line + '\n')
continue
fout.write(line + '\n')
os.rename(filename + '.tmp', filename)
#steampipe can't handle filenames with colons, so we remove them here
#and restore them in the proton script
def fixup_drive_links(default_pfx_dir):
for walk_dir, dirs, files in os.walk(os.path.join(default_pfx_dir, "dosdevices")):
for dir_ in dirs:
if ":" in dir_:
os.remove(os.path.join(walk_dir, dir_))
def make_default_pfx(default_pfx_dir, dist_dir):
local_env = dict(os.environ) local_env = dict(os.environ)
ld_path = dist_dir + "/lib64:" + dist_dir + "/lib" ld_path = dist_dir + "/lib64:" + dist_dir + "/lib"
dll_path = dist_dir + "/lib64/vkd3d:" + dist_dir + "/lib/vkd3d"
local_env["LD_LIBRARY_PATH"] = ld_path if runtime is None:
local_env["WINEPREFIX"] = default_pfx_dir local_env["LD_LIBRARY_PATH"] = ld_path
local_env["WINEDEBUG"] = "-all" local_env["WINEPREFIX"] = default_pfx_dir
local_env["WINEDLLPATH"] = dll_path local_env["WINEDEBUG"] = "-all"
runtime_args = [] runtime_args = []
else:
#the runtime clears the environment, so we pass it in on the CL via env
runtime_args = runtime + ["env",
"LD_LIBRARY_PATH=" + ld_path,
"WINEPREFIX=" + default_pfx_dir,
"WINEDEBUG=-all"]
subprocess.run(runtime_args + ["/bin/bash", "-c", subprocess.run(runtime_args + ["/bin/bash", "-c",
os.path.join(dist_dir, 'bin', 'wine') + " wineboot && " + os.path.join(dist_dir, 'bin', 'wine') + " wineboot && " +
@ -135,11 +93,10 @@ def make_default_pfx(default_pfx_dir, dist_dir):
env=local_env, check=True) env=local_env, check=True)
setup_dll_symlinks(default_pfx_dir, dist_dir) setup_dll_symlinks(default_pfx_dir, dist_dir)
fixup_drive_links(default_pfx_dir)
filter_registry(os.path.join(default_pfx_dir, 'user.reg'))
filter_registry(os.path.join(default_pfx_dir, 'system.reg'))
if __name__ == '__main__': if __name__ == '__main__':
import sys import sys
make_default_pfx(sys.argv[1], sys.argv[2]) if len(sys.argv) > 3:
make_default_pfx(sys.argv[1], sys.argv[2], sys.argv[3:])
else:
make_default_pfx(sys.argv[1], sys.argv[2], None)

View file

@ -1,4 +1,4 @@
Copyright (c) 2018-2022, Valve Corporation Copyright (c) 2018-2021, Valve Corporation
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, Redistribution and use in source and binary forms, with or without modification,
@ -34,7 +34,7 @@ Browse the source code for more information
This software contains a modified version of Wine licensed under the LGPL 2.1. Wine is This software contains a modified version of Wine licensed under the LGPL 2.1. Wine is
Copyright (c) 1993-2022 the Wine project authors Copyright (c) 1993-2021 the Wine project authors
Visit Wine at Visit Wine at
@ -48,8 +48,8 @@ View our modifications at
This software contains a modified version of DXVK licensed under the zlib/libpng license. DXVK is This software contains a modified version of DXVK licensed under the zlib/libpng license. DXVK is
Copyright (c) 2017-2022 Philip Rebohle Copyright (c) 2017-2021 Philip Rebohle
Copyright (c) 2019-2022 Joshua Ashton Copyright (c) 2019-2021 Joshua Ashton
Visit DXVK at Visit DXVK at
@ -61,19 +61,9 @@ View our modifications at
---- ---- ---- ---- ---- ---- ---- ----
This software contains vkd3d-proton licensed under the LGPL 2.1. vkd3d-proton is
Copyright 2016-2022 the vkd3d-proton project authors
Visit vkd3d-proton at
https://github.com/HansKristian-Work/vkd3d-proton
---- ---- ---- ----
This software contains FAudio licensed under the zlib license. FAudio is This software contains FAudio licensed under the zlib license. FAudio is
Copyright (c) 2011-2022 Ethan Lee, Luigi Auriemma, and the MonoGame Team Copyright (c) 2011-2021 Ethan Lee, Luigi Auriemma, and the MonoGame Team
Visit FAudio at Visit FAudio at
@ -81,6 +71,14 @@ Visit FAudio at
---- ---- ---- ---- ---- ---- ---- ----
This software contains glib licensed under the LGPL 2.1.
Visit glib at
https://wiki.gnome.org/Projects/GLib
---- ---- ---- ----
This software contains gstreamer, gst-plugins-base, and gst-plugins-good licensed under the LGPL 2. This software contains gstreamer, gst-plugins-base, and gst-plugins-good licensed under the LGPL 2.
Visit gstreamer at Visit gstreamer at
@ -102,7 +100,7 @@ Visit Liberation Fonts at
This software contains Source Han Sans licensed under the SIL Open Font License, available at LICENSE.OFL. This font is This software contains Source Han Sans licensed under the SIL Open Font License, available at LICENSE.OFL. This font is
Copyright 2014-2021 Adobe (http://www.adobe.com/) Copyright 2020 Adobe (http://www.adobe.com/)
Visit Source Han Sans at Visit Source Han Sans at
@ -110,29 +108,6 @@ Visit Source Han Sans at
---- ---- ---- ---- ---- ---- ---- ----
This software contains Ume fonts distributed under the following license:
These fonts are free software. Unlimited permission is granted to
use, copy, and distribute it, with or without modification, either
commercially and noncommercially. THESE FONTS ARE PROVIDED "AS
IS" WITHOUT WARRANTY.
Visit Ume fonts home page at
https://osdn.net/projects/ume-font/
---- ---- ---- ----
This software contains some fonts from the Google Noto collection, licensed under the SIL Open Font License, available at LICENSE.OFL. They are
Copyright 2015 Google Inc.
Visit the Google Noto fonts collection at
https://www.google.com/get/noto/
---- ---- ---- ----
This software contains wine-mono, parts of which are included under a variety of licenses. This software contains wine-mono, parts of which are included under a variety of licenses.
Parts of Mono (mono/) are variously licensed under the GPL, LGPL, and MIT X11 licenses. All parts are available as LGPL or MIT X11 except for the following: Parts of Mono (mono/) are variously licensed under the GPL, LGPL, and MIT X11 licenses. All parts are available as LGPL or MIT X11 except for the following:
@ -189,6 +164,16 @@ wine-gecko is available in Source Code form at
---- ---- ---- ---- ---- ---- ---- ----
This software contains vkd3d-proton licensed under the LGPL 2.1. vkd3d-proton is
Copyright 2016-2020 the vkd3d-proton project authors
Visit vkd3d-proton at
https://github.com/HansKristian-Work/vkd3d-proton
---- ---- ---- ----
This software contains orc. Orc is This software contains orc. Orc is
Copyright 2002 - 2009 David A. Schleef <ds@schleef.org> Copyright 2002 - 2009 David A. Schleef <ds@schleef.org>
@ -257,10 +242,12 @@ Visit orc at
This software contains the following Rust libraries under the MIT license: This software contains the following Rust libraries under the MIT license:
gstreamer-rs <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs> gstreamer-rs <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs>
gst-plugins-rs <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs>
array-init <https://github.com/Manishearth/array-init/> array-init <https://github.com/Manishearth/array-init/>
Copyright (c) 2017-2020 The array-init developers Copyright (c) 2010 The Rust Project Developers
autocfg <https://github.com/cuviper/autocfg>
Copyright (c) 2018 Josh Stone
bitflags <https://github.com/bitflags/bitflags> bitflags <https://github.com/bitflags/bitflags>
num-integer <https://github.com/rust-num/num-integer> num-integer <https://github.com/rust-num/num-integer>
@ -269,24 +256,29 @@ This software contains the following Rust libraries under the MIT license:
Copyright (c) 2014 The Rust Project Developers Copyright (c) 2014 The Rust Project Developers
cfg-if <https://github.com/alexcrichton/cfg-if> cfg-if <https://github.com/alexcrichton/cfg-if>
proc-macro2 <https://github.com/dtolnay/proc-macro2> pkg-config <https://github.com/rust-lang/pkg-config-rs>
proc-macro2 <https://github.com/alexcrichton/proc-macro2>
toml <https://github.com/alexcrichton/toml-rs> toml <https://github.com/alexcrichton/toml-rs>
Copyright (c) 2014 Alex Crichton Copyright (c) 2014 Alex Crichton
chrono <https://github.com/chronotope/chrono>
Copyright (c) 2014 Kang Seonghoon
crc32fast <https://github.com/srijs/rust-crc32fast> crc32fast <https://github.com/srijs/rust-crc32fast>
Copyright (c) 2018 Sam Rijs, Alex Crichton and contributors Copyright (c) 2018 Sam Rijs, Alex Crichton and contributors
dav1d-rs <https://github.com/rust-av/dav1d-rs>
Copyright (c) 2018 Luca Barbato
futures-channel <https://github.com/rust-lang/futures-rs> futures-channel <https://github.com/rust-lang/futures-rs>
futures-core <https://github.com/rust-lang/futures-rs> futures-core <https://github.com/rust-lang/futures-rs>
futures-executor <https://github.com/rust-lang/futures-rs> futures-executor <https://github.com/rust-lang/futures-rs>
futures-macro <https://github.com/rust-lang/futures-rs>
futures-task <https://github.com/rust-lang/futures-rs> futures-task <https://github.com/rust-lang/futures-rs>
futures-util <https://github.com/rust-lang/futures-rs> futures-util <https://github.com/rust-lang/futures-rs>
Copyright (c) 2016 Alex Crichton Copyright (c) 2016 Alex Crichton
Copyright (c) 2017 The Tokio Authors Copyright (c) 2017 The Tokio Authors
glib <https://github.com/gtk-rs/glib>
Copyright (c) 2013-2015 The Gtk-rs Project Developers
heck <https://github.com/withoutboats/heck> heck <https://github.com/withoutboats/heck>
unicode-segmentation <https://github.com/unicode-rs/unicode-segmentation> unicode-segmentation <https://github.com/unicode-rs/unicode-segmentation>
unicode-xid <https://github.com/unicode-rs/unicode-xid> unicode-xid <https://github.com/unicode-rs/unicode-xid>
@ -301,35 +293,41 @@ This software contains the following Rust libraries under the MIT license:
murmur3 <https://github.com/stusmall/murmur3> murmur3 <https://github.com/stusmall/murmur3>
Copyright (c) 2016 Stu Small Copyright (c) 2016 Stu Small
pin-utils <https://github.com/rust-lang-nursery/pin-utils> pin-utils <https://github.com/rust-lang/pin-utils>
Copyright (c) 2018 The pin-utils authors Copyright (c) 2018 The pin-utils authors
pretty-hex <https://github.com/wolandr/pretty-hex> pretty-hex <https://github.com/wolandr/pretty-hex>
Copyright (c) 2018 Andrei Volnin Copyright (c) 2018 Andrei Volnin
proc-macro-error <https://gitlab.com/CreepySkeleton/proc-macro-error> proc-macro-error <https://gitlab.com/CreepySkeleton/proc-macro-error>
proc-macro-error-attr <https://gitlab.com/CreepySkeleton/proc-macro-error>
Copyright (c) 2019-2020 CreepySkeleton Copyright (c) 2019-2020 CreepySkeleton
proc-macro-hack <https://github.com/dtolnay/proc-macro-hack>
Copyright (c) 2018 David Tolnay
quote <https://github.com/dtolnay/quote> quote <https://github.com/dtolnay/quote>
Copyright (c) 2016 The Rust Project Developers Copyright (c) 2016 The Rust Project Developers
slab <https://github.com/tokio-rs/slab> slab <https://github.com/carllerche/slab>
Copyright (c) 2019 Carl Lerche Copyright (c) 2019 Carl Lerche
smallvec <https://github.com/servo/rust-smallvec> time <https://github.com/time-rs/time>
Copyright (c) 2018 The Servo Project Developers Copyright (c) 2019 Jacob Pratt
version_check <https://github.com/SergioBenitez/version_check>
Copyright (c) 2017-2018 Sergio Benitez
anyhow <https://github.com/dtolnay/anyhow> anyhow <https://github.com/dtolnay/anyhow>
glib <https://github.com/gtk-rs/gtk-rs-core> either <https://github.com/bluss/either>
itertools <https://github.com/rust-itertools/itertools>
once_cell <https://github.com/matklad/once_cell> once_cell <https://github.com/matklad/once_cell>
paste <https://github.com/dtolnay/paste> paste <https://github.com/dtolnay/paste>
pin-project-lite <https://github.com/taiki-e/pin-project-lite> pin-project <https://github.com/taiki-e/pin-project>
proc-macro-crate <https://github.com/bkchr/proc-macro-crate> proc-macro-crate <https://github.com/bkchr/proc-macro-crate>
serde <https://github.com/serde-rs/serde> serde <https://github.com/serde-rs/serde>
syn <https://github.com/dtolnay/syn> syn <https://github.com/dtolnay/syn>
syn-mid <https://github.com/taiki-e/syn-mid>
thiserror <https://github.com/dtolnay/thiserror> thiserror <https://github.com/dtolnay/thiserror>
thiserror-impl <https://github.com/dtolnay/thiserror>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@ -435,33 +433,3 @@ This software contains the jxrlib library, which is
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.
---- ---- ---- ----
This software contains the dav1d library, which is
Copyright © 2018-2019, VideoLAN and dav1d authors
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Distribution of dav1d is also covered by the Alliance for Open Media Patent License 1.0, available at PATENTS.AV1.

View file

@ -1,44 +1,41 @@
STEAMRT_VERSION = 0.20240307.80401 STEAMRT_VERSION = 0.20210126.1
STEAMRT_URLBASE = registry.gitlab.steamos.cloud STEAMRT_URLBASE = registry.gitlab.steamos.cloud
PROTONSDK_URLBASE = $(STEAMRT_URLBASE)/proton/sniper/sdk PROTONSDK_URLBASE = $(STEAMRT_URLBASE)/proton/soldier/sdk
PROTONSDK_VERSION = $(STEAMRT_VERSION)-0-dev PROTONSDK_VERSION = $(STEAMRT_VERSION)-0
# this is just for building toolchain, as we do static builds it should # this is just for building toolchain, as we do static builds it should
# not have any impact on the end result, but changing it will invalidate # not have any impact on the end result, but changing it will invalidate
# docker caches, so we need something that don't change much # docker caches, so we need something that don't change much
BASE_IMAGE = $(STEAMRT_URLBASE)/steamrt/sniper/sdk:0.20221017.1 BASE_IMAGE_i686 = i386/ubuntu:18.04
BASE_IMAGE_x86_64 = ubuntu:18.04
BINUTILS_VERSION = 2.42 BINUTILS_VERSION = 2.35
GCC_VERSION = 10.3.0 GCC_VERSION = 9.3.0
MINGW_VERSION = 9.0.0 MINGW_VERSION = 8.0.0
RUST_VERSION = 1.68.0 RUST_VERSION = 1.44.1
NINJA_VERSION = 1.11.1
SOURCES_URLBASE = https://repo.steampowered.com/proton-sdk SOURCES_URLBASE = https://repo.steampowered.com/proton-sdk
BINUTILS_URLBASE = $(SOURCES_URLBASE) BINUTILS_URLBASE = $(SOURCES_URLBASE)
GCC_URLBASE = $(SOURCES_URLBASE) GCC_URLBASE = $(SOURCES_URLBASE)
MINGW_URLBASE = $(SOURCES_URLBASE) MINGW_URLBASE = $(SOURCES_URLBASE)
RUST_URLBASE = $(SOURCES_URLBASE) RUST_URLBASE = $(SOURCES_URLBASE)
NINJA_URLBASE = $(SOURCES_URLBASE)
BINUTILS_SOURCE = binutils-$(BINUTILS_VERSION).tar.xz BINUTILS_SOURCE = binutils-$(BINUTILS_VERSION).tar.xz
GCC_SOURCE = gcc-$(GCC_VERSION).tar.xz GCC_SOURCE = gcc-$(GCC_VERSION).tar.xz
MINGW_SOURCE = mingw-w64-v$(MINGW_VERSION).tar.bz2 MINGW_SOURCE = mingw-w64-v$(MINGW_VERSION).tar.bz2
RUST_SOURCE_x86_64 = rust-$(RUST_VERSION)-x86_64-unknown-linux-gnu.tar.gz RUST_SOURCE_x86_64 = rust-$(RUST_VERSION)-x86_64-unknown-linux-gnu.tar.gz
RUST_SOURCE_i686 = rust-$(RUST_VERSION)-i686-unknown-linux-gnu.tar.gz RUST_SOURCE_i686 = rust-$(RUST_VERSION)-i686-unknown-linux-gnu.tar.gz
NINJA_SOURCE = ninja-build_$(NINJA_VERSION).orig.tar.gz
BINUTILS_SHA256 = f6e4d41fd5fc778b06b7891457b3620da5ecea1006c6a4a41ae998109f85a800 BINUTILS_SHA256 = 1b11659fb49e20e18db460d44485f09442c8c56d5df165de9461eb09c8302f85
GCC_SHA256 = 64f404c1a650f27fc33da242e1f2df54952e3963a49e06e73f6940f3223ac344 GCC_SHA256 = 71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1
MINGW_SHA256 = 1929b94b402f5ff4d7d37a9fe88daa9cc55515a6134805c104d1794ae22a4181 MINGW_SHA256 = 44c740ea6ab3924bc3aa169bad11ad3c5766c5c8459e3126d44eabb8735a5762
RUST_SHA256_x86_64 = 7be1acdac656d0b0b7e909e5c0d4ddf61c755c203ec26ebafbd306322335b361 RUST_SHA256_x86_64 = a41df89a461a580536aeb42755e43037556fba2e527dd13a1e1bb0749de28202
RUST_SHA256_i686 = dc931adeb2943dcadfbd29546481f0296fcb97a511421053ecae6586a85869b1 RUST_SHA256_i686 = e69689b0a1b66599cf83e7dd54f839419007e44376195e93e301a3175da3d854
NINJA_SHA256 = 31747ae633213f1eda3842686f83c2aa1412e0f5691d1c14dbbcc67fe7400cea
DOCKER = docker DOCKER = docker
%.Dockerfile: %.Dockerfile.in Makefile %.Dockerfile: %.Dockerfile.in
sed -re 's!@PROTONSDK_URLBASE@!$(PROTONSDK_URLBASE)!g' \ sed -re 's!@PROTONSDK_URLBASE@!$(PROTONSDK_URLBASE)!g' \
-re 's!@BASE_IMAGE@!$(BASE_IMAGE)!g' \ -re 's!@BASE_IMAGE@!$(BASE_IMAGE)!g' \
-re 's!@BINUTILS_VERSION@!$(BINUTILS_VERSION)!g' \ -re 's!@BINUTILS_VERSION@!$(BINUTILS_VERSION)!g' \
@ -59,43 +56,37 @@ DOCKER = docker
-re 's!@RUST_SOURCE_i686@!$(RUST_SOURCE_i686)!g' \ -re 's!@RUST_SOURCE_i686@!$(RUST_SOURCE_i686)!g' \
-re 's!@RUST_SHA256_x86_64@!$(RUST_SHA256_x86_64)!g' \ -re 's!@RUST_SHA256_x86_64@!$(RUST_SHA256_x86_64)!g' \
-re 's!@RUST_SHA256_i686@!$(RUST_SHA256_i686)!g' \ -re 's!@RUST_SHA256_i686@!$(RUST_SHA256_i686)!g' \
-re 's!@NINJA_VERSION@!$(NINJA_VERSION)!g' \
-re 's!@NINJA_URLBASE@!$(NINJA_URLBASE)!g' \
-re 's!@NINJA_SOURCE@!$(NINJA_SOURCE)!g' \
-re 's!@NINJA_SHA256@!$(NINJA_SHA256)!g' \
-re 's!@J@!$(shell nproc)!g' \ -re 's!@J@!$(shell nproc)!g' \
$< >$@ $< >$@
%-i686.Dockerfile.in: %.Dockerfile.in %-i686.Dockerfile.in: %.Dockerfile.in
sed -re 's!@ARCH@!i686!g' \ sed -re 's!@ARCH@!i686!g' \
-re 's!@ARCH_FLAGS@!$(ARCH_FLAGS)!g' \
$< >$@ $< >$@
%-x86_64.Dockerfile.in: %.Dockerfile.in %-x86_64.Dockerfile.in: %.Dockerfile.in
sed -re 's!@ARCH@!x86_64!g' \ sed -re 's!@ARCH@!x86_64!g' \
-re 's!@ARCH_FLAGS@!$(ARCH_FLAGS)!g' \
$< >$@ $< >$@
%-linux-gnu.Dockerfile.in: %.Dockerfile.in %-linux-gnu.Dockerfile.in: %.Dockerfile.in
sed -re 's!@TARGET@!linux-gnu!g' \ sed -re 's!@TARGET@!linux-gnu!g' \
-re 's!@ARCH_FLAGS@!$(ARCH_FLAGS)!g' \
-re 's!@TARGET_FLAGS@!$(TARGET_FLAGS)!g' \ -re 's!@TARGET_FLAGS@!$(TARGET_FLAGS)!g' \
$< >$@ $< >$@
%-w64-mingw32.Dockerfile.in: %.Dockerfile.in %-w64-mingw32.Dockerfile.in: %.Dockerfile.in
sed -re 's!@TARGET@!w64-mingw32!g' \ sed -re 's!@TARGET@!w64-mingw32!g' \
-re 's!@ARCH_FLAGS@!$(ARCH_FLAGS)!g' \
-re 's!@TARGET_FLAGS@!$(TARGET_FLAGS)!g' \ -re 's!@TARGET_FLAGS@!$(TARGET_FLAGS)!g' \
$< >$@ $< >$@
define create-build-base-rules define create-build-base-rules
.PHONY: build-base-$(1) .PHONY: build-base-$(1)
all build-base: build-base-$(1) all build-base: build-base-$(1)
build-base-$(1): BASE_IMAGE = $(BASE_IMAGE_$(1))
build-base-$(1): build-base-$(1).Dockerfile build-base-$(1): build-base-$(1).Dockerfile
rm -rf build; mkdir -p build
$(DOCKER) build -f $$< \ $(DOCKER) build -f $$< \
--cache-from=$(PROTONSDK_URLBASE)/build-base-$(1) \ --cache-from=$(PROTONSDK_URLBASE)/build-base-$(1):latest \
-t $(PROTONSDK_URLBASE)/build-base-$(1):latest \ -t $(PROTONSDK_URLBASE)/build-base-$(1):latest \
context build
pull:: pull::
-$(DOCKER) pull $(PROTONSDK_URLBASE)/build-base-$(1):latest -$(DOCKER) pull $(PROTONSDK_URLBASE)/build-base-$(1):latest
push:: push::
@ -109,11 +100,12 @@ define create-binutils-rules
.PHONY: binutils-$(1)-$(2) .PHONY: binutils-$(1)-$(2)
all binutils: binutils-$(1)-$(2) all binutils: binutils-$(1)-$(2)
binutils-$(1)-$(2): binutils-$(1)-$(2).Dockerfile | build-base binutils-$(1)-$(2): binutils-$(1)-$(2).Dockerfile | build-base
rm -rf build; mkdir -p build
$(DOCKER) build -f $$< \ $(DOCKER) build -f $$< \
--cache-from=$(PROTONSDK_URLBASE)/binutils-$(1)-$(2) \ --cache-from=$(PROTONSDK_URLBASE)/binutils-$(1)-$(2):$(BINUTILS_VERSION) \
-t $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):$(BINUTILS_VERSION) \ -t $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):$(BINUTILS_VERSION) \
-t $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):latest \ -t $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):latest \
context build
pull:: pull::
-$(DOCKER) pull $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):$(BINUTILS_VERSION) -$(DOCKER) pull $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):$(BINUTILS_VERSION)
push:: push::
@ -126,21 +118,16 @@ $(eval $(call create-binutils-rules,i686,linux-gnu))
$(eval $(call create-binutils-rules,x86_64,w64-mingw32)) $(eval $(call create-binutils-rules,x86_64,w64-mingw32))
$(eval $(call create-binutils-rules,x86_64,linux-gnu)) $(eval $(call create-binutils-rules,x86_64,linux-gnu))
MINGW_ARCH_FLAGS_crt-x86_64 = --disable-lib32 CFLAGS="-mcmodel=small"
MINGW_ARCH_FLAGS_crt-i686 = --disable-lib64
MINGW_ARCH_FLAGS_pthread-x86_64 = CFLAGS="-mcmodel=small"
MINGW_ARCH_FLAGS_pthread-i686 =
define create-mingw-rules define create-mingw-rules
.PHONY: mingw-$(2)-$(1) .PHONY: mingw-$(2)-$(1)
all mingw: mingw-$(2)-$(1) all mingw: mingw-$(2)-$(1)
mingw-$(2)-$(1): ARCH_FLAGS = $(MINGW_ARCH_FLAGS_$(2)-$(1))
mingw-$(2)-$(1): mingw-$(2)-$(1).Dockerfile | binutils mingw-$(2)-$(1): mingw-$(2)-$(1).Dockerfile | binutils
rm -rf build; mkdir -p build
$(DOCKER) build -f $$< \ $(DOCKER) build -f $$< \
--cache-from=$(PROTONSDK_URLBASE)/mingw-$(2)-$(1) \ --cache-from=$(PROTONSDK_URLBASE)/mingw-$(2)-$(1):$(MINGW_VERSION) \
-t $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):$(MINGW_VERSION) \ -t $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):$(MINGW_VERSION) \
-t $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):latest \ -t $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):latest \
context build
pull:: pull::
-$(DOCKER) pull $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):$(MINGW_VERSION) -$(DOCKER) pull $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):$(MINGW_VERSION)
push:: push::
@ -159,23 +146,20 @@ $(eval $(call create-mingw-rules,x86_64,crt))
$(eval $(call create-mingw-rules,x86_64,pthreads)) $(eval $(call create-mingw-rules,x86_64,pthreads))
$(eval $(call create-mingw-rules,x86_64,widl)) $(eval $(call create-mingw-rules,x86_64,widl))
GCC_ARCH_FLAGS_x86_64 = CFLAGS_FOR_TARGET="-mcmodel=small" CXXFLAGS_FOR_TARGET="-mcmodel=small"
GCC_ARCH_FLAGS_i686 =
GCC_TARGET_FLAGS_w64-mingw32 = --disable-shared GCC_TARGET_FLAGS_w64-mingw32 = --disable-shared
GCC_TARGET_FLAGS_linux-gnu = GCC_TARGET_FLAGS_linux-gnu =
define create-gcc-rules define create-gcc-rules
.PHONY: gcc-$(1)-$(2) .PHONY: gcc-$(1)-$(2)
all gcc: gcc-$(1)-$(2) all gcc: gcc-$(1)-$(2)
gcc-$(1)-$(2): ARCH_FLAGS = $(GCC_ARCH_FLAGS_$(1))
gcc-$(1)-$(2): TARGET_FLAGS = $(GCC_TARGET_FLAGS_$(2)) gcc-$(1)-$(2): TARGET_FLAGS = $(GCC_TARGET_FLAGS_$(2))
gcc-$(1)-$(2): gcc-$(1)-$(2).Dockerfile | mingw gcc-$(1)-$(2): gcc-$(1)-$(2).Dockerfile | mingw
rm -rf build; mkdir -p build
$(DOCKER) build -f $$< \ $(DOCKER) build -f $$< \
--cache-from=$(PROTONSDK_URLBASE)/gcc-$(1)-$(2) \ --cache-from=$(PROTONSDK_URLBASE)/gcc-$(1)-$(2):$(GCC_VERSION) \
-t $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):$(GCC_VERSION) \ -t $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):$(GCC_VERSION) \
-t $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):latest \ -t $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):latest \
context build
pull:: pull::
-$(DOCKER) pull $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):$(GCC_VERSION) -$(DOCKER) pull $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):$(GCC_VERSION)
push:: push::
@ -191,13 +175,14 @@ $(eval $(call create-gcc-rules,x86_64,w64-mingw32))
define create-proton-rules define create-proton-rules
.PHONY: proton .PHONY: proton
all: proton all: proton
proton: BASE_IMAGE = $(STEAMRT_URLBASE)/steamrt/sniper/sdk:$(STEAMRT_VERSION) proton: BASE_IMAGE = $(STEAMRT_URLBASE)/steamrt/soldier/sdk:$(STEAMRT_VERSION)
proton: proton.Dockerfile | gcc proton: proton.Dockerfile | gcc
rm -rf build; mkdir -p build
$(DOCKER) build -f $$< \ $(DOCKER) build -f $$< \
--cache-from=$(PROTONSDK_URLBASE) \ --cache-from=$(PROTONSDK_URLBASE):$(PROTONSDK_VERSION) \
-t $(PROTONSDK_URLBASE):$(PROTONSDK_VERSION) \ -t $(PROTONSDK_URLBASE):$(PROTONSDK_VERSION) \
-t $(PROTONSDK_URLBASE):latest \ -t $(PROTONSDK_URLBASE):latest \
context build
pull:: pull::
-$(DOCKER) pull $(PROTONSDK_URLBASE):$(PROTONSDK_VERSION) -$(DOCKER) pull $(PROTONSDK_URLBASE):$(PROTONSDK_VERSION)
push:: push::
@ -213,16 +198,13 @@ sources::
rm -f $(GCC_SOURCE) rm -f $(GCC_SOURCE)
rm -f $(RUST_SOURCE_x86_64) rm -f $(RUST_SOURCE_x86_64)
rm -f $(RUST_SOURCE_i686) rm -f $(RUST_SOURCE_i686)
rm -f $(NINJA_SOURCE)
wget $(BINUTILS_URLBASE)/$(BINUTILS_SOURCE) wget $(BINUTILS_URLBASE)/$(BINUTILS_SOURCE)
wget $(MINGW_URLBASE)/$(MINGW_SOURCE) wget $(MINGW_URLBASE)/$(MINGW_SOURCE)
wget $(GCC_URLBASE)/$(GCC_SOURCE) wget $(GCC_URLBASE)/$(GCC_SOURCE)
wget $(RUST_URLBASE)/$(RUST_SOURCE_x86_64) wget $(RUST_URLBASE)/$(RUST_SOURCE_x86_64)
wget $(RUST_URLBASE)/$(RUST_SOURCE_i686) wget $(RUST_URLBASE)/$(RUST_SOURCE_i686)
wget $(NINJA_URLBASE)/$(NINJA_SOURCE)
echo $(BINUTILS_SHA256) $(BINUTILS_SOURCE) | sha256sum -c - echo $(BINUTILS_SHA256) $(BINUTILS_SOURCE) | sha256sum -c -
echo $(MINGW_SHA256) $(MINGW_SOURCE) | sha256sum -c - echo $(MINGW_SHA256) $(MINGW_SOURCE) | sha256sum -c -
echo $(GCC_SHA256) $(GCC_SOURCE) | sha256sum -c - echo $(GCC_SHA256) $(GCC_SOURCE) | sha256sum -c -
echo $(RUST_SHA256_x86_64) $(RUST_SOURCE_x86_64) | sha256sum -c - echo $(RUST_SHA256_x86_64) $(RUST_SOURCE_x86_64) | sha256sum -c -
echo $(RUST_SHA256_i686) $(RUST_SOURCE_i686) | sha256sum -c - echo $(RUST_SHA256_i686) $(RUST_SOURCE_i686) | sha256sum -c -
echo $(NINJA_SHA256) $(NINJA_SOURCE) | sha256sum -c -

View file

@ -1,81 +0,0 @@
Proton (sniper) SDK
====================
These are the build rules that are used to create docker images to build
Proton. The automated creation of the official images lives in
<https://gitlab.steamos.cloud/proton/sniper/sdk>, but this can be
used to create local images too.
Local usage
-----------
The `protonsdk_version` make variable will override which image is used
to build Proton, but may not trigger a full rebuild, so building from
scratch may be necessary.
Building Proton with a locally build docker image, instead of using the
official images, can be done by using `protonsdk_version=local`. This
may be used for instance to test changes to the docker image recipes.
Or, it is also possible to build the docker images first by invoking
`make protonsdk` and it will tag the images with the `protonsdk_version`
variable value.
Official images
---------------
To update the official Proton SDK images:
1) Update the image build rules, `STEAMRT_VERSION` and
`PROTONSDK_VERSION` version numbers in this folder, test locally,
commit and push the changes.
2) Update `.gitlab-ci.yml` in the
[Proton SDK](https://gitlab.steamos.cloud/proton/sniper/sdk)
repository to point to the new commit, commit and push to trigger a
new build of "-dev" images.
3) Once the images are satisfying, tag the version in Proton SDK
repository and push the tag, this will trigger a new build of the
images and version them with the same tag as the Git tag.
4) Once the images have been published, update the default
`arg_protonsdk_image` version number in `configure.sh` to use the
newly built images by default.
Any change or addition to GPL-ed source first requires to update or add
the corresponding source to <https://repo.steampowered.com/proton-sdk>.
The `SOURCES_URLBASE` variable must be used to download the sources
from there, and its sha256 must be added to validate the sources in the
same way the existing code does.
Technical details
-----------------
The images are built incrementally, with intermediate images created
for each component of the toolchain, then assembled together in a single
`proton` image.
The reason behind this is to optimize the use of docker cache, so that
components that didn't change do not require to be rebuilt every time,
saving a lot of time in the build process, when only small additions are
made.
It also lets us build several components of the toolchain separately,
in parallel. This is especially the case when building the images on
the <https://gitlab.steamos.cloud> CI.
Because the `ARG` parameter in Dockerfile doesn't behave nicely with
docker caches it is avoided, and `Dockerfile.in` are used with variable
replacements done using `sed`.
The <https://gitlab.steamos.cloud> CI uses Kaniko instead of Docker,
with a bit of script conversion to generate commands usable there. More
details are available in
[Proton SDK](https://gitlab.steamos.cloud/proton/sniper/sdk).
The `build-base` images are there to create a common ground to build the
other elements of the toolchain. They are based on fairly recent (more
than what `steamrt` provides), but they are only used temporarily to
build a static version of the Binutils, MinGW and GCC binaries, which
are then copied over the `steamrt` base image.

File diff suppressed because it is too large Load diff

View file

@ -40,7 +40,6 @@ RUN wget -q @GCC_URLBASE@/@GCC_SOURCE@ \
--with-system-mpfr \ --with-system-mpfr \
--with-system-zlib \ --with-system-zlib \
--with-tune=core-avx2 \ --with-tune=core-avx2 \
@ARCH_FLAGS@ \
MAKEINFO=true \ MAKEINFO=true \
&& make --quiet -j@J@ MAKEINFO=true CFLAGS="-static --static" LDFLAGS="-s -static --static" \ && make --quiet -j@J@ MAKEINFO=true CFLAGS="-static --static" LDFLAGS="-s -static --static" \
&& make --quiet -j@J@ MAKEINFO=true CFLAGS="-static --static" LDFLAGS="-s -static --static" install-strip DESTDIR=/opt \ && make --quiet -j@J@ MAKEINFO=true CFLAGS="-static --static" LDFLAGS="-s -static --static" install-strip DESTDIR=/opt \

View file

@ -13,8 +13,7 @@ RUN wget -q @MINGW_URLBASE@/@MINGW_SOURCE@ \
--prefix=/usr/@ARCH@-w64-mingw32/ \ --prefix=/usr/@ARCH@-w64-mingw32/ \
--host=@ARCH@-w64-mingw32 \ --host=@ARCH@-w64-mingw32 \
--enable-wildcard \ --enable-wildcard \
@ARCH_FLAGS@ \ MAKEINFO=true || cat config.log \
MAKEINFO=true \
&& make --quiet -j@J@ MAKEINFO=true \ && make --quiet -j@J@ MAKEINFO=true \
&& make --quiet -j@J@ MAKEINFO=true install-strip DESTDIR=/opt \ && make --quiet -j@J@ MAKEINFO=true install-strip DESTDIR=/opt \
&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ && rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \

View file

@ -15,7 +15,6 @@ RUN wget -q @MINGW_URLBASE@/@MINGW_SOURCE@ \
--prefix=/usr/@ARCH@-w64-mingw32/ \ --prefix=/usr/@ARCH@-w64-mingw32/ \
--host=@ARCH@-w64-mingw32 \ --host=@ARCH@-w64-mingw32 \
--disable-shared \ --disable-shared \
@ARCH_FLAGS@ \
MAKEINFO=true \ MAKEINFO=true \
&& make --quiet -j@J@ MAKEINFO=true \ && make --quiet -j@J@ MAKEINFO=true \
&& make --quiet -j@J@ MAKEINFO=true install-strip DESTDIR=/opt \ && make --quiet -j@J@ MAKEINFO=true install-strip DESTDIR=/opt \

View file

@ -52,40 +52,9 @@ RUN bash -c 'mkdir -p /usr/lib/ccache && ls /usr/bin/{,*-}{cc,c++,gcc,g++}{,-[0-
ENV PATH=/usr/lib/ccache:$PATH ENV PATH=/usr/lib/ccache:$PATH
RUN apt-get install -y \ RUN apt-get install -y \
autoconf-archive \ tini \
fontforge \
fonttools \
libxpresent-dev \
libxpresent-dev:i386 \
libopenblas-dev \
libopenblas-dev:i386 \
python3-mako \
python3-pefile \
libcapstone-dev \
libcapstone-dev:i386 \
libutfcpp-dev \
yasm \
nasm \
&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ && rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
COPY ninja-jobserver-client.patch /tmp
RUN wget -q @NINJA_URLBASE@/@NINJA_SOURCE@ \
&& echo '@NINJA_SHA256@ @NINJA_SOURCE@' \
&& echo '@NINJA_SHA256@ @NINJA_SOURCE@' | sha256sum -c - \
&& tar xf @NINJA_SOURCE@ -C /tmp && rm @NINJA_SOURCE@ \
&& cd /tmp/ninja-@NINJA_VERSION@ \
&& patch -p1 < /tmp/ninja-jobserver-client.patch \
&& mkdir build \
&& cd build \
&& cmake .. \
&& make \
&& cp ninja $(which ninja) \
&& cd / \
&& rm -rf /tmp/ninja-@NINJA_VERSION@ \
&& rm -rf /tmp/ninja-jobserver-client.patch
ENTRYPOINT ["/usr/bin/tini-static", "-s", "-g", "--"] ENTRYPOINT ["/usr/bin/tini-static", "-s", "-g", "--"]
CMD ["/bin/bash"] CMD ["/bin/bash"]

View file

@ -14,69 +14,54 @@ hid is a layer above rawinput, where Windows will talk HID to the controller on
the game's behalf. This turns the raw HID protocol data into usable things like the game's behalf. This turns the raw HID protocol data into usable things like
buttons and joysticks. buttons and joysticks.
dinput is a "legacy" API that allows applications to talk to any type of dinput is a "legacy" API that allows applictions to talk to any type of
joystick. On Windows, it is implemented on top of HID. Notably, dinput allows joystick. On Windows, it is likely implemented on top of HID. Notably, dinput
easy access to controllers that no other API does, so it is still used by allows easy access to controllers that no other API does, so it is still used
modern games despite being "legacy." by modern games despite being "legacy."
xinput is the new API that supports only Xbox controllers. On Windows, it is xinput is the new API that supports only Xbox controllers. On Windows, it is
likely implemented on top of rawinput, as Xbox controllers do not behave like likely implemented on top of rawinput, as Xbox controllers do not behave like
standard HID devices. standard HID devices.
winmm is the very legacy API, for when joysticks were hooked up through the winmm is the very legacy API, for when joysticks were hooked up through the
soundcard. On modern Windows, it is implemented on top of dinput. soundcard. On modern Windows, it is likely implemented on top of hid.
Here is a diagram for how these APIs are mapped down to the system by Proton: Here is a diagram for how these APIs are mapped down to the system by Proton:
---------- --------
| game.exe | |game.exe|
---------- --------
/ | | | \ / | | | | application
/ | | | \ application ********|**|*|*|**|***********************
*********/****|*|**|****\****************** ------ / | | | | wine
| | | \ \ wine |xinput| | | | |
| | | | \ ------ / | | |
------ | | ----- \ | / | | |
|xinput| | | |winmm| | --- / / | \
------ | | ----- | |hid|--- / | \
| | \ | | --- / | \
| | | | | | / | \
\ | ------ | -------- ------ -----
\ | |dinput| | |rawinput| |dinput| |winmm|
\ | ------ / -------- ------ -----
| | / / | | |
| | | / ----------- | ----------------
--- / |winebus.sys| | |winejoystick.drv|
|hid| / ----------- | ----------------
--- / | \ / | wine
| / ***|*********|***********|****************
| | \ | | linux
-------- \ ---- |
|rawinput| \ |SDL2| |
-------- \ ---- |
| \ | \ |
----------- \ | ---- |
|winebus.sys| \ | \ |
----------- ------ -----------
| | wine |hidraw| |input event|
************|******|*********************** ------ -----------
| | linux
| ----
| |SDL2|
| ----
| | \
| | \
| | |
------ -----------
|hidraw| |input event|
------ -----------
| |
\ /
========
|hardware|
========
Some things to note: Some things to note:
@ -89,7 +74,7 @@ other) protocol can talk directly to those devices.
Xbox controllers do not speak real HID. Instead Windows provides a HID Xbox controllers do not speak real HID. Instead Windows provides a HID
compatibility layer so dinput, which is implemented on top of HID, will present compatibility layer so dinput, which is implemented on top of HID, will present
the Xbox controller to legacy games. Of course some games (Unity) have noticed the Xbox controller to legacy games. Of course some games (Unity) have noticed
that, and talk directly to this internal HID interface, so we need to duplicate that, and talk directly to this internal HID interface, so we had to duplicate
it bit-for-bit in winebus.sys. it bit-for-bit in winebus.sys.
Some games support talking directly to certain controller types. For example, Some games support talking directly to certain controller types. For example,
@ -113,3 +98,16 @@ device for your controller, especially if it is a less well-known controller.
In those cases, we access it through SDL2 via its linux js backend and try to In those cases, we access it through SDL2 via its linux js backend and try to
treat it as an Xbox controller, even if it is not mapped with the Steam client treat it as an Xbox controller, even if it is not mapped with the Steam client
mapping feature. mapping feature.
Future improvements:
winmm's joystick APIs should be implemented on top of HID so it can use the
Steam controller mapping feature via winebus/SDL2.
xinput should be implemented on top of rawinput, as the Xbox HID compatibility
layer does not provide all of the features xinput requires. We currently use a
hack to work around this.
dinput should be implemented on top of HID, so we can avoid the code
duplication we have now with both winebus and dinput using SDL2 directly.

View file

@ -1,186 +0,0 @@
Proton Debugging Tips
=====================
For loading dev builds of games onto a Steam Deck see
<https://partner.steamgames.com/doc/steamdeck/loadgames>
Debug Proton Builds
-------------------
See [README.md#debugging](../README.md#debugging).
Attaching A Debugger
--------------------
Running GDB and attaching to a running .exe works out of the box:
```
$ ps | grep Game
2263566 ? tsl 0:09 Z:\home\ivyl\.local\share\Steam\steamapps\common\Game\Game.exe
$ gdb
GNU gdb (GDB) 14.1
...
(gdb) attach 2263566
Attaching to process 2263566
[New LWP 2263569]
...
0x000075dce0cd788d in ?? ()
```
With Proton Experimental (and >= 9.0-2), GDB should be able to load the symbols right
away. However, for the most seamless experience you will want to use a
custom version of GDB with a couple of patches to better integrate with
Wine.
You can find this fork at https://gitlab.winehq.org/rbernon/binutils-gdb,
which you can build with `configure && make all-gdb && make install-gdb`.
Make sure to have python development packages installed, as GDB python
support will be required.
With this custom GDB you can `source` [Wine's custom unwinder](https://github.com/ValveSoftware/wine/blob/experimental_9.0/tools/gdbunwind.py)
in your `~/.gdbinit`, and you will get backtraces across PE / unix boundaries.
With older Proton you can use `source` [wine's
gdbinit](https://github.com/ValveSoftware/wine/blob/proton_8.0/tools/gdbinit.py)
to make `load-symbol-files` command available that uses `/proc/$pid/maps` to
load the symbols:
```
(gdb) source ~/src/proton/wine/tools/gdbinit.py
(gdb) load-symbol-files
loading symbols for /home/ivyl/.local/share/Steam/steamapps/common/Proton - Experimental/files/lib64/wine/x86_64-windows/kernelbase.dll
...
(gdb) bt
#0 0x000075dce0cd788d in ?? ()
#1 0x000075dcdf26e842 in futex_wait (timeout=0x0, val=0, addr=0x75dcdd8383e0) at ../src-wine/dlls/ntdll/unix/sync.c:127
#2 NtWaitForAlertByThreadId (address=<optimized out>, timeout=0x0) at ../src-wine/dlls/ntdll/unix/sync.c:2658
#3 <signal handler called>
#4 0x000000017000ebb4 in NtWaitForAlertByThreadId ()
#5 0x00000001700367f9 in RtlWaitOnAddress (addr=addr@entry=0x4850970, cmp=0x3d12fa9c, cmp@entry=0x3d12fabc, size=size@entry=4, timeout=timeout@entry=0x0) at ../src-wine/dlls/ntdll/sync.c:941
#6 0x000000017003276a in RtlSleepConditionVariableSRW (variable=0x4850970, lock=0x4850908, timeout=0x0, flags=<optimized out>) at ../src-wine/dlls/ntdll/sync.c:837
#7 0x000000007b061e41 in SleepConditionVariableSRW (variable=<optimized out>, lock=<optimized out>, timeout=<optimized out>, flags=<optimized out>) at ../src-wine/dlls/kernelbase/sync.c:1064
#8 0x000000035915c892 in dxvk::condition_variable::wait (lock=..., this=0x4850970) at ../src-dxvk/src/dxvk/../util/log/../thread.h:251
#9 dxvk::condition_variable::wait<dxvk::DxvkPipelineWorkers::runWorker(dxvk::DxvkPipelinePriority)::<lambda()> > (pred=..., lock=..., this=0x4850970) at ../src-dxvk/src/dxvk/../util/log/../thread.h:257
#10 dxvk::DxvkPipelineWorkers::runWorker (this=0x48508f0, maxPriority=dxvk::DxvkPipelinePriority::Normal) at ../src-dxvk/src/dxvk/dxvk_pipemanager.cpp:140
#11 0x00000003591a7781 in std::function<void ()>::operator()() const (this=0x4852ee0) at /usr/x86_64-w64-mingw32/include/c++/10.3.0/bits/std_function.h:622
#12 dxvk::thread::threadProc (arg=0x4852ed0, arg@entry=<error reading variable: value has been optimized out>) at ../src-dxvk/src/util/thread.cpp:68
#13 0x000000007b6146ed in BaseThreadInitThunk (unknown=<optimized out>, entry=<optimized out>, arg=<optimized out>) at ../src-wine/dlls/kernel32/thread.c:61
#14 0x000000017000f1a7 in RtlUserThreadStart ()
#15 0x0000000000000000 in ?? ()
```
Attaching Before The Program Starts
-----------------------------------
Launch the software with `PROTON_WAIT_ATTACH=1 %command%` set as the launch
command in game's properties. Our `steam.exe` shim will then wait for debugger
and only then exec the proper executable.
Make sure that you follow child processes:
```
set follow-fork-mode child
```
Getting Shell Inside Of The Steam Runtime
------------------------------------------
Set your launch options to: `PROTON_LOG=1 STEAM_COMPAT_LAUNCHER_SERVICE=proton
%command%`
Then in `steam-$GAMEID.log` you should see the following:
```
Starting program with command-launcher service.
To run commands in the per-app container, use a command like:
/home/ivyl/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper/pressure-vessel/bin/steam-runtime-launch-client \
--bus-name=:1.307 \
--directory='' \
-- \
bash
```
After invoking it you end up in a shell with the environment variables,
including `WINEPREFIX` are set and you can invoke `wine` directly, e.g.:
```
[ivyl@crabcraft x64]$ wine winedbg
Wine-dbg> info process
pid threads executable (all id:s are in hex)
0000028c 1 'start.exe'
0000029c 1 \_ 'winedbg.exe'
=000002a4 1 \_ 'winedbg.exe'
00000294 2 \_ 'conhost.exe'
00000030 10 'services.exe'
000000e4 6 \_ 'rpcss.exe'
000000b0 3 \_ 'svchost.exe'
00000094 6 \_ 'plugplay.exe'
00000064 9 \_ 'winedevice.exe'
0000003c 8 \_ 'winedevice.exe'
00000020 3 'steam.exe'
00000128 62 \_ 'Game.exe'
000000d0 3 \_ 'explorer.exe'
0000010c 3 \_ 'tabtip.exe'
```
**NOTE:** If you need a predictable bus name instead of the unique connection
name (the `:1.307` from example above) you can use `com.steampowered.App1234567`
where 1234567 is the Steam App ID for the title you are debugging.
You can always use a tool like `qdbus` to list available bus names.
Starting A Different Binary
---------------------------
If you want to start a different binary than the game's default you can use a
few methods. All of the examples below will use `winecfg`.
### Substitution
You can use the following launch option:
```
echo "%command%" | sed 's/proton waitforexitandrun .*/proton waitforexitandrun winecfg/' | sh
```
The full substitution of `proton waitforexitandrun .*` is necessary as the
original `%command%` is very long and may contain multiple mentions of `proton`
or the original binary.
### Pressure-Vessel Shell
[Pressure-vessel][pv] allows to spawn an xterm instead of launching Proton. This
can be accomplished by setting `PRESSURE_VESSEL_SHELL=instead`. The easiest way
is to set the launch option to:
[pv]: (https://gitlab.steamos.cloud/steamrt/steam-runtime-tools/-/tree/main/pressure-vessel)
`PRESSURE_VESSEL_SHELL=instead %command%`
The original coommand is then contained in `$@`, e.g.:
```
/home/ivyl/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper/pressure-vessel/bin/steam-runtime-launcher-interface-0 container-runtime /home/ivyl/.local/share/Steam/steamapps/common/Proton - Experimental/proton waitforexitandrun /home/ivyl/.local/share/Steam/steamapps/common/Game/Game.exe
```
From this point you can invoke `proton` script as all the required environment
variables are set. If you are copying the path from `$@` make sure to escape or
quote parts that contain spaces.
To start `winecfg` something like this can be entered:
```
"/home/ivyl/.local/share/Steam/steamapps/common/Proton - Experimental/proton" waitforexitandrun winecfg
```

View file

@ -1,26 +0,0 @@
# ICMP ECHO requests (ping)
Some games rely on ICMP ECHO requests to detect network connectivity,
or to measure connection ping.
Proton supports sending ICMP ECHO requests using RAW sockets or DGRAM
ICMP sockets, but the former requires elevated privileges, and the
latter may also be disabled by default.
DGRAM ICMP sockets can be enabled for a given set of user groups by
running the following command, and will stay enabled until next reboot:
```
sudo sysctl -w net.ipv4.ping_group_range="<low> <high>"
```
Where <low> (resp <high>) is lower bound (resp higher) of the user
groups which will be allowed to create such sockets. It is possible to
enable them for any group by using "0 4294967295".
In order for the configuration to be persistent, it is possible to add
the following line to `/etc/sysctl.conf` (or a file in `/etc/sysctl.d`):
```
net.ipv4.ping_group_range="<low> <high>"
```

View file

@ -1,146 +0,0 @@
---
How to make Proton work with PRIME
---
# Setup
## Context
PRIME is a technology that allows one GPU to perform graphics rendering and
another GPU to display the result on the screen.
This document assumes that PRIME / GPU offloading is configured and working
for native software and will touch only on things specific to Proton.
If you need help with configuring PRIME in the first place you may find the
following resources useful:
* https://wiki.archlinux.org/index.php/PRIME
* https://wiki.debian.org/NVIDIA%20Optimus
## DirectX 9, 10, 11 and 12 (DXVK and VKD3D-Proton)
The implementations of those graphics APIs are built on top of Vulkan and
**most of the games should work out of the box.** Discrete GPUs are
prioritized (i.e. enumerated first) and games should default to them.
If you have multiple discrete GPUs or the wrong GPU is selected as the
default one and the game doesn't have the means of selecting an adapter you
can limit what gets enumerated.
In Steam, set your game's Properties -> GENERAL -> LAUNCH OPTIONS to:
DXVK_FILTER_DEVICE_NAME="GTX 1650" %command%
This should work for GeForce GTX 1650. A different name may be required for
your particular graphics card (e.g. "VEGA10" for Vega 56/64). You can use
`vulkaninfo` program (usually packaged as `vulkan-tools`) to check the names
of your GPUs.
## DirectX 8 and OpenGL
Those APIs are implemented on top of OpenGL and require a bit more
configuration.
The two most common PRIME scenarios are covered, but the content should be
enough to troubleshoot and make any other configuration work.
### AMD -> Integrated Intel (Mesa -> Mesa)
In Steam, set your game's Properties -> GENERAL -> LAUNCH OPTIONS to:
DRI_PRIME=1 %command%
### Nvidia -> Integrated Intel (Nvidia's Proprietary Driver -> Mesa)
In Steam set your game's Properties -> GENERAL -> LAUNCH OPTIONS to:
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia %command%
## Vulkan
In case Vulkan games don't allow you to select a GPU or you experience
problems with graphics APIs implemented on top of Vulkan you can limit or
alter the GPU selection.
### AMD -> Integrated Intel (Mesa -> Mesa)
In Steam, set your game's Properties -> GENERAL -> LAUNCH OPTIONS to:
DRI_PRIME=1 %command%
This will cause the devices to change order, i.e. the first GPU will swap
places with another one.
You can also limit the selection using Mesa's DEVICE_SELECT Vulkan layer. To
list the GPUs:
$ MESA_VK_DEVICE_SELECT=list vulkaninfo
selectable devices:
GPU 0: 1002:67df "AMD RADV POLARIS10 (ACO)" discrete GPU 0000:01:00.0
GPU 1: 8086:412 "Intel(R) HD Graphics 4600 (HSW GT2)" integrated GPU 0000:00:02.0
Then set the launch options using one of the vendor and product ids, e.g.:
DRI_PRIME=1 MESA_VK_DEVICE_SELECT=1002:67df $command%
### Nvidia -> Integrated Intel (Nvidia's Proprietary Driver -> Mesa)
In Steam set your game's Properties -> GENERAL -> LAUNCH OPTIONS to:
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only %command%
This will load the Optimus Vulkan layer and use it to limit the GPU selection
to NVIDIA only. Using `non_NVIDIA_only` will do the opposite.
# Troubleshooting
## Performance
Having vsync enabled in-game is known to cause problems in PRIME
configurations. If you experience poor framerates / freezes try disabling
vsync.
## Device selection
To make sure that all libraries have selected the correct GPU you can check
the logs.
In the game's properties set the following 'LAUNCH OPTIONS':
PROTON_LOG=1 WINEDEBUG=+d3d VKD3D_DEBUG=trace
After running the game, you should find a file named `steam-$APPID.log` in your
Home directory.
For wined3d/DXGI, look for:
```
trace:d3d:wined3d_adapter_init_gl_caps GL_RENDERER: "Radeon RX 580 Series (POLARIS10, DRM 3.40.0, 5.10.9-zen1-1-zen, LLVM 11.0.1)".
```
For DXVK, look for:
```
info: DXVK: v1.7.3-36-g85c70ad5
...
info: AMD RADV POLARIS10 (ACO):
info: Driver: 20.3.3
info: Vulkan: 1.2.145
```
For VKD3D-Proton, look for:
```
trace:vkd3d_trace_physical_device_properties: Device name: AMD RADV POLARIS10 (ACO).
trace:vkd3d_trace_physical_device_properties: Vendor ID: 0x1002, Device ID: 0x67df.
```
Refer to the main README and each project's own documentation for more details
on logging. Extra logging can destroy game performance. Make sure that you
clear your 'LAUNCH OPTIONS' after troubleshooting.

View file

@ -1,20 +0,0 @@
# Thread priorities
Proton supports fine-grained thread priority control using `setpriority(2)` to
set thread niceness values corresponding to the game threads' Windows base
priority levels. However, most default Linux configurations don't allow
individual threads to raise their priority, so some system configuration is
likely required.
It can be configured as a privileged user by editing the
`/etc/security/limits.conf` file, or using the `/etc/security/limits.d/` conf
directory, and adding the following line at the end:
```
* hard nice -15
```
Where -15 could be any value between [-20,0] that will correspond to the
minimum niceness (the highest priority) a thread can get to. The lower the
value, the more CPU time a high priority thread will get, at the expense of
others and other processes, possibly making the system less responsive.

2
dxvk

@ -1 +1 @@
Subproject commit d0ea5a4a87c9b4ee8a7d700c5f55baf26054bd6a Subproject commit b6248a20ec85994ee355d3ed489e167f37ebde6f

@ -1 +0,0 @@
Subproject commit bd542144518dce62b39f131b20093c295e21b7e1

1
ffmpeg

@ -1 +0,0 @@
Subproject commit a77521cd5d27e955b16e8097eecefc779ffdcb6d

@ -1 +1 @@
Subproject commit 4b0192046158094654e865245832c66d2104219e Subproject commit 9510ebd130bcb4dfc76b053b438d8a97a3ed4600

View file

@ -1,94 +0,0 @@
Copyright 2018 The Noto Project Authors (github.com/googlei18n/noto-fonts)
This Font Software is licensed under the SIL Open Font License,
Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font
creation efforts of academic and linguistic communities, and to
provide a free and open framework in which fonts may be shared and
improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply to
any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software
components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to,
deleting, or substituting -- in part or in whole -- any of the
components of the Original Version, by changing formats or by porting
the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed,
modify, redistribute, and sell modified and unmodified copies of the
Font Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in
Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the
corresponding Copyright Holder. This restriction only applies to the
primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created using
the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,6 +1,8 @@
diff --git a/LiberationMono-Regular.sfd b/LiberationMono-Regular.sfd
index 0cedbd4..13b9a63 100644
--- a/LiberationMono-Regular.sfd --- a/LiberationMono-Regular.sfd
+++ b/LiberationMono-Regular.sfd +++ b/LiberationMono-Regular.sfd
@@ -3935,6 +3935,10 @@ @@ -3931,6 +3931,10 @@ ShortTable: maxp 16
3 3
1 1
EndShort EndShort
@ -8,6 +10,6 @@
+!!!!"!!**$!<E0/!"B2J!!iQ/s8E!)!"&](!"&]4s8;p*!"8i*!"8i9s8;p,!"Ao*!"Ju<s82j- +!!!!"!!**$!<E0/!"B2J!!iQ/s8E!)!"&](!"&]4s8;p*!"8i*!"8i9s8;p,!"Ao*!"Ju<s82j-
+!"Ju+!"],?s82j/!"],,!"o8Bs8)d0!"f2-!#,DFs8)cr +!"Ju+!"],?s82j/!"],,!"o8Bs8)d0!"f2-!#,DFs8)cr
+EndTtf +EndTtf
LangName: 1033 "" "" "Regular" "Ascender - Liberation Mono" "" "Version 2.1.5" "" "Liberation is a trademark of Red Hat, Inc. registered in U.S. Patent and Trademark Office and certain other jurisdictions." "Ascender Corporation" "Steve Matteson" "Based on Cousine, which was designed by Steve Matteson as an innovative, refreshing sans serif design that is metrically compatible with Courier New+ISIA. Cousine offers improved on-screen readability characteristics and the pan-European WGL character set and solves the needs of developers looking for width-compatible fonts to address document portability across platforms." "http://www.ascendercorp.com/" "http://www.ascendercorp.com/typedesigners.html" "Licensed under the SIL Open Font License, Version 1.1" "http://scripts.sil.org/OFL" LangName: 1033 "" "" "Regular" "Ascender - Liberation Mono" "" "Version 2.00.3" "" "Liberation is a trademark of Red Hat, Inc. registered in U.S. Patent and Trademark Office and certain other jurisdictions." "Ascender Corporation" "Steve Matteson" "Based on Cousine, which was designed by Steve Matteson as an innovative, refreshing sans serif design that is metrically compatible with Courier New+ISIA. Cousine offers improved on-screen readability characteristics and the pan-European WGL character set and solves the needs of developers looking for width-compatible fonts to address document portability across platforms." "http://www.ascendercorp.com/" "http://www.ascendercorp.com/typedesigners.html" "Licensed under the SIL Open Font License, Version 1.1" "http://scripts.sil.org/OFL"
GaspTable: 3 8 2 17 1 65535 3 0 GaspTable: 3 8 2 17 1 65535 3 0
Encoding: UnicodeBmp Encoding: UnicodeBmp

View file

@ -1,5 +0,0 @@
[SourceHanSansK-Regular]
f=3,1,0x412,\B9D1\C740 \ACE0\B515
s=3,1,0x412,Regular
f=Malgun Gothic
s=Regular

View file

@ -1,5 +0,0 @@
[SourceHanSansSC-Regular]
f=3,1,0x804,\65B0\5B8B\4F53
s=3,1,0x804,\5E38\89C4
f=NSimSun
s=Regular

View file

@ -1,5 +0,0 @@
[SourceHanSansSC-Regular]
f=3,1,0x804,\5B8B\4F53
s=3,1,0x804,\5E38\89C4
f=SimSun
s=Regular

View file

@ -1,86 +0,0 @@
--- a/UmeGothic-nametable.ttx 2021-11-14 02:41:52.823198735 +0900
+++ b/UmeGothic-nametable.ttx 2021-11-14 02:44:50.269352384 +0900
@@ -5,8 +5,12 @@
<namerecord nameID="0" platformID="1" platEncID="0" langID="0x411" unicode="True">
Author: HORAI Wataru. License: This font is a free software. Unlimited permission is granted to use, copy, and distribute it, with or without modification, either commercially and noncommercially. THIS FONT IS PROVIDED "AS IS" WITHOUT WARRANTY.
</namerecord>
+ <!--
+ NameID=1 (Family)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x411" unicode="True">
- Ume Gothic
+ MS Gothic
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x411" unicode="True">
Regular
@@ -14,8 +18,12 @@
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x411" unicode="True">
Ume Gothic
</namerecord>
+ <!--
+ NameID=4 (Full)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x411" unicode="True">
- Ume Gothic
+ MS Gothic
</namerecord>
<namerecord nameID="5" platformID="1" platEncID="0" langID="0x411" unicode="True">
Look update time of this file.
@@ -29,8 +37,12 @@
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
Author: HORAI Wataru. License: This font is a free software. Unlimited permission is granted to use, copy, and distribute it, with or without modification, either commercially and noncommercially. THIS FONT IS PROVIDED "AS IS" WITHOUT WARRANTY.
</namerecord>
+ <!--
+ NameID=1 (Family)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
- Ume Gothic
+ MS Gothic
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
@@ -38,8 +50,12 @@
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
Ume Gothic
</namerecord>
+ <!--
+ NameID=4 (Full)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
- Ume Gothic
+ MS Gothic
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
Look update time of this file.
@@ -53,8 +69,12 @@
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x411">
作者: 蓬莱和多流. ライセンス: このフォントはフリー(自由な)ソフトウエアです。あらゆる改変の有無に関わらず、また商業的な利用であっても、自由に利用、複製、再配布することができますが、全て無保証とさせていただきます。
</namerecord>
+ <!--
+ NameID=1 (Family)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x411">
- 梅ゴシック
+ ゴシック
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x411">
Regular
@@ -62,8 +82,12 @@
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x411">
梅ゴシック
</namerecord>
+ <!--
+ NameID=4 (Full)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x411">
- 梅ゴシック
+ ゴシック
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x411">
Look update time of this file.

View file

@ -1,86 +0,0 @@
--- a/UmePGothic-nametable.ttx 2021-11-14 02:41:46.983127001 +0900
+++ b/UmePGothic-nametable.ttx 2021-11-14 02:44:42.413257975 +0900
@@ -5,8 +5,12 @@
<namerecord nameID="0" platformID="1" platEncID="0" langID="0x411" unicode="True">
Author: HORAI Wataru. License: This font is a free software. Unlimited permission is granted to use, copy, and distribute it, with or without modification, either commercially and noncommercially. THIS FONT IS PROVIDED "AS IS" WITHOUT WARRANTY.
</namerecord>
+ <!--
+ NameID=1 (Family)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x411" unicode="True">
- Ume P Gothic
+ MS PGothic
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x411" unicode="True">
Regular
@@ -14,8 +18,12 @@
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x411" unicode="True">
Ume P Gothic
</namerecord>
+ <!--
+ NameID=4 (Full)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x411" unicode="True">
- Ume P Gothic
+ MS PGothic
</namerecord>
<namerecord nameID="5" platformID="1" platEncID="0" langID="0x411" unicode="True">
Look update time of this file.
@@ -29,8 +37,12 @@
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
Author: HORAI Wataru. License: This font is a free software. Unlimited permission is granted to use, copy, and distribute it, with or without modification, either commercially and noncommercially. THIS FONT IS PROVIDED "AS IS" WITHOUT WARRANTY.
</namerecord>
+ <!--
+ NameID=1 (Family)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
- Ume P Gothic
+ MS PGothic
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
@@ -38,8 +50,12 @@
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
Ume P Gothic
</namerecord>
+ <!--
+ NameID=4 (Full)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
- Ume P Gothic
+ MS PGothic
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
Look update time of this file.
@@ -53,8 +69,12 @@
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x411">
作者: 蓬莱和多流. ライセンス: このフォントはフリー(自由な)ソフトウエアです。あらゆる改変の有無に関わらず、また商業的な利用であっても、自由に利用、複製、再配布することができますが、全て無保証とさせていただきます。
</namerecord>
+ <!--
+ NameID=1 (Family)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x411">
- 梅Pゴシック
+ Pゴシック
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x411">
Regular
@@ -62,8 +82,12 @@
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x411">
梅Pゴシック
</namerecord>
+ <!--
+ NameID=4 (Full)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x411">
- 梅Pゴシック
+ Pゴシック
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x411">
Look update time of this file.

View file

@ -1,86 +0,0 @@
--- a/UmeUIGothic-nametable.ttx 2021-11-14 02:41:57.955261726 +0900
+++ b/UmeUIGothic-nametable.ttx 2021-11-14 02:44:57.653441054 +0900
@@ -5,8 +5,12 @@
<namerecord nameID="0" platformID="1" platEncID="0" langID="0x411" unicode="True">
Author: HORAI Wataru. License: This font is a free software. Unlimited permission is granted to use, copy, and distribute it, with or without modification, either commercially and noncommercially. THIS FONT IS PROVIDED "AS IS" WITHOUT WARRANTY.
</namerecord>
+ <!--
+ NameID=1 (Family)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x411" unicode="True">
- Ume UI Gothic
+ MS UI Gothic
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x411" unicode="True">
Regular
@@ -14,8 +18,12 @@
<namerecord nameID="3" platformID="1" platEncID="0" langID="0x411" unicode="True">
Ume UI Gothic
</namerecord>
++ <!--
++ NameID=4 (Full)
++ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
++ -->
<namerecord nameID="4" platformID="1" platEncID="0" langID="0x411" unicode="True">
- Ume UI Gothic
+ MS UI Gothic
</namerecord>
<namerecord nameID="5" platformID="1" platEncID="0" langID="0x411" unicode="True">
Look update time of this file.
@@ -29,8 +37,12 @@
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
Author: HORAI Wataru. License: This font is a free software. Unlimited permission is granted to use, copy, and distribute it, with or without modification, either commercially and noncommercially. THIS FONT IS PROVIDED "AS IS" WITHOUT WARRANTY.
</namerecord>
+ <!--
+ NameID=1 (Family)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
- Ume UI Gothic
+ MS UI Gothic
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
@@ -38,8 +50,12 @@
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x409">
Ume UI Gothic
</namerecord>
+ <!--
+ NameID=4 (Full)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
- Ume UI Gothic
+ MS UI Gothic
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x409">
Look update time of this file.
@@ -53,8 +69,12 @@
<namerecord nameID="0" platformID="3" platEncID="1" langID="0x411">
作者: 蓬莱和多流. ライセンス: このフォントはフリー(自由な)ソフトウエアです。あらゆる改変の有無に関わらず、また商業的な利用であっても、自由に利用、複製、再配布することができますが、全て無保証とさせていただきます。
</namerecord>
+ <!--
+ NameID=1 (Family)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x411">
- 梅UIゴシック
+ MS UI Gothic
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x411">
Regular
@@ -62,8 +82,12 @@
<namerecord nameID="3" platformID="3" platEncID="1" langID="0x411">
梅UIゴシック
</namerecord>
+ <!--
+ NameID=4 (Full)
+ https://adobe-type-tools.github.io/font-tech-notes/pdfs/5149.OTFname_Tutorial.pdf
+ -->
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x411">
- 梅UIゴシック
+ MS UI Gothic
</namerecord>
<namerecord nameID="5" platformID="3" platEncID="1" langID="0x411">
Look update time of this file.

View file

@ -1,140 +0,0 @@
0020-007E
00A0-0377
037A-037F
0384-038A
038C
038E-03A1
03A3-052F
0531-0556
0559-055F
0561-0587
0589-058A
058D-058F
0591-05C7
05D0-05EA
05F0-05F4
0600-061C
061E-06FF
0750-077F
08A0-08B4
08B6-08BD
08D4-08FF
1D00-1DCA
1DFE-1F15
1F18-1F1D
1F20-1F45
1F48-1F4D
1F50-1F57
1F59
1F5B
1F5D
1F5F-1F7D
1F80-1FB4
1FB6-1FC4
1FC6-1FD3
1FD6-1FDB
1FDD-1FEF
1FF2-1FF4
1FF6-1FFE
2000-200F
2012-2022
2026
202A-2030
2032-2034
2039-203A
203C-203E
2044
205E
206A-2070
2074-2079
207F
2090-2094
20A0-20BF
20F0
2105
2113
2116-2117
2122
2126
212E
214D-214E
2153-2154
215B-215E
2184
2190-2195
21A8
2202
2206
220F
2211-2212
2215
2219-221A
221E-221F
2229
222B
2248
2260-2261
2264-2265
2302
2310
2320-2321
2500
2502
250C
2510
2514
2518
251C
2524
252C
2534
253C
2550-256C
2580
2584
2588
258C
2590-2593
25A0-25A1
25AA-25AC
25B2
25BA
25BC
25C4
25CA-25CC
25CF
25D8-25D9
25E6
263A-263C
2640
2642
2660
2663
2665-2666
266A-266B
266F
2C60-2C7F
2E17
A717-A7AE
A7B0-A7B7
A7F7-A7FF
AB30-AB65
FB00-FB06
FB13-FB17
FB1D-FB36
FB38-FB3C
FB3E
FB40-FB41
FB43-FB44
FB46-FBC1
FBD3-FBFF
FC5E-FC63
FCF2-FCF4
FD3C-FD3F
FDF2
FDF4
FDFA-FDFD
FE20-FE23
FE70-FE74
FE76-FEFC
FFFC

View file

@ -1,123 +0,0 @@
0020-007E
00A0-0377
037A-037F
0384-038A
038C
038E-03A1
03A3-052F
0531-0556
0559-055F
0561-0587
0589-058A
058D-058F
0591-05C7
05D0-05EA
05F0-05F4
0600-061C
061E-06FF
0750-077F
0783
08A0-08B4
08B6-08BD
08D4-08FF
09F2-09F3
0AF1
0BF9
0E01-0E3A
0E3F-0E5B
10A0-10C5
10C7
10CD
10D0-10FF
17DB
1D00-1DCA
1DFE-1F15
1F18-1F1D
1F20-1F45
1F48-1F4D
1F50-1F57
1F59
1F5B
1F5D
1F5F-1F7D
1F80-1FB4
1FB6-1FC4
1FC6-1FD3
1FD6-1FDB
1FDD-1FEF
1FF2-1FF4
1FF6-1FFE
2000-2064
2066-2071
2074-208E
2090-209C
20A0-20BF
20E3
20F0
2105
2113
2116-2117
2122
2126
212E
2133
214D-214E
2150-218B
2190-2195
21A8
2202
2206
220F
2211-2212
2215
2219-221A
221E-221F
2229
222B
2248
2260-2261
2264-2265
2302
2310
2320-2321
2500
2502
250C
25A1
25AA-25AB
25CA
25CC
25CF
25E6
266F
2C60-2C7F
2D00-2D25
2D27
2D2D
2DE0-2DFF
2E17
A640-A69F
A717-A7AD
A7B0-A7B7
A7F7-A7FF
AB30-AB65
FB00-FB06
FB13-FB17
FB1D-FB36
FB38-FB3C
FB3E
FB40-FB41
FB43-FB44
FB46-FBC1
FBD3-FBFF
FC5E-FC63
FCF2-FCF4
FD3C-FD3F
FDF2
FDF4
FDFA-FDFD
FE20-FE23
FE70-FE74
FE76-FEFC
FEFF
FFFC-FFFD

View file

@ -1,166 +0,0 @@
000D
0020-007E
00A0-00FF
0131
0152-0153
0160-0161
0178
017D-017E
0192
02BC
02C6-02C7
02D8
02DA
02DC
03BC
0900-0983
0985-098C
098F-0990
0993-09A8
09AA-09B0
09B2
09B6-09B9
09BC-09C4
09C7-09C8
09CB-09CE
09D7
09DC-09DD
09DF-09E3
09E6-09FE
0A01-0A03
0A05-0A0A
0A0F-0A10
0A13-0A28
0A2A-0A30
0A32-0A33
0A35-0A36
0A38-0A39
0A3C
0A3E-0A42
0A47-0A48
0A4B-0A4D
0A51
0A59-0A5C
0A5E
0A66-0A76
0A81-0A83
0A85-0A8D
0A8F-0A91
0A93-0AA8
0AAA-0AB0
0AB2-0AB3
0AB5-0AB9
0ABC-0AC5
0AC7-0AC9
0ACB-0ACD
0AD0
0AE0-0AE3
0AE6-0AF1
0AF9-0AFF
0B01-0B03
0B05-0B0C
0B0F-0B10
0B13-0B28
0B2A-0B30
0B32-0B33
0B35-0B39
0B3C-0B44
0B47-0B48
0B4B-0B4D
0B56-0B57
0B5C-0B5D
0B5F-0B63
0B66-0B77
0B82-0B83
0B85-0B8A
0B8E-0B90
0B92-0B95
0B99-0B9A
0B9C
0B9E-0B9F
0BA3-0BA4
0BA8-0BAA
0BAE-0BB9
0BBE-0BC2
0BC6-0BC8
0BCA-0BCD
0BD0
0BD7
0BE6-0BFA
0C00-0C0C
0C0E-0C10
0C12-0C28
0C2A-0C39
0C3D-0C44
0C46-0C48
0C4A-0C4D
0C55-0C56
0C58-0C5A
0C60-0C63
0C66-0C6F
0C78-0C8C
0C8E-0C90
0C92-0CA8
0CAA-0CB3
0CB5-0CB9
0CBC-0CC4
0CC6-0CC8
0CCA-0CCD
0CD5-0CD6
0CDE
0CE0-0CE3
0CE6-0CEF
0CF1-0CF2
0D00-0D03
0D05-0D0C
0D0E-0D10
0D12-0D44
0D46-0D48
0D4A-0D4F
0D54-0D63
0D66-0D7F
0D82-0D83
0D85-0D96
0D9A-0DB1
0DB3-0DBB
0DBD
0DC0-0DC6
0DCA
0DCF-0DD4
0DD6
0DD8-0DDF
0DE6-0DEF
0DF2-0DF4
0FD5-0FD8
1C50-1C7F
1CD0-1CF9
200B-200D
2010
2013-2014
2018-201A
201C-201E
2020-2022
2026
2030
2039-203A
2044
20A8
20AC
20B9
2122
2212
2215
2219
2236
25CC
25CF
262C
A830-A839
A8E0-A8FF
ABC0-ABED
ABF0-ABF9
110D0-110E8
110F0-110F9
11100-11134
11136-11146
111E1-111F4

View file

@ -1,7 +1,7 @@
if ($argc != 6) if ($argc != 5)
Error ("Expected arguments - FileName, PSName, FamilyName, FaceName, OutFileName") Error ("Expected arguments - FileName, PSName, FamilyName, FaceName")
endif endif
Open($1) Open($1)
SetFontNames($argv[2], $argv[3], $argv[4]) SetFontNames($argv[2], $argv[3], $argv[4])
Generate($5) Generate($1:r + ".ttf")

View file

@ -1,290 +0,0 @@
#!/usr/bin/env python3
# This script was created by Giovanni Mascellani for CodeWeavers
# Based on merge_noto.py and merge_fonts.py from the nototools
# (https://github.com/googlefonts/nototools), with the following
# copyright notice:
# Copyright 2014-2017 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# The font name changing logic is taken from
# https://github.com/chrissimpkins/fontname.py/blob/master/fontname.py,
# with the following copyright notice:
# Copyright 2019 Christopher Simpkins
# MIT License
# The font subsetting logic is taken from
# https://github.com/fonttools/fonttools/blob/main/Lib/fontTools/subset/__init__.py
# with the following copyright notice:
# Copyright 2013 Google, Inc. All Rights Reserved.
# Google Author(s): Behdad Esfahbod
# The whole fonttools repository is distributed under the MIT license.
"""Merges a number of Noto fonts and then sets a given name to the
result.
"""
import sys
import tempfile
import os
from fontTools import merge
from fontTools import ttLib
from fontTools import subset
from fontTools.ttLib.tables import otTables
def read_line_metrics(font):
metrics = {
"ascent": font["hhea"].ascent,
"descent": font["hhea"].descent,
"usWinAscent": font["OS/2"].usWinAscent,
"usWinDescent": font["OS/2"].usWinDescent,
"sTypoAscender": font["OS/2"].sTypoAscender,
"sTypoDescender": font["OS/2"].sTypoDescender,
"sxHeight": font["OS/2"].sxHeight,
"sCapHeight": font["OS/2"].sCapHeight,
"sTypoLineGap": font["OS/2"].sTypoLineGap,
}
return metrics
def set_line_metrics(font, metrics):
font["hhea"].ascent = metrics["ascent"]
font["hhea"].descent = metrics["descent"]
font["OS/2"].usWinAscent = metrics["usWinAscent"]
font["OS/2"].usWinDescent = metrics["usWinDescent"]
font["OS/2"].sTypoAscender = metrics["sTypoAscender"]
font["OS/2"].sTypoDescender = metrics["sTypoDescender"]
font["OS/2"].sxHeight = metrics["sxHeight"]
font["OS/2"].sCapHeight = metrics["sCapHeight"]
font["OS/2"].sTypoLineGap = metrics["sTypoLineGap"]
def has_gsub_table(fontfile):
font = ttLib.TTFont(fontfile)
return "GSUB" in font
SCRIPT_TO_OPENTYPE_SCRIPT_TAG = {
# Retrieved from Opentype 1.9 delta specs. Prerelease scripttags used out of necessity. https://docs.microsoft.com/en-us/typography/opentype/spec/scripttags
"Carian": "cari",
"CypriotSyllabary": "cprt",
"CyproMinoan": "cpmn",
"Deseret": "dsrt",
"Glagolitic": "glag",
"EgyptianHieroglyphs": "egyp",
"ImperialAramaic": "armi",
"LinearA": "lina",
"LinearB": "linb",
"Lisu": "lisu",
"Lycian": "lyci",
"Lydian": "lydi",
"Ogham": "ogam",
"OldItalic": "ital",
"OldPersian": "xpeo",
"OldSouthArabian": "sarb",
"OldTurkic": "orkh",
"OldSogdian": "sogo",
"OldNorthArabian": "narb",
"OldHungarian": "hung",
"Osmanya": "osma",
"Phoenician": "phnx",
"SumeroAkkadianCuneiform": "xsux",
"Ugaritic": "ugar",
"OlChiki": "olck",
"TaiLe": "tale",
"Cuneiform": "xsux",
"Cypriot": "cprt",
"Runic": "runr",
"Shavian": "shaw",
"Vai": "vai ",
"Yi": "yi ",
"AnatolianHieroglyphs": "hluw",
"Bamum": "bamu",
"ByzantineMusic": "byzm",
"Gothic": "goth",
"ImperialAramaic": "armi",
"InscriptionalPahlavi": "phli",
"InscriptionalParthian": "prti",
"Khojki": "khoj",
"MathematicalAlphanumericSymbols": "math",
"MeroiticCursive": "merc",
"MeroiticHieroglyphs": "mero",
"MusicalSymbols": "musc",
"Palmyrene": "palm",
"Rejang": "rjng",
"Samaritan": "samr",
"Carian": "cari",
"Ahom": "ahom",
"Adlam": "adlm",
"Dogra": "dogr",
"Lisu": "lisu",
"Mandaean": "mand",
"Manichaean": "mani",
"Tifinagh": "tfng",
"Wancho": "wcho",
"Yezidi": "yezi",
"Cherokee": "cher",
"Chorasmian": "chrs",
"PahawhHmong": "hmng",
"Phagspa": "phag",
"Sundanese": "sund",
"WarangCiti": "wara",
"SylotiNagri": "sylo",
"PsalterPahlavi": "phlp",
"CaucasianAlbanian": "aghb",
"Medefaidrin": "medf",
"MeiteiMayek": "mtei",
"MendeKikakui": "mend",
"Mro": "mroo",
"Multani": "mult",
"Nabataean": "nbat",
"Nandinagari": "nand",
"Newa": "newa",
"NewTaiLue": "talu",
"Nushu": "nshu",
"NyiakengPuachueHmong": "hmnp",
"OldPermic": "perm",
"SoraSompeng": "sora",
"Soyombo": "soyo",
"SylotiNagri": "sylo",
"Tagbanwa": "tagb",
"Tagalog": "tglg",
"Takri": "takr",
"TaiTham": "lana",
"TaiViet": "tavt",
"Tangut": "tang",
"Thaana": "thaa",
"UgariticCuneiform": "ugar",
"ZanabazarSquare": "zanb",
"SignWriting": "sgnw",
"OldUyghur": "ougr",
"Tangsa": "tnsa",
"Toto": "toto",
"Vithkuqi": "vith",
"Duployan": "dupl",
"Hatran": "hatr",
# These last two would only merge using the long script name including the 'NotoSerif' part
"NotoSerifYezidi": "yezi",
"NotoSerifNyiakengPuachueHmong": "hmnp",
}
def get_opentype_script_tag(fontfile):
fontfile = os.path.basename(fontfile)
if fontfile.startswith("NotoSans"):
fontfile = fontfile[8:]
fontfile = fontfile[: fontfile.index("-")]
return SCRIPT_TO_OPENTYPE_SCRIPT_TAG[fontfile]
def add_gsub_to_font(fontfile):
"""Adds an empty GSUB table to a font."""
font = ttLib.TTFont(fontfile)
gsub_table = ttLib.getTableClass("GSUB")("GSUB")
gsub_table.table = otTables.GSUB()
gsub_table.table.Version = 1.0
gsub_table.table.ScriptList = otTables.ScriptList()
gsub_table.table.ScriptCount = 1
gsub_table.table.LookupList = otTables.LookupList()
gsub_table.table.LookupList.LookupCount = 0
gsub_table.table.LookupList.Lookup = []
gsub_table.table.FeatureList = otTables.FeatureList()
gsub_table.table.FeatureList.FeatureCount = 0
gsub_table.table.LookupList.FeatureRecord = []
script_record = otTables.ScriptRecord()
script_record.ScriptTag = get_opentype_script_tag(fontfile)
script_record.Script = otTables.Script()
script_record.Script.LangSysCount = 0
script_record.Script.LangSysRecord = []
default_lang_sys = otTables.DefaultLangSys()
default_lang_sys.FeatureIndex = []
default_lang_sys.FeatureCount = 0
default_lang_sys.LookupOrder = None
default_lang_sys.ReqFeatureIndex = 65535
script_record.Script.DefaultLangSys = default_lang_sys
gsub_table.table.ScriptList.ScriptRecord = [script_record]
font["GSUB"] = gsub_table
target_file = tempfile.gettempdir() + "/" + os.path.basename(fontfile)
font.save(target_file)
return target_file
def parse_unicodes(s):
import re
s = re.sub(r"0[xX]", " ", s)
s = re.sub(r"[<+>,;&#\\xXuU\n ]", " ", s)
l = []
for item in s.split():
fields = item.split("-")
if len(fields) == 1:
l.append(int(item, 16))
else:
start, end = fields
l.extend(range(int(start, 16), int(end, 16) + 1))
return l
def main():
output_filename = sys.argv[-1]
ranges_filename = sys.argv[-2]
weight = sys.argv[-3]
font_name = sys.argv[-4]
ps_name = sys.argv[-5]
input_filenames = sys.argv[1:-5]
# Add a GSUB table to the fonts that do not have one, otherwise
# the merger will complain
for index, filename in enumerate(input_filenames):
if not has_gsub_table(filename):
input_filenames[index] = add_gsub_to_font(filename)
merger = merge.Merger()
font = merger.merge(input_filenames)
# Use the line metrics defined by the first font, which is
# supposed to be the basic NotoSans
metrics = read_line_metrics(ttLib.TTFont(input_filenames[0]))
set_line_metrics(font, metrics)
# Select the subset we care about
options = subset.Options(ignore_missing_unicodes=False)
subsetter = subset.Subsetter(options)
unicodes = []
with open(ranges_filename) as ranges:
for line in ranges:
unicodes.extend(parse_unicodes(line.split("#")[0]))
if len(unicodes) != 0:
subsetter.populate(unicodes=unicodes)
subsetter.subset(font)
# Rename the result
for record in font['name'].names:
if record.nameID == 1:
record.string = font_name
elif record.nameID == 4:
record.string = "{} {}".format(font_name, weight)
elif record.nameID == 6:
record.string = "{}-{}".format(ps_name, weight.replace(' ', ''))
font.save(output_filename)
if __name__ == '__main__':
main()

View file

@ -1,326 +0,0 @@
# KRName IVSes
537F E0108; KRName; CID+11743
537F E0109; KRName; CID+61812
5795 E0101; KRName; CID+13409
5795 E0102; KRName; CID+62188
57CE E0104; KRName; CID+13486
57CE E0105; KRName; CID+61817
5ABA E0104; KRName; CID+14991
5ABA E0105; KRName; CID+14991
6210 E0105; KRName; CID+18519
6210 E0106; KRName; CID+61829
665F E0106; KRName; CID+62364
665F E0107; KRName; CID+20400
6674 E0104; KRName; CID+58877
6674 E0105; KRName; CID+20436
695E E0104; KRName; CID+62423
695E E0105; KRName; CID+21671
6D77 E0104; KRName; CID+58933
6D77 E0105; KRName; CID+23486
76DB E0104; KRName; CID+27832
76DB E0105; KRName; CID+62543
8056 E0105; KRName; CID+32435
8056 E0106; KRName; CID+32433
83BD E0108; KRName; CID+62714
83BD E0109; KRName; CID+34274
865C E0104; KRName; CID+58860
865C E0105; KRName; CID+35860
8941 E0104; KRName; CID+37188
8941 E0105; KRName; CID+62775
8AA0 E0104; KRName; CID+37864
8AA0 E0105; KRName; CID+62792
8ACB E0104; KRName; CID+62795
8ACB E0105; KRName; CID+37953
927C E0103; KRName; CID+41543
927C E0104; KRName; CID+41542
9F9C E0107; KRName; CID+47476
9F9C E0108; KRName; CID+63097
# Unicode Version 6.3 SVSes
4E0D FE00; Standardized_Variants; CID+9496
4E32 FE00; Standardized_Variants; CID+9551
4E39 FE00; Standardized_Variants; CID+9560
4E82 FE00; Standardized_Variants; CID+9653
4E86 FE00; Standardized_Variants; CID+9660
4EAE FE00; Standardized_Variants; CID+9725
4EC0 FE00; Standardized_Variants; CID+9756
4EE4 FE00; Standardized_Variants; CID+9808
4F86 FE00; Standardized_Variants; CID+10047
4F8B FE00; Standardized_Variants; CID+10054
4FBF FE00; Standardized_Variants; CID+10136
502B FE00; Standardized_Variants; CID+10320
50DA FE00; Standardized_Variants; CID+10639
5169 FE00; Standardized_Variants; CID+10900
516D FE00; Standardized_Variants; CID+10911
51B7 FE00; Standardized_Variants; CID+11016
51C9 FE00; Standardized_Variants; CID+11046
51CC FE00; Standardized_Variants; CID+11054
51DC FE00; Standardized_Variants; CID+11082
5207 FE00; Standardized_Variants; CID+11145
5217 FE00; Standardized_Variants; CID+11163
5229 FE00; Standardized_Variants; CID+11189
523A FE00; Standardized_Variants; CID+11212
5289 FE00; Standardized_Variants; CID+11340
529B FE00; Standardized_Variants; CID+11377
52A3 FE00; Standardized_Variants; CID+11385
52D2 FE00; Standardized_Variants; CID+11454
52DE FE00; Standardized_Variants; CID+11473
52F5 FE00; Standardized_Variants; CID+11509
5317 FE00; Standardized_Variants; CID+11566
533F FE00; Standardized_Variants; CID+11649
5375 FE00; Standardized_Variants; CID+11725
53C3 FE00; Standardized_Variants; CID+11848
53E5 FE00; Standardized_Variants; CID+11904
540F FE00; Standardized_Variants; CID+11958
541D FE00; Standardized_Variants; CID+11975
5442 FE00; Standardized_Variants; CID+12042
54BD FE00; Standardized_Variants; CID+12218
5587 FE00; Standardized_Variants; CID+12520
56F9 FE00; Standardized_Variants; CID+13179
585E FE00; Standardized_Variants; CID+13729
58D8 FE00; Standardized_Variants; CID+13938
58DF FE00; Standardized_Variants; CID+13954
5948 FE00; Standardized_Variants; CID+14119
5951 FE00; Standardized_Variants; CID+58855
5973 FE00; Standardized_Variants; CID+14197
5B85 FE00; Standardized_Variants; CID+15453
5BE7 FE00; Standardized_Variants; CID+62232
5BE7 FE01; Standardized_Variants; CID+62232
5BEE FE00; Standardized_Variants; CID+15675
5C3F FE00; Standardized_Variants; CID+15807
5C62 FE00; Standardized_Variants; CID+15861
5C65 FE00; Standardized_Variants; CID+15869
5D19 FE00; Standardized_Variants; CID+16219
5D50 FE00; Standardized_Variants; CID+16337
5DBA FE00; Standardized_Variants; CID+16563
5E74 FE00; Standardized_Variants; CID+16855
5EA6 FE00; Standardized_Variants; CID+16945
5EC9 FE00; Standardized_Variants; CID+58865
5ECA FE00; Standardized_Variants; CID+62259
5ED3 FE00; Standardized_Variants; CID+17040
5EEC FE00; Standardized_Variants; CID+17097
5F04 FE00; Standardized_Variants; CID+17143
5F8B FE00; Standardized_Variants; CID+17393
5FA9 FE00; Standardized_Variants; CID+17437
5FF5 FE00; Standardized_Variants; CID+17565
6012 FE00; Standardized_Variants; CID+17608
601C FE00; Standardized_Variants; CID+17622
60E1 FE00; Standardized_Variants; CID+17952
6144 FE00; Standardized_Variants; CID+18124
6190 FE00; Standardized_Variants; CID+18280
61F6 FE00; Standardized_Variants; CID+18471
6200 FE00; Standardized_Variants; CID+18496
622E FE00; Standardized_Variants; CID+18563
62C9 FE00; Standardized_Variants; CID+18812
62CF FE00; Standardized_Variants; CID+18821
62D3 FE00; Standardized_Variants; CID+18828
62FE FE00; Standardized_Variants; CID+18890
637B FE00; Standardized_Variants; CID+19086
63A0 FE00; Standardized_Variants; CID+19151
649A FE00; Standardized_Variants; CID+19595
64C4 FE00; Standardized_Variants; CID+19674
6578 FE00; Standardized_Variants; CID+20006
6599 FE00; Standardized_Variants; CID+20066
65C5 FE00; Standardized_Variants; CID+58862
6613 FE00; Standardized_Variants; CID+20292
6688 FE00; Standardized_Variants; CID+20467
66B4 FE00; Standardized_Variants; CID+20541
66C6 FE00; Standardized_Variants; CID+20573
66F4 FE00; Standardized_Variants; CID+20652
6717 FE00; Standardized_Variants; CID+62390
674E FE00; Standardized_Variants; CID+20808
677B FE00; Standardized_Variants; CID+20871
6797 FE00; Standardized_Variants; CID+20919
67F3 FE00; Standardized_Variants; CID+21054
6817 FE00; Standardized_Variants; CID+21107
6881 FE00; Standardized_Variants; CID+21275
68A8 FE00; Standardized_Variants; CID+21346
6A02 FE00; Standardized_Variants; CID+21980
6A02 FE01; Standardized_Variants; CID+21980
6A02 FE02; Standardized_Variants; CID+21980
6A13 FE00; Standardized_Variants; CID+22009
6AD3 FE00; Standardized_Variants; CID+22349
6B04 FE00; Standardized_Variants; CID+58856
6B77 FE00; Standardized_Variants; CID+22652
6BAE FE00; Standardized_Variants; CID+22766
6BBA FE00; Standardized_Variants; CID+58861
6C88 FE00; Standardized_Variants; CID+23136
6CCC FE00; Standardized_Variants; CID+23231
6CE5 FE00; Standardized_Variants; CID+23275
6D1B FE00; Standardized_Variants; CID+23352
6D1E FE00; Standardized_Variants; CID+23356
6D41 FE00; Standardized_Variants; CID+23409
6D6A FE00; Standardized_Variants; CID+23466
6DCB FE00; Standardized_Variants; CID+23618
6DDA FE00; Standardized_Variants; CID+23649
6DEA FE00; Standardized_Variants; CID+23680
6E9C FE00; Standardized_Variants; CID+23971
6EBA FE00; Standardized_Variants; CID+24026
6ED1 FE00; Standardized_Variants; CID+24080
6F0F FE00; Standardized_Variants; CID+24192
6F23 FE00; Standardized_Variants; CID+24229
6FEB FE00; Standardized_Variants; CID+24584
6FFE FE00; Standardized_Variants; CID+24619
7099 FE00; Standardized_Variants; CID+24930
70C8 FE00; Standardized_Variants; CID+25014
70D9 FE00; Standardized_Variants; CID+25045
7149 FE00; Standardized_Variants; CID+25253
71CE FE00; Standardized_Variants; CID+25539
71D0 FE00; Standardized_Variants; CID+25543
7210 FE00; Standardized_Variants; CID+25680
721B FE00; Standardized_Variants; CID+25703
7262 FE00; Standardized_Variants; CID+25841
72C0 FE00; Standardized_Variants; CID+25979
72FC FE00; Standardized_Variants; CID+26067
7375 FE00; Standardized_Variants; CID+26278
7387 FE00; Standardized_Variants; CID+26317
7387 FE01; Standardized_Variants; CID+26317
73B2 FE00; Standardized_Variants; CID+26376
73DE FE00; Standardized_Variants; CID+26433
7406 FE00; Standardized_Variants; CID+26492
7409 FE00; Standardized_Variants; CID+26497
7469 FE00; Standardized_Variants; CID+26662
7489 FE00; Standardized_Variants; CID+26720
7498 FE00; Standardized_Variants; CID+26744
7559 FE00; Standardized_Variants; CID+27123
7565 FE00; Standardized_Variants; CID+27147
7570 FE00; Standardized_Variants; CID+27167
75E2 FE00; Standardized_Variants; CID+27369
7642 FE00; Standardized_Variants; CID+27572
7669 FE00; Standardized_Variants; CID+27653
76E7 FE00; Standardized_Variants; CID+27853
7701 FE00; Standardized_Variants; CID+27896
786B FE00; Standardized_Variants; CID+28463
788C FE00; Standardized_Variants; CID+28514
78CA FE00; Standardized_Variants; CID+28617
78FB FE00; Standardized_Variants; CID+28712
792A FE00; Standardized_Variants; CID+28785
797F FE00; Standardized_Variants; CID+28943
79AE FE00; Standardized_Variants; CID+29040
79CA FE00; Standardized_Variants; CID+29091
7A1C FE00; Standardized_Variants; CID+29225
7ACB FE00; Standardized_Variants; CID+29614
7B20 FE00; Standardized_Variants; CID+29778
7C3E FE00; Standardized_Variants; CID+30373
7C60 FE00; Standardized_Variants; CID+30454
7C92 FE00; Standardized_Variants; CID+30566
7CD6 FE00; Standardized_Variants; CID+58869
7CE7 FE00; Standardized_Variants; CID+30749
7D10 FE00; Standardized_Variants; CID+30837
7D22 FE00; Standardized_Variants; CID+30879
7D2F FE00; Standardized_Variants; CID+30901
7DA0 FE00; Standardized_Variants; CID+31127
7DBE FE00; Standardized_Variants; CID+31192
7DF4 FE00; Standardized_Variants; CID+58951
7E37 FE00; Standardized_Variants; CID+31451
7F79 FE00; Standardized_Variants; CID+31966
7F85 FE00; Standardized_Variants; CID+31989
7F9A FE00; Standardized_Variants; CID+32027
8001 FE00; Standardized_Variants; CID+32271
8046 FE00; Standardized_Variants; CID+32405
806F FE00; Standardized_Variants; CID+32482
807E FE00; Standardized_Variants; CID+32518
808B FE00; Standardized_Variants; CID+32542
81D8 FE00; Standardized_Variants; CID+33244
81E8 FE00; Standardized_Variants; CID+33282
826F FE00; Standardized_Variants; CID+33601
82E5 FE00; Standardized_Variants; CID+33844
8336 FE00; Standardized_Variants; CID+34013
83C9 FE00; Standardized_Variants; CID+34302
83F1 FE00; Standardized_Variants; CID+34391
843D FE00; Standardized_Variants; CID+34557
8449 FE00; Standardized_Variants; CID+34583
84EE FE00; Standardized_Variants; CID+58863
84FC FE00; Standardized_Variants; CID+35004
85CD FE00; Standardized_Variants; CID+35513
85FA FE00; Standardized_Variants; CID+35625
8606 FE00; Standardized_Variants; CID+35658
862D FE00; Standardized_Variants; CID+58857
863F FE00; Standardized_Variants; CID+35799
865C FE00; Standardized_Variants; CID+58860
87BA FE00; Standardized_Variants; CID+36439
881F FE00; Standardized_Variants; CID+36626
884C FE00; Standardized_Variants; CID+36710
88C2 FE00; Standardized_Variants; CID+36912
88CF FE00; Standardized_Variants; CID+36938
88E1 FE00; Standardized_Variants; CID+36980
88F8 FE00; Standardized_Variants; CID+37027
8964 FE00; Standardized_Variants; CID+37260
898B FE00; Standardized_Variants; CID+37348
8AAA FE00; Standardized_Variants; CID+37887
8AAA FE01; Standardized_Variants; CID+37887
8AD2 FE00; Standardized_Variants; CID+37971
8AD6 FE00; Standardized_Variants; CID+37980
8AFE FE00; Standardized_Variants; CID+38063
8B58 FE00; Standardized_Variants; CID+38273
8B80 FE00; Standardized_Variants; CID+38357
8C48 FE00; Standardized_Variants; CID+38616
8CC2 FE00; Standardized_Variants; CID+38825
8CC8 FE00; Standardized_Variants; CID+38837
8DEF FE00; Standardized_Variants; CID+39263
8ECA FE00; Standardized_Variants; CID+39658
8F26 FE00; Standardized_Variants; CID+39792
8F2A FE00; Standardized_Variants; CID+39800
8F3B FE00; Standardized_Variants; CID+39837
8F62 FE00; Standardized_Variants; CID+39913
8FB0 FE00; Standardized_Variants; CID+40014
9023 FE00; Standardized_Variants; CID+58864
907C FE00; Standardized_Variants; CID+58866
908F FE00; Standardized_Variants; CID+40610
90CE FE00; Standardized_Variants; CID+40706
90DE FE00; Standardized_Variants; CID+40730
916A FE00; Standardized_Variants; CID+40994
91B4 FE00; Standardized_Variants; CID+41166
91CC FE00; Standardized_Variants; CID+41221
91CF FE00; Standardized_Variants; CID+41224
91D1 FE00; Standardized_Variants; CID+41227
9234 FE00; Standardized_Variants; CID+41409
9304 FE00; Standardized_Variants; CID+41812
934A FE00; Standardized_Variants; CID+41946
95AD FE00; Standardized_Variants; CID+42910
962E FE00; Standardized_Variants; CID+43087
964B FE00; Standardized_Variants; CID+43125
964D FE00; Standardized_Variants; CID+62979
9675 FE00; Standardized_Variants; CID+43193
9678 FE00; Standardized_Variants; CID+43201
9686 FE00; Standardized_Variants; CID+58868
96A3 FE00; Standardized_Variants; CID+62985
96B7 FE00; Standardized_Variants; CID+43321
96B8 FE00; Standardized_Variants; CID+43322
96E2 FE00; Standardized_Variants; CID+43413
96F6 FE00; Standardized_Variants; CID+43450
96F7 FE00; Standardized_Variants; CID+43453
9732 FE00; Standardized_Variants; CID+43581
9748 FE00; Standardized_Variants; CID+43630
9818 FE00; Standardized_Variants; CID+43995
985E FE00; Standardized_Variants; CID+58867
99F1 FE00; Standardized_Variants; CID+44843
9A6A FE00; Standardized_Variants; CID+45067
9B6F FE00; Standardized_Variants; CID+45594
9C57 FE00; Standardized_Variants; CID+45979
9DFA FE00; Standardized_Variants; CID+46622
9E1E FE00; Standardized_Variants; CID+46689
9E7F FE00; Standardized_Variants; CID+46792
9E97 FE00; Standardized_Variants; CID+63077
9E9F FE00; Standardized_Variants; CID+46885
9ECE FE00; Standardized_Variants; CID+47010
9F8D FE00; Standardized_Variants; CID+47443
9F9C FE00; Standardized_Variants; CID+63096
9F9C FE01; Standardized_Variants; CID+63096
# Unicode Version 12.0 SVSes
3001 FE00; Standardized_Variants; CID+1397
3001 FE01; Standardized_Variants; CID+63145
3002 FE00; Standardized_Variants; CID+1398
3002 FE01; Standardized_Variants; CID+63146
FF01 FE00; Standardized_Variants; CID+63147
FF01 FE01; Standardized_Variants; CID+59047
FF0C FE00; Standardized_Variants; CID+59058
FF0C FE01; Standardized_Variants; CID+63148
FF0E FE00; Standardized_Variants; CID+59060
FF0E FE01; Standardized_Variants; CID+63149
FF1A FE00; Standardized_Variants; CID+63150
FF1A FE01; Standardized_Variants; CID+59072
FF1B FE00; Standardized_Variants; CID+63151
FF1B FE01; Standardized_Variants; CID+59073
FF1F FE00; Standardized_Variants; CID+63152
FF1F FE01; Standardized_Variants; CID+59077
# EOF

View file

@ -3,9 +3,9 @@
%%IncludeResource: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CMap (UniSourceHanSansCN-UTF32-H) %%BeginResource: CMap (UniSourceHanSansCN-UTF32-H)
%%Title: (UniSourceHanSansCN-UTF32-H Adobe Identity 0) %%Title: (UniSourceHanSansCN-UTF32-H Adobe Identity 0)
%%Version: 2.004 %%Version: 2.001
%%Copyright: ----------------------------------------------------------- %%Copyright: -----------------------------------------------------------
%%Copyright: Copyright 1990-2021 Adobe. All rights reserved. %%Copyright: Copyright 1990-2019 Adobe. All rights reserved.
%%Copyright: %%Copyright:
%%Copyright: Redistribution and use in source and binary forms, with or %%Copyright: Redistribution and use in source and binary forms, with or
%%Copyright: without modification, are permitted provided that the %%Copyright: without modification, are permitted provided that the
@ -53,7 +53,7 @@ begincmap
end def end def
/CMapName /UniSourceHanSansCN-UTF32-H def /CMapName /UniSourceHanSansCN-UTF32-H def
/CMapVersion 2.004 def /CMapVersion 2.001 def
/CMapType 1 def /CMapType 1 def
/WMode 0 def /WMode 0 def
@ -11804,7 +11804,7 @@ endcidchar
<0002f91a> 61840 <0002f91a> 61840
endcidchar endcidchar
12 begincidchar 8 begincidchar
<0002f945> 61843 <0002f945> 61843
<0002f947> 61844 <0002f947> 61844
<0002f96c> 61845 <0002f96c> 61845
@ -11813,10 +11813,6 @@ endcidchar
<0002f9d0> 61849 <0002f9d0> 61849
<0002f9d4> 61850 <0002f9d4> 61850
<0002f9f4> 61853 <0002f9f4> 61853
<00030729> 61858
<00030edd> 61859
<00030ede> 61856
<0003106c> 61861
endcidchar endcidchar
100 begincidrange 100 begincidrange

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,22 +0,0 @@
FontName (SourceHanSansK-Regular)
FullName (Source Han Sans Korean Regular)
FamilyName (Source Han Sans Korean)
Weight (Regular)
version (2.004)
Registry (Adobe)
Ordering (Identity)
Supplement 0
Layout (AI0-SourceHanSans)
FSType 0
isFixedPitch false
UnderlinePosition -150
AdobeCopyright (Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'.)
Trademark (Source is a trademark of Adobe in the United States and/or other countries.)
Serif false
IsBoldStyle false
IsItalicStyle false
PreferOS/2TypoMetrics false
IsOS/2WidthWeigthSlopeOnly false
IsOS/2OBLIQUE false
UseOldNameID4 false
LicenseCode ADOBE

View file

@ -2,7 +2,7 @@ FontName (SourceHanSansSC-Regular)
FullName (Source Han Sans Simplified Chinese Regular) FullName (Source Han Sans Simplified Chinese Regular)
FamilyName (Source Han Sans Simplified Chinese) FamilyName (Source Han Sans Simplified Chinese)
Weight (Regular) Weight (Regular)
version (2.004) version (2.001)
Registry (Adobe) Registry (Adobe)
Ordering (Identity) Ordering (Identity)
Supplement 0 Supplement 0
@ -10,7 +10,7 @@ Layout (AI0-SourceHanSans)
FSType 0 FSType 0
isFixedPitch false isFixedPitch false
UnderlinePosition -150 UnderlinePosition -150
AdobeCopyright (Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'.) AdobeCopyright (Copyright 2014-2019 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'.)
Trademark (Source is a trademark of Adobe in the United States and/or other countries.) Trademark (Source is a trademark of Adobe in the United States and/or other countries.)
Serif false Serif false
IsBoldStyle false IsBoldStyle false

File diff suppressed because it is too large Load diff

View file

@ -37,7 +37,7 @@ languagesystem hani ZHT;
languagesystem hani ZHH; languagesystem hani ZHH;
table head { table head {
FontRevision 2.004; FontRevision 2.001;
} head; } head;
table hhea { table hhea {
@ -47,7 +47,7 @@ table hhea {
} hhea; } hhea;
table name { table name {
nameid 0 "\00A9 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'."; nameid 0 "\00A9 2014-2019 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'.";
nameid 7 "Source is a trademark of Adobe in the United States and/or other countries."; nameid 7 "Source is a trademark of Adobe in the United States and/or other countries.";
nameid 8 "Adobe"; nameid 8 "Adobe";
nameid 9 "Ryoko NISHIZUKA \897F\585A\6DBC\5B50 (kana, bopomofo & ideographs); Paul D. Hunt (Latin, Greek & Cyrillic); Sandoll Communications \C0B0\B3CC\CEE4\BBA4\B2C8\CF00\C774\C158, Soo-young JANG \C7A5\C218\C601 & Joo-yeon KANG \AC15\C8FC\C5F0 (hangul elements, letters & syllables)"; nameid 9 "Ryoko NISHIZUKA \897F\585A\6DBC\5B50 (kana, bopomofo & ideographs); Paul D. Hunt (Latin, Greek & Cyrillic); Sandoll Communications \C0B0\B3CC\CEE4\BBA4\B2C8\CF00\C774\C158, Soo-young JANG \C7A5\C218\C601 & Joo-yeon KANG \AC15\C8FC\C5F0 (hangul elements, letters & syllables)";
@ -363,6 +363,47 @@ lookup std_ccmp {
substitute \63128 \63128 by \63143; substitute \63128 \63128 by \63143;
substitute \723 \723 \723 by \63144; substitute \723 \723 \723 by \63144;
substitute \723 \723 by \63143; substitute \723 \723 by \63143;
# UTC-00791 (Extension G)
# JP
substitute \1394 \40029 \1387 \29388 \1384 \20694 \1384 \1386 \1385 \16866 \42830 \1385 \37543 \44746 \1385 \16866 \42830 \11137 \17487 by \61854;
# KR
substitute \1394 \40029 \1387 \62576 \1384 \20694 \1384 \1386 \1385 \16866 \42830 \1385 \37543 \44746 \1385 \16866 \42830 \11137 \17487 by \61855;
# CN
substitute \1394 \40030 \1387 \29389 \1384 \20694 \1384 \1386 \1385 \16867 \42831 \1385 \37544 \44746 \1385 \16867 \42831 \11137 \17488 by \61856;
# TW
substitute \1394 \40031 \1387 \29390 \1384 \20694 \1384 \1386 \1385 \16867 \42831 \1385 \37544 \44746 \1385 \16867 \42831 \11137 \17488 by \61857;
# HK
substitute \1394 \40031 \1387 \29389 \1384 \20694 \1384 \1386 \1385 \16867 \42831 \1385 \37544 \44746 \1385 \16867 \42831 \11137 \17488 by \61857;
# UTC-01200 (Extension G)
# JP/KR
substitute \1384 \23011 \17745 by \61858;
# CN/TW/HK
substitute \1384 \23011 \17746 by \61858;
# UTC-01312 (Extension G)
# JP
substitute \1394 \40029 \1387 \29388 \1384 \20694 \1384 \1386 \1385 \16866 \42842 \1385 \37543 \45072 \1385 \16866 \42842 \11137 \17487 by \61859;
# KR
substitute \1394 \40029 \1387 \62576 \1384 \20694 \1384 \1386 \1385 \16866 \42842 \1385 \37543 \45072 \1385 \16866 \42842 \11137 \17487 by \61859;
# CN
substitute \1394 \40030 \1387 \29389 \1384 \20694 \1384 \1386 \1385 \16867 \42842 \1385 \37544 \45072 \1385 \16867 \42842 \11137 \17488 by \61859;
# TW
substitute \1394 \40031 \1387 \29390 \1384 \20694 \1384 \1386 \1385 \16867 \42842 \1385 \37544 \45072 \1385 \16867 \42842 \11137 \17488 by \61859;
# HK
substitute \1394 \40031 \1387 \29389 \1384 \20694 \1384 \1386 \1385 \16867 \42842 \1385 \37544 \45072 \1385 \16867 \42842 \11137 \17488 by \61859;
# UK-02960 (Extension G): Long IDS
# JP/KR
substitute \1387 \43442 \1386 \43442 \47443 \43442 \1384 \47443 \47443 by \61860;
# CN
substitute \1387 \43443 \1386 \43443 \47444 \43443 \1384 \47444 \47444 by \61861;
# TW
substitute \1387 \43444 \1386 \43444 \47445 \43444 \1384 \47445 \47445 by \61862;
# HK
substitute \1387 \43444 \1386 \43444 \47444 \43444 \1384 \47444 \47444 by \61863;
# UK-02960 (Extension G): Short IDS
# JP/KR/CN/HK
# substitute \1389 \8547 \47471 by \61860;
# TW
# substitute \1389 \8547 \47472 by \61862;
substitute \1447 \1449 by \1445; substitute \1447 \1449 by \1445;
substitute \1448 \1449 by \1446; substitute \1448 \1449 by \1446;
substitute \1461 \1546 by \61872; substitute \1461 \1546 by \61872;
@ -13890,6 +13931,7 @@ lookup cn2kr useExtension {
substitute \13891 by \13890; substitute \13891 by \13890;
substitute \13895 by \13894; substitute \13895 by \13894;
substitute \13897 by \13896; substitute \13897 by \13896;
substitute \13900 by \13899;
substitute \13902 by \13901; substitute \13902 by \13901;
substitute \13905 by \13904; substitute \13905 by \13904;
substitute \13907 by \13906; substitute \13907 by \13906;
@ -21537,7 +21579,6 @@ lookup cn2kr useExtension {
substitute \61830 by \18829; substitute \61830 by \18829;
substitute \61856 by \61855; substitute \61856 by \61855;
substitute \61861 by \61860; substitute \61861 by \61860;
substitute \61900 by \10989;
substitute \61907 by \12272; substitute \61907 by \12272;
substitute \61910 by \12850; substitute \61910 by \12850;
substitute \61913 by \13658; substitute \61913 by \13658;
@ -31104,7 +31145,6 @@ lookup cn2hk useExtension {
substitute \15734 by \15735; substitute \15734 by \15735;
substitute \15737 by \15739; substitute \15737 by \15739;
substitute \15741 by \15740; substitute \15741 by \15740;
substitute \15745 by \15744;
substitute \15749 by \15748; substitute \15749 by \15748;
substitute \15755 by \15756; substitute \15755 by \15756;
substitute \15760 by \15759; substitute \15760 by \15759;
@ -31128,7 +31168,6 @@ lookup cn2hk useExtension {
substitute \15910 by \15911; substitute \15910 by \15911;
substitute \15913 by \15914; substitute \15913 by \15914;
substitute \15917 by \15918; substitute \15917 by \15918;
substitute \15923 by \65530;
substitute \15925 by \15926; substitute \15925 by \15926;
substitute \15927 by \15928; substitute \15927 by \15928;
substitute \15933 by \15934; substitute \15933 by \15934;

View file

@ -1,21 +0,0 @@
# UmeFont (version 670)
https://osdn.net/projects/ume-font/
## Fonts
https://osdn.net/projects/ume-font/downloads/22212/umefont_670.tar.xz/
- ume-tgo4.ttf: Ume Gothic
- ume-pgo4.ttf: Ume P Gothic
- ume-ugo4.ttf: Ume UI Gothic
## License
See license.html for details.
## Why UmeFont?
UmeFont is metric-compatible fonts with MS Japanese fonts.
https://wiki.archlinux.org/title/Metric-compatible_fonts#Ume

View file

@ -1,79 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8">
</head>
<body>
<pre>
-------------------------------------------------------------------------------
梅フォントのライセンス (日本語 UTF-8) (UmeFont license (In Japanese UTF-8))
-------------------------------------------------------------------------------
本ライセンスは以下の梅フォントに共通のライセンスです。
* 梅ゴシック
* 梅ゴシックC4
* 梅ゴシックS4
* 梅ゴシックO5
* 梅ゴシックC5
* 梅ゴシックS5
* 梅Pゴシック
* 梅PゴシックC4
* 梅PゴシックS4
* 梅PゴシックO5
* 梅PゴシックC5
* 梅PゴシックS5
* 梅UIゴシック
* 梅UIゴシックO5
* 梅Hyゴシック
* 梅HyゴシックO5
* 梅明朝
* 梅明朝S3
* 梅P明朝
* 梅P明朝S3
これらのフォントはフリー(自由な)ソフトウエアです。
あらゆる改変の有無に関わらず、また商業的な利用であっても、自由にご利用、複製、
再配布することができますが、全て無保証とさせていただきます。
-------------------------------------------------------------------------------
UmeFont license (In English)
-------------------------------------------------------------------------------
This is common license of the UmeFont family. UmeFont family provides the
following fonts:
* Ume Gothic
* Ume Gothic C4
* Ume Gothic S4
* Ume Gothic O5
* Ume Gothic C5
* Ume Gothic S5
* Ume P Gothic
* Ume P Gothic C4
* Ume P Gothic S4
* Ume P Gothic O5
* Ume P Gothic C5
* Ume P Gothic S5
* Ume UI Gothic
* Ume UI Gothic O5
* Ume Hy Gothic
* Ume Hy Gothic O5
* Ume Mincho
* Ume Mincho S3
* Ume P Mincho
* Ume P Mincho S3
These fonts are free software.
Unlimited permission is granted to use, copy, and distribute it,
with or without modification, either commercially and noncommercially.
THESE FONTS ARE PROVIDED "AS IS" WITHOUT WARRANTY.
</pre>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1 +0,0 @@
Subproject commit df7fec2cfa966919172ee83bfcae6c9c9b3f91b8

BIN
glslang/bin/glslangValidator Executable file

Binary file not shown.

@ -1 +0,0 @@
Subproject commit 4e2578450809c2099400cf85caf18eafcd7100aa

@ -1 +1 @@
Subproject commit 7d5bbada3f1c6cf34182abccf47a34d79b83fa97 Subproject commit 9901a96eaff271c2d3b595214213f6805ff803c8

1
gst-plugins-base Submodule

@ -0,0 +1 @@
Subproject commit 9d3581b2e6f12f0b7e790d1ebb63b90cf5b1ef4e

1
gst-plugins-good Submodule

@ -0,0 +1 @@
Subproject commit ce0723527aa37d5f4d19ef8021c0b2eb8f83b08d

Some files were not shown because too many files have changed in this diff Show more