1LIBRETRO_SWITCH        = 0
2
3INTERNAL_LIBAVCODEC    = 0
4INTERNAL_LIBAVFORMAT   = 0
5INTERNAL_LIBAVUTIL     = 0
6INTERNAL_LIBSWRESAMPLE = 0
7INTERNAL_LIBSWSCALE    = 0
8
9INTERNAL_LIBFLAC       = 0
10INTERNAL_LIBOGG        = 0
11INTERNAL_LIBLAME       = 0
12INTERNAL_LIBFAAC       = 0
13INTERNAL_LIBSPEEX      = 0
14INTERNAL_LIBTHEORA     = 0
15INTERNAL_LIBOPUS       = 0
16INTERNAL_LIBVORBIS     = 0
17INTERNAL_WEBP          = 0
18INTERNAL_ZLIB          = 0
19INTERNAL_WAVPACK       = 0
20INTERNAL_XVIDCORE      = 0
21INTERNAL_VPX           = 0
22
23WANT_LIBASS            = 0
24
25GLFLAGS   :=
26
27BAKE_IN_FFMPEG := 0
28
29#CPU Optimization flags
30HAVE_SSE2 = 0
31HAVE_MMX = 0
32HAVE_THREADS=1
33
34#Additional codec support for internal FFmpeg
35HAVE_WAVPACK   = 0
36HAVE_LIBSPEEX  = 0
37HAVE_LIBWEBP   = 0
38HAVE_LIBOGG    = 0
39HAVE_LIBX264   = 0
40HAVE_LIBX265   = 0
41HAVE_LIBFAAC   = 0
42HAVE_LIBFLAC   = 0
43HAVE_LIBLAME   = 0
44HAVE_LIBTWOLAME = 0
45HAVE_LIBVORBIS = 0
46HAVE_LIBTHEORA = 0
47HAVE_LIBOPUS   = 0
48HAVE_ZLIB      = 0
49
50#Video support
51OPENGL 		  = 1
52HAVE_CODEC_HW = 0
53
54CORE_DIR := .
55
56ifeq ($(platform),)
57platform = unix
58ifeq ($(shell uname -a),)
59   platform = win
60else ifneq ($(findstring MINGW,$(shell uname -a)),)
61   platform = win
62else ifneq ($(findstring Darwin,$(shell uname -a)),)
63   platform = osx
64else ifneq ($(findstring win,$(shell uname -a)),)
65   platform = win
66endif
67endif
68
69system = $(shell uname -m)
70
71ifeq ($(system),x86_64)
72ARCH_X86 = 1
73ARCH_X86_64 = 1
74endif
75
76TARGET_NAME := ffmpeg
77
78GIT_VERSION ?= " $(shell git rev-parse --short HEAD || echo unknown)"
79ifneq ($(GIT_VERSION)," unknown")
80       CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\"
81endif
82
83ifneq (,$(findstring unix,$(platform)))
84	ARCH_X86 = 1
85   TARGET := $(TARGET_NAME)_libretro.so
86   fpic := -fPIC
87   SHARED := -shared -Wl,--version-script=link.T -Wl,--no-undefined -fPIC
88ifeq ($(OPENGL),1)
89   GL_LIB := -lGL
90	HAVE_OPENGL = 1
91	HAVE_GL_FFT := 1
92endif
93   HAVE_SSA := 1
94
95	HAVE_POLL_H = 1
96	HAVE_GETADDRINFO = 1
97	HAVE_NETWORK = 1
98	HAVE_SOCKLEN = 1
99	HAVE_PTHREADS=1
100
101else ifneq (,$(findstring osx,$(platform)))
102
103   ARCH_X86 = 1
104   LIBRETRO_SWITCH = 1
105   TARGET := $(TARGET_NAME)_libretro.dylib
106   fpic := -fPIC
107   SHARED := -dynamiclib
108   CFLAGS += -I. -I.. -DHAVE_FMINF
109
110ifeq ($(OPENGL),1)
111   GL_LIB := -framework OpenGL
112   HAVE_GL_FFT := 1
113	HAVE_OPENGL = 1
114endif
115   OSXVER = `sw_vers -productVersion | cut -d. -f 2`
116   OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"`
117   fpic += -mmacosx-version-min=10.1
118	HAVE_POLL_H = 1
119	HAVE_GETADDRINFO = 1
120	HAVE_NETWORK = 1
121	HAVE_SOCKLEN = 1
122	HAVE_PTHREADS=1
123
124else ifneq (,$(findstring ios,$(platform)))
125
126   #ARCH_ARM = 1
127   LIBRETRO_SWITCH = 1
128   TARGET := $(TARGET_NAME)_libretro_ios.dylib
129   fpic := -fPIC
130   SHARED := -dynamiclib
131   CFLAGS += -I. -I.. -DHAVE_FMINF -DIOS -DHAVE_UNISTD_H
132ifeq ($(OPENGL),1)
133	HAVE_OPENGL = 1
134	GLES = 1
135   GL_LIB := -framework OpenGLES
136   HAVE_GL_FFT := 1
137   CFLAGS += -DHAVE_OPENGLES -DHAVE_OPENGLES3
138endif
139   HAVE_ARMV7=1
140   HAVE_PTHREADS=1
141   ARCH_X86 = 0
142   ARCH_X86_64 = 0
143
144ifeq ($(IOSSDK),)
145  IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
146endif
147
148ifeq ($(platform),ios-arm64)
149   CC = cc -arch arm64 -isysroot $(IOSSDK)
150   CXX  = c++ -arch arm64 -isysroot $(IOSSDK)
151else
152   CC = cc -arch armv7 -isysroot $(IOSSDK)
153   CXX  = c++ -arch armv7 -isysroot $(IOSSDK)
154   LD = armv7-apple-darwin11-ld
155endif
156
157ifeq ($(platform),$(filter $(platform),ios9 ios-arm64))
158   CC += -miphoneos-version-min=8.0
159   CFLAGS += -miphoneos-version-min=8.0
160else
161   CC += -miphoneos-version-min=5.0
162   CFLAGS += -miphoneos-version-min=5.0
163endif
164	CFLAGS += -DHAVE_STRUCT_SOCKADDR_STORAGE -DHAVE_STRUCT_ADDRINFO
165	HAVE_POLL_H = 1
166	HAVE_GETADDRINFO = 1
167	HAVE_NETWORK = 1
168	HAVE_SOCKLEN = 1
169
170else ifeq ($(platform), emscripten)
171	ARCH_X86 = 0
172	ARCH_X86_64=0
173	ARCH_ARM = 0
174	TARGET := $(TARGET_NAME)_libretro_$(platform).bc
175	STATIC_LINKING=1
176   HAVE_PTHREADS=1
177   LIBRETRO_SWITCH = 1
178	CFLAGS += -DHAVE_UNISTD_H
179	CFLAGS += -DHAVE_STRUCT_SOCKADDR_STORAGE -DHAVE_STRUCT_ADDRINFO
180	HAVE_POLL_H = 1
181	HAVE_GETADDRINFO = 1
182	HAVE_NETWORK = 1
183	HAVE_SOCKLEN = 1
184	HAVE_PTHREADS=1
185
186# Windows
187else
188
189	ARCH_X86 = 1
190   TARGET := $(TARGET_NAME)_libretro.dll
191   SHARED := -shared -static-libgcc -static-libstdc++ -s -Wl,--version-script=link.T -Wl,--no-undefined
192   CFLAGS += -Iffmpeg
193ifeq ($(OPENGL),1)
194   GL_LIB := -lopengl32
195   CFLAGS += -DHAVE_OPENGL
196	HAVE_OPENGL = 1
197	HAVE_GL_FFT := 1
198	WIN32_PLATFORM := 1
199endif
200   LIBS += -L.
201endif
202
203ifeq ($(LIBRETRO_SWITCH), 1)
204   CFLAGS += -DUPSTREAM_VERSION=\"$(shell cat ../RELEASE)\"
205endif
206
207CFLAGS += -D__LIBRETRO__
208
209include Makefile.common
210
211CFLAGS += $(DEFINES) $(INCFLAGS) $(GLFLAGS) $(DEF_FLAGS)
212CFLAGS += -Wall $(fpic)
213
214ifeq ($(DEBUG), 1)
215   CFLAGS += -O0 -g
216else
217   CFLAGS += -O3
218endif
219
220OBJECTS := $(SOURCES_C:.c=.o) $(SOURCES_CXX:.cpp=.o)
221
222all: $(TARGET)
223
224%.o: %.c
225	$(CC) -c -std=gnu99 -o $@ $< $(CFLAGS)
226
227%.o: %.cpp
228	$(CXX) -c -fno-strict-aliasing -o $@ $< $(CFLAGS)
229
230$(TARGET): $(OBJECTS)
231ifeq ($(STATIC_LINKING),1)
232	$(AR) rcs $@ $(OBJECTS)
233else
234	$(CXX) -o $@ $^ $(LIBS) $(SHARED)
235endif
236
237clean:
238	rm -f $(OBJECTS)
239	rm -f $(TARGET)
240
241.PHONY: clean
242