mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-26 23:10:38 +00:00
(Libretro) Huge MSVC Build Overhaul
This commit is contained in:
parent
2e492bf333
commit
2af55d37ad
@ -311,28 +311,28 @@ else ifeq ($(platform), emscripten)
|
|||||||
-Drglgen_resolve_symbols=mupen_rglgen_resolve_symbols
|
-Drglgen_resolve_symbols=mupen_rglgen_resolve_symbols
|
||||||
PLATFORM_EXT = unix
|
PLATFORM_EXT = unix
|
||||||
|
|
||||||
# Windows MSVC 2017 all architectures
|
# Windows MSVC all architectures
|
||||||
else ifneq (,$(findstring windows_msvc2017,$(platform)))
|
else ifneq (,$(findstring windows_msvc,$(platform)))
|
||||||
|
|
||||||
PlatformSuffix = $(subst windows_msvc2017_,,$(platform))
|
PlatformSuffix = $(subst windows_msvc_,,$(platform))
|
||||||
ifneq (,$(findstring desktop,$(PlatformSuffix)))
|
ifneq (,$(findstring desktop,$(PlatformSuffix)))
|
||||||
WinPartition = desktop
|
WinPartition = desktop
|
||||||
MSVC2017CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_UNICODE -DUNICODE -DWINVER=0x0600 -D_WIN32_WINNT=0x0600
|
MSVCCompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_UNICODE -DUNICODE -DWINVER=0x0600 -D_WIN32_WINNT=0x0600
|
||||||
LDFLAGS += -MANIFEST -NXCOMPAT -DYNAMICBASE -DEBUG -OPT:REF -INCREMENTAL:NO -SUBSYSTEM:WINDOWS -MANIFESTUAC:"level='asInvoker' uiAccess='false'" -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1
|
LDFLAGS += -MANIFEST -NXCOMPAT -DYNAMICBASE -DEBUG -OPT:REF -INCREMENTAL:NO -SUBSYSTEM:WINDOWS -MANIFESTUAC:"level='asInvoker' uiAccess='false'" -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1
|
||||||
LIBS += kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
|
LIBS += kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
|
||||||
else ifneq (,$(findstring uwp,$(PlatformSuffix)))
|
else ifneq (,$(findstring uwp,$(PlatformSuffix)))
|
||||||
WinPartition = uwp
|
WinPartition = uwp
|
||||||
MSVC2017CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_APP -DWINDLL -D_UNICODE -DUNICODE -DWRL_NO_DEFAULT_LIB
|
MSVCCompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_APP -DWINDLL -D_UNICODE -DUNICODE -DWRL_NO_DEFAULT_LIB
|
||||||
LDFLAGS += -APPCONTAINER -NXCOMPAT -DYNAMICBASE -MANIFEST:NO -OPT:REF -SUBSYSTEM:CONSOLE -MANIFESTUAC:NO -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1 -DEBUG:FULL -WINMD:NO
|
LDFLAGS += -APPCONTAINER -NXCOMPAT -DYNAMICBASE -MANIFEST:NO -OPT:REF -SUBSYSTEM:CONSOLE -MANIFESTUAC:NO -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1 -DEBUG:FULL -WINMD:NO
|
||||||
LIBS += WindowsApp.lib
|
LIBS += WindowsApp.lib
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(DEBUG), 1)
|
ifeq ($(DEBUG), 1)
|
||||||
MSVC2017CompileFlags += -DEBUG
|
MSVCCompileFlags += -DEBUG
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS += $(MSVC2017CompileFlags) -nologo
|
CFLAGS += $(MSVCCompileFlags) -nologo
|
||||||
CXXFLAGS += $(MSVC2017CompileFlags) -nologo -EHsc -DARMIPS_USE_STD_FILESYSTEM
|
CXXFLAGS += $(MSVCCompileFlags) -nologo -EHsc -DARMIPS_USE_STD_FILESYSTEM
|
||||||
|
|
||||||
TargetArchMoniker = $(subst $(WinPartition)_,,$(PlatformSuffix))
|
TargetArchMoniker = $(subst $(WinPartition)_,,$(PlatformSuffix))
|
||||||
|
|
||||||
@ -349,10 +349,9 @@ else ifneq (,$(findstring windows_msvc2017,$(platform)))
|
|||||||
reg_query = $(call filter_out2,$(subst $2,,$(shell reg query "$2" -v "$1" 2>/dev/null)))
|
reg_query = $(call filter_out2,$(subst $2,,$(shell reg query "$2" -v "$1" 2>/dev/null)))
|
||||||
fix_path = $(subst $(SPACE),\ ,$(subst \,/,$1))
|
fix_path = $(subst $(SPACE),\ ,$(subst \,/,$1))
|
||||||
|
|
||||||
b1 := (
|
VSCommand := bash VSWhere.sh -latest -property installationPath
|
||||||
b2 := )
|
VSInstallPathw := $(shell cmd /c "$(VSCommand)")
|
||||||
ProgramFiles86w := $(ProgramFiles$(b1)x86$(b2))
|
VSInstallPath := $(shell cygpath "$(VSInstallPathw)")
|
||||||
ProgramFiles86 := $(shell cygpath "$(ProgramFiles86w)")
|
|
||||||
|
|
||||||
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0)
|
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0)
|
||||||
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0)
|
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0)
|
||||||
@ -363,133 +362,7 @@ else ifneq (,$(findstring windows_msvc2017,$(platform)))
|
|||||||
WindowsSDKVersion ?= $(firstword $(foreach folder,$(subst $(subst \,/,$(WindowsSdkDir)Include/),,$(wildcard $(call fix_path,$(WindowsSdkDir)Include\*))),$(if $(wildcard $(call fix_path,$(WindowsSdkDir)Include/$(folder)/um/Windows.h)),$(folder),)))$(BACKSLASH)
|
WindowsSDKVersion ?= $(firstword $(foreach folder,$(subst $(subst \,/,$(WindowsSdkDir)Include/),,$(wildcard $(call fix_path,$(WindowsSdkDir)Include\*))),$(if $(wildcard $(call fix_path,$(WindowsSdkDir)Include/$(folder)/um/Windows.h)),$(folder),)))$(BACKSLASH)
|
||||||
WindowsSDKVersion := $(WindowsSDKVersion)
|
WindowsSDKVersion := $(WindowsSDKVersion)
|
||||||
|
|
||||||
VsInstallBuildTools = $(ProgramFiles86)/Microsoft Visual Studio/2017/BuildTools
|
VsInstallRoot := $(VSInstallPath)
|
||||||
VsInstallEnterprise = $(ProgramFiles86)/Microsoft Visual Studio/2017/Enterprise
|
|
||||||
VsInstallProfessional = $(ProgramFiles86)/Microsoft Visual Studio/2017/Professional
|
|
||||||
VsInstallCommunity = $(ProgramFiles86)/Microsoft Visual Studio/2017/Community
|
|
||||||
|
|
||||||
VsInstallRoot ?= $(shell if [ -d "$(VsInstallBuildTools)" ]; then echo "$(VsInstallBuildTools)"; fi)
|
|
||||||
ifeq ($(VsInstallRoot), )
|
|
||||||
VsInstallRoot = $(shell if [ -d "$(VsInstallEnterprise)" ]; then echo "$(VsInstallEnterprise)"; fi)
|
|
||||||
endif
|
|
||||||
ifeq ($(VsInstallRoot), )
|
|
||||||
VsInstallRoot = $(shell if [ -d "$(VsInstallProfessional)" ]; then echo "$(VsInstallProfessional)"; fi)
|
|
||||||
endif
|
|
||||||
ifeq ($(VsInstallRoot), )
|
|
||||||
VsInstallRoot = $(shell if [ -d "$(VsInstallCommunity)" ]; then echo "$(VsInstallCommunity)"; fi)
|
|
||||||
endif
|
|
||||||
VsInstallRoot := $(VsInstallRoot)
|
|
||||||
|
|
||||||
VcCompilerToolsVer := $(shell cat "$(VsInstallRoot)/VC/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt" | grep -o '[0-9\.]*')
|
|
||||||
VcCompilerToolsDir := $(VsInstallRoot)/VC/Tools/MSVC/$(VcCompilerToolsVer)
|
|
||||||
VcCompilerLibDir := $(VcCompilerToolsDir)/lib/$(TargetArchMoniker)
|
|
||||||
|
|
||||||
WindowsSDKSharedIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\shared")
|
|
||||||
WindowsSDKUCRTIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\ucrt")
|
|
||||||
WindowsSDKUMIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\um")
|
|
||||||
WindowsSDKUCRTLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib\$(WindowsSDKVersion)\ucrt\$(TargetArchMoniker)")
|
|
||||||
WindowsSDKUMLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib\$(WindowsSDKVersion)\um\$(TargetArchMoniker)")
|
|
||||||
|
|
||||||
LIB := $(shell IFS=$$'\n'; cygpath -w "$(VcCompilerLibDir)")
|
|
||||||
INCLUDE := $(shell IFS=$$'\n'; cygpath -w "$(VcCompilerToolsDir)/include")
|
|
||||||
|
|
||||||
# For some reason the HostX86 compiler doesn't like compiling for x64
|
|
||||||
# ("no such file" opening a shared library), and vice-versa.
|
|
||||||
# Work around it for now by using the strictly x86 compiler for x86, and x64 for x64.
|
|
||||||
# NOTE: What about ARM?
|
|
||||||
ifneq (,$(findstring x64,$(TargetArchMoniker)))
|
|
||||||
override TARGET_ARCH = x86_64
|
|
||||||
VCCompilerToolsBinDir := $(VcCompilerToolsDir)/bin/HostX64/$(TargetArchMoniker)
|
|
||||||
LIB := $(LIB);$(CORE_DIR)/dx9sdk/Lib/x64
|
|
||||||
else
|
|
||||||
override TARGET_ARCH = x86
|
|
||||||
VCCompilerToolsBinDir := $(VcCompilerToolsDir)/bin/HostX86/$(TargetArchMoniker)
|
|
||||||
LIB := $(LIB);$(CORE_DIR)/dx9sdk/Lib/x86
|
|
||||||
endif
|
|
||||||
|
|
||||||
PATH := $(shell IFS=$$'\n'; cygpath "$(VCCompilerToolsBinDir)"):$(PATH)
|
|
||||||
PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VsInstallRoot)/Common7/IDE")
|
|
||||||
|
|
||||||
export INCLUDE := $(INCLUDE);$(WindowsSDKSharedIncludeDir);$(WindowsSDKUCRTIncludeDir);$(WindowsSDKUMIncludeDir)
|
|
||||||
export LIB := $(LIB);$(WindowsSDKUCRTLibDir);$(WindowsSDKUMLibDir);$(FFMPEGDIR)/Windows/$(TARGET_ARCH)/lib
|
|
||||||
TARGET := $(TARGET_NAME)_libretro.dll
|
|
||||||
PSS_STYLE :=2
|
|
||||||
LDFLAGS += -DLL
|
|
||||||
PLATFORM_EXT = win32
|
|
||||||
FFMPEGINCFLAGS += -I$(FFMPEGDIR)/Windows/$(TARGET_ARCH)/include
|
|
||||||
FFMPEGLIBDIR := $(FFMPEGDIR)/Windows/$(TARGET_ARCH)/lib
|
|
||||||
FFMPEGLDFLAGS += -LIBPATH:$(FFMPEGLIBDIR)
|
|
||||||
GL_LIB := opengl32.lib
|
|
||||||
LDFLAGS += ws2_32.lib user32.lib shell32.lib avcodec.lib avutil.lib swresample.lib swscale.lib avformat.lib advapi32.lib winmm.lib gdi32.lib d3d9.lib d3dx9.lib Iphlpapi.lib
|
|
||||||
|
|
||||||
# Windows MSVC 2019 all architectures
|
|
||||||
else ifneq (,$(findstring windows_msvc2019,$(platform)))
|
|
||||||
|
|
||||||
PlatformSuffix = $(subst windows_msvc2019_,,$(platform))
|
|
||||||
ifneq (,$(findstring desktop,$(PlatformSuffix)))
|
|
||||||
WinPartition = desktop
|
|
||||||
MSVC2019CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_UNICODE -DUNICODE -DWINVER=0x0600 -D_WIN32_WINNT=0x0600
|
|
||||||
LDFLAGS += -MANIFEST -NXCOMPAT -DYNAMICBASE -DEBUG -OPT:REF -INCREMENTAL:NO -SUBSYSTEM:WINDOWS -MANIFESTUAC:"level='asInvoker' uiAccess='false'" -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1
|
|
||||||
LIBS += kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
|
|
||||||
else ifneq (,$(findstring uwp,$(PlatformSuffix)))
|
|
||||||
WinPartition = uwp
|
|
||||||
MSVC2019CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_APP -DWINDLL -D_UNICODE -DUNICODE -DWRL_NO_DEFAULT_LIB
|
|
||||||
LDFLAGS += -APPCONTAINER -NXCOMPAT -DYNAMICBASE -MANIFEST:NO -OPT:REF -SUBSYSTEM:CONSOLE -MANIFESTUAC:NO -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1 -DEBUG:FULL -WINMD:NO
|
|
||||||
LIBS += WindowsApp.lib
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(DEBUG), 1)
|
|
||||||
MSVC2019CompileFlags += -DEBUG
|
|
||||||
endif
|
|
||||||
|
|
||||||
CFLAGS += $(MSVC2019CompileFlags) -nologo
|
|
||||||
CXXFLAGS += $(MSVC2019CompileFlags) -nologo -EHsc -DARMIPS_USE_STD_FILESYSTEM
|
|
||||||
|
|
||||||
TargetArchMoniker = $(subst $(WinPartition)_,,$(PlatformSuffix))
|
|
||||||
|
|
||||||
CC = cl.exe
|
|
||||||
CXX = cl.exe
|
|
||||||
|
|
||||||
SPACE :=
|
|
||||||
SPACE := $(SPACE) $(SPACE)
|
|
||||||
BACKSLASH :=
|
|
||||||
BACKSLASH := \$(BACKSLASH)
|
|
||||||
filter_out1 = $(filter-out $(firstword $1),$1)
|
|
||||||
filter_out2 = $(call filter_out1,$(call filter_out1,$1))
|
|
||||||
|
|
||||||
reg_query = $(call filter_out2,$(subst $2,,$(shell reg query "$2" -v "$1" 2>/dev/null)))
|
|
||||||
fix_path = $(subst $(SPACE),\ ,$(subst \,/,$1))
|
|
||||||
|
|
||||||
b1 := (
|
|
||||||
b2 := )
|
|
||||||
ProgramFiles86w := $(ProgramFiles$(b1)x86$(b2))
|
|
||||||
ProgramFiles86 := $(shell cygpath "$(ProgramFiles86w)")
|
|
||||||
|
|
||||||
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0)
|
|
||||||
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0)
|
|
||||||
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0)
|
|
||||||
WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_CURRENT_USER\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0)
|
|
||||||
WindowsSdkDir := $(WindowsSdkDir)
|
|
||||||
|
|
||||||
WindowsSDKVersion ?= $(firstword $(foreach folder,$(subst $(subst \,/,$(WindowsSdkDir)Include/),,$(wildcard $(call fix_path,$(WindowsSdkDir)Include\*))),$(if $(wildcard $(call fix_path,$(WindowsSdkDir)Include/$(folder)/um/Windows.h)),$(folder),)))$(BACKSLASH)
|
|
||||||
WindowsSDKVersion := $(WindowsSDKVersion)
|
|
||||||
|
|
||||||
VsInstallBuildTools = $(ProgramFiles86)/Microsoft Visual Studio/2019/BuildTools
|
|
||||||
VsInstallEnterprise = $(ProgramFiles86)/Microsoft Visual Studio/2019/Enterprise
|
|
||||||
VsInstallProfessional = $(ProgramFiles86)/Microsoft Visual Studio/2019/Professional
|
|
||||||
VsInstallCommunity = $(ProgramFiles86)/Microsoft Visual Studio/2019/Community
|
|
||||||
|
|
||||||
VsInstallRoot ?= $(shell if [ -d "$(VsInstallBuildTools)" ]; then echo "$(VsInstallBuildTools)"; fi)
|
|
||||||
ifeq ($(VsInstallRoot), )
|
|
||||||
VsInstallRoot = $(shell if [ -d "$(VsInstallEnterprise)" ]; then echo "$(VsInstallEnterprise)"; fi)
|
|
||||||
endif
|
|
||||||
ifeq ($(VsInstallRoot), )
|
|
||||||
VsInstallRoot = $(shell if [ -d "$(VsInstallProfessional)" ]; then echo "$(VsInstallProfessional)"; fi)
|
|
||||||
endif
|
|
||||||
ifeq ($(VsInstallRoot), )
|
|
||||||
VsInstallRoot = $(shell if [ -d "$(VsInstallCommunity)" ]; then echo "$(VsInstallCommunity)"; fi)
|
|
||||||
endif
|
|
||||||
VsInstallRoot := $(VsInstallRoot)
|
|
||||||
|
|
||||||
VcCompilerToolsVer := $(shell cat "$(VsInstallRoot)/VC/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt" | grep -o '[0-9\.]*')
|
VcCompilerToolsVer := $(shell cat "$(VsInstallRoot)/VC/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt" | grep -o '[0-9\.]*')
|
||||||
VcCompilerToolsDir := $(VsInstallRoot)/VC/Tools/MSVC/$(VcCompilerToolsVer)
|
VcCompilerToolsDir := $(VsInstallRoot)/VC/Tools/MSVC/$(VcCompilerToolsVer)
|
||||||
|
@ -1,28 +1,29 @@
|
|||||||
Install msys.
|
Install msys.
|
||||||
|
|
||||||
Follow the guide here to set up your MSYS installation for retroarch compilation:
|
Follow the guide here to set up your MSYS installation for retroarch compilation:
|
||||||
|
|
||||||
https://docs.libretro.com/development/retroarch/compilation/windows/
|
https://docs.libretro.com/development/retroarch/compilation/windows/
|
||||||
|
|
||||||
You can probably really skip most of the packages but you need make:
|
You can probably really skip most of the packages but you need make:
|
||||||
|
|
||||||
pacman -S make
|
pacman -S make
|
||||||
|
|
||||||
"Install" the plugin in Retroarch.
|
"Install" the plugin in Retroarch.
|
||||||
|
|
||||||
Then use the following in msys:
|
Then use the following in msys:
|
||||||
|
|
||||||
cd libretro
|
cd libretro
|
||||||
make platform=windows_msvc2019_desktop_x64 -j32 && cp ppsspp_libretro.* /d/retroarch/cores
|
|
||||||
|
make platform=windows_msvc_desktop_x64 -j32 && cp ppsspp_libretro.* /d/retroarch/cores
|
||||||
Note that the latter part copies the DLL/PDB into wherever retroarch reads it from. Might need to adjust the path,
|
|
||||||
and adjust -j32 depending on your number of logical CPUs - might not need that many threads (or you might need more...).
|
Note that the latter part copies the DLL/PDB into wherever retroarch reads it from. Might need to adjust the path,
|
||||||
|
and adjust -j32 depending on your number of logical CPUs - might not need that many threads (or you might need more...).
|
||||||
(plain make without a platform parameter doesn't work - g++ isn't able to build the D3D11 stuff, or at least it fails to link).
|
|
||||||
|
(plain make without a platform parameter doesn't work - g++ isn't able to build the D3D11 stuff, or at least it fails to link).
|
||||||
To debug from within MSVC, open retroarch.exe (or retroarch_debug.exe) as a Project/Solution, then open a few of the cpp files,
|
|
||||||
set some breakpoints and just launch using F5.
|
To debug from within MSVC, open retroarch.exe (or retroarch_debug.exe) as a Project/Solution, then open a few of the cpp files,
|
||||||
|
set some breakpoints and just launch using F5.
|
||||||
Useful libretro/vulkan sample code:
|
|
||||||
|
Useful libretro/vulkan sample code:
|
||||||
https://github.com/libretro/libretro-samples/blob/master/video/vulkan/vk_rendering/libretro-test.c
|
|
||||||
|
https://github.com/libretro/libretro-samples/blob/master/video/vulkan/vk_rendering/libretro-test.c
|
||||||
|
2
libretro/VSWhere.sh
Normal file
2
libretro/VSWhere.sh
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
"$(cygpath "$(env | awk -F= '/^ProgramFiles\(x86\)=/ { print $2; }')/Microsoft Visual Studio/Installer/vswhere.exe")" "$@"
|
Loading…
Reference in New Issue
Block a user