Merge branch 'libretro' into libretro-reset
[picodrive.git] / Makefile.libretro
index dc9bd66..b35a0da 100644 (file)
@@ -23,36 +23,52 @@ AS ?= as
 CC_AS ?= $(CC)
 CFLAGS ?=
 
+STATIC_LINKING:= 0
 TARGET_NAME := picodrive
 LIBM := -lm
+GIT_VERSION := " $(shell git rev-parse --short HEAD || echo unknown)"
+ifneq ($(GIT_VERSION)," unknown")
+       CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\"
+endif
 
 asm_memory = 0
 asm_render = 0
 asm_ym2612 = 0
 asm_misc = 0
-asm_cdpico = 0
 asm_cdmemory = 0
 asm_mix = 0
 
+fpic :=
+
+ifeq ($(STATIC_LINKING),1)
+EXT=a
+endif
+
 # Unix
 ifeq ($(platform), unix)
-       TARGET := $(TARGET_NAME)_libretro.so
+       EXT ?= so
+       TARGET := $(TARGET_NAME)_libretro.$(EXT)
+   fpic := -fPIC
        SHARED := -shared
        DONT_COMPILE_IN_ZLIB = 1
        CFLAGS += -DFAMEC_NO_GOTOS
 
 # Portable Linux
 else ifeq ($(platform), linux-portable)
-       TARGET := $(TARGET_NAME)_libretro.so
+       EXT ?= so
+       TARGET := $(TARGET_NAME)_libretro.$(EXT)
        SHARED := -shared -nostdlib
+   fpic := -fPIC
        LIBM :=
        DONT_COMPILE_IN_ZLIB = 1
        CFLAGS += -DFAMEC_NO_GOTOS
 
 # OS X
 else ifeq ($(platform), osx)
-       TARGET := $(TARGET_NAME)_libretro.dylib
+       EXT ?= dylib
+       TARGET := $(TARGET_NAME)_libretro.$(EXT)
        SHARED := -dynamiclib
+   fpic := -fPIC
        APPLE := 1
        arch = intel
        ifeq ($(shell uname -p),powerpc)
@@ -65,10 +81,37 @@ else ifeq ($(platform), osx)
        OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"`
        SHARED += -mmacosx-version-min=10.1
 
+else ifeq ($(platform), staticios)
+       TARGET := $(TARGET_NAME)_libretro_ios.a
+       APPLE := 1
+       ifeq ($(IOSSDK),)
+               IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
+       endif
+       CC = clang -arch armv7 -arch arm64 -isysroot $(IOSSDK)
+       CXX = clang++ -arch armv7 -arch arm64 -isysroot $(IOSSDK)
+       CC_AS = perl ./tools/gas-preprocessor.pl $(CC)
+       CFLAGS += -marm 
+       CFLAGS += -DIOS
+
+       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
+       ARCH := arm
+
+       STATIC_LINKING = 1
+       use_cyclone = 0
+       use_fame = 1
+       use_drz80 = 0
+       use_cz80 = 1
+       use_sh2drc = 0
+       use_svpdrc = 0
+
 # iOS
-else ifeq ($(platform), ios)
+else ifneq (,$(findstring ios,$(platform)))
        TARGET := $(TARGET_NAME)_libretro_ios.dylib
        SHARED := -dynamiclib
+   fpic := -fPIC
        APPLE := 1
        ifeq ($(IOSSDK),)
                IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
@@ -79,14 +122,18 @@ else ifeq ($(platform), ios)
        CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -marm 
        ASFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
        CFLAGS += -DIOS
-       OSXVER = `sw_vers -productVersion | cut -d. -f 2`
-       OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"`
-       ifeq ($(OSX_LT_MAVERICKS),"YES")
-               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
-       endif
+
+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
+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
+endif
        ARCH := arm
 
        use_cyclone = 0
@@ -98,7 +145,7 @@ else ifeq ($(platform), ios)
 
 # PS3
 else ifeq ($(platform), ps3)
-       TARGET := $(TARGET_NAME)_libretro_ps3.a
+       TARGET := $(TARGET_NAME)_libretro_$(platform).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__ -DFAMEC_NO_GOTOS
@@ -142,7 +189,7 @@ else ifeq ($(platform), sncps3)
 
 # Lightweight PS3 Homebrew SDK
 else ifeq ($(platform), psl1ght)
-       TARGET := $(TARGET_NAME)_libretro_psl1ght.a
+       TARGET := $(TARGET_NAME)_libretro_$(platform).a
        CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
        AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT)
        CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
@@ -164,80 +211,116 @@ else ifeq ($(platform), psl1ght)
 
 # PSP
 else ifeq ($(platform), psp1)
