mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-03-27 04:39:09 +03:00
The current script based on fontforge seems to have a few problems. The generated fonts show glitches, for example in Cyberpunk 2077 for Thai and in FIFA 22 for Arabic. I don't precisely know what is the problem, and it might be that the real bug is in the rendering code rather than in the merging script. But since this seems to work better overall, I'm sticking with it. CW-Bug-Id: #20302
1135 lines
36 KiB
Makefile
1135 lines
36 KiB
Makefile
# Enable secondary expansions, needed for font compilation rules
|
|
.SECONDEXPANSION:
|
|
|
|
SRC := $(abspath $(SRCDIR))
|
|
OBJ := $(abspath $(CURDIR))
|
|
|
|
ifeq ($(filter s,$(MAKEFLAGS)),s)
|
|
MAKEFLAGS += --quiet --no-print-directory
|
|
--quiet? := --quiet
|
|
else
|
|
MFLAGS += V=1 VERBOSE=1
|
|
-v? := -v
|
|
--verbose? := --verbose
|
|
endif
|
|
|
|
SHELL := /bin/bash
|
|
|
|
##
|
|
## General/global config
|
|
##
|
|
|
|
# We expect the configure script to conditionally set the following:
|
|
# SRCDIR - Path to source
|
|
# BUILD_NAME - Name of the build for manifests etc.
|
|
# STEAMRT_IMAGE - Name of the docker image to use for building
|
|
|
|
STEAMRT_IMAGE ?= registry.gitlab.steamos.cloud/proton/sniper/sdk:0.20221017.1-0
|
|
|
|
ifeq ($(SRCDIR),)
|
|
foo := $(error SRCDIR not set, do not include Makefile.in directly, run ./configure.sh to generate Makefile)
|
|
endif
|
|
|
|
DST_BASE := $(OBJ)/dist
|
|
DST_DIR := $(DST_BASE)/dist
|
|
DST_LIBDIR32 := $(DST_DIR)/lib
|
|
DST_LIBDIR64 := $(DST_DIR)/lib64
|
|
DIST_PREFIX := $(DST_DIR)/share/default_pfx/
|
|
DIST_VERSION := $(DST_BASE)/version
|
|
DEPLOY_DIR := ./deploy
|
|
REDIST_DIR := ./redist
|
|
|
|
ifneq ($(UNSTRIPPED_BUILD),)
|
|
STRIP :=
|
|
INSTALL_PROGRAM_FLAGS :=
|
|
MESON_STRIP_ARG :=
|
|
else
|
|
STRIP := strip
|
|
INSTALL_PROGRAM_FLAGS := -s
|
|
MESON_STRIP_ARG := --strip
|
|
endif
|
|
|
|
CROSSLDFLAGS += -Wl,--file-alignment,4096
|
|
OPTIMIZE_FLAGS := -O2 -march=nocona -mtune=core-avx2 -mfpmath=sse
|
|
SANITY_FLAGS := -fwrapv -fno-strict-aliasing
|
|
DEBUG_FLAGS := -ggdb -ffunction-sections -fdata-sections -fno-omit-frame-pointer
|
|
COMMON_FLAGS = $(DEBUG_FLAGS) $(OPTIMIZE_FLAGS) $(SANITY_FLAGS) -ffile-prefix-map=$(CCACHE_BASEDIR)=.
|
|
COMMON_FLAGS32 := -mstackrealign
|
|
COMMON_FLAGS64 := -mcmodel=small
|
|
CARGO_BUILD_ARG := --release
|
|
|
|
$(DST_DIR):
|
|
mkdir -p $@
|
|
|
|
ifeq ($(CONTAINER),1) # inside the container
|
|
# all, all-dist and dist are basically synonyms
|
|
.PHONY: all all-dist dist
|
|
all: all-dist | $(DST_DIR)
|
|
all-dist: | $(DST_DIR)
|
|
dist: all
|
|
|
|
J = $(patsubst -j%,%,$(filter -j%,$(MAKEFLAGS)))
|
|
|
|
include $(SRC)/make/utility.mk
|
|
include $(SRC)/make/rules-source.mk
|
|
include $(SRC)/make/rules-common.mk
|
|
include $(SRC)/make/rules-meson.mk
|
|
include $(SRC)/make/rules-cmake.mk
|
|
include $(SRC)/make/rules-autoconf.mk
|
|
include $(SRC)/make/rules-configure.mk
|
|
include $(SRC)/make/rules-winemaker.mk
|
|
include $(SRC)/make/rules-cargo.mk
|
|
|
|
|
|
##
|
|
## dav1d
|
|
##
|
|
|
|
DAV1D_MESON_ARGS = \
|
|
-Denable_tools=false \
|
|
-Denable_tests=false
|
|
|
|
$(eval $(call rules-source,dav1d,$(SRCDIR)/dav1d))
|
|
$(eval $(call rules-meson,dav1d,32))
|
|
$(eval $(call rules-meson,dav1d,64))
|
|
|
|
|
|
##
|
|
## gst-orc
|
|
##
|
|
|
|
GST_ORC_MESON_ARGS := \
|
|
-Dorc-test=disabled
|
|
|
|
$(eval $(call rules-source,gst_orc,$(SRCDIR)/gst-orc))
|
|
$(eval $(call rules-meson,gst_orc,32))
|
|
$(eval $(call rules-meson,gst_orc,64))
|
|
|
|
|
|
##
|
|
## gstreamer
|
|
##
|
|
|
|
GSTREAMER_MESON_ARGS := \
|
|
-Dgst_parse=false \
|
|
-Dbenchmarks=disabled \
|
|
-Dtools=disabled \
|
|
-Dbash-completion=disabled
|
|
|
|
GSTREAMER_DEPENDS = gst_orc
|
|
|
|
$(eval $(call rules-source,gstreamer,$(SRCDIR)/gstreamer))
|
|
$(eval $(call rules-meson,gstreamer,32))
|
|
$(eval $(call rules-meson,gstreamer,64))
|
|
|
|
|
|
##
|
|
## graphene
|
|
##
|
|
|
|
$(eval $(call rules-source,graphene,$(SRCDIR)/graphene))
|
|
$(eval $(call rules-meson,graphene,32))
|
|
$(eval $(call rules-meson,graphene,64))
|
|
|
|
|
|
##
|
|
## gst-plugins-base
|
|
##
|
|
|
|
GST_BASE_MESON_ARGS := \
|
|
-Dauto_features=disabled \
|
|
-Dadder=enabled \
|
|
-Dapp=enabled \
|
|
-Daudioconvert=enabled \
|
|
-Daudioresample=enabled \
|
|
-Dogg=enabled \
|
|
-Dopus=enabled \
|
|
-Dpbtypes=enabled \
|
|
-Dplayback=enabled \
|
|
-Dtheora=enabled \
|
|
-Dtypefind=enabled \
|
|
-Dvideoconvert=enabled \
|
|
-Dvideoscale=enabled \
|
|
-Dvorbis=enabled \
|
|
-Dorc=enabled \
|
|
-Dx11=enabled \
|
|
-Dgl=enabled \
|
|
-Dgl-graphene=enabled \
|
|
-Dgl_platform=glx,egl \
|
|
--wrap-mode nodownload \
|
|
|
|
GST_BASE_DEPENDS = gst_orc graphene gstreamer
|
|
|
|
$(eval $(call rules-source,gst_base,$(SRCDIR)/gst-plugins-base))
|
|
$(eval $(call rules-meson,gst_base,32))
|
|
$(eval $(call rules-meson,gst_base,64))
|
|
|
|
|
|
##
|
|
## gst-plugins-good
|
|
##
|
|
|
|
GST_GOOD_MESON_ARGS := \
|
|
-Dauto_features=disabled \
|
|
-Daudioparsers=enabled \
|
|
-Dautodetect=enabled \
|
|
-Davi=enabled \
|
|
-Ddebugutils=enabled \
|
|
-Ddeinterlace=enabled \
|
|
-Disomp4=enabled \
|
|
-Dmatroska=enabled \
|
|
-Dmpg123=enabled \
|
|
-Dvideobox=enabled \
|
|
-Dvideofilter=enabled \
|
|
-Dvpx=enabled \
|
|
-Dwavparse=enabled \
|
|
-Did3demux=enabled \
|
|
-Dmpg123=enabled \
|
|
-Dsoup=enabled \
|
|
-Dorc=enabled
|
|
|
|
GST_GOOD_DEPENDS = gst_orc gstreamer gst_base
|
|
|
|
$(eval $(call rules-source,gst_good,$(SRCDIR)/gst-plugins-good))
|
|
$(eval $(call rules-meson,gst_good,32))
|
|
$(eval $(call rules-meson,gst_good,64))
|
|
|
|
##
|
|
## FFmpeg
|
|
##
|
|
|
|
FFMPEG_CONFIGURE_ARGS := \
|
|
--enable-shared \
|
|
--disable-static \
|
|
--disable-everything \
|
|
--disable-programs \
|
|
--disable-doc \
|
|
|
|
$(eval $(call rules-source,ffmpeg,$(SRCDIR)/ffmpeg))
|
|
$(eval $(call rules-configure,ffmpeg,32))
|
|
$(eval $(call rules-configure,ffmpeg,64))
|
|
|
|
## Only use ffmpeg to build gst-libav; we don't ship it.
|
|
$(OBJ)/.ffmpeg-dist32:
|
|
touch $@
|
|
$(OBJ)/.ffmpeg-dist64:
|
|
touch $@
|
|
|
|
##
|
|
## gst-libav
|
|
##
|
|
|
|
GST_LIBAV_DEPENDS = gst_orc gstreamer gst_base ffmpeg
|
|
|
|
$(eval $(call rules-source,gst_libav,$(SRCDIR)/gst-libav))
|
|
$(eval $(call rules-meson,gst_libav,32))
|
|
$(eval $(call rules-meson,gst_libav,64))
|
|
|
|
|
|
##
|
|
## gst-plugins-rs
|
|
##
|
|
|
|
GST_PLUGINS_RS_CARGO_ARGS = \
|
|
-p gst-plugin-dav1d
|
|
|
|
GST_PLUGINS_RS_DEPENDS = gst_orc gstreamer gst_base dav1d
|
|
|
|
$(eval $(call rules-source,gst_plugins_rs,$(SRCDIR)/gst-plugins-rs))
|
|
$(eval $(call rules-cargo,gst_plugins_rs,32))
|
|
$(eval $(call rules-cargo,gst_plugins_rs,64))
|
|
|
|
$(OBJ)/.gst_plugins_rs-post-build64:
|
|
mkdir -p $(GST_PLUGINS_RS_DST64)/lib64/gstreamer-1.0/
|
|
cp -a $(GST_PLUGINS_RS_OBJ64)/x86_64-unknown-linux-gnu/release/libgstrsdav1d.so $(GST_PLUGINS_RS_DST64)/lib64/gstreamer-1.0/
|
|
touch $@
|
|
|
|
$(OBJ)/.gst_plugins_rs-post-build32:
|
|
mkdir -p $(GST_PLUGINS_RS_DST32)/lib/gstreamer-1.0/
|
|
cp -a $(GST_PLUGINS_RS_OBJ32)/i686-unknown-linux-gnu/release/libgstrsdav1d.so $(GST_PLUGINS_RS_DST32)/lib/gstreamer-1.0/
|
|
touch $@
|
|
|
|
|
|
##
|
|
## Vulkan-Headers
|
|
##
|
|
|
|
$(eval $(call rules-source,vulkan-headers,$(SRCDIR)/Vulkan-Headers))
|
|
$(eval $(call rules-cmake,vulkan-headers,32,CROSS))
|
|
$(eval $(call rules-cmake,vulkan-headers,64,CROSS))
|
|
|
|
|
|
##
|
|
## SPIRV-Headers
|
|
##
|
|
|
|
$(eval $(call rules-source,spirv-headers,$(SRCDIR)/SPIRV-Headers))
|
|
$(eval $(call rules-cmake,spirv-headers,32,CROSS))
|
|
$(eval $(call rules-cmake,spirv-headers,64,CROSS))
|
|
|
|
|
|
##
|
|
## Vulkan-Loader
|
|
##
|
|
|
|
VULKAN_LOADER_CMAKE_ARGS = -DUSE_MASM=OFF
|
|
VULKAN_LOADER_CMAKE_ARGS64 = -DVULKAN_HEADERS_INSTALL_DIR=$(VULKAN_HEADERS_DST64)
|
|
VULKAN_LOADER_CMAKE_ARGS32 = -DVULKAN_HEADERS_INSTALL_DIR=$(VULKAN_HEADERS_DST32)
|
|
VULKAN_LOADER_CFLAGS = -DWINVER=0x0A00 -D_WIN32_WINNT=0x0A00 # 0x0A00 is _WIN32_WINNT_WIN10
|
|
VULKAN_LOADER_DEPENDS = vulkan-headers spirv-headers
|
|
|
|
$(eval $(call rules-source,vulkan-loader,$(SRCDIR)/Vulkan-Loader))
|
|
$(eval $(call rules-cmake,vulkan-loader,32,CROSS))
|
|
$(eval $(call rules-cmake,vulkan-loader,64,CROSS))
|
|
|
|
|
|
##
|
|
## glslang
|
|
##
|
|
|
|
$(eval $(call rules-source,glslang,$(SRCDIR)/glslang))
|
|
$(eval $(call rules-cmake,glslang,32))
|
|
$(eval $(call rules-cmake,glslang,64))
|
|
|
|
|
|
##
|
|
## lsteamclient
|
|
##
|
|
|
|
LSTEAMCLIENT_CFLAGS = -Wno-attributes
|
|
LSTEAMCLIENT_CXXFLAGS = -Wno-attributes
|
|
LSTEAMCLIENT_LDFLAGS = -static-libgcc -static-libstdc++ -ldl
|
|
|
|
LSTEAMCLIENT_WINEMAKER_ARGS = \
|
|
-DSTEAM_API_EXPORTS \
|
|
-Dprivate=public \
|
|
-Dprotected=public
|
|
|
|
LSTEAMCLIENT_DEPENDS = wine
|
|
|
|
$(eval $(call rules-source,lsteamclient,$(SRCDIR)/lsteamclient))
|
|
$(eval $(call rules-winemaker,lsteamclient,32,lsteamclient.dll))
|
|
$(eval $(call rules-winemaker,lsteamclient,64,lsteamclient.dll))
|
|
|
|
|
|
##
|
|
|
|
##
|
|
## openxr
|
|
## Note 32-bit is not supported by SteamVR, so we don't build it.
|
|
##
|
|
|
|
OPENXR_CMAKE_ARGS = -DHAVE_FILESYSTEM_WITHOUT_LIB=0
|
|
|
|
$(eval $(call rules-source,openxr,$(SRCDIR)/OpenXR-SDK))
|
|
# $(eval $(call rules-cmake,openxr,32))
|
|
$(eval $(call rules-cmake,openxr,64))
|
|
|
|
|
|
##
|
|
## wineopenxr
|
|
## Note 32-bit is not supported by SteamVR, so we don't build it.
|
|
##
|
|
|
|
WINEOPENXR_LDFLAGS = -lopenxr_loader -ldxgi -lvulkan -ldl
|
|
|
|
WINEOPENXR_DEPENDS = wine openxr
|
|
|
|
$(eval $(call rules-source,wineopenxr,$(SRCDIR)/wineopenxr))
|
|
# $(eval $(call rules-winemaker,wineopenxr,32,wineopenxr.dll))
|
|
$(eval $(call rules-winemaker,wineopenxr,64,wineopenxr.dll))
|
|
|
|
DIST_WINEOPENXR_JSON64 := $(DIST_PREFIX)/drive_c/openxr/wineopenxr64.json
|
|
$(WINEOPENXR_SRC)/wineopenxr64.json: wineopenxr
|
|
$(DIST_WINEOPENXR_JSON64): $(WINEOPENXR_SRC)/wineopenxr64.json default_pfx
|
|
mkdir -p $(dir $@)
|
|
cp -a $< $@
|
|
|
|
all-dist: $(DIST_WINEOPENXR_JSON64)
|
|
|
|
|
|
##
|
|
## steam.exe
|
|
##
|
|
|
|
STEAMEXE_CFLAGS = -Wno-attributes
|
|
STEAMEXE_CXXFLAGS = -Wno-attributes
|
|
STEAMEXE_LDFLAGS = -L$(STEAMEXE_SRC)/32/ -L$(STEAMEXE_SRC)/64/ -lsteam_api -lole32 -ldl -static-libgcc -static-libstdc++
|
|
|
|
STEAMEXE_WINEMAKER_ARGS = \
|
|
"-I$(SRC)/lsteamclient/steamworks_sdk_142/" \
|
|
"-I$(SRC)/openvr/headers/" \
|
|
"-L$(SRC)/steam_helper/"
|
|
|
|
STEAMEXE_DEPENDS = wine
|
|
|
|
$(eval $(call rules-source,steamexe,$(SRCDIR)/steam_helper))
|
|
$(eval $(call rules-winemaker,steamexe,64,steam.exe))
|
|
$(eval $(call rules-winemaker,steamexe,32,steam.exe))
|
|
|
|
$(OBJ)/.steamexe-post-build32:
|
|
cp $(STEAMEXE_SRC)/32/libsteam_api.so $(DST_LIBDIR32)/
|
|
touch $@
|
|
|
|
$(OBJ)/.steamexe-post-build64:
|
|
cp $(STEAMEXE_SRC)/64/libsteam_api.so $(DST_LIBDIR64)/
|
|
touch $@
|
|
|
|
|
|
##
|
|
## wine
|
|
##
|
|
|
|
WINE_SOURCE_ARGS = \
|
|
--exclude configure \
|
|
--exclude autom4te.cache \
|
|
--exclude include/config.h.in \
|
|
--exclude include/config.h.ink \
|
|
--exclude include/wine/vulkan.h \
|
|
--exclude include/wine/vulkan_driver.h \
|
|
--exclude dlls/vulkan-1/vulkan-1.spec \
|
|
--exclude dlls/winevulkan/loader_thunks.c \
|
|
--exclude dlls/winevulkan/loader_thunks.h \
|
|
--exclude dlls/winevulkan/vulkan_thunks.c \
|
|
--exclude dlls/winevulkan/vulkan_thunks.h \
|
|
--exclude dlls/winevulkan/winevulkan.json \
|
|
--exclude dlls/winevulkan/winevulkan.spec
|
|
|
|
WINE_CONFIGURE_ARGS = \
|
|
--with-mingw \
|
|
--disable-tests
|
|
|
|
WINE_CONFIGURE_ARGS32 = \
|
|
VKD3D_PE_CFLAGS="-I$(VULKAN_HEADERS_DST32)/include -I$(VKD3D_DST32)/include/vkd3d" \
|
|
VKD3D_PE_LIBS="-L$(VKD3D_DST32)/bin -l:libvkd3d-1.dll -l:libvkd3d-shader-1.dll"
|
|
|
|
WINE_CONFIGURE_ARGS64 = --enable-win64 \
|
|
VKD3D_PE_CFLAGS="-I$(VULKAN_HEADERS_DST64)/include -I$(VKD3D_DST64)/include/vkd3d" \
|
|
VKD3D_PE_LIBS="-L$(VKD3D_DST64)/bin -l:libvkd3d-1.dll -l:libvkd3d-shader-1.dll"
|
|
|
|
WINE_DEPENDS = gst_orc gstreamer gst_base vkd3d
|
|
|
|
$(eval $(call rules-source,wine,$(SRCDIR)/wine))
|
|
$(eval $(call rules-autoconf,wine,32))
|
|
$(eval $(call rules-autoconf,wine,64))
|
|
|
|
$(OBJ)/.wine-post-source:
|
|
cd $(WINE_SRC) && tools/make_requests
|
|
cd $(WINE_SRC) && dlls/winevulkan/make_vulkan -x vk.xml
|
|
touch $@
|
|
|
|
$(OBJ)/.wine-post-build64:
|
|
mkdir -p $(DST_DIR)/{bin,share}
|
|
$(call install-strip,$(WINE_DST64)/bin/wine64,$(DST_DIR)/bin)
|
|
$(call install-strip,$(WINE_DST64)/bin/wine64-preloader,$(DST_DIR)/bin)
|
|
$(call install-strip,$(WINE_DST64)/bin/wineserver,$(DST_DIR)/bin)
|
|
cp -a $(WINE_DST64)/share/wine $(DST_DIR)/share
|
|
cp -a $(WINE_DST64)/bin/msidb $(DST_DIR)/bin
|
|
touch $@
|
|
|
|
$(OBJ)/.wine-post-build32:
|
|
mkdir -p $(DST_DIR)/bin
|
|
$(call install-strip,$(WINE_DST32)/bin/wine,$(DST_DIR)/bin)
|
|
$(call install-strip,$(WINE_DST32)/bin/wine-preloader,$(DST_DIR)/bin)
|
|
touch $@
|
|
|
|
|
|
##
|
|
## vrclient
|
|
##
|
|
|
|
VRCLIENT_CFLAGS = -Wno-attributes
|
|
VRCLIENT_CXXFLAGS = -Wno-attributes
|
|
VRCLIENT_LDFLAGS = -static-libgcc -static-libstdc++ -ldl
|
|
|
|
VRCLIENT_WINEMAKER_ARGS = \
|
|
"-I$(VRCLIENT_SRC)/" \
|
|
"-I$(VRCLIENT_SRC)/vrclient_x64/"
|
|
|
|
VRCLIENT_DEPENDS = wine
|
|
|
|
$(eval $(call rules-source,vrclient,$(SRCDIR)/vrclient_x64))
|
|
$(eval $(call rules-winemaker,vrclient,32,vrclient.dll))
|
|
$(eval $(call rules-winemaker,vrclient,64,vrclient_x64.dll))
|
|
|
|
$(OBJ)/.vrclient-post-source:
|
|
mkdir -p $(VRCLIENT_OBJ32) && cp -a $(VRCLIENT_SRC)/vrclient_x64/vrclient_x64.spec $(VRCLIENT_OBJ32)/vrclient.spec
|
|
mkdir -p $(VRCLIENT_OBJ64) && cp -a $(VRCLIENT_SRC)/vrclient_x64/vrclient_x64.spec $(VRCLIENT_OBJ64)/vrclient_x64.spec
|
|
touch $@
|
|
|
|
|
|
##
|
|
## dxvk
|
|
##
|
|
|
|
DXVK_MESON_ARGS32 = --bindir=$(DXVK_DST32)/lib/wine/dxvk
|
|
DXVK_MESON_ARGS64 = --bindir=$(DXVK_DST64)/lib64/wine/dxvk
|
|
DXVK_DEPENDS = glslang
|
|
|
|
$(eval $(call rules-source,dxvk,$(SRCDIR)/dxvk))
|
|
$(eval $(call rules-meson,dxvk,32,CROSS))
|
|
$(eval $(call rules-meson,dxvk,64,CROSS))
|
|
|
|
$(OBJ)/.dxvk-post-build64:
|
|
mkdir -p "$(DST_DIR)"/lib64/wine/dxvk
|
|
rm -f "$(DST_DIR)"/lib64/wine/dxvk/version && if test -e $(SRCDIR)/.git; then ( cd $(SRCDIR) && git submodule status -- dxvk ) > "$(DST_DIR)"/lib64/wine/dxvk/version; fi
|
|
touch $@
|
|
|
|
$(OBJ)/.dxvk-post-build32:
|
|
mkdir -p "$(DST_DIR)"/lib/wine/dxvk
|
|
rm -f "$(DST_DIR)"/lib/wine/dxvk/version && if test -e $(SRCDIR)/.git; then ( cd $(SRCDIR) && git submodule status -- dxvk ) > "$(DST_DIR)"/lib/wine/dxvk/version; fi
|
|
touch $@
|
|
|
|
|
|
##
|
|
## dxvk-nvapi
|
|
##
|
|
|
|
DXVK_NVAPI_MESON_ARGS32 = --bindir=$(DXVK_NVAPI_DST32)/lib/wine/nvapi
|
|
DXVK_NVAPI_MESON_ARGS64 = --bindir=$(DXVK_NVAPI_DST64)/lib64/wine/nvapi
|
|
|
|
$(eval $(call rules-source,dxvk-nvapi,$(SRCDIR)/dxvk-nvapi))
|
|
$(eval $(call rules-meson,dxvk-nvapi,32,CROSS))
|
|
$(eval $(call rules-meson,dxvk-nvapi,64,CROSS))
|
|
|
|
$(OBJ)/.dxvk-nvapi-post-build64:
|
|
mkdir -p "$(DST_DIR)"/lib64/wine/nvapi
|
|
rm -f "$(DST_DIR)"/lib64/wine/nvapi/version && if test -e $(SRCDIR)/.git; then ( cd $(SRCDIR) && git submodule status -- dxvk-nvapi ) > "$(DST_DIR)"/lib64/wine/nvapi/version; fi
|
|
touch $@
|
|
|
|
$(OBJ)/.dxvk-nvapi-post-build32:
|
|
mkdir -p "$(DST_DIR)"/lib/wine/nvapi
|
|
rm -f "$(DST_DIR)"/lib/wine/nvapi/version && if test -e $(SRCDIR)/.git; then ( cd $(SRCDIR) && git submodule status -- dxvk-nvapi ) > "$(DST_DIR)"/lib/wine/nvapi/version; fi
|
|
touch $@
|
|
|
|
|
|
##
|
|
## vkd3d
|
|
##
|
|
|
|
VKD3D_SOURCE_ARGS = \
|
|
--exclude aclocal.m4 \
|
|
--exclude autom4te.cache \
|
|
--exclude bin/ \
|
|
--exclude configure \
|
|
--exclude include/config.h.in \
|
|
--exclude Makefile.in \
|
|
--exclude m4/libtool.m4 \
|
|
--exclude m4/ltoptions.m4 \
|
|
--exclude m4/ltsugar.m4 \
|
|
--exclude m4/ltversion.m4 \
|
|
--exclude m4/lt~obsolete.m4 \
|
|
|
|
VKD3D_CONFIGURE_ARGS = \
|
|
--enable-silent-rules \
|
|
--disable-doxygen-doc \
|
|
--disable-tests \
|
|
--disable-demos \
|
|
--without-ncurses \
|
|
|
|
VKD3D_LDFLAGS = -static-libgcc $(CROSSLDFLAGS)
|
|
VKD3D_DEPENDS = vulkan-loader vulkan-headers spirv-headers
|
|
|
|
$(eval $(call rules-source,vkd3d,$(SRCDIR)/vkd3d))
|
|
$(eval $(call rules-autoconf,vkd3d,32,CROSS))
|
|
$(eval $(call rules-autoconf,vkd3d,64,CROSS))
|
|
|
|
$(OBJ)/.vkd3d-post-build64:
|
|
mkdir -p $(DST_DIR)/lib64/vkd3d/
|
|
$(call install-strip,$(VKD3D_DST64)/bin/libvkd3d-1.dll,$(DST_LIBDIR64)/vkd3d)
|
|
$(call install-strip,$(VKD3D_DST64)/bin/libvkd3d-shader-1.dll,$(DST_LIBDIR64)/vkd3d)
|
|
touch $@
|
|
|
|
$(OBJ)/.vkd3d-post-build32:
|
|
mkdir -p $(DST_DIR)/lib/vkd3d/
|
|
$(call install-strip,$(VKD3D_DST32)/bin/libvkd3d-1.dll,$(DST_LIBDIR32)/vkd3d)
|
|
$(call install-strip,$(VKD3D_DST32)/bin/libvkd3d-shader-1.dll,$(DST_LIBDIR32)/vkd3d)
|
|
touch $@
|
|
|
|
##
|
|
## vkd3d-proton
|
|
##
|
|
|
|
VKD3D_PROTON_SOURCE_ARGS = \
|
|
--exclude vkd3d_build.h.in \
|
|
--exclude vkd3d_version.h.in \
|
|
|
|
VKD3D_PROTON_MESON_ARGS32 = --bindir=$(VKD3D_PROTON_DST32)/lib/wine/vkd3d-proton
|
|
VKD3D_PROTON_MESON_ARGS64 = --bindir=$(VKD3D_PROTON_DST64)/lib64/wine/vkd3d-proton
|
|
VKD3D_PROTON_DEPENDS = glslang
|
|
|
|
$(eval $(call rules-source,vkd3d-proton,$(SRCDIR)/vkd3d-proton))
|
|
$(eval $(call rules-meson,vkd3d-proton,32,CROSS))
|
|
$(eval $(call rules-meson,vkd3d-proton,64,CROSS))
|
|
|
|
$(OBJ)/.vkd3d-proton-post-source:
|
|
sed -re 's#@VCS_TAG@#$(shell git -C $(SRCDIR)/vkd3d-proton describe --always --exclude=* --abbrev=15 --dirty=0)#' \
|
|
$(SRCDIR)/vkd3d-proton/vkd3d_build.h.in > $(VKD3D_PROTON_SRC)/vkd3d_build.h.in
|
|
sed -re 's#@VCS_TAG@#$(shell git -C $(SRCDIR)/vkd3d-proton describe --always --tags --dirty=+)#' \
|
|
$(SRCDIR)/vkd3d-proton/vkd3d_version.h.in > $(VKD3D_PROTON_SRC)/vkd3d_version.h.in
|
|
touch $@
|
|
|
|
$(OBJ)/.vkd3d-proton-post-build32:
|
|
mkdir -p "$(DST_DIR)"/lib/wine/vkd3d-proton
|
|
rm -f "$(DST_DIR)"/lib/wine/vkd3d-proton/version && if test -e $(SRCDIR)/.git; then ( cd $(SRCDIR) && git submodule status -- vkd3d-proton ) > "$(DST_DIR)"/lib/wine/vkd3d-proton/version; fi
|
|
touch $@
|
|
|
|
$(OBJ)/.vkd3d-proton-post-build64:
|
|
mkdir -p "$(DST_DIR)"/lib64/wine/vkd3d-proton
|
|
rm -f "$(DST_DIR)"/lib64/wine/vkd3d-proton/version && if test -e $(SRCDIR)/.git; then ( cd $(SRCDIR) && git submodule status -- vkd3d-proton ) > "$(DST_DIR)"/lib64/wine/vkd3d-proton/version; fi
|
|
touch $@
|
|
|
|
|
|
|
|
##
|
|
## mediaconv
|
|
##
|
|
|
|
MEDIACONV_DEPENDS = gst_orc gstreamer gst_base
|
|
|
|
$(eval $(call rules-source,mediaconv,$(SRCDIR)/media-converter))
|
|
$(eval $(call rules-cargo,mediaconv,32))
|
|
$(eval $(call rules-cargo,mediaconv,64))
|
|
|
|
$(OBJ)/.mediaconv-post-build64:
|
|
mkdir -p $(MEDIACONV_DST64)/lib64/gstreamer-1.0/
|
|
cp -a $(MEDIACONV_OBJ64)/x86_64-unknown-linux-gnu/release/libprotonmediaconverter.so $(MEDIACONV_DST64)/lib64/gstreamer-1.0/
|
|
touch $@
|
|
|
|
$(OBJ)/.mediaconv-post-build32:
|
|
mkdir -p $(MEDIACONV_DST32)/lib/gstreamer-1.0/
|
|
cp -a $(MEDIACONV_OBJ32)/i686-unknown-linux-gnu/release/libprotonmediaconverter.so $(MEDIACONV_DST32)/lib/gstreamer-1.0/
|
|
touch $@
|
|
|
|
|
|
##
|
|
## BattlEye Bridge
|
|
##
|
|
|
|
ifneq ($(wildcard $(SRCDIR)/battleye-bridge/.*),)
|
|
|
|
BATTLEYE_LDFLAGS = -static-libgcc -static-libstdc++ -ldl
|
|
|
|
BATTLEYE_DEPENDS = wine
|
|
|
|
$(eval $(call rules-source,battleye,$(SRCDIR)/battleye-bridge))
|
|
$(eval $(call rules-winemaker,battleye,32,beclient.dll))
|
|
$(eval $(call rules-winemaker,battleye,64,beclient_x64.dll))
|
|
|
|
$(OBJ)/.battleye-post-source:
|
|
mkdir -p $(BATTLEYE_OBJ32) && cp -a $(BATTLEYE_SRC)/beclient.spec $(BATTLEYE_OBJ32)/beclient.spec
|
|
mkdir -p $(BATTLEYE_OBJ64) && cp -a $(BATTLEYE_SRC)/beclient.spec $(BATTLEYE_OBJ64)/beclient_x64.spec
|
|
touch $@
|
|
|
|
$(OBJ)/.battleye-post-build64:
|
|
mkdir -p $(OBJ)/dist-battleye/v1
|
|
cp -r $(BATTLEYE_DST64)/* $(OBJ)/dist-battleye/v1/
|
|
rm -rf $(BATTLEYE_DST64)/*
|
|
touch $@
|
|
|
|
$(OBJ)/.battleye-post-build32:
|
|
mkdir -p $(OBJ)/dist-battleye/v1
|
|
cp -r $(BATTLEYE_DST32)/* $(OBJ)/dist-battleye/v1/
|
|
rm -rf $(BATTLEYE_DST32)/*
|
|
touch $@
|
|
|
|
endif
|
|
|
|
##
|
|
## EasyAntiCheat Bridge
|
|
##
|
|
|
|
ifneq ($(wildcard $(SRCDIR)/eac-bridge/.*),)
|
|
|
|
EAC_DEPENDS = wine
|
|
|
|
$(eval $(call rules-source,eac,$(SRCDIR)/eac-bridge))
|
|
$(eval $(call create-rules-common,eac,EAC,64))
|
|
$(eval $(call create-rules-common,eac,EAC,32))
|
|
|
|
|
|
$(OBJ)/.eac-build64:
|
|
@echo ":: building 64bit eac..." >&2
|
|
rsync -arx "$(EAC_SRC)/" "$(EAC_OBJ64)/"
|
|
env $(EAC_ENV64) \
|
|
$(MAKE) -C "$(EAC_OBJ64)" WINE_OBJ="$(WINE_OBJ64)" HOST="x86_64-w64-mingw32" CROSSCXX="x86_64-w64-mingw32-g++" BIT="64"
|
|
mkdir -p $(OBJ)/dist-eac/v2/lib64
|
|
$(call install-strip,$(EAC_OBJ64)/easyanticheat.so,$(OBJ)/dist-eac/v2/lib64)
|
|
$(call install-strip,$(EAC_OBJ64)/easyanticheat.dll,$(OBJ)/dist-eac/v2/lib64)
|
|
cp $(OBJ)/dist-eac/v2/lib64/easyanticheat.so $(OBJ)/dist-eac/v2/lib64/easyanticheat_x64.so
|
|
cp $(OBJ)/dist-eac/v2/lib64/easyanticheat.dll $(OBJ)/dist-eac/v2/lib64/easyanticheat_x64.dll
|
|
touch $@
|
|
|
|
$(OBJ)/.eac-build32:
|
|
@echo ":: building 32bit eac..." >&2
|
|
rsync -arx "$(EAC_SRC)/" "$(EAC_OBJ32)/"
|
|
env $(EAC_ENV32) \
|
|
$(MAKE) -C "$(EAC_OBJ32)" WINE_OBJ="$(WINE_OBJ32)" HOST="i686-w64-mingw32" CROSSCXX="i686-w64-mingw32-g++" BIT="32"
|
|
mkdir -p $(OBJ)/dist-eac/v2/lib32
|
|
$(call install-strip,$(EAC_OBJ32)/easyanticheat.so,$(OBJ)/dist-eac/v2/lib32)
|
|
$(call install-strip,$(EAC_OBJ32)/easyanticheat.dll,$(OBJ)/dist-eac/v2/lib32)
|
|
mv $(OBJ)/dist-eac/v2/lib32/easyanticheat.so $(OBJ)/dist-eac/v2/lib32/easyanticheat_x86.so
|
|
mv $(OBJ)/dist-eac/v2/lib32/easyanticheat.dll $(OBJ)/dist-eac/v2/lib32/easyanticheat_x86.dll
|
|
touch $@
|
|
|
|
endif
|
|
|
|
|
|
##
|
|
## Fonts
|
|
##
|
|
|
|
.PHONY: fonts
|
|
|
|
FONTS := $(SRCDIR)/fonts
|
|
FONTS_OBJ := ./obj-fonts
|
|
|
|
FONTFORGE = fontforge -quiet
|
|
FONTSCRIPT = $(FONTS)/scripts/generatefont.pe
|
|
MERGEFONTSSCRIPT = $(FONTS)/scripts/mergefonts.pe
|
|
|
|
LIBERATION_SRCDIR = $(FONTS)/liberation-fonts/src
|
|
SOURCE_HAN_SANS_SRCDIR = $(FONTS)/source-han-sans
|
|
UME_DIR = $(FONTS)/ume
|
|
|
|
msyh.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.SC
|
|
msyh.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.SC
|
|
msyh.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_CN_sequences.txt
|
|
msyh.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansCN-UTF32-H
|
|
msyh.ttf_MENUNAMEDB = $(FONTS)/patches/YaHei-FontMenuNameDB
|
|
msyh.ttf = $(FONTS_OBJ)/source-han/msyh.ttf
|
|
|
|
simsun.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.SC
|
|
simsun.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.SC
|
|
simsun.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_CN_sequences.txt
|
|
simsun.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansCN-UTF32-H
|
|
simsun.ttf_MENUNAMEDB = $(FONTS)/patches/SimSun-FontMenuNameDB
|
|
simsun.ttf = $(FONTS_OBJ)/source-han/simsun.ttf
|
|
|
|
nsimsun.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.SC
|
|
nsimsun.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.SC
|
|
nsimsun.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_CN_sequences.txt
|
|
nsimsun.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansCN-UTF32-H
|
|
nsimsun.ttf_MENUNAMEDB = $(FONTS)/patches/NSimSun-FontMenuNameDB
|
|
nsimsun.ttf = $(FONTS_OBJ)/source-han/nsimsun.ttf
|
|
|
|
msgothic.ttf_FONT = $(UME_DIR)/ume-tgo4.ttf
|
|
msgothic.ttf_NAMETABLE_PATCH = $(FONTS)/patches/UmeGothic-nametable.patch
|
|
msgothic.ttf = $(FONTS_OBJ)/ume-gothic/msgothic.ttf
|
|
|
|
mspgothic.ttf_FONT = $(UME_DIR)/ume-pgo4.ttf
|
|
mspgothic.ttf_NAMETABLE_PATCH = $(FONTS)/patches/UmePGothic-nametable.patch
|
|
mspgothic.ttf = $(FONTS_OBJ)/ume-gothic/mspgothic.ttf
|
|
|
|
msuigothic.ttf_FONT = $(UME_DIR)/ume-ugo4.ttf
|
|
msuigothic.ttf_NAMETABLE_PATCH = $(FONTS)/patches/UmeUIGothic-nametable.patch
|
|
msuigothic.ttf = $(FONTS_OBJ)/ume-gothic/msuigothic.ttf
|
|
|
|
malgun.ttf_CIDFONT = $(SOURCE_HAN_SANS_SRCDIR)/cidfont.ps.OTC.K
|
|
malgun.ttf_FEATURES = $(SOURCE_HAN_SANS_SRCDIR)/features.OTC.K
|
|
malgun.ttf_SEQUENCES = $(SOURCE_HAN_SANS_SRCDIR)/SourceHanSans_KR_sequences.txt
|
|
malgun.ttf_UNISOURCE = $(SOURCE_HAN_SANS_SRCDIR)/UniSourceHanSansKR-UTF32-H
|
|
malgun.ttf_MENUNAMEDB = $(FONTS)/patches/Malgun-FontMenuNameDB
|
|
malgun.ttf = $(FONTS_OBJ)/source-han/malgun.ttf
|
|
|
|
simsun.ttc = $(FONTS_OBJ)/source-han/simsun.ttc
|
|
msgothic.ttc = $(FONTS_OBJ)/ume-gothic/msgothic.ttc
|
|
|
|
noto_sans.ttf = $(FONTS)/noto/NotoSans-Regular.ttf
|
|
noto_sans_arabic.ttf = $(FONTS)/noto/NotoSansArabic-Regular.ttf
|
|
noto_sans_armenian.tff = $(FONTS)/noto/NotoSansArmenian-Regular.ttf
|
|
noto_sans_bengali.ttf = $(FONTS)/noto/NotoSansBengali-Regular.ttf
|
|
noto_sans_coptic.ttf = $(FONTS)/noto/NotoSansCoptic-Regular.ttf
|
|
noto_sans_georgian.ttf = $(FONTS)/noto/NotoSansGeorgian-Regular.ttf
|
|
noto_sans_gujarati.ttf = $(FONTS)/noto/NotoSansGujarati-Regular.ttf
|
|
noto_sans_hebrew.ttf = $(FONTS)/noto/NotoSansHebrew-Regular.ttf
|
|
noto_sans_khmer.ttf = $(FONTS)/noto/NotoSansKhmer-Regular.ttf
|
|
noto_sans_tamil.ttf = $(FONTS)/noto/NotoSansTamil-Regular.ttf
|
|
noto_sans_thaana.ttf = $(FONTS)/noto/NotoSansThaana-Regular.ttf
|
|
noto_sans_thai.ttf = $(FONTS)/noto/NotoSansThai-Regular.ttf
|
|
micross.ttf = $(FONTS_OBJ)/micross.ttf
|
|
|
|
noto_sans_bengaliui.ttf = $(FONTS)/noto/NotoSansBengaliUI-Regular.ttf
|
|
noto_sans_devanagariui.ttf = $(FONTS)/noto/NotoSansDevanagariUI-Regular.ttf
|
|
noto_sans_gujaratiui.ttf = $(FONTS)/noto/NotoSansGujaratiUI-Regular.ttf
|
|
noto_sans_gurmukhiui.ttf = $(FONTS)/noto/NotoSansGurmukhiUI-Regular.ttf
|
|
noto_sans_kannadaui.ttf = $(FONTS)/noto/NotoSansKannadaUI-Regular.ttf
|
|
noto_sans_malayalamui.ttf = $(FONTS)/noto/NotoSansMalayalamUI-Regular.ttf
|
|
noto_sans_meeteimayek.ttf = $(FONTS)/noto/NotoSansMeeteiMayek-Regular.ttf
|
|
noto_sans_olchiki.ttf = $(FONTS)/noto/NotoSansOlChiki-Regular.ttf
|
|
noto_sans_oriyaui.ttf = $(FONTS)/noto/NotoSansOriyaUI-Regular.ttf
|
|
noto_sans_sinhalaui.ttf = $(FONTS)/noto/NotoSansSinhalaUI-Regular.ttf
|
|
noto_sans_sorasompeng.ttf = $(FONTS)/noto/NotoSansSoraSompeng-Regular.ttf
|
|
noto_sans_tamilui.ttf = $(FONTS)/noto/NotoSansTamilUI-Regular.ttf
|
|
noto_sans_teluguui.ttf = $(FONTS)/noto/NotoSansTeluguUI-Regular.ttf
|
|
nirmala.ttf = $(FONTS_OBJ)/nirmala.ttf
|
|
|
|
#The use of "Arial" here is for compatibility with programs that require that exact string. This font is not Arial.
|
|
LiberationSans-Regular_NAMES := "Arial" "Arial" "Arial"
|
|
#The use of "Arial" here is for compatibility with programs that require that exact string. This font is not Arial.
|
|
LiberationSans-Bold_NAMES := "Arial-Bold" "Arial" "Arial Bold"
|
|
#The use of "Times New Roman" here is for compatibility with programs that require that exact string. This font is not Times New Roman.
|
|
LiberationSerif-Regular_NAMES := "TimesNewRoman" "Times New Roman" "Times New Roman"
|
|
#The use of "Courier New" here is for compatibility with programs that require that exact string. This font is not Courier New.
|
|
LiberationMono-Regular_NAMES := "CourierNew" "Courier New" "Courier New"
|
|
LiberationMono-Regular_PATCH := $(FONTS)/patches/LiberationMono-Regular.patch
|
|
#The use of "Courier New" here is for compatibility with programs that require that exact string. This font is not Courier New.
|
|
LiberationMono-Bold_NAMES := "CourierNewPS-BoldMT" "Courier New" "Courier New Bold"
|
|
|
|
$(FONTS_OBJ):
|
|
mkdir -p $@
|
|
|
|
$(FONTS_OBJ)/%.ttf: $(FONTS_OBJ)/%.sfd $(FONTSCRIPT) | $(FONTS_OBJ)
|
|
$(FONTFORGE) -script $(FONTSCRIPT) $< $($(*)_NAMES)
|
|
|
|
$(FONTS_OBJ)/%.sfd: $(LIBERATION_SRCDIR)/%.sfd | $(FONTS_OBJ)
|
|
patch $< -o $@ $(firstword $($(*)_PATCH) /dev/null)
|
|
|
|
fonts: $(FONTS_OBJ)/LiberationSans-Regular.ttf
|
|
fonts: $(FONTS_OBJ)/LiberationSans-Bold.ttf
|
|
fonts: $(FONTS_OBJ)/LiberationSerif-Regular.ttf
|
|
fonts: $(FONTS_OBJ)/LiberationMono-Regular.ttf
|
|
fonts: $(FONTS_OBJ)/LiberationMono-Bold.ttf
|
|
|
|
#The use of "YaHei" for compatibility with programs that require that exact string. This font is not Microsoft YaHei.
|
|
$(FONTS_OBJ)/source-han/%.ttf: $$(%.ttf_CIDFONT) $$(%.ttf_FEATURES) $$(%.ttf_SEQUENCES) $$(%.ttf_UNISOURCE) $$(%.ttf_MENUNAMEDB)
|
|
mkdir -p $(FONTS_OBJ)/source-han
|
|
# Do not immediately create the target file, so that make is interrupted
|
|
# it will restart again
|
|
afdko makeotfexe -f $($(notdir $@)_CIDFONT) -omitMacNames -ff $($(notdir $@)_FEATURES) \
|
|
-lic ADOBE -mf $($(notdir $@)_MENUNAMEDB) -r -nS -cs 25 -ch $($(notdir $@)_UNISOURCE) \
|
|
-ci $($(notdir $@)_SEQUENCES) -o $@.tmp
|
|
afdko tx -cff +S -no_futile $($(notdir $@)_CIDFONT) $@.cff
|
|
# sftnedit uses a hardcoded temporary file in the local directory, so we have
|
|
# to run it in a dedicated temporary directory to prevent concurrent instances
|
|
# to step onto each other's feet
|
|
(TEMP_DIR=`mktemp -d` && cd $$TEMP_DIR && afdko sfntedit -a CFF=$(abspath $($(notdir $@)).cff) $(abspath $@.tmp) && rm -fr $$TEMP_DIR)
|
|
mv $@.tmp $@
|
|
|
|
$(FONTS_OBJ)/ume-gothic/%.ttf: $$(%.ttf_FONT) $$(%.ttf_NAMETABLE_PATCH)
|
|
mkdir -p $(FONTS_OBJ)/ume-gothic
|
|
ttx -o $(FONTS_OBJ)/ume-gothic/$(notdir $(basename $($(notdir $@)_NAMETABLE_PATCH))).ttx -t name $($(notdir $@)_FONT)
|
|
patch $(FONTS_OBJ)/ume-gothic/$(notdir $(basename $($(notdir $@)_NAMETABLE_PATCH))).ttx $($(notdir $@)_NAMETABLE_PATCH)
|
|
ttx -o $@ -m $($(notdir $@)_FONT) $(FONTS_OBJ)/ume-gothic/$(notdir $(basename $($(notdir $@)_NAMETABLE_PATCH))).ttx
|
|
|
|
$(simsun.ttc): $(simsun.ttf) $(nsimsun.ttf)
|
|
afdko otf2otc -o $@ $^
|
|
|
|
$(msgothic.ttc): $(msgothic.ttf) $(mspgothic.ttf) $(msuigothic.ttf)
|
|
afdko otf2otc -o $@ $^
|
|
|
|
$(micross.ttf): $(FONTS)/scripts/merge.py $(noto_sans.ttf) $(noto_sans_arabic.ttf) $(noto_sans_armenian.ttf) $(noto_sans_bengali.ttf) $(noto_sans_coptic.ttf) \
|
|
$(noto_sans_georgian.ttf) $(noto_sans_gujarati.ttf) $(noto_sans_hebrew.ttf) $(noto_sans_khmer.ttf) $(noto_sans_tamil.ttf) \
|
|
$(noto_sans_thaana.ttf) $(noto_sans_thai.ttf)
|
|
$(FONTS)/scripts/merge.py $(noto_sans.ttf) $(noto_sans_arabic.ttf) $(noto_sans_armenian.ttf) $(noto_sans_bengali.ttf) \
|
|
$(noto_sans_coptic.ttf) $(noto_sans_georgian.ttf) $(noto_sans_gujarati.ttf) $(noto_sans_hebrew.ttf) $(noto_sans_khmer.ttf) \
|
|
$(noto_sans_tamil.ttf) $(noto_sans_thaana.ttf) $(noto_sans_thai.ttf) "MicrosoftSansSerif" "Microsoft Sans Serif" "Regular" $(micross.ttf)
|
|
|
|
$(nirmala.ttf): $(FONTS)/scripts/merge.py $(noto_sans.ttf) $(noto_sans_bengaliui.ttf) $(noto_sans_devanagariui.ttf) $(noto_sans_gujaratiui.ttf) $(noto_sans_gurmukhiui.ttf) \
|
|
$(noto_sans_kannadaui.ttf) $(noto_sans_malayalamui.ttf) $(noto_sans_meeteimayek.ttf) $(noto_sans_olchiki.ttf) $(noto_sans_oriyaui.ttf) \
|
|
$(noto_sans_sinhalaui.ttf) $(noto_sans_sorasompeng.ttf) $(noto_sans_tamilui.ttf) $(noto_sans_teluguui.ttf)
|
|
$(FONTS)/scripts/merge.py $(noto_sans.ttf) $(noto_sans_bengaliui.ttf) $(noto_sans_devanagariui.ttf) $(noto_sans_gujaratiui.ttf) \
|
|
$(noto_sans_gurmukhiui.ttf) $(noto_sans_kannadaui.ttf) $(noto_sans_malayalamui.ttf) $(noto_sans_meeteimayek.ttf) $(noto_sans_olchiki.ttf) \
|
|
$(noto_sans_oriyaui.ttf) $(noto_sans_sinhalaui.ttf) $(noto_sans_sorasompeng.ttf) $(noto_sans_tamilui.ttf) $(noto_sans_teluguui.ttf) \
|
|
"NirmalaUI" "Nirmala UI" "Regular" $(nirmala.ttf)
|
|
|
|
fonts: $(msyh.ttf)
|
|
fonts: $(simsun.ttc)
|
|
fonts: $(msgothic.ttc)
|
|
fonts: $(malgun.ttf)
|
|
fonts: $(micross.ttf)
|
|
fonts: $(nirmala.ttf)
|
|
|
|
DIST_FONTS := $(DST_DIR)/share/fonts
|
|
$(DIST_FONTS): fonts
|
|
mkdir -p $@
|
|
cp $(FONTS_OBJ)/*.ttf "$@"
|
|
cp $(FONTS_OBJ)/source-han/msyh.ttf "$@"
|
|
cp $(FONTS_OBJ)/source-han/simsun.ttc "$@"
|
|
cp $(FONTS_OBJ)/ume-gothic/msgothic.ttc "$@"
|
|
cp $(FONTS_OBJ)/source-han/malgun.ttf "$@"
|
|
|
|
all-dist: $(DIST_FONTS)
|
|
|
|
|
|
##
|
|
## Gecko
|
|
##
|
|
|
|
GECKO_VER := 2.47.3
|
|
GECKO32_TARBALL := wine-gecko-$(GECKO_VER)-x86.tar.xz
|
|
GECKO64_TARBALL := wine-gecko-$(GECKO_VER)-x86_64.tar.xz
|
|
GECKO64_TARBALL_URL := https://dl.winehq.org/wine/wine-gecko/$(GECKO_VER)/$(GECKO64_TARBALL)
|
|
GECKO32_TARBALL_URL := https://dl.winehq.org/wine/wine-gecko/$(GECKO_VER)/$(GECKO32_TARBALL)
|
|
MONO_TARBALL_URL := https://github.com/madewokherd/wine-mono/releases/download/wine-mono-$(WINEMONO_VER)/$(WINEMONO_TARBALL)
|
|
DIST_GECKO_DIR := $(DST_DIR)/share/wine/gecko
|
|
DIST_GECKO32 := $(OBJ)/.gecko-dist32
|
|
DIST_GECKO64 := $(OBJ)/.gecko-dist64
|
|
|
|
$(SRC)/contrib/$(GECKO64_TARBALL):
|
|
mkdir -p $(dir $@)
|
|
wget -O $@ $(GECKO64_TARBALL_URL)
|
|
|
|
$(SRC)/contrib/$(GECKO32_TARBALL):
|
|
mkdir -p $(dir $@)
|
|
wget -O $@ $(GECKO32_TARBALL_URL)
|
|
|
|
$(DIST_GECKO32): $(SRC)/contrib/$(GECKO32_TARBALL)
|
|
mkdir -p $(DIST_GECKO_DIR)
|
|
rm -rf $(DIST_GECKO_DIR)/wine-gecko-$(GECKO_VER)-x86
|
|
tar --no-same-owner -xf $< -C $(DIST_GECKO_DIR)
|
|
touch $@
|
|
|
|
$(DIST_GECKO64): $(SRC)/contrib/$(GECKO64_TARBALL)
|
|
mkdir -p $(DIST_GECKO_DIR)
|
|
rm -rf $(DIST_GECKO_DIR)/wine-gecko-$(GECKO_VER)-x86_64
|
|
tar --no-same-owner -xf $< -C $(DIST_GECKO_DIR)
|
|
touch $@
|
|
|
|
all-dist: $(DIST_GECKO32) $(DIST_GECKO64)
|
|
|
|
|
|
##
|
|
## wine-mono
|
|
##
|
|
|
|
WINEMONO_VER := 7.4.0
|
|
WINEMONO_TARBALL := wine-mono-$(WINEMONO_VER)-x86.tar.xz
|
|
DIST_WINEMONO_DIR := $(DST_DIR)/share/wine/mono
|
|
DIST_WINEMONO := $(OBJ)/.wine-mono-dist
|
|
|
|
$(SRC)/contrib/$(WINEMONO_TARBALL):
|
|
mkdir -p $(dir $@)
|
|
wget -O $@ $(MONO_TARBALL_URL)
|
|
|
|
$(DIST_WINEMONO): $(SRC)/contrib/$(WINEMONO_TARBALL)
|
|
mkdir -p $(DIST_WINEMONO_DIR)
|
|
rm -rf $(DIST_WINEMONO_DIR)/wine-mono-$(WINEMONO_VER)
|
|
tar --no-same-owner -xf $< -C $(DIST_WINEMONO_DIR)
|
|
touch $@
|
|
|
|
all-dist: $(DIST_WINEMONO)
|
|
|
|
|
|
##
|
|
## openvr
|
|
##
|
|
|
|
DIST_OVR32 := $(DST_LIBDIR32)/wine/dxvk/openvr_api_dxvk.dll
|
|
$(DIST_OVR32): $(SRCDIR)/openvr/bin/win32/openvr_api.dll | $(DST_DIR)
|
|
mkdir -p $(DST_LIBDIR32)/wine/dxvk
|
|
cp -a $< $@
|
|
|
|
DIST_OVR64 := $(DST_LIBDIR64)/wine/dxvk/openvr_api_dxvk.dll
|
|
$(DIST_OVR64): $(SRCDIR)/openvr/bin/win64/openvr_api.dll | $(DST_DIR)
|
|
mkdir -p $(DST_LIBDIR64)/wine/dxvk
|
|
cp -a $< $@
|
|
|
|
all-dist: $(DIST_OVR32) $(DIST_OVR64)
|
|
|
|
|
|
##
|
|
## default_pfx
|
|
##
|
|
|
|
default_pfx: wine gst_good gst_libav gst_plugins_rs lsteamclient steamexe vrclient wineopenxr dxvk dxvk-nvapi vkd3d-proton
|
|
find $(DST_LIBDIR32)/wine -type f -execdir chmod a-w '{}' '+'
|
|
find $(DST_LIBDIR64)/wine -type f -execdir chmod a-w '{}' '+'
|
|
rm -rf $(abspath $(DIST_PREFIX))
|
|
python3 $(SRCDIR)/default_pfx.py $(abspath $(DIST_PREFIX)) $(abspath $(DST_DIR))
|
|
|
|
all-dist: default_pfx
|
|
|
|
|
|
##
|
|
## toolmanifest.vdf
|
|
##
|
|
|
|
TOOLMANIFEST_VDF_SRC := toolmanifest_runtime.vdf
|
|
DIST_TOOLMANIFEST := $(addprefix $(DST_BASE)/,toolmanifest.vdf)
|
|
$(DIST_TOOLMANIFEST): $(addprefix $(SRCDIR)/,$(TOOLMANIFEST_VDF_SRC))
|
|
cp -a $< $@
|
|
|
|
all-dist: $(DIST_TOOLMANIFEST)
|
|
|
|
|
|
##
|
|
## compatibilitytool.vdf
|
|
##
|
|
|
|
COMPAT_MANIFEST_TEMPLATE := $(SRCDIR)/compatibilitytool.vdf.template
|
|
DIST_COMPAT_MANIFEST := $(DST_BASE)/compatibilitytool.vdf
|
|
$(DIST_COMPAT_MANIFEST): $(COMPAT_MANIFEST_TEMPLATE) | $(DST_DIR)
|
|
sed -r 's|##BUILD_NAME##|$(BUILD_NAME)|' $< > $@
|
|
|
|
all-dist: $(DIST_COMPAT_MANIFEST)
|
|
|
|
|
|
##
|
|
## licenses / patents
|
|
##
|
|
|
|
LICENSE := $(SRCDIR)/dist.LICENSE
|
|
DIST_LICENSE := $(DST_BASE)/LICENSE
|
|
$(DIST_LICENSE): $(LICENSE)
|
|
cp -a $< $@
|
|
|
|
OFL_LICENSE := $(SRCDIR)/fonts/liberation-fonts/LICENSE
|
|
DIST_OFL_LICENSE := $(DST_BASE)/LICENSE.OFL
|
|
$(DIST_OFL_LICENSE): $(OFL_LICENSE)
|
|
cp -a $< $@
|
|
|
|
AV1_PATENTS := $(SRCDIR)/dav1d/doc/PATENTS
|
|
DIST_AV1_PATENTS := $(DST_BASE)/PATENTS.AV1
|
|
$(DIST_AV1_PATENTS): $(AV1_PATENTS)
|
|
cp -a $< $@
|
|
|
|
all-dist: $(DIST_LICENSE) $(DIST_OFL_LICENSE) $(DIST_AV1_PATENTS)
|
|
|
|
|
|
##
|
|
## proton(.py), filelock.py, etc.
|
|
##
|
|
|
|
FILELOCK_TARGET := $(addprefix $(DST_BASE)/,filelock.py)
|
|
$(FILELOCK_TARGET): $(addprefix $(SRCDIR)/,filelock.py)
|
|
|
|
PROTON_PY_TARGET := $(addprefix $(DST_BASE)/,proton)
|
|
$(PROTON_PY_TARGET): $(addprefix $(SRCDIR)/,proton)
|
|
|
|
PROTON37_TRACKED_FILES_TARGET := $(addprefix $(DST_BASE)/,proton_3.7_tracked_files)
|
|
$(PROTON37_TRACKED_FILES_TARGET): $(addprefix $(SRCDIR)/,proton_3.7_tracked_files)
|
|
|
|
USER_SETTINGS_PY_TARGET := $(addprefix $(DST_BASE)/,user_settings.sample.py)
|
|
$(USER_SETTINGS_PY_TARGET): $(addprefix $(SRCDIR)/,user_settings.sample.py)
|
|
|
|
DIST_COPY_TARGETS := $(FILELOCK_TARGET) $(PROTON_PY_TARGET) \
|
|
$(PROTON37_TRACKED_FILES_TARGET) $(USER_SETTINGS_PY_TARGET)
|
|
|
|
$(DIST_COPY_TARGETS): | $(DST_DIR)
|
|
cp -a $(SRCDIR)/$(notdir $@) $@
|
|
|
|
all-dist: $(DIST_COPY_TARGETS)
|
|
|
|
all-dist:
|
|
echo `date '+%s'` `GIT_DIR=$(abspath $(SRCDIR)/.git) git describe --tags` > $(DIST_VERSION)
|
|
|
|
DIST_TARGETS := $(DIST_COPY_TARGETS) $(DIST_OVR32) $(DIST_OVR64) \
|
|
$(DIST_GECKO32) $(DIST_GECKO64) $(DIST_WINEMONO) \
|
|
$(DIST_COMPAT_MANIFEST) $(DIST_LICENSE) $(DIST_TOOLMANIFEST) \
|
|
$(DIST_OFL_LICENSE) $(DIST_AV1_PATENTS) $(DIST_FONTS)
|
|
|
|
DEPLOY_COPY_TARGETS := $(DIST_COPY_TARGETS) $(DIST_VERSION) $(DIST_LICENSE) \
|
|
$(DIST_TOOLMANIFEST) $(DIST_OFL_LICENSE) $(DIST_AV1_PATENTS)
|
|
REDIST_COPY_TARGETS := $(DEPLOY_COPY_TARGETS) $(DIST_COMPAT_MANIFEST)
|
|
|
|
|
|
##
|
|
## make deploy
|
|
##
|
|
|
|
.PHONY: deploy
|
|
deploy: all
|
|
mkdir -p $(DEPLOY_DIR) && \
|
|
rsync --delete --exclude dist --exclude compatibilitytool.vdf -arx $(DST_BASE)/ $(DEPLOY_DIR) && \
|
|
tar -C $(DST_DIR) -c . > $(DEPLOY_DIR)/proton_dist.tar
|
|
@echo "Created deployment archive at "$(DEPLOY_DIR)"/proton_dist.tar"
|
|
|
|
|
|
##
|
|
## make redist
|
|
##
|
|
|
|
.PHONY: redist
|
|
redist: all
|
|
mkdir -p $(REDIST_DIR)
|
|
rsync --delete --exclude dist -arx $(REDIST_COPY_TARGETS) $(REDIST_DIR)
|
|
tar -C $(DST_DIR) -c . | gzip -c -1 > $(REDIST_DIR)/proton_dist.tar.gz
|
|
@echo "Created redistribution tarball at "$(REDIST_DIR)"/proton_dist.tar.gz"
|
|
|
|
|
|
##
|
|
## make module=$dllname module[32,64]
|
|
##
|
|
|
|
.PHONY: module32 module64 module
|
|
|
|
module32: | all-source wine-configure32
|
|
+$(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_OBJ32)/dlls/$(module)
|
|
|
|
module64: | all-source wine-configure64
|
|
+$(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_OBJ64)/dlls/$(module)
|
|
|
|
module: | all-source wine-configure
|
|
module: module32 module64
|
|
|
|
###############################
|
|
else # outside of the container
|
|
###############################
|
|
|
|
J := $(shell nproc)
|
|
|
|
# If CC is coming from make's defaults or nowhere, use our own default. Otherwise respect environment.
|
|
CCACHE_ENV := $(patsubst %,-e %,$(shell env|cut -d= -f1|grep '^CCACHE_'))
|
|
ifeq ($(ENABLE_CCACHE),1)
|
|
export CCACHE_DIR := $(if $(CCACHE_DIR),$(CCACHE_DIR),$(HOME)/.ccache)
|
|
override DOCKER_OPTS := -v $(CCACHE_DIR):$(CCACHE_DIR)$(CONTAINER_MOUNT_OPTS) $(CCACHE_ENV) -e CCACHE_DIR=$(CCACHE_DIR) $(DOCKER_OPTS)
|
|
else
|
|
export CCACHE_DISABLE := 1
|
|
override DOCKER_OPTS := $(CCACHE_ENV) -e CCACHE_DISABLE=1 $(DOCKER_OPTS)
|
|
endif
|
|
|
|
export CARGO_HOME := $(if $(CARGO_HOME),$(CARGO_HOME),$(HOME)/.cargo)
|
|
override DOCKER_OPTS := -v $(CARGO_HOME):$(CARGO_HOME)$(CONTAINER_MOUNT_OPTS) -e CARGO_HOME=$(CARGO_HOME) $(DOCKER_OPTS)
|
|
|
|
ifneq ($(ROOTLESS_CONTAINER),1)
|
|
override DOCKER_OPTS := -e HOME -e USER -e USERID=$(shell id -u) -u $(shell id -u):$(shell id -g) $(DOCKER_OPTS)
|
|
endif
|
|
|
|
ifeq ($(CONTAINER_ENGINE),)
|
|
CONTAINER_ENGINE := docker
|
|
endif
|
|
|
|
DOCKER_BASE = $(CONTAINER_ENGINE) run --rm -v $(SRC):$(SRC)$(CONTAINER_MOUNT_OPTS) -v $(OBJ):$(OBJ)$(CONTAINER_MOUNT_OPTS) \
|
|
-w $(OBJ) -e MAKEFLAGS \
|
|
$(DOCKER_OPTS) $(STEAMRT_IMAGE)
|
|
|
|
.PHONY: dist deploy redist
|
|
.DEFAULT dist deploy redist:
|
|
if [ "$(ENABLE_CCACHE)" -eq "1" ]; then mkdir -p $(CCACHE_DIR); fi
|
|
mkdir -p $(CARGO_HOME)
|
|
$(DOCKER_BASE) $(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) -f $(firstword $(MAKEFILE_LIST)) $(MFLAGS) $(MAKEOVERRIDES) CONTAINER=1 $@
|
|
|
|
|
|
.PHONY: test-container
|
|
test-container:
|
|
@echo >&2 ":: Testing container"
|
|
$(DOCKER_BASE) /bin/bash -c "echo Hello World!"
|
|
|
|
|
|
STEAM_DIR := $(HOME)/.steam/root
|
|
.PHONY: install
|
|
install: all
|
|
if [ ! -d $(STEAM_DIR) ]; then echo >&2 "!! "$(STEAM_DIR)" does not exist, cannot install"; return 1; fi
|
|
mkdir -p $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
|
|
rsync --delete -arx $(DST_BASE)/* $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
|
|
cp -f $(DIST_VERSION) $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)/dist/
|
|
@echo "Installed Proton to "$(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
|
|
@echo "You may need to restart Steam to select this tool"
|
|
|
|
|
|
.PHONY: help targets
|
|
help: targets
|
|
targets:
|
|
$(info make - create a normal proton build in dist/)
|
|
$(info make install - install the proton build locally in $(STEAM_DIR))
|
|
$(info make deploy - create a build ready to be uploaded to steamworks in deploy/)
|
|
$(info make redist - create an easily sharable proton redistributable in redist/)
|
|
$(info make module=xyz module - build the selected wine dll)
|
|
|
|
|
|
.PHONY: default
|
|
default: all
|
|
.DEFAULT_GOAL := default
|
|
endif
|