minor makefile adjustment
[pcsx_rearmed.git] / Makefile.libretro
1 # Makefile for PCSX ReARMed (libretro)
2
3 DEBUG ?= 0
4 WANT_ZLIB ?= 1
5 HAVE_CHD ?= 1
6 USE_LIBRETRO_VFS ?= 0
7
8 # Dynarec options: lightrec, ari64
9 DYNAREC ?= lightrec
10
11 ifeq ($(platform),)
12         platform = unix
13         ifeq ($(shell uname -a),)
14                 platform = win
15         else ifneq ($(findstring MINGW,$(shell uname -a)),)
16                 platform = win
17         else ifneq ($(findstring Darwin,$(shell uname -a)),)
18                 platform = osx
19         else ifneq ($(findstring win,$(shell uname -a)),)
20                 platform = win
21         endif
22 endif
23
24 CC ?= gcc
25 CXX ?= g++
26 AS ?= as
27 LD ?= ld
28 CFLAGS ?=
29
30 # early compiler overrides
31 ifeq ($(platform),ios-arm64)
32         CC = cc -arch arm64 -isysroot $(IOSSDK)
33         CXX = c++ -arch arm64 -isysroot $(IOSSDK)
34 else ifneq (,$(findstring ios,$(platform)))
35         CC = cc -arch armv7 -isysroot $(IOSSDK)
36         CXX = c++ -arch armv7 -isysroot $(IOSSDK)
37 else ifeq ($(platform), tvos-arm64)
38         ifeq ($(IOSSDK),)
39                 IOSSDK := $(shell xcodebuild -version -sdk appletvos Path)
40         endif
41         CC = cc -arch arm64 -isysroot $(IOSSDK)
42         CXX = c++ -arch arm64 -isysroot $(IOSSDK)
43 else ifeq ($(platform), osx)
44    ifeq ($(CROSS_COMPILE),1)
45         TARGET_RULE = -target $(LIBRETRO_APPLE_PLATFORM) -isysroot $(LIBRETRO_APPLE_ISYSROOT)
46         CFLAGS   += $(TARGET_RULE)
47         CXXFLAGS += $(TARGET_RULE)
48         LDFLAGS  += $(TARGET_RULE)
49    endif
50 else ifeq ($(platform), psl1ght)
51         CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
52         AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT)
53 else ifeq ($(platform), psp1)
54         CC = psp-gcc$(EXE_EXT)
55         AR = psp-ar$(EXE_EXT)
56 else ifeq ($(platform), vita)
57         CC = arm-vita-eabi-gcc$(EXE_EXT)
58         AR = arm-vita-eabi-ar$(EXE_EXT)
59 else ifeq ($(platform), ctr)
60         CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT)
61         CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT)
62         AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT)
63 else ifeq ($(platform), xenon)
64         CC = xenon-gcc$(EXE_EXT)
65         AR = xenon-ar$(EXE_EXT)
66 else ifneq (,$(filter $(platform),ngc wii wiiu))
67         CC  = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
68         CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT)
69         AR  = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
70 else ifeq ($(platform), qnx)
71         CC = qcc -Vgcc_ntoarmv7le
72 else ifeq ($(platform), miyoo)
73         CC = /opt/miyoo/usr/bin/arm-linux-gcc
74         CXX = /opt/miyoo/usr/bin/arm-linux-g++
75 endif
76 CC_AS ?= $(CC)
77
78 TARGET_NAME := pcsx_rearmed
79 ARCH_DETECTED := $(shell $(CC) $(CFLAGS) -dumpmachine | awk -F- '{print $$1}')
80 GIT_VERSION := " $(shell git rev-parse --short HEAD || echo unknown)"
81 ifneq ($(GIT_VERSION)," unknown")
82         CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\"
83 endif
84 ifneq ($(WANT_ZLIB),1)
85 LIBZ := -lz
86 endif
87 LIBPTHREAD := -lpthread
88 ifneq ($(findstring Haiku,$(shell uname -s)),)
89 LIBDL := -lroot -lnetwork
90 else
91 LIBDL := -ldl
92 endif
93 LIBM := -lm
94 MMAP_WIN32 = 0
95 EXTRA_LDFLAGS =
96
97 # select some defaults
98 ifneq (,$(findstring $(ARCH_DETECTED),arm aarch64))
99         DYNAREC = ari64
100 ifneq (,$(shell $(CC) -E -dD $(CFLAGS) include/arm_features.h | grep 'define __thumb__'))
101         # must disable thumb as ari64 can't handle it
102         CFLAGS += -marm
103 endif
104 ifneq (,$(shell $(CC) -E -dD $(CFLAGS) include/arm_features.h | grep 'HAVE_NEON32'))
105         BUILTIN_GPU = neon
106 endif
107 endif
108 ifneq (,$(findstring $(ARCH_DETECTED),i686 x86_64 arm64 aarch64))
109         BUILTIN_GPU = neon
110 endif
111
112 # platform specific options
113
114 # Unix
115 ifeq ($(platform), unix)
116         TARGET := $(TARGET_NAME)_libretro.so
117         fpic := -fPIC
118         THREAD_RENDERING = 1
119 ifeq ($(shell uname),Linux)
120         LIGHTREC_CUSTOM_MAP := 1
121 endif
122
123 # ODROIDN2
124 else ifneq (,$(findstring CortexA73_G12B,$(platform)))
125         TARGET := $(TARGET_NAME)_libretro.so
126         fpic := -fPIC
127         SHARED := -shared -Wl,-version-script=link.T
128         ARCH = arm64
129         BUILTIN_GPU = neon
130         HAVE_NEON = 1
131         DYNAREC = ari64
132         CFLAGS += -fomit-frame-pointer -ffast-math -DARM
133         CFLAGS += -march=armv8-a+crc -mcpu=cortex-a73 -mtune=cortex-a73.cortex-a53
134
135 # ALLWINNER H5
136 else ifneq (,$(findstring h5,$(platform)))
137         TARGET := $(TARGET_NAME)_libretro.so
138         fpic := -fPIC
139         SHARED := -shared -Wl,-version-script=link.T
140         ARCH = arm64
141         BUILTIN_GPU = neon
142         HAVE_NEON = 1
143         DYNAREC = ari64
144         CFLAGS += -fomit-frame-pointer -ffast-math -DARM
145         CFLAGS += -march=armv8-a+crc -mcpu=cortex-a53 -mtune=cortex-a53
146
147 else ifeq ($(platform), linux-portable)
148         TARGET := $(TARGET_NAME)_libretro.so
149         fpic := -fPIC -nostdlib
150         EXTRA_LDFLAGS += -fPIC -nostdlib
151         LIBZ :=
152         LIBPTHREAD :=
153         LIBDL :=
154         LIBM :=
155         NO_UNDEF_CHECK = 1
156         LIGHTREC_CUSTOM_MAP := 1
157
158 # OS X
159 else ifeq ($(platform), osx)
160         DYNAREC := 0
161         TARGET := $(TARGET_NAME)_libretro.dylib
162         fpic := -fPIC
163    MACSOSVER = `sw_vers -productVersion | cut -d. -f 1`
164    OSXVER = `sw_vers -productVersion | cut -d. -f 2`
165    OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"`
166    ifeq ($(OSX_LT_MAVERICKS),YES)
167            fpic += -mmacosx-version-min=10.1
168    endif
169         CFLAGS  += $(ARCHFLAGS)
170         CXXFLAGS  += $(ARCHFLAGS)
171         LDFLAGS += $(ARCHFLAGS)
172
173 # iOS
174 else ifneq (,$(findstring ios,$(platform)))
175         TARGET := $(TARGET_NAME)_libretro_ios.dylib
176         MINVERSION :=
177 ifeq ($(DYNAREC),lightrec)
178         # Override
179         DYNAREC := 0
180 endif
181         fpic := -fPIC
182
183         ifeq ($(IOSSDK),)
184                 IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
185         endif
186
187         CFLAGS += -DIOS -marm
188 ifeq ($(platform),ios-arm64)
189         ARCH := arm64
190         BUILTIN_GPU = neon
191         HAVE_NEON = 1
192         DYNAREC = 0
193 else
194         ARCH := arm
195         HAVE_NEON = 1
196         HAVE_NEON_ASM = 1
197         BUILTIN_GPU = neon
198         CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
199         ASFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
200 endif
201         CC_AS = perl ./tools/gas-preprocessor.pl $(CC)
202 ifeq ($(platform),$(filter $(platform),ios9 ios-arm64))
203         MINVERSION = -miphoneos-version-min=8.0
204 else
205         MINVERSION = -miphoneos-version-min=5.0
206 endif
207         CFLAGS += $(MINVERSION)
208
209 else ifeq ($(platform), tvos-arm64)
210         TARGET := $(TARGET_NAME)_libretro_tvos.dylib
211         MINVERSION :=
212 ifeq ($(DYNAREC),lightrec)
213         # Override
214         DYNAREC := 0
215 endif
216         fpic := -fPIC
217
218         ifeq ($(IOSSDK),)
219                 IOSSDK := $(shell xcodebuild -version -sdk appletvos Path)
220         endif
221
222         CFLAGS += -DIOS -DTVOS
223         ARCH := arm64
224         BUILTIN_GPU = neon
225         HAVE_NEON = 1
226         DYNAREC = 0
227         CC_AS = perl ./tools/gas-preprocessor.pl $(CC)
228
229 # Nintendo Switch (libnx)
230 else ifeq ($(platform), libnx)
231    export DEPSDIR := $(CURDIR)/
232    include $(DEVKITPRO)/libnx/switch_rules
233    TARGET := $(TARGET_NAME)_libretro_$(platform).a
234    ARCH := arm64
235    HAVE_VFS_FD = 0
236    CFLAGS += -O3 -fomit-frame-pointer -ffast-math -I$(DEVKITPRO)/libnx/include/ -fPIE -Wl,--allow-multiple-definition # -include $(LIBNX)/include/switch.h
237    CFLAGS += -specs=$(DEVKITPRO)/libnx/switch.specs -DNO_DYLIB -D__arm64__ -D__ARM_NEON__
238    CFLAGS += -D__SWITCH__ -DHAVE_LIBNX
239    CFLAGS += -DARM -D__aarch64__=1 -march=armv8-a -mtune=cortex-a57 -mtp=soft -DHAVE_INTTYPES -DLSB_FIRST -ffast-math -mcpu=cortex-a57+crc+fp+simd -ffunction-sections
240    CFLAGS += -ftree-vectorize
241    CFLAGS += -Ifrontend/switch -ftree-vectorize
242    NO_POSIX_MEMALIGN := 1
243    NO_PTHREAD=1
244    LIBPTHREAD :=
245    STATIC_LINKING=1
246    BUILTIN_GPU = neon
247    HAVE_NEON = 1
248    DYNAREC = ari64
249
250 # Lakka Switch (arm64)
251 else ifeq ($(platform), arm64)
252    TARGET := $(TARGET_NAME)_libretro.so
253    ARCH := arm64
254    BUILTIN_GPU = neon
255    HAVE_NEON = 1
256    DYNAREC = ari64
257    fpic := -fPIC
258    CFLAGS := $(filter-out -O2, $(CFLAGS))
259    CFLAGS += -O3 -ftree-vectorize
260
261 # Lightweight PS3 Homebrew SDK
262 else ifeq ($(platform), psl1ght)
263         TARGET := $(TARGET_NAME)_libretro_psl1ght.a
264         CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__
265         CFLAGS += -DNO_DYLIB
266         NO_UNDEF_CHECK := 1
267         STATIC_LINKING := 1
268         NO_MMAP := 1
269         NO_PTHREAD := 1
270         LIBPTHREAD :=
271         LIBDL :=
272         NEED_SYSCONF := 1
273
274 # PSP
275 else ifeq ($(platform), psp1)
276         TARGET := $(TARGET_NAME)_libretro_psp1.a
277         CFLAGS += -DPSP -G0
278
279 # Vita
280 else ifeq ($(platform), vita)
281         TARGET := $(TARGET_NAME)_libretro_vita.a
282         CFLAGS += -DVITA
283         CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -marm
284         CFLAGS += -fsingle-precision-constant -mword-relocations -fno-unwind-tables
285         CFLAGS += -fno-asynchronous-unwind-tables -ftree-vectorize -funroll-loops
286         CFLAGS += -fno-optimize-sibling-calls
287         CFLAGS += -I$(VITASDK)/include -Ifrontend/vita
288         CFLAGS += -DNO_DYLIB
289         ASFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
290
291 #       CFLAGS += -U__ARM_NEON__
292         HAVE_NEON = 1
293         HAVE_NEON_ASM = 1
294         BUILTIN_GPU = neon
295
296         DYNAREC = ari64
297         ARCH = arm
298         STATIC_LINKING = 1
299         NO_PTHREAD=1
300         NO_POSIX_MEMALIGN := 1
301
302 # CTR(3DS)
303 else ifeq ($(platform), ctr)
304         TARGET := $(TARGET_NAME)_libretro_ctr.a
305         CFLAGS += -DARM11 -D_3DS -DNO_DYLIB -DGPU_UNAI_USE_FLOATMATH -DGPU_UNAI_USE_FLOAT_DIV_MULTINV
306         CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp -mtp=soft
307         CFLAGS += -Wall -mword-relocations
308         CFLAGS += -fomit-frame-pointer -ffast-math -funroll-loops
309         CFLAGS += -Ifrontend/3ds -I$(CTRULIB)/include
310         CFLAGS += -Werror=implicit-function-declaration
311         CFLAGS += -DHAVE_UNISTD_H
312
313         OBJS += frontend/3ds/utils.o
314
315 #       CFLAGS += -DPCSX
316         BUILTIN_GPU = unai
317         THREAD_RENDERING = 1
318         DYNAREC = ari64
319         ARCH = arm
320         HAVE_NEON = 0
321         STATIC_LINKING = 1
322         NO_POSIX_MEMALIGN := 1
323
324 # Xbox 360
325 else ifeq ($(platform), xenon)
326         TARGET := $(TARGET_NAME)_libretro_xenon360.a
327         CFLAGS += -D__LIBXENON__ -m32 -D__ppc__
328
329 # Nintendo GC/Wii/WiiU
330 else ifneq (,$(filter $(platform),ngc wii wiiu))
331         TARGET := $(TARGET_NAME)_libretro_$(platform).a
332         ifeq ($(platform), ngc)
333                 CFLAGS += -DHW_DOL -mogc
334                 NEED_SYSCONF := 1
335         else ifeq ($(platform), wii)
336                 CFLAGS += -DHW_RVL -mrvl
337                 NEED_SYSCONF := 1
338         else ifeq ($(platform), wiiu)
339                 # -mwup was removed in newer devkitPPC versions
340                 CFLAGS += -DHW_WUP
341                 CFLAGS += -I frontend/wiiu
342                 LIGHTREC_CUSTOM_MAP := 1
343                 LIGHTREC_CUSTOM_MAP_OBJ := libpcsxcore/lightrec/mem_wiiu.o
344         endif
345         ARCH = powerpc
346         BUILTIN_GPU = peops
347         CFLAGS += -D__ppc__ -D__powerpc__
348         CFLAGS += -DGEKKO -mcpu=750 -meabi -mhard-float
349         CFLAGS += -DNO_DYLIB
350         STATIC_LINKING := 1
351         THREAD_RENDERING := 0
352         NO_PTHREAD := 1
353         NO_MMAP := 1
354         NO_POSIX_MEMALIGN := 1
355         LIBDL :=
356         LIBPTHREAD :=
357         LIBRT :=
358
359 # QNX
360 else ifeq ($(platform), qnx)
361         TARGET := $(TARGET_NAME)_libretro_qnx.so
362         fpic := -fPIC
363         HAVE_NEON = 1
364         HAVE_NEON_ASM = 1
365         DYNAREC = ari64
366         BUILTIN_GPU = neon
367         ARCH = arm
368         CFLAGS += -D__BLACKBERRY_QNX__ -marm -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp
369         ASFLAGS += -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
370         MAIN_LDLIBS += -lsocket
371         LIBPTHREAD :=
372         LIBDL :=
373         LIBM :=
374
375 #Raspberry Pi 1
376 else ifeq ($(platform), rpi1)
377         TARGET := $(TARGET_NAME)_libretro.so
378         fpic := -fPIC
379         CFLAGS += -marm -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard
380         ASFLAGS += -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard
381         HAVE_NEON = 0
382         ARCH = arm
383         BUILTIN_GPU = unai
384         DYNAREC = ari64
385
386 #Raspberry Pi 2
387 else ifeq ($(platform), rpi2)
388         TARGET := $(TARGET_NAME)_libretro.so
389         fpic := -fPIC
390         CFLAGS += -marm -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
391         ASFLAGS += -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
392         HAVE_NEON = 1
393         HAVE_NEON_ASM = 1
394         ARCH = arm
395         BUILTIN_GPU = neon
396         DYNAREC = ari64
397
398 #Raspberry Pi 3
399 else ifeq ($(platform), rpi3)
400         TARGET := $(TARGET_NAME)_libretro.so
401         fpic := -fPIC
402         CFLAGS += -marm -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard
403         ASFLAGS += -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard
404         HAVE_NEON = 1
405         HAVE_NEON_ASM = 1
406         ARCH = arm
407         BUILTIN_GPU = neon
408         DYNAREC = ari64
409
410 #Raspberry Pi 3 with a 64bit GNU/Linux OS
411 else ifeq ($(platform), rpi3_64)
412         TARGET := $(TARGET_NAME)_libretro.so
413         ARCH := arm64
414         BUILTIN_GPU = neon
415         HAVE_NEON = 1
416         DYNAREC = ari64
417         fpic := -fPIC
418         CFLAGS += -march=armv8-a+crc+simd -mtune=cortex-a53 -ftree-vectorize
419
420 #Raspberry Pi 4 with a 32bit GNU/Linux OS
421 else ifeq ($(platform), rpi4)
422         TARGET := $(TARGET_NAME)_libretro.so
423         fpic := -fPIC
424         CFLAGS += -marm -mcpu=cortex-a72 -mfpu=neon-fp-armv8 -mfloat-abi=hard
425         ASFLAGS += -mcpu=cortex-a72 -mfpu=neon-fp-armv8 -mfloat-abi=hard
426         HAVE_NEON = 1
427         HAVE_NEON_ASM = 1
428         ARCH = arm
429         BUILTIN_GPU = neon
430         DYNAREC = ari64
431
432 #Raspberry Pi 4 with a 64bit GNU/Linux OS
433 else ifeq ($(platform), rpi4_64)
434         TARGET := $(TARGET_NAME)_libretro.so
435         ARCH := arm64
436         BUILTIN_GPU = neon
437         HAVE_NEON = 1
438         DYNAREC = ari64
439         fpic := -fPIC
440         CFLAGS += -march=armv8-a+crc+simd -mtune=cortex-a72 -ftree-vectorize
441
442 # Classic Platforms ####################
443 # Platform affix = classic_<ISA>_<µARCH>
444 # Help at https://modmyclassic.com/comp
445
446 # (armv7 a7, hard point, neon based) ### 
447 # NESC, SNESC, C64 mini 
448 else ifeq ($(platform), classic_armv7_a7)
449         TARGET := $(TARGET_NAME)_libretro.so
450         fpic := -fPIC
451         CFLAGS += -Ofast \
452         -flto=4 -fwhole-program -fuse-linker-plugin \
453         -fdata-sections -ffunction-sections -Wl,--gc-sections \
454         -fno-stack-protector -fno-ident -fomit-frame-pointer \
455         -falign-functions=1 -falign-jumps=1 -falign-loops=1 \
456         -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-unroll-loops \
457         -fmerge-all-constants -fno-math-errno \
458         -marm -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
459         CXXFLAGS += $(CFLAGS)
460         CPPFLAGS += $(CFLAGS)
461         ASFLAGS += $(CFLAGS)
462         HAVE_NEON = 1
463         HAVE_NEON_ASM = 1
464         ARCH = arm
465         BUILTIN_GPU = neon
466         DYNAREC = ari64
467         ifeq ($(shell echo `$(CC) -dumpversion` "< 4.9" | bc -l), 1)
468                 CFLAGS += -march=armv7-a
469         else
470                 CFLAGS += -march=armv7ve
471                 # If gcc is 5.0 or later
472                 ifeq ($(shell echo `$(CC) -dumpversion` ">= 5" | bc -l), 1)
473                         LDFLAGS += -static-libgcc -static-libstdc++
474                 endif
475         endif
476
477 # (armv8 a35, hard point, neon based) ###
478 # PlayStation Classic
479 else ifeq ($(platform), classic_armv8_a35)
480         TARGET := $(TARGET_NAME)_libretro.so
481         fpic := -fPIC
482         CFLAGS += -Ofast \
483         -fmerge-all-constants -fno-math-errno -march=armv8-a \
484         -marm -mcpu=cortex-a35 -mtune=cortex-a35 -mfpu=neon-fp-armv8 -mfloat-abi=hard
485         HAVE_NEON = 1
486         HAVE_NEON_ASM = 1
487         ARCH = arm
488         BUILTIN_GPU = neon
489         DYNAREC = ari64
490         LDFLAGS += -static-libgcc -static-libstdc++ -fPIC
491
492 #######################################
493
494 # ARM
495 else ifneq (,$(findstring armv,$(platform)))
496         TARGET := $(TARGET_NAME)_libretro.so
497         fpic := -fPIC
498         HAVE_NEON = 0
499         BUILTIN_GPU = peops
500         ifneq (,$(findstring cortexa8,$(platform)))
501                 CFLAGS += -marm -mcpu=cortex-a8
502                 ASFLAGS += -mcpu=cortex-a8
503         else ifneq (,$(findstring cortexa7,$(platform)))
504                 CFLAGS += -marm -mcpu=cortex-a7
505                 ASFLAGS += -mcpu=cortex-a7
506                 LIBZ :=
507         else ifneq (,$(findstring cortexa9,$(platform)))
508                 CFLAGS += -marm -mcpu=cortex-a9
509                 ASFLAGS += -mcpu=cortex-a9
510         endif
511         CFLAGS += -marm
512         ifneq (,$(findstring neon,$(platform)))
513                 CFLAGS += -mfpu=neon
514                 ASFLAGS += -mfpu=neon
515                 HAVE_NEON = 1
516                 HAVE_NEON_ASM = 1
517                 BUILTIN_GPU = neon
518         endif
519         ifneq (,$(findstring softfloat,$(platform)))
520                 CFLAGS += -mfloat-abi=softfp
521                 ASFLAGS += -mfloat-abi=softfp
522         else ifneq (,$(findstring hardfloat,$(platform)))
523                 CFLAGS += -mfloat-abi=hard
524                 ASFLAGS += -mfloat-abi=hard
525         endif
526         ARCH = arm
527         DYNAREC = ari64
528
529 else ifeq ($(platform), miyoo)
530         TARGET := $(TARGET_NAME)_libretro.so
531         fpic := -fPIC
532         CFLAGS += -mcpu=arm926ej-s -fsingle-precision-constant
533         CFLAGS += -DGPU_UNAI_USE_INT_DIV_MULTINV -D_MIYOO
534         ARCH = arm
535         BUILTIN_GPU = unai
536         DYNAREC = ari64
537         HAVE_NEON = 0
538
539 # Emscripten
540 else ifeq ($(platform), emscripten)
541    TARGET  := $(TARGET_NAME)_libretro_$(platform).bc
542    fpic    := -fPIC
543    SHARED  := -shared -Wl,--no-undefined -Wl,--version-script=link.T
544    CFLAGS += -DNO_DYLIB
545    DYNAREC =
546    STATIC_LINKING = 1
547
548 # Windows
549 else
550         TARGET := $(TARGET_NAME)_libretro.dll
551         PLATFORM = libretro
552         MAIN_LDFLAGS += -static-libgcc -static-libstdc++
553 ifneq ($(DEBUG),1)
554         MAIN_LDFLAGS += -s
555 endif
556         CFLAGS += -D__WIN32__ -DNO_DYLIB
557         MMAP_WIN32=1
558         NO_PTHREAD=1
559         MAIN_LDLIBS += -lws2_32
560         LIBPTHREAD :=
561         LIBDL :=
562         LIBM :=
563         USE_LIBRETRO_VFS = 1
564 endif
565
566 CFLAGS += $(fpic)
567 MAIN_LDFLAGS += -shared
568 MAIN_LDLIBS += $(LIBPTHREAD) $(LIBM) $(LIBDL) $(LIBZ)
569
570 # enable large file support if available
571 ifeq ($(shell $(CC) -E -dD $(CFLAGS) include/arm_features.h | grep __SIZEOF_LONG__ | awk '{print $$3}'),4)
572 CFLAGS += -D_FILE_OFFSET_BITS=64
573 endif
574
575 # try to autodetect stuff for the lazy
576 ifndef ARCH
577 ARCH = $(ARCH_DETECTED)
578 endif
579 ifndef HAVE_NEON_ASM
580 # asm for 32bit only
581 HAVE_NEON_ASM = $(shell $(CC) -E -dD $(CFLAGS) include/arm_features.h | grep -q HAVE_NEON32 && echo 1 || echo 0)
582 endif
583 ifeq ($(NO_UNDEF_CHECK)$(shell $(LD) -v 2> /dev/null | awk '{print $$1}'),GNU)
584 MAIN_LDFLAGS += -Wl,--no-undefined
585 endif
586 ifdef ALLOW_LIGHTREC_ON_ARM
587 CFLAGS += -DALLOW_LIGHTREC_ON_ARM
588 endif
589 ifeq ($(BUILTIN_GPU),neon)
590 ifneq (,$(findstring $(ARCH),x86 i686))
591         CFLAGS_GPU_NEON ?= -msse2 # required
592 endif
593 ifeq ($(ARCH),x86_64)
594         CFLAGS_GPU_NEON ?= -mssse3 # optional, for more perf
595 endif
596 CFLAGS += $(CFLAGS_GPU_NEON)
597 endif
598
599 TARGET ?= libretro.so
600 PLATFORM = libretro
601 BUILTIN_GPU ?= peops
602 SOUND_DRIVERS = libretro
603 PLUGINS =
604 NO_CONFIG_MAK = yes
605
606 # what does this do
607 #libretro_all: all
608 #ifeq ($(platform),ios)
609 #ifeq ($(DYNAREC),1)
610 #       make -f Makefile.libretro DYNAREC=0 platform=$(platform) clean
611 #       make -f Makefile.libretro DYNAREC=0 platform=$(platform)
612 #endif
613 #endif
614
615 $(info TARGET:      $(TARGET))
616 $(info platform:    $(platform))
617 $(info ARCH:        $(ARCH))
618 $(info DYNAREC:     $(DYNAREC))
619 $(info BUILTIN_GPU: $(BUILTIN_GPU))
620 $(info CC:          $(CC))
621 $(info CFLAGS:      $(CFLAGS))
622 $(info MAIN_LDLIBS: $(MAIN_LDLIBS))
623 $(info )
624
625 include Makefile
626
627 # no special AS needed for gpu_neon
628 plugins/gpu_neon/psx_gpu/psx_gpu_arm_neon.o: plugins/gpu_neon/psx_gpu/psx_gpu_arm_neon.S
629         $(CC) $(CFLAGS) -c $^ -o $@