1 # CMake build file list for OpenAL
3 CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
5 IF(COMMAND CMAKE_POLICY)
6 CMAKE_POLICY(SET CMP0003 NEW)
7 ENDIF(COMMAND CMAKE_POLICY)
9 SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
11 INCLUDE(CheckFunctionExists)
12 INCLUDE(CheckLibraryExists)
13 INCLUDE(CheckSharedFunctionExists)
14 INCLUDE(CheckIncludeFile)
15 INCLUDE(CheckIncludeFiles)
16 INCLUDE(CheckSymbolExists)
17 INCLUDE(CheckCCompilerFlag)
18 INCLUDE(CheckCSourceCompiles)
19 INCLUDE(CheckTypeSize)
20 INCLUDE(FindPkgConfig)
26 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE)
29 OPTION(SSE "Check for SSE CPU extensions" ON)
30 OPTION(NEON "Check for ARM Neon CPU extensions" ON)
32 OPTION(REQUIRE_SSE "Require SSE CPU extensions" OFF)
33 OPTION(REQUIRE_NEON "Require ARM Neon CPU extensions" OFF)
36 OPTION(ALSA "Check for ALSA backend" ON)
37 OPTION(OSS "Check for OSS backend" ON)
38 OPTION(SOLARIS "Check for Solaris backend" ON)
39 OPTION(SNDIO "Check for SndIO backend" ON)
40 OPTION(MMDEVAPI "Check for MMDevApi" ON)
41 OPTION(DSOUND "Check for DirectSound backend" ON)
42 OPTION(WINMM "Check for Windows Multimedia backend" ON)
43 OPTION(PORTAUDIO "Check for PortAudio backend" ON)
44 OPTION(PULSEAUDIO "Check for PulseAudio backend" ON)
45 OPTION(COREAUDIO "Check for CoreAudio backend" ON)
46 OPTION(OPENSL "Check for OpenSL backend" ON)
47 OPTION(WAVE "Enable Wave Writer backend" ON)
49 OPTION(REQUIRE_ALSA "Require ALSA backend" OFF)
50 OPTION(REQUIRE_OSS "Require OSS backend" OFF)
51 OPTION(REQUIRE_SOLARIS "Require Solaris backend" OFF)
52 OPTION(REQUIRE_SNDIO "Require SndIO backend" OFF)
53 OPTION(REQUIRE_MMDEVAPI "Require MMDevApi" OFF)
54 OPTION(REQUIRE_DSOUND "Require DirectSound backend" OFF)
55 OPTION(REQUIRE_WINMM "Require Windows Multimedia backend" OFF)
56 OPTION(REQUIRE_PORTAUDIO "Require PortAudio backend" OFF)
57 OPTION(REQUIRE_PULSEAUDIO "Require PulseAudio backend" OFF)
58 OPTION(REQUIRE_COREAUDIO "Require CoreAudio backend" OFF)
59 OPTION(REQUIRE_OPENSL "Require OpenSL backend" OFF)
61 OPTION(DLOPEN "Check for the dlopen API for loading optional libs" ON)
63 OPTION(WERROR "Treat compile warnings as errors" OFF)
65 OPTION(UTILS "Build and install utility programs" ON)
67 OPTION(EXAMPLES "Build and install example programs" ON)
69 OPTION(ALSOFT_CONFIG "Install alsoft.conf configuration file" OFF)
74 ADD_DEFINITIONS("-D_WIN32 -D_WIN32_WINNT=0x0501")
83 SET(LIB_MAJOR_VERSION "1")
84 SET(LIB_MINOR_VERSION "14")
85 SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}")
92 CHECK_TYPE_SIZE("long" SIZEOF_LONG)
93 CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
96 CHECK_C_SOURCE_COMPILES("int *restrict foo;
97 int main() {return 0;}" HAVE_RESTRICT)
99 SET(RESTRICT_DECL "restrict")
101 CHECK_C_SOURCE_COMPILES("int *__restrict foo;
102 int main() {return 0;}" HAVE___RESTRICT)
104 SET(RESTRICT_DECL "__restrict")
109 # Add definitions, compiler switches, etc.
110 INCLUDE_DIRECTORIES(OpenAL32/Include include "${OpenAL_BINARY_DIR}")
112 IF(NOT CMAKE_BUILD_TYPE)
113 SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
114 "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
117 IF(NOT CMAKE_DEBUG_POSTFIX)
118 SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING
119 "Library postfix for debug builds. Normally left blank."
125 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_DEBUG")
126 SET(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -DNDEBUG")
127 SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG")
128 SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
129 ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
130 ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
133 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "$ENV{DXSDK_DIR}")
135 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "${DXSDK_DIR}")
138 MESSAGE(STATUS "Using DirectX SDK directory: ${DXSDK_DIR}")
139 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${DXSDK_DIR}/Include")
140 INCLUDE_DIRECTORIES("${DXSDK_DIR}/Include")
141 LINK_DIRECTORIES("${DXSDK_DIR}/Lib")
144 OPTION(FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF)
145 IF(FORCE_STATIC_VCRT)
147 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
148 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
149 IF(${flag_var} MATCHES "/MD")
150 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
155 ADD_DEFINITIONS(-Winline -Wall)
156 CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA)
158 ADD_DEFINITIONS(-Wextra)
162 ADD_DEFINITIONS(-Werror)
165 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -O2 -D_DEBUG" CACHE STRING
166 "Flags used by the compiler during Release with Debug Info builds."
168 SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" CACHE STRING
169 "Flags used by the compiler during release minsize builds."
171 SET(CMAKE_C_FLAGS_RELEASE "-O2 -fomit-frame-pointer -DNDEBUG" CACHE STRING
172 "Flags used by the compiler during release builds"
174 SET(CMAKE_C_FLAGS_DEBUG "-g3 -D_DEBUG" CACHE STRING
175 "Flags used by the compiler during debug builds."
178 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor));
179 int main() {return 0;}" HAVE_GCC_DESTRUCTOR)
182 # Set visibility/export options if available
184 SET(EXPORT_DECL "__declspec(dllexport)")
185 SET(ALIGN_DECL "__declspec(align(x))")
187 OPTION(WINE "Enable use of Wine headers when compiling" OFF)
189 FIND_PATH(WINE_INCLUDE_DIR library.h
192 /usr/local/include/wine
193 CMAKE_FIND_ROOT_PATH_BOTH)
195 MESSAGE(STATUS "Found Wine header files - ${WINE_INCLUDE_DIR}" )
196 INCLUDE_DIRECTORIES("${WINE_INCLUDE_DIR}/windows")
197 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${WINE_INCLUDE_DIR}/windows")
199 MESSAGE(STATUS "Could not find Wine header files" )
203 SET(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
204 # Yes GCC, really don't accept visibility modes you don't support
205 SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Wattributes -Werror")
207 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"protected\")));
208 int main() {return 0;}" HAVE_GCC_PROTECTED_VISIBILITY)
209 IF(HAVE_GCC_PROTECTED_VISIBILITY)
210 SET(EXPORT_DECL "__attribute__((visibility(\"protected\")))")
212 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\")));
213 int main() {return 0;}" HAVE_GCC_DEFAULT_VISIBILITY)
214 IF(HAVE_GCC_DEFAULT_VISIBILITY)
215 SET(EXPORT_DECL "__attribute__((visibility(\"default\")))")
219 IF(HAVE_GCC_PROTECTED_VISIBILITY OR HAVE_GCC_DEFAULT_VISIBILITY)
220 CHECK_C_COMPILER_FLAG(-fvisibility=internal HAVE_VISIBILITY_INTERNAL_SWITCH)
221 IF(HAVE_VISIBILITY_INTERNAL_SWITCH)
222 ADD_DEFINITIONS(-fvisibility=internal)
224 CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN_SWITCH)
225 IF(HAVE_VISIBILITY_HIDDEN_SWITCH)
226 ADD_DEFINITIONS(-fvisibility=hidden)
231 CHECK_C_SOURCE_COMPILES("int foo __attribute__((aligned(16)));
232 int main() {return 0;}" HAVE_ATTRIBUTE_ALIGNED)
233 IF(HAVE_ATTRIBUTE_ALIGNED)
234 SET(ALIGN_DECL "__attribute__((aligned(x)))")
237 SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
241 CHECK_C_COMPILER_FLAG(-msse HAVE_MSSE_SWITCH)
243 SET(SSE_SWITCH "-msse")
246 CHECK_C_SOURCE_COMPILES("int foo(const char *str, ...) __attribute__((format(printf, 1, 2)));
247 int main() {return 0;}" HAVE_GCC_FORMAT)
249 CHECK_INCLUDE_FILE(cpuid.h HAVE_CPUID_H)
250 CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
251 CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
252 CHECK_INCLUDE_FILE(ieeefp.h HAVE_IEEEFP_H)
253 CHECK_INCLUDE_FILE(guiddef.h HAVE_GUIDDEF_H)
254 IF(NOT HAVE_GUIDDEF_H)
255 CHECK_INCLUDE_FILE(initguid.h HAVE_INITGUID_H)
258 # Some systems need libm for some of the following math functions to work
259 CHECK_LIBRARY_EXISTS(m pow "" HAVE_LIBM)
261 SET(EXTRA_LIBS m ${EXTRA_LIBS})
262 SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} m)
266 CHECK_SYMBOL_EXISTS(aligned_alloc stdlib.h HAVE_ALIGNED_ALLOC)
267 CHECK_SYMBOL_EXISTS(posix_memalign stdlib.h HAVE_POSIX_MEMALIGN)
268 CHECK_SYMBOL_EXISTS(_aligned_malloc malloc.h HAVE__ALIGNED_MALLOC)
269 CHECK_SYMBOL_EXISTS(lrintf math.h HAVE_LRINTF)
270 CHECK_SYMBOL_EXISTS(powf math.h HAVE_POWF)
271 CHECK_SYMBOL_EXISTS(sqrtf math.h HAVE_SQRTF)
272 CHECK_SYMBOL_EXISTS(cosf math.h HAVE_COSF)
273 CHECK_SYMBOL_EXISTS(sinf math.h HAVE_SINF)
274 CHECK_SYMBOL_EXISTS(acosf math.h HAVE_ACOSF)
275 CHECK_SYMBOL_EXISTS(asinf math.h HAVE_ASINF)
276 CHECK_SYMBOL_EXISTS(atanf math.h HAVE_ATANF)
277 CHECK_SYMBOL_EXISTS(atan2f math.h HAVE_ATAN2F)
278 CHECK_SYMBOL_EXISTS(fabsf math.h HAVE_FABSF)
279 CHECK_SYMBOL_EXISTS(log10f math.h HAVE_LOG10F)
280 CHECK_SYMBOL_EXISTS(floorf math.h HAVE_FLOORF)
283 CHECK_SYMBOL_EXISTS(fesetround fenv.h HAVE_FESETROUND)
286 CHECK_SYMBOL_EXISTS(_controlfp float.h HAVE__CONTROLFP)
287 CHECK_SYMBOL_EXISTS(__control87_2 float.h HAVE___CONTROL87_2)
290 CHECK_FUNCTION_EXISTS(strtof HAVE_STRTOF)
291 CHECK_FUNCTION_EXISTS(stat HAVE_STAT)
292 CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
293 IF(NOT HAVE_STRCASECMP)
294 CHECK_FUNCTION_EXISTS(_stricmp HAVE__STRICMP)
295 IF(NOT HAVE__STRICMP)
296 MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!")
299 ADD_DEFINITIONS(-Dstrcasecmp=_stricmp)
302 CHECK_FUNCTION_EXISTS(strncasecmp HAVE_STRNCASECMP)
303 IF(NOT HAVE_STRNCASECMP)
304 CHECK_FUNCTION_EXISTS(_strnicmp HAVE__STRNICMP)
305 IF(NOT HAVE__STRNICMP)
306 MESSAGE(FATAL_ERROR "No case-insensitive size-limitted compare function found, please report!")
309 ADD_DEFINITIONS(-Dstrncasecmp=_strnicmp)
312 CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
313 IF(NOT HAVE_SNPRINTF)
314 CHECK_FUNCTION_EXISTS(_snprintf HAVE__SNPRINTF)
315 IF(NOT HAVE__SNPRINTF)
316 MESSAGE(FATAL_ERROR "No snprintf function found, please report!")
319 ADD_DEFINITIONS(-Dsnprintf=_snprintf)
322 CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
323 IF(NOT HAVE_VSNPRINTF)
324 CHECK_FUNCTION_EXISTS(_vsnprintf HAVE__VSNPRINTF)
325 IF(NOT HAVE__VSNPRINTF)
326 MESSAGE(FATAL_ERROR "No vsnprintf function found, please report!")
329 ADD_DEFINITIONS(-Dvsnprintf=_vsnprintf)
332 CHECK_SYMBOL_EXISTS(isfinite math.h HAVE_ISFINITE)
333 IF(NOT HAVE_ISFINITE)
334 CHECK_FUNCTION_EXISTS(finite HAVE_FINITE)
336 CHECK_FUNCTION_EXISTS(_finite HAVE__FINITE)
338 MESSAGE(FATAL_ERROR "No isfinite function found, please report!")
340 ADD_DEFINITIONS(-Disfinite=_finite)
342 ADD_DEFINITIONS(-Disfinite=finite)
346 CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN)
348 CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN)
350 MESSAGE(FATAL_ERROR "No isnan function found, please report!")
353 ADD_DEFINITIONS(-Disnan=_isnan)
357 # Check for the dlopen API (for dynamicly loading backend libs)
359 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
361 CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
363 SET(EXTRA_LIBS dl ${EXTRA_LIBS})
368 # Check if we have Windows headers
369 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0501)
370 IF(NOT HAVE_WINDOWS_H)
371 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
372 IF(NOT HAVE_GETTIMEOFDAY)
373 MESSAGE(FATAL_ERROR "No timing function found!")
376 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
377 IF(NOT HAVE_NANOSLEEP)
378 MESSAGE(FATAL_ERROR "No sleep function found!")
381 CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
383 ADD_DEFINITIONS(-pthread)
384 SET(EXTRA_LIBS ${EXTRA_LIBS} -pthread)
387 # We need pthreads outside of Windows
388 CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
389 IF(NOT HAVE_PTHREAD_H)
390 MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
392 # Some systems need pthread_np.h to get recursive mutexes
393 CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
395 # _GNU_SOURCE is needed on some systems for extra attributes
396 ADD_DEFINITIONS(-D_GNU_SOURCE=1)
397 CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
399 SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
402 CHECK_LIBRARY_EXISTS(pthread pthread_setschedparam "" HAVE_PTHREAD_SETSCHEDPARAM)
404 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_LIBRT)
406 SET(EXTRA_LIBS rt ${EXTRA_LIBS})
410 # Check for a 64-bit type
411 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
412 IF(NOT HAVE_STDINT_H)
414 CHECK_C_SOURCE_COMPILES("\#define _WIN32_WINNT 0x0501
415 \#include <windows.h>
417 int main() {return 0;}" HAVE___INT64)
420 IF(NOT SIZEOF_LONG MATCHES "8")
421 IF(NOT SIZEOF_LONG_LONG MATCHES "8")
422 MESSAGE(FATAL_ERROR "No 64-bit types found, please report!")
428 # Windows needs winmm for timeGetTime, even if the backend is disabled
429 CHECK_SHARED_FUNCTION_EXISTS(timeGetTime "windows.h;mmsystem.h" winmm "" HAVE_LIBWINMM)
431 SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
432 SET(PKG_CONFIG_LIBS ${PKG_CONFIG_LIBS} -lwinmm)
436 SET(OPENAL_OBJS OpenAL32/alAuxEffectSlot.c
440 OpenAL32/alExtension.c
442 OpenAL32/alListener.c
447 SET(ALC_OBJS Alc/ALc.c
465 SET(CPU_EXTS "Default")
469 # Check for SSE support
471 CHECK_INCLUDE_FILE(xmmintrin.h HAVE_XMMINTRIN_H "${SSE_SWITCH}")
474 SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_sse.c)
476 SET_SOURCE_FILES_PROPERTIES(Alc/mixer_sse.c PROPERTIES
477 COMPILE_FLAGS "${SSE_SWITCH}")
479 SET(CPU_EXTS "${CPU_EXTS}, SSE")
482 IF(REQUIRE_SSE AND NOT HAVE_SSE)
483 MESSAGE(FATAL_ERROR "Failed to enabled required SSE CPU extensions")
486 # Check for ARM Neon support
488 CHECK_INCLUDE_FILE(arm_neon.h HAVE_ARM_NEON_H)
491 SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_neon.c)
492 SET(CPU_EXTS "${CPU_EXTS}, Neon")
495 IF(REQUIRE_NEON AND NOT HAVE_NEON)
496 MESSAGE(FATAL_ERROR "Failed to enabled required ARM Neon CPU extensions")
500 SET(ALC_OBJS ${ALC_OBJS}
501 # Default backends, always available
502 Alc/backends/loopback.c
514 SET(HAVE_PORTAUDIO 0)
515 SET(HAVE_PULSEAUDIO 0)
516 SET(HAVE_COREAUDIO 0)
522 CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
523 IF(HAVE_ALSA_ASOUNDLIB_H)
524 CHECK_SHARED_FUNCTION_EXISTS(snd_pcm_open "alsa/asoundlib.h" asound "" HAVE_LIBASOUND)
525 IF(HAVE_LIBASOUND OR HAVE_DLFCN_H OR WIN32)
527 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/alsa.c)
528 IF(HAVE_DLFCN_H OR WIN32)
529 SET(BACKENDS "${BACKENDS} ALSA,")
531 SET(BACKENDS "${BACKENDS} ALSA \(linked\),")
532 SET(EXTRA_LIBS asound ${EXTRA_LIBS})
537 IF(REQUIRE_ALSA AND NOT HAVE_ALSA)
538 MESSAGE(FATAL_ERROR "Failed to enabled required ALSA backend")
543 CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
544 IF(HAVE_SYS_SOUNDCARD_H)
546 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/oss.c)
547 SET(BACKENDS "${BACKENDS} OSS,")
550 IF(REQUIRE_OSS AND NOT HAVE_OSS)
551 MESSAGE(FATAL_ERROR "Failed to enabled required OSS backend")
554 # Check Solaris backend
556 CHECK_INCLUDE_FILE(sys/audioio.h HAVE_SYS_AUDIOIO_H)
557 IF(HAVE_SYS_AUDIOIO_H)
559 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/solaris.c)
560 SET(BACKENDS "${BACKENDS} Solaris,")
563 IF(REQUIRE_SOLARIS AND NOT HAVE_SOLARIS)
564 MESSAGE(FATAL_ERROR "Failed to enabled required Solaris backend")
567 # Check SndIO backend
569 CHECK_INCLUDE_FILE(sndio.h HAVE_SNDIO_H)
571 CHECK_SHARED_FUNCTION_EXISTS(sio_open "sndio.h" sndio "" HAVE_LIBSNDIO)
574 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/sndio.c)
575 SET(BACKENDS "${BACKENDS} SndIO \(linked\),")
576 SET(EXTRA_LIBS sndio ${EXTRA_LIBS})
580 IF(REQUIRE_SNDIO AND NOT HAVE_SNDIO)
581 MESSAGE(FATAL_ERROR "Failed to enabled required SndIO backend")
584 # Check for MMDevApi backend
587 CHECK_INCLUDE_FILE(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
588 IF(HAVE_MMDEVICEAPI_H)
590 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/mmdevapi.c)
592 SET(BACKENDS "${BACKENDS} MMDevApi,")
596 IF(REQUIRE_MMDEVAPI AND NOT HAVE_MMDEVAPI)
597 MESSAGE(FATAL_ERROR "Failed to enabled required MMDevApi backend")
600 # Check DSound/MMSystem backend
602 CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H)
604 CHECK_SHARED_FUNCTION_EXISTS(DirectSoundCreate "dsound.h" dsound "" HAVE_LIBDSOUND)
605 IF(HAVE_LIBDSOUND OR HAVE_DLFCN_H OR WIN32)
607 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/dsound.c)
609 IF(HAVE_DLFCN_H OR WIN32)
610 SET(BACKENDS "${BACKENDS} DirectSound,")
612 SET(BACKENDS "${BACKENDS} DirectSound \(linked\),")
613 SET(EXTRA_LIBS dsound ${EXTRA_LIBS})
618 IF(REQUIRE_DSOUND AND NOT HAVE_DSOUND)
619 MESSAGE(FATAL_ERROR "Failed to enabled required DSound backend")
624 CHECK_INCLUDE_FILES("windows.h;mmsystem.h" HAVE_MMSYSTEM_H -D_WIN32_WINNT=0x0501)
625 IF(HAVE_MMSYSTEM_H AND HAVE_LIBWINMM)
627 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/winmm.c)
628 SET(BACKENDS "${BACKENDS} WinMM,")
632 IF(REQUIRE_WINMM AND NOT HAVE_WINMM)
633 MESSAGE(FATAL_ERROR "Failed to enabled required WinMM backend")
636 # Check PortAudio backend
638 CHECK_INCLUDE_FILE(portaudio.h HAVE_PORTAUDIO_H)
640 CHECK_SHARED_FUNCTION_EXISTS(Pa_Initialize "portaudio.h" portaudio "" HAVE_LIBPORTAUDIO)
641 IF(HAVE_LIBPORTAUDIO OR HAVE_DLFCN_H OR WIN32)
642 SET(HAVE_PORTAUDIO 1)
643 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/portaudio.c)
644 IF(HAVE_DLFCN_H OR WIN32)
645 SET(BACKENDS "${BACKENDS} PortAudio,")
647 SET(BACKENDS "${BACKENDS} PortAudio \(linked\),")
648 SET(EXTRA_LIBS portaudio ${EXTRA_LIBS})
653 IF(REQUIRE_PORTAUDIO AND NOT HAVE_PORTAUDIO)
654 MESSAGE(FATAL_ERROR "Failed to enabled required PortAudio backend")
657 # Check PulseAudio backend
659 CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSE_PULSEAUDIO_H)
660 IF(HAVE_PULSE_PULSEAUDIO_H)
661 CHECK_SHARED_FUNCTION_EXISTS(pa_context_new "pulse/pulseaudio.h" pulse "" HAVE_LIBPULSE)
662 IF(HAVE_LIBPULSE OR HAVE_DLFCN_H OR WIN32)
663 SET(HAVE_PULSEAUDIO 1)
664 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/pulseaudio.c)
665 IF(HAVE_DLFCN_H OR WIN32)
666 SET(BACKENDS "${BACKENDS} PulseAudio,")
668 SET(BACKENDS "${BACKENDS} PulseAudio \(linked\),")
669 SET(EXTRA_LIBS pulse ${EXTRA_LIBS})
674 IF(REQUIRE_PULSEAUDIO AND NOT HAVE_PULSEAUDIO)
675 MESSAGE(FATAL_ERROR "Failed to enabled required PulseAudio backend")
678 # Check CoreAudio backend
680 CHECK_INCLUDE_FILE(/System/Library/Frameworks/CoreAudio.framework/Headers/CoreAudio.h HAVE_COREAUDIO_FRAMEWORK)
681 IF(HAVE_COREAUDIO_FRAMEWORK)
682 SET(HAVE_COREAUDIO 1)
683 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/coreaudio.c)
684 SET(BACKENDS "${BACKENDS} CoreAudio,")
685 SET(EXTRA_LIBS /System/Library/Frameworks/CoreAudio.framework ${EXTRA_LIBS})
686 SET(EXTRA_LIBS /System/Library/Frameworks/AudioUnit.framework ${EXTRA_LIBS})
687 SET(EXTRA_LIBS /System/Library/Frameworks/ApplicationServices.framework ${EXTRA_LIBS})
689 # Some versions of OSX may need the AudioToolbox framework. Add it if
691 FIND_LIBRARY(AUDIOTOOLBOX_LIBRARY
693 PATHS ~/Library/Frameworks
695 /System/Library/Frameworks
697 IF(AUDIOTOOLBOX_LIBRARY)
698 SET(EXTRA_LIBS ${AUDIOTOOLBOX_LIBRARY} ${EXTRA_LIBS})
702 IF(REQUIRE_COREAUDIO AND NOT HAVE_COREAUDIO)
703 MESSAGE(FATAL_ERROR "Failed to enabled required CoreAudio backend")
706 # Check for OpenSL (Android) backend
708 CHECK_INCLUDE_FILES("SLES/OpenSLES.h;SLES/OpenSLES_Android.h" HAVE_SLES_OPENSLES_ANDROID_H)
709 IF(HAVE_SLES_OPENSLES_ANDROID_H)
710 CHECK_SHARED_FUNCTION_EXISTS(slCreateEngine "SLES/OpenSLES.h" OpenSLES "" HAVE_LIBOPENSLES)
713 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/opensl.c)
714 SET(BACKENDS "${BACKENDS} OpenSL,")
715 SET(EXTRA_LIBS OpenSLES ${EXTRA_LIBS})
719 IF(REQUIRE_OPENSL AND NOT HAVE_OPENSL)
720 MESSAGE(FATAL_ERROR "Failed to enabled required OpenSL backend")
723 # Optionally enable the Wave Writer backend
726 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/wave.c)
727 SET(BACKENDS "${BACKENDS} WaveFile,")
730 # This is always available
731 SET(BACKENDS "${BACKENDS} Null")
734 # Might be able to use earlier versions, but these definitely work
735 PKG_CHECK_MODULES(FFMPEG libavcodec>=53.61.100 libavformat>=53.32.100 libavutil>=51.35.100)
738 IF(LIBTYPE STREQUAL "STATIC")
739 ADD_DEFINITIONS(-DAL_LIBTYPE_STATIC)
740 SET(PKG_CONFIG_CFLAGS -DAL_LIBTYPE_STATIC ${PKG_CONFIG_CFLAGS})
743 # Needed for openal.pc.in
744 SET(prefix ${CMAKE_INSTALL_PREFIX})
745 SET(exec_prefix "\${prefix}")
746 SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
747 SET(bindir "\${exec_prefix}/bin")
748 SET(includedir "\${prefix}/include")
749 SET(PACKAGE_VERSION "${LIB_VERSION}")
753 "${OpenAL_SOURCE_DIR}/config.h.in"
754 "${OpenAL_BINARY_DIR}/config.h")
756 "${OpenAL_SOURCE_DIR}/openal.pc.in"
757 "${OpenAL_BINARY_DIR}/openal.pc"
761 ADD_LIBRARY(${LIBNAME} ${LIBTYPE} ${OPENAL_OBJS} ${ALC_OBJS})
762 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES DEFINE_SYMBOL AL_BUILD_LIBRARY
763 COMPILE_FLAGS -DAL_ALEXT_PROTOTYPES
764 VERSION ${LIB_VERSION}.0
765 SOVERSION ${LIB_MAJOR_VERSION})
766 IF(WIN32 AND NOT LIBTYPE STREQUAL "STATIC")
767 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES PREFIX "")
770 TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS})
772 # Add an install target here
773 INSTALL(TARGETS ${LIBNAME}
774 RUNTIME DESTINATION bin
775 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
776 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
778 INSTALL(FILES include/AL/al.h
782 include/AL/efx-creative.h
783 include/AL/efx-presets.h
784 DESTINATION include/AL
786 INSTALL(FILES "${OpenAL_BINARY_DIR}/openal.pc"
787 DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
791 MESSAGE(STATUS "Building OpenAL with support for the following backends:")
792 MESSAGE(STATUS " ${BACKENDS}")
794 MESSAGE(STATUS "Building with support for CPU extensions:")
795 MESSAGE(STATUS " ${CPU_EXTS}")
800 MESSAGE(STATUS "WARNING: Building the Windows version without DirectSound output")
801 MESSAGE(STATUS " This is probably NOT what you want!")
806 # Install alsoft.conf configuration file
808 INSTALL(FILES alsoftrc.sample
809 DESTINATION /etc/openal
812 MESSAGE(STATUS "Installing sample alsoft.conf")
817 ADD_EXECUTABLE(openal-info utils/openal-info.c)
818 TARGET_LINK_LIBRARIES(openal-info ${LIBNAME})
820 ADD_EXECUTABLE(makehrtf utils/makehrtf.c)
822 TARGET_LINK_LIBRARIES(makehrtf m)
825 INSTALL(TARGETS openal-info makehrtf
826 RUNTIME DESTINATION bin
827 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
828 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
830 MESSAGE(STATUS "Building utility programs")
836 ADD_EXECUTABLE(alstream examples/alhelpers.c examples/alffmpeg.c examples/alstream.c)
837 TARGET_LINK_LIBRARIES(alstream ${FFMPEG_LIBRARIES} ${LIBNAME})
838 SET_TARGET_PROPERTIES(alstream PROPERTIES COMPILE_FLAGS "${FFMPEG_CFLAGS}")
839 INSTALL(TARGETS alstream
840 RUNTIME DESTINATION bin
841 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
842 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
845 MESSAGE(STATUS "Building ffmpeg example programs")