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