-       TARGET := $(TARGET_NAME)_libretro_psp1.a
-       CC = psp-gcc$(EXE_EXT)
-       AR = psp-ar$(EXE_EXT)
-       CFLAGS += -G0
-       STATIC_LINKING = 1
-       NO_MMAP = 1
-       DONT_COMPILE_IN_ZLIB = 1
-
-       asm_memory = 0
-       asm_render = 0
-       asm_ym2612 = 0
-       asm_misc = 0
-       asm_cdpico = 0
-       asm_cdmemory = 0
-       asm_mix = 0
-       use_cyclone = 0
-       use_fame = 1
-       use_drz80 = 0
-       use_cz80 = 1
-
-
+    TARGET := $(TARGET_NAME)_libretro_$(platform).a
+    CC = psp-gcc$(EXE_EXT)
+    AR = psp-ar$(EXE_EXT)
+    CFLAGS += -G0 -ftracer
+    CFLAGS += -DPSP
+    STATIC_LINKING = 1
+    NO_MMAP = 1
+    DONT_COMPILE_IN_ZLIB = 1
+
+    asm_memory = 0
+    asm_render = 1
+    asm_ym2612 = 0
+    asm_misc = 0
+    asm_cdpico = 0
+    asm_cdmemory = 0
+    asm_mix = 0
+    use_cyclone = 0
+    use_fame = 1
+    use_drz80 = 0
+    use_cz80 = 1
 
 # CTR (3DS)
 else ifeq ($(platform), ctr)
-   TARGET := $(TARGET_NAME)_libretro_ctr.a
+   TARGET := $(TARGET_NAME)_libretro_$(platform).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
-   CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard
+   CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp
    CFLAGS += -Wall -mword-relocations
    CFLAGS += -fomit-frame-pointer -ffast-math
-   CFLAGS += -D_3DS
-   PLATFORM_DEFINES := -D_3DS
    STATIC_LINKING = 1
    NO_MMAP = 1
    DONT_COMPILE_IN_ZLIB = 1
+   ARCH = arm
+   ARM_ASM = 1
+
+   asm_memory = 1
+   asm_render = 1
+   asm_ym2612 = 1
+   asm_misc = 1
+   asm_cdpico = 1
+   asm_cdmemory = 1
+   asm_mix = 1
+
+   use_cyclone = 1
+   use_fame = 0
+   use_drz80 = 1
+   use_cz80 = 0
+   use_sh2drc = 1
+   use_svpdrc = 1
+
+   OBJS +=platform/libretro/3ds/3ds_utils.o
+
+# Raspberry Pi (original model) Raspbian
+else ifeq ($(platform), raspberrypi)
+   CFLAGS += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6j
+   CFLAGS += -Wall -mword-relocations
+   CFLAGS += -fomit-frame-pointer -ffast-math
+   ARCH = arm
+   ARM_ASM = 1
 
-        asm_memory = 0
-        asm_render = 0
-        asm_ym2612 = 0
-        asm_misc = 0
-        asm_cdpico = 0
-        asm_cdmemory = 0
-        asm_mix = 0
-        use_cyclone = 0
-        use_fame = 1
-        use_drz80 = 0
-        use_cz80 = 1
+   TARGET := $(TARGET_NAME)_libretro.so
+   SHARED := -shared
+   fpic := -fPIC
+   DONT_COMPILE_IN_ZLIB = 1
 
+   asm_memory = 1
+   asm_render = 1
+   asm_ym2612 = 1
+   asm_misc = 1
+   asm_cdpico = 1
+   asm_cdmemory = 1
+   asm_mix = 1
+
+   use_cyclone = 1
+   use_fame = 0
+   use_drz80 = 1
+   use_cz80 = 0
+   use_sh2drc = 1
+   use_svpdrc = 1
 
 # Vita
 else ifeq ($(platform), vita)
-       TARGET := $(TARGET_NAME)_libretro_vita.a
+       TARGET := $(TARGET_NAME)_libretro_$(platform).a
        CC = arm-vita-eabi-gcc$(EXE_EXT)
        AR = arm-vita-eabi-ar$(EXE_EXT)
        CFLAGS += -DVITA
+       CFLAGS += -marm -mfpu=neon -mcpu=cortex-a9 -march=armv7-a -mfloat-abi=hard -ffast-math
+       CFLAGS += -fno-asynchronous-unwind-tables -ftree-vectorize -funroll-loops
+       CFLAGS += -mword-relocations -fno-unwind-tables
+       CFLAGS += -fno-optimize-sibling-calls
        STATIC_LINKING = 1
        NO_MMAP = 1
        DONT_COMPILE_IN_ZLIB = 1
        ARCH = arm
