Merge pull request #41 from orbea/debug
[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_$(platform).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_$(platform).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_$(platform).a
177     CC = psp-gcc$(EXE_EXT)
178     AR = psp-ar$(EXE_EXT)
179     CFLAGS += -G0 -ftracer
180     CFLAGS += -DPSP -D_ASM_DRAW_C_AMIPS
181     STATIC_LINKING = 1
182     NO_MMAP = 1
183     DONT_COMPILE_IN_ZLIB = 1
184
185     asm_memory = 0
186     asm_render = 1
187     asm_ym2612 = 0
188     asm_misc = 0
189     asm_cdpico = 0
190     asm_cdmemory = 0
191     asm_mix = 0
192     use_cyclone = 0
193     use_fame = 1
194     use_drz80 = 0
195     use_cz80 = 1
196
197     OBJS +=platform/libretro/psp/draw_amips.o
198
199 # CTR (3DS)
200 else ifeq ($(platform), ctr)
201    TARGET := $(TARGET_NAME)_libretro_$(platform).a
202    CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT)
203    CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT)
204    AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT)
205    CFLAGS += -DARM11 -D_3DS
206    CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp
207    CFLAGS += -Wall -mword-relocations
208    CFLAGS += -fomit-frame-pointer -ffast-math
209    STATIC_LINKING = 1
210    NO_MMAP = 1
211    DONT_COMPILE_IN_ZLIB = 1
212    ARCH = arm
213    ARM_ASM = 1
214
215    asm_memory = 1
216    asm_render = 1
217    asm_ym2612 = 1
218    asm_misc = 1
219    asm_cdpico = 1
220    asm_cdmemory = 1
221    asm_mix = 1
222
223    use_cyclone = 1
224    use_fame = 0
225    use_drz80 = 1
226    use_cz80 = 0
227    use_sh2drc = 1
228    use_svpdrc = 1
229
230    OBJS +=platform/libretro/3ds/3ds_utils.o
231
232 # Raspberry Pi (original model) Raspbian
233 else ifeq ($(platform), raspberrypi)
234    CFLAGS += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6j
235    CFLAGS += -Wall -mword-relocations
236    CFLAGS += -fomit-frame-pointer -ffast-math
237    ARCH = arm
238    ARM_ASM = 1
239
240    TARGET := $(TARGET_NAME)_libretro.so
241    SHARED := -shared
242    fpic := -fPIC
243    DONT_COMPILE_IN_ZLIB = 1
244
245    asm_memory = 1
246    asm_render = 1
247    asm_ym2612 = 1
248    asm_misc = 1
249    asm_cdpico = 1
250    asm_cdmemory = 1
251    asm_mix = 1
252
253    use_cyclone = 1
254    use_fame = 0
255    use_drz80 = 1
256    use_cz80 = 0
257    use_sh2drc = 1
258    use_svpdrc = 1
259
260 # Vita
261 else ifeq ($(platform), vita)
262         TARGET := $(TARGET_NAME)_libretro_$(platform).a
263         CC = arm-vita-eabi-gcc$(EXE_EXT)
264         AR = arm-vita-eabi-ar$(EXE_EXT)
265         CFLAGS += -DVITA
266         CFLAGS += -marm -mfpu=neon -mcpu=cortex-a9 -march=armv7-a -mfloat-abi=hard -ffast-math
267         CFLAGS += -fno-asynchronous-unwind-tables -ftree-vectorize -funroll-loops
268         CFLAGS += -mword-relocations -fno-unwind-tables
269         CFLAGS += -fno-optimize-sibling-calls
270         STATIC_LINKING = 1
271         NO_MMAP = 1
272         DONT_COMPILE_IN_ZLIB = 1
273         ARCH = arm
274
275         asm_memory = 1
276         asm_render = 1
277         asm_ym2612 = 1
278         asm_misc = 1
279         asm_cdpico = 1
280         asm_cdmemory = 1
281         asm_mix = 1
282         use_cyclone = 1
283         use_fame = 0
284         use_drz80 = 1
285         use_cz80 = 0
286         use_sh2drc = 1
287         use_svpdrc = 1
288
289 # Xbox 360
290 else ifeq ($(platform), xenon)
291         TARGET := $(TARGET_NAME)_libretro_xenon360.a
292         CC = xenon-gcc$(EXE_EXT)
293         AR = xenon-ar$(EXE_EXT)
294         CFLAGS += -D__LIBXENON__ -m32 -D__ppc__
295
296 # Nintendo Game Cube
297 else ifeq ($(platform), ngc)
298         TARGET := $(TARGET_NAME)_libretro_$(platform).a
299         CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
300         AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
301         CFLAGS += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
302
303 # Nintendo Wii
304 else ifeq ($(platform), wii)
305         TARGET := $(TARGET_NAME)_libretro_$(platform).a
306         CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
307         AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
308         CFLAGS += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
309
310 # QNX
311 else ifeq ($(platform), qnx)
312         TARGET := $(TARGET_NAME)_libretro_$(platform).so
313    fpic := -fPIC
314         CC = qcc -Vgcc_ntoarmv7le
315         CC_AS = $(CC)
316         CFLAGS += -DBASE_ADDR_FIXED=0 -D__BLACKBERRY_QNX__ -marm -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp
317         ASFLAGS +=  -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
318         ARCH = arm
319         ARM_ASM = 1
320
321         use_cyclone = 0
322         use_fame = 1
323         use_drz80 = 0
324         use_cz80 = 1
325         use_sh2drc = 1
326         use_svpdrc = 1
327
328 # ARM
329 else ifneq (,$(findstring armv,$(platform)))
330         TARGET := $(TARGET_NAME)_libretro.so
331         SHARED := -shared -Wl,--no-undefined
332    fpic := -fPIC
333         ifneq (,$(findstring cortexa5,$(platform)))
334                 CFLAGS += -marm -mcpu=cortex-a5
335                 ASFLAGS += -mcpu=cortex-a5
336         else ifneq (,$(findstring cortexa8,$(platform)))
337                 CFLAGS += -marm -mcpu=cortex-a8
338                 ASFLAGS += -mcpu=cortex-a8
339         else ifneq (,$(findstring cortexa9,$(platform)))
340                 CFLAGS += -marm -mcpu=cortex-a9
341                 ASFLAGS += -mcpu=cortex-a9
342         else ifneq (,$(findstring cortexa15a7,$(platform)))
343                 CFLAGS += -marm -mcpu=cortex-a15.cortex-a7
344                 ASFLAGS += -mcpu=cortex-a15.cortex-a7
345         else
346                 CFLAGS += -marm
347         endif
348         ifneq (,$(findstring neon,$(platform)))
349                 CFLAGS += -mfpu=neon
350                 ASFLAGS += -mfpu=neon
351         endif
352         ifneq (,$(findstring softfloat,$(platform)))
353                 CFLAGS += -mfloat-abi=softfp
354                 ASFLAGS += -mfloat-abi=softfp
355         else ifneq (,$(findstring hardfloat,$(platform)))
356                 CFLAGS += -mfloat-abi=hard
357                 ASFLAGS += -mfloat-abi=hard
358         endif
359         ifneq (,$(findstring armasm,$(platform)))
360                 ARM_ASM = 1
361         endif
362         ARCH = arm
363
364 # Emscripten
365 else ifeq ($(platform), emscripten) 
366         TARGET := $(TARGET_NAME)_libretro_$(platform).bc
367         STATIC_LINKING = 1
368         DONT_COMPILE_IN_ZLIB = 1
369
370 # GCW0
371 else ifeq ($(platform), gcw0)
372         TARGET := $(TARGET_NAME)_libretro.so
373         CC = /opt/gcw0-toolchain/usr/bin/mipsel-linux-gcc
374         AR = /opt/gcw0-toolchain/usr/bin/mipsel-linux-ar
375         SHARED := -shared -nostdlib
376         fpic := -fPIC
377         LIBM :=
378         DONT_COMPILE_IN_ZLIB = 1
379         CFLAGS += -ffast-math -march=mips32 -mtune=mips32r2 -mhard-float
380
381         asm_memory = 0
382         asm_render = 0
383         asm_ym2612 = 0
384         asm_misc = 0
385         asm_cdpico = 0
386         asm_cdmemory = 0
387         asm_mix = 0
388         use_cyclone = 0
389         use_fame = 1
390         use_drz80 = 0
391         use_cz80 = 1
392
393 # Windows
394 else
395         TARGET := $(TARGET_NAME)_libretro.dll
396         CC = gcc
397         fpic := -fPIC
398         SHARED := -shared -static-libgcc -static-libstdc++
399         CFLAGS += -D__WIN32__ -D__WIN32_LIBRETRO__
400
401 endif
402
403 CFLAGS += -DNO_ZLIB
404
405 ifeq ($(NO_MMAP),1)
406         CFLAGS += -DNO_MMAP
407 endif
408
409 ifeq ($(ARM_ASM),1)
410         asm_memory = 1
411         asm_render = 1
412         asm_ym2612 = 1
413         asm_misc = 1
414         asm_cdpico = 1
415         asm_cdmemory = 1
416         asm_mix = 1
417 endif
418
419 CFLAGS += $(fpic)
420 ifeq ($(findstring Haiku,$(shell uname -a)),)
421         LDLIBS += $(LIBM)
422 endif
423
424 SHARED ?= -shared
425 LDFLAGS += $(SHARED) $(fpic)
426
427 PLATFORM = libretro
428 NO_CONFIG_MAK = yes
429
430 include Makefile