Add ios_static target
[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 else ifneq (,$(findstring ios_static,$(platform)))
113         TARGET := $(TARGET_NAME)_libretro_ios.a
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         CC     += -miphoneos-version-min=8.0
128         CXX    += -miphoneos-version-min=8.0
129         CC_AS  += -miphoneos-version-min=8.0
130         CFLAGS += -miphoneos-version-min=8.0
131         ARCH := arm
132
133         STATIC_LINKING = 1
134         use_cyclone = 0
135         use_fame = 1
136         use_drz80 = 0
137         use_cz80 = 1
138         use_sh2drc = 1
139         use_svpdrc = 1
140
141 # PS3
142 else ifeq ($(platform), ps3)
143         TARGET := $(TARGET_NAME)_libretro_$(platform).a
144         CC = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-gcc.exe
145         AR = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-ar.exe
146         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
147         STATIC_LINKING = 1
148         NO_MMAP = 1
149         DONT_COMPILE_IN_ZLIB = 1
150
151         asm_memory = 0
152         asm_render = 0
153         asm_ym2612 = 0
154         asm_misc = 0
155         asm_cdpico = 0
156         asm_cdmemory = 0
157         asm_mix = 0
158         use_cyclone = 0
159         use_fame = 1
160         use_drz80 = 0
161         use_cz80 = 1
162
163 # sncps3
164 else ifeq ($(platform), sncps3)
165         TARGET := $(TARGET_NAME)_libretro_ps3.a
166         CC = $(CELL_SDK)/host-win32/sn/bin/ps3ppusnc.exe
167         AR = $(CELL_SDK)/host-win32/sn/bin/ps3snarl.exe
168         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
169         STATIC_LINKING = 1
170         NO_MMAP = 1
171         DONT_COMPILE_IN_ZLIB = 1
172
173         asm_memory = 0
174         asm_render = 0
175         asm_ym2612 = 0
176         asm_misc = 0
177         asm_cdpico = 0
178         asm_cdmemory = 0
179         asm_mix = 0
180         use_cyclone = 0
181         use_fame = 1
182         use_drz80 = 0
183         use_cz80 = 1
184
185 # Lightweight PS3 Homebrew SDK
186 else ifeq ($(platform), psl1ght)
187         TARGET := $(TARGET_NAME)_libretro_$(platform).a
188         CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
189         AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT)
190         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
191         STATIC_LINKING = 1
192         NO_MMAP = 1
193         DONT_COMPILE_IN_ZLIB = 1
194         
195         asm_memory = 0
196         asm_render = 0
197         asm_ym2612 = 0
198         asm_misc = 0
199         asm_cdpico = 0
200         asm_cdmemory = 0
201         asm_mix = 0
202         use_cyclone = 0
203         use_fame = 1
204         use_drz80 = 0
205         use_cz80 = 1
206
207 # PSP
208 else ifeq ($(platform), psp1)
209     TARGET := $(TARGET_NAME)_libretro_$(platform).a
210     CC = psp-gcc$(EXE_EXT)
211     AR = psp-ar$(EXE_EXT)
212     CFLAGS += -G0 -ftracer
213     CFLAGS += -DPSP -D_ASM_DRAW_C_AMIPS
214     STATIC_LINKING = 1
215     NO_MMAP = 1
216     DONT_COMPILE_IN_ZLIB = 1
217
218     asm_memory = 0
219     asm_render = 1
220     asm_ym2612 = 0
221     asm_misc = 0
222     asm_cdpico = 0
223     asm_cdmemory = 0
224     asm_mix = 0
225     use_cyclone = 0
226     use_fame = 1
227     use_drz80 = 0
228     use_cz80 = 1
229
230     OBJS +=platform/libretro/psp/draw_amips.o
231
232 # CTR (3DS)
233 else ifeq ($(platform), ctr)
234    TARGET := $(TARGET_NAME)_libretro_$(platform).a
235    CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT)
236    CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT)
237    AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT)
238    CFLAGS += -DARM11 -D_3DS
239    CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp
240    CFLAGS += -Wall -mword-relocations
241    CFLAGS += -fomit-frame-pointer -ffast-math
242    STATIC_LINKING = 1
243    NO_MMAP = 1
244    DONT_COMPILE_IN_ZLIB = 1
245    ARCH = arm
246    ARM_ASM = 1
247
248    asm_memory = 1
249    asm_render = 1
250    asm_ym2612 = 1
251    asm_misc = 1
252    asm_cdpico = 1
253    asm_cdmemory = 1
254    asm_mix = 1
255
256    use_cyclone = 1
257    use_fame = 0
258    use_drz80 = 1
259    use_cz80 = 0
260    use_sh2drc = 1
261    use_svpdrc = 1
262
263    OBJS +=platform/libretro/3ds/3ds_utils.o
264
265 # Raspberry Pi (original model) Raspbian
266 else ifeq ($(platform), raspberrypi)
267    CFLAGS += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6j
268    CFLAGS += -Wall -mword-relocations
269    CFLAGS += -fomit-frame-pointer -ffast-math
270    ARCH = arm
271    ARM_ASM = 1
272
273    TARGET := $(TARGET_NAME)_libretro.so
274    SHARED := -shared
275    fpic := -fPIC
276    DONT_COMPILE_IN_ZLIB = 1
277
278    asm_memory = 1
279    asm_render = 1
280    asm_ym2612 = 1
281    asm_misc = 1
282    asm_cdpico = 1
283    asm_cdmemory = 1
284    asm_mix = 1
285
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 # Vita
294 else ifeq ($(platform), vita)
295         TARGET := $(TARGET_NAME)_libretro_$(platform).a
296         CC = arm-vita-eabi-gcc$(EXE_EXT)
297         AR = arm-vita-eabi-ar$(EXE_EXT)
298         CFLAGS += -DVITA
299         CFLAGS += -marm -mfpu=neon -mcpu=cortex-a9 -march=armv7-a -mfloat-abi=hard -ffast-math
300         CFLAGS += -fno-asynchronous-unwind-tables -ftree-vectorize -funroll-loops
301         CFLAGS += -mword-relocations -fno-unwind-tables
302         CFLAGS += -fno-optimize-sibling-calls
303         STATIC_LINKING = 1
304         NO_MMAP = 1
305         DONT_COMPILE_IN_ZLIB = 1
306         ARCH = arm
307
308         asm_memory = 1
309         asm_render = 1
310         asm_ym2612 = 1
311         asm_misc = 1
312         asm_cdpico = 1
313         asm_cdmemory = 1
314         asm_mix = 1
315         use_cyclone = 1
316         use_fame = 0
317         use_drz80 = 1
318         use_cz80 = 0
319         use_sh2drc = 1
320         use_svpdrc = 1
321
322 # Xbox 360
323 else ifeq ($(platform), xenon)
324         TARGET := $(TARGET_NAME)_libretro_xenon360.a
325         CC = xenon-gcc$(EXE_EXT)
326         AR = xenon-ar$(EXE_EXT)
327         CFLAGS += -D__LIBXENON__ -m32 -D__ppc__
328
329 # Nintendo Game Cube
330 else ifeq ($(platform), ngc)
331         TARGET := $(TARGET_NAME)_libretro_$(platform).a
332         CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
333         AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
334         CFLAGS += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
335
336 # Nintendo Wii
337 else ifeq ($(platform), wii)
338         TARGET := $(TARGET_NAME)_libretro_$(platform).a
339         CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
340         AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
341         CFLAGS += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
342
343 # QNX
344 else ifeq ($(platform), qnx)
345         TARGET := $(TARGET_NAME)_libretro_$(platform).so
346    fpic := -fPIC
347         CC = qcc -Vgcc_ntoarmv7le
348         CC_AS = $(CC)
349         CFLAGS += -DBASE_ADDR_FIXED=0 -D__BLACKBERRY_QNX__ -marm -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp
350         ASFLAGS +=  -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
351         ARCH = arm
352         ARM_ASM = 1
353
354         use_cyclone = 0
355         use_fame = 1
356         use_drz80 = 0
357         use_cz80 = 1
358         use_sh2drc = 1
359         use_svpdrc = 1
360
361 # ARM
362 else ifneq (,$(findstring armv,$(platform)))
363         TARGET := $(TARGET_NAME)_libretro.so
364         SHARED := -shared -Wl,--no-undefined
365    fpic := -fPIC
366         ifneq (,$(findstring cortexa5,$(platform)))
367                 CFLAGS += -marm -mcpu=cortex-a5
368                 ASFLAGS += -mcpu=cortex-a5
369         else ifneq (,$(findstring cortexa8,$(platform)))
370                 CFLAGS += -marm -mcpu=cortex-a8
371                 ASFLAGS += -mcpu=cortex-a8
372         else ifneq (,$(findstring cortexa9,$(platform)))
373                 CFLAGS += -marm -mcpu=cortex-a9
374                 ASFLAGS += -mcpu=cortex-a9
375         else ifneq (,$(findstring cortexa15a7,$(platform)))
376                 CFLAGS += -marm -mcpu=cortex-a15.cortex-a7
377                 ASFLAGS += -mcpu=cortex-a15.cortex-a7
378         else
379                 CFLAGS += -marm
380         endif
381         ifneq (,$(findstring neon,$(platform)))
382                 CFLAGS += -mfpu=neon
383                 ASFLAGS += -mfpu=neon
384         endif
385         ifneq (,$(findstring softfloat,$(platform)))
386                 CFLAGS += -mfloat-abi=softfp
387                 ASFLAGS += -mfloat-abi=softfp
388         else ifneq (,$(findstring hardfloat,$(platform)))
389                 CFLAGS += -mfloat-abi=hard
390                 ASFLAGS += -mfloat-abi=hard
391         endif
392         ifneq (,$(findstring armasm,$(platform)))
393                 ARM_ASM = 1
394         endif
395         ARCH = arm
396
397 # Emscripten
398 else ifeq ($(platform), emscripten) 
399         TARGET := $(TARGET_NAME)_libretro_$(platform).bc
400         STATIC_LINKING = 1
401         DONT_COMPILE_IN_ZLIB = 1
402
403 # GCW0
404 else ifeq ($(platform), gcw0)
405         TARGET := $(TARGET_NAME)_libretro.so
406         CC = /opt/gcw0-toolchain/usr/bin/mipsel-linux-gcc
407         AR = /opt/gcw0-toolchain/usr/bin/mipsel-linux-ar
408         SHARED := -shared -nostdlib
409         fpic := -fPIC
410         LIBM :=
411         DONT_COMPILE_IN_ZLIB = 1
412         CFLAGS += -ffast-math -march=mips32 -mtune=mips32r2 -mhard-float
413
414         asm_memory = 0
415         asm_render = 0
416         asm_ym2612 = 0
417         asm_misc = 0
418         asm_cdpico = 0
419         asm_cdmemory = 0
420         asm_mix = 0
421         use_cyclone = 0
422         use_fame = 1
423         use_drz80 = 0
424         use_cz80 = 1
425
426 # Windows
427 else
428         TARGET := $(TARGET_NAME)_libretro.dll
429         CC = gcc
430         fpic := -fPIC
431         SHARED := -shared -static-libgcc -static-libstdc++
432         CFLAGS += -D__WIN32__ -D__WIN32_LIBRETRO__
433
434 endif
435
436 CFLAGS += -DNO_ZLIB
437
438 ifeq ($(NO_MMAP),1)
439         CFLAGS += -DNO_MMAP
440 endif
441
442 ifeq ($(ARM_ASM),1)
443         asm_memory = 1
444         asm_render = 1
445         asm_ym2612 = 1
446         asm_misc = 1
447         asm_cdpico = 1
448         asm_cdmemory = 1
449         asm_mix = 1
450 endif
451
452 CFLAGS += $(fpic)
453 ifeq ($(findstring Haiku,$(shell uname -a)),)
454         LDLIBS += $(LIBM)
455 endif
456
457 SHARED ?= -shared
458 LDFLAGS += $(SHARED) $(fpic)
459
460 PLATFORM = libretro
461 NO_CONFIG_MAK = yes
462
463 include Makefile