1# Use add_opt to set HAVE_FOO variables the first time
2# example: add_opt FOO no
3#
4# Only needed when check_enabled ($2), check_platform, check_lib, check_pkgconf,
5# check_header, check_macro and check_switch are not used.
6
7check_switch '' C99 -std=gnu99 ''
8
9if [ "$HAVE_C99" = 'no' ]; then
10   HAVE_C99='auto'
11   check_switch '' C99 -std=c99 'Cannot find a C99 compatible compiler.'
12fi
13
14check_switch cxx CXX11 -std=c++11 ''
15check_switch '' NOUNUSED -Wno-unused-result ''
16check_switch '' NOUNUSED_VARIABLE -Wno-unused-variable ''
17
18# There are still broken 64-bit Linux distros out there. :)
19[ -z "$CROSS_COMPILE" ] && [ -d /usr/lib64 ] && add_dirs LIBRARY /usr/lib64
20
21[ -z "$CROSS_COMPILE" ] && [ -d /opt/local/lib ] && add_dirs LIBRARY /opt/local/lib
22
23[ "${GLOBAL_CONFIG_DIR:-}" ] ||
24{	case "$PREFIX" in
25		/usr*) GLOBAL_CONFIG_DIR=/etc ;;
26		*) GLOBAL_CONFIG_DIR="$PREFIX"/etc ;;
27	esac
28}
29
30DYLIB=-ldl
31CLIB=-lc
32PTHREADLIB=-lpthread
33SOCKETLIB=-lc
34SOCKETHEADER=
35INCLUDES='usr/include usr/local/include'
36SORT='sort'
37EXTRA_GL_LIBS=''
38VC_PREFIX=''
39
40if [ "$OS" = 'BSD' ]; then
41   [ -d /usr/local/include ] && add_dirs INCLUDE /usr/local/include
42   [ -d /usr/local/lib ] && add_dirs LIBRARY /usr/local/lib
43   DYLIB=-lc;
44elif [ "$OS" = 'Haiku' ]; then
45   DYLIB=""
46   CLIB=-lroot
47   PTHREADLIB=-lroot
48   SOCKETLIB=-lnetwork
49   CFLAGS="$CFLAGS -D_BSD_SOURCE"
50elif [ "$OS" = 'Win32' ]; then
51   SOCKETLIB=-lws2_32
52   SOCKETHEADER="#include <winsock2.h>"
53   DYLIB=
54elif [ "$OS" = 'Cygwin' ]; then
55   die 1 'Error: Cygwin is not a supported platform. See https://bot.libretro.com/docs/compilation/windows/'
56elif [ "$OS" = 'SunOS' ]; then
57   SORT='gsort'
58fi
59
60add_define MAKEFILE DATA_DIR "$SHARE_DIR"
61add_define MAKEFILE DYLIB_LIB "$DYLIB"
62
63check_lib '' SYSTEMD -lsystemd sd_get_machine_names
64
65if [ "$HAVE_VIDEOCORE" != "no" ]; then
66   check_pkgconf VC_TEST bcm_host
67
68   # use fallback if pkgconfig is not available
69   if [ -z "$VC_TEST_LIBS" ]; then
70      [ -d /opt/vc/lib ] && add_dirs LIBRARY /opt/vc/lib /opt/vc/lib/GL
71      check_lib '' VIDEOCORE -lbcm_host bcm_host_init "-lvcos -lvchiq_arm"
72   else
73      add_opt VIDEOCORE "$HAVE_VC_TEST"
74   fi
75fi
76
77if [ "$HAVE_VIDEOCORE" = 'yes' ]; then
78   HAVE_OPENGLES='auto'
79   VC_PREFIX='brcm'
80   INCLUDES="${INCLUDES} opt/vc/include"
81
82   # use fallback if pkgconfig is not available
83   if [ -z "$VC_TEST_LIBS" ]; then
84      [ -d /opt/vc/include ] && add_dirs INCLUDE /opt/vc/include
85      [ -d /opt/vc/include/interface/vcos/pthreads ] && add_dirs INCLUDE /opt/vc/include/interface/vcos/pthreads
86      [ -d /opt/vc/include/interface/vmcs_host/linux ] && add_dirs INCLUDE /opt/vc/include/interface/vmcs_host/linux
87      EXTRA_GL_LIBS="-lbrcmEGL -lbrcmGLESv2 -lbcm_host -lvcos -lvchiq_arm"
88   fi
89fi
90
91if [ "$HAVE_7ZIP" = "yes" ]; then
92   add_dirs INCLUDE ./deps/7zip
93fi
94
95if [ "$HAVE_PRESERVE_DYLIB" = "yes" ]; then
96   die : 'Notice: Disabling dlclose() of shared objects for Valgrind support.'
97fi
98
99if [ "$HAVE_NEON" = "yes" ]; then
100   add_define MAKEFILE NEON_CFLAGS '-mfpu=neon -marm'
101   add_define MAKEFILE NEON_ASFLAGS -mfpu=neon
102fi
103
104if [ "$HAVE_FLOATHARD" = "yes" ]; then
105   add_define MAKEFILE FLOATHARD_CFLAGS -mfloat-abi=hard
106fi
107
108if [ "$HAVE_FLOATSOFTFP" = "yes" ]; then
109   add_define MAKEFILE FLOATSOFTFP_CFLAGS -mfloat-abi=softfp
110fi
111
112
113if [ "$HAVE_ANGLE" = 'yes' ]; then
114   eval "HAVE_EGL=\"yes\""
115   add_dirs INCLUDE ./gfx/include/ANGLE
116   add_opt OPENGL no
117   add_opt OPENGLES yes
118   add_define MAKEFILE OPENGLES_LIBS "-lGLESv2"
119
120   case "$PLATFORM_NAME" in
121      MINGW32* )
122         add_dirs LIBRARY ./pkg/windows/x86
123      ;;
124      MINGW64* )
125         add_dirs LIBRARY ./pkg/windows/x86_64
126      ;;
127   esac
128else
129   check_header '' EGL EGL/egl.h EGL/eglext.h
130   # some systems have EGL libs, but no pkgconfig
131   # https://github.com/linux-sunxi/sunxi-mali/pull/8
132   check_val '' EGL "-l${VC_PREFIX}EGL $EXTRA_GL_LIBS" '' "${VC_PREFIX}egl" '' '' true
133fi
134
135if [ "$HAVE_EGL" = 'yes' ]; then
136   EGL_LIBS="$EGL_LIBS $EXTRA_GL_LIBS"
137fi
138
139check_lib '' SSA '-lfribidi -lass' ass_library_init
140check_lib '' SSE '-msse -msse2'
141check_pkgconf EXYNOS libdrm_exynos
142
143if [ "$LIBRETRO" ]; then
144   die : 'Notice: Explicit libretro used, disabling dynamic libretro loading ...'
145   add_opt DYNAMIC no
146else
147   LIBRETRO="-lretro"
148fi
149
150[ "$HAVE_DYNAMIC" = 'yes' ] || {
151   check_lib '' RETRO "$LIBRETRO" retro_init "$DYLIB" '' '' 'Cannot find libretro, did you forget --with-libretro="-lretro"?'
152   add_define MAKEFILE libretro "$LIBRETRO"
153}
154
155add_define MAKEFILE ASSETS_DIR "${ASSETS_DIR:-$SHARE_DIR}/retroarch"
156add_define MAKEFILE BIN_DIR "${BIN_DIR:-${PREFIX}/bin}"
157add_define MAKEFILE DOC_DIR "${DOC_DIR:-${SHARE_DIR}/doc/retroarch}"
158add_define MAKEFILE MAN_DIR "${MAN_DIR:-${SHARE_DIR}/man}"
159
160check_platform DOS SHADERPIPELINE 'Shader-based pipelines are' false
161check_platform DOS LANGEXTRA 'Extra languages are' false
162
163check_lib '' THREADS "$PTHREADLIB" pthread_create
164check_enabled THREADS THREAD_STORAGE 'Thread Local Storage' 'Threads are' false
165check_lib '' THREAD_STORAGE "$PTHREADLIB" pthread_key_create
166
167check_pkgconf LIBCHECK check 0.15
168
169if [ "$OS" = 'Linux' ]; then
170   check_header '' CDROM sys/ioctl.h scsi/sg.h
171fi
172
173check_platform 'Linux Win32' CDROM 'CD-ROM is' user
174
175if [ "$OS" = 'Win32' ]; then
176   add_opt DYLIB yes
177else
178   check_lib '' DYLIB "$DYLIB" dlopen
179fi
180
181check_lib '' NETWORKING "$SOCKETLIB" socket "" "$SOCKETHEADER"
182
183if [ "$HAVE_NETWORKING" != 'no' ]; then
184   add_opt GETADDRINFO auto
185   add_opt SOCKET_LEGACY no
186
187   # WinXP+ implements getaddrinfo()
188   if [ "$OS" = 'Win32' ]; then
189      HAVE_GETADDRINFO=yes
190   else
191      check_lib '' GETADDRINFO "$SOCKETLIB" getaddrinfo
192      if [ "$HAVE_GETADDRINFO" != 'yes' ]; then
193         HAVE_SOCKET_LEGACY=yes
194         die : 'Notice: RetroArch will use legacy socket support'
195      fi
196   fi
197
198   add_opt NETWORK_CMD yes
199else
200   add_opt NETWORK_CMD no
201fi
202
203check_enabled NETWORKING CHEEVOS cheevos 'Networking is' false
204check_enabled NETWORKING DISCORD discord 'Networking is' false
205check_enabled NETWORKING MINIUPNPC miniupnpc 'Networking is' false
206check_enabled NETWORKING SSL ssl 'Networking is' false
207check_enabled NETWORKING TRANSLATE OCR 'Networking is' false
208check_enabled NETWORKING HAVE_NETPLAYDISCOVERY 'Netplay discovery' 'Networking is' false
209
210check_enabled NETWORKING NETWORKGAMEPAD 'the networked game pad' 'Networking is' true
211check_enabled MINIUPNPC BUILTINMINIUPNPC 'builtin miniupnpc' 'miniupnpc is' true
212
213check_lib '' MINIUPNPC '-lminiupnpc'
214check_lib '' STDIN_CMD "$CLIB" fcntl
215
216if [ "$HAVE_NETWORK_CMD" = "yes" ] || [ "$HAVE_STDIN_CMD" = "yes" ]; then
217   add_opt COMMAND yes
218else
219   add_opt COMMAND no
220fi
221
222check_lib '' GETOPT_LONG "$CLIB" getopt_long
223
224if [ "$HAVE_DYLIB" = 'no' ] && [ "$HAVE_DYNAMIC" = 'yes' ]; then
225   die 1 'Error: Dynamic loading of libretro is enabled, but your platform does not appear to have dlopen(), use --disable-dynamic or --with-libretro="-lretro".'
226fi
227
228check_val '' ALSA -lasound alsa alsa '' '' false
229check_val '' CACA -lcaca '' caca '' '' false
230check_val '' SIXEL -lsixel '' libsixel 1.6.0 '' false
231
232check_macro AUDIOIO AUDIO_SETINFO sys/audioio.h
233
234if [ "$HAVE_OSS" != 'no' ]; then
235   check_header '' OSS sys/soundcard.h
236   check_header '' OSS_BSD soundcard.h
237   check_lib '' OSS_LIB -lossaudio
238fi
239
240check_platform Linux TINYALSA 'Tinyalsa is' true
241check_platform Linux RPILED 'The RPI led driver is' true
242
243check_platform Darwin METAL 'Metal is' true
244
245if [ "$OS" = 'Darwin' ]; then
246   check_lib '' COREAUDIO "-framework AudioUnit" AudioUnitInitialize
247   check_lib '' CORETEXT "-framework CoreText" CTFontCreateWithName
248
249   if [ "$HAVE_METAL" = yes ]; then
250      check_lib '' COCOA_METAL "-framework AppKit" NSApplicationMain
251      add_opt OPENGL no
252      add_opt OPENGL1 no
253      add_opt OPENGL_CORE no
254      die : 'Notice: Metal cannot coexist with OpenGL (yet), so disabling OpenGL.'
255   else
256      check_lib '' COCOA "-framework AppKit" NSApplicationMain
257   fi
258
259   check_lib '' AVFOUNDATION "-framework AVFoundation"
260   check_lib '' CORELOCATION "-framework CoreLocation"
261   check_lib '' IOHIDMANAGER "-framework IOKit" IOHIDManagerCreate
262   check_lib '' AL "-framework OpenAL" alcOpenDevice
263   HAVE_X11=no # X11 breaks on recent OSXes even if present.
264   HAVE_SDL=no
265   HAVE_SW2=no
266else
267   check_lib '' AL -lopenal alcOpenDevice
268fi
269
270check_pkgconf RSOUND rsound 1.1
271check_pkgconf ROAR libroar 1.0.12
272check_val '' JACK -ljack '' jack 0.120.1 '' false
273check_val '' PULSE -lpulse '' libpulse '' '' false
274check_val '' SDL -lSDL SDL sdl 1.2.10 '' false
275check_val '' SDL2 -lSDL2 SDL2 sdl2 2.0.0 '' false
276
277if [ "$HAVE_SDL2" = 'yes' ] && [ "$HAVE_SDL" = 'yes' ]; then
278   die : 'Notice: SDL drivers will be replaced by SDL2 ones.'
279   HAVE_SDL=no
280fi
281
282check_enabled CXX11 CXX C++ 'C++11 support is' false
283
284check_platform Haiku DISCORD 'Discord is' false
285check_enabled CXX DISCORD discord 'The C++ compiler is' false
286check_enabled CXX QT 'Qt companion' 'The C++ compiler is' false
287
288if [ "$HAVE_QT" != 'no' ]; then
289   check_pkgconf QT5CORE Qt5Core 5.2
290   check_pkgconf QT5GUI Qt5Gui 5.2
291   check_pkgconf QT5WIDGETS Qt5Widgets 5.2
292   check_pkgconf QT5CONCURRENT Qt5Concurrent 5.2
293   check_pkgconf QT5NETWORK Qt5Network 5.2
294   #check_pkgconf QT5WEBENGINE Qt5WebEngine 5.4
295
296   # pkg-config is needed to reliably find Qt5 libraries.
297
298   check_enabled QT5CORE QT Qt 'Qt5Core is' true
299   check_enabled QT5GUI QT Qt 'Qt5GUI is' true
300   check_enabled QT5WIDGETS QT Qt 'Qt5Widgets is' true
301   check_enabled QT5CONCURRENT QT Qt 'Qt5Concurrent is' true
302   check_enabled QT5NETWORK QT Qt 'Qt5Network is' true
303   #check_enabled QT5WEBENGINE QT Qt 'Qt5Webengine is' true
304
305   if [ "$HAVE_QT" != yes ]; then
306      die : 'Notice: Qt support disabled, required libraries were not found.'
307   fi
308
309   check_pkgconf OPENSSL openssl 1.0.0
310fi
311
312check_enabled FLAC BUILTINFLAC 'builtin flac' 'flac is' true
313
314check_val '' FLAC '-lFLAC' '' flac '' '' false
315
316
317check_enabled SSL SYSTEMMBEDTLS 'system mbedtls' 'ssl is' false
318check_enabled SSL BUILTINMBEDTLS 'builtin mbedtls' 'ssl is' false
319check_enabled SSL BUILTINBEARSSL 'builtin bearssl' 'ssl is' false
320
321if [ "$HAVE_SYSTEMMBEDTLS" = "auto" ]; then SYSTEMMBEDTLS_IS_AUTO=yes; else SYSTEMMBEDTLS_IS_AUTO=no; fi
322check_lib '' SYSTEMMBEDTLS '-lmbedtls -lmbedx509 -lmbedcrypto'
323check_header '' SYSTEMMBEDTLS \
324   mbedtls/config.h \
325   mbedtls/certs.h \
326   mbedtls/debug.h \
327   mbedtls/platform.h \
328   mbedtls/net_sockets.h \
329   mbedtls/ssl.h \
330   mbedtls/ctr_drbg.h \
331   mbedtls/entropy.h
332if [ "$SYSTEMMBEDTLS_IS_AUTO" = "yes" ] && [ "$HAVE_SYSTEMMBEDTLS" = "yes" ]; then HAVE_SYSTEMMBEDTLS=auto; fi
333
334SSL_BACKEND_CHOSEN=no
335if [ "$HAVE_SYSTEMMBEDTLS" = "yes" ]; then
336  if [ "$SSL_BACKEND_CHOSEN" = "yes" ]; then die 1 "Can't enable multiple SSL backends"; fi
337  SSL_BACKEND_CHOSEN=yes
338fi
339if [ "$HAVE_BUILTINMBEDTLS" = "yes" ]; then
340  if [ "$SSL_BACKEND_CHOSEN" = "yes" ]; then die 1 "Can't enable multiple SSL backends"; fi
341  SSL_BACKEND_CHOSEN=yes
342fi
343if [ "$HAVE_BUILTINBEARSSL" = "yes" ]; then
344  if [ "$SSL_BACKEND_CHOSEN" = "yes" ]; then die 1 "Can't enable multiple SSL backends"; fi
345  SSL_BACKEND_CHOSEN=yes
346fi
347if [ "$SSL_BACKEND_CHOSEN" = "no" ] && [ "$HAVE_SYSTEMMBEDTLS" = "auto" ]; then
348  HAVE_SYSTEMMBEDTLS=yes
349  SSL_BACKEND_CHOSEN=yes
350fi
351if [ "$SSL_BACKEND_CHOSEN" = "no" ] && [ "$HAVE_BUILTINMBEDTLS" = "auto" ]; then
352  HAVE_BUILTINMBEDTLS=yes
353  SSL_BACKEND_CHOSEN=yes
354fi
355if [ "$SSL_BACKEND_CHOSEN" = "no" ] && [ "$HAVE_BUILTINBEARSSL" = "auto" ]; then
356  HAVE_BUILTINBEARSSL=yes
357  SSL_BACKEND_CHOSEN=yes
358fi
359if [ "$HAVE_SYSTEMMBEDTLS" = "auto" ]; then HAVE_SYSTEMMBEDTLS=no; fi
360if [ "$HAVE_BUILTINMBEDTLS" = "auto" ]; then HAVE_BUILTINMBEDTLS=no; fi
361if [ "$HAVE_BUILTINBEARSSL" = "auto" ]; then HAVE_BUILTINBEARSSL=no; fi
362
363if [ "$HAVE_SSL" = "auto" ]; then HAVE_SSL=$SSL_BACKEND_CHOSEN; fi
364if [ "$HAVE_SSL" = "yes" ] && [ "$SSL_BACKEND_CHOSEN" = "no" ]; then die 1 "error: SSL enabled, but all backends disabled"; fi
365
366
367check_enabled THREADS LIBUSB libusb 'Threads are' false
368check_enabled HID LIBUSB libusb 'HID is' false
369check_val '' LIBUSB -lusb-1.0 libusb-1.0 libusb-1.0 1.0.13 '' false
370
371check_lib '' DINPUT -ldinput8
372check_lib '' D3D8 -ld3d8
373check_lib '' D3D9 -ld3d9
374check_lib '' DSOUND -ldsound
375
376check_enabled DINPUT XINPUT xinput 'Dinput is' true
377
378if [ "$HAVE_D3DX" != 'no' ]; then
379   check_lib '' D3DX8 -ld3dx8
380   check_lib '' D3DX9 -ld3dx9
381fi
382
383check_platform Win32 D3D10 'Direct3D 10 is' true
384check_platform Win32 D3D11 'Direct3D 11 is' true
385check_platform Win32 D3D12 'Direct3D 12 is' true
386check_platform Win32 D3DX 'Direct3DX is' true
387check_platform Win32 WASAPI 'WASAPI is' true
388check_platform Win32 XAUDIO 'XAudio is' true
389check_platform Win32 WINMM 'WinMM is' true
390
391if [ "$HAVE_BLISSBOX" != 'no' ]; then
392   if [ "$HAVE_LIBUSB" != 'no' ] || [ "$OS" = 'Win32' ]; then
393      add_opt BLISSBOX yes
394   else
395      add_opt BLISSBOX no
396   fi
397fi
398
399if [ "$HAVE_OPENGL" != 'no' ] && [ "$HAVE_OPENGLES" != 'yes' ]; then
400   if [ "$OS" = 'Darwin' ]; then
401      check_header '' OPENGL "OpenGL/gl.h"
402      check_lib '' OPENGL "-framework OpenGL"
403   elif [ "$OS" = 'Win32' ]; then
404      check_header '' OPENGL "GL/gl.h"
405      check_lib '' OPENGL -lopengl32
406   else
407      check_header '' OPENGL "GL/gl.h"
408      check_lib '' OPENGL -lGL
409   fi
410
411   if [ "$HAVE_OPENGL" = 'yes' ]; then
412      if [ "$OS" = 'Darwin' ]; then
413         check_lib '' CG '-framework Cg' cgCreateContext
414      elif [ "$OS" = 'Win32' ]; then
415         check_lib cxx CG '-lcg -lcgGL' cgCreateContext
416      else
417         # On some distros, -lCg doesn't link against -lstdc++ it seems ...
418         check_lib cxx CG '-lCg -lCgGL' cgCreateContext
419      fi
420
421      check_pkgconf OSMESA osmesa
422   fi
423else
424   add_opt OPENGL no
425fi
426
427check_enabled EGL OPENGLES OpenGLES 'EGL is' false
428check_enabled EGL OPENGLES3 OpenGLES3 'EGL is' false
429check_enabled EGL VG OpenVG 'EGL is' false
430check_enabled OPENGL CG Cg 'OpenGL is' false
431check_enabled OPENGL OSMESA osmesa 'OpenGL is' false
432check_enabled OPENGL OPENGL1 OpenGL1 'OpenGL is' false
433
434if [ "$HAVE_OPENGL" = 'no' ] && [ "$HAVE_OPENGLES3" = 'no' ]; then
435   die : 'Notice: OpenGL and OpenGLES3 are disabled. Disabling OpenGL core.'
436   HAVE_OPENGL_CORE='no'
437elif [ "$HAVE_OPENGLES" != 'no' ] && [ "$HAVE_OPENGLES3" != 'yes' ]; then
438   die : 'Notice: OpenGLES2 is enabled. Disabling the OpenGL core driver.'
439   HAVE_OPENGL_CORE='no'
440fi
441
442check_enabled 'OPENGL OPENGLES OPENGLES3' GLSL GLSL \
443   'OpenGL and OpenGLES are' false
444
445check_enabled ZLIB BUILTINZLIB 'builtin zlib' 'zlib is' true
446
447check_val '' ZLIB '-lz' '' zlib '' '' false
448check_val '' MPV -lmpv '' mpv '' '' false
449
450check_header '' DRMINGW exchndl.h
451check_lib '' DRMINGW -lexchndl
452
453check_enabled THREADS FFMPEG FFmpeg 'Threads are' false
454
455if [ "$HAVE_FFMPEG" != 'no' ]; then
456   check_val '' AVCODEC -lavcodec '' libavcodec 57 '' false
457   check_val '' AVFORMAT -lavformat '' libavformat 57 '' false
458   check_val '' AVDEVICE -lavdevice '' libavdevice 57 '' false
459   check_val '' SWRESAMPLE -lswresample '' libswresample 2 '' false
460   check_val '' AVUTIL -lavutil '' libavutil 55 '' false
461   check_val '' SWSCALE -lswscale '' libswscale 4 '' false
462
463   check_header '' AV_CHANNEL_LAYOUT libavutil/channel_layout.h
464
465   HAVE_FFMPEG='yes'
466   if [ "$HAVE_AVCODEC" = 'no' ] || [ "$HAVE_SWRESAMPLE" = 'no' ] || [ "$HAVE_AVFORMAT" = 'no' ] || [ "$HAVE_AVUTIL" = 'no' ] || [ "$HAVE_SWSCALE" = 'no' ]; then
467      HAVE_FFMPEG='no'
468      die : 'Notice: FFmpeg built-in support disabled due to missing or unsuitable packages.'
469   fi
470else
471   HAVE_FFMPEG='no'
472fi
473
474if [ "$OS" != 'Win32' ]; then
475   check_lib '' DYNAMIC "$DYLIB" dlopen
476fi
477
478if [ "$HAVE_KMS" != "no" ]; then
479   check_val '' GBM -lgbm '' gbm 9.0 '' false
480   check_val '' DRM -ldrm libdrm libdrm '' '' false
481fi
482
483check_enabled DRM KMS KMS 'DRM is' true
484check_enabled GBM KMS KMS 'GBM is' true
485check_enabled EGL KMS KMS 'EGL is' true
486
487if [ "$HAVE_EGL" = "yes" ]; then
488   if [ "$HAVE_OPENGLES" != "no" ]; then
489      if [ "$OPENGLES_LIBS" ] || [ "$OPENGLES_CFLAGS" ]; then
490         die : "Notice: Using custom OpenGLES CFLAGS ($OPENGLES_CFLAGS) and LDFLAGS ($OPENGLES_LIBS)."
491         add_define MAKEFILE OPENGLES_LIBS "$OPENGLES_LIBS"
492         add_define MAKEFILE OPENGLES_CFLAGS "$OPENGLES_CFLAGS"
493      else
494         check_val '' OPENGLES "-l${VC_PREFIX}GLESv2 $EXTRA_GL_LIBS" '' "${VC_PREFIX}glesv2" '' '' true
495      fi
496   fi
497   check_val '' VG "-l${VC_PREFIX}OpenVG $EXTRA_GL_LIBS" '' "${VC_PREFIX}vg" '' '' false
498fi
499
500check_pkgconf DBUS dbus-1
501check_val '' UDEV "-ludev" '' libudev '' '' false
502check_val '' V4L2 -lv4l2 '' libv4l2 '' '' false
503check_val '' FREETYPE -lfreetype freetype2 freetype2 '' '' false
504check_val '' FONTCONFIG -lfontconfig fontconfig fontconfig '' '' false
505check_val '' X11 -lX11 '' x11 '' '' false
506
507if [ "$HAVE_X11" != 'no' ]; then
508   check_val '' XCB -lxcb '' xcb '' '' false
509   check_val '' XEXT -lXext '' xext '' '' false
510   check_val '' XF86VM -lXxf86vm '' xxf86vm '' '' false
511else
512   die : 'Notice: X11 not present. Skipping X11 code paths.'
513fi
514
515check_enabled X11 XINERAMA Xinerama 'Xinerama is' false
516check_enabled X11 XSHM XShm 'XShm is' false
517check_enabled X11 XRANDR Xrandr 'Xrandr is' false
518check_enabled X11 XVIDEO XVideo 'Xvideo is' false
519check_enabled XEXT XVIDEO XVideo 'Xext is' false
520check_enabled XF86VM XVIDEO XVideo 'XF86vm is' false
521
522check_val '' XVIDEO -lXv '' xv '' '' false
523check_val '' XINERAMA -lXinerama '' xinerama '' '' false
524check_lib '' XRANDR -lXrandr
525check_header '' XSHM X11/Xlib.h X11/extensions/XShm.h
526check_val '' XKBCOMMON -lxkbcommon '' xkbcommon 0.3.2 '' false
527check_val '' WAYLAND '-lwayland-egl -lwayland-client' '' wayland-egl 10.1.0 '' false
528check_val '' WAYLAND_CURSOR -lwayland-cursor '' wayland-cursor 1.12 '' false
529check_pkgconf WAYLAND_PROTOS wayland-protocols 1.15
530check_pkgconf WAYLAND_SCANNER wayland-scanner '1.15 1.12'
531
532if [ "$HAVE_WAYLAND_SCANNER" = yes ] &&
533   [ "$HAVE_WAYLAND_CURSOR" = yes ] &&
534   [ "$HAVE_WAYLAND" = yes ]; then
535      ./gfx/common/wayland/generate_wayland_protos.sh \
536         -c "$WAYLAND_SCANNER_VERSION" \
537         -p "$HAVE_WAYLAND_PROTOS" \
538         -s "$SHARE_DIR" ||
539         die 1 'Error: Failed generating wayland protocols.'
540else
541    die : 'Notice: wayland libraries not found, disabling wayland support.'
542    HAVE_WAYLAND='no'
543fi
544
545check_header '' PARPORT linux/parport.h
546check_header '' PARPORT linux/ppdev.h
547
548if [ "$OS" != 'Win32' ] && [ "$OS" != 'Linux' ]; then
549   check_lib '' STRL "$CLIB" strlcpy
550fi
551
552check_lib '' STRCASESTR "$CLIB" strcasestr
553check_lib '' MMAP "$CLIB" mmap
554
555check_enabled CXX VULKAN vulkan 'The C++ compiler is' false
556check_enabled CXX OPENGL_CORE 'OpenGL core' 'The C++ compiler is' false
557check_enabled THREADS VULKAN vulkan 'Threads are' false
558
559if [ "$HAVE_VULKAN" != "no" ] && [ "$OS" = 'Win32' ]; then
560   HAVE_VULKAN=yes
561else
562   check_lib '' VULKAN -lvulkan vkCreateInstance
563fi
564
565if [ "$HAVE_MENU" != 'no' ]; then
566   if [ "$HAVE_OPENGL" = 'no' ]      &&
567      [ "$HAVE_OPENGL1" = 'no' ]     &&
568      [ "$HAVE_OPENGLES" = 'no' ]    &&
569      [ "$HAVE_OPENGL_CORE" = 'no' ] &&
570      [ "$HAVE_VULKAN" = 'no' ]      &&
571      [ "$HAVE_D3D10" = 'no' ]       &&
572      [ "$HAVE_D3D11" = 'no' ]       &&
573      [ "$HAVE_D3D12" = 'no' ]       &&
574      [ "$HAVE_METAL" = 'no' ]; then
575      if [ "$OS" = 'Win32' ]; then
576         HAVE_SHADERPIPELINE=no
577         HAVE_VULKAN=no
578      else
579         if [ "$HAVE_CACA" != 'yes' ] && [ "$HAVE_SIXEL" != 'yes' ] &&
580            [ "$HAVE_SDL" != 'yes' ] && [ "$HAVE_SDL2" != 'yes' ]; then
581            add_opt RGUI no
582         fi
583         add_opt MATERIALUI no
584         add_opt OZONE no
585         add_opt XMB no
586         add_opt STRIPES no
587      fi
588      die : 'Notice: Hardware rendering context not available.'
589   fi
590fi
591
592if [ "$HAVE_STEAM" = 'yes' ]; then
593   add_opt ONLINE_UPDATER no
594   add_opt UPDATE_CORES no
595   die : 'Notice: Steam build enabled, disabling online updater as well.'
596fi
597
598check_enabled CXX SLANG slang 'The C++ compiler is' false
599check_enabled CXX GLSLANG glslang 'The C++ compiler is' false
600check_enabled CXX SPIRV_CROSS SPIRV-Cross 'The C++ compiler is' false
601
602check_enabled GLSLANG BUILTINGLSLANG 'builtin glslang' 'glslang is' true
603
604if [ "$HAVE_GLSLANG" != no ]; then
605   check_header cxx GLSLANG \
606      glslang/Public/ShaderLang.h \
607      glslang/SPIRV/GlslangToSpv.h
608
609   check_lib cxx GLSLANG -lglslang '' '-lSPIRV'
610   check_lib cxx GLSLANG_OSDEPENDENT -lOSDependent
611   check_lib cxx GLSLANG_OGLCOMPILER -lOGLCompiler
612   check_lib cxx GLSLANG_HLSL -lHLSL '' '-lglslang -lSPIRV'
613   check_lib cxx GLSLANG_SPIRV -lSPIRV
614   check_lib cxx GLSLANG_SPIRV_TOOLS_OPT -lSPIRV-Tools-opt
615   check_lib cxx GLSLANG_SPIRV_TOOLS -lSPIRV-Tools
616
617   if [ "$HAVE_GLSLANG" = no ] ||
618      [ "$HAVE_GLSLANG_OSDEPENDENT" = no ] ||
619      [ "$HAVE_GLSLANG_OGLCOMPILER" = no ] ||
620      [ "$HAVE_GLSLANG_HLSL" = no ] ||
621      [ "$HAVE_GLSLANG_SPIRV" = no ] ||
622      [ "$HAVE_GLSLANG_SPIRV_TOOLS_OPT" = no ] ||
623      [ "$HAVE_GLSLANG_SPIRV_TOOLS" = no ]; then
624      if [ "$HAVE_BUILTINGLSLANG" != yes ]; then
625         die : 'Notice: System glslang libraries not found, disabling glslang support.'
626         HAVE_GLSLANG=no
627      else
628         HAVE_GLSLANG=yes
629      fi
630   else
631      HAVE_GLSLANG=yes
632   fi
633fi
634
635check_enabled SLANG GLSLANG glslang 'slang is' false
636check_enabled SLANG SPIRV_CROSS SPIRV-Cross 'slang is' false
637check_enabled SLANG OPENGL_CORE 'OpenGL core' 'slang is' false
638check_enabled SLANG VULKAN vulkan 'slang is' false
639check_enabled SLANG METAL metal 'slang is' false
640
641check_enabled GLSLANG SLANG slang 'glslang is' false
642check_enabled GLSLANG SPIRV_CROSS SPIRV-Cross 'glslang is' false
643check_enabled GLSLANG OPENGL_CORE 'OpenGL core' 'glslang is' false
644check_enabled GLSLANG VULKAN vulkan 'glslang is' false
645check_enabled GLSLANG METAL metal 'glslang is' false
646
647check_enabled SPIRV_CROSS SLANG slang 'SPIRV-Cross is' false
648check_enabled SPIRV_CROSS GLSLANG glslang 'SPIRV-Cross is' false
649check_enabled SPIRV_CROSS OPENGL_CORE 'OpenGL core' 'SPIRV-Cross is' false
650check_enabled SPIRV_CROSS VULKAN vulkan 'SPIRV-Cross is' false
651check_enabled SPIRV_CROSS METAL metal 'SPIRV-Cross is' false
652
653check_enabled 'OPENGL_CORE METAL VULKAN' SLANG slang '' user
654check_enabled 'OPENGL_CORE METAL VULKAN' GLSLANG glslang '' user
655check_enabled 'OPENGL_CORE METAL VULKAN' SPIRV_CROSS SPIRV-Cross '' user
656
657check_macro NEON __ARM_NEON__
658
659add_define MAKEFILE OS "$OS"
660
661if [ "$ARCHITECTURE_NAME" = 'Power Macintosh' ]; then
662   HAVE_LANGEXTRA='no'
663fi
664
665if [ "$HAVE_DEBUG" = 'yes' ]; then
666   add_define MAKEFILE DEBUG 1
667   if [ "$HAVE_OPENGL" = 'yes' ] ||
668      [ "$HAVE_OPENGL1" = 'yes' ] ||
669      [ "$HAVE_OPENGLES" = 'yes' ] ||
670      [ "$HAVE_OPENGLES3" = 'yes' ]; then
671      add_define MAKEFILE GL_DEBUG 1
672   fi
673   if [ "$HAVE_VULKAN" = 'yes' ]; then
674      add_define MAKEFILE VULKAN_DEBUG 1
675   fi
676fi
677
678check_enabled 'ZLIB BUILTINZLIB' RPNG RPNG 'zlib is' false
679check_enabled V4L2 VIDEOPROCESSOR 'video processor' 'Video4linux2 is' true
680
681if [ "$HAVE_CXX11" = 'yes' ]; then
682   if [ "$OS" = 'Linux' ]; then
683      check_enabled 'VIDEOCORE X11' SR2 'CRT modeswitching' 'CRT is' true
684   else
685      check_platform Win32 SR2 'CRT modeswitching is' true
686   fi
687fi
688