add a hack for Decap Attack
[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 STATIC_LINKING:= 0
27 TARGET_NAME := picodrive
28 LIBM := -lm
29 GIT_VERSION ?= " $(shell git rev-parse --short HEAD || echo unknown)"
30 ifneq ($(GIT_VERSION)," unknown")
31         CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\"
32 endif
33
34 asm_memory = 0
35 asm_render = 0
36 asm_ym2612 = 0
37 asm_misc = 0
38 asm_cdmemory = 0
39 asm_mix = 0
40
41 fpic :=
42
43 ifeq ($(STATIC_LINKING),1)
44 EXT=a
45 endif
46
47 # Unix
48 ifeq ($(platform), unix)
49         EXT ?= so
50         TARGET := $(TARGET_NAME)_libretro.$(EXT)
51    fpic := -fPIC
52         SHARED := -shared
53         DONT_COMPILE_IN_ZLIB = 1
54         CFLAGS += -DFAMEC_NO_GOTOS
55         use_sh2drc = 1
56
57 # Portable Linux
58 else ifeq ($(platform), linux-portable)
59         EXT ?= so
60         TARGET := $(TARGET_NAME)_libretro.$(EXT)
61         SHARED := -shared -nostdlib
62    fpic := -fPIC
63         LIBM :=
64         DONT_COMPILE_IN_ZLIB = 1
65         CFLAGS += -DFAMEC_NO_GOTOS
66         use_sh2drc = 1
67
68 # OS X
69 else ifeq ($(platform), osx)
70         EXT ?= dylib
71         TARGET := $(TARGET_NAME)_libretro.$(EXT)
72         SHARED := -dynamiclib
73    fpic := -fPIC
74         APPLE := 1
75         arch = intel
76         ifeq ($(shell uname -p),powerpc)
77                 arch = ppc
78         endif
79         ifeq ($(arch),ppc)
80                 CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
81         endif
82         OSXVER = `sw_vers -productVersion | cut -d. -f 2`
83         OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"`
84         SHARED += -mmacosx-version-min=10.1
85
86 else ifeq ($(platform), staticios)
87         TARGET := $(TARGET_NAME)_libretro_ios.a
88         APPLE := 1
89         ifeq ($(IOSSDK),)
90                 IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
91         endif
92         CC = clang -arch armv7 -arch arm64 -isysroot $(IOSSDK)
93         CXX = clang++ -arch armv7 -arch arm64 -isysroot $(IOSSDK)
94         CC_AS = perl ./tools/gas-preprocessor.pl $(CC)
95         CFLAGS += -marm 
96         CFLAGS += -DIOS
97
98         CC     += -miphoneos-version-min=8.0
99         CXX    += -miphoneos-version-min=8.0
100         CC_AS  += -miphoneos-version-min=8.0
101         CFLAGS += -miphoneos-version-min=8.0
102         ARCH := arm
103
104         STATIC_LINKING = 1
105         use_cyclone = 0
106         use_fame = 1
107         use_drz80 = 0
108         use_cz80 = 1
109         use_sh2drc = 0
110         use_svpdrc = 0
111
112 # iOS
113 else ifneq (,$(findstring ios,$(platform)))
114         TARGET := $(TARGET_NAME)_libretro_ios.dylib
115         SHARED := -dynamiclib
116    fpic := -fPIC
117         APPLE := 1
118         ifeq ($(IOSSDK),)
119                 IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
120         endif
121         CC = clang -arch armv7 -isysroot $(IOSSDK)
122         CXX = clang++ -arch armv7 -isysroot $(IOSSDK)
123         CC_AS = perl ./tools/gas-preprocessor.pl $(CC)
124         CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -marm 
125         ASFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
126         CFLAGS += -DIOS
127
128 ifeq ($(platform),ios9)
129         CC     += -miphoneos-version-min=8.0
130         CXX    += -miphoneos-version-min=8.0
131         CC_AS  += -miphoneos-version-min=8.0
132         CFLAGS += -miphoneos-version-min=8.0
133 else
134         CC     += -miphoneos-version-min=5.0
135         CXX    += -miphoneos-version-min=5.0
136         CC_AS  += -miphoneos-version-min=5.0
137         CFLAGS += -miphoneos-version-min=5.0
138 endif
139         ARCH := arm
140
141         use_cyclone = 0
142         use_fame = 1
143         use_drz80 = 0
144         use_cz80 = 1
145         use_sh2drc = 1
146         use_svpdrc = 1
147
148 # PS3
149 else ifeq ($(platform), ps3)
150         TARGET := $(TARGET_NAME)_libretro_$(platform).a
151         CC = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-gcc.exe
152         AR = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-ar.exe
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 # sncps3
171 else ifeq ($(platform), sncps3)
172         TARGET := $(TARGET_NAME)_libretro_ps3.a
173         CC = $(CELL_SDK)/host-win32/sn/bin/ps3ppusnc.exe
174         AR = $(CELL_SDK)/host-win32/sn/bin/ps3snarl.exe
175         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
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 # Lightweight PS3 Homebrew SDK
193 else ifeq ($(platform), psl1ght)
194         TARGET := $(TARGET_NAME)_libretro_$(platform).a
195         CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
196         AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT)
197         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
198         STATIC_LINKING = 1
199         NO_MMAP = 1
200         DONT_COMPILE_IN_ZLIB = 1
201         
202         asm_memory = 0
203         asm_render = 0
204         asm_ym2612 = 0
205         asm_misc = 0
206         asm_cdpico = 0
207         asm_cdmemory = 0
208         asm_mix = 0
209         use_cyclone = 0
210         use_fame = 1
211         use_drz80 = 0
212         use_cz80 = 1
213
214 # PSP
215 else ifeq ($(platform), psp1)
216     TARGET := $(TARGET_NAME)_libretro_$(platform).a
217     CC = psp-gcc$(EXE_EXT)
218     AR = psp-ar$(EXE_EXT)
219     CFLAGS += -G0 -ftracer
220     CFLAGS += -DPSP
221     STATIC_LINKING = 1
222     NO_MMAP = 1
223     DONT_COMPILE_IN_ZLIB = 1
224
225     asm_memory = 0
226     asm_render = 1
227     asm_ym2612 = 0
228     asm_misc = 0
229     asm_cdpico = 0
230     asm_cdmemory = 0
231     asm_mix = 0
232     use_cyclone = 0
233     use_fame = 1
234     use_drz80 = 0
235     use_cz80 = 1
236
237 # CTR (3DS)
238 else ifeq ($(platform), ctr)
239    TARGET := $(TARGET_NAME)_libretro_$(platform).a
240    CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT)
241    CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT)
242    AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT)
243    CFLAGS += -DARM11 -D_3DS
244    CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp
245    CFLAGS += -Wall -mword-relocations
246    CFLAGS += -fomit-frame-pointer -ffast-math
247    STATIC_LINKING = 1
248    NO_MMAP = 1
249    DONT_COMPILE_IN_ZLIB = 1
250    ARCH = arm
251    ARM_ASM = 1
252
253    asm_memory = 1
254    asm_render = 1
255    asm_ym2612 = 1
256    asm_misc = 1
257    asm_cdpico = 1
258    asm_cdmemory = 1
259    asm_mix = 1
260
261    use_cyclone = 1
262    use_fame = 0
263    use_drz80 = 1
264    use_cz80 = 0
265    use_sh2drc = 1
266    use_svpdrc = 1
267
268    OBJS +=platform/libretro/3ds/3ds_utils.o
269
270 # Raspberry Pi (original model) Raspbian
271 else ifeq ($(platform), raspberrypi)
272    CFLAGS += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6j
273    CFLAGS += -Wall -mword-relocations
274    CFLAGS += -fomit-frame-pointer -ffast-math
275    ARCH = arm
276    ARM_ASM = 1
277
278    TARGET := $(TARGET_NAME)_libretro.so
279    SHARED := -shared
280    fpic := -fPIC
281    DONT_COMPILE_IN_ZLIB = 1
282
283    asm_memory = 1
284    asm_render = 1
285    asm_ym2612 = 1
286    asm_misc = 1
287    asm_cdpico = 1
288    asm_cdmemory = 1
289    asm_mix = 1
290
291    use_cyclone = 1
292    use_fame = 0
293    use_drz80 = 1
294    use_cz80 = 0
295    use_sh2drc = 1
296    use_svpdrc = 1
297
298 # Vita
299 else ifeq ($(platform), vita)
300         TARGET := $(TARGET_NAME)_libretro_$(platform).a
301         CC = arm-vita-eabi-gcc$(EXE_EXT)
302         AR = arm-vita-eabi-ar$(EXE_EXT)
303         CFLAGS += -DVITA
304         CFLAGS += -marm -mfpu=neon -mcpu=cortex-a9 -march=armv7-a -mfloat-abi=hard -ffast-math
305         CFLAGS += -fno-asynchronous-unwind-tables -ftree-vectorize -funroll-loops
306         CFLAGS += -mword-relocations -fno-unwind-tables
307         CFLAGS += -fno-optimize-sibling-calls
308         STATIC_LINKING = 1
309         NO_MMAP = 1
310         DONT_COMPILE_IN_ZLIB = 1
311         ARCH = arm
312
313         asm_memory = 1
314         asm_render = 1
315         asm_ym2612 = 1
316         asm_misc = 1
317         asm_cdpico = 1
318         asm_cdmemory = 1
319         asm_mix = 1
320         use_cyclone = 1
321         use_fame = 0
322         use_drz80 = 1
323         use_cz80 = 0
324         use_sh2drc = 1
325         use_svpdrc = 1
326
327 # Xbox 360
328 else ifeq ($(platform), xenon)
329         TARGET := $(TARGET_NAME)_libretro_xenon360.a
330         CC = xenon-gcc$(EXE_EXT)
331         AR = xenon-ar$(EXE_EXT)
332         CFLAGS += -D__LIBXENON__ -m32 -D__ppc__
333
334 # Nintendo Game Cube
335 else ifeq ($(platform), ngc)
336         TARGET := $(TARGET_NAME)_libretro_$(platform).a
337         CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
338         AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
339         CFLAGS += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
340
341 # Nintendo Wii
342 else ifeq ($(platform), wii)
343         TARGET := $(TARGET_NAME)_libretro_$(platform).a
344         CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
345         AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
346         CFLAGS += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
347
348 # QNX
349 else ifeq ($(platform), qnx)
350         TARGET := $(TARGET_NAME)_libretro_$(platform).so
351    fpic := -fPIC
352         CC = qcc -Vgcc_ntoarmv7le
353         CC_AS = $(CC)
354         CFLAGS += -DBASE_ADDR_FIXED=0 -D__BLACKBERRY_QNX__ -marm -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp
355         ASFLAGS +=  -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
356         ARCH = arm
357         ARM_ASM = 1
358
359         use_cyclone = 0
360         use_fame = 1
361         use_drz80 = 0
362         use_cz80 = 1
363         use_sh2drc = 1
364         use_svpdrc = 1
365
366 # ARM
367 else ifneq (,$(findstring armv,$(platform)))
368         TARGET := $(TARGET_NAME)_libretro.so
369         SHARED := -shared -Wl,--no-undefined,-Bsymbolic
370    fpic := -fPIC
371         ifneq (,$(findstring cortexa5,$(platform)))
372                 CFLAGS += -marm -mcpu=cortex-a5
373                 ASFLAGS += -mcpu=cortex-a5
374         else ifneq (,$(findstring cortexa8,$(platform)))
375                 CFLAGS += -marm -mcpu=cortex-a8
376                 ASFLAGS += -mcpu=cortex-a8
377         else ifneq (,$(findstring cortexa9,$(platform)))
378                 CFLAGS += -marm -mcpu=cortex-a9
379                 ASFLAGS += -mcpu=cortex-a9
380         else ifneq (,$(findstring cortexa15a7,$(platform)))
381                 CFLAGS += -marm -mcpu=cortex-a15.cortex-a7
382                 ASFLAGS += -mcpu=cortex-a15.cortex-a7
383         else
384                 CFLAGS += -marm
385         endif
386         ifneq (,$(findstring neon,$(platform)))
387                 CFLAGS += -mfpu=neon
388                 ASFLAGS += -mfpu=neon
389         endif
390         ifneq (,$(findstring softfloat,$(platform)))
391                 CFLAGS += -mfloat-abi=softfp
392                 ASFLAGS += -mfloat-abi=softfp
393         else ifneq (,$(findstring hardfloat,$(platform)))
394                 CFLAGS += -mfloat-abi=hard
395                 ASFLAGS += -mfloat-abi=hard
396         endif
397         ifneq (,$(findstring armasm,$(platform)))
398                 ARM_ASM = 1
399         endif
400         ARCH = arm
401
402 # Emscripten
403 else ifeq ($(platform), emscripten) 
404         TARGET := $(TARGET_NAME)_libretro_$(platform).bc
405         STATIC_LINKING = 1
406         DONT_COMPILE_IN_ZLIB = 1
407
408 # GCW0
409 else ifeq ($(platform), gcw0)
410         TARGET := $(TARGET_NAME)_libretro.so
411         CC = /opt/gcw0-toolchain/usr/bin/mipsel-linux-gcc
412         AR = /opt/gcw0-toolchain/usr/bin/mipsel-linux-ar
413         SHARED := -shared -nostdlib
414         fpic := -fPIC
415         LIBM :=
416         DONT_COMPILE_IN_ZLIB = 1
417         CFLAGS += -ffast-math -march=mips32 -mtune=mips32r2 -mhard-float
418
419         asm_memory = 0
420         asm_render = 0
421         asm_ym2612 = 0
422         asm_misc = 0
423         asm_cdpico = 0
424         asm_cdmemory = 0
425         asm_mix = 0
426         use_cyclone = 0
427         use_fame = 1
428         use_drz80 = 0
429         use_cz80 = 1
430
431 # Windows
432 else
433         TARGET := $(TARGET_NAME)_libretro.dll
434         CC = gcc
435         fpic := -fPIC
436         SHARED := -shared -static-libgcc -static-libstdc++
437         CFLAGS += -D__WIN32__ -D__WIN32_LIBRETRO__
438
439 endif
440
441 CFLAGS += -DNO_ZLIB
442
443 ifeq ($(NO_MMAP),1)
444         CFLAGS += -DNO_MMAP
445 endif
446
447 ifeq ($(ARM_ASM),1)
448 asm_memory = 1
449 asm_render = 1
450 asm_ym2612 = 1
451 asm_misc = 1
452 asm_cdmemory = 1
453 asm_mix = 1
454 endif
455
456 CFLAGS += $(fpic)
457
458 ifeq ($(findstring Haiku,$(shell uname -a)),)
459         LDLIBS += $(LIBM)
460 endif
461
462 SHARED ?= -shared
463 LDFLAGS += $(SHARED) $(fpic)
464
465 PLATFORM = libretro
466 NO_CONFIG_MAK = yes
467
468 include Makefile