dev-release: try to make it work
[pcsx_rearmed.git] / Makefile.libretro
index ab62610..d04f0b8 100644 (file)
@@ -3,7 +3,11 @@
 DEBUG ?= 0
 WANT_ZLIB ?= 1
 HAVE_CHD ?= 1
+HAVE_PHYSICAL_CDROM ?= 1
+USE_ASYNC_CDROM ?= 1
 USE_LIBRETRO_VFS ?= 0
+NDRC_THREAD ?= 1
+GNU_LINKER ?= 1
 
 # Dynarec options: lightrec, ari64
 DYNAREC ?= lightrec
@@ -48,30 +52,58 @@ else ifeq ($(platform), osx)
        LDFLAGS  += $(TARGET_RULE)
    endif
 else ifeq ($(platform), psl1ght)
-       CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
-       AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT)
+  ifeq ($(strip $(PS3DEV)),)
+  $(error "PS3DEV env var is not set")
+  endif
+  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)
+  CC = psp-gcc$(EXE_EXT)
+  AR = psp-ar$(EXE_EXT)
+  LD = psp-ld$(EXE_EXT)
 else ifeq ($(platform), vita)
-       CC = arm-vita-eabi-gcc$(EXE_EXT)
-       AR = arm-vita-eabi-ar$(EXE_EXT)
+  CC = arm-vita-eabi-gcc$(EXE_EXT)
+  AR = arm-vita-eabi-ar$(EXE_EXT)
+  LD = arm-vita-eabi-ld$(EXE_EXT)
+  OBJCOPY = arm-vita-eabi-objcopy$(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)
+  ifneq ($(strip $(DEVKITPRO)),)
+  DEVKITARM ?= $(DEVKITPRO)/devkitARM
+  CTRULIB ?= $(DEVKITPRO)/libctru
+  endif
+  ifeq ($(strip $(DEVKITARM)),)
+  $(error "DEVKITARM env var is not set")
+  endif
+  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)
+  LD = $(DEVKITARM)/bin/arm-none-eabi-ld$(EXE_EXT)
+  OBJCOPY = $(DEVKITARM)/bin/arm-none-eabi-objcopy$(EXE_EXT)
+else ifeq ($(platform), libnx)
+  export DEPSDIR := $(CURDIR)/
+  ifeq ($(strip $(DEVKITPRO)),)
+  $(error "DEVKITPRO env var is not set")
+  endif
+  include $(DEVKITPRO)/libnx/switch_rules
+  SHELL := PATH=$(PATH) $(SHELL)
+  LD = $(PREFIX)ld
 else ifeq ($(platform), xenon)
-       CC = xenon-gcc$(EXE_EXT)
-       AR = xenon-ar$(EXE_EXT)
+  CC = xenon-gcc$(EXE_EXT)
+  AR = xenon-ar$(EXE_EXT)
+  LD = xenon-ld$(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)
+  ifeq ($(strip $(DEVKITPPC)),)
+  $(error "DEVKITPPC env var is not set")
+  endif
+  CC  = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
+  CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT)
+  AR  = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
+  LD  = $(DEVKITPPC)/bin/powerpc-eabi-ld$(EXE_EXT)
 else ifeq ($(platform), qnx)
-       CC = qcc -Vgcc_ntoarmv7le
+  CC = qcc -Vgcc_ntoarmv7le
 else ifeq ($(platform), miyoo)
-       CC = /opt/miyoo/usr/bin/arm-linux-gcc
-       CXX = /opt/miyoo/usr/bin/arm-linux-g++
+  CC = /opt/miyoo/usr/bin/arm-linux-gcc
+  CXX = /opt/miyoo/usr/bin/arm-linux-g++
 endif
 CC_AS ?= $(CC)
 
@@ -93,6 +125,8 @@ endif
 LIBPTHREAD := -lpthread
 ifneq ($(findstring Haiku,$(shell uname -s)),)
 LIBDL := -lroot -lnetwork
