1DEBUG=0 2DEBUGLOG=0 3RELEASE_BUILD=1 4SINGLE_PRECISION_FLOATS=0 5MIN_AUDIO_PROCESSING_PER_FRAME=0 6FRONTEND_SUPPORTS_RGB565=1 7 8ifeq ($(platform),) 9platform = unix 10ifeq ($(shell uname -s),) 11 platform = win 12else ifneq ($(findstring MINGW,$(shell uname -s)),) 13 platform = win 14else ifneq ($(findstring Darwin,$(shell uname -s)),) 15 platform = osx 16 arch = intel 17ifeq ($(shell uname -p),powerpc) 18 arch = ppc 19endif 20ifeq ($(shell uname -p),arm64) 21 arch = arm 22endif 23else ifneq ($(findstring win,$(shell uname -s)),) 24 platform = win 25endif 26endif 27 28# system platform 29system_platform = unix 30ifeq ($(shell uname -a),) 31EXE_EXT = .exe 32 system_platform = win 33else ifneq ($(findstring Darwin,$(shell uname -a)),) 34 system_platform = osx 35 arch = intel 36ifeq ($(shell uname -p),powerpc) 37 arch = ppc 38endif 39ifeq ($(shell uname -p),arm64) 40 arch = arm 41endif 42else ifneq ($(findstring MINGW,$(shell uname -a)),) 43 system_platform = win 44endif 45 46TARGET_NAME := nxengine 47 48CORE_DIR := nxengine 49EXTRACTDIR := $(CORE_DIR)/extract-auto 50LIBS := 51ifeq (,$(findstring msvc,$(platform))) 52LIBS += -lm 53endif 54 55SPACE := 56SPACE := $(SPACE) $(SPACE) 57BACKSLASH := 58BACKSLASH := \$(BACKSLASH) 59filter_out1 = $(filter-out $(firstword $1),$1) 60filter_out2 = $(call filter_out1,$(call filter_out1,$1)) 61unixpath = $(subst \,/,$1) 62unixcygpath = /$(subst :,,$(call unixpath,$1)) 63 64ifeq ($(platform), unix) 65 TARGET := $(TARGET_NAME)_libretro.so 66 fpic := -fPIC 67 SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,-no-undefined 68 CFLAGS += -D_GNU_SOURCE=1 69else ifeq ($(platform), osx) 70 TARGET := $(TARGET_NAME)_libretro.dylib 71 fpic := -fPIC 72 SHARED := -dynamiclib 73ifeq ($(arch),ppc) 74 CFLAGS += -DMSB_FIRST=1 75endif 76 CFLAGS += -DOSX 77 OSXVER = `sw_vers -productVersion | cut -d. -f 2` 78 OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"` 79 OSX_GT_MOJAVE = $(shell (( $(OSXVER) >= 14)) && echo "YES") 80ifeq ($(OSX_LT_MAVERICKS),YES) 81 fpic += -mmacosx-version-min=10.1 82endif 83 fpic += -stdlib=libc++ 84 85 ifeq ($(CROSS_COMPILE),1) 86 TARGET_RULE = -target $(LIBRETRO_APPLE_PLATFORM) -isysroot $(LIBRETRO_APPLE_ISYSROOT) 87 CFLAGS += $(TARGET_RULE) 88 CPPFLAGS += $(TARGET_RULE) 89 CXXFLAGS += $(TARGET_RULE) 90 LDFLAGS += $(TARGET_RULE) 91 endif 92 93# iOS 94else ifneq (,$(findstring ios,$(platform))) 95 TARGET := $(TARGET_NAME)_libretro_ios.dylib 96 fpic := -fPIC 97 SHARED := -dynamiclib 98 99ifeq ($(IOSSDK),) 100 IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path) 101endif 102 103ifeq ($(platform), ios-arm64) 104 CC = clang -arch arm64 -isysroot $(IOSSDK) 105 CXX = clang++ -arch arm64 -isysroot $(IOSSDK) 106else 107 CC = clang -arch armv7 -isysroot $(IOSSDK) 108 CXX = clang++ -arch armv7 -isysroot $(IOSSDK) 109endif 110CFLAGS += -DIOS 111ifeq ($(platform),$(filter $(platform),ios9 ios-arm64)) 112 CC += -miphoneos-version-min=8.0 113 CXX += -miphoneos-version-min=8.0 114 CFLAGS += -miphoneos-version-min=8.0 115else 116 CC += -miphoneos-version-min=5.0 117 CXX += -miphoneos-version-min=5.0 118 CFLAGS += -miphoneos-version-min=5.0 119endif 120 121# tvOS 122else ifeq ($(platform), tvos-arm64) 123 TARGET := $(TARGET_NAME)_libretro_tvos.dylib 124 fpic = -fPIC 125 SHARED := -dynamiclib 126 ifeq ($(IOSSDK),) 127 IOSSDK := $(shell xcodebuild -version -sdk appletvos Path) 128 endif 129 130else ifeq ($(platform), theos_ios) 131DEPLOYMENT_IOSVERSION = 5.0 132TARGET = iphone:latest:$(DEPLOYMENT_IOSVERSION) 133ARCHS = armv7 armv7s 134TARGET_IPHONEOS_DEPLOYMENT_VERSION=$(DEPLOYMENT_IOSVERSION) 135THEOS_BUILD_DIR := objs 136include $(THEOS)/makefiles/common.mk 137 138LIBRARY_NAME = $(TARGET_NAME)_libretro_ios 139else ifeq ($(platform), qnx) 140 TARGET := $(TARGET_NAME)_libretro_qnx.so 141 fpic := -fPIC 142 SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,-no-undefined 143 CFLAGS += -D_GNU_SOURCE=1 144 145 CC = qcc -Vgcc_ntoarmv7le 146 CXX = QCC -Vgcc_ntoarmv7le_cpp 147 AR = QCC -Vgcc_ntoarmv7le 148 CFLAGS += -D__BLACKBERRY_QNX__ -marm -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp -lcpp 149else ifeq ($(platform), psl1ght) 150 TARGET := $(TARGET_NAME)_libretro_$(platform).a 151 CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT) 152 CXX = $(PS3DEV)/ppu/bin/ppu-g++$(EXE_EXT) 153 AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT) 154 CFLAGS += -DMSB_FIRST=1 155 STATIC_LINKING = 1 156else ifeq ($(platform), ps2) 157 TARGET := $(TARGET_NAME)_libretro_$(platform).a 158 CC = mips64r5900el-ps2-elf-gcc$(EXE_EXT) 159 CXX = mips64r5900el-ps2-elf-g++$(EXE_EXT) 160 AR = mips64r5900el-ps2-elf-ar$(EXE_EXT) 161 CFLAGS += -DGNU_SOURCE=1 -G0 -DABGR1555 162 STATIC_LINKING = 1 163 SINGLE_PRECISION_FLOATS = 1 164 MIN_AUDIO_PROCESSING_PER_FRAME = 1 165 FRONTEND_SUPPORTS_RGB565 = 0 166else ifeq ($(platform), psp1) 167 TARGET := $(TARGET_NAME)_libretro_$(platform).a 168 CC = psp-gcc$(EXE_EXT) 169 CXX = psp-g++$(EXE_EXT) 170 AR = psp-ar$(EXE_EXT) 171 CFLAGS += -DGNU_SOURCE=1 -G0 -I$(shell psp-config --pspsdk-path)/include 172 STATIC_LINKING = 1 173 SINGLE_PRECISION_FLOATS = 1 174 MIN_AUDIO_PROCESSING_PER_FRAME = 1 175 176else ifeq ($(platform), vita) 177 TARGET := $(TARGET_NAME)_libretro_$(platform).a 178 CC = arm-vita-eabi-gcc$(EXE_EXT) 179 CXX = arm-vita-eabi-g++$(EXE_EXT) 180 AR = arm-vita-eabi-ar$(EXE_EXT) 181 CFLAGS += -DGNU_SOURCE=1 182 STATIC_LINKING = 1 183 SINGLE_PRECISION_FLOATS = 1 184 MIN_AUDIO_PROCESSING_PER_FRAME = 1 185else ifeq ($(platform), ctr) 186 TARGET := $(TARGET_NAME)_libretro_$(platform).a 187 CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT) 188 CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT) 189 AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT) 190 CFLAGS += -DARM11 -D_3DS -DGNU_SOURCE=1 191 #workaround the sdl sizeof(enum)=sizeof(int) assert 192 CFLAGS += -D__NDS__ 193 CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard 194 CFLAGS += -mword-relocations 195 CFLAGS += -fomit-frame-pointer -fstrict-aliasing -ffast-math 196 CFLAGS += -fno-rtti -fno-exceptions -std=gnu++11 197 STATIC_LINKING = 1 198 SINGLE_PRECISION_FLOATS = 1 199 MIN_AUDIO_PROCESSING_PER_FRAME = 1 200else ifeq ($(platform), rpi1) 201 TARGET := $(TARGET_NAME)_libretro.so 202 fpic := -fPIC 203 SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,-no-undefined 204 CFLAGS += -DARM -DGNU_SOURCE=1 205 CFLAGS += -marm -march=armv6j -mfpu=vfp -mfloat-abi=hard 206 CFLAGS += -fomit-frame-pointer -fstrict-aliasing 207 CFLAGS += -fno-rtti -fno-exceptions -std=gnu++11 208 SINGLE_PRECISION_FLOATS = 1 209 MIN_AUDIO_PROCESSING_PER_FRAME = 1 210 HAVE_NEON = 1 211else ifeq ($(platform), rpi2) 212 TARGET := $(TARGET_NAME)_libretro.so 213 fpic := -fPIC 214 SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,-no-undefined 215 CFLAGS += -DARM -DGNU_SOURCE=1 216 CFLAGS += -marm -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard 217 CFLAGS += -fomit-frame-pointer -fstrict-aliasing 218 CFLAGS += -fno-rtti -fno-exceptions -std=gnu++11 219 SINGLE_PRECISION_FLOATS = 1 220 MIN_AUDIO_PROCESSING_PER_FRAME = 1 221 HAVE_NEON = 1 222else ifeq ($(platform), rpi3) 223 TARGET := $(TARGET_NAME)_libretro.so 224 fpic := -fPIC 225 SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,-no-undefined 226 CFLAGS += -DARM -DGNU_SOURCE=1 227 CFLAGS += -marm -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard 228 CFLAGS += -fomit-frame-pointer -fstrict-aliasing 229 CFLAGS += -fno-rtti -fno-exceptions -std=gnu++11 230 SINGLE_PRECISION_FLOATS = 1 231 MIN_AUDIO_PROCESSING_PER_FRAME = 1 232 HAVE_NEON = 1 233else ifeq ($(platform), rpi3_64) 234 TARGET := $(TARGET_NAME)_libretro.so 235 fpic := -fPIC 236 SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,-no-undefined 237 CFLAGS += -DARM -DGNU_SOURCE=1 238 CFLAGS += -march=armv8-a+crc -mtune=cortex-a53 239 CFLAGS += -fomit-frame-pointer -fstrict-aliasing 240 CFLAGS += -fno-rtti -fno-exceptions -std=gnu++11 241 SINGLE_PRECISION_FLOATS = 1 242 MIN_AUDIO_PROCESSING_PER_FRAME = 1 243 HAVE_NEON = 1 244else ifeq ($(platform), rpi4_64) 245 TARGET := $(TARGET_NAME)_libretro.so 246 fpic := -fPIC 247 SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,-no-undefined 248 CFLAGS += -DARM -DGNU_SOURCE=1 249 CFLAGS += -march=armv8-a+crc+simd -mtune=cortex-a72 250 CFLAGS += -fomit-frame-pointer -fstrict-aliasing 251 CFLAGS += -fno-rtti -fno-exceptions -std=gnu++11 252 SINGLE_PRECISION_FLOATS = 1 253 MIN_AUDIO_PROCESSING_PER_FRAME = 1 254 HAVE_NEON = 1 255else ifeq ($(platform), xenon) 256 TARGET := $(TARGET_NAME)_libretro_xenon360.a 257 CC = xenon-gcc$(EXE_EXT) 258 CXX = xenon-g++$(EXE_EXT) 259 AR = xenon-ar$(EXE_EXT) 260 CFLAGS += -D__LIBXENON__ -D__ppc_ -DMSB_FIRST=1 261 STATIC_LINKING = 1 262else ifeq ($(platform), dos) 263 TARGET := $(TARGET_NAME)_libretro_djgpp.a 264 CC = i586-pc-msdosdjgpp-gcc$(EXE_EXT) 265 CXX = i586-pc-msdosdjgpp-g++$(EXE_EXT) 266 AR = i586-pc-msdosdjgpp-ar$(EXE_EXT) 267 STATIC_LINKING=1 268 STATIC_LINKING_LINK=1 269else ifeq ($(platform), ngc) 270 TARGET := $(TARGET_NAME)_libretro_$(platform).a 271 CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) 272 CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT) 273 AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT) 274 CFLAGS += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float -DMSB_FIRST=1 275 CFLAGS += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int 276 STATIC_LINKING = 1 277 278else ifeq ($(platform), wii) 279 TARGET := $(TARGET_NAME)_libretro_$(platform).a 280 CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) 281 CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT) 282 AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT) 283 CFLAGS += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float -DMSB_FIRST=1 284 CFLAGS += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int 285 STATIC_LINKING = 1 286 287else ifeq ($(platform), wiiu) 288 TARGET := $(TARGET_NAME)_libretro_$(platform).a 289 CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) 290 CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT) 291 AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT) 292 CFLAGS += -DGEKKO -DWIIU -DHW_RVL -mwup -mcpu=750 -meabi -mhard-float -DMSB_FIRST=1 293 CFLAGS += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int 294 STATIC_LINKING = 1 295 296# Nintendo Switch (libtransistor) 297else ifeq ($(platform), switch) 298 EXT=a 299 TARGET := $(TARGET_NAME)_libretro_$(platform).$(EXT) 300 include $(LIBTRANSISTOR_HOME)/libtransistor.mk 301 STATIC_LINKING=1 302 303else ifeq ($(platform),emscripten) 304 TARGET := $(TARGET_NAME)_libretro_$(platform).bc 305 STATIC_LINKING = 1 306 SINGLE_PRECISION_FLOATS = 1 307 MIN_AUDIO_PROCESSING_PER_FRAME = 1 308 309# Nintendo Switch (libnx) 310else ifeq ($(platform), libnx) 311include $(DEVKITPRO)/libnx/switch_rules 312 EXT=a 313 TARGET := $(TARGET_NAME)_libretro_$(platform).$(EXT) 314 DEFINES := -DSWITCH=1 -U__linux__ -U__linux -DRARCH_INTERNAL 315 CFLAGS := $(DEFINES) -g \ 316 -O2 \ 317 -fPIE -I$(LIBNX)/include/ -ffunction-sections -fdata-sections -ftls-model=local-exec -Wl,--allow-multiple-definition -specs=$(LIBNX)/switch.specs 318 CFLAGS += $(INCDIRS) 319 CFLAGS += $(INCLUDE) -D__SWITCH__ -DHAVE_LIBNX 320 CXXFLAGS := $(ASFLAGS) $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 321 CFLAGS += -std=gnu11 322 STATIC_LINKING = 1 323 324else ifneq (,$(findstring armv,$(platform))) 325 TARGET := $(TARGET_NAME)_libretro.so 326 fpic := -fPIC 327 SHARED := -shared -Wl,--version-script=$(CORE_DIR)/libretro/link.T -Wl,-no-undefined 328 CFLAGS += -D_GNU_SOURCE=1 329ifneq (,$(findstring cortexa8,$(platform))) 330 CFLAGS += -marm -mcpu=cortex-a8 331else ifneq (,$(findstring cortexa9,$(platform))) 332 CFLAGS += -marm -mcpu=cortex-a9 333endif 334 CFLAGS += -marm 335ifneq (,$(findstring neon,$(platform))) 336 CFLAGS += -mfpu=neon 337 HAVE_NEON = 1 338endif 339ifneq (,$(findstring softfloat,$(platform))) 340 CFLAGS += -mfloat-abi=softfp 341else ifneq (,$(findstring hardfloat,$(platform))) 342 CFLAGS += -mfloat-abi=hard 343endif 344 CFLAGS += -DARM 345# Windows MSVC 2003 Xbox 1 346else ifeq ($(platform), xbox1_msvc2003) 347TARGET := $(TARGET_NAME)_libretro_xdk1.lib 348CC = CL.exe 349CXX = CL.exe 350LD = lib.exe 351 352export INCLUDE := $(XDK)/xbox/include 353export LIB := $(XDK)/xbox/lib 354PATH := $(call unixcygpath,$(XDK)/xbox/bin/vc71):$(PATH) 355PSS_STYLE :=2 356CFLAGS += -D_XBOX -D_XBOX1 357CXXFLAGS += -D_XBOX -D_XBOX1 358STATIC_LINKING=1 359HAS_GCC := 0 360# Windows MSVC 2010 Xbox 360 361else ifeq ($(platform), xbox360_msvc2010) 362TARGET := $(TARGET_NAME)_libretro_xdk360.lib 363MSVCBINDIRPREFIX = $(XEDK)/bin/win32 364CC = "$(MSVCBINDIRPREFIX)/cl.exe" 365CXX = "$(MSVCBINDIRPREFIX)/cl.exe" 366LD = "$(MSVCBINDIRPREFIX)/lib.exe" 367 368export INCLUDE := $(XEDK)/include/xbox 369export LIB := $(XEDK)/lib/xbox 370PSS_STYLE :=2 371CFLAGS += -D_XBOX -D_XBOX360 372CXXFLAGS += -D_XBOX -D_XBOX360 373STATIC_LINKING=1 374HAS_GCC := 0 375 376# Windows MSVC 2010 x64 377else ifeq ($(platform), windows_msvc2010_x64) 378 LIBS= 379 CC = cl.exe 380 CXX = cl.exe 381 382PATH := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/bin/amd64"):$(PATH) 383PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../IDE") 384LIB := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/lib/amd64") 385INCLUDE := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/include") 386 387WindowsSdkDir := $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*') 388WindowsSdkDir ?= $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*') 389 390WindowsSDKIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include") 391WindowsSDKGlIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\gl") 392WindowsSDKLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib\x64") 393 394INCFLAGS_PLATFORM = -I"$(WindowsSDKIncludeDir)" 395export INCLUDE := $(INCLUDE);$(WindowsSDKIncludeDir);$(WindowsSDKGlIncludeDir) 396export LIB := $(LIB);$(WindowsSDKLibDir) 397TARGET := $(TARGET_NAME)_libretro.dll 398PSS_STYLE :=2 399LDFLAGS += -DLL 400LIBS = 401# Windows MSVC 2010 x86 402else ifeq ($(platform), windows_msvc2010_x86) 403 LIBS= 404 CC = cl.exe 405 CXX = cl.exe 406 407PATH := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/bin"):$(PATH) 408PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../IDE") 409LIB := $(shell IFS=$$'\n'; cygpath -w "$(VS100COMNTOOLS)../../VC/lib") 410INCLUDE := $(shell IFS=$$'\n'; cygpath "$(VS100COMNTOOLS)../../VC/include") 411 412WindowsSdkDir := $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*') 413WindowsSdkDir ?= $(shell reg query "HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A" -v "InstallationFolder" | grep -o '[A-Z]:\\.*') 414 415WindowsSDKIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include") 416WindowsSDKGlIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\gl") 417WindowsSDKLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib") 418 419INCFLAGS_PLATFORM = -I"$(WindowsSDKIncludeDir)" 420export INCLUDE := $(INCLUDE);$(WindowsSDKIncludeDir);$(WindowsSDKGlIncludeDir) 421export LIB := $(LIB);$(WindowsSDKLibDir) 422TARGET := $(TARGET_NAME)_libretro.dll 423PSS_STYLE :=2 424LDFLAGS += -DLL 425LIBS = 426 427# Windows MSVC 2005 x86 428else ifeq ($(platform), windows_msvc2005_x86) 429 CC = cl.exe 430 CXX = cl.exe 431 HAS_GCC := 0 432 433PATH := $(shell IFS=$$'\n'; cygpath "$(VS80COMNTOOLS)../../VC/bin"):$(PATH) 434PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VS80COMNTOOLS)../IDE") 435INCLUDE := $(shell IFS=$$'\n'; cygpath "$(VS80COMNTOOLS)../../VC/include") 436LIB := $(shell IFS=$$'\n'; cygpath -w "$(VS80COMNTOOLS)../../VC/lib") 437BIN := $(shell IFS=$$'\n'; cygpath "$(VS80COMNTOOLS)../../VC/bin") 438 439WindowsSdkDir := $(shell reg query "HKLM\SOFTWARE\Microsoft\MicrosoftSDK\InstalledSDKs\8F9E5EF3-A9A5-491B-A889-C58EFFECE8B3" -v "Install Dir" | grep -o '[A-Z]:\\.*') 440 441WindowsSDKIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include") 442WindowsSDKAtlIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\atl") 443WindowsSDKCrtIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\crt") 444WindowsSDKGlIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\gl") 445WindowsSDKMfcIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\mfc") 446WindowsSDKLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib") 447 448export INCLUDE := $(INCLUDE);$(WindowsSDKIncludeDir);$(WindowsSDKAtlIncludeDir);$(WindowsSDKCrtIncludeDir);$(WindowsSDKGlIncludeDir);$(WindowsSDKMfcIncludeDir);nxengine/libretro/libretro-common/include/compat/msvc 449export LIB := $(LIB);$(WindowsSDKLibDir) 450TARGET := $(TARGET_NAME)_libretro.dll 451PSS_STYLE :=2 452LDFLAGS += -DLL 453CFLAGS += -D_CRT_SECURE_NO_DEPRECATE 454LIBS = 455 456# Windows MSVC 2003 x86 457else ifeq ($(platform), windows_msvc2003_x86) 458 CC = cl.exe 459 CXX = cl.exe 460 461PATH := $(shell IFS=$$'\n'; cygpath "$(VS71COMNTOOLS)../../Vc7/bin"):$(PATH) 462PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VS71COMNTOOLS)../IDE") 463INCLUDE := $(shell IFS=$$'\n'; cygpath "$(VS71COMNTOOLS)../../Vc7/include") 464LIB := $(shell IFS=$$'\n'; cygpath -w "$(VS71COMNTOOLS)../../Vc7/lib") 465BIN := $(shell IFS=$$'\n'; cygpath "$(VS71COMNTOOLS)../../Vc7/bin") 466 467WindowsSdkDir := $(INETSDK) 468 469export INCLUDE := $(INCLUDE);$(INETSDK)/Include;src/drivers/libretro/msvc/msvc-2005 470export LIB := $(LIB);$(WindowsSdkDir);$(INETSDK)/Lib 471TARGET := $(TARGET_NAME)_libretro.dll 472PSS_STYLE :=2 473LDFLAGS += -DLL 474CFLAGS += -D_CRT_SECURE_NO_DEPRECATE 475 476# Windows MSVC 2017 all architectures 477else ifneq (,$(findstring windows_msvc2017,$(platform))) 478 479 NO_GCC := 1 480 CFLAGS += -DNOMINMAX 481 CXXFLAGS += -DNOMINMAX 482 WINDOWS_VERSION = 1 483 484 PlatformSuffix = $(subst windows_msvc2017_,,$(platform)) 485 ifneq (,$(findstring desktop,$(PlatformSuffix))) 486 WinPartition = desktop 487 MSVC2017CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -FS 488 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 489 LIBS += kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib 490 else ifneq (,$(findstring uwp,$(PlatformSuffix))) 491 WinPartition = uwp 492 MSVC2017CompileFlags = -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WINDLL -D_UNICODE -DUNICODE -D__WRL_NO_DEFAULT_LIB__ -EHsc -FS 493 LDFLAGS += -APPCONTAINER -NXCOMPAT -DYNAMICBASE -MANIFEST:NO -LTCG -OPT:REF -SUBSYSTEM:CONSOLE -MANIFESTUAC:NO -OPT:ICF -ERRORREPORT:PROMPT -NOLOGO -TLBID:1 -DEBUG:FULL -WINMD:NO 494 LIBS += WindowsApp.lib 495 endif 496 497 CFLAGS += $(MSVC2017CompileFlags) 498 CXXFLAGS += $(MSVC2017CompileFlags) 499 500 TargetArchMoniker = $(subst $(WinPartition)_,,$(PlatformSuffix)) 501 502 CC = cl.exe 503 CXX = cl.exe 504 LD = link.exe 505 506 reg_query = $(call filter_out2,$(subst $2,,$(shell reg query "$2" -v "$1" 2>nul))) 507 fix_path = $(subst $(SPACE),\ ,$(subst \,/,$1)) 508 509 ProgramFiles86w := $(shell cmd //c "echo %PROGRAMFILES(x86)%") 510 ProgramFiles86 := $(shell cygpath "$(ProgramFiles86w)") 511 512 WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0) 513 WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0) 514 WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0) 515 WindowsSdkDir ?= $(call reg_query,InstallationFolder,HKEY_CURRENT_USER\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v10.0) 516 WindowsSdkDir := $(WindowsSdkDir) 517 518 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) 519 WindowsSDKVersion := $(WindowsSDKVersion) 520 521 VsInstallBuildTools = $(ProgramFiles86)/Microsoft Visual Studio/2017/BuildTools 522 VsInstallEnterprise = $(ProgramFiles86)/Microsoft Visual Studio/2017/Enterprise 523 VsInstallProfessional = $(ProgramFiles86)/Microsoft Visual Studio/2017/Professional 524 VsInstallCommunity = $(ProgramFiles86)/Microsoft Visual Studio/2017/Community 525 526 VsInstallRoot ?= $(shell if [ -d "$(VsInstallBuildTools)" ]; then echo "$(VsInstallBuildTools)"; fi) 527 ifeq ($(VsInstallRoot), ) 528 VsInstallRoot = $(shell if [ -d "$(VsInstallEnterprise)" ]; then echo "$(VsInstallEnterprise)"; fi) 529 endif 530 ifeq ($(VsInstallRoot), ) 531 VsInstallRoot = $(shell if [ -d "$(VsInstallProfessional)" ]; then echo "$(VsInstallProfessional)"; fi) 532 endif 533 ifeq ($(VsInstallRoot), ) 534 VsInstallRoot = $(shell if [ -d "$(VsInstallCommunity)" ]; then echo "$(VsInstallCommunity)"; fi) 535 endif 536 VsInstallRoot := $(VsInstallRoot) 537 538 VcCompilerToolsVer := $(shell cat "$(VsInstallRoot)/VC/Auxiliary/Build/Microsoft.VCToolsVersion.default.txt" | grep -o '[0-9\.]*') 539 VcCompilerToolsDir := $(VsInstallRoot)/VC/Tools/MSVC/$(VcCompilerToolsVer) 540 541 WindowsSDKSharedIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\shared") 542 WindowsSDKUCRTIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\ucrt") 543 WindowsSDKUMIncludeDir := $(shell cygpath -w "$(WindowsSdkDir)\Include\$(WindowsSDKVersion)\um") 544 WindowsSDKUCRTLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib\$(WindowsSDKVersion)\ucrt\$(TargetArchMoniker)") 545 WindowsSDKUMLibDir := $(shell cygpath -w "$(WindowsSdkDir)\Lib\$(WindowsSDKVersion)\um\$(TargetArchMoniker)") 546 547 # For some reason the HostX86 compiler doesn't like compiling for x64 548 # ("no such file" opening a shared library), and vice-versa. 549 # Work around it for now by using the strictly x86 compiler for x86, and x64 for x64. 550 # NOTE: What about ARM? 551 ifneq (,$(findstring x64,$(TargetArchMoniker))) 552 VCCompilerToolsBinDir := $(VcCompilerToolsDir)\bin\HostX64 553 else 554 VCCompilerToolsBinDir := $(VcCompilerToolsDir)\bin\HostX86 555 endif 556 557 PATH := $(shell IFS=$$'\n'; cygpath "$(VCCompilerToolsBinDir)/$(TargetArchMoniker)"):$(PATH) 558 PATH := $(PATH):$(shell IFS=$$'\n'; cygpath "$(VsInstallRoot)/Common7/IDE") 559 INCLUDE := $(shell IFS=$$'\n'; cygpath -w "$(VcCompilerToolsDir)/include") 560 LIB := $(shell IFS=$$'\n'; cygpath -w "$(VcCompilerToolsDir)/lib/$(TargetArchMoniker)") 561 ifneq (,$(findstring uwp,$(PlatformSuffix))) 562 LIB := $(shell IFS=$$'\n'; cygpath -w "$(LIB)/store") 563 endif 564 565 export INCLUDE := $(INCLUDE);$(WindowsSDKSharedIncludeDir);$(WindowsSDKUCRTIncludeDir);$(WindowsSDKUMIncludeDir) 566 export LIB := $(LIB);$(WindowsSDKUCRTLibDir);$(WindowsSDKUMLibDir) 567 TARGET := $(TARGET_NAME)_libretro.dll 568 PSS_STYLE :=2 569 LDFLAGS += -DLL 570 571# Windows 572else 573 TARGET := $(TARGET_NAME)_libretro.dll 574 CC ?= gcc 575 SHARED := -shared -static-libgcc -static-libstdc++ -s -Wl,--version-script=$(CORE_DIR)/libretro/link.T 576 CFLAGS += -D__WIN32__ -Wno-missing-field-initializers 577endif 578 579ifeq ($(DEBUG), 1) 580ifneq (,$(findstring msvc,$(platform))) 581 CFLAGS += -MTd 582 CXXFLAGS += -MTd 583 CFLAGS += -Od -Zi -DDEBUG -D_DEBUG 584 CXXFLAGS += -Od -Zi -DDEBUG -D_DEBUG 585else 586 CFLAGS += -O0 -g -DDEBUG 587 CXXFLAGS += -O0 -g -DDEBUG 588endif 589else 590ifneq (,$(findstring msvc,$(platform))) 591 CFLAGS += -MT 592 CXXFLAGS += -MT 593endif 594 CFLAGS += -O2 -DNDEBUG 595 CXXFLAGS += -O2 -DNDEBUG 596endif 597 598ifeq ($(RELEASE_BUILD), 1) 599CFLAGS += -DRELEASE_BUILD 600endif 601 602ifeq ($(SINGLE_PRECISION_FLOATS), 1) 603CFLAGS += -DSINGLE_PRECISION_FLOATS 604endif 605 606ifeq ($(MIN_AUDIO_PROCESSING_PER_FRAME), 1) 607CFLAGS += -DMIN_AUDIO_PROCESSING_PER_FRAME 608endif 609 610ifeq ($(DEBUGLOG), 1) 611CFLAGS += -DDEBUG_LOG=1 612endif 613 614ifeq ($(FRONTEND_SUPPORTS_RGB565), 1) 615CFLAGS += -DFRONTEND_SUPPORTS_RGB565 616endif 617 618include Makefile.common 619 620ifneq (,$(findstring msvc2003,$(platform))) 621INCFLAGS += -I$(LIBRETRO_COMM_DIR)/include/compat/msvc 622endif 623 624OBJECTS := $(SOURCES_CXX:.cpp=.o) $(SOURCES_C:.c=.o) 625 626DEFINES := -DHAVE_INTTYPES_H -D__LIBRETRO__ 627 628ifneq (,$(findstring msvc,$(platform))) 629DEFINES += -DINLINE="_inline" 630else 631DEFINES += -DINLINE="inline" 632endif 633 634ifneq (,$(findstring msvc,$(platform))) 635WARNINGS_DEFINES = 636CODE_DEFINES = 637else 638WARNINGS_DEFINES = -Wall -W -Wno-unused-parameter 639CODE_DEFINES = 640endif 641 642ifeq ($(platform), osx) 643ifndef ($(NOUNIVERSAL)) 644 CFLAGS += $(ARCHFLAGS) 645 CXXFLAGS += $(ARCHFLAGS) 646 LFLAGS += $(ARCHFLAGS) 647endif 648endif 649 650COMMON_DEFINES += $(CODE_DEFINES) $(WARNINGS_DEFINES) $(fpic) $(INCFLAGS) $(INCFLAGS_PLATFORM) 651 652CFLAGS += $(DEFINES) $(COMMON_DEFINES) 653 654OBJOUT = -o 655LINKOUT = -o 656 657ifneq (,$(findstring msvc,$(platform))) 658 OBJOUT = -Fo 659 LINKOUT = -out: 660ifeq ($(STATIC_LINKING),1) 661 LD ?= lib.exe 662 STATIC_LINKING=0 663else 664 LD = link.exe 665endif 666else 667 LD = $(CXX) 668endif 669 670%.o: %.c 671 $(CC) $(CFLAGS) -c $(OBJOUT)$@ $< 672 673%.o: %.cpp 674 $(CXX) $(CFLAGS) -c $(OBJOUT)$@ $< 675 676ifeq ($(platform), theos_ios) 677COMMON_FLAGS := -DIOS -DARM $(COMMON_DEFINES) -I$(THEOS_INCLUDE_PATH) -Wno-error 678$(LIBRARY_NAME)_CFLAGS += $(CFLAGS) $(COMMON_FLAGS) 679$(LIBRARY_NAME)_CXXFLAGS += $(CXXFLAGS) $(COMMON_FLAGS) 680${LIBRARY_NAME}_FILES = $(SOURCES_CXX) $(SOURCES_C) 681include $(THEOS_MAKE_PATH)/library.mk 682else 683all: $(TARGET) 684 685$(TARGET): $(OBJECTS) 686ifeq ($(STATIC_LINKING), 1) 687 $(AR) rcs $@ $(OBJECTS) 688else 689 $(LD) $(fpic) $(SHARED) $(LDFLAGS) $(LINKOUT)$@ $(OBJECTS) $(LIBS) 690endif 691 692 693clean: 694 rm -f $(OBJECTS) $(TARGET) 695 696cleandata: 697 rm -f wavetable.dat 698 rm -f stage.dat 699 rm -f settings.dat 700 rm -rf pxt 701 rm -rf org 702 rm -rf endpic 703 704.PHONY: clean 705endif 706