re-import all libretro code from it's fork
[picodrive.git] / Makefile.libretro
index 5d5f472..14f2dc5 100644 (file)
@@ -1,16 +1,20 @@
 # Makefile for PicoDrive (libretro)
 
 ifeq ($(platform),)
-platform = unix
-ifeq ($(shell uname -a),)
-   platform = win
-else ifneq ($(findstring MINGW,$(shell uname -a)),)
-   platform = win
-else ifneq ($(findstring Darwin,$(shell uname -a)),)
-   platform = osx
-else ifneq ($(findstring win,$(shell uname -a)),)
-   platform = win
-endif
+       platform = unix
+       ifeq ($(shell uname -a),)
+               platform = win
+       else ifneq ($(findstring MINGW,$(shell uname -a)),)
+               platform = win
+       else ifneq ($(findstring Darwin,$(shell uname -a)),)
+               platform = osx
+               arch = intel
+               ifeq ($(shell uname -p),powerpc)
+                       arch = ppc
+               endif
+       else ifneq ($(findstring win,$(shell uname -a)),)
+               platform = win
+       endif
 endif
 
 CC ?= gcc
@@ -19,7 +23,13 @@ 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
@@ -28,108 +38,410 @@ asm_misc = 0
 asm_cdmemory = 0
 asm_mix = 0
 
+fpic :=
+
+ifeq ($(STATIC_LINKING),1)
+EXT=a
+endif
+
+# Unix
 ifeq ($(platform), unix)
-   TARGET := $(TARGET_NAME)_libretro.so
-   SHARED := -shared
+       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)
+       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
-   SHARED := -dynamiclib
-else ifeq ($(platform), ios)
-   TARGET := $(TARGET_NAME)_libretro_ios.dylib
-   SHARED := -dynamiclib
-
-   CC = clang -arch armv7 -isysroot $(IOSSDK) -miphoneos-version-min=5.0
-   CXX = clang++ -arch armv7 -isysroot $(IOSSDK) -miphoneos-version-min=5.0
-   CC_AS = perl ./tools/gas-preprocessor.pl $(CC) -miphoneos-version-min=5.0
-   CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -marm 
-   ASFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
-   CFLAGS += -DIOS -miphoneos-version-min=5.0
-
-   ARCH := arm
-
-   use_cyclone = 0
-   use_fame = 1
-   use_drz80 = 0
-   use_cz80 = 1
-   use_sh2drc = 1
-   use_svpdrc = 1
+       EXT ?= dylib
+       TARGET := $(TARGET_NAME)_libretro.$(EXT)
+       SHARED := -dynamiclib
+   fpic := -fPIC
+       APPLE := 1
+       arch = intel
+       ifeq ($(shell uname -p),powerpc)
+               arch = ppc
+       endif
+       ifeq ($(arch),ppc)
+               CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
+       endif
+       OSXVER = `sw_vers -productVersion | cut -d. -f 2`
+       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 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)
+       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 
+       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
+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
+       use_fame = 1
+       use_drz80 = 0
+       use_cz80 = 1
+       use_sh2drc = 1
+       use_svpdrc = 1
+
+# 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__
+       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
+       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
+
+# 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__
+       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__ -DFAMEC_NO_GOTOS
+       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
+
+# 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__
+       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
+       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
+
+# PSP
 else ifeq ($(platform), psp1)