+# easiest way to prevent libretro-common from breaking on Haiku
+HAVE_PHYSICAL_CDROM := 0
 else
 LIBDL := -ldl
 endif
@@ -173,6 +207,9 @@ else ifeq ($(platform), osx)
        CFLAGS  += $(ARCHFLAGS)
        CXXFLAGS  += $(ARCHFLAGS)
        LDFLAGS += $(ARCHFLAGS)
+       HAVE_PHYSICAL_CDROM = 0
+       FSECTIONS_LDFLAGS = -Wl,-dead_strip
+       GNU_LINKER = 0
 
 # iOS
 else ifneq (,$(findstring ios,$(platform)))
@@ -188,7 +225,7 @@ endif
                IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
        endif
 
-       CFLAGS += -DIOS -marm
+       CFLAGS += -DIOS
 ifeq ($(platform),ios-arm64)
        ARCH := arm64
        BUILTIN_GPU = neon
@@ -199,9 +236,10 @@ else
        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 += -marm -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
+       ASFLAGS += -marm -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
 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
@@ -209,6 +247,8 @@ else
        MINVERSION = -miphoneos-version-min=5.0
 endif
        CFLAGS += $(MINVERSION)
+       FSECTIONS_LDFLAGS = -Wl,-dead_strip
+       GNU_LINKER = 0
 
 else ifeq ($(platform), tvos-arm64)
        TARGET := $(TARGET_NAME)_libretro_tvos.dylib
@@ -228,28 +268,34 @@ endif
        BUILTIN_GPU = neon
        HAVE_NEON = 1
        DYNAREC = 0
+       HAVE_PHYSICAL_CDROM = 0
        CC_AS = perl ./tools/gas-preprocessor.pl $(CC)
+       MINVERSION = -mappletvos-version-min=11.0
+       CFLAGS += $(MINVERSION)
+       FSECTIONS_LDFLAGS = -Wl,-dead_strip
+       GNU_LINKER = 0
 
 # Nintendo Switch (libnx)
 else ifeq ($(platform), libnx)
-   export DEPSDIR := $(CURDIR)/
-   include $(DEVKITPRO)/libnx/switch_rules
    TARGET := $(TARGET_NAME)_libretro_$(platform).a
    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 += -O3 -fomit-frame-pointer -ffast-math -I$(DEVKITPRO)/libnx/include/ -fPIE
    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 += -D__SWITCH__ -DSWITCH -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
    CFLAGS += -ftree-vectorize
-   CFLAGS += -Ifrontend/switch -ftree-vectorize
+   CFLAGS += -Ifrontend/switch
    NO_POSIX_MEMALIGN := 1
    NO_PTHREAD=1
+   NO_MMAP := 1 # for psxmem
    LIBPTHREAD :=
-   STATIC_LINKING=1
+   WANT_ZLIB = 0
+   PARTIAL_LINKING = 1
    BUILTIN_GPU = neon
    HAVE_NEON = 1
    DYNAREC = ari64
+   HAVE_PHYSICAL_CDROM = 0
 
 # Lakka Switch (arm64)
 else ifeq ($(platform), arm64)
@@ -258,6 +304,7 @@ else ifeq ($(platform), arm64)
    BUILTIN_GPU = neon
    HAVE_NEON = 1
    DYNAREC = ari64
+   HAVE_PHYSICAL_CDROM = 0
    fpic := -fPIC
    CFLAGS := $(filter-out -O2, $(CFLAGS))
    CFLAGS += -O3 -ftree-vectorize
@@ -274,61 +321,83 @@ else ifeq ($(platform), psl1ght)
        LIBPTHREAD :=
        LIBDL :=
        NEED_SYSCONF := 1
+       HAVE_PHYSICAL_CDROM = 0
+       USE_ASYNC_CDROM = 0
 
 # PSP
 else ifeq ($(platform), psp1)
        TARGET := $(TARGET_NAME)_libretro_psp1.a
        CFLAGS += -DPSP -G0
