a7b9c811d282b102847ff05e065fd5ed60cd10a4
[picodrive.git] / Makefile.libretro
1 # Makefile for PicoDrive (libretro)
2
3 ifeq ($(platform),)
4         platform = unix
5         ifeq ($(shell uname -a),)
6                 platform = win
7         else ifneq ($(findstring MINGW,$(shell uname -a)),)
8                 platform = win
9         else ifneq ($(findstring Darwin,$(shell uname -a)),)
10                 platform = osx
11                 arch = intel
12                 ifeq ($(shell uname -p),powerpc)
13                         arch = ppc
14                 endif
15         else ifneq ($(findstring win,$(shell uname -a)),)
16                 platform = win
17         endif
18 endif
19
20 CC ?= gcc
21 CXX ?= g++
22 AS ?= as
23 CC_AS ?= $(CC)
24 CFLAGS ?=
25
26 TARGET_NAME := picodrive
27 LIBM := -lm
28
29 asm_memory = 0
30 asm_render = 0
31 asm_ym2612 = 0
32 asm_misc = 0
33 asm_cdpico = 0
34 asm_cdmemory = 0
35 asm_mix = 0
36
37 fpic :=
38 # Unix
39 ifeq ($(platform), unix)
40         TARGET := $(TARGET_NAME)_libretro.so
41    fpic := -fPIC
42         SHARED := -shared
43         DONT_COMPILE_IN_ZLIB = 1
44         CFLAGS += -DFAMEC_NO_GOTOS
45
46 # Portable Linux
47 else ifeq ($(platform), linux-portable)
48         TARGET := $(TARGET_NAME)_libretro.so
49         SHARED := -shared -nostdlib
50    fpic := -fPIC
51         LIBM :=
52         DONT_COMPILE_IN_ZLIB = 1
53         CFLAGS += -DFAMEC_NO_GOTOS
54
55 # OS X
56 else ifeq ($(platform), osx)
57         TARGET := $(TARGET_NAME)_libretro.dylib
58         SHARED := -dynamiclib
59    fpic := -fPIC
60         APPLE := 1
61         arch = intel
62         ifeq ($(shell uname -p),powerpc)
63                 arch = ppc
64         endif
65         ifeq ($(arch),ppc)
66                 CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
67         endif
68         OSXVER = `sw_vers -productVersion | cut -d. -f 2`
69         OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"`
70         SHARED += -mmacosx-version-min=10.1
71
72 # iOS
73 else ifeq ($(platform), ios)
74         TARGET := $(TARGET_NAME)_libretro_ios.dylib
75         SHARED := -dynamiclib
76    fpic := -fPIC
77         APPLE := 1
78         ifeq ($(IOSSDK),)
79                 IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
80         endif
81         CC = clang -arch armv7 -isysroot $(IOSSDK)
82         CXX = clang++ -arch armv7 -isysroot $(IOSSDK)
83         CC_AS = perl ./tools/gas-preprocessor.pl $(CC)
84         CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -marm 
85         ASFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
86         CFLAGS += -DIOS
87         OSXVER = `sw_vers -productVersion | cut -d. -f 2`
88         OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"`
89         ifeq ($(OSX_LT_MAVERICKS),"YES")
90                 CC += -miphoneos-version-min=5.0
91                 CXX += -miphoneos-version-min=5.0
92                 CC_AS += -miphoneos-version-min=5.0
93                 CFLAGS += -miphoneos-version-min=5.0
94         endif
95         ARCH := arm
96
97         use_cyclone = 0
98         use_fame = 1
99         use_drz80 = 0
100         use_cz80 = 1
101         use_sh2drc = 1
102         use_svpdrc = 1
103
104 # PS3
105 else ifeq ($(platform), ps3)
106         TARGET := $(TARGET_NAME)_libretro_ps3.a
107         CC = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-gcc.exe
108         AR = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-ar.exe
109         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
110         STATIC_LINKING = 1
111         NO_MMAP = 1
112         DONT_COMPILE_IN_ZLIB = 1
113
114         asm_memory = 0
115         asm_render = 0
116         asm_ym2612 = 0
117         asm_misc = 0
118         asm_cdpico = 0
119         asm_cdmemory = 0
120         asm_mix = 0
121         use_cyclone = 0
122         use_fame = 1
123         use_drz80 = 0
124         use_cz80 = 1
125
126 # sncps3
127 else ifeq ($(platform), sncps3)
128         TARGET := $(TARGET_NAME)_libretro_ps3.a
129         CC = $(CELL_SDK)/host-win32/sn/bin/ps3ppusnc.exe
130         AR = $(CELL_SDK)/host-win32/sn/bin/ps3snarl.exe
131         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
132         STATIC_LINKING = 1
133         NO_MMAP = 1
134         DONT_COMPILE_IN_ZLIB = 1
135
136         asm_memory = 0
137         asm_render = 0
138         asm_ym2612 = 0
139         asm_misc = 0
140         asm_cdpico = 0
141         asm_cdmemory = 0
142         asm_mix = 0
143         use_cyclone = 0
144         use_fame = 1
145         use_drz80 = 0
146         use_cz80 = 1
147
148 # Lightweight PS3 Homebrew SDK
149 else ifeq ($(platform), psl1ght)
150         TARGET := $(TARGET_NAME)_libretro_psl1ght.a
151         CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
152         AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT)
153         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
154         STATIC_LINKING = 1
155         NO_MMAP = 1
156         DONT_COMPILE_IN_ZLIB = 1
157         
158         asm_memory = 0
159         asm_render = 0
160         asm_ym2612 = 0
161         asm_misc = 0
162         asm_cdpico = 0
163         asm_cdmemory = 0
164         asm_mix = 0
165         use_cyclone = 0
166         use_fame = 1
167         use_drz80 = 0
168         use_cz80 = 1
169
170 # PSP
171 else ifeq ($(platform), psp1)
172         TARGET := $(TARGET_NAME)_libretro_psp1.a
173         CC = psp-gcc$(EXE_EXT)
174         AR = psp-ar$(EXE_EXT)
175         CFLAGS += -G0
176         STATIC_LINKING = 1
177         NO_MMAP = 1
178         DONT_COMPILE_IN_ZLIB = 1
179
180         asm_memory = 0
181         asm_render = 0
182         asm_ym2612 = 0
183         asm_misc = 0
184         asm_cdpico = 0
185         asm_cdmemory = 0
186         asm_mix = 0
187         use_cyclone = 0
188         use_fame = 1
189         use_drz80 = 0
190         use_cz80 = 1
191
192
193
194 # CTR (3DS)
195 else ifeq ($(platform), ctr)
196    TARGET := $(TARGET_NAME)_libretro_ctr.a
197    CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT)
198    CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT)
199    AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT)
200    CFLAGS += -DARM11 -D_3DS
201    CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp
202    CFLAGS += -Wall -mword-relocations
203    CFLAGS += -fomit-frame-pointer -ffast-math
204    STATIC_LINKING = 1
205    NO_MMAP = 1
206    DONT_COMPILE_IN_ZLIB = 1
207    ARCH = arm
208    ARM_ASM = 1
209
210    asm_memory = 1
211    asm_render = 1
212    asm_ym2612 = 1
213    asm_misc = 1
214    asm_cdpico = 1
215    asm_cdmemory = 1
216    asm_mix = 1
217
218    use_cyclone = 1
219    use_fame = 0
220    use_drz80 = 1
221    use_cz80 = 0
222    use_sh2drc = 1
223    use_svpdrc = 1
224
225    OBJS +=platform/libretro/3ds/3ds_utils.o
226
227 # Vita
228 else ifeq ($(platform), vita)
229         TARGET := $(TARGET_NAME)_libretro_vita.a
230         CC = arm-vita-eabi-gcc$(EXE_EXT)
231         AR = arm-vita-eabi-ar$(EXE_EXT)
232         CFLAGS += -DVITA
233         STATIC_LINKING = 1
234         NO_MMAP = 1
235         DONT_COMPILE_IN_ZLIB = 1
236         ARCH = arm
237         ARM_ASM = 1
238
239         asm_memory = 1
240         asm_render = 1
241         asm_ym2612 = 1
242         asm_misc = 0
243         asm_cdpico = 0
244         asm_cdmemory = 0
245         asm_mix = 0
246         use_cyclone = 0
247         use_fame = 1
248         use_drz80 = 1
249         use_cz80 = 0
250
251 # Xbox 360
252 else ifeq ($(platform), xenon)
253         TARGET := $(TARGET_NAME)_libretro_xenon360.a
254         CC = xenon-gcc$(EXE_EXT)
255         AR = xenon-ar$(EXE_EXT)
256         CFLAGS += -D__LIBXENON__ -m32 -D__ppc__
257
258 # Nintendo Game Cube
259 else ifeq ($(platform), ngc)
260         TARGET := $(TARGET_NAME)_libretro_ngc.a
261         CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
262         AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
263         CFLAGS += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
264
265 # Nintendo Wii
266 else ifeq ($(platform), wii)
267         TARGET := libretro_$(TARGET_NAME)_wii.a
268         CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
269         AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
270         CFLAGS += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
271
272 # QNX
273 else ifeq ($(platform), qnx)
274         TARGET := $(TARGET_NAME)_libretro_qnx.so
275    fpic := -fPIC
276         CC = qcc -Vgcc_ntoarmv7le
277         CC_AS = $(CC)
278         CFLAGS += -DBASE_ADDR_FIXED=0 -D__BLACKBERRY_QNX__ -marm -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp
279         ASFLAGS +=  -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
280         ARCH = arm
281         ARM_ASM = 1
282
283         use_cyclone = 0
284         use_fame = 1
285         use_drz80 = 0
286         use_cz80 = 1
287         use_sh2drc = 1
288         use_svpdrc = 1
289
290 # ARM
291 else ifneq (,$(findstring armv,$(platform)))
292         TARGET := $(TARGET_NAME)_libretro.so
293         SHARED := -shared -Wl,--no-undefined
294    fpic := -fPIC
295         ifneq (,$(findstring cortexa5,$(platform)))
296                 CFLAGS += -marm -mcpu=cortex-a5
297                 ASFLAGS += -mcpu=cortex-a5
298         else ifneq (,$(findstring cortexa8,$(platform)))
299                 CFLAGS += -marm -mcpu=cortex-a8
300                 ASFLAGS += -mcpu=cortex-a8
301         else ifneq (,$(findstring cortexa9,$(platform)))
302                 CFLAGS += -marm -mcpu=cortex-a9
303                 ASFLAGS += -mcpu=cortex-a9
304         else ifneq (,$(findstring cortexa15a7,$(platform)))
305                 CFLAGS += -marm -mcpu=cortex-a15.cortex-a7
306                 ASFLAGS += -mcpu=cortex-a15.cortex-a7
307         else
308                 CFLAGS += -marm
309         endif
310         ifneq (,$(findstring neon,$(platform)))
311                 CFLAGS += -mfpu=neon
312                 ASFLAGS += -mfpu=neon
313         endif
314         ifneq (,$(findstring softfloat,$(platform)))
315                 CFLAGS += -mfloat-abi=softfp
316                 ASFLAGS += -mfloat-abi=softfp
317         else ifneq (,$(findstring hardfloat,$(platform)))
318                 CFLAGS += -mfloat-abi=hard
319                 ASFLAGS += -mfloat-abi=hard
320         endif
321         ifneq (,$(findstring armasm,$(platform)))
322                 ARM_ASM = 1
323         endif
324         ARCH = arm
325
326 # Windows
327 else
328         TARGET := $(TARGET_NAME)_libretro.dll
329         CC = gcc
330         fpic := -fPIC
331         SHARED := -shared -static-libgcc -static-libstdc++
332         CFLAGS += -D__WIN32__ -D__WIN32_LIBRETRO__
333
334 endif
335
336 CFLAGS += -DNO_ZLIB
337
338 ifeq ($(NO_MMAP),1)
339         CFLAGS += -DNO_MMAP
340 endif
341
342 ifeq ($(ARM_ASM),1)
343         asm_memory = 1
344         asm_render = 1
345         asm_ym2612 = 1
346         asm_misc = 1
347         asm_cdpico = 1
348         asm_cdmemory = 1
349         asm_mix = 1
350 endif
351
352 CFLAGS += $(fpic)
353 ifeq ($(findstring Haiku,$(shell uname -a)),)
354         LDLIBS += $(LIBM)
355 endif
356
357 SHARED ?= -shared
358 LDFLAGS += $(SHARED) $(fpic)
359
360 PLATFORM = libretro
361 NO_CONFIG_MAK = yes
362
363 include Makefile