X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Makefile.libretro;h=1169d892ec5fcde4c07dfa64d8d3484f14594b4c;hb=4ec65cf9e9d59e5edc5e86a58000e14060fe6b18;hp=ab62f2248c1451c5b8fabe82d75ca6ac9a10e594;hpb=cef87e9262aa48428071d46570e6d9f04ccb228f;p=pcsx_rearmed.git diff --git a/Makefile.libretro b/Makefile.libretro index ab62f224..1169d892 100644 --- a/Makefile.libretro +++ b/Makefile.libretro @@ -24,11 +24,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) -dumpmachine | awk -F- '{print $$1}') +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)\" @@ -46,52 +100,53 @@ LIBM := -lm MMAP_WIN32 = 0 EXTRA_LDFLAGS = -# Unix -ifeq ($(platform), unix) - TARGET := $(TARGET_NAME)_libretro.so - fpic := -fPIC - THREAD_RENDERING = 1 -ifeq ($(shell uname),Linux) - LIGHTREC_CUSTOM_MAP := 1 -endif -ifneq ($(findstring SunOS,$(shell uname -s)),) - CC = gcc -endif +# select some defaults ifneq (,$(findstring $(ARCH_DETECTED),arm aarch64)) DYNAREC = ari64 - -ifneq ($(findstring __thumb__,$(shell $(CC) -E -dD $(CFLAGS) include/arm_features.h)),) +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 (,$(findstring $(ARCH_DETECTED),x86_64 aarch64)) +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 + 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 - SHARED := -shared -Wl,-version-script=link.T ARCH = arm64 BUILTIN_GPU = neon HAVE_NEON = 1 DYNAREC = ari64 CFLAGS += -fomit-frame-pointer -ffast-math -DARM - CPUFLAGS += -march=armv8-a+crc -mfpu=neon-fp-armv8 -mcpu=cortex-a73 -mtune=cortex-a73.cortex-a53 + 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 - SHARED := -shared -Wl,-version-script=link.T ARCH = arm64 BUILTIN_GPU = neon HAVE_NEON = 1 DYNAREC = ari64 CFLAGS += -fomit-frame-pointer -ffast-math -DARM - CPUFLAGS += -march=armv8-a+crc -mfpu=neon-fp-armv8 -mcpu=cortex-a53 -mtune=cortex-a53 + CFLAGS += -march=armv8-a+crc -mcpu=cortex-a53 -mtune=cortex-a53 else ifeq ($(platform), linux-portable) TARGET := $(TARGET_NAME)_libretro.so @@ -109,22 +164,12 @@ else ifeq ($(platform), osx) DYNAREC := 0 TARGET := $(TARGET_NAME)_libretro.dylib fpic := -fPIC - HAVE_NEON = 0 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 - - ifeq ($(CROSS_COMPILE),1) - TARGET_RULE = -target $(LIBRETRO_APPLE_PLATFORM) -isysroot $(LIBRETRO_APPLE_ISYSROOT) - CFLAGS += $(TARGET_RULE) - CPPFLAGS += $(TARGET_RULE) - CXXFLAGS += $(TARGET_RULE) - LDFLAGS += $(TARGET_RULE) - endif - CFLAGS += $(ARCHFLAGS) CXXFLAGS += $(ARCHFLAGS) LDFLAGS += $(ARCHFLAGS) @@ -145,15 +190,11 @@ endif CFLAGS += -DIOS -marm ifeq ($(platform),ios-arm64) - CC = cc -arch arm64 -isysroot $(IOSSDK) - CXX = c++ -arch arm64 -isysroot $(IOSSDK) ARCH := arm64 BUILTIN_GPU = neon HAVE_NEON = 1 DYNAREC = 0 else - CC = cc -arch armv7 -isysroot $(IOSSDK) - CXX = c++ -arch armv7 -isysroot $(IOSSDK) ARCH := arm HAVE_NEON = 1 HAVE_NEON_ASM = 1 @@ -183,8 +224,6 @@ endif endif CFLAGS += -DIOS -DTVOS - CC = cc -arch arm64 -isysroot $(IOSSDK) - CXX = c++ -arch arm64 -isysroot $(IOSSDK) ARCH := arm64 BUILTIN_GPU = neon HAVE_NEON = 1 @@ -199,11 +238,13 @@ else ifeq ($(platform), libnx) ARCH := arm64 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 += -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 @@ -224,29 +265,31 @@ else ifeq ($(platform), arm64) # 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 # PSP else ifeq ($(platform), psp1) TARGET := $(TARGET_NAME)_libretro_psp1.a - CC = psp-gcc$(EXE_EXT) - AR = psp-ar$(EXE_EXT) CFLAGS += -DPSP -G0 # 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 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__ @@ -257,14 +300,13 @@ else ifeq ($(platform), vita) DYNAREC = ari64 ARCH = arm STATIC_LINKING = 1 + NO_PTHREAD=1 + NO_POSIX_MEMALIGN := 1 # 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 CFLAGS += -fomit-frame-pointer -ffast-math -funroll-loops @@ -281,34 +323,47 @@ else ifeq ($(platform), ctr) ARCH = arm HAVE_NEON = 0 STATIC_LINKING = 1 + NO_POSIX_MEMALIGN := 1 # 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__ +# 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 + 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 := # 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 @@ -398,8 +453,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 \ @@ -429,7 +483,8 @@ 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 @@ -477,11 +532,9 @@ else ifneq (,$(findstring armv,$(platform))) else ifeq ($(platform), miyoo) TARGET := $(TARGET_NAME)_libretro.so - CC = /opt/miyoo/usr/bin/arm-linux-gcc - CXX = /opt/miyoo/usr/bin/arm-linux-g++ fpic := -fPIC CFLAGS += -mcpu=arm926ej-s -fsingle-precision-constant - CFLAGS += -DGPULIB_USE_MMAP -DGPU_UNAI_USE_INT_DIV_MULTINV -D_MIYOO + CFLAGS += -DGPU_UNAI_USE_INT_DIV_MULTINV -D_MIYOO ARCH = arm BUILTIN_GPU = unai DYNAREC = ari64 @@ -491,18 +544,21 @@ else ifeq ($(platform), miyoo) else ifeq ($(platform), emscripten) TARGET := $(TARGET_NAME)_libretro_$(platform).bc fpic := -fPIC - SHARED := -shared -Wl,--no-undefined -Wl,--version-script=link.T - CFLAGS += -DNO_DYLIB -DNO_SOCKET + CFLAGS += -DNO_DYLIB + DYNAREC = STATIC_LINKING = 1 # 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 := @@ -523,15 +579,31 @@ endif ifndef ARCH ARCH = $(ARCH_DETECTED) endif -ifndef HAVE_NEON -HAVE_NEON = $(shell $(CC) -E -dD - < /dev/null 2> /dev/null | grep -q __ARM_NEON__ && echo 1 || echo 0) +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) -MAIN_LDFLAGS += -Wl,--no-undefined +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 +ifeq ($(ARCH),x86_64) + CFLAGS_GPU_NEON ?= -mssse3 # optional, for more perf +endif +CFLAGS += $(CFLAGS_GPU_NEON) +endif TARGET ?= libretro.so PLATFORM = libretro @@ -540,14 +612,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