+       HAVE_PHYSICAL_CDROM = 0
 
 # Vita
 else ifeq ($(platform), vita)
        TARGET := $(TARGET_NAME)_libretro_vita.a
        CFLAGS += -DVITA
-       CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -marm
+       CFLAGS += -mcpu=cortex-a9 -mtune=cortex-a9 -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 += -fno-asynchronous-unwind-tables -ftree-vectorize
+       #CFLAGS += -funroll-loops # ~280K bloat
+       CFLAGS += -fno-optimize-sibling-calls # broken arm->thumb tailcalls?
        CFLAGS += -I$(VITASDK)/include -Ifrontend/vita
        CFLAGS += -DNO_DYLIB
-       ASFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
+       CFLAGS_LAST += -O3
+       ASFLAGS += -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon
 
-#      CFLAGS += -U__ARM_NEON__
        HAVE_NEON = 1
        HAVE_NEON_ASM = 1
        BUILTIN_GPU = neon
 
        DYNAREC = ari64
        ARCH = arm
-       STATIC_LINKING = 1
-       NO_PTHREAD=1
+       PARTIAL_LINKING = 1
+       NO_MMAP := 1
        NO_POSIX_MEMALIGN := 1
+       NDRC_THREAD := 0 # can't write to tc from thread
+       HAVE_PHYSICAL_CDROM = 0
+       EXTRA_EXTERN_SYMS += _newlib_vm_size_user
 
 # CTR(3DS)
 else ifeq ($(platform), ctr)
+       ifeq ($(strip $(CTRULIB)),)
+       $(error "CTRULIB env var is not set")
+       endif
        TARGET := $(TARGET_NAME)_libretro_ctr.a
-       CFLAGS += -DARM11 -D_3DS -DNO_DYLIB -DGPU_UNAI_USE_FLOATMATH -DGPU_UNAI_USE_FLOAT_DIV_MULTINV
+       CFLAGS += -DARM11 -D_3DS -D__3DS__
+       CFLAGS += -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
+       CFLAGS += -mword-relocations
+       CFLAGS += -fomit-frame-pointer
+       CFLAGS_LAST += -O3
+       # CFLAGS += -funroll-loops # ~500K of bloat
        CFLAGS += -Ifrontend/3ds -I$(CTRULIB)/include
        CFLAGS += -Werror=implicit-function-declaration
+       CFLAGS += -Wno-format
        CFLAGS += -DHAVE_UNISTD_H
+       CFLAGS += -DZ7_DECL_Int32_AS_long
+       CFLAGS += -DUSE_CTRULIB_2
+       CFLAGS += -DNO_DYLIB
 
+       OBJS += deps/arm-mem/memcpymove-v6l.o
+       OBJS += deps/arm-mem/memset-v6l.o
        OBJS += frontend/3ds/utils.o
 
-#      CFLAGS += -DPCSX
        BUILTIN_GPU = unai
        THREAD_RENDERING = 1
        DYNAREC = ari64
        ARCH = arm
        HAVE_NEON = 0
-       STATIC_LINKING = 1
+       PARTIAL_LINKING = 1
+       WANT_ZLIB = 0
        NO_POSIX_MEMALIGN := 1
+       NO_MMAP := 1 # for psxmem
+       HAVE_PHYSICAL_CDROM = 0
 
 # Xbox 360
 else ifeq ($(platform), xenon)
        TARGET := $(TARGET_NAME)_libretro_xenon360.a
        CFLAGS += -D__LIBXENON__ -m32 -D__ppc__
+       HAVE_PHYSICAL_CDROM = 0
 
 # Nintendo GC/Wii/WiiU
 else ifneq (,$(filter $(platform),ngc wii wiiu))
@@ -343,8 +412,11 @@ else ifneq (,$(filter $(platform),ngc wii wiiu))
                # -mwup was removed in newer devkitPPC versions
                CFLAGS += -DHW_WUP
                CFLAGS += -I frontend/wiiu
