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