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