1CORE_DIR  = .
2BUILD_DIR = build
3
4ifeq ($(platform),android_arm64-v8a)
5include $(BUILD_DIR)/Makefile.android_arm64-v8a
6else ifeq ($(platform),android_armeabi)
7include $(BUILD_DIR)/Makefile.android_armeabi
8else ifeq ($(platform),android_armeabi-v7a)
9include $(BUILD_DIR)/Makefile.android_armeabi-v7a
10else ifeq ($(platform),android_mips)
11include $(BUILD_DIR)/Makefile.android_mips
12else ifeq ($(platform),android_mips64)
13include $(BUILD_DIR)/Makefile.android_mips64
14else ifeq ($(platform),android_x86)
15include $(BUILD_DIR)/Makefile.android_x86
16else ifeq ($(platform),android_x86_64)
17include $(BUILD_DIR)/Makefile.android_x86_64
18else ifeq ($(platform),linux-portable_x86)
19include $(BUILD_DIR)/Makefile.linux-portable_x86
20else ifeq ($(platform),linux-portable_x86_64)
21include $(BUILD_DIR)/Makefile.linux-portable_x86_64
22else ifeq ($(platform),linux_x86)
23include $(BUILD_DIR)/Makefile.linux_x86
24else ifeq ($(platform),linux_x86_64)
25include $(BUILD_DIR)/Makefile.linux_x86_64
26else ifeq ($(platform),mingw_x86)
27include $(BUILD_DIR)/Makefile.mingw_x86
28else ifeq ($(platform),mingw_x86_64)
29include $(BUILD_DIR)/Makefile.mingw_x86_64
30else ifeq ($(platform),osx_x86)
31include $(BUILD_DIR)/Makefile.osx_x86
32else ifeq ($(platform),osx_x86_64)
33include $(BUILD_DIR)/Makefile.osx_x86_64
34else ifeq ($(platform),ps3_ppc)
35include $(BUILD_DIR)/Makefile.ps3_ppc
36else ifeq ($(platform),wii_ppc)
37include $(BUILD_DIR)/Makefile.wii_ppc
38else ifeq ($(platform),windows_x86)
39include $(BUILD_DIR)/Makefile.windows_x86
40else ifeq ($(platform),windows_x86_64)
41include $(BUILD_DIR)/Makefile.windows_x86_64
42else
43
44TARGET_NAME := fuse
45
46LOG_PERFORMANCE = 0
47HAVE_COMPAT = 0
48
49SOURCES_C   :=
50SOURCES_CXX :=
51LIBS    :=
52
53ifeq ($(platform),)
54	platform = unix
55	ifeq ($(shell uname -a),)
56		platform = win
57	else ifneq ($(findstring MINGW,$(shell uname -a)),)
58		platform = win
59	else ifneq ($(findstring Darwin,$(shell uname -a)),)
60		platform = osx
61	else ifneq ($(findstring win,$(shell uname -a)),)
62		platform = win
63	endif
64endif
65
66# system platform
67system_platform = unix
68ifeq ($(shell uname -a),)
69	EXE_EXT = .exe
70	system_platform = win
71else ifneq ($(findstring Darwin,$(shell uname -a)),)
72	system_platform = osx
73	arch = intel
74ifeq ($(shell uname -p),arm64)
75	arch = arm
76endif
77ifeq ($(shell uname -p),powerpc)
78	arch = ppc
79endif
80else ifneq ($(findstring MINGW,$(shell uname -a)),)
81	system_platform = win
82endif
83
84CC_AS ?= $(CC)
85LIBM := -lm
86
87# Unix
88ifneq (,$(findstring unix,$(platform)))
89	TARGET := $(TARGET_NAME)_libretro.so
90	fpic := -fPIC
91	SHARED := -shared -Wl,-version-script=build/link.T -Wl,-no-undefined
92
93else ifneq (,$(findstring linux-portable,$(platform)))
94	TARGET := $(TARGET_NAME)_libretro.so
95	fpic := -fPIC -nostdlib
96	LIBM :=
97	SHARED := -shared -Wl,-version-script=build/link.T
98
99# Raspberry Pi 1
100else ifeq ($(platform), rpi1)
101	TARGET := $(TARGET_NAME)_libretro.so
102	fpic = -fPIC
103	SHARED := -shared -Wl,-version-script=build/link.T -Wl,-no-undefined
104	PLATFORM_DEFINES += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6j
105	PLATFORM_DEFINES += -fomit-frame-pointer -ffast-math
106	PLATFORM_DEFINES += -DARM
107
108# Raspberry Pi 2
109else ifeq ($(platform), rpi2)
110	TARGET := $(TARGET_NAME)_libretro.so
111	fpic = -fPIC
112	SHARED := -shared -Wl,-version-script=build/link.T -Wl,-no-undefined
113	PLATFORM_DEFINES += -marm -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
114	PLATFORM_DEFINES += -fomit-frame-pointer -ffast-math
115	PLATFORM_DEFINES += -DARM
116	HAVE_NEON = 1
117
118# Raspberry Pi 3
119else ifeq ($(platform), rpi3)
120	TARGET := $(TARGET_NAME)_libretro.so
121	fpic = -fPIC
122	SHARED := -shared -Wl,-version-script=build/link.T -Wl,-no-undefined
123	PLATFORM_DEFINES += -marm -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard
124	PLATFORM_DEFINES += -fomit-frame-pointer -ffast-math
125	PLATFORM_DEFINES += -DARM
126	HAVE_NEON = 1
127
128# Classic Platforms ####################
129# Platform affix = classic_<ISA>_<µARCH>
130# Help at https://modmyclassic.com/comp
131
132# (armv7 a7, hard point, neon based) ###
133# NESC, SNESC, C64 mini
134else ifeq ($(platform), classic_armv7_a7)
135	TARGET := $(TARGET_NAME)_libretro.so
136	fpic := -fPIC
137    SHARED :=-shared -Wl,--version-script=build/link.T -Wl,--no-undefined
138	PLATFORM_DEFINES += -DARM -Ofast \
139	-flto=4 -fwhole-program -fuse-linker-plugin \
140	-fdata-sections -ffunction-sections -Wl,--gc-sections \
141	-fno-stack-protector -fno-ident -fomit-frame-pointer \
142	-falign-functions=1 -falign-jumps=1 -falign-loops=1 \
143	-fno-unwind-tables -fno-asynchronous-unwind-tables -fno-unroll-loops \
144	-fmerge-all-constants -fno-math-errno \
145	-marm -mtune=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
146	CXXFLAGS += $(PLATFORM_DEFINES)
147	CPPFLAGS += $(PLATFORM_DEFINES)
148	ASFLAGS += $(PLATFORM_DEFINES)
149	HAVE_NEON = 1
150	ifeq ($(shell echo `$(CC) -dumpversion` "< 4.9" | bc -l), 1)
151	  CFLAGS += -march=armv7-a
152	else
153	  CFLAGS += -march=armv7ve
154	  # If gcc is 5.0 or later
155	  ifeq ($(shell echo `$(CC) -dumpversion` ">= 5" | bc -l), 1)
156	    LDFLAGS += -static-libgcc -static-libstdc++
157	  endif
158	endif
159#######################################
160
161# (armv8 a35, hard point, neon based) ###
162# PlayStation Classic
163else ifeq ($(platform), classic_armv8_a35)
164	TARGET := $(TARGET_NAME)_libretro.so
165	fpic := -fPIC
166	SHARED := -shared -Wl,--version-script=build/link.T -Wl,--no-undefined
167	CFLAGS += -DARM -Ofast \
168	-fuse-linker-plugin \
169	-fno-stack-protector -fno-ident -fomit-frame-pointer \
170	-fmerge-all-constants -ffast-math -funroll-all-loops \
171	-marm -mcpu=cortex-a35 -mfpu=neon-fp-armv8 -mfloat-abi=hard
172	CXXFLAGS += $(CFLAGS)
173	CPPFLAGS += $(CFLAGS)
174	HAVE_NEON = 1
175	ARCH = arm
176	LDFLAGS += -lrt
177	LDFLAGS += -marm -mcpu=cortex-a35 -mfpu=neon-fp-armv8 -mfloat-abi=hard -Ofast -flto -fuse-linker-plugin
178#######################################
179
180# OS X
181else ifeq ($(platform), osx)
182	TARGET := $(TARGET_NAME)_libretro.dylib
183	fpic := -fPIC
184	SHARED := -dynamiclib
185	OSXVER = `sw_vers -productVersion | cut -d. -f 2`
186	OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"`
187   ifeq ($(OSX_LT_MAVERICKS),YES)
188   	   fpic += -mmacosx-version-min=10.2
189   endif
190ifeq ($(arch),ppc)
191	CFLAGS += -DWORDS_BIGENDIAN -DMSB_FIRST
192endif
193   ifeq ($(CROSS_COMPILE),1)
194		TARGET_RULE   = -target $(LIBRETRO_APPLE_PLATFORM) -isysroot $(LIBRETRO_APPLE_ISYSROOT)
195		CFLAGS   += $(TARGET_RULE)
196		LDFLAGS  += $(TARGET_RULE)
197   endif
198
199# iOS
200else ifneq (,$(findstring ios,$(platform)))
201
202	TARGET := $(TARGET_NAME)_libretro_ios.dylib
203	fpic := -fPIC
204	SHARED := -dynamiclib
205
206	ifeq ($(IOSSDK),)
207		IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
208	endif
209
210ifeq ($(platform),ios-arm64)
211	CC = cc -arch arm64 -isysroot $(IOSSDK)
212	CXX = c++ -arch arm64 -isysroot $(IOSSDK)
213else
214	CC = cc -arch armv7 -isysroot $(IOSSDK)
215	CXX = c++ -arch armv7 -isysroot $(IOSSDK)
216endif
217	CC_AS = perl ./tools/gas-preprocessor.pl $(CC)
218
219ifeq ($(platform),$(filter $(platform),ios9 ios-arm64))
220	CC += -miphoneos-version-min=8.0
221	CXX += -miphoneos-version-min=8.0
222	CC_AS += -miphoneos-version-min=8.0
223	PLATFORM_DEFINES := -miphoneos-version-min=8.0
224else
225	CC += -miphoneos-version-min=5.0
226	CXX += -miphoneos-version-min=5.0
227	CC_AS += -miphoneos-version-min=5.0
228	PLATFORM_DEFINES := -miphoneos-version-min=5.0
229endif
230
231ifeq ($(platform),ios-arm64)
232	PLATFORM_DEFINES += -D_IOS_ARM64
233endif
234
235else ifeq ($(platform), tvos-arm64)
236	TARGET := $(TARGET_NAME)_libretro_tvos.dylib
237	fpic := -fPIC
238	SHARED := -dynamiclib
239	ifeq ($(IOSSDK),)
240		IOSSDK := $(shell xcodebuild -version -sdk appletvos Path)
241	endif
242	PLATFORM_DEFINES += -D_IOS_ARM64
243
244# Theos
245else ifeq ($(platform), theos_ios)
246	DEPLOYMENT_IOSVERSION = 5.0
247	TARGET = iphone:latest:$(DEPLOYMENT_IOSVERSION)
248	ARCHS = armv7 armv7s
249	TARGET_IPHONEOS_DEPLOYMENT_VERSION=$(DEPLOYMENT_IOSVERSION)
250	THEOS_BUILD_DIR := objs
251	include $(THEOS)/makefiles/common.mk
252
253	LIBRARY_NAME = $(TARGET_NAME)_libretro_ios
254
255# QNX
256else ifeq ($(platform), qnx)
257	TARGET := $(TARGET_NAME)_libretro_qnx.so
258	fpic := -fPIC
259	SHARED := -lcpp -lm -shared -Wl,-version-script=build/link.T
260	CC = qcc -Vgcc_ntoarmv7le
261	CC_AS = qcc -Vgcc_ntoarmv7le
262	CXX = QCC -Vgcc_ntoarmv7le_cpp
263	AR = QCC -Vgcc_ntoarmv7le
264	PLATFORM_DEFINES := -D__BLACKBERRY_QNX__ -fexceptions -marm -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
265
266# PS3
267else ifeq ($(platform), ps3)
268	TARGET := $(TARGET_NAME)_libretro_$(platform).a
269	CC = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-gcc.exe
270	CC_AS = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-gcc.exe
271	CXX = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-g++.exe
272	AR = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-ar.exe
273	PLATFORM_DEFINES := -D__CELLOS_LV2__
274	STATIC_LINKING = 1
275	HAVE_COMPAT = 1
276	CFLAGS += -DWORDS_BIGENDIAN -DMSB_FIRST
277
278# sncps3
279else ifeq ($(platform), sncps3)
280	TARGET := $(TARGET_NAME)_libretro_ps3.a
281	CC = $(CELL_SDK)/host-win32/sn/bin/ps3ppusnc.exe
282	CC_AS = $(CELL_SDK)/host-win32/sn/bin/ps3ppusnc.exe
283	CXX = $(CELL_SDK)/host-win32/sn/bin/ps3ppusnc.exe
284	AR = $(CELL_SDK)/host-win32/sn/bin/ps3snarl.exe
285	PLATFORM_DEFINES := -D__CELLOS_LV2__
286	STATIC_LINKING = 1
287	HAVE_COMPAT = 1
288	CFLAGS += -DWORDS_BIGENDIAN -DMSB_FIRST
289
290# Lightweight PS3 Homebrew SDK
291else ifeq ($(platform), psl1ght)
292	TARGET := $(TARGET_NAME)_libretro_$(platform).a
293	CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
294	CC_AS = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
295	CXX = $(PS3DEV)/ppu/bin/ppu-g++$(EXE_EXT)
296	AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT)
297	PLATFORM_DEFINES := -D__CELLOS_LV2__
298	STATIC_LINKING = 1
299	HAVE_COMPAT = 1
300	CFLAGS += -DWORDS_BIGENDIAN -DMSB_FIRST
301
302# PSP
303else ifeq ($(platform), psp1)
304	TARGET := $(TARGET_NAME)_libretro_$(platform).a
305	CC = psp-gcc$(EXE_EXT)
306	CC_AS = psp-gcc$(EXE_EXT)
307	CXX = psp-g++$(EXE_EXT)
308	AR = psp-ar$(EXE_EXT)
309	PLATFORM_DEFINES := -DPSP
310	CFLAGS += -G0
311	CXXFLAGS += -G0
312	STATIC_LINKING = 1
313	HAVE_COMPAT = 1
314	EXTRA_INCLUDES := -I$(shell psp-config --pspsdk-path)/include
315
316# Xbox 360
317else ifeq ($(platform), xenon)
318	TARGET := $(TARGET_NAME)_libretro_xenon360.a
319	CC = xenon-gcc$(EXE_EXT)
320	CC_AS = xenon-gcc$(EXE_EXT)
321	CXX = xenon-g++$(EXE_EXT)
322	AR = xenon-ar$(EXE_EXT)
323	PLATFORM_DEFINES := -D__LIBXENON__
324	STATIC_LINKING = 1
325
326# Nintendo Game Cube
327else ifeq ($(platform), ngc)
328	TARGET := $(TARGET_NAME)_libretro_$(platform).a
329	CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
330	CC_AS = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
331	CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT)
332	AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
333	PLATFORM_DEFINES += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float
334	PLATFORM_DEFINES += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int
335	STATIC_LINKING = 1
336	HAVE_COMPAT = 1
337	CFLAGS += -DWORDS_BIGENDIAN -DMSB_FIRST
338
339# Nintendo Wii
340else ifeq ($(platform), wii)
341	TARGET := $(TARGET_NAME)_libretro_$(platform).a
342	CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
343	CC_AS = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
344	CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT)
345	AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
346	PLATFORM_DEFINES += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float
347	PLATFORM_DEFINES += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int
348	STATIC_LINKING = 1
349	HAVE_COMPAT = 1
350	CFLAGS += -DWORDS_BIGENDIAN -DMSB_FIRST
351
352# Nintendo WiiU
353else ifeq ($(platform), wiiu)
354	TARGET := $(TARGET_NAME)_libretro_$(platform).a
355	CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
356	CC_AS = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
357	CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT)
358	AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
359	PLATFORM_DEFINES += -DGEKKO -DWIIU -DHW_RVL -mcpu=750 -meabi -mhard-float
360	PLATFORM_DEFINES += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int
361	STATIC_LINKING = 1
362	HAVE_COMPAT = 1
363	CFLAGS += -DWORDS_BIGENDIAN -DMSB_FIRST
364
365# ARM
366else ifneq (,$(findstring armv,$(platform)))
367	TARGET := $(TARGET_NAME)_libretro.so
368	fpic := -fPIC
369	SHARED := -shared -Wl,-version-script=build/link.T
370	CC = gcc
371	CC_AS = gcc
372	CXX = g++
373	ifneq (,$(findstring cortexa8,$(platform)))
374		PLATFORM_DEFINES += -marm -mcpu=cortex-a8
375	else ifneq (,$(findstring cortexa9,$(platform)))
376		PLATFORM_DEFINES += -marm -mcpu=cortex-a9
377	endif
378	PLATFORM_DEFINES += -marm
379	ifneq (,$(findstring neon,$(platform)))
380		PLATFORM_DEFINES += -mfpu=neon
381		HAVE_NEON = 1
382	endif
383	ifneq (,$(findstring softfloat,$(platform)))
384		PLATFORM_DEFINES += -mfloat-abi=softfp
385	else ifneq (,$(findstring hardfloat,$(platform)))
386		PLATFORM_DEFINES += -mfloat-abi=hard
387	endif
388	PLATFORM_DEFINES += -DARM
389
390# Nintendo Switch (libnx)
391else ifeq ($(platform), libnx)
392	include $(DEVKITPRO)/libnx/switch_rules
393   TARGET := $(TARGET_NAME)_libretro_$(platform).a
394   DEFINES := -DSWITCH=1 -U__linux__ -U__linux -DRARCH_INTERNAL
395   CFLAGS  :=  $(DEFINES) -g \
396               -O3 \
397           -fPIE -I$(LIBNX)/include/ -ffunction-sections -fdata-sections -ftls-model=local-exec -Wl,--allow-multiple-definition -specs=$(LIBNX)/switch.specs
398   CFLAGS += $(INCDIRS)
399   CFLAGS  += $(INCLUDE)  -D__SWITCH__ -DHAVE_LIBNX -DARM -march=armv8-a -mtune=cortex-a57 -mtp=soft -fomit-frame-pointer -ffast-math
400   CXXFLAGS := $(ASFLAGS) $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11
401   CFLAGS += -std=gnu11
402   STATIC_LINKING = 1
403
404# emscripten
405else ifeq ($(platform), emscripten)
406	TARGET := $(TARGET_NAME)_libretro_emscripten.bc
407
408# CTR (3DS)
409else ifeq ($(platform), ctr)
410	TARGET := $(TARGET_NAME)_libretro_$(platform).a
411	CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT)
412	CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT)
413	AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT)
414	STATIC_LINKING = 1
415	CFLAGS += -D_3DS
416	CXXFLAGS += -D_3DS
417
418   CFLAGS += -DARM11
419   CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard
420   CFLAGS += -Wall -mword-relocations
421   CFLAGS += -fomit-frame-pointer -ffast-math
422
423   CXXFLAGS += -DARM11
424   CXXFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard
425   CXXFLAGS += -Wall -mword-relocations
426   CXXFLAGS += -fomit-frame-pointer -ffast-math
427
428# Vita
429else ifeq ($(platform), vita)
430	TARGET := $(TARGET_NAME)_libretro_$(platform).a
431	CC = arm-vita-eabi-gcc$(EXE_EXT)
432	CXX = arm-vita-eabi-g++$(EXE_EXT)
433	AR = arm-vita-eabi-ar$(EXE_EXT)
434	STATIC_LINKING = 1
435	CFLAGS += -DVITA -ftree-vectorize -mfloat-abi=hard -ffast-math -fsingle-precision-constant -funroll-loops -fno-short-enums
436	CXXFLAGS += -DVITA -ftree-vectorize -mfloat-abi=hard -ffast-math -fsingle-precision-constant -funroll-loops -fno-short-enums
437
438# Windows
439else
440	TARGET := $(TARGET_NAME)_libretro.dll
441	CC ?= gcc
442	CC_AS ?= gcc
443	CXX ?= g++
444	SHARED := -shared -static-libgcc -static-libstdc++ -Wl,-no-undefined -Wl,-version-script=build/link.T
445
446endif
447
448
449ifeq ($(HAVE_COMPAT), 1)
450	PLATFORM_DEFINES += -DHAVE_COMPAT
451endif
452
453ifeq ($(DEBUG), 1)
454	CFLAGS += -O0 -g
455	CXXFLAGS += -O0 -g
456else ifeq ($(platform), emscripten)
457	CFLAGS += -O2
458	CXXFLAGS += -O2 -fno-exceptions -fno-rtti -DHAVE_STDINT_H
459else
460	CFLAGS += -O3
461	CXXFLAGS += -O3 -fno-exceptions -fno-rtti -DHAVE_STDINT_H
462endif
463
464ifeq ($(LOG_PERFORMANCE), 1)
465	CFLAGS += -DLOG_PERFORMANCE
466	CXXFLAGS += -DLOG_PERFORMANCE
467endif
468
469
470DEFINES := -D__LIBRETRO__ $(PLATFORM_DEFINES)
471DEFINES += -DHAVE_CONFIG_H
472
473CFLAGS   += $(fpic) $(DEFINES)
474CFLAGS   += -Wall
475
476CXXFLAGS += $(fpic) $(DEFINES)
477CXXFLAGS += -Wall
478
479LDFLAGS += $(LIBM)
480
481ROMS =
482SNAPS =
483
484include build/Makefile.common
485
486HEADERS += $(ROMS:.rom=.h) $(SNAPS:.szx=.h) $(CORE_DIR)/fuse/config.h $(CORE_DIR)/libspectrum/config.h
487OBJS += $(SOURCES_C:.c=.o) $(SOURCES_CXX:.cpp=.o)
488
489INCDIRS := $(EXTRA_INCLUDES) $(INCLUDES)
490
491%.o: %.cpp
492	$(CXX) -c -o $@ $< $(CXXFLAGS) $(INCDIRS)
493
494%.o: %.c
495	$(CC) -c -o $@ $< $(CFLAGS) $(INCDIRS)
496
497%.o: %.S
498	$(CC_AS) -c -o $@ $< $(CFLAGS) $(INCDIRS)
499
500ifeq ($(platform), theos_ios)
501COMMON_FLAGS := -DIOS $(COMMON_DEFINES) $(INCFLAGS) -I$(THEOS_INCLUDE_PATH) -Wno-error
502$(LIBRARY_NAME)_CFLAGS += $(CFLAGS) $(COMMON_FLAGS)
503$(LIBRARY_NAME)_CXXFLAGS += $(CXXFLAGS) $(COMMON_FLAGS)
504${LIBRARY_NAME}_FILES = $(SOURCES_CXX) $(SOURCES_C)
505${LIBRARY_NAME}_LIBRARIES = z
506include $(THEOS_MAKE_PATH)/library.mk
507else
508all: $(TARGET)
509
510$(TARGET): $(HEADERS) $(OBJS)
511ifeq ($(STATIC_LINKING), 1)
512	$(AR) rcs $@ $(OBJS)
513else
514	$(CC) -o $@ $(SHARED) $(OBJS) $(LDFLAGS) $(LIBS)
515endif
516
517$(CORE_DIR)/fuse/config.h:
518	cp $(CORE_DIR)/src/config_fuse.h $(CORE_DIR)/fuse/config.h
519
520$(CORE_DIR)/libspectrum/config.h:
521	cp $(CORE_DIR)/src/config_libspectrum.h $(CORE_DIR)/libspectrum/config.h
522
523$(CORE_DIR)/src/version.c: FORCE
524	cat $(CORE_DIR)/etc/version.c.templ | sed s/HASH/`git rev-parse HEAD | tr -d "\n"`/g > $@
525
526clean-objs:
527	rm -f $(OBJS)
528
529clean:
530	rm -f $(OBJS)
531	rm -f $(TARGET)
532
533.PHONY: clean clean-objs FORCE
534
535# Remove all built-in implicit rules
536.SUFFIXES:
537endif
538
539endif
540