X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Makefile.libretro;h=d3a3530c2690b4ec788c23710cea2091ede71b29;hb=refs%2Fheads%2Flibretro;hp=e58d63d2f5af08d423ceb5aec29ca06783d8985d;hpb=accedc82b01fe5834a805a9872405d51de1d5c06;p=pcsx_rearmed.git diff --git a/Makefile.libretro b/Makefile.libretro index e58d63d2..d3a3530c 100644 --- a/Makefile.libretro +++ b/Makefile.libretro @@ -3,6 +3,8 @@ DEBUG ?= 0 WANT_ZLIB ?= 1 HAVE_CHD ?= 1 +HAVE_PHYSICAL_CDROM ?= 1 +USE_LIBRETRO_VFS ?= 0 # Dynarec options: lightrec, ari64 DYNAREC ?= lightrec @@ -23,10 +25,65 @@ endif CC ?= gcc CXX ?= g++ AS ?= as -CC_AS ?= $(CC) +LD ?= ld CFLAGS ?= +# early compiler overrides +ifeq ($(platform),ios-arm64) + CC = cc -arch arm64 -isysroot $(IOSSDK) + CXX = c++ -arch arm64 -isysroot $(IOSSDK) +else ifneq (,$(findstring ios,$(platform))) + CC = cc -arch armv7 -isysroot $(IOSSDK) + CXX = c++ -arch armv7 -isysroot $(IOSSDK) +else ifeq ($(platform), tvos-arm64) + ifeq ($(IOSSDK),) + IOSSDK := $(shell xcodebuild -version -sdk appletvos Path) + endif + CC = cc -arch arm64 -isysroot $(IOSSDK) + CXX = c++ -arch arm64 -isysroot $(IOSSDK) +else ifeq ($(platform), osx) + ifeq ($(CROSS_COMPILE),1) + TARGET_RULE = -target $(LIBRETRO_APPLE_PLATFORM) -isysroot $(LIBRETRO_APPLE_ISYSROOT) + CFLAGS += $(TARGET_RULE) + CXXFLAGS += $(TARGET_RULE) + LDFLAGS += $(TARGET_RULE) + endif +else ifeq ($(platform), psl1ght) + CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT) + AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT) +else ifeq ($(platform), psp1) + CC = psp-gcc$(EXE_EXT) + AR = psp-ar$(EXE_EXT) +else ifeq ($(platform), vita) + CC = arm-vita-eabi-gcc$(EXE_EXT) + AR = arm-vita-eabi-ar$(EXE_EXT) +else ifeq ($(platform), ctr) + CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT) + CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT) + AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT) +else ifeq ($(platform), xenon) + CC = xenon-gcc$(EXE_EXT) + AR = xenon-ar$(EXE_EXT) +else ifneq (,$(filter $(platform),ngc wii wiiu)) + CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) + CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT) + AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT) +else ifeq ($(platform), qnx) + CC = qcc -Vgcc_ntoarmv7le +else ifeq ($(platform), miyoo) + CC = /opt/miyoo/usr/bin/arm-linux-gcc + CXX = /opt/miyoo/usr/bin/arm-linux-g++ +endif +CC_AS ?= $(CC) + +# workaround wrong owner in libretro infra +GIT_VERSION1 := $(shell test -d /builds/libretro/pcsx_rearmed && git rev-parse --short HEAD 2>&1) +ifneq ($(findstring dubious ownership,$(GIT_VERSION1)),) +DUMMY := $(shell git config --global --add safe.directory /builds/libretro/pcsx_rearmed) +endif + TARGET_NAME := pcsx_rearmed +ARCH_DETECTED := $(shell $(CC) $(CFLAGS) -dumpmachine | awk -F- '{print $$1}') GIT_VERSION := " $(shell git rev-parse --short HEAD || echo unknown)" ifneq ($(GIT_VERSION)," unknown") CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\" @@ -44,20 +101,54 @@ LIBM := -lm MMAP_WIN32 = 0 EXTRA_LDFLAGS = +# select some defaults +ifneq (,$(findstring $(ARCH_DETECTED),arm aarch64)) + DYNAREC = ari64 +ifneq (,$(shell $(CC) -E -dD $(CFLAGS) include/arm_features.h | grep 'define __thumb__')) + # must disable thumb as ari64 can't handle it + CFLAGS += -marm +endif +ifneq (,$(shell $(CC) -E -dD $(CFLAGS) include/arm_features.h | grep 'HAVE_NEON32')) + BUILTIN_GPU = neon +endif +endif +ifneq (,$(filter $(ARCH_DETECTED),i686 x86_64 arm64 aarch64)) + BUILTIN_GPU = neon +endif + +# platform specific options + # Unix ifeq ($(platform), unix) TARGET := $(TARGET_NAME)_libretro.so fpic := -fPIC -ifneq ($(findstring SunOS,$(shell uname -s)),) - CC = gcc -endif -ifeq ($(ARCH), arm) -ifneq ($(findstring __thumb__,$(shell $(CC) -E -dD $(CFLAGS) include/arm_features.h)),) - # must disable thumb as recompiler can't handle it - CFLAGS += -marm -endif + THREAD_RENDERING = 1 +ifeq ($(shell uname),Linux) + LIGHTREC_CUSTOM_MAP := 1 endif +# ODROIDN2 +else ifneq (,$(findstring CortexA73_G12B,$(platform))) + TARGET := $(TARGET_NAME)_libretro.so + fpic := -fPIC + ARCH = arm64 + BUILTIN_GPU = neon + HAVE_NEON = 1 + DYNAREC = ari64 + CFLAGS += -fomit-frame-pointer -ffast-math -DARM + CFLAGS += -march=armv8-a+crc -mcpu=cortex-a73 -mtune=cortex-a73.cortex-a53 + +# ALLWINNER H5 +else ifneq (,$(findstring h5,$(platform))) + TARGET := $(TARGET_NAME)_libretro.so + fpic := -fPIC + ARCH = arm64 + BUILTIN_GPU = neon + HAVE_NEON = 1 + DYNAREC = ari64 + CFLAGS += -fomit-frame-pointer -ffast-math -DARM + CFLAGS += -march=armv8-a+crc -mcpu=cortex-a53 -mtune=cortex-a53 + else ifeq ($(platform), linux-portable) TARGET := $(TARGET_NAME)_libretro.so fpic := -fPIC -nostdlib @@ -67,36 +158,31 @@ else ifeq ($(platform), linux-portable) LIBDL := LIBM := NO_UNDEF_CHECK = 1 + LIGHTREC_CUSTOM_MAP := 1 # OS X else ifeq ($(platform), osx) - DYNAREC ?= lightrec + DYNAREC := 0 TARGET := $(TARGET_NAME)_libretro.dylib fpic := -fPIC - fpic += -mmacosx-version-min=10.1 + MACSOSVER = `sw_vers -productVersion | cut -d. -f 1` + OSXVER = `sw_vers -productVersion | cut -d. -f 2` + OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"` + ifeq ($(OSX_LT_MAVERICKS),YES) + fpic += -mmacosx-version-min=10.1 + endif + CFLAGS += $(ARCHFLAGS) + CXXFLAGS += $(ARCHFLAGS) + LDFLAGS += $(ARCHFLAGS) + HAVE_PHYSICAL_CDROM = 0 # iOS -else ifeq ($(platform),$(filter $(platform),ios-arm64)) - ARCH := arm64 - HAVE_NEON = 0 - BUILTIN_GPU = peops - DYNAREC = 0 - TARGET := $(TARGET_NAME)_interpreter_libretro_ios.dylib - - CC = clang -arch arm64 -isysroot $(IOSSDK) -miphoneos-version-min=8.0 - CXX = clang++ -arch arm64 -isysroot $(IOSSDK) -miphoneos-version-min=8.0 - CFLAGS += -marm -DIOS - else ifneq (,$(findstring ios,$(platform))) - ARCH := arm - DYNAREC ?= ari64 - HAVE_NEON = 1 - BUILTIN_GPU = neon TARGET := $(TARGET_NAME)_libretro_ios.dylib + MINVERSION := ifeq ($(DYNAREC),lightrec) # Override - DYNAREC = 0 - TARGET := $(TARGET_NAME)_interpreter_libretro_ios.dylib + DYNAREC := 0 endif fpic := -fPIC @@ -104,23 +190,49 @@ endif IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path) endif - CC = clang -arch armv7 -isysroot $(IOSSDK) - CXX = clang++ -arch armv7 -isysroot $(IOSSDK) - CC_AS = perl ./tools/gas-preprocessor.pl $(CC) - CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -marm + CFLAGS += -DIOS -marm +ifeq ($(platform),ios-arm64) + ARCH := arm64 + BUILTIN_GPU = neon + HAVE_NEON = 1 + DYNAREC = 0 +else + ARCH := arm + HAVE_NEON = 1 + HAVE_NEON_ASM = 1 + BUILTIN_GPU = neon + CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon ASFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon - CFLAGS += -DIOS -ifeq ($(platform),ios9) - CC += -miphoneos-version-min=8.0 - CXX += -miphoneos-version-min=8.0 - CC_AS += -miphoneos-version-min=8.0 - CFLAGS += -miphoneos-version-min=8.0 +endif + HAVE_PHYSICAL_CDROM = 0 + CC_AS = perl ./tools/gas-preprocessor.pl $(CC) +ifeq ($(platform),$(filter $(platform),ios9 ios-arm64)) + MINVERSION = -miphoneos-version-min=8.0 else - CC += -miphoneos-version-min=5.0 - CXX += -miphoneos-version-min=5.0 - CC_AS += -miphoneos-version-min=5.0 - CFLAGS += -miphoneos-version-min=5.0 + MINVERSION = -miphoneos-version-min=5.0 endif + CFLAGS += $(MINVERSION) + +else ifeq ($(platform), tvos-arm64) + TARGET := $(TARGET_NAME)_libretro_tvos.dylib + MINVERSION := +ifeq ($(DYNAREC),lightrec) + # Override + DYNAREC := 0 +endif + fpic := -fPIC + + ifeq ($(IOSSDK),) + IOSSDK := $(shell xcodebuild -version -sdk appletvos Path) + endif + + CFLAGS += -DIOS -DTVOS + ARCH := arm64 + BUILTIN_GPU = neon + HAVE_NEON = 1 + DYNAREC = 0 + HAVE_PHYSICAL_CDROM = 0 + CC_AS = perl ./tools/gas-preprocessor.pl $(CC) # Nintendo Switch (libnx) else ifeq ($(platform), libnx) @@ -128,90 +240,89 @@ else ifeq ($(platform), libnx) include $(DEVKITPRO)/libnx/switch_rules TARGET := $(TARGET_NAME)_libretro_$(platform).a ARCH := arm64 - BUILTIN_GPU = unai HAVE_VFS_FD = 0 - CFLAGS += -O3 -fomit-frame-pointer -ffast-math -I$(DEVKITPRO)/libnx/include/ -fPIE -Wl,--allow-multiple-definition -include $(LIBNX)/include/switch.h - CFLAGS += -specs=$(DEVKITPRO)/libnx/switch.specs -DNO_OS -DNO_DYLIB -DNO_SOCKET -D__arm64__ -D__ARM_NEON__ - CFLAGS += -D__SWITCH__ + CFLAGS += -O3 -fomit-frame-pointer -ffast-math -I$(DEVKITPRO)/libnx/include/ -fPIE -Wl,--allow-multiple-definition # -include $(LIBNX)/include/switch.h + CFLAGS += -specs=$(DEVKITPRO)/libnx/switch.specs -DNO_DYLIB -D__arm64__ -D__ARM_NEON__ + CFLAGS += -D__SWITCH__ -DHAVE_LIBNX CFLAGS += -DARM -D__aarch64__=1 -march=armv8-a -mtune=cortex-a57 -mtp=soft -DHAVE_INTTYPES -DLSB_FIRST -ffast-math -mcpu=cortex-a57+crc+fp+simd -ffunction-sections CFLAGS += -ftree-vectorize CFLAGS += -Ifrontend/switch -ftree-vectorize + NO_POSIX_MEMALIGN := 1 + NO_PTHREAD=1 LIBPTHREAD := STATIC_LINKING=1 + BUILTIN_GPU = neon + HAVE_NEON = 1 + DYNAREC = ari64 + HAVE_PHYSICAL_CDROM = 0 # Lakka Switch (arm64) else ifeq ($(platform), arm64) TARGET := $(TARGET_NAME)_libretro.so ARCH := arm64 - BUILTIN_GPU = unai + BUILTIN_GPU = neon + HAVE_NEON = 1 + DYNAREC = ari64 + HAVE_PHYSICAL_CDROM = 0 fpic := -fPIC CFLAGS := $(filter-out -O2, $(CFLAGS)) CFLAGS += -O3 -ftree-vectorize -# PS3 -else ifeq ($(platform), ps3) - TARGET := $(TARGET_NAME)_libretro_ps3.a - CC = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-gcc.exe - AR = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-ar.exe - CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ - -# sncps3 -else ifeq ($(platform), sncps3) - TARGET := $(TARGET_NAME)_libretro_ps3.a - CC = $(CELL_SDK)/host-win32/sn/bin/ps3ppusnc.exe - AR = $(CELL_SDK)/host-win32/sn/bin/ps3snarl.exe - CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ - # Lightweight PS3 Homebrew SDK else ifeq ($(platform), psl1ght) TARGET := $(TARGET_NAME)_libretro_psl1ght.a - CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT) - AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT) CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ + CFLAGS += -DNO_DYLIB + NO_UNDEF_CHECK := 1 + STATIC_LINKING := 1 + NO_MMAP := 1 + NO_PTHREAD := 1 + LIBPTHREAD := + LIBDL := + NEED_SYSCONF := 1 + HAVE_PHYSICAL_CDROM = 0 # PSP else ifeq ($(platform), psp1) TARGET := $(TARGET_NAME)_libretro_psp1.a - CC = psp-gcc$(EXE_EXT) - AR = psp-ar$(EXE_EXT) CFLAGS += -DPSP -G0 + HAVE_PHYSICAL_CDROM = 0 # Vita else ifeq ($(platform), vita) TARGET := $(TARGET_NAME)_libretro_vita.a - CC = arm-vita-eabi-gcc$(EXE_EXT) - AR = arm-vita-eabi-ar$(EXE_EXT) CFLAGS += -DVITA CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -marm CFLAGS += -fsingle-precision-constant -mword-relocations -fno-unwind-tables CFLAGS += -fno-asynchronous-unwind-tables -ftree-vectorize -funroll-loops - CFLAGS += -fno-optimize-sibling-calls -fcommon + CFLAGS += -fno-optimize-sibling-calls CFLAGS += -I$(VITASDK)/include -Ifrontend/vita - CFLAGS += -DNO_SOCKET -DNO_OS -DNO_DYLIB + CFLAGS += -DNO_DYLIB ASFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon # CFLAGS += -U__ARM_NEON__ HAVE_NEON = 1 + HAVE_NEON_ASM = 1 BUILTIN_GPU = neon DYNAREC = ari64 - DRC_CACHE_BASE = 0 - ARCH = arm STATIC_LINKING = 1 + NO_PTHREAD=1 + NO_POSIX_MEMALIGN := 1 + HAVE_PHYSICAL_CDROM = 0 # CTR(3DS) else ifeq ($(platform), ctr) TARGET := $(TARGET_NAME)_libretro_ctr.a - CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT) - CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT) - AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT) - CFLAGS += -DARM11 -D_3DS -DNO_OS -DNO_DYLIB -DNO_SOCKET -DTHREAD_ENABLED -DGPU_UNAI_USE_FLOATMATH -DGPU_UNAI_USE_FLOAT_DIV_MULTINV + CFLAGS += -DARM11 -D_3DS -DNO_DYLIB -DGPU_UNAI_USE_FLOATMATH -DGPU_UNAI_USE_FLOAT_DIV_MULTINV CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp -mtp=soft - CFLAGS += -Wall -mword-relocations -fcommon + CFLAGS += -Wall -mword-relocations CFLAGS += -fomit-frame-pointer -ffast-math -funroll-loops CFLAGS += -Ifrontend/3ds -I$(CTRULIB)/include CFLAGS += -Werror=implicit-function-declaration + CFLAGS += -DHAVE_UNISTD_H + CFLAGS += -D_LZMA_UINT32_IS_ULONG OBJS += frontend/3ds/utils.o @@ -219,41 +330,57 @@ else ifeq ($(platform), ctr) BUILTIN_GPU = unai THREAD_RENDERING = 1 DYNAREC = ari64 - DRC_CACHE_BASE = 0 ARCH = arm HAVE_NEON = 0 STATIC_LINKING = 1 + NO_POSIX_MEMALIGN := 1 + HAVE_PHYSICAL_CDROM = 0 # Xbox 360 else ifeq ($(platform), xenon) TARGET := $(TARGET_NAME)_libretro_xenon360.a - CC = xenon-gcc$(EXE_EXT) - AR = xenon-ar$(EXE_EXT) CFLAGS += -D__LIBXENON__ -m32 -D__ppc__ - -# Nintendo Game Cube -else ifeq ($(platform), ngc) - TARGET := $(TARGET_NAME)_libretro_ngc.a - CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) - AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT) - CFLAGS += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__ - -# Nintendo Wii -else ifeq ($(platform), wii) - TARGET := libretro_$(TARGET_NAME)_wii.a - CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT) - AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT) - CFLAGS += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__ + HAVE_PHYSICAL_CDROM = 0 + +# Nintendo GC/Wii/WiiU +else ifneq (,$(filter $(platform),ngc wii wiiu)) + TARGET := $(TARGET_NAME)_libretro_$(platform).a + ifeq ($(platform), ngc) + CFLAGS += -DHW_DOL -mogc + NEED_SYSCONF := 1 + else ifeq ($(platform), wii) + CFLAGS += -DHW_RVL -mrvl + NEED_SYSCONF := 1 + else ifeq ($(platform), wiiu) + # -mwup was removed in newer devkitPPC versions + CFLAGS += -DHW_WUP + CFLAGS += -I frontend/wiiu + CFLAGS += -D_LZMA_UINT32_IS_ULONG + LIGHTREC_CUSTOM_MAP := 1 + LIGHTREC_CUSTOM_MAP_OBJ := libpcsxcore/lightrec/mem_wiiu.o + endif + ARCH = powerpc + BUILTIN_GPU = peops + CFLAGS += -D__ppc__ -D__powerpc__ + CFLAGS += -DGEKKO -mcpu=750 -meabi -mhard-float + CFLAGS += -DNO_DYLIB + STATIC_LINKING := 1 + THREAD_RENDERING := 0 + NO_PTHREAD := 1 + NO_MMAP := 1 + NO_POSIX_MEMALIGN := 1 + LIBDL := + LIBPTHREAD := + LIBRT := + HAVE_PHYSICAL_CDROM = 0 # QNX else ifeq ($(platform), qnx) TARGET := $(TARGET_NAME)_libretro_qnx.so fpic := -fPIC - CC = qcc -Vgcc_ntoarmv7le - CC_AS = $(CC) HAVE_NEON = 1 + HAVE_NEON_ASM = 1 DYNAREC = ari64 - DRC_CACHE_BASE = 0 BUILTIN_GPU = neon ARCH = arm CFLAGS += -D__BLACKBERRY_QNX__ -marm -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp @@ -262,6 +389,18 @@ else ifeq ($(platform), qnx) LIBPTHREAD := LIBDL := LIBM := + HAVE_PHYSICAL_CDROM = 0 + +#Raspberry Pi 1 +else ifeq ($(platform), rpi1) + TARGET := $(TARGET_NAME)_libretro.so + fpic := -fPIC + CFLAGS += -marm -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard + ASFLAGS += -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard + HAVE_NEON = 0 + ARCH = arm + BUILTIN_GPU = unai + DYNAREC = ari64 #Raspberry Pi 2 else ifeq ($(platform), rpi2) @@ -270,6 +409,7 @@ else ifeq ($(platform), rpi2) CFLAGS += -marm -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard ASFLAGS += -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard HAVE_NEON = 1 + HAVE_NEON_ASM = 1 ARCH = arm BUILTIN_GPU = neon DYNAREC = ari64 @@ -281,21 +421,43 @@ else ifeq ($(platform), rpi3) CFLAGS += -marm -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard ASFLAGS += -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard HAVE_NEON = 1 + HAVE_NEON_ASM = 1 ARCH = arm BUILTIN_GPU = neon DYNAREC = ari64 -#Raspberry Pi 4 +#Raspberry Pi 3 with a 64bit GNU/Linux OS +else ifeq ($(platform), rpi3_64) + TARGET := $(TARGET_NAME)_libretro.so + ARCH := arm64 + BUILTIN_GPU = neon + HAVE_NEON = 1 + DYNAREC = ari64 + fpic := -fPIC + CFLAGS += -march=armv8-a+crc+simd -mtune=cortex-a53 -ftree-vectorize + +#Raspberry Pi 4 with a 32bit GNU/Linux OS else ifeq ($(platform), rpi4) TARGET := $(TARGET_NAME)_libretro.so fpic := -fPIC CFLAGS += -marm -mcpu=cortex-a72 -mfpu=neon-fp-armv8 -mfloat-abi=hard ASFLAGS += -mcpu=cortex-a72 -mfpu=neon-fp-armv8 -mfloat-abi=hard HAVE_NEON = 1 + HAVE_NEON_ASM = 1 ARCH = arm BUILTIN_GPU = neon DYNAREC = ari64 +#Raspberry Pi 4 with a 64bit GNU/Linux OS +else ifeq ($(platform), rpi4_64) + TARGET := $(TARGET_NAME)_libretro.so + ARCH := arm64 + BUILTIN_GPU = neon + HAVE_NEON = 1 + DYNAREC = ari64 + fpic := -fPIC + CFLAGS += -march=armv8-a+crc+simd -mtune=cortex-a72 -ftree-vectorize + # Classic Platforms #################### # Platform affix = classic__<µARCH> # Help at https://modmyclassic.com/comp @@ -306,8 +468,7 @@ else ifeq ($(platform), classic_armv7_a7) TARGET := $(TARGET_NAME)_libretro.so fpic := -fPIC CFLAGS += -Ofast \ - -flto=4 -fwhole-program -fuse-linker-plugin \ - -fdata-sections -ffunction-sections -Wl,--gc-sections \ + -flto=auto -fuse-linker-plugin \ -fno-stack-protector -fno-ident -fomit-frame-pointer \ -falign-functions=1 -falign-jumps=1 -falign-loops=1 \ -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-unroll-loops \ @@ -317,6 +478,7 @@ else ifeq ($(platform), classic_armv7_a7) CPPFLAGS += $(CFLAGS) ASFLAGS += $(CFLAGS) HAVE_NEON = 1 + HAVE_NEON_ASM = 1 ARCH = arm BUILTIN_GPU = neon DYNAREC = ari64 @@ -336,9 +498,11 @@ else ifeq ($(platform), classic_armv8_a35) TARGET := $(TARGET_NAME)_libretro.so fpic := -fPIC CFLAGS += -Ofast \ - -fmerge-all-constants -fno-math-errno -march=armv8-a \ + -fmerge-all-constants -fno-math-errno \ + -fno-stack-protector -fomit-frame-pointer \ -marm -mcpu=cortex-a35 -mtune=cortex-a35 -mfpu=neon-fp-armv8 -mfloat-abi=hard HAVE_NEON = 1 + HAVE_NEON_ASM = 1 ARCH = arm BUILTIN_GPU = neon DYNAREC = ari64 @@ -351,7 +515,6 @@ else ifneq (,$(findstring armv,$(platform))) TARGET := $(TARGET_NAME)_libretro.so fpic := -fPIC HAVE_NEON = 0 - DRC_CACHE_BASE = 0 BUILTIN_GPU = peops ifneq (,$(findstring cortexa8,$(platform))) CFLAGS += -marm -mcpu=cortex-a8 @@ -369,6 +532,7 @@ else ifneq (,$(findstring armv,$(platform))) CFLAGS += -mfpu=neon ASFLAGS += -mfpu=neon HAVE_NEON = 1 + HAVE_NEON_ASM = 1 BUILTIN_GPU = neon endif ifneq (,$(findstring softfloat,$(platform))) @@ -381,26 +545,45 @@ else ifneq (,$(findstring armv,$(platform))) ARCH = arm DYNAREC = ari64 +else ifeq ($(platform), miyoo) + TARGET := $(TARGET_NAME)_libretro.so + fpic := -fPIC + CFLAGS += -mcpu=arm926ej-s -fsingle-precision-constant + CFLAGS += -DGPU_UNAI_USE_INT_DIV_MULTINV -D_MIYOO + ARCH = arm + BUILTIN_GPU = unai + DYNAREC = ari64 + HAVE_NEON = 0 + # Emscripten else ifeq ($(platform), emscripten) TARGET := $(TARGET_NAME)_libretro_$(platform).bc fpic := -fPIC - SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T + NO_MMAP = 1 CFLAGS += -DNO_DYLIB -DNO_SOCKET + CFLAGS += -msimd128 -ftree-vectorize + LIBPTHREAD := + NO_PTHREAD=1 + DYNAREC = STATIC_LINKING = 1 + HAVE_PHYSICAL_CDROM = 0 # Windows else TARGET := $(TARGET_NAME)_libretro.dll - BUILTIN_GPU = peops PLATFORM = libretro - MAIN_LDFLAGS += -static-libgcc -static-libstdc++ -s + MAIN_LDFLAGS += -static-libgcc -static-libstdc++ +ifneq ($(DEBUG),1) + MAIN_LDFLAGS += -s +endif CFLAGS += -D__WIN32__ -DNO_DYLIB MMAP_WIN32=1 + NO_PTHREAD=1 MAIN_LDLIBS += -lws2_32 LIBPTHREAD := LIBDL := LIBM := + USE_LIBRETRO_VFS = 1 endif CFLAGS += $(fpic) @@ -414,13 +597,32 @@ endif # try to autodetect stuff for the lazy ifndef ARCH -ARCH = $(shell $(CC) -dumpmachine | awk -F- '{print $$1}') +ARCH = $(ARCH_DETECTED) +endif +ifndef HAVE_NEON_ASM +# asm for 32bit only +HAVE_NEON_ASM = $(shell $(CC) -E -dD $(CFLAGS) include/arm_features.h | grep -q HAVE_NEON32 && echo 1 || echo 0) +endif +ifeq ($(NO_UNDEF_CHECK)$(shell $(LD) -v 2> /dev/null | awk '{print $$1}'),GNU) + ifeq (,$(findstring $(platform),win32)) + MAIN_LDFLAGS += -Wl,-version-script=frontend/link.T + endif + ifneq ($(STATIC_LINKING), 1) + CFLAGS += -ffunction-sections -fdata-sections + endif +MAIN_LDFLAGS += -Wl,--gc-sections -Wl,--no-undefined +endif +ifdef ALLOW_LIGHTREC_ON_ARM +CFLAGS += -DALLOW_LIGHTREC_ON_ARM +endif +ifeq ($(BUILTIN_GPU),neon) +ifneq (,$(findstring $(ARCH),x86 i686)) + CFLAGS_GPU_NEON ?= -msse2 # required endif -ifndef HAVE_NEON -HAVE_NEON = $(shell $(CC) -E -dD - < /dev/null 2> /dev/null | grep -q __ARM_NEON__ && echo 1 || echo 0) +ifeq ($(ARCH),x86_64) + CFLAGS_GPU_NEON ?= -mssse3 # optional, for more perf endif -ifeq ($(NO_UNDEF_CHECK)$(shell ld -v 2> /dev/null | awk '{print $$1}'),GNU) -MAIN_LDFLAGS += -Wl,--no-undefined +CFLAGS += $(CFLAGS_GPU_NEON) endif TARGET ?= libretro.so @@ -430,14 +632,15 @@ SOUND_DRIVERS = libretro PLUGINS = NO_CONFIG_MAK = yes -# what does this do -#libretro_all: all -#ifeq ($(platform),ios) -#ifeq ($(DYNAREC),1) -# make -f Makefile.libretro DYNAREC=0 platform=$(platform) clean -# make -f Makefile.libretro DYNAREC=0 platform=$(platform) -#endif -#endif +$(info TARGET: $(TARGET)) +$(info platform: $(platform)) +$(info ARCH: $(ARCH)) +$(info DYNAREC: $(DYNAREC)) +$(info BUILTIN_GPU: $(BUILTIN_GPU)) +$(info CC: $(CC) : $(shell $(CC) --version | head -1)) +$(info CFLAGS: $(CFLAGS)) +$(info MAIN_LDLIBS: $(MAIN_LDLIBS)) +$(info ) include Makefile