mirror of
https://github.com/ValveSoftware/Proton.git
synced 2025-05-20 16:27:06 +02:00

Rather than having 'ffmpeg' be an optional thing that may or may not be in your build depending on if you've run 'make ffmpeg'
1396 lines
48 KiB
Makefile
1396 lines
48 KiB
Makefile
|
|
# TODO Missing vs build_proton
|
|
# - Package/tarball step
|
|
# - setup_wine_gecko
|
|
|
|
##
|
|
## Nested make
|
|
##
|
|
|
|
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.
|
|
# NO_DXVK - 1 if skipping DXVK steps
|
|
# WITH_FFMPEG - 1 if including ffmpeg steps
|
|
# OSX - 1 if OS X build
|
|
# STEAMRT64_MODE - 'docker' or '' for automatic Steam Runtime container
|
|
# STEAMRT64_IMAGE - Name of the image if mode is set
|
|
# STEAMRT32_MODE - Same as above for 32-bit container (can be different type)
|
|
# STEAMRT32_IMAGE - Same as above for 32-bit container
|
|
|
|
ifeq ($(SRCDIR),)
|
|
foo := $(error SRCDIR not set, do not include makefile_base directly, run ./configure.sh to generate Makefile)
|
|
endif
|
|
|
|
# If CC is coming from make's defaults or nowhere, use our own default. Otherwise respect environment.
|
|
ifneq ($(filter default undefined,$(origin CC)),)
|
|
ifeq ($(OSX),1)
|
|
CC = ccache clang
|
|
else
|
|
CC = ccache gcc
|
|
endif
|
|
endif
|
|
ifneq ($(filter default undefined,$(origin CXX)),)
|
|
ifeq ($(OSX),1)
|
|
CXX = ccache clang++
|
|
else
|
|
CXX = ccache g++
|
|
endif
|
|
endif
|
|
|
|
export CC
|
|
export CXX
|
|
|
|
# Selected container mode shell
|
|
DOCKER_SHELL_BASE = sudo docker run --rm --init -v $(HOME):$(HOME) -w $(CURDIR) -e HOME=$(HOME) \
|
|
-v /etc/passwd:/etc/passwd:ro -u $(shell id -u):$(shell id -g) -h $(shell hostname) \
|
|
-v /tmp:/tmp $(SELECT_DOCKER_IMAGE) /dev/init -sg -- /bin/bash
|
|
|
|
# If STEAMRT64_MODE/STEAMRT32_MODE is set, set the nested SELECT_DOCKER_IMAGE to the _IMAGE variable and eval
|
|
# DOCKER_SHELL_BASE with it to create the CONTAINER_SHELL setting.
|
|
ifeq ($(STEAMRT64_MODE),docker)
|
|
SELECT_DOCKER_IMAGE := $(STEAMRT64_IMAGE)
|
|
CONTAINER_SHELL64 := $(DOCKER_SHELL_BASE)
|
|
else ifneq ($(STEAMRT64_MODE),)
|
|
foo := $(error Unrecognized STEAMRT64_MODE $(STEAMRT64_MODE))
|
|
endif
|
|
ifeq ($(STEAMRT32_MODE),docker)
|
|
SELECT_DOCKER_IMAGE := $(STEAMRT32_IMAGE)
|
|
CONTAINER_SHELL32 := $(DOCKER_SHELL_BASE)
|
|
else ifneq ($(STEAMRT32_MODE),)
|
|
foo := $(error Unrecognized STEAMRT32_MODE $(STEAMRT32_MODE))
|
|
endif
|
|
|
|
SELECT_DOCKER_IMAGE :=
|
|
|
|
# If we're using containers to sub-invoke the various builds, jobserver won't work, have some silly auto-jobs
|
|
# controllable by SUBMAKE_JOBS. Not ideal.
|
|
ifneq ($(CONTAINER_SHELL32)$(CONTAINER_SHELL64),)
|
|
SUBMAKE_JOBS ?= 24
|
|
MAKE := make -j$(SUBMAKE_JOBS)
|
|
endif
|
|
|
|
# Use default shell if no STEAMRT_ variables setup a container to invoke. Commands will just run natively.
|
|
ifndef CONTAINER_SHELL64
|
|
CONTAINER_SHELL64 := $(SHELL)
|
|
endif
|
|
ifndef CONTAINER_SHELL32
|
|
CONTAINER_SHELL32 := $(SHELL)
|
|
endif
|
|
|
|
$(info Testing configured 64bit container)
|
|
ifneq ($(shell $(CONTAINER_SHELL64) -c "echo hi"), hi)
|
|
$(error "Cannot run commands in 64bit container")
|
|
endif
|
|
$(info Testing configured 32bit container)
|
|
ifneq ($(shell $(CONTAINER_SHELL32) -c "echo hi"), hi)
|
|
$(error "Cannot run commands in 32bit container")
|
|
endif
|
|
|
|
# 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
|
|
##
|
|
|
|
TOOLS_DIR32 := ./obj-tools32
|
|
TOOLS_DIR64 := ./obj-tools64
|
|
DST_BASE := ./dist
|
|
DST_DIR := $(DST_BASE)/dist
|
|
|
|
# TODO Release/debug configuration
|
|
INSTALL_PROGRAM_FLAGS :=
|
|
|
|
# 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
|
|
##
|
|
|
|
LIB_SUFFIX := "so"
|
|
STRIP := strip
|
|
FREETYPE32_CFLAGS :=
|
|
FREETYPE32_LIBS :=
|
|
FREETYPE64_CFLAGS :=
|
|
FREETYPE64_LIBS :=
|
|
PNG32_CFLAGS :=
|
|
PNG32_LIBS :=
|
|
PNG64_CFLAGS :=
|
|
PNG64_LIBS :=
|
|
JPEG32_CFLAGS :=
|
|
JPEG32_LIBS :=
|
|
JPEG64_CFLAGS :=
|
|
JPEG64_LIBS :=
|
|
WINE32_AUTOCONF :=
|
|
WINE64_AUTOCONF :=
|
|
|
|
# Use $(call QUOTE,$(VAR)) to flatten a list to a single element (for feeding to a shell)
|
|
|
|
# OS X specific
|
|
ifeq ($(OSX),1)
|
|
STRIP := strip -x
|
|
LIB_SUFFIX := dylib
|
|
WINE32_AUTOCONF := --without-x \
|
|
ac_cv_lib_soname_freetype=libprotonfreetype.dylib \
|
|
ac_cv_lib_soname_png=libprotonpng16.dylib \
|
|
ac_cv_lib_soname_jpeg=libprotonjpeg.dylib
|
|
WINE64_AUTOCONF := --without-x \
|
|
ac_cv_lib_soname_freetype=libprotonfreetype.dylib \
|
|
ac_cv_lib_soname_png=libprotonpng16.dylib \
|
|
ac_cv_lib_soname_jpeg=libprotonjpeg.dylib
|
|
|
|
FREETYPE32_CFLAGS := -I$(abspath $(TOOLS_DIR32))/include/freetype2
|
|
FREETYPE32_LIBS := -L$(abspath $(TOOLS_DIR32))/lib -lprotonfreetype -framework CoreServices -framework ApplicationServices -lz
|
|
FREETYPE64_CFLAGS := -I$(abspath $(TOOLS_DIR64))/include/freetype2
|
|
FREETYPE64_LIBS := -L$(abspath $(TOOLS_DIR64))/lib -lprotonfreetype
|
|
PNG32_CFLAGS := -I$(abspath $(TOOLS_DIR32))/include
|
|
PNG32_LIBS := -L$(abspath $(TOOLS_DIR32))/lib -lprotonpng
|
|
PNG64_CFLAGS := -I$(abspath $(TOOLS_DIR64))/include
|
|
PNG64_LIBS := -L$(abspath $(TOOLS_DIR64))/lib -lprotonpng
|
|
JPEG32_CFLAGS := -I$(abspath $(TOOLS_DIR32))/include
|
|
JPEG32_LIBS := -L$(abspath $(TOOLS_DIR32))/lib -lprotonjpeg
|
|
JPEG64_CFLAGS := -I$(abspath $(TOOLS_DIR64))/include
|
|
JPEG64_LIBS := -L$(abspath $(TOOLS_DIR64))/lib -lprotonjpeg
|
|
endif
|
|
|
|
# Make magic: We don't want the variables listed here to be lists, just single elements with spaces in them for passing
|
|
# to shells. But we don't want someone forgetting to type "\ " to cause bizarre bugs. Just let them be entered
|
|
# free-form above, then enforce flattening on them all.
|
|
QUOTED_VARIABLES := LIB_SUFFIX \
|
|
FREETYPE32_CFLAGS \
|
|
FREETYPE32_LIBS \
|
|
FREETYPE64_CFLAGS \
|
|
FREETYPE64_LIBS \
|
|
PNG32_CFLAGS \
|
|
PNG32_LIBS \
|
|
PNG64_CFLAGS \
|
|
PNG64_LIBS \
|
|
JPEG32_CFLAGS \
|
|
JPEG32_LIBS \
|
|
JPEG64_CFLAGS \
|
|
JPEG64_LIBS
|
|
|
|
# v-- This flattens a list when called. Don't look directly into it.
|
|
QUOTE = $(subst $(eval) ,\ ,$(1))
|
|
QUOTE_VARIABLE = $(eval $(1) := $$(call QUOTE,$$($(1))))
|
|
QUOTE_VARIABLE_LIST = $(foreach a,$(1),$(call QUOTE_VARIABLE,$(a)))
|
|
$(call QUOTE_VARIABLE_LIST,$(QUOTED_VARIABLES))
|
|
|
|
# These variables might need to be quoted, but might not
|
|
#
|
|
# That is, $(STRIP) is how you invoke strip, STRIP=$(STRIP_QUOTED) is how you pass it to a shell script properly
|
|
# quoted
|
|
STRIP_QUOTED = $(call QUOTE,$(STRIP))
|
|
CC_QUOTED = $(call QUOTE,$(CC))
|
|
CXX_QUOTED = $(call QUOTE,$(CXX))
|
|
|
|
##
|
|
## Target configs
|
|
##
|
|
|
|
COMPAT_MANIFEST_TEMPLATE := $(SRCDIR)/compatibilitytool.vdf.template
|
|
LICENSE := $(SRCDIR)/dist.LICENSE.lin
|
|
ifeq ($(OSX),1)
|
|
LICENSE := $(SRCDIR)/dist.LICENSE.osx
|
|
endif
|
|
|
|
FREETYPE := $(SRCDIR)/freetype2
|
|
FREETYPE_OBJ32 := ./obj-freetype32
|
|
FREETYPE_OBJ64 := ./obj-freetype64
|
|
FREETYPE_OUT64 := $(TOOLS_DIR64)/lib/libprotonfreetype.dylib
|
|
FREETYPE_OUT32 := $(TOOLS_DIR32)/lib/libprotonfreetype.dylib
|
|
|
|
OPENAL := $(SRCDIR)/openal-soft
|
|
OPENAL_OBJ32 := ./obj-openal32
|
|
OPENAL_OBJ64 := ./obj-openal64
|
|
|
|
FFMPEG := $(SRCDIR)/ffmpeg
|
|
FFMPEG_OBJ32 := ./obj-ffmpeg32
|
|
FFMPEG_OBJ64 := ./obj-ffmpeg64
|
|
FFMPEG_CROSS_CFLAGS :=
|
|
FFMPEG_CROSS_LDFLAGS :=
|
|
|
|
LSTEAMCLIENT := $(SRCDIR)/lsteamclient
|
|
LSTEAMCLIENT_OBJ32 := ./obj-lsteamclient32
|
|
LSTEAMCLIENT_OBJ64 := ./obj-lsteamclient64
|
|
|
|
WINE := $(SRCDIR)/wine
|
|
WINE_DST32 := ./dist-wine32
|
|
WINE_OBJ32 := ./obj-wine32
|
|
WINE_OBJ64 := ./obj-wine64
|
|
WINEMAKER := $(abspath $(WINE)/tools/winemaker/winemaker)
|
|
|
|
# Wine outputs that need to exist for other steps (dist)
|
|
WINE_OUT_BIN := $(DST_DIR)/bin/wine64
|
|
WINE_OUT_SERVER := $(DST_DIR)/bin/wineserver
|
|
WINE_OUT := $(WINE_OUT_BIN) $(WINE_OUT_SERVER)
|
|
# Tool-only build outputs needed for other projects
|
|
WINEGCC32 := $(TOOLS_DIR32)/bin/winegcc
|
|
WINEBUILD32 := $(TOOLS_DIR32)/bin/winebuild
|
|
WINE_BUILDTOOLS32 := $(WINEGCC32) $(WINEBUILD32)
|
|
WINEGCC64 := $(TOOLS_DIR64)/bin/winegcc
|
|
WINEBUILD64 := $(TOOLS_DIR64)/bin/winebuild
|
|
WINE_BUILDTOOLS64 := $(WINEGCC64) $(WINEBUILD64)
|
|
|
|
VRCLIENT := $(SRCDIR)/vrclient_x64
|
|
VRCLIENT32 := ./syn-vrclient32
|
|
VRCLIENT_OBJ64 := ./obj-vrclient64
|
|
VRCLIENT_OBJ32 := ./obj-vrclient32
|
|
|
|
DXVK := $(SRCDIR)/dxvk
|
|
DXVK_OBJ32 := ./obj-dxvk32
|
|
DXVK_OBJ64 := ./obj-dxvk64
|
|
|
|
CMAKE := $(SRCDIR)/cmake
|
|
CMAKE_OBJ32 := ./obj-cmake32
|
|
CMAKE_OBJ64 := ./obj-cmake64
|
|
CMAKE_BIN32 := $(CMAKE_OBJ32)/built/bin/cmake
|
|
CMAKE_BIN64 := $(CMAKE_OBJ64)/built/bin/cmake
|
|
|
|
LIBPNG := $(SRCDIR)/libpng
|
|
LIBPNGPROTON := ./syn-libpng
|
|
LIBPNG_OBJ32 := ./obj-libpng32
|
|
LIBPNG_OBJ64 := ./obj-libpng64
|
|
LIBPNG_OUT64 := $(TOOLS_DIR64)/lib/libprotonpng16.dylib
|
|
LIBPNG_OUT32 := $(TOOLS_DIR32)/lib/libprotonpng16.dylib
|
|
|
|
LIBJPEG := $(SRCDIR)/libjpeg-turbo
|
|
LIBJPEGPROTON := ./syn-libjpeg
|
|
LIBJPEG_OBJ32 := ./obj-libjpeg32
|
|
LIBJPEG_OBJ64 := ./obj-libjpeg64
|
|
LIBJPEG_OUT64 := $(TOOLS_DIR64)/lib/libprotonjpeg.dylib
|
|
LIBJPEG_OUT32 := $(TOOLS_DIR32)/lib/libprotonjpeg.dylib
|
|
|
|
LIBSDL := $(SRCDIR)/SDL-mirror
|
|
LIBSDLPROTON := ./syn-libsdl
|
|
LIBSDL_OBJ32 := ./obj-libsdl32
|
|
LIBSDL_OBJ64 := ./obj-libsdl64
|
|
LIBSDL_OUT64 := $(TOOLS_DIR64)/lib/libSDL2.dylib
|
|
LIBSDL_OUT32 := $(TOOLS_DIR32)/lib/libSDL2.dylib
|
|
|
|
MOLTENVK := $(SRCDIR)/MoltenVK
|
|
MOLTENVKPROTON := ./syn-MoltenVK
|
|
MOLTENVK_OBJ := ./obj-moltenvk
|
|
MOLTENVK_OUT := $(TOOLS_DIR64)/lib/libMoltenVK.dylib
|
|
|
|
## Object directories
|
|
OBJ_DIRS := $(TOOLS_DIR32) $(TOOLS_DIR64) \
|
|
$(FREETYPE_OBJ32) $(FREETYPE_OBJ64) \
|
|
$(OPENAL_OBJ32) $(OPENAL_OBJ64) \
|
|
$(FFMPEG_OBJ32) $(FFMPEG_OBJ64) \
|
|
$(LSTEAMCLIENT_OBJ32) $(LSTEAMCLIENT_OBJ64) \
|
|
$(WINE_OBJ32) $(WINE_OBJ64) \
|
|
$(VRCLIENT_OBJ32) $(VRCLIENT_OBJ64) \
|
|
$(DXVK_OBJ32) $(DXVK_OBJ64) \
|
|
$(CMAKE_OBJ32) $(CMAKE_OBJ64) \
|
|
$(LIBPNG_OBJ32) $(LIBPNG_OBJ64) \
|
|
$(LIBJPEG_OBJ32) $(LIBJPEG_OBJ64) \
|
|
$(LIBSDL_OBJ32) $(LIBSDL_OBJ64) \
|
|
$(MOLTENVK_OBJ)
|
|
|
|
$(OBJ_DIRS):
|
|
mkdir -p $@
|
|
|
|
##
|
|
## dist/install -- steps to finalize the install
|
|
##
|
|
|
|
$(DST_DIR):
|
|
mkdir -p $@
|
|
|
|
STEAM_DIR := $(HOME)/.steam/root
|
|
|
|
DIST_COPY_FILES := toolmanifest.vdf filelock.py proton user_settings.sample.py
|
|
DIST_COPY_TARGETS := $(addprefix $(DST_BASE)/,$(DIST_COPY_FILES))
|
|
DIST_VERSION := $(DST_DIR)/version
|
|
DIST_VERSION_OUTER := $(DST_BASE)/version
|
|
DIST_OVR32 := $(DST_DIR)/lib/wine/dxvk/openvr_api_dxvk.dll
|
|
DIST_OVR64 := $(DST_DIR)/lib64/wine/dxvk/openvr_api_dxvk.dll
|
|
DIST_PREFIX := $(DST_DIR)/share/default_pfx/
|
|
DIST_COMPAT_MANIFEST := $(DST_BASE)/compatibilitytool.vdf
|
|
DIST_LICENSE := $(DST_DIR)/LICENSE
|
|
|
|
DIST_TARGETS := $(DIST_COPY_TARGETS) $(DIST_VERSION) $(DIST_VERSION_OUTER) $(DIST_OVR32) $(DIST_OVR64) \
|
|
$(DIST_COMPAT_MANIFEST) $(DIST_LICENSE)
|
|
|
|
$(DIST_LICENSE): $(LICENSE)
|
|
cp -a $< $@
|
|
|
|
$(DIST_OVR32): $(SRCDIR)/openvr/bin/win32/openvr_api.dll | $(DST_DIR)
|
|
mkdir -p $(DST_DIR)/lib/wine/dxvk
|
|
cp -a $< $@
|
|
|
|
$(DIST_OVR64): $(SRCDIR)/openvr/bin/win64/openvr_api.dll | $(DST_DIR)
|
|
mkdir -p $(DST_DIR)/lib64/wine/dxvk
|
|
cp -a $< $@
|
|
|
|
$(DIST_COPY_TARGETS): | $(DST_DIR)
|
|
cp -a $(SRCDIR)/$(notdir $@) $@
|
|
|
|
$(DIST_VERSION): | $(DST_DIR)
|
|
date '+%s' > $@
|
|
|
|
$(DIST_VERSION_OUTER): $(DIST_VERSION) | $(DST_DIR)
|
|
cp $< $@
|
|
|
|
$(DIST_COMPAT_MANIFEST): $(COMPAT_MANIFEST_TEMPLATE) $(MAKEFILE_DEP) | $(DST_DIR)
|
|
sed -r 's|//##DISPLAY_NAME##|"display_name" "'$(BUILD_NAME)'"|' $< > $@
|
|
|
|
.PHONY: dist
|
|
|
|
ALL_TARGETS += dist
|
|
GOAL_TARGETS += dist
|
|
|
|
# Only drag in WINE_OUT if they need to be built at all, otherwise this doesn't imply a rebuild of wine. If wine is in
|
|
# the explicit targets, specify that this should occur after.
|
|
dist: $(DIST_TARGETS) | $(WINE_OUT) $(filter $(MAKECMDGOALS),wine64 wine32 wine) $(DST_DIR)
|
|
WINEPREFIX=$(abspath $(DIST_PREFIX)) $(WINE_OUT_BIN) wineboot && \
|
|
WINEPREFIX=$(abspath $(DIST_PREFIX)) $(WINE_OUT_SERVER) -w
|
|
|
|
install: dist
|
|
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 -a $(DST_BASE)/* $(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
|
|
@echo "Installed Proton to "$(STEAM_DIR)/compatibilitytools.d/$(BUILD_NAME)
|
|
@echo "You may need to restart Steam to select this tool"
|
|
|
|
##
|
|
## freetype
|
|
##
|
|
|
|
ifeq ($(OSX),1) # currently only for OS X builds
|
|
|
|
## Autogen steps for freetype
|
|
FREETYPE_AUTOGEN_FILES := $(FREETYPE)/builds/unix/configure
|
|
|
|
$(FREETYPE_AUTOGEN_FILES): $(FREETYPE)/builds/unix/configure.raw $(FREETYPE)/autogen.sh
|
|
cd $(FREETYPE) && ./autogen.sh
|
|
|
|
## Create & configure object directory for freetype
|
|
|
|
FREETYPE_CONFIGURE_FILES32 := $(FREETYPE_OBJ32)/unix-cc.mk $(FREETYPE_OBJ32)/Makefile
|
|
FREETYPE_CONFIGURE_FILES64 := $(FREETYPE_OBJ64)/unix-cc.mk $(FREETYPE_OBJ64)/Makefile
|
|
|
|
# 64-bit configure
|
|
$(FREETYPE_CONFIGURE_FILES64): $(FREETYPE_AUTOGEN_FILES) $(MAKEFILE_DEP) | $(FREETYPE_OBJ64)
|
|
cd $(dir $@) && \
|
|
$(abspath $(FREETYPE)/configure) CC=$(CC_QUOTED) CXX=$(CXX_QUOTED) PKG_CONFIG=false \
|
|
--prefix=$(abspath $(TOOLS_DIR64)) --without-png --host x86_64-apple-darwin && \
|
|
echo 'LIBRARY := libprotonfreetype' >> unix-cc.mk
|
|
|
|
# 32bit-configure
|
|
$(FREETYPE_CONFIGURE_FILES32): $(FREETYPE_AUTOGEN_FILES) $(MAKEFILE_DEP) | $(FREETYPE_OBJ32)
|
|
cd $(dir $@) && \
|
|
$(abspath $(FREETYPE)/configure) CC=$(CC_QUOTED) CXX=$(CXX_QUOTED) PKG_CONFIG=false \
|
|
CFLAGS='-m32 -g -O2' LDFLAGS=-m32 \
|
|
--prefix=$(abspath $(TOOLS_DIR32)) --without-png --host i686-apple-darwin && \
|
|
echo 'LIBRARY := libprotonfreetype' >> unix-cc.mk
|
|
|
|
## Freetype goals
|
|
FREETYPE_TARGETS = freetype freetype32 freetype64 freetype_autogen freetype_configure freetype_configure32 freetype_configure64
|
|
|
|
ALL_TARGETS += $(FREETYPE_TARGETS)
|
|
GOAL_TARGETS_LIBS += freetype
|
|
|
|
.PHONY: $(FREETYPE_TARGETS)
|
|
|
|
freetype_configure: $(FREETYPE_CONFIGURE_FILES32) $(FREETYPE_CONFIGURE_FILES64)
|
|
|
|
freetype_configure64: $(FREETYPE_CONFIGURE_FILES64)
|
|
|
|
freetype_configure32: $(FREETYPE_CONFIGURE_FILES32)
|
|
|
|
freetype_autogen: $(FREETYPE_AUTOGEN_FILES)
|
|
|
|
freetype: freetype32 freetype64
|
|
|
|
# Make silliness to make both the explicit freetype goal and the outfile come from the same recipe
|
|
.INTERMEDIATE: freetype64-intermediate freetype32-intermediate
|
|
|
|
$(FREETYPE_OUT64) freetype64: freetype64-intermediate
|
|
|
|
$(FREETYPE_OUT32) freetype32: freetype32-intermediate
|
|
|
|
freetype64-intermediate: $(FREETYPE_CONFIGURE_FILES64)
|
|
$(MAKE) -C $(FREETYPE_OBJ64)
|
|
$(MAKE) -C $(FREETYPE_OBJ64) install
|
|
cp $(FREETYPE_OUT64) $(DST_DIR)/lib64
|
|
$(STRIP) $(DST_DIR)/lib64/libprotonfreetype.dylib
|
|
|
|
freetype32-intermediate: $(FREETYPE_CONFIGURE_FILES32)
|
|
$(MAKE) -C $(FREETYPE_OBJ32)
|
|
$(MAKE) -C $(FREETYPE_OBJ32) install
|
|
cp $(FREETYPE_OUT32) $(DST_DIR)/lib
|
|
$(STRIP) $(DST_DIR)/lib/libprotonfreetype.dylib
|
|
|
|
endif # ifeq ($(OSX),1)
|
|
|
|
##
|
|
## libpng
|
|
##
|
|
|
|
ifeq ($(OSX),1) # currently only for OS X builds
|
|
|
|
## Synthetic libpng with modified Makefile.am for autogen
|
|
$(LIBPNGPROTON)/.created: $(LIBPNG) $(MAKEFILE_DEP) $(LIBPNG)/autogen.sh $(LIBPNG)/configure.ac
|
|
rm -rf ./$(LIBPNGPROTON)
|
|
mkdir -p $(LIBPNGPROTON)/
|
|
cd $(LIBPNGPROTON)/ && \
|
|
ln -sfv ../$(LIBPNG)/* .
|
|
rm $(LIBPNGPROTON)/Makefile.am
|
|
cp $(LIBPNG)/Makefile.am $(LIBPNGPROTON)
|
|
sed -i -e 's/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@/libprotonpng@PNGLIB_MAJOR@@PNGLIB_MINOR@/' $(LIBPNGPROTON)/Makefile.am
|
|
cd $(LIBPNGPROTON) && ./autogen.sh --maintainer
|
|
touch $(LIBPNGPROTON)/.created
|
|
|
|
$(LIBPNGPROTON): $(LIBPNGPROTON)/.created
|
|
|
|
## Create & configure object directory for libpng
|
|
|
|
LIBPNG_CONFIGURE_FILES32 := $(LIBPNG_OBJ32)/Makefile
|
|
LIBPNG_CONFIGURE_FILES64 := $(LIBPNG_OBJ64)/Makefile
|
|
|
|
# 64-bit configure
|
|
$(LIBPNG_CONFIGURE_FILES64): $(LIBPNG_AUTOGEN_FILES) $(MAKEFILE_DEP) $(LIBPNGPROTON) | $(LIBPNG_OBJ64)
|
|
cd $(dir $@) && \
|
|
$(abspath $(LIBPNGPROTON)/configure) --prefix=$(abspath $(TOOLS_DIR64)) --host x86_64-apple-darwin
|
|
|
|
# 32bit-configure
|
|
$(LIBPNG_CONFIGURE_FILES32): $(LIBPNG_AUTOGEN_FILES) $(MAKEFILE_DEP) $(LIBPNGPROTON) | $(LIBPNG_OBJ32)
|
|
cd $(dir $@) && \
|
|
$(abspath $(LIBPNGPROTON)/configure) --prefix=$(abspath $(TOOLS_DIR32)) --host i686-apple-darwin \
|
|
CFLAGS='-m32 -g -O2' LDFLAGS=-m32
|
|
|
|
## Libpng goals
|
|
LIBPNG_TARGETS = libpng libpng32 libpng64 libpng_configure libpng_configure32 libpng_configure64
|
|
|
|
ALL_TARGETS += $(LIBPNG_TARGETS)
|
|
GOAL_TARGETS_LIBS += libpng
|
|
|
|
.PHONY: $(LIBPNG_TARGETS)
|
|
|
|
libpng_configure: $(LIBPNG_CONFIGURE_FILES32) $(LIBPNG_CONFIGURE_FILES64)
|
|
|
|
libpng_configure64: $(LIBPNG_CONFIGURE_FILES64)
|
|
|
|
libpng_configure32: $(LIBPNG_CONFIGURE_FILES32)
|
|
|
|
libpng: libpng32 libpng64
|
|
|
|
# Make silliness to make both the explicit libpng goal and the outfile come from the same recipe
|
|
.INTERMEDIATE: libpng64-intermediate libpng32-intermediate
|
|
|
|
$(LIBPNG_OUT64) libpng64: libpng64-intermediate
|
|
|
|
$(LIBPNG_OUT32) libpng32: libpng32-intermediate
|
|
|
|
libpng64-intermediate: $(LIBPNG_CONFIGURE_FILES64)
|
|
$(MAKE) -C $(LIBPNG_OBJ64)
|
|
$(MAKE) -C $(LIBPNG_OBJ64) install
|
|
cp $(LIBPNG_OUT64) $(DST_DIR)/lib64
|
|
$(STRIP) $(DST_DIR)/lib64/libprotonpng16.dylib
|
|
|
|
libpng32-intermediate: $(LIBPNG_CONFIGURE_FILES32)
|
|
$(MAKE) -C $(LIBPNG_OBJ32)
|
|
$(MAKE) -C $(LIBPNG_OBJ32) install
|
|
cp $(LIBPNG_OUT32) $(DST_DIR)/lib
|
|
$(STRIP) $(DST_DIR)/lib/libprotonpng16.dylib
|
|
|
|
endif # ifeq ($(OSX),1)
|
|
|
|
##
|
|
## libjpeg
|
|
##
|
|
|
|
ifeq ($(OSX),1) # currently only for OS X builds
|
|
|
|
## Synthetic libjpeg for autogen
|
|
$(LIBJPEGPROTON)/.created: $(LIBJPEG) $(MAKEFILE_DEP) $(LIBJPEG)/configure.ac
|
|
rm -rf ./$(LIBJPEGPROTON)
|
|
mkdir -p $(LIBJPEGPROTON)/
|
|
cd $(LIBJPEGPROTON)/ && \
|
|
ln -sfv ../$(LIBJPEG)/* .
|
|
rm -f $(LIBJPEGPROTON)/configure
|
|
cd $(LIBJPEGPROTON) && autoreconf -fiv
|
|
touch $(LIBJPEGPROTON)/.created
|
|
|
|
$(LIBJPEGPROTON): $(LIBJPEGPROTON)/.created
|
|
|
|
## Create & configure object directory for libjpeg
|
|
|
|
LIBJPEG_CONFIGURE_FILES32 := $(LIBJPEG_OBJ32)/Makefile
|
|
LIBJPEG_CONFIGURE_FILES64 := $(LIBJPEG_OBJ64)/Makefile
|
|
|
|
# 64-bit configure
|
|
$(LIBJPEG_CONFIGURE_FILES64): $(LIBJPEG_AUTOGEN_FILES) $(MAKEFILE_DEP) $(LIBJPEGPROTON) | $(LIBJPEG_OBJ64)
|
|
cd $(dir $@) && \
|
|
$(abspath $(LIBJPEGPROTON)/configure) --prefix=$(abspath $(TOOLS_DIR64)) --host x86_64-apple-darwin
|
|
|
|
# 32bit-configure
|
|
$(LIBJPEG_CONFIGURE_FILES32): $(LIBJPEG_AUTOGEN_FILES) $(MAKEFILE_DEP) $(LIBJPEGPROTON) | $(LIBJPEG_OBJ32)
|
|
cd $(dir $@) && \
|
|
$(abspath $(LIBJPEGPROTON)/configure) --prefix=$(abspath $(TOOLS_DIR32)) --host i686-apple-darwin \
|
|
CFLAGS='-O3 -g -m32' LDFLAGS=-m32
|
|
|
|
## Libjpeg goals
|
|
LIBJPEG_TARGETS = libjpeg libjpeg32 libjpeg64 libjpeg_configure libjpeg_configure32 libjpeg_configure64
|
|
|
|
ALL_TARGETS += $(LIBJPEG_TARGETS)
|
|
GOAL_TARGETS_LIBS += libjpeg
|
|
|
|
.PHONY: $(LIBJPEG_TARGETS)
|
|
|
|
libjpeg_configure: $(LIBJPEG_CONFIGURE_FILES32) $(LIBJPEG_CONFIGURE_FILES64)
|
|
|
|
libjpeg_configure64: $(LIBJPEG_CONFIGURE_FILES64)
|
|
|
|
libjpeg_configure32: $(LIBJPEG_CONFIGURE_FILES32)
|
|
|
|
libjpeg: libjpeg32 libjpeg64
|
|
|
|
# Make silliness to make both the explicit libjpeg goal and the outfile come from the same recipe
|
|
.INTERMEDIATE: libjpeg64-intermediate libjpeg32-intermediate
|
|
|
|
$(LIBJPEG_OUT64) libjpeg64: libjpeg64-intermediate
|
|
|
|
$(LIBJPEG_OUT32) libjpeg32: libjpeg32-intermediate
|
|
|
|
libjpeg64-intermediate: $(LIBJPEG_CONFIGURE_FILES64)
|
|
$(MAKE) -C $(LIBJPEG_OBJ64)
|
|
$(MAKE) -C $(LIBJPEG_OBJ64) install
|
|
mv $(TOOLS_DIR64)/lib/lib{,proton}jpeg.dylib
|
|
cp $(LIBJPEG_OUT64) $(DST_DIR)/lib64
|
|
$(STRIP) $(DST_DIR)/lib64/libprotonjpeg.dylib
|
|
|
|
libjpeg32-intermediate: $(LIBJPEG_CONFIGURE_FILES32)
|
|
$(MAKE) -C $(LIBJPEG_OBJ32)
|
|
$(MAKE) -C $(LIBJPEG_OBJ32) install
|
|
mv $(TOOLS_DIR32)/lib/lib{,proton}jpeg.dylib
|
|
cp $(LIBJPEG_OUT32) $(DST_DIR)/lib
|
|
$(STRIP) $(DST_DIR)/lib/libprotonjpeg.dylib
|
|
|
|
endif # ifeq ($(OSX),1)
|
|
|
|
|
|
##
|
|
## moltenvk
|
|
##
|
|
|
|
ifeq ($(OSX),1) # currently only for OS X builds
|
|
ifneq ($(NO_DXVK),1) # May be disabled by configure
|
|
|
|
## Symlink'd moltenvk directory because it has hard-coded build steps that look for ./Package
|
|
$(MOLTENVKPROTON)/.created: $(MOLTENVK) $(MAKEFILE_DEP) $(MOLTENVK_OBJ) | $(MOLTENVK)/External
|
|
rm -rf ./$(MOLTENVKPROTON)
|
|
mkdir -p $(MOLTENVKPROTON)/
|
|
cd $(MOLTENVKPROTON)/ && \
|
|
ln -sfv ../$(MOLTENVK)/* .
|
|
# Package -> obj-moltenvk/Package
|
|
rm -f $(MOLTENVKPROTON)/Package
|
|
cd $(MOLTENVKPROTON)/ && \
|
|
ln -sv ../$(MOLTENVK_OBJ)/Package
|
|
touch $(MOLTENVKPROTON)/.created
|
|
|
|
# This needs to exist before we do symlinking
|
|
$(MOLTENVK)/External:
|
|
mkdir -p $@
|
|
|
|
$(MOLTENVKPROTON): $(MOLTENVKPROTON)/.created
|
|
|
|
## Moltenvk goals
|
|
|
|
.PHONY: moltenvk
|
|
|
|
ALL_TARGETS += moltenvk
|
|
GOAL_TARGETS_LIBS += moltenvk
|
|
|
|
# Make silliness to make both the explicit moltenvk goal and the outfile come from the same recipe
|
|
.INTERMEDIATE: moltenvk-intermediate
|
|
|
|
$(MOLTENVK_OUT) moltenvk: moltenvk-intermediate
|
|
|
|
# The ./fetchDependencies step is not contained within the build directory, but the way it works is very messy to split
|
|
# out as such. We could run it in the symlink'd directory, but then we'd be fetching all of its dependencies per build,
|
|
# when they are invariant. This should still work decently with multiple builds, though perhaps not running them in
|
|
# parallel.
|
|
moltenvk-intermediate: $(MAKEFILE_DEP) $(MOLTENVKPROTON) | $(MOLTENVK_OBJ)
|
|
cd $(MOLTENVK) && ./fetchDependencies
|
|
mkdir -p $(MOLTENVK_OBJ)/Package
|
|
cd $(MOLTENVKPROTON) && xcodebuild -scheme 'MoltenVK (Release)' build -derivedDataPath $(abspath $(MOLTENVK_OBJ)) \
|
|
BUILD_DIR=$(abspath $(MOLTENVK_OBJ)) CC= CXX=
|
|
|
|
cp -a $(MOLTENVK_OBJ)/Package/Release/MoltenVK/include/* $(TOOLS_DIR64)/include/
|
|
cp -a $(MOLTENVK_OBJ)/Package/Release/MoltenVK/macOS/libMoltenVK.dylib $(TOOLS_DIR64)/lib/
|
|
cp -a $(MOLTENVK_OBJ)/Package/Release/MoltenVK/macOS/libMoltenVK.dylib $(DST_DIR)/lib64/
|
|
|
|
endif # ifneq($(NO_DXVK),1)
|
|
endif # ifeq ($(OSX),1)
|
|
|
|
##
|
|
## libsdl
|
|
##
|
|
|
|
ifeq ($(OSX),1) # currently only for OS X builds
|
|
|
|
## Synthetic libsdl for autogen
|
|
$(LIBSDLPROTON)/.created: $(LIBSDL) $(MAKEFILE_DEP) $(LIBSDL)/configure.in $(LIBSDL)/autogen.sh
|
|
rm -rf ./$(LIBSDLPROTON)
|
|
mkdir -p $(LIBSDLPROTON)/
|
|
cd $(LIBSDLPROTON)/ && \
|
|
ln -sfv ../$(LIBSDL)/* .
|
|
rm -f $(LIBSDLPROTON)/configure
|
|
cd $(LIBSDLPROTON) && ./autogen.sh
|
|
touch $(LIBSDLPROTON)/.created
|
|
|
|
$(LIBSDLPROTON): $(LIBSDLPROTON)/.created
|
|
|
|
## Create & configure object directory for libsdl
|
|
|
|
LIBSDL_CONFIGURE_FILES32 := $(LIBSDL_OBJ32)/Makefile
|
|
LIBSDL_CONFIGURE_FILES64 := $(LIBSDL_OBJ64)/Makefile
|
|
|
|
# 64-bit configure
|
|
$(LIBSDL_CONFIGURE_FILES64): $(LIBSDL_AUTOGEN_FILES) $(MAKEFILE_DEP) $(LIBSDLPROTON) | $(LIBSDL_OBJ64)
|
|
cd $(dir $@) && \
|
|
$(abspath $(LIBSDLPROTON)/configure) --prefix=$(abspath $(TOOLS_DIR64)) --host x86_64-apple-darwin
|
|
|
|
# 32bit-configure
|
|
$(LIBSDL_CONFIGURE_FILES32): $(LIBSDL_AUTOGEN_FILES) $(MAKEFILE_DEP) $(LIBSDLPROTON) | $(LIBSDL_OBJ32)
|
|
cd $(dir $@) && \
|
|
$(abspath $(LIBSDLPROTON)/configure) --prefix=$(abspath $(TOOLS_DIR32)) --host i686-apple-darwin \
|
|
CFLAGS='-m32 -g -O2' LDFLAGS=-m32
|
|
|
|
## Libsdl goals
|
|
LIBSDL_TARGETS = libsdl libsdl32 libsdl64 libsdl_configure libsdl_configure32 libsdl_configure64
|
|
|
|
ALL_TARGETS += $(LIBSDL_TARGETS)
|
|
GOAL_TARGETS_LIBS += libsdl
|
|
|
|
.PHONY: $(LIBSDL_TARGETS)
|
|
|
|
libsdl_configure: $(LIBSDL_CONFIGURE_FILES32) $(LIBSDL_CONFIGURE_FILES64)
|
|
|
|
libsdl_configure64: $(LIBSDL_CONFIGURE_FILES64)
|
|
|
|
libsdl_configure32: $(LIBSDL_CONFIGURE_FILES32)
|
|
|
|
libsdl: libsdl32 libsdl64
|
|
|
|
# Make silliness to make both the explicit libsdl goal and the outfile come from the same recipe
|
|
.INTERMEDIATE: libsdl64-intermediate libsdl32-intermediate
|
|
|
|
$(LIBSDL_OUT64) libsdl64: libsdl64-intermediate
|
|
|
|
$(LIBSDL_OUT32) libsdl32: libsdl32-intermediate
|
|
|
|
libsdl64-intermediate: $(LIBSDL_CONFIGURE_FILES64)
|
|
$(MAKE) -C $(LIBSDL_OBJ64)
|
|
$(MAKE) -C $(LIBSDL_OBJ64) install-hdrs
|
|
$(MAKE) -C $(LIBSDL_OBJ64) install-lib
|
|
cp $(LIBSDL_OUT64) $(DST_DIR)/lib64
|
|
$(STRIP) $(DST_DIR)/lib64/libSDL2.dylib
|
|
|
|
libsdl32-intermediate: $(LIBSDL_CONFIGURE_FILES32)
|
|
$(MAKE) -C $(LIBSDL_OBJ32)
|
|
$(MAKE) -C $(LIBSDL_OBJ32) install-hdrs
|
|
$(MAKE) -C $(LIBSDL_OBJ32) install-lib
|
|
cp $(LIBSDL_OUT32) $(DST_DIR)/lib
|
|
$(STRIP) $(DST_DIR)/lib/libSDL2.dylib
|
|
|
|
endif # ifeq ($(OSX),1)
|
|
|
|
##
|
|
## OpenAL
|
|
##
|
|
|
|
## Create & configure object directory for openal
|
|
|
|
OPENAL_CONFIGURE_FILES32 := $(OPENAL_OBJ32)/Makefile
|
|
OPENAL_CONFIGURE_FILES64 := $(OPENAL_OBJ64)/Makefile
|
|
|
|
# 64bit-configure
|
|
$(OPENAL_CONFIGURE_FILES64): SHELL = $(CONTAINER_SHELL64)
|
|
$(OPENAL_CONFIGURE_FILES64): $(OPENAL)/CMakeLists.txt $(MAKEFILE_DEP) $(CMAKE_BIN64) | $(OPENAL_OBJ64)
|
|
cd $(dir $@) && \
|
|
../$(CMAKE_BIN64) $(abspath $(OPENAL)) -DCMAKE_INSTALL_PREFIX="$(abspath $(TOOLS_DIR64))" \
|
|
-DALSOFT_EXAMPLES=Off -DALSOFT_UTILS=Off -DALSOFT_TESTS=Off \
|
|
-DCMAKE_INSTALL_LIBDIR="lib"
|
|
|
|
# 32-bit configure
|
|
$(OPENAL_CONFIGURE_FILES32): SHELL = $(CONTAINER_SHELL32)
|
|
$(OPENAL_CONFIGURE_FILES32): $(OPENAL)/CMakeLists.txt $(MAKEFILE_DEP) $(CMAKE_BIN32) | $(OPENAL_OBJ32)
|
|
cd $(dir $@) && \
|
|
../$(CMAKE_BIN32) $(abspath $(OPENAL)) \
|
|
-DCMAKE_INSTALL_PREFIX="$(abspath $(TOOLS_DIR32))" \
|
|
-DALSOFT_EXAMPLES=Off -DALSOFT_UTILS=Off -DALSOFT_TESTS=Off \
|
|
-DCMAKE_INSTALL_LIBDIR="lib" \
|
|
-DCMAKE_C_FLAGS="-m32" -DCMAKE_CXX_FLAGS="-m32"
|
|
|
|
## OpenAL goals
|
|
OPENAL_TARGETS = openal openal_configure openal32 openal64 openal_configure32 openal_configure64
|
|
|
|
ALL_TARGETS += $(OPENAL_TARGETS)
|
|
GOAL_TARGETS_LIBS += openal
|
|
|
|
.PHONY: $(OPENAL_TARGETS)
|
|
|
|
openal_configure: $(OPENAL_CONFIGURE_FILES32) $(OPENAL_CONFIGURE_FILES64)
|
|
|
|
openal_configure64: $(OPENAL_CONFIGURE_FILES64)
|
|
|
|
openal_configure32: $(OPENAL_CONFIGURE_FILES32)
|
|
|
|
openal: openal32 openal64
|
|
|
|
openal64: SHELL = $(CONTAINER_SHELL64)
|
|
openal64: $(OPENAL_CONFIGURE_FILES64)
|
|
cd $(OPENAL_OBJ64) && \
|
|
$(MAKE) VERBOSE=1 && \
|
|
$(MAKE) install VERBOSE=1 && \
|
|
mkdir -p ../$(DST_DIR)/lib64 && \
|
|
cp -L ../$(TOOLS_DIR64)/lib/libopenal* ../$(DST_DIR)/lib64/ && \
|
|
[ x"$(STRIP)" = x ] || $(STRIP) ../$(DST_DIR)/lib64/libopenal.$(LIB_SUFFIX)
|
|
|
|
|
|
openal32: SHELL = $(CONTAINER_SHELL32)
|
|
openal32: $(OPENAL_CONFIGURE_FILES32)
|
|
cd $(OPENAL_OBJ32) && \
|
|
$(MAKE) VERBOSE=1 && \
|
|
$(MAKE) install VERBOSE=1 && \
|
|
mkdir -p ../$(DST_DIR)/lib && \
|
|
cp -L ../$(TOOLS_DIR32)/lib/libopenal* ../$(DST_DIR)/lib/ && \
|
|
[ x"$(STRIP)" = x ] || $(STRIP) ../$(DST_DIR)/lib/libopenal.$(LIB_SUFFIX)
|
|
|
|
|
|
##
|
|
## ffmpeg
|
|
##
|
|
|
|
ifeq ($(WITH_FFMPEG),1)
|
|
|
|
FFMPEG_CONFIGURE_FILES32 := $(FFMPEG_OBJ32)/Makefile
|
|
FFMPEG_CONFIGURE_FILES64 := $(FFMPEG_OBJ64)/Makefile
|
|
|
|
# 64bit-configure
|
|
$(FFMPEG_CONFIGURE_FILES64): SHELL = $(CONTAINER_SHELL64)
|
|
$(FFMPEG_CONFIGURE_FILES64): $(FFMPEG)/configure $(MAKEFILE_DEP) | $(FFMPEG_OBJ64)
|
|
cd $(dir $@) && \
|
|
$(abspath $(FFMPEG))/configure \
|
|
--cc=$(CC_QUOTED) --cxx=$(CXX_QUOTED) \
|
|
--prefix=$(abspath $(TOOLS_DIR64)) \
|
|
--disable-static \
|
|
--enable-shared \
|
|
--disable-programs \
|
|
--disable-doc \
|
|
--disable-avdevice \
|
|
--disable-avformat \
|
|
--disable-swresample \
|
|
--disable-swscale \
|
|
--disable-postproc \
|
|
--disable-avfilter \
|
|
--disable-alsa \
|
|
--disable-iconv \
|
|
--disable-libxcb_shape \
|
|
--disable-libxcb_shm \
|
|
--disable-libxcb_xfixes \
|
|
--disable-sdl2 \
|
|
--disable-xlib \
|
|
--disable-zlib \
|
|
--disable-bzlib \
|
|
--disable-libxcb \
|
|
--disable-vaapi \
|
|
--disable-vdpau \
|
|
--disable-everything \
|
|
--enable-decoder=wmav2 \
|
|
--enable-decoder=adpcm_ms && \
|
|
[ ! -f ./Makefile ] || touch ./Makefile
|
|
# ^ ffmpeg's configure script doesn't update the timestamp on this guy in the case of a no-op
|
|
|
|
# 32-bit configure
|
|
$(FFMPEG_CONFIGURE_FILES32): SHELL = $(CONTAINER_SHELL32)
|
|
$(FFMPEG_CONFIGURE_FILES32): $(FFMPEG)/configure $(MAKEFILE_DEP) | $(FFMPEG_OBJ32)
|
|
cd $(dir $@) && \
|
|
$(abspath $(FFMPEG))/configure \
|
|
--cc=$(CC_QUOTED) --cxx=$(CXX_QUOTED) \
|
|
--prefix=$(abspath $(TOOLS_DIR32)) \
|
|
--extra-cflags=$(FFMPEG_CROSS_CFLAGS) --extra-ldflags=$(FFMPEG_CROSS_LDFLAGS) \
|
|
--disable-static \
|
|
--enable-shared \
|
|
--disable-programs \
|
|
--disable-doc \
|
|
--disable-avdevice \
|
|
--disable-avformat \
|
|
--disable-swresample \
|
|
--disable-swscale \
|
|
--disable-postproc \
|
|
--disable-avfilter \
|
|
--disable-alsa \
|
|
--disable-iconv \
|
|
--disable-libxcb_shape \
|
|
--disable-libxcb_shm \
|
|
--disable-libxcb_xfixes \
|
|
--disable-sdl2 \
|
|
--disable-xlib \
|
|
--disable-zlib \
|
|
--disable-bzlib \
|
|
--disable-libxcb \
|
|
--disable-vaapi \
|
|
--disable-vdpau \
|
|
--disable-everything \
|
|
--enable-decoder=wmav2 \
|
|
--enable-decoder=adpcm_ms && \
|
|
[ ! -f ./Makefile ] || touch ./Makefile
|
|
# ^ ffmpeg's configure script doesn't update the timestamp on this guy in the case of a no-op
|
|
|
|
## ffmpeg goals
|
|
FFMPEG_TARGETS = ffmpeg ffmpeg_configure ffmpeg32 ffmpeg64 ffmpeg_configure32 ffmpeg_configure64
|
|
|
|
ALL_TARGETS += $(FFMPEG_TARGETS)
|
|
GOAL_TARGETS_LIBS += ffmpeg
|
|
|
|
.PHONY: $(FFMPEG_TARGETS)
|
|
|
|
ffmpeg_configure: $(FFMPEG_CONFIGURE_FILES32) $(FFMPEG_CONFIGURE_FILES64)
|
|
|
|
ffmpeg_configure64: $(FFMPEG_CONFIGURE_FILES64)
|
|
|
|
ffmpeg_configure32: $(FFMPEG_CONFIGURE_FILES32)
|
|
|
|
ffmpeg: ffmpeg32 ffmpeg64
|
|
|
|
ffmpeg64: SHELL = $(CONTAINER_SHELL64)
|
|
ffmpeg64: $(FFMPEG_CONFIGURE_FILES64)
|
|
cd $(FFMPEG_OBJ64) && \
|
|
$(MAKE) && \
|
|
$(MAKE) install && \
|
|
cp -L ../$(TOOLS_DIR64)/lib/{libavcodec,libavutil}* ../$(DST_DIR)/lib64
|
|
|
|
ffmpeg32: SHELL = $(CONTAINER_SHELL32)
|
|
ffmpeg32: $(FFMPEG_CONFIGURE_FILES32)
|
|
cd $(FFMPEG_OBJ32) && \
|
|
$(MAKE) && \
|
|
$(MAKE) install && \
|
|
cp -L ../$(TOOLS_DIR32)/lib/{libavcodec,libavutil}* ../$(DST_DIR)/lib
|
|
|
|
endif # ifeq ($(WITH_FFMPEG),1)
|
|
|
|
##
|
|
## lsteamclient
|
|
##
|
|
|
|
## Create & configure object directory for lsteamclient
|
|
|
|
LSTEAMCLIENT_CONFIGURE_FILES32 := $(LSTEAMCLIENT_OBJ32)/Makefile
|
|
LSTEAMCLIENT_CONFIGURE_FILES64 := $(LSTEAMCLIENT_OBJ64)/Makefile
|
|
|
|
# 64bit-configure
|
|
$(LSTEAMCLIENT_CONFIGURE_FILES64): SHELL = $(CONTAINER_SHELL64)
|
|
$(LSTEAMCLIENT_CONFIGURE_FILES64): $(LSTEAMCLIENT) $(MAKEFILE_DEP) | $(LSTEAMCLIENT_OBJ64) $(WINEMAKER)
|
|
cd $(dir $@) && \
|
|
$(WINEMAKER) --nosource-fix --nolower-include --nodlls --nomsvcrt \
|
|
-DSTEAM_API_EXPORTS \
|
|
-I"../$(TOOLS_DIR64)"/include/ \
|
|
-I"../$(TOOLS_DIR64)"/include/wine/ \
|
|
-I"../$(TOOLS_DIR64)"/include/wine/windows/ \
|
|
-L"../$(TOOLS_DIR64)"/lib64/ \
|
|
-L"../$(TOOLS_DIR64)"/lib64/wine/ \
|
|
--dll ../$(LSTEAMCLIENT) && \
|
|
cp ../$(LSTEAMCLIENT)/Makefile . && \
|
|
echo >> ./Makefile 'SRCDIR := ../$(LSTEAMCLIENT)' && \
|
|
echo >> ./Makefile 'vpath % $$(SRCDIR)' && \
|
|
echo >> ./Makefile 'lsteamclient_dll_LDFLAGS := $$(patsubst %.spec,$$(SRCDIR)/%.spec,$$(lsteamclient_dll_LDFLAGS))'
|
|
|
|
# 32-bit configure
|
|
$(LSTEAMCLIENT_CONFIGURE_FILES32): SHELL = $(CONTAINER_SHELL32)
|
|
$(LSTEAMCLIENT_CONFIGURE_FILES32): $(LSTEAMCLIENT) $(MAKEFILE_DEP) | $(LSTEAMCLIENT_OBJ32) $(WINEMAKER)
|
|
cd $(dir $@) && \
|
|
$(WINEMAKER) --nosource-fix --nolower-include --nodlls --nomsvcrt --wine32 \
|
|
-DSTEAM_API_EXPORTS \
|
|
-I"../$(TOOLS_DIR32)"/include/ \
|
|
-I"../$(TOOLS_DIR32)"/include/wine/ \
|
|
-I"../$(TOOLS_DIR32)"/include/wine/windows/ \
|
|
-L"../$(TOOLS_DIR32)"/lib/ \
|
|
-L"../$(TOOLS_DIR32)"/lib/wine/ \
|
|
--dll ../$(LSTEAMCLIENT) && \
|
|
cp ../$(LSTEAMCLIENT)/Makefile . && \
|
|
echo >> ./Makefile 'SRCDIR := ../$(LSTEAMCLIENT)' && \
|
|
echo >> ./Makefile 'vpath % $$(SRCDIR)' && \
|
|
echo >> ./Makefile 'lsteamclient_dll_LDFLAGS := -m32 $$(patsubst %.spec,$$(SRCDIR)/%.spec,$$(lsteamclient_dll_LDFLAGS))'
|
|
|
|
## lsteamclient goals
|
|
LSTEAMCLIENT_TARGETS = lsteamclient lsteamclient_configure lsteamclient32 lsteamclient64 lsteamclient_configure32 lsteamclient_configure64
|
|
|
|
ALL_TARGETS += $(LSTEAMCLIENT_TARGETS)
|
|
GOAL_TARGETS_LIBS += lsteamclient
|
|
|
|
.PHONY: $(LSTEAMCLIENT_TARGETS)
|
|
|
|
lsteamclient_configure: $(LSTEAMCLIENT_CONFIGURE_FILES32) $(LSTEAMCLIENT_CONFIGURE_FILES64)
|
|
|
|
lsteamclient_configure64: $(LSTEAMCLIENT_CONFIGURE_FILES64)
|
|
|
|
lsteamclient_configure32: $(LSTEAMCLIENT_CONFIGURE_FILES32)
|
|
|
|
lsteamclient: lsteamclient32 lsteamclient64
|
|
|
|
lsteamclient64: SHELL = $(CONTAINER_SHELL64)
|
|
lsteamclient64: $(LSTEAMCLIENT_CONFIGURE_FILES64) | $(WINE_BUILDTOOLS64) $(filter $(MAKECMDGOALS),wine64 wine32 wine)
|
|
cd $(LSTEAMCLIENT_OBJ64) && \
|
|
PATH="$(abspath $(TOOLS_DIR64))/bin:$(PATH)" \
|
|
CXXFLAGS="-Wno-attributes -O2" CFLAGS="-O2 -g" $(MAKE) && \
|
|
[ x"$(STRIP)" = x ] || $(STRIP) ../$(LSTEAMCLIENT_OBJ64)/lsteamclient.dll.so && \
|
|
cp -a ./lsteamclient.dll.so ../$(DST_DIR)/lib64/wine/
|
|
|
|
lsteamclient32: SHELL = $(CONTAINER_SHELL32)
|
|
lsteamclient32: $(LSTEAMCLIENT_CONFIGURE_FILES32) | $(WINE_BUILDTOOLS32) $(filter $(MAKECMDGOALS),wine64 wine32 wine)
|
|
cd $(LSTEAMCLIENT_OBJ32) && \
|
|
PATH="$(abspath $(TOOLS_DIR32))/bin:$(PATH)" \
|
|
LDFLAGS="-m32" CXXFLAGS="-m32 -Wno-attributes -O2" CFLAGS="-m32 -O2 -g" \
|
|
$(MAKE) && \
|
|
[ x"$(STRIP)" = x ] || $(STRIP) ../$(LSTEAMCLIENT_OBJ32)/lsteamclient.dll.so && \
|
|
cp -a ./lsteamclient.dll.so ../$(DST_DIR)/lib/wine/
|
|
|
|
##
|
|
## wine
|
|
##
|
|
|
|
## Create & configure object directory for wine
|
|
|
|
WINE_CONFIGURE_FILES32 := $(WINE_OBJ32)/Makefile
|
|
WINE_CONFIGURE_FILES64 := $(WINE_OBJ64)/Makefile
|
|
|
|
# On OS X we need ordering dependencies on these projects so configure can find them properly
|
|
WINE_ORDER_DEPS64 :=
|
|
WINE_ORDER_DEPS32 :=
|
|
ifeq ($(OSX),1)
|
|
WINE_ORDER_DEPS64 += $(FREETYPE_OUT64) $(LIBPNG_OUT64) $(LIBJPEG_OUT64) $(LIBSDL_OUT64) $(MOLTENVK_OUT)
|
|
WINE_ORDER_DEPS32 += $(FREETYPE_OUT32) $(LIBPNG_OUT32) $(LIBJPEG_OUT32) $(LIBSDL_OUT32) $(MOLTENVK_OUT)
|
|
endif
|
|
|
|
# 64bit-configure
|
|
$(WINE_CONFIGURE_FILES64): SHELL = $(CONTAINER_SHELL64)
|
|
$(WINE_CONFIGURE_FILES64): $(MAKEFILE_DEP) | $(WINE_OBJ64) $(WINE_ORDER_DEPS64)
|
|
cd $(dir $@) && \
|
|
STRIP=$(STRIP_QUOTED) \
|
|
CFLAGS=-I$(abspath $(TOOLS_DIR64))"/include -g -O2" \
|
|
LDFLAGS=-L$(abspath $(TOOLS_DIR64))/lib \
|
|
PKG_CONFIG_PATH=$(abspath $(TOOLS_DIR64))/lib/pkgconfig \
|
|
CC=$(CC_QUOTED) \
|
|
CXX=$(CXX_QUOTED) \
|
|
PNG_CFLAGS=$(PNG64_CFLAGS) \
|
|
PNG_LIBS=$(PNG64_LIBS) \
|
|
JPEG_CFLAGS=$(JPEG64_CFLAGS) \
|
|
JPEG_LIBS=$(JPEG64_LIBS) \
|
|
FREETYPE_CFLAGS=$(FREETYPE64_CFLAGS) \
|
|
FREETYPE_LIBS=$(FREETYPE64_LIBS) \
|
|
../$(WINE)/configure \
|
|
$(WINE64_AUTOCONF) \
|
|
--without-curses \
|
|
--enable-win64 --disable-tests --prefix=$(abspath $(DST_DIR))
|
|
|
|
# 32-bit configure
|
|
$(WINE_CONFIGURE_FILES32): SHELL = $(CONTAINER_SHELL32)
|
|
$(WINE_CONFIGURE_FILES32): $(MAKEFILE_DEP) | $(WINE_OBJ32) $(WINE_ORDER_DEPS32)
|
|
cd $(dir $@) && \
|
|
STRIP=$(STRIP_QUOTED) \
|
|
CFLAGS=-I$(abspath $(TOOLS_DIR32))"/include -g -O2" \
|
|
LDFLAGS=-L$(abspath $(TOOLS_DIR32))/lib \
|
|
PKG_CONFIG_PATH=$(abspath $(TOOLS_DIR32))/lib/pkgconfig \
|
|
CC=$(CC_QUOTED) \
|
|
CXX=$(CXX_QUOTED) \
|
|
PNG_CFLAGS=$(PNG32_CFLAGS) \
|
|
PNG_LIBS=$(PNG32_LIBS) \
|
|
JPEG_CFLAGS=$(JPEG32_CFLAGS) \
|
|
JPEG_LIBS=$(JPEG32_LIBS) \
|
|
FREETYPE_CFLAGS=$(FREETYPE32_CFLAGS) \
|
|
FREETYPE_LIBS=$(FREETYPE32_LIBS) \
|
|
../$(WINE)/configure \
|
|
$(WINE32_AUTOCONF) \
|
|
--without-curses \
|
|
--disable-tests --prefix=$(abspath $(WINE_DST32))
|
|
|
|
## wine goals
|
|
WINE_TARGETS = wine wine_configure wine32 wine64 wine_configure32 wine_configure64
|
|
|
|
ALL_TARGETS += $(WINE_TARGETS)
|
|
GOAL_TARGETS += wine
|
|
|
|
.PHONY: $(WINE_TARGETS)
|
|
|
|
wine_configure: $(WINE_CONFIGURE_FILES32) $(WINE_CONFIGURE_FILES64)
|
|
|
|
wine_configure64: $(WINE_CONFIGURE_FILES64)
|
|
|
|
wine_configure32: $(WINE_CONFIGURE_FILES32)
|
|
|
|
wine: wine32 wine64
|
|
|
|
# WINE_OUT and WINE_BUILDTOOLS are outputs needed by other rules, though we don't explicitly track all state here --
|
|
# make all or make wine are needed to ensure all deps are up to date, this just ensures 'make dist' or 'make vrclient'
|
|
# will drag in wine if you've never built wine.
|
|
.INTERMEDIATE: wine64-intermediate wine32-intermediate
|
|
|
|
$(WINE_BUILDTOOLS64) $(WINE_OUT) wine64: wine64-intermediate
|
|
|
|
wine64-intermediate: SHELL = $(CONTAINER_SHELL64)
|
|
wine64-intermediate: $(WINE_CONFIGURE_FILES64)
|
|
cd $(WINE_OBJ64) && \
|
|
STRIP=$(STRIP_QUOTED) \
|
|
$(MAKE) && \
|
|
INSTALL_PROGRAM_FLAGS=$(INSTALL_PROGRAM_FLAGS) STRIP=$(STRIP_QUOTED) \
|
|
$(MAKE) install-lib && \
|
|
INSTALL_PROGRAM_FLAGS=$(INSTALL_PROGRAM_FLAGS) STRIP=$(STRIP_QUOTED) \
|
|
$(MAKE) \
|
|
prefix=$(abspath $(TOOLS_DIR64)) libdir=$(abspath $(TOOLS_DIR64))/lib64 \
|
|
dlldir=$(abspath $(TOOLS_DIR64))/lib64/wine \
|
|
install-dev install-lib && \
|
|
rm -f ../$(DST_DIR)/bin/{msiexec,notepad,regedit,regsvr32,wineboot,winecfg,wineconsole,winedbg,winefile,winemine,winepath}
|
|
rm -rf ../$(DST_DIR)/share/man/
|
|
|
|
## This installs 32-bit stuff manually, see
|
|
## https://wiki.winehq.org/Packaging#WoW64_Workarounds
|
|
$(WINE_BUILDTOOLS32) wine32: wine32-intermediate
|
|
|
|
wine32-intermediate: SHELL = $(CONTAINER_SHELL32)
|
|
wine32-intermediate: $(WINE_CONFIGURE_FILES32)
|
|
cd $(WINE_OBJ32) && \
|
|
STRIP=$(STRIP_QUOTED) \
|
|
$(MAKE) && \
|
|
INSTALL_PROGRAM_FLAGS=$(INSTALL_PROGRAM_FLAGS) STRIP=$(STRIP_QUOTED) \
|
|
$(MAKE) install-lib && \
|
|
INSTALL_PROGRAM_FLAGS=$(INSTALL_PROGRAM_FLAGS) STRIP=$(STRIP_QUOTED) \
|
|
$(MAKE) \
|
|
prefix=$(abspath $(TOOLS_DIR32)) libdir=$(abspath $(TOOLS_DIR32))/lib \
|
|
dlldir=$(abspath $(TOOLS_DIR32))/lib/wine \
|
|
install-dev install-lib && \
|
|
mkdir -p ../$(DST_DIR)/{lib,bin} && \
|
|
cp -a ../$(WINE_DST32)/lib ../$(DST_DIR)/ && \
|
|
cp -a ../$(WINE_DST32)/bin/wine ../$(DST_DIR)/bin && \
|
|
[ "x"$(OSX) != "x1" ] || cp -a ../$(WINE_DST32)/bin/wine-preloader ../$(DST_DIR)/bin/
|
|
|
|
##
|
|
## vrclient
|
|
##
|
|
|
|
## Create & configure object directory for vrclient
|
|
|
|
VRCLIENT_CONFIGURE_FILES32 := $(VRCLIENT_OBJ32)/Makefile
|
|
VRCLIENT_CONFIGURE_FILES64 := $(VRCLIENT_OBJ64)/Makefile
|
|
|
|
# The source directory for vrclient32 is a synthetic symlink clone of the oddly named vrclient_x64 with the spec files
|
|
# renamed.
|
|
$(VRCLIENT32): $(VRCLIENT) $(MAKEFILE_DEP)
|
|
rm -rf ./$(VRCLIENT32)
|
|
mkdir -p $(VRCLIENT32)/vrclient
|
|
cd $(VRCLIENT32)/vrclient && \
|
|
ln -sfv ../../$(VRCLIENT)/vrclient_x64/*.{c,cpp,dat,h,spec} .
|
|
mv $(VRCLIENT32)/vrclient/vrclient_x64.spec $(VRCLIENT32)/vrclient/vrclient.spec
|
|
|
|
# 64bit-configure
|
|
$(VRCLIENT_CONFIGURE_FILES64): SHELL = $(CONTAINER_SHELL64)
|
|
$(VRCLIENT_CONFIGURE_FILES64): $(MAKEFILE_DEP) $(VRCLIENT) $(VRCLIENT)/vrclient_x64 | $(VRCLIENT_OBJ64) $(WINEMAKER)
|
|
cd $(VRCLIENT) && \
|
|
$(WINEMAKER) --nosource-fix --nolower-include --nodlls --nomsvcrt \
|
|
--nosource-fix --nolower-include --nodlls --nomsvcrt \
|
|
-I"$(abspath $(TOOLS_DIR64))"/include/ \
|
|
-I"$(abspath $(TOOLS_DIR64))"/include/wine/ \
|
|
-I"$(abspath $(TOOLS_DIR64))"/include/wine/windows/ \
|
|
-I"$(abspath $(VRCLIENT))" \
|
|
-L"$(abspath $(TOOLS_DIR64))"/lib64/ \
|
|
-L"$(abspath $(TOOLS_DIR64))"/lib64/wine/ \
|
|
--dll vrclient_x64 && \
|
|
cp ./vrclient_x64/Makefile $(abspath $(dir $@)) && \
|
|
echo >> $(abspath $(dir $@))/Makefile 'SRCDIR := ../$(VRCLIENT)/vrclient_x64' && \
|
|
echo >> $(abspath $(dir $@))/Makefile 'vpath % $$(SRCDIR)' && \
|
|
echo >> $(abspath $(dir $@))/Makefile 'vrclient_x64_dll_LDFLAGS := $$(patsubst %.spec,$$(SRCDIR)/%.spec,$$(vrclient_x64_dll_LDFLAGS))'
|
|
|
|
# 32-bit configure
|
|
$(VRCLIENT_CONFIGURE_FILES32): SHELL = $(CONTAINER_SHELL32)
|
|
$(VRCLIENT_CONFIGURE_FILES32): $(MAKEFILE_DEP) $(VRCLIENT32) | $(VRCLIENT_OBJ32) $(WINEMAKER)
|
|
$(WINEMAKER) --nosource-fix --nolower-include --nodlls --nomsvcrt \
|
|
--wine32 \
|
|
-I"$(abspath $(TOOLS_DIR32))"/include/ \
|
|
-I"$(abspath $(TOOLS_DIR32))"/include/wine/ \
|
|
-I"$(abspath $(TOOLS_DIR32))"/include/wine/windows/ \
|
|
-I"$(abspath $(VRCLIENT))" \
|
|
-L"$(abspath $(TOOLS_DIR32))"/lib/ \
|
|
-L"$(abspath $(TOOLS_DIR32))"/lib/wine/ \
|
|
--dll $(VRCLIENT32)/vrclient && \
|
|
cp $(VRCLIENT32)/vrclient/Makefile $(dir $@) && \
|
|
echo >> $(dir $@)/Makefile 'SRCDIR := ../$(VRCLIENT32)/vrclient' && \
|
|
echo >> $(dir $@)/Makefile 'vpath % $$(SRCDIR)' && \
|
|
echo >> $(dir $@)/Makefile 'vrclient_dll_LDFLAGS := -m32 $$(patsubst %.spec,$$(SRCDIR)/%.spec,$$(vrclient_dll_LDFLAGS))'
|
|
|
|
|
|
## vrclient goals
|
|
VRCLIENT_TARGETS = vrclient vrclient_configure vrclient32 vrclient64 vrclient_configure32 vrclient_configure64
|
|
|
|
ALL_TARGETS += $(VRCLIENT_TARGETS)
|
|
GOAL_TARGETS_LIBS += vrclient
|
|
|
|
.PHONY: $(VRCLIENT_TARGETS)
|
|
|
|
vrclient_configure: $(VRCLIENT_CONFIGURE_FILES32) $(VRCLIENT_CONFIGURE_FILES64)
|
|
|
|
vrclient_configure32: $(VRCLIENT_CONFIGURE_FILES32)
|
|
|
|
vrclient_configure64: $(VRCLIENT_CONFIGURE_FILES64)
|
|
|
|
vrclient: vrclient32 vrclient64
|
|
|
|
vrclient64: SHELL = $(CONTAINER_SHELL64)
|
|
vrclient64: $(VRCLIENT_CONFIGURE_FILES64) | $(WINE_BUILDTOOLS64) $(filter $(MAKECMDGOALS),wine64 wine32 wine)
|
|
cd $(VRCLIENT_OBJ64) && \
|
|
CXXFLAGS="-Wno-attributes -std=c++0x -O2 -g" CFLAGS="-O2 -g" PATH="$(abspath $(TOOLS_DIR64))/bin:$(PATH)" \
|
|
$(MAKE) && \
|
|
PATH=$(abspath $(TOOLS_DIR64))/bin:$(PATH) \
|
|
winebuild --dll --fake-module -E ../$(VRCLIENT)/vrclient_x64/vrclient_x64.spec -o vrclient_x64.dll.fake && \
|
|
[ x"$(STRIP)" = x ] || $(STRIP) ../$(VRCLIENT_OBJ64)/vrclient_x64.dll.so && \
|
|
cp -a ../$(VRCLIENT_OBJ64)/vrclient_x64.dll.so ../$(DST_DIR)/lib64/wine/ && \
|
|
cp -a ../$(VRCLIENT_OBJ64)/vrclient_x64.dll.fake ../$(DST_DIR)/lib64/wine/fakedlls/vrclient_x64.dll
|
|
|
|
vrclient32: SHELL = $(CONTAINER_SHELL32)
|
|
vrclient32: $(VRCLIENT_CONFIGURE_FILES32) | $(WINE_BUILDTOOLS32) $(filter $(MAKECMDGOALS),wine64 wine32 wine)
|
|
cd $(VRCLIENT_OBJ32) && \
|
|
LDFLAGS="-m32" CXXFLAGS="-m32 -Wno-attributes -std=c++0x -O2 -g" CFLAGS="-m32 -O2 -g" PATH="$(abspath $(TOOLS_DIR32))/bin:$(PATH)" \
|
|
$(MAKE) && \
|
|
PATH=$(abspath $(TOOLS_DIR32))/bin:$(PATH) \
|
|
winebuild --dll --fake-module -E ../$(VRCLIENT32)/vrclient/vrclient.spec -o vrclient.dll.fake && \
|
|
[ x"$(STRIP)" = x ] || $(STRIP) ../$(VRCLIENT_OBJ32)/vrclient.dll.so && \
|
|
cp -a ../$(VRCLIENT_OBJ32)/vrclient.dll.so ../$(DST_DIR)/lib/wine/ && \
|
|
cp -a ../$(VRCLIENT_OBJ32)/vrclient.dll.fake ../$(DST_DIR)/lib/wine/fakedlls/vrclient.dll
|
|
|
|
##
|
|
## cmake -- necessary for openal, not part of steam runtime
|
|
##
|
|
|
|
# TODO Don't bother with this in native mode
|
|
|
|
## Create & configure object directory for cmake
|
|
|
|
CMAKE_CONFIGURE_FILES32 := $(CMAKE_OBJ32)/Makefile
|
|
CMAKE_CONFIGURE_FILES64 := $(CMAKE_OBJ64)/Makefile
|
|
|
|
# 64-bit configure
|
|
$(CMAKE_CONFIGURE_FILES64): SHELL = $(CONTAINER_SHELL64)
|
|
$(CMAKE_CONFIGURE_FILES64): $(MAKEFILE_DEP) | $(CMAKE_OBJ64)
|
|
cd "$(CMAKE_OBJ64)" && \
|
|
../$(CMAKE)/configure --parallel=$(SUBMAKE_JOBS) --prefix=$(abspath $(CMAKE_OBJ64))/built
|
|
|
|
# 32-bit configure
|
|
$(CMAKE_CONFIGURE_FILES32): SHELL = $(CONTAINER_SHELL32)
|
|
$(CMAKE_CONFIGURE_FILES32): $(MAKEFILE_DEP) | $(CMAKE_OBJ32)
|
|
cd "$(CMAKE_OBJ32)" && \
|
|
../$(CMAKE)/configure --parallel=$(SUBMAKE_JOBS) --prefix=$(abspath $(CMAKE_OBJ32))/built
|
|
|
|
|
|
## cmake goals
|
|
CMAKE_TARGETS = cmake cmake_configure cmake32 cmake64 cmake_configure32 cmake_configure64
|
|
|
|
ALL_TARGETS += $(CMAKE_TARGETS)
|
|
|
|
.PHONY: $(CMAKE_TARGETS)
|
|
|
|
cmake_configure: $(CMAKE_CONFIGURE_FILES32) $(CMAKE_CONFIGURE_FILES64)
|
|
|
|
cmake_configure32: $(CMAKE_CONFIGURE_FILES32)
|
|
|
|
cmake_configure64: $(CMAKE_CONFIGURE_FILES64)
|
|
|
|
cmake: cmake32 cmake64
|
|
|
|
# These have multiple targets that come from one invocation. The way to do that is to have both targets on a single
|
|
# intermediate.
|
|
.INTERMEDIATE: cmake64-intermediate cmake32-intermediate
|
|
|
|
$(CMAKE_BIN64) cmake64: cmake64-intermediate
|
|
|
|
cmake64-intermediate: SHELL = $(CONTAINER_SHELL64)
|
|
cmake64-intermediate: $(CMAKE_CONFIGURE_FILES64) $(filter $(MAKECMDGOALS),cmake64)
|
|
cd $(CMAKE_OBJ64) && \
|
|
$(MAKE) && $(MAKE) install && \
|
|
touch ../$(CMAKE_BIN64)
|
|
|
|
$(CMAKE_BIN32) cmake32: cmake32-intermediate
|
|
|
|
cmake32-intermediate: SHELL = $(CONTAINER_SHELL32)
|
|
cmake32-intermediate: $(CMAKE_CONFIGURE_FILES32) $(filter $(MAKECMDGOALS),cmake32)
|
|
cd $(CMAKE_OBJ32) && \
|
|
$(MAKE) && $(MAKE) install && \
|
|
touch ../$(CMAKE_BIN32)
|
|
|
|
##
|
|
## dxvk
|
|
##
|
|
|
|
# TODO Builds outside container, could simplify a lot if it did not.
|
|
|
|
## Create & configure object directory for dxvk
|
|
|
|
ifneq ($(NO_DXVK),1) # May be disabled by configure
|
|
|
|
DXVK_CONFIGURE_FILES32 := $(DXVK_OBJ32)/build.ninja
|
|
DXVK_CONFIGURE_FILES64 := $(DXVK_OBJ64)/build.ninja
|
|
|
|
# 64bit-configure
|
|
$(DXVK_CONFIGURE_FILES64): $(MAKEFILE_DEP) | $(DXVK_OBJ64)
|
|
cd "$(DXVK)" && \
|
|
PATH="$(abspath $(SRCDIR))/glslang/bin/:$(PATH)" \
|
|
meson --prefix="$(abspath $(DXVK_OBJ64))" --cross-file build-win64.txt "$(abspath $(DXVK_OBJ64))"
|
|
|
|
cd "$(DXVK_OBJ64)" && \
|
|
PATH="$(abspath $(SRCDIR))/glslang/bin/:$(PATH)" meson configure -Dbuildtype=release
|
|
|
|
# 32-bit configure
|
|
$(DXVK_CONFIGURE_FILES32): $(MAKEFILE_DEP) | $(DXVK_OBJ32)
|
|
cd "$(DXVK)" && \
|
|
PATH="$(abspath $(SRCDIR))/glslang/bin/:$(PATH)" \
|
|
meson --prefix="$(abspath $(DXVK_OBJ32))" --cross-file build-win32.txt "$(abspath $(DXVK_OBJ32))"
|
|
|
|
cd "$(DXVK_OBJ32)" && \
|
|
PATH="$(abspath $(SRCDIR))/glslang/bin/:$(PATH)" meson configure -Dbuildtype=release
|
|
|
|
## dxvk goals
|
|
DXVK_TARGETS = dxvk dxvk_configure dxvk32 dxvk64 dxvk_configure32 dxvk_configure64
|
|
|
|
ALL_TARGETS += $(DXVK_TARGETS)
|
|
GOAL_TARGETS_LIBS += dxvk
|
|
|
|
.PHONY: $(DXVK_TARGETS)
|
|
|
|
dxvk_configure: $(DXVK_CONFIGURE_FILES32) $(DXVK_CONFIGURE_FILES64)
|
|
|
|
dxvk_configure64: $(DXVK_CONFIGURE_FILES64)
|
|
|
|
dxvk_configure32: $(DXVK_CONFIGURE_FILES32)
|
|
|
|
dxvk: dxvk32 dxvk64
|
|
|
|
dxvk64: $(DXVK_CONFIGURE_FILES64)
|
|
cd "$(DXVK_OBJ64)" && \
|
|
PATH="$(abspath $(SRCDIR))/glslang/bin/:$(PATH)" ninja && \
|
|
PATH="$(abspath $(SRCDIR))/glslang/bin/:$(PATH)" ninja install
|
|
|
|
mkdir -p "$(DST_DIR)/lib64/wine/dxvk"
|
|
cp "$(DXVK_OBJ64)"/bin/dxgi.dll "$(DST_DIR)"/lib64/wine/dxvk
|
|
cp "$(DXVK_OBJ64)"/bin/d3d11.dll "$(DST_DIR)"/lib64/wine/dxvk
|
|
( cd $(SRCDIR) && git submodule status -- dxvk ) > "$(DST_DIR)"/lib64/wine/dxvk/version
|
|
|
|
|
|
dxvk32: $(DXVK_CONFIGURE_FILES32)
|
|
cd "$(DXVK_OBJ32)" && \
|
|
PATH="$(abspath $(SRCDIR))/glslang/bin/:$(PATH)" ninja && \
|
|
PATH="$(abspath $(SRCDIR))/glslang/bin/:$(PATH)" ninja install
|
|
|
|
mkdir -p "$(DST_DIR)"/lib/wine/dxvk
|
|
cp "$(DXVK_OBJ32)"/bin/dxgi.dll "$(DST_DIR)"/lib/wine/dxvk/
|
|
cp "$(DXVK_OBJ32)"/bin/d3d11.dll "$(DST_DIR)"/lib/wine/dxvk/
|
|
( cd $(SRCDIR) && git submodule status -- dxvk ) > "$(DST_DIR)"/lib/wine/dxvk/version
|
|
|
|
endif # NO_DXVK
|
|
|
|
# TODO Tests
|
|
# build_vrclient64_tests
|
|
# build_vrclient32_tests
|
|
|
|
|
|
##
|
|
## Targets
|
|
##
|
|
|
|
.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 # End of NESTED_MAKE from beginning
|