diff --git a/build/makefile_base.mak b/build/makefile_base.mak index e7db6d5b..313257ef 100644 --- a/build/makefile_base.mak +++ b/build/makefile_base.mak @@ -210,9 +210,12 @@ default: all dist # TODO ffmpeg is optional, disabled -GOAL_TARGETS_LIBS := openal lsteamclient vrclient dxvk dist -GOAL_TARGETS := wine $(GOAL_TARGETS_LIBS) +# 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 = +# All target all: $(GOAL_TARGETS) @echo ":: make $@ succeeded" @@ -224,7 +227,6 @@ all64: $(addsuffix 64,$(GOAL_TARGETS)) # 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" @@ -292,6 +294,8 @@ $(DIST_COMPAT_MANIFEST): $(COMPAT_MANIFEST_TEMPLATE) $(MAKEFILE_DEP) | $(DST_DIR .PHONY: 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) @@ -384,6 +388,7 @@ $(OPENAL_CONFIGURE_FILES32): $(OPENAL)/CMakeLists.txt $(MAKEFILE_DEP) $(CMAKE_BI ## OpenAL goals .PHONY: openal openal_configure openal32 openal64 openal_configure32 openal_configure64 +GOAL_TARGETS_LIBS += openal openal_configure: $(OPENAL_CONFIGURE_FILES32) $(OPENAL_CONFIGURE_FILES64) @@ -566,6 +571,8 @@ $(LSTEAMCLIENT_CONFIGURE_FILES32): $(LSTEAMCLIENT) $(WINEMAKER) $(MAKEFILE_DEP) .PHONY: lsteamclient lsteamclient_configure lsteamclient32 lsteamclient64 lsteamclient_configure32 lsteamclient_configure64 +GOAL_TARGETS_LIBS += lsteamclient + lsteamclient_configure: $(LSTEAMCLIENT_CONFIGURE_FILES32) $(LSTEAMCLIENT_CONFIGURE_FILES64) lsteamclient_configure64: $(LSTEAMCLIENT_CONFIGURE_FILES64) @@ -650,6 +657,8 @@ $(WINE_CONFIGURE_FILES32): $(MAKEFILE_DEP) | $(WINE_OBJ32) .PHONY: wine wine_configure wine32 wine64 wine_configure32 wine_configure64 +GOAL_TARGETS += wine + wine_configure: $(WINE_CONFIGURE_FILES32) $(WINE_CONFIGURE_FILES64) wine_configure64: $(WINE_CONFIGURE_FILES64) @@ -758,6 +767,8 @@ $(VRCLIENT_CONFIGURE_FILES32): $(MAKEFILE_DEP) $(VRCLIENT32) | $(VRCLIENT_OBJ32) .PHONY: vrclient vrclient_configure vrclient32 vrclient64 vrclient_configure32 vrclient_configure64 +GOAL_TARGETS_LIBS += vrclient + vrclient_configure: $(VRCLIENT_CONFIGURE_FILES32) $(VRCLIENT_CONFIGURE_FILES64) vrclient_configure32: $(VRCLIENT_CONFIGURE_FILES32) @@ -852,6 +863,8 @@ cmake32-intermediate: $(CMAKE_CONFIGURE_FILES32) $(filter $(MAKECMDGOALS),cmake3 ## 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 @@ -877,6 +890,8 @@ $(DXVK_CONFIGURE_FILES32): $(MAKEFILE_DEP) | $(DXVK_OBJ32) .PHONY: dxvk dxvk_configure dxvk32 dxvk64 dxvk_configure32 dxvk_configure64 +GOAL_TARGETS_LIBS += dxvk + dxvk_configure: $(DXVK_CONFIGURE_FILES32) $(DXVK_CONFIGURE_FILES64) dxvk_configure64: $(DXVK_CONFIGURE_FILES64) @@ -906,6 +921,8 @@ dxvk32: $(DXVK_CONFIGURE_FILES32) 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 OS X # build_libpng # build_libjpeg diff --git a/configure.sh b/configure.sh index 8256c6d4..9014d5e1 100755 --- a/configure.sh +++ b/configure.sh @@ -27,6 +27,10 @@ die() { err "$@"; exit 1; } finish() { stat "$@"; exit 0; } cmd() { showcmd "$@"; "$@"; } +# Environment +OSX="" +[[ $(uname || true) != Darwin ]] || OSX=1 + # # Configure # @@ -76,13 +80,23 @@ function configure() { # Don't die after this point or we'll have rather unhelpfully deleted the Makefile [[ ! -e "$MAKEFILE" ]] || rm "$MAKEFILE" + # Config echo >> "$MAKEFILE" "# Generated by: $THIS_COMMAND" echo >> "$MAKEFILE" "" - echo >> "$MAKEFILE" "SRCDIR := $(escape_for_make "$srcdir")" + echo >> "$MAKEFILE" "SRCDIR := $(escape_for_make "$srcdir")" + + # DXVK? + if [[ -n $OSX && ! -n $arg_force_dxvk ]]; then + echo >> "$MAKEFILE" "NO_DXVK := 1" + fi + + # SteamRT echo >> "$MAKEFILE" "STEAMRT64_MODE := $(escape_for_make "$steamrt64_type")" echo >> "$MAKEFILE" "STEAMRT64_IMAGE := $(escape_for_make "$steamrt64_name")" echo >> "$MAKEFILE" "STEAMRT32_MODE := $(escape_for_make "$steamrt32_type")" echo >> "$MAKEFILE" "STEAMRT32_IMAGE := $(escape_for_make "$steamrt32_name")" + + # Include base echo >> "$MAKEFILE" "" echo >> "$MAKEFILE" "include \$(SRCDIR)/build/makefile_base.mak" @@ -97,6 +111,7 @@ function configure() { arg_steamrt32="" arg_steamrt64="" arg_no_steamrt="" +arg_force_dxvk="" invalid_args="" function parse_args() { local arg; @@ -127,7 +142,9 @@ function parse_args() { fi # The args - if [[ $arg = --steam-runtime32 ]]; then + if [[ $arg = --osx-force-dxvk ]]; then + arg_force_dxvk=1 + elif [[ $arg = --steam-runtime32 ]]; then val_used=1 arg_steamrt32="$val" elif [[ $arg = --steam-runtime64 ]]; then @@ -173,6 +190,10 @@ usage() { "$1" " Generate a Makefile for building Proton. May be run from another directory to create" "$1" " out-of-tree build directories (e.g. mkdir mybuild && cd mybuild && ../configure.sh)" "$1" "" + "$1" " Options" + "$1" " --osx-force-dxvk Attempt to build DXVK on OS X - not currently functioning," + "$1" " development use" + "$1" "" "$1" " Steam Runtime" "$1" " Proton builds that are to be installed & run under the steam client must be built with" "$1" " the Steam Runtime SDK to ensure compatibility. See BUILDING.md for more information." @@ -193,6 +214,7 @@ usage() { [[ $# -gt 0 ]] || usage info parse_args "$@" || usage err +# Sanity check arguments if [[ -n $arg_no_steamrt && (-n $arg_steamrt32 || -n $arg_steamrt64) ]]; then die "Cannot specify a Steam Runtime SDK as well as --no-steam-runtime" elif [[ -z $arg_no_steamrt && ( -z $arg_steamrt32 || -z $arg_steamrt64 ) ]]; then