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