PSP build fix
[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 ifneq (,$(findstring ios,$(platform)))
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
88 ifeq ($(platform),ios9)
89         CC     += -miphoneos-version-min=8.0
90         CXX    += -miphoneos-version-min=8.0
91         CC_AS  += -miphoneos-version-min=8.0
92         CFLAGS += -miphoneos-version-min=8.0
93 else
94         CC     += -miphoneos-version-min=5.0
95         CXX    += -miphoneos-version-min=5.0
96         CC_AS  += -miphoneos-version-min=5.0
97         CFLAGS += -miphoneos-version-min=5.0
98 endif
99         ARCH := arm
100
101         use_cyclone = 0
102         use_fame = 1
103         use_drz80 = 0
104         use_cz80 = 1
105         use_sh2drc = 1
106         use_svpdrc = 1
107
108 # PS3
109 else ifeq ($(platform), ps3)
110         TARGET := $(TARGET_NAME)_libretro_ps3.a
111         CC = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-gcc.exe
112         AR = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-ar.exe
113         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
114         STATIC_LINKING = 1
115         NO_MMAP = 1
116         DONT_COMPILE_IN_ZLIB = 1
117
118         asm_memory = 0
119         asm_render = 0
120         asm_ym2612 = 0
121         asm_misc = 0
122         asm_cdpico = 0
123         asm_cdmemory = 0
124         asm_mix = 0
125         use_cyclone = 0
126         use_fame = 1
127         use_drz80 = 0
128         use_cz80 = 1
129
130 # sncps3
131 else ifeq ($(platform), sncps3)
132         TARGET := $(TARGET_NAME)_libretro_ps3.a
133         CC = $(CELL_SDK)/host-win32/sn/bin/ps3ppusnc.exe
134         AR = $(CELL_SDK)/host-win32/sn/bin/ps3snarl.exe
135         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
136         STATIC_LINKING = 1
137         NO_MMAP = 1
138         DONT_COMPILE_IN_ZLIB = 1
139
140         asm_memory = 0
141         asm_render = 0
142         asm_ym2612 = 0
143         asm_misc = 0
144         asm_cdpico = 0
145         asm_cdmemory = 0
146         asm_mix = 0
147         use_cyclone = 0
148         use_fame = 1
149         use_drz80 = 0
150         use_cz80 = 1
151
152 # Lightweight PS3 Homebrew SDK
153 else ifeq ($(platform), psl1ght)
154         TARGET := $(TARGET_NAME)_libretro_psl1ght.a
155         CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
156         AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT)
157         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
158         STATIC_LINKING = 1
159         NO_MMAP = 1
160         DONT_COMPILE_IN_ZLIB = 1
161         
162         asm_memory = 0
163         asm_render = 0
164         asm_ym2612 = 0
165         asm_misc = 0
166         asm_cdpico = 0
167         asm_cdmemory = 0
168         asm_mix = 0
169         use_cyclone = 0
170         use_fame = 1
171         use_drz80 = 0
172         use_cz80 = 1
173
174 # PSP
175 else ifeq ($(platform), psp1)
176         TARGET := $(TARGET_NAME)_libretro_psp1.a
177         CC = psp-gcc$(EXE_EXT)
178         AR = psp-ar$(EXE_EXT)
179         CFLAGS += -G0
180         STATIC_LINKING = 1
181         NO_MMAP = 1
182         DONT_COMPILE_IN_ZLIB = 1
183
184         asm_memory = 0
185         asm_render = 0
186         asm_ym2612 = 0
187         asm_misc = 0
188         asm_cdpico = 0
189         asm_cdmemory = 0
190         asm_mix = 0
191         use_cyclone = 0
192         use_fame = 1
193         use_drz80 = 0
194         use_cz80 = 1
195
196     OBJS +=platform/libretro/psp/draw_amips.o
197
198 # CTR (3DS)
199 else ifeq ($(platform), ctr)
200    TARGET := $(TARGET_NAME)_libretro_ctr.a
201    CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT)
202    CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT)
203    AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT)
204    CFLAGS += -DARM11 -D_3DS
205    CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp
206    CFLAGS += -Wall -mword-relocations
207    CFLAGS += -fomit-frame-pointer -ffast-math
208    STATIC_LINKING = 1
209    NO_MMAP = 1
210    DONT_COMPILE_IN_ZLIB = 1
211    ARCH = arm
212    ARM_ASM = 1
213
214    asm_memory = 1
215    asm_render = 1
216    asm_ym2612 = 1
217    asm_misc = 1
218    asm_cdpico = 1
219    asm_cdmemory = 1
220    asm_mix = 1
221
222    use_cyclone = 1
223    use_fame = 0
224    use_drz80 = 1
225    use_cz80 = 0
226    use_sh2drc = 1
227    use_svpdrc = 1
228
229    OBJS +=platform/libretro/3ds/3ds_utils.o
230
231 # Raspberry Pi (original model) Raspbian
232 else ifeq ($(platform), raspberrypi)
233    CFLAGS += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6j
234    CFLAGS += -Wall -mword-relocations
235    CFLAGS += -fomit-frame-pointer -ffast-math
236    ARCH = arm
237    ARM_ASM = 1
238
239    TARGET := $(TARGET_NAME)_libretro.so
240    SHARED := -shared -nostdlib
241    fpic := -fPIC
242    DONT_COMPILE_IN_ZLIB = 1
243
244    asm_memory = 1
245    asm_render = 1
246    asm_ym2612 = 1
247    asm_misc = 1
248    asm_cdpico = 1
249    asm_cdmemory = 1
250    asm_mix = 1
251
252    use_cyclone = 1
253    use_fame = 0
254    use_drz80 = 1
255    use_cz80 = 0
256    use_sh2drc = 1
257    use_svpdrc = 1
258
259 # Vita
260 else ifeq ($(platform), vita)
261         TARGET := $(TARGET_NAME)_libretro_vita.a
262         CC = arm-vita-eabi-gcc$(EXE_EXT)
263         AR = arm-vita-eabi-ar$(EXE_EXT)
264         CFLAGS += -DVITA
265         STATIC_LINKING = 1
266         NO_MMAP = 1
267         DONT_COMPILE_IN_ZLIB = 1
268         ARCH = arm
269         ARM_ASM = 1
270
271         asm_memory = 1
272         asm_render = 1
273         asm_ym2612 = 1
274         asm_misc = 0
275         asm_cdpico = 0
276         asm_cdmemory = 0
277         asm_mix = 0
278         use_cyclone = 0
279         use_fame = 1
280         use_drz80 = 1
281         use_cz80 = 0
282
283 # Xbox 360
284 else ifeq ($(platform), xenon)
285         TARGET := $(TARGET_NAME)_libretro_xenon360.a
286         CC = xenon-gcc$(EXE_EXT)
287         AR = xenon-ar$(EXE_EXT)
288         CFLAGS += -D__LIBXENON__ -m32 -D__ppc__
289
290 # Nintendo Game Cube
291 else ifeq ($(platform), ngc)
292         TARGET := $(TARGET_NAME)_libretro_ngc.a
293         CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
294         AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
295         CFLAGS += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
296
297 # Nintendo Wii
298 else ifeq ($(platform), wii)
299         TARGET := libretro_$(TARGET_NAME)_wii.a
300         CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
301         AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
302         CFLAGS += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
303
304 # QNX
305 else ifeq ($(platform), qnx)
306         TARGET := $(TARGET_NAME)_libretro_qnx.so
307    fpic := -fPIC
308         CC = qcc -Vgcc_ntoarmv7le
309         CC_AS = $(CC)
310         CFLAGS += -DBASE_ADDR_FIXED=0 -D__BLACKBERRY_QNX__ -marm -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp
311         ASFLAGS +=  -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
312         ARCH = arm
313         ARM_ASM = 1
314
315         use_cyclone = 0
316         use_fame = 1
317         use_drz80 = 0
318         use_cz80 = 1
319         use_sh2drc = 1
320         use_svpdrc = 1
321
322 # ARM
323 else ifneq (,$(findstring armv,$(platform)))
324         TARGET := $(TARGET_NAME)_libretro.so
325         SHARED := -shared -Wl,--no-undefined
326    fpic := -fPIC
327         ifneq (,$(findstring cortexa5,$(platform)))
328                 CFLAGS += -marm -mcpu=cortex-a5
329                 ASFLAGS += -mcpu=cortex-a5
330         else ifneq (,$(findstring cortexa8,$(platform)))
331                 CFLAGS += -marm -mcpu=cortex-a8
332                 ASFLAGS += -mcpu=cortex-a8
333         else ifneq (,$(findstring cortexa9,$(platform)))
334                 CFLAGS += -marm -mcpu=cortex-a9
335                 ASFLAGS += -mcpu=cortex-a9
336         else ifneq (,$(findstring cortexa15a7,$(platform)))
337                 CFLAGS += -marm -mcpu=cortex-a15.cortex-a7
338                 ASFLAGS += -mcpu=cortex-a15.cortex-a7
339         else
340                 CFLAGS += -marm
341         endif
342         ifneq (,$(findstring neon,$(platform)))
343                 CFLAGS += -mfpu=neon
344                 ASFLAGS += -mfpu=neon
345         endif
346         ifneq (,$(findstring softfloat,$(platform)))
347                 CFLAGS += -mfloat-abi=softfp
348                 ASFLAGS += -mfloat-abi=softfp
349         else ifneq (,$(findstring hardfloat,$(platform)))
350                 CFLAGS += -mfloat-abi=hard
351                 ASFLAGS += -mfloat-abi=hard
352         endif
353         ifneq (,$(findstring armasm,$(platform)))
354                 ARM_ASM = 1
355         endif
356         ARCH = arm
357
358 # Windows
359 else
360         TARGET := $(TARGET_NAME)_libretro.dll
361         CC = gcc
362         fpic := -fPIC
363         SHARED := -shared -static-libgcc -static-libstdc++
364         CFLAGS += -D__WIN32__ -D__WIN32_LIBRETRO__
365
366 endif
367
368 CFLAGS += -DNO_ZLIB
369
370 ifeq ($(NO_MMAP),1)
371         CFLAGS += -DNO_MMAP
372 endif
373
374 ifeq ($(ARM_ASM),1)
375         asm_memory = 1
376         asm_render = 1
377         asm_ym2612 = 1
378         asm_misc = 1
379         asm_cdpico = 1
380         asm_cdmemory = 1
381         asm_mix = 1
382 endif
383
384 CFLAGS += $(fpic)
385 ifeq ($(findstring Haiku,$(shell uname -a)),)
386         LDLIBS += $(LIBM)
387 endif
388
389 SHARED ?= -shared
390 LDFLAGS += $(SHARED) $(fpic)
391
392 PLATFORM = libretro
393 NO_CONFIG_MAK = yes
394
395 include Makefile