+               CFLAGS += -DZ7_DECL_Int32_AS_long
+               CFLAGS += -Wno-format
                LIGHTREC_CUSTOM_MAP := 1
                LIGHTREC_CUSTOM_MAP_OBJ := libpcsxcore/lightrec/mem_wiiu.o
+               LIGHTREC_CODE_INV := 1
        endif
        ARCH = powerpc
        BUILTIN_GPU = peops
@@ -359,6 +431,8 @@ else ifneq (,$(filter $(platform),ngc wii wiiu))
        LIBDL :=
        LIBPTHREAD :=
        LIBRT :=
+       HAVE_PHYSICAL_CDROM = 0
+       USE_ASYNC_CDROM = 0
 
 # QNX
 else ifeq ($(platform), qnx)
@@ -375,6 +449,7 @@ else ifeq ($(platform), qnx)
        LIBPTHREAD :=
        LIBDL :=
        LIBM :=
+       HAVE_PHYSICAL_CDROM = 0
 
 #Raspberry Pi 1
 else ifeq ($(platform), rpi1)
@@ -502,14 +577,14 @@ else ifneq (,$(findstring armv,$(platform)))
        HAVE_NEON = 0
        BUILTIN_GPU = peops
        ifneq (,$(findstring cortexa8,$(platform)))
-               CFLAGS += -marm -mcpu=cortex-a8
+               CFLAGS += -mcpu=cortex-a8
                ASFLAGS += -mcpu=cortex-a8
        else ifneq (,$(findstring cortexa7,$(platform)))
-               CFLAGS += -marm -mcpu=cortex-a7
+               CFLAGS += -mcpu=cortex-a7
                ASFLAGS += -mcpu=cortex-a7
                LIBZ :=
        else ifneq (,$(findstring cortexa9,$(platform)))
-               CFLAGS += -marm -mcpu=cortex-a9
+               CFLAGS += -mcpu=cortex-a9
                ASFLAGS += -mcpu=cortex-a9
        endif
        CFLAGS += -marm
@@ -543,14 +618,32 @@ else ifeq ($(platform), miyoo)
 # Emscripten
 else ifeq ($(platform), emscripten)
    TARGET  := $(TARGET_NAME)_libretro_$(platform).bc
+   pthread ?= 0
    fpic    := -fPIC
    NO_MMAP = 1
+   # we can use -lz for emscripten's built-in zlib port
+   WANT_ZLIB=0
    CFLAGS += -DNO_DYLIB -DNO_SOCKET
    CFLAGS += -msimd128 -ftree-vectorize
-   LIBPTHREAD :=
-   NO_PTHREAD=1
+   # when compiling with pthreads...
+   ifneq ($(pthread), 0)
+      # use -lpthread
+      LIBPTHREAD := -lpthread
+      NO_PTHREAD=0
+      # but we don't want to include libretro-common's rthread object files here
+      USE_RTHREADS=0
+      USE_ASYNC_CDROM=0
+      # so we disable some uses of threads within pcsx_rearmed.
+      # is this a good solution? I don't know!
+   else
+      LIBPTHREAD :=
+      USE_RTHREADS=0
+      USE_ASYNC_CDROM=0
+      NO_PTHREAD=1
+   endif
    DYNAREC =
    STATIC_LINKING = 1
+   HAVE_PHYSICAL_CDROM = 0
 
 # Windows
 else
@@ -589,12 +682,9 @@ HAVE_NEON_ASM = $(shell $(CC) -E -dD $(CFLAGS) include/arm_features.h | grep -q
 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
+ MAIN_LDFLAGS += -Wl,-version-script=frontend/libretro-version-script
  endif
-MAIN_LDFLAGS += -Wl,--gc-sections -Wl,--no-undefined
+MAIN_LDFLAGS += -Wl,--no-undefined
 endif
 ifdef ALLOW_LIGHTREC_ON_ARM
 CFLAGS += -DALLOW_LIGHTREC_ON_ARM