mirror of
https://github.com/ValveSoftware/Proton.git
synced 2024-12-27 07:05:46 +03:00
76406455ac
We can move everything but Liberation fonts build to the container. Sadly those require newer version of fontforge than the one available in the Steam RT. There's some extra logic necessary to assure that font build triggers in the container with the default/all targets. This removes the requirement to have afdko and fonttools installed on the host.
1201 lines
41 KiB
Makefile
1201 lines
41 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
|
|
|
|
##
|
|
## Nested make
|
|
##
|
|
|
|
SHELL := /bin/bash
|
|
|
|
ifneq ($(NO_NESTED_MAKE),1)
|
|
# Pass all variables/goals to ourselves as a sub-make such that we will get a trailing error message upon failure. (We
|
|
# invoke a lot of long-running build-steps, and make fails to re-print errors when they happened ten thousand lines
|
|
# ago.)
|
|
export
|
|
.DEFAULT_GOAL := default
|
|
.PHONY: $(MAKECMDGOALS) default nested_make
|
|
default $(MAKECMDGOALS): nested_make
|
|
|
|
nested_make:
|
|
+$(MAKE) $(MAKECMDGOALS) -f $(firstword $(MAKEFILE_LIST)) NO_NESTED_MAKE=1
|
|
|
|
else # (Rest of the file is the else)
|
|
|
|
##
|
|
## 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_NAME - Name of the steam runtime to build against (scout / soldier)
|
|
|
|
ifeq ($(SRCDIR),)
|
|
foo := $(error SRCDIR not set, do not include Makefile.in directly, run ./configure.sh to generate Makefile)
|
|
endif
|
|
|
|
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
|
|
|
|
# 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)
|
|
|
|
STEAMRT_NAME ?= soldier
|
|
ifeq ($(STEAMRT_NAME),soldier)
|
|
TOOLMANIFEST_VDF_SRC := toolmanifest_runtime.vdf
|
|
else
|
|
TOOLMANIFEST_VDF_SRC := toolmanifest_noruntime.vdf
|
|
endif
|
|
|
|
ifneq ($(STEAMRT_IMAGE),)
|
|
CONTAINER_SHELL := $(DOCKER_BASE) /bin/bash
|
|
STEAM_RUNTIME_RUNSH := $(DOCKER_BASE)
|
|
else
|
|
CONTAINER_SHELL := $(SHELL)
|
|
STEAM_RUNTIME_RUNSH :=
|
|
endif
|
|
|
|
|
|
MAKECMDGOALS32 := $(filter-out all32,$(filter %32,$(MAKECMDGOALS)))
|
|
MAKECMDGOALS64 := $(filter-out all64,$(filter %64,$(MAKECMDGOALS)))
|
|
CONTAINERGOALS := $(MAKECMDGOALS32) $(MAKECMDGOALS64) $(filter fonts,$(MAKECMDGOALS))
|
|
|
|
all: all32 all64 fonts
|
|
.PHONY: all
|
|
|
|
all32 $(MAKECMDGOALS32):
|
|
.PHONY: all32 $(MAKECMDGOALS32)
|
|
|
|
all32 $(MAKECMDGOALS64):
|
|
.PHONY: all64 $(MAKECMDGOALS64)
|
|
|
|
ifeq ($(CONTAINER),)
|
|
J := $(shell nproc)
|
|
ifeq ($(ENABLE_CCACHE),1)
|
|
container-build: $(shell mkdir -p $(CCACHE_DIR))
|
|
endif
|
|
container-build: $(shell mkdir -p $(CARGO_HOME))
|
|
container-build: private SHELL := $(CONTAINER_SHELL)
|
|
container-build:
|
|
+$(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) -f $(firstword $(MAKEFILE_LIST)) $(MFLAGS) $(MAKEOVERRIDES) CONTAINER=1 $(CONTAINERGOALS)
|
|
.PHONY: container-build
|
|
|
|
all32 $(MAKECMDGOALS32): container-build
|
|
all64 $(MAKECMDGOALS64): container-build
|
|
else
|
|
J = $(patsubst -j%,%,$(filter -j%,$(MAKEFLAGS)))
|
|
endif
|
|
|
|
|
|
.PHONY: test-container
|
|
test-container:
|
|
@echo >&2 ":: Testing container"
|
|
$(CONTAINER_SHELL) -c "echo Hello World!"
|
|
|
|
# Many of the configure steps below depend on the makefile itself, such that they are dirtied by changing the recipes
|
|
# that create them. This can be annoying when working on the makefile, building with NO_MAKEFILE_DEPENDENCY=1 disables
|
|
# this.
|
|
MAKEFILE_DEP := $(MAKEFILE_LIST)
|
|
ifeq ($(NO_MAKEFILE_DEPENDENCY),1)
|
|
MAKEFILE_DEP :=
|
|
endif
|
|
|
|
##
|
|
## Global config
|
|
##
|
|
|
|
DST_BASE := $(OBJ)/dist
|
|
DST_DIR := $(DST_BASE)/dist
|
|
DST_LIBDIR32 := $(DST_DIR)/lib
|
|
DST_LIBDIR64 := $(DST_DIR)/lib64
|
|
DEPLOY_DIR := ./deploy
|
|
REDIST_DIR := ./redist
|
|
|
|
# All top level goals. Lazy evaluated so they can be added below.
|
|
GOAL_TARGETS = $(GOAL_TARGETS_LIBS)
|
|
# Excluding goals like wine and dist that are either long running or slow per invocation
|
|
GOAL_TARGETS_LIBS =
|
|
# Any explicit thing, superset
|
|
ALL_TARGETS =
|
|
|
|
##
|
|
## Platform-specific variables
|
|
##
|
|
|
|
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 := -gdwarf-2 -gstrict-dwarf
|
|
COMMON_FLAGS = $(DEBUG_FLAGS) $(OPTIMIZE_FLAGS) $(SANITY_FLAGS) -ffile-prefix-map=$(CCACHE_BASEDIR)=.
|
|
COMMON_FLAGS32 := -mstackrealign
|
|
CARGO_BUILD_ARG := --release
|
|
|
|
##
|
|
## Target configs
|
|
##
|
|
|
|
COMPAT_MANIFEST_TEMPLATE := $(SRCDIR)/compatibilitytool.vdf.template
|
|
LICENSE := $(SRCDIR)/dist.LICENSE
|
|
OFL_LICENSE := $(SRCDIR)/fonts/liberation-fonts/LICENSE
|
|
AV1_PATENTS := $(SRCDIR)/dav1d/doc/PATENTS
|
|
|
|
GECKO_VER := 2.47.2
|
|
GECKO32_TARBALL := wine-gecko-$(GECKO_VER)-x86.tar.xz
|
|
GECKO64_TARBALL := wine-gecko-$(GECKO_VER)-x86_64.tar.xz
|
|
|
|
WINEMONO_VER := 7.1.2
|
|
WINEMONO_TARBALL := wine-mono-$(WINEMONO_VER)-x86.tar.xz
|
|
|
|
FONTS := $(SRCDIR)/fonts
|
|
FONTS_OBJ := ./obj-fonts
|
|
|
|
ifeq ($(CONTAINER),)
|
|
|
|
## downloads -- Convenience target to download packages used during the build
|
|
## process. Places them in subdirs one up from the Proton source dir, so
|
|
## they won't be wiped during git-clean, vagrant rsync, etc.
|
|
|
|
.PHONY: downloads
|
|
|
|
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)
|
|
|
|
SHARED_GECKO64_TARBALL := $(SRCDIR)/../gecko/$(GECKO64_TARBALL)
|
|
SHARED_GECKO32_TARBALL := $(SRCDIR)/../gecko/$(GECKO32_TARBALL)
|
|
SHARED_MONO_TARBALL := $(SRCDIR)/../mono/$(WINEMONO_TARBALL)
|
|
|
|
$(SHARED_GECKO64_TARBALL):
|
|
mkdir -p $(dir $@)
|
|
wget -O "$@" "$(GECKO64_TARBALL_URL)"
|
|
|
|
$(SHARED_GECKO32_TARBALL):
|
|
mkdir -p $(dir $@)
|
|
wget -O "$@" "$(GECKO32_TARBALL_URL)"
|
|
|
|
$(SHARED_MONO_TARBALL):
|
|
mkdir -p $(dir $@)
|
|
wget -O "$@" "$(MONO_TARBALL_URL)"
|
|
|
|
downloads: $(SHARED_GECKO64_TARBALL) $(SHARED_GECKO32_TARBALL) $(SHARED_MONO_TARBALL)
|
|
|
|
##
|
|
## dist/install -- steps to finalize the install
|
|
##
|
|
|
|
$(DST_DIR):
|
|
mkdir -p $@
|
|
|
|
STEAM_DIR := $(HOME)/.steam/root
|
|
|
|
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_VERSION := $(DST_BASE)/version
|
|
DIST_OVR32 := $(DST_LIBDIR32)/wine/dxvk/openvr_api_dxvk.dll
|
|
DIST_OVR64 := $(DST_LIBDIR64)/wine/dxvk/openvr_api_dxvk.dll
|
|
DIST_PREFIX := $(DST_DIR)/share/default_pfx/
|
|
DIST_COMPAT_MANIFEST := $(DST_BASE)/compatibilitytool.vdf
|
|
DIST_LICENSE := $(DST_BASE)/LICENSE
|
|
DIST_TOOLMANIFEST := $(addprefix $(DST_BASE)/,toolmanifest.vdf)
|
|
DIST_OFL_LICENSE := $(DST_BASE)/LICENSE.OFL
|
|
DIST_AV1_PATENTS := $(DST_BASE)/PATENTS.AV1
|
|
DIST_GECKO_DIR := $(DST_DIR)/share/wine/gecko
|
|
DIST_GECKO32 := $(DIST_GECKO_DIR)/wine-gecko-$(GECKO_VER)-x86
|
|
DIST_GECKO64 := $(DIST_GECKO_DIR)/wine-gecko-$(GECKO_VER)-x86_64
|
|
DIST_WINEMONO_DIR := $(DST_DIR)/share/wine/mono
|
|
DIST_WINEMONO := $(DIST_WINEMONO_DIR)/wine-mono-$(WINEMONO_VER)
|
|
DIST_FONTS := $(DST_DIR)/share/fonts
|
|
DIST_WINEOPENXR_JSON64 := $(DIST_PREFIX)/drive_c/openxr/wineopenxr64.json
|
|
DIST_WINEOPENXR64 := $(DIST_PREFIX)/drive_c/windows/system32/wineopenxr.dll
|
|
|
|
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)
|
|
|
|
$(DIST_LICENSE): $(LICENSE)
|
|
cp -a $< $@
|
|
|
|
$(DIST_TOOLMANIFEST): $(addprefix $(SRCDIR)/,$(TOOLMANIFEST_VDF_SRC))
|
|
cp -a $< $@
|
|
|
|
$(DIST_OFL_LICENSE): $(OFL_LICENSE)
|
|
cp -a $< $@
|
|
|
|
$(DIST_AV1_PATENTS): $(AV1_PATENTS)
|
|
cp -a $< $@
|
|
|
|
$(DIST_OVR32): $(SRCDIR)/openvr/bin/win32/openvr_api.dll | $(DST_DIR)
|
|
mkdir -p $(DST_LIBDIR32)/wine/dxvk
|
|
cp -a $< $@
|
|
|
|
$(DIST_OVR64): $(SRCDIR)/openvr/bin/win64/openvr_api.dll | $(DST_DIR)
|
|
mkdir -p $(DST_LIBDIR64)/wine/dxvk
|
|
cp -a $< $@
|
|
|
|
$(DIST_COPY_TARGETS): | $(DST_DIR)
|
|
cp -a $(SRCDIR)/$(notdir $@) $@
|
|
|
|
$(DIST_COMPAT_MANIFEST): $(COMPAT_MANIFEST_TEMPLATE) $(MAKEFILE_DEP) | $(DST_DIR)
|
|
sed -r 's|##BUILD_NAME##|$(BUILD_NAME)|' $< > $@
|
|
|
|
$(DIST_GECKO_DIR):
|
|
mkdir -p $@
|
|
|
|
$(DIST_GECKO64): | $(DIST_GECKO_DIR)
|
|
if [ -e "$(SHARED_GECKO64_TARBALL)" ]; then \
|
|
tar -xf "$(SHARED_GECKO64_TARBALL)" -C "$(dir $@)"; \
|
|
else \
|
|
mkdir -p $(SRCDIR)/contrib/; \
|
|
if [ ! -e "$(SRCDIR)/contrib/$(GECKO64_TARBALL)" ]; then \
|
|
echo ">>>> Downloading wine-gecko. To avoid this in future, put it here: $(SRCDIR)/../gecko/$(GECKO64_TARBALL)"; \
|
|
wget -O "$(SRCDIR)/contrib/$(GECKO64_TARBALL)" "$(GECKO64_TARBALL_URL)"; \
|
|
fi; \
|
|
tar -xf "$(SRCDIR)/contrib/$(GECKO64_TARBALL)" -C "$(dir $@)"; \
|
|
fi
|
|
|
|
$(DIST_GECKO32): | $(DIST_GECKO_DIR)
|
|
if [ -e "$(SHARED_GECKO32_TARBALL)" ]; then \
|
|
tar -xf "$(SHARED_GECKO32_TARBALL)" -C "$(dir $@)"; \
|
|
else \
|
|
mkdir -p $(SRCDIR)/contrib/; \
|
|
if [ ! -e "$(SRCDIR)/contrib/$(GECKO32_TARBALL)" ]; then \
|
|
echo ">>>> Downloading wine-gecko. To avoid this in future, put it here: $(SRCDIR)/../gecko/$(GECKO32_TARBALL)"; \
|
|
wget -O "$(SRCDIR)/contrib/$(GECKO32_TARBALL)" "$(GECKO32_TARBALL_URL)"; \
|
|
fi; \
|
|
tar -xf "$(SRCDIR)/contrib/$(GECKO32_TARBALL)" -C "$(dir $@)"; \
|
|
fi
|
|
|
|
$(DIST_WINEMONO_DIR):
|
|
mkdir -p $@
|
|
|
|
$(DIST_WINEMONO): | $(DIST_WINEMONO_DIR)
|
|
if [ -e "$(SHARED_MONO_TARBALL)" ]; then \
|
|
tar -xf "$(SHARED_MONO_TARBALL)" -C "$(dir $@)"; \
|
|
else \
|
|
mkdir -p $(SRCDIR)/contrib/; \
|
|
if [ ! -e "$(SRCDIR)/contrib/$(WINEMONO_TARBALL)" ]; then \
|
|
echo ">>>> Downloading wine-mono. To avoid this in future, put it here: $(SRCDIR)/../mono/$(WINEMONO_TARBALL)"; \
|
|
wget -O "$(SRCDIR)/contrib/$(WINEMONO_TARBALL)" "$(MONO_TARBALL_URL)"; \
|
|
fi; \
|
|
tar -xf "$(SRCDIR)/contrib/$(WINEMONO_TARBALL)" -C "$(dir $@)"; \
|
|
fi
|
|
|
|
$(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 "$@"
|
|
|
|
.PHONY: dist
|
|
|
|
ALL_TARGETS += dist
|
|
GOAL_TARGETS += dist
|
|
|
|
dist_prefix: wine gst_good gst_libav gst_plugins_rs
|
|
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)) $(STEAM_RUNTIME_RUNSH)
|
|
|
|
dist_wineopenxr: dist_prefix $(DIST_WINEOPENXR_JSON64)
|
|
|
|
dist: $(DIST_TARGETS) all-dist dist_wineopenxr | $(DST_DIR)
|
|
echo `date '+%s'` `GIT_DIR=$(abspath $(SRCDIR)/.git) git describe --tags` > $(DIST_VERSION)
|
|
|
|
deploy: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS))
|
|
mkdir -p $(DEPLOY_DIR) && \
|
|
cp -a $(DEPLOY_COPY_TARGETS) $(DEPLOY_DIR) && \
|
|
tar -C $(DST_DIR) -c . > $(DEPLOY_DIR)/proton_dist.tar
|
|
@echo "Created deployment archive at "$(DEPLOY_DIR)"/proton_dist.tar"
|
|
|
|
install: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS))
|
|
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)
|
|
cp -rf --no-dereference --preserve=mode,links $(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"
|
|
|
|
redist: dist | $(filter-out dist deploy install redist,$(MAKECMDGOALS))
|
|
mkdir -p $(REDIST_DIR)
|
|
cp -a $(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"
|
|
|
|
.PHONY: module32 module64 module
|
|
|
|
module32: private SHELL := $(CONTAINER_SHELL)
|
|
module32: CONTAINERGOALS := $(CONTAINERGOALS) wine-configure32
|
|
module32: | all-source wine-configure32
|
|
+$(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_OBJ32)/dlls/$(module)
|
|
|
|
module64: private SHELL := $(CONTAINER_SHELL)
|
|
module64: CONTAINERGOALS := $(CONTAINERGOALS) wine-configure64
|
|
module64: | all-source wine-configure64
|
|
+$(MAKE) -j$(J) $(filter -j%,$(MAKEFLAGS)) $(MFLAGS) $(MAKEOVERRIDES) -C $(WINE_OBJ64)/dlls/$(module)
|
|
|
|
module: CONTAINERGOALS := $(CONTAINERGOALS) wine-configure
|
|
module: | all-source wine-configure
|
|
module: module32 module64
|
|
|
|
endif # ifeq ($(CONTAINER),)
|
|
|
|
|
|
##
|
|
## 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_COMMON_MESON_ARGS := \
|
|
-Dorc=enabled
|
|
|
|
GST_ORC_MESON_ARGS := \
|
|
-Dorc-test=disabled \
|
|
$(GST_COMMON_MESON_ARGS)
|
|
|
|
$(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 \
|
|
$(GST_COMMON_MESON_ARGS)
|
|
|
|
GSTREAMER_DEPENDS = gst_orc
|
|
|
|
$(eval $(call rules-source,gstreamer,$(SRCDIR)/gstreamer))
|
|
$(eval $(call rules-meson,gstreamer,32))
|
|
$(eval $(call rules-meson,gstreamer,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 \
|
|
$(GST_COMMON_MESON_ARGS)
|
|
|
|
GST_BASE_DEPENDS = gst_orc 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 \
|
|
-Dwavparse=enabled \
|
|
$(GST_COMMON_MESON_ARGS)
|
|
|
|
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))
|
|
|
|
|
|
##
|
|
## 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
|
|
|
|
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): $(WINEOPENXR_SRC)/wineopenxr64.json dist_prefix
|
|
mkdir -p $(dir $@)
|
|
cp -a $< $@
|
|
|
|
|
|
##
|
|
## 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 \
|
|
|
|
WINE_CONFIGURE_ARGS = \
|
|
--with-mingw \
|
|
--disable-tests
|
|
|
|
WINE_CONFIGURE_ARGS64 = --enable-win64
|
|
|
|
WINE_DEPENDS = gst_orc gstreamer gst_base
|
|
|
|
$(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 && rm dlls/winevulkan/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
|
|
|
|
$(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 = \
|
|
--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-shader-1.dll,$(DST_LIBDIR64)/vkd3d)
|
|
touch $@
|
|
|
|
$(OBJ)/.vkd3d-post-build32:
|
|
mkdir -p $(DST_DIR)/lib/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_ARGS = -Denable_standalone_d3d12=true
|
|
VKD3D_PROTON_MESON_ARGS32 = --bindir=$(VKD3D_PROTON_DST32)/lib/wine/vkd3d-proton
|
|
VKD3D_PROTON_MESON_ARGS64 = --bindir=$(VKD3D_PROTON_DST64)/lib64/wine/vkd3d-proton
|
|
|
|
$(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
|
|
|
|
ALL_TARGETS += fonts
|
|
GOAL_TARGETS += fonts
|
|
|
|
.PHONY: 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 $@
|
|
|
|
ifeq ($(CONTAINER),)
|
|
fonts: container-build # trigger container build
|
|
|
|
$(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 below need a newer fontforge version then the one in the container
|
|
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
|
|
else # ifeq ($(CONTAINER),)
|
|
#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): $(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)
|
|
$(FONTFORGE) -script $(MERGEFONTSSCRIPT) $(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): $(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)
|
|
$(FONTFORGE) -script $(MERGEFONTSSCRIPT) $(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)
|
|
endif # ifeq ($(CONTAINER),)
|
|
|
|
##
|
|
## Targets
|
|
##
|
|
|
|
ifeq ($(CONTAINER),)
|
|
.PHONY: all all64 all32 default help targets
|
|
|
|
# Produce a working dist directory by default
|
|
default: all dist
|
|
.DEFAULT_GOAL := default
|
|
|
|
# For suffixes 64/32/_configure64/_configure32 automatically check if they exist compared to ALL_TARGETS and make
|
|
# all_configure32/etc aliases
|
|
GOAL_TARGETS64 := $(filter $(addsuffix 64,$(GOAL_TARGETS)),$(ALL_TARGETS))
|
|
GOAL_TARGETS32 := $(filter $(addsuffix 32,$(GOAL_TARGETS)),$(ALL_TARGETS))
|
|
GOAL_TARGETS_LIBS64 := $(filter $(addsuffix 64,$(GOAL_TARGETS_LIBS)),$(ALL_TARGETS))
|
|
GOAL_TARGETS_LIBS32 := $(filter $(addsuffix 32,$(GOAL_TARGETS_LIBS)),$(ALL_TARGETS))
|
|
GOAL_TARGETS_CONFIGURE := $(filter $(addsuffix _configure,$(GOAL_TARGETS)),$(ALL_TARGETS))
|
|
GOAL_TARGETS_CONFIGURE64 := $(filter $(addsuffix _configure64,$(GOAL_TARGETS)),$(ALL_TARGETS))
|
|
GOAL_TARGETS_CONFIGURE32 := $(filter $(addsuffix _configure32,$(GOAL_TARGETS)),$(ALL_TARGETS))
|
|
|
|
# Anything in all-targets that didn't end up in here
|
|
OTHER_TARGETS := $(filter-out $(ALL_TARGETS),$(GOAL_TARGETS) $(GOAL_TARGETS64) $(GOAL_TARGETS32) \
|
|
$(GOAL_TARGETS_LIBS64) $(GOAL_TARGETS_LIBS32) $(GOAL_TARGETS_CONFIGURE) \
|
|
$(GOAL_TARGETS_CONFIGURE64) $(GOAL_TARGETS_CONFIGURE32))
|
|
|
|
help: targets
|
|
targets:
|
|
$(info Default targets (make all): $(strip $(GOAL_TARGETS)))
|
|
$(info Default targets (make all_lib): $(strip $(GOAL_TARGETS_LIBS)))
|
|
$(info Default targets (make all_configure): $(strip $(GOAL_TARGETS_CONFIGURE)))
|
|
$(info Default targets (make all64): $(strip $(GOAL_TARGETS64)))
|
|
$(info Default targets (make all32): $(strip $(GOAL_TARGETS32)))
|
|
$(info Default targets (make all64_lib): $(strip $(GOAL_TARGETS_LIBS64)))
|
|
$(info Default targets (make all32_lib): $(strip $(GOAL_TARGETS_LIBS32)))
|
|
$(info Reconfigure targets (make all64_configure): $(strip $(GOAL_TARGETS_CONFIGURE64)))
|
|
$(info Reconfigure targets (make all32_configure): $(strip $(GOAL_TARGETS_CONFIGURE32)))
|
|
$(info Other targets: $(OTHER_TARGETS))
|
|
|
|
# All target
|
|
all: $(GOAL_TARGETS)
|
|
@echo ":: make $@ succeeded"
|
|
|
|
all32: $(GOAL_TARGETS32)
|
|
@echo ":: make $@ succeeded"
|
|
|
|
all64: $(GOAL_TARGETS64)
|
|
@echo ":: make $@ succeeded"
|
|
|
|
# Libraries (not wine) only -- wine has a length install step that runs unconditionally, so this is useful for updating
|
|
# incremental builds when not iterating on wine itself.
|
|
all_lib: $(GOAL_TARGETS_LIBS)
|
|
@echo ":: make $@ succeeded"
|
|
|
|
all32_lib: $(GOAL_TARGETS_LIBS32)
|
|
@echo ":: make $@ succeeded"
|
|
|
|
all64_lib: $(GOAL_TARGETS_LIBS64)
|
|
@echo ":: make $@ succeeded"
|
|
|
|
# Explicit reconfigure all targets
|
|
all_configure: $(GOAL_TARGETS_CONFIGURE)
|
|
@echo ":: make $@ succeeded"
|
|
|
|
all32_configure: $(GOAL_TARGETS_CONFIGURE32)
|
|
@echo ":: make $@ succeeded"
|
|
|
|
all64_configure: $(GOAL_TARGETS_CONFIGURE64)
|
|
@echo ":: make $@ succeeded"
|
|
|
|
endif # ifeq ($(CONTAINER),)
|
|
endif # End of NESTED_MAKE from beginning
|