-   TARGET := $(TARGET_NAME)_libretro_psp1.a
-   CC = psp-gcc$(EXE_EXT)
-   AR = psp-ar$(EXE_EXT)
-   CFLAGS += -DPSP -G0
+    TARGET := $(TARGET_NAME)_libretro_$(platform).a
+    CC = psp-gcc$(EXE_EXT)
+    AR = psp-ar$(EXE_EXT)
+    CFLAGS += -G0 -ftracer
+    CFLAGS += -DPSP -D_ASM_DRAW_C_AMIPS
+    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
+
+    OBJS +=platform/libretro/psp/draw_amips.o
+
+# CTR (3DS)
+else ifeq ($(platform), ctr)
+   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 -marm -mfpu=vfp
+   CFLAGS += -Wall -mword-relocations
+   CFLAGS += -fomit-frame-pointer -ffast-math
+   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
+
+   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_$(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
+
+       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
+
+# 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__
+       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__
+       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
-   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__
+       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
-   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
-   ASFLAGS +=  -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
+       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
+       ASFLAGS +=  -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
+       ARCH = arm
+       ARM_ASM = 1
 
-   ARCH = arm
-   ARM_ASM = 1
+       use_cyclone = 0
+       use_fame = 1
+       use_drz80 = 0
+       use_cz80 = 1
+       use_sh2drc = 1
+       use_svpdrc = 1
+
+# ARM
 else ifneq (,$(findstring armv,$(platform)))
-   TARGET := $(TARGET_NAME)_libretro.so
-   SHARED := -shared -Wl,--no-undefined
-ifneq (,$(findstring cortexa8,$(platform)))
-   CFLAGS += -marm -mcpu=cortex-a8
-   ASFLAGS += -mcpu=cortex-a8
-else ifneq (,$(findstring cortexa9,$(platform)))
-   CFLAGS += -marm -mcpu=cortex-a9
-   ASFLAGS += -mcpu=cortex-a9
-endif
-   CFLAGS += -marm
-ifneq (,$(findstring neon,$(platform)))
-   CFLAGS += -mfpu=neon
-   ASFLAGS += -mfpu=neon
-endif
-ifneq (,$(findstring softfloat,$(platform)))
-   CFLAGS += -mfloat-abi=softfp
-   ASFLAGS += -mfloat-abi=softfp
-else ifneq (,$(findstring hardfloat,$(platform)))
-   CFLAGS += -mfloat-abi=hard
-   ASFLAGS += -mfloat-abi=hard
-endif
-ifneq (,$(findstring armasm,$(platform)))
-   ARM_ASM = 1
-endif
-   ARCH = arm
+       TARGET := $(TARGET_NAME)_libretro.so
+       SHARED := -shared -Wl,--no-undefined,-Bsymbolic
+   fpic := -fPIC
+       ifneq (,$(findstring cortexa5,$(platform)))
+               CFLAGS += -marm -mcpu=cortex-a5
+               ASFLAGS += -mcpu=cortex-a5
+       else ifneq (,$(findstring cortexa8,$(platform)))
+               CFLAGS += -marm -mcpu=cortex-a8
+               ASFLAGS += -mcpu=cortex-a8
+       else ifneq (,$(findstring cortexa9,$(platform)))
+               CFLAGS += -marm -mcpu=cortex-a9
+               ASFLAGS += -mcpu=cortex-a9
+       else ifneq (,$(findstring cortexa15a7,$(platform)))
+               CFLAGS += -marm -mcpu=cortex-a15.cortex-a7
+               ASFLAGS += -mcpu=cortex-a15.cortex-a7
+       else
+               CFLAGS += -marm
+       endif
+       ifneq (,$(findstring neon,$(platform)))
+               CFLAGS += -mfpu=neon
+               ASFLAGS += -mfpu=neon
+       endif
+       ifneq (,$(findstring softfloat,$(platform)))
+               CFLAGS += -mfloat-abi=softfp
+               ASFLAGS += -mfloat-abi=softfp
+       else ifneq (,$(findstring hardfloat,$(platform)))
+               CFLAGS += -mfloat-abi=hard
+               ASFLAGS += -mfloat-abi=hard
+       endif
+       ifneq (,$(findstring armasm,$(platform)))
+               ARM_ASM = 1
+       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
-   SHARED := -shared -static-libgcc -static-libstdc++
-   CFLAGS += -D__WIN32__ -D__WIN32_LIBRETRO__
+       TARGET := $(TARGET_NAME)_libretro.dll
+       CC = gcc
+       fpic := -fPIC
+       SHARED := -shared -static-libgcc -static-libstdc++
+       CFLAGS += -D__WIN32__ -D__WIN32_LIBRETRO__
+
+endif
+
+CFLAGS += -DNO_ZLIB
+
+ifeq ($(NO_MMAP),1)
+       CFLAGS += -DNO_MMAP
 endif
 
 ifeq ($(ARM_ASM),1)
@@ -141,10 +453,14 @@ asm_cdmemory = 1
 asm_mix = 1
 endif
 
-CFLAGS += -fPIC
-LDLIBS += -lm
+CFLAGS += $(fpic)
+
+ifeq ($(findstring Haiku,$(shell uname -a)),)
+       LDLIBS += $(LIBM)
+endif
+
 SHARED ?= -shared
-LDFLAGS += $(SHARED)
+LDFLAGS += $(SHARED) $(fpic)
 
 PLATFORM = libretro
 NO_CONFIG_MAK = yes