aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile96
1 files changed, 95 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 6a9e6c8..872bed0 100644
--- a/Makefile
+++ b/Makefile
@@ -349,6 +349,101 @@ LDFLAGS += -DLL
CFLAGS += -D_CRT_SECURE_NO_DEPRECATE
NO_GCC = 1
+# Windows MSVC 2017 all architectures
+else ifneq (,$(findstring windows_msvc2017,$(platform)))
+
+ NO_GCC := 1
+ CFLAGS += -DNOMINMAX
+ CXXFLAGS += -DNOMINMAX
+ WINDOWS_VERSION = 1
+
+ PlatformSuffix = $(subst windows_msvc2017_,,$(platform))
+ ifneq (,$(findstring desktop,$(PlatformSuffix)))
+ WinPartition = desktop
+ MSVC2017CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -FS
+ LDFLAGS += -MANIFEST -LTCG:incremental -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
+ MSVC2017CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WINDLL -D_UNICODE -DUNICODE -D__WRL_NO_DEFAULT_LIB__ -EHsc -FS
+ LDFLAGS += -APPCONTAINER -NXCOMPAT -DYNAMICBASE -MANIFEST:NO -LTCG -OPT:REF -SUBSYSTEM:CONSOLE -MANIFESTUAC:NO -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1 -DEBUG:FULL -WINMD:NO
+ LIBS += WindowsApp.lib
+ endif
+
+ CFLAGS += $(MSVC2017CompileFlags)
+ CXXFLAGS += $(MSVC2017CompileFlags)
+
+ TargetArchMoniker = $(subst $(WinPartition)_,,$(PlatformSuffix))
+
+ CC = cl.exe
+ CXX = cl.exe
+ LD = link.exe
+
+ reg_query = $(call filter_out2,$(subst $2,,$(shell reg query "$2" -v "$1" 2>nul)))
+ fix_path = $(subst $(SPACE),\ ,$(subst \,/,$1))
+
+ ProgramFiles86w := $(shell cmd /c "echo %PROGRAMFILES(x86)%")
+ 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/2017/BuildTools
+ 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)
+
+ 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)")
+
+ # 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)))
+ VCCompilerToolsBinDir := $(VcCompilerToolsDir)\bin\HostX64
+ else
+ VCCompilerToolsBinDir := $(VcCompilerToolsDir)\bin\HostX86
+ endif
+
+ PATH := $(shell IFS=$$'\n'; cygpath "$(VCCompilerToolsBinDir)/$(TargetArchMoniker)"):$(PATH)
+ PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VsInstallRoot)/Common7/IDE")
+ INCLUDE := $(shell IFS=$$'\n'; cygpath -w "$(VcCompilerToolsDir)/include")
+ LIB := $(shell IFS=$$'\n'; cygpath -w "$(VcCompilerToolsDir)/lib/$(TargetArchMoniker)")
+ ifneq (,$(findstring uwp,$(PlatformSuffix)))
+ LIB := $(shell IFS=$$'\n'; cygpath -w "$(LIB)/store")
+ endif
+
+ export INCLUDE := $(INCLUDE);$(WindowsSDKSharedIncludeDir);$(WindowsSDKUCRTIncludeDir);$(WindowsSDKUMIncludeDir)
+ export LIB := $(LIB);$(WindowsSDKUCRTLibDir);$(WindowsSDKUMLibDir)
+ TARGET := $(TARGET_NAME)_libretro.dll
+ PSS_STYLE :=2
+ LDFLAGS += -DLL
+
else
TARGET := $(TARGET_NAME)_libretro.dll
CC = gcc
@@ -438,7 +533,6 @@ ifeq ($(platform), theos_ios)
else
all: $(TARGET)
$(TARGET): $(OBJECTS)
- @echo "** BUILDING $(TARGET) FOR PLATFORM $(platform) **"
ifeq ($(STATIC_LINKING), 1)
$(AR) rcs $@ $(OBJECTS)
else