-       ARM_ASM = 1
 
        asm_memory = 1
        asm_render = 1
        asm_ym2612 = 1
-       asm_misc = 0
-       asm_cdpico = 0
-       asm_cdmemory = 0
-       asm_mix = 0
-       use_cyclone = 0
-       use_fame = 1
+       asm_misc = 1
+       asm_cdpico = 1
+       asm_cdmemory = 1
+       asm_mix = 1
+       use_cyclone = 1
+       use_fame = 0
        use_drz80 = 1
        use_cz80 = 0
+       use_sh2drc = 1
+       use_svpdrc = 1
 
 # Xbox 360
 else ifeq ($(platform), xenon)
@@ -248,21 +331,22 @@ else ifeq ($(platform), xenon)
 
 # Nintendo Game Cube
 else ifeq ($(platform), ngc)
-       TARGET := $(TARGET_NAME)_libretro_ngc.a
+       TARGET := $(TARGET_NAME)_libretro_$(platform).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
+       TARGET := $(TARGET_NAME)_libretro_$(platform).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__
 
 # QNX
 else ifeq ($(platform), qnx)
-       TARGET := $(TARGET_NAME)_libretro_qnx.so
+       TARGET := $(TARGET_NAME)_libretro_$(platform).so
+   fpic := -fPIC
        CC = qcc -Vgcc_ntoarmv7le
        CC_AS = $(CC)
        CFLAGS += -DBASE_ADDR_FIXED=0 -D__BLACKBERRY_QNX__ -marm -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp
@@ -280,7 +364,8 @@ else ifeq ($(platform), qnx)
 # ARM
 else ifneq (,$(findstring armv,$(platform)))
        TARGET := $(TARGET_NAME)_libretro.so
-       SHARED := -shared -Wl,--no-undefined
+       SHARED := -shared -Wl,--no-undefined,-Bsymbolic
+   fpic := -fPIC
        ifneq (,$(findstring cortexa5,$(platform)))
                CFLAGS += -marm -mcpu=cortex-a5
                ASFLAGS += -mcpu=cortex-a5
@@ -312,11 +397,40 @@ else ifneq (,$(findstring armv,$(platform)))
        endif
        ARCH = arm
 
+# Emscripten
+else ifeq ($(platform), emscripten) 
+       TARGET := $(TARGET_NAME)_libretro_$(platform).bc
+       STATIC_LINKING = 1
+       DONT_COMPILE_IN_ZLIB = 1
+
+# GCW0
+else ifeq ($(platform), gcw0)
+       TARGET := $(TARGET_NAME)_libretro.so
+       CC = /opt/gcw0-toolchain/usr/bin/mipsel-linux-gcc
+       AR = /opt/gcw0-toolchain/usr/bin/mipsel-linux-ar
+       SHARED := -shared -nostdlib
+        fpic := -fPIC
+       LIBM :=
+       DONT_COMPILE_IN_ZLIB = 1
+       CFLAGS += -ffast-math -march=mips32 -mtune=mips32r2 -mhard-float
+
+       asm_memory = 0
+       asm_render = 0
+       asm_ym2612 = 0
+       asm_misc = 0
+       asm_cdpico = 0
+       asm_cdmemory = 0
+       asm_mix = 0
+       use_cyclone = 0
+       use_fame = 1
+       use_drz80 = 0
+       use_cz80 = 1
+
 # Windows
 else
        TARGET := $(TARGET_NAME)_libretro.dll
        CC = gcc
-       LD_FLAGS := -fPIC
+       fpic := -fPIC
        SHARED := -shared -static-libgcc -static-libstdc++
        CFLAGS += -D__WIN32__ -D__WIN32_LIBRETRO__
 
@@ -329,22 +443,22 @@ ifeq ($(NO_MMAP),1)
 endif
 
 ifeq ($(ARM_ASM),1)
-       asm_memory = 1
-       asm_render = 1
-       asm_ym2612 = 1
-       asm_misc = 1
-       asm_cdpico = 1
-       asm_cdmemory = 1
-       asm_mix = 1
+asm_memory = 1
+asm_render = 1
+asm_ym2612 = 1
+asm_misc = 1
+asm_cdmemory = 1
+asm_mix = 1
 endif
 
-CFLAGS += -fPIC
+CFLAGS += $(fpic)
+
 ifeq ($(findstring Haiku,$(shell uname -a)),)
        LDLIBS += $(LIBM)
 endif
 
 SHARED ?= -shared
-LDFLAGS += $(SHARED)
+LDFLAGS += $(SHARED) $(fpic)
 
 PLATFORM = libretro
 NO_CONFIG_MAK = yes