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)
25 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE)
28 OPTION(ALSA "Check for ALSA backend" ON)
29 OPTION(OSS "Check for OSS backend" ON)
30 OPTION(SOLARIS "Check for Solaris backend" ON)
31 OPTION(SNDIO "Check for SndIO backend" ON)
32 OPTION(MMDEVAPI "Check for MMDevApi" ON)
33 OPTION(DSOUND "Check for DirectSound backend" ON)
34 OPTION(WINMM "Check for Windows Multimedia backend" ON)
35 OPTION(PORTAUDIO "Check for PortAudio backend" ON)
36 OPTION(PULSEAUDIO "Check for PulseAudio backend" ON)
37 OPTION(COREAUDIO "Check for CoreAudio backend" ON)
38 OPTION(OPENSL "Check for OpenSL backend" ON)
39 OPTION(WAVE "Enable Wave Writer backend" ON)
41 OPTION(REQUIRE_ALSA "Require ALSA backend" OFF)
42 OPTION(REQUIRE_OSS "Require OSS backend" OFF)
43 OPTION(REQUIRE_SOLARIS "Require Solaris backend" OFF)
44 OPTION(REQUIRE_SNDIO "Require SndIO backend" OFF)
45 OPTION(REQUIRE_MMDEVAPI "Require MMDevApi" OFF)
46 OPTION(REQUIRE_DSOUND "Require DirectSound backend" OFF)
47 OPTION(REQUIRE_WINMM "Require Windows Multimedia backend" OFF)
48 OPTION(REQUIRE_PORTAUDIO "Require PortAudio backend" OFF)
49 OPTION(REQUIRE_PULSEAUDIO "Require PulseAudio backend" OFF)
50 OPTION(REQUIRE_COREAUDIO "Require CoreAudio backend" OFF)
51 OPTION(REQUIRE_OPENSL "Require OpenSL backend" OFF)
53 OPTION(DLOPEN "Check for the dlopen API for loading optional libs" ON)
55 OPTION(WERROR "Treat compile warnings as errors" OFF)
57 OPTION(UTILS "Build and install utility programs" ON)
59 OPTION(ALSOFT_CONFIG "Install alsoft.conf configuration file" OFF)
64 ADD_DEFINITIONS("-D_WIN32 -D_WIN32_WINNT=0x0500")
73 SET(LIB_MAJOR_VERSION "1")
74 SET(LIB_MINOR_VERSION "13")
75 SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}")
80 CHECK_TYPE_SIZE("long" SIZEOF_LONG)
81 CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
84 CHECK_C_SOURCE_COMPILES("int *restrict foo;
85 int main() {return 0;}" HAVE_RESTRICT)
86 CHECK_C_SOURCE_COMPILES("int *__restrict foo;
87 int main() {return 0;}" HAVE___RESTRICT)
90 # Add definitions, compiler switches, etc.
91 INCLUDE_DIRECTORIES(OpenAL32/Include include "${OpenAL_BINARY_DIR}")
93 IF(NOT CMAKE_BUILD_TYPE)
94 SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
95 "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
98 IF(NOT CMAKE_DEBUG_POSTFIX)
99 SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING
100 "Library postfix for debug builds. Normally left blank."
106 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_DEBUG")
107 SET(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -DNDEBUG")
108 SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG")
109 SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
110 ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
111 ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
114 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "$ENV{DXSDK_DIR}")
116 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "${DXSDK_DIR}")
119 MESSAGE(STATUS "Using DirectX SDK directory: ${DXSDK_DIR}")
120 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${DXSDK_DIR}/Include")
121 INCLUDE_DIRECTORIES("${DXSDK_DIR}/Include")
122 LINK_DIRECTORIES("${DXSDK_DIR}/Lib")
125 OPTION(FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF)
126 IF(FORCE_STATIC_VCRT)
128 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
129 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
130 IF(${flag_var} MATCHES "/MD")
131 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
136 ADD_DEFINITIONS(-Winline -Wall)
137 CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA)
139 ADD_DEFINITIONS(-Wextra)
143 ADD_DEFINITIONS(-Werror)
146 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -O2 -D_DEBUG" CACHE STRING
147 "Flags used by the compiler during Release with Debug Info builds."
149 SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" CACHE STRING
150 "Flags used by the compiler during release minsize builds."
152 SET(CMAKE_C_FLAGS_RELEASE "-O2 -fomit-frame-pointer -DNDEBUG" CACHE STRING
153 "Flags used by the compiler during release builds"
155 SET(CMAKE_C_FLAGS_DEBUG "-g3 -D_DEBUG" CACHE STRING
156 "Flags used by the compiler during debug builds."
159 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor));
160 int main() {return 0;}" HAVE_GCC_DESTRUCTOR)
163 # Set visibility/export options if available
165 SET(EXPORT_DECL "__declspec(dllexport)")
167 OPTION(WINE "Enable use of Wine headers when compiling" OFF)
169 FIND_PATH(WINE_INCLUDE_DIR library.h
172 /usr/local/include/wine
173 CMAKE_FIND_ROOT_PATH_BOTH)
175 MESSAGE(STATUS "Found Wine header files - ${WINE_INCLUDE_DIR}" )
176 INCLUDE_DIRECTORIES("${WINE_INCLUDE_DIR}/windows")
177 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${WINE_INCLUDE_DIR}/windows")
179 MESSAGE(STATUS "Could not find Wine header files" )
183 SET(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
184 # Yes GCC, really don't accept visibility modes you don't support
185 SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Werror")
187 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"protected\")));
188 int main() {return 0;}" HAVE_GCC_PROTECTED_VISIBILITY)
189 IF(HAVE_GCC_PROTECTED_VISIBILITY)
190 SET(EXPORT_DECL "__attribute__((visibility(\"protected\")))")
192 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\")));
193 int main() {return 0;}" HAVE_GCC_DEFAULT_VISIBILITY)
194 IF(HAVE_GCC_DEFAULT_VISIBILITY)
195 SET(EXPORT_DECL "__attribute__((visibility(\"default\")))")
199 IF(HAVE_GCC_PROTECTED_VISIBILITY OR HAVE_GCC_DEFAULT_VISIBILITY)
200 CHECK_C_COMPILER_FLAG(-fvisibility=internal HAVE_VISIBILITY_INTERNAL_SWITCH)
201 IF(HAVE_VISIBILITY_INTERNAL_SWITCH)
202 ADD_DEFINITIONS(-fvisibility=internal)
204 CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN_SWITCH)
205 IF(HAVE_VISIBILITY_HIDDEN_SWITCH)
206 ADD_DEFINITIONS(-fvisibility=hidden)
211 SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
214 CHECK_C_SOURCE_COMPILES("int foo(const char *str, ...) __attribute__((format(printf, 1, 2)));
215 int main() {return 0;}" HAVE_GCC_FORMAT)
217 CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
218 CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
219 CHECK_INCLUDE_FILE(ieeefp.h HAVE_IEEEFP_H)
220 CHECK_INCLUDE_FILE(guiddef.h HAVE_GUIDDEF_H)
221 IF(NOT HAVE_GUIDDEF_H)
222 CHECK_INCLUDE_FILE(initguid.h HAVE_INITGUID_H)
224 CHECK_INCLUDE_FILE(arm_neon.h HAVE_ARM_NEON_H)
226 CHECK_LIBRARY_EXISTS(m powf "" HAVE_POWF)
227 CHECK_LIBRARY_EXISTS(m sqrtf "" HAVE_SQRTF)
228 CHECK_LIBRARY_EXISTS(m cosf "" HAVE_COSF)
229 CHECK_LIBRARY_EXISTS(m sinf "" HAVE_SINF)
230 CHECK_LIBRARY_EXISTS(m acosf "" HAVE_ACOSF)
231 CHECK_LIBRARY_EXISTS(m asinf "" HAVE_ASINF)
232 CHECK_LIBRARY_EXISTS(m atanf "" HAVE_ATANF)
233 CHECK_LIBRARY_EXISTS(m fabsf "" HAVE_FABSF)
235 CHECK_LIBRARY_EXISTS(m fesetround "" HAVE_FESETROUND)
237 IF(HAVE_SQRTF OR HAVE_COSF OR HAVE_SINF OR HAVE_ACOSF OR HAVE_ASINF OR HAVE_ATANF OR HAVE_FABSF OR HAVE_FESETROUND)
238 SET(EXTRA_LIBS m ${EXTRA_LIBS})
240 CHECK_FUNCTION_EXISTS(strtof HAVE_STRTOF)
241 CHECK_FUNCTION_EXISTS(_controlfp HAVE__CONTROLFP)
243 CHECK_FUNCTION_EXISTS(stat HAVE_STAT)
244 CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
245 IF(NOT HAVE_STRCASECMP)
246 CHECK_FUNCTION_EXISTS(_stricmp HAVE__STRICMP)
247 IF(NOT HAVE__STRICMP)
248 MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!")
251 ADD_DEFINITIONS(-Dstrcasecmp=_stricmp)
254 CHECK_FUNCTION_EXISTS(strncasecmp HAVE_STRNCASECMP)
255 IF(NOT HAVE_STRNCASECMP)
256 CHECK_FUNCTION_EXISTS(_strnicmp HAVE__STRNICMP)
257 IF(NOT HAVE__STRNICMP)
258 MESSAGE(FATAL_ERROR "No case-insensitive size-limitted compare function found, please report!")
261 ADD_DEFINITIONS(-Dstrncasecmp=_strnicmp)
264 CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
265 IF(NOT HAVE_SNPRINTF)
266 CHECK_FUNCTION_EXISTS(_snprintf HAVE__SNPRINTF)
267 IF(NOT HAVE__SNPRINTF)
268 MESSAGE(FATAL_ERROR "No snprintf function found, please report!")
271 ADD_DEFINITIONS(-Dsnprintf=_snprintf)
274 CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
275 IF(NOT HAVE_VSNPRINTF)
276 CHECK_FUNCTION_EXISTS(_vsnprintf HAVE__VSNPRINTF)
277 IF(NOT HAVE__VSNPRINTF)
278 MESSAGE(FATAL_ERROR "No vsnprintf function found, please report!")
281 ADD_DEFINITIONS(-Dvsnprintf=_vsnprintf)
284 CHECK_SYMBOL_EXISTS(isfinite math.h HAVE_ISFINITE)
285 IF(NOT HAVE_ISFINITE)
286 CHECK_FUNCTION_EXISTS(finite HAVE_FINITE)
288 CHECK_FUNCTION_EXISTS(_finite HAVE__FINITE)
290 MESSAGE(FATAL_ERROR "No isfinite function found, please report!")
292 ADD_DEFINITIONS(-Disfinite=_finite)
294 ADD_DEFINITIONS(-Disfinite=finite)
298 CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN)
300 CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN)
302 MESSAGE(FATAL_ERROR "No isnan function found, please report!")
305 ADD_DEFINITIONS(-Disnan=_isnan)
309 # Check for the dlopen API (for dynamicly loading backend libs)
311 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
313 CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
315 SET(EXTRA_LIBS dl ${EXTRA_LIBS})
320 # Check if we have Windows headers
321 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0500)
322 IF(NOT HAVE_WINDOWS_H)
323 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
324 IF(NOT HAVE_GETTIMEOFDAY)
325 MESSAGE(FATAL_ERROR "No timing function found!")
328 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
329 IF(NOT HAVE_NANOSLEEP)
330 MESSAGE(FATAL_ERROR "No sleep function found!")
333 CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
335 ADD_DEFINITIONS(-pthread)
336 SET(EXTRA_LIBS ${EXTRA_LIBS} -pthread)
339 # We need pthreads outside of Windows
340 CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
341 IF(NOT HAVE_PTHREAD_H)
342 MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
344 # Some systems need pthread_np.h to get recursive mutexes
345 CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
347 # _GNU_SOURCE is needed on some systems for extra attributes, and
348 # _REENTRANT is needed for libc thread-safety
349 ADD_DEFINITIONS(-D_GNU_SOURCE=1)
350 CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
352 SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
355 CHECK_LIBRARY_EXISTS(pthread pthread_setschedparam "" HAVE_PTHREAD_SETSCHEDPARAM)
357 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_LIBRT)
359 SET(EXTRA_LIBS rt ${EXTRA_LIBS})
363 # Check for a 64-bit type
364 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
365 IF(NOT HAVE_STDINT_H)
367 CHECK_C_SOURCE_COMPILES("\#define _WIN32_WINNT 0x0500
368 \#include <windows.h>
370 int main() {return 0;}" HAVE___INT64)
373 IF(NOT SIZEOF_LONG MATCHES "8")
374 IF(NOT SIZEOF_LONG_LONG MATCHES "8")
375 MESSAGE(FATAL_ERROR "No 64-bit types found, please report!")
381 # Windows needs winmm for timeGetTime, even if the backend is disabled
382 CHECK_SHARED_FUNCTION_EXISTS(timeGetTime "windows.h;mmsystem.h" winmm "" HAVE_LIBWINMM)
384 SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
385 SET(PKG_CONFIG_LIBS ${PKG_CONFIG_LIBS} -lwinmm)
389 SET(OPENAL_OBJS OpenAL32/alAuxEffectSlot.c
393 OpenAL32/alExtension.c
395 OpenAL32/alListener.c
400 SET(ALC_OBJS Alc/ALc.c
414 # Default backends, always available
415 Alc/backends/loopback.c
426 SET(HAVE_PORTAUDIO 0)
427 SET(HAVE_PULSEAUDIO 0)
428 SET(HAVE_COREAUDIO 0)
434 CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
435 IF(HAVE_ALSA_ASOUNDLIB_H)
436 CHECK_SHARED_FUNCTION_EXISTS(snd_pcm_open "alsa/asoundlib.h" asound "" HAVE_LIBASOUND)
437 IF(HAVE_LIBASOUND OR HAVE_DLFCN_H OR WIN32)
439 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/alsa.c)
440 IF(HAVE_DLFCN_H OR WIN32)
441 SET(BACKENDS "${BACKENDS} ALSA,")
443 SET(BACKENDS "${BACKENDS} ALSA \(linked\),")
444 SET(EXTRA_LIBS asound ${EXTRA_LIBS})
449 IF(REQUIRE_ALSA AND NOT HAVE_ALSA)
450 MESSAGE(FATAL_ERROR "Failed to enabled required ALSA backend")
455 CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
456 IF(HAVE_SYS_SOUNDCARD_H)
458 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/oss.c)
459 SET(BACKENDS "${BACKENDS} OSS,")
462 IF(REQUIRE_OSS AND NOT HAVE_OSS)
463 MESSAGE(FATAL_ERROR "Failed to enabled required OSS backend")
466 # Check Solaris backend
468 CHECK_INCLUDE_FILE(sys/audioio.h HAVE_SYS_AUDIOIO_H)
469 IF(HAVE_SYS_AUDIOIO_H)
471 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/solaris.c)
472 SET(BACKENDS "${BACKENDS} Solaris,")
475 IF(REQUIRE_SOLARIS AND NOT HAVE_SOLARIS)
476 MESSAGE(FATAL_ERROR "Failed to enabled required Solaris backend")
479 # Check SndIO backend
481 CHECK_INCLUDE_FILE(sndio.h HAVE_SNDIO_H)
483 CHECK_SHARED_FUNCTION_EXISTS(sio_open "sndio.h" sndio "" HAVE_LIBSNDIO)
484 IF(HAVE_LIBSNDIO OR HAVE_DLFCN_H OR WIN32)
486 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/sndio.c)
487 IF(HAVE_DLFCN_H OR WIN32)
488 SET(BACKENDS "${BACKENDS} SndIO,")
490 SET(BACKENDS "${BACKENDS} SndIO \(linked\),")
491 SET(EXTRA_LIBS sndio ${EXTRA_LIBS})
496 IF(REQUIRE_SNDIO AND NOT HAVE_SNDIO)
497 MESSAGE(FATAL_ERROR "Failed to enabled required SndIO backend")
500 # Check for MMDevApi backend
503 CHECK_INCLUDE_FILE(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
504 IF(HAVE_MMDEVICEAPI_H)
506 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/mmdevapi.c)
508 SET(BACKENDS "${BACKENDS} MMDevApi,")
512 IF(REQUIRE_MMDEVAPI AND NOT HAVE_MMDEVAPI)
513 MESSAGE(FATAL_ERROR "Failed to enabled required MMDevApi backend")
516 # Check DSound/MMSystem backend
518 CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H)
520 CHECK_SHARED_FUNCTION_EXISTS(DirectSoundCreate "dsound.h" dsound "" HAVE_LIBDSOUND)
521 IF(HAVE_LIBDSOUND OR HAVE_DLFCN_H OR WIN32)
523 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/dsound.c)
525 IF(HAVE_DLFCN_H OR WIN32)
526 SET(BACKENDS "${BACKENDS} DirectSound,")
528 SET(BACKENDS "${BACKENDS} DirectSound \(linked\),")
529 SET(EXTRA_LIBS dsound ${EXTRA_LIBS})
534 IF(REQUIRE_DSOUND AND NOT HAVE_DSOUND)
535 MESSAGE(FATAL_ERROR "Failed to enabled required DSound backend")
540 CHECK_INCLUDE_FILES("windows.h;mmsystem.h" HAVE_MMSYSTEM_H -D_WIN32_WINNT=0x0500)
541 IF(HAVE_MMSYSTEM_H AND HAVE_LIBWINMM)
543 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/winmm.c)
544 SET(BACKENDS "${BACKENDS} WinMM,")
548 IF(REQUIRE_WINMM AND NOT HAVE_WINMM)
549 MESSAGE(FATAL_ERROR "Failed to enabled required WinMM backend")
552 # Check PortAudio backend
554 CHECK_INCLUDE_FILE(portaudio.h HAVE_PORTAUDIO_H)
556 CHECK_SHARED_FUNCTION_EXISTS(Pa_Initialize "portaudio.h" portaudio "" HAVE_LIBPORTAUDIO)
557 IF(HAVE_LIBPORTAUDIO OR HAVE_DLFCN_H OR WIN32)
558 SET(HAVE_PORTAUDIO 1)
559 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/portaudio.c)
560 IF(HAVE_DLFCN_H OR WIN32)
561 SET(BACKENDS "${BACKENDS} PortAudio,")
563 SET(BACKENDS "${BACKENDS} PortAudio \(linked\),")
564 SET(EXTRA_LIBS portaudio ${EXTRA_LIBS})
569 IF(REQUIRE_PORTAUDIO AND NOT HAVE_PORTAUDIO)
570 MESSAGE(FATAL_ERROR "Failed to enabled required PortAudio backend")
573 # Check PulseAudio backend
575 CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSE_PULSEAUDIO_H)
576 IF(HAVE_PULSE_PULSEAUDIO_H)
577 CHECK_SHARED_FUNCTION_EXISTS(pa_context_new "pulse/pulseaudio.h" pulse "" HAVE_LIBPULSE)
578 IF(HAVE_LIBPULSE OR HAVE_DLFCN_H OR WIN32)
579 SET(HAVE_PULSEAUDIO 1)
580 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/pulseaudio.c)
581 IF(HAVE_DLFCN_H OR WIN32)
582 SET(BACKENDS "${BACKENDS} PulseAudio,")
584 SET(BACKENDS "${BACKENDS} PulseAudio \(linked\),")
585 SET(EXTRA_LIBS pulse ${EXTRA_LIBS})
590 IF(REQUIRE_PULSEAUDIO AND NOT HAVE_PULSEAUDIO)
591 MESSAGE(FATAL_ERROR "Failed to enabled required PulseAudio backend")
594 # Check CoreAudio backend
596 CHECK_INCLUDE_FILE(/System/Library/Frameworks/CoreAudio.framework/Headers/CoreAudio.h HAVE_COREAUDIO_FRAMEWORK)
597 IF(HAVE_COREAUDIO_FRAMEWORK)
598 SET(HAVE_COREAUDIO 1)
599 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/coreaudio.c)
600 SET(BACKENDS "${BACKENDS} CoreAudio,")
601 SET(EXTRA_LIBS /System/Library/Frameworks/CoreAudio.framework ${EXTRA_LIBS})
602 SET(EXTRA_LIBS /System/Library/Frameworks/AudioUnit.framework ${EXTRA_LIBS})
603 SET(EXTRA_LIBS /System/Library/Frameworks/ApplicationServices.framework ${EXTRA_LIBS})
606 IF(REQUIRE_COREAUDIO AND NOT HAVE_COREAUDIO)
607 MESSAGE(FATAL_ERROR "Failed to enabled required CoreAudio backend")
610 # Check for OpenSL (Android) backend
612 CHECK_INCLUDE_FILES("SLES/OpenSLES.h;SLES/OpenSLES_Android.h" HAVE_SLES_OPENSLES_ANDROID_H)
613 IF(HAVE_SLES_OPENSLES_ANDROID_H)
614 CHECK_SHARED_FUNCTION_EXISTS(slCreateEngine "SLES/OpenSLES.h" OpenSLES "" HAVE_LIBOPENSLES)
617 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/opensl.c)
618 SET(BACKENDS "${BACKENDS} OpenSL,")
619 SET(EXTRA_LIBS OpenSLES ${EXTRA_LIBS})
623 IF(REQUIRE_OPENSL AND NOT HAVE_OPENSL)
624 MESSAGE(FATAL_ERROR "Failed to enabled required OpenSL backend")
627 # Optionally enable the Wave Writer backend
630 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/wave.c)
631 SET(BACKENDS "${BACKENDS} WaveFile,")
634 # This is always available
635 SET(BACKENDS "${BACKENDS} Null")
637 IF(LIBTYPE STREQUAL "STATIC")
638 ADD_DEFINITIONS(-DAL_LIBTYPE_STATIC)
639 SET(PKG_CONFIG_CFLAGS -DAL_LIBTYPE_STATIC ${PKG_CONFIG_CFLAGS})
642 # Needed for openal.pc.in
643 SET(prefix ${CMAKE_INSTALL_PREFIX})
644 SET(exec_prefix "\${prefix}")
645 SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
646 SET(bindir "\${exec_prefix}/bin")
647 SET(includedir "\${prefix}/include")
648 SET(PACKAGE_VERSION "${LIB_VERSION}")
652 "${OpenAL_SOURCE_DIR}/config.h.in"
653 "${OpenAL_BINARY_DIR}/config.h")
655 "${OpenAL_SOURCE_DIR}/openal.pc.in"
656 "${OpenAL_BINARY_DIR}/openal.pc"
660 ADD_LIBRARY(${LIBNAME} ${LIBTYPE} ${OPENAL_OBJS} ${ALC_OBJS})
661 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES DEFINE_SYMBOL AL_BUILD_LIBRARY
662 COMPILE_FLAGS -DAL_ALEXT_PROTOTYPES
663 VERSION ${LIB_VERSION}.0
664 SOVERSION ${LIB_MAJOR_VERSION})
665 IF(WIN32 AND NOT LIBTYPE STREQUAL "STATIC")
666 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES PREFIX "")
669 TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS})
671 # Add an install target here
672 INSTALL(TARGETS ${LIBNAME}
673 RUNTIME DESTINATION bin
674 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
675 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
677 INSTALL(FILES include/AL/al.h
681 include/AL/efx-creative.h
682 DESTINATION include/AL
684 INSTALL(FILES "${OpenAL_BINARY_DIR}/openal.pc"
685 DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
689 MESSAGE(STATUS "Building OpenAL with support for the following backends:")
690 MESSAGE(STATUS " ${BACKENDS}")
695 MESSAGE(STATUS "WARNING: Building the Windows version without DirectSound output")
696 MESSAGE(STATUS " This is probably NOT what you want!")
701 # Install alsoft.conf configuration file
703 INSTALL(FILES alsoftrc.sample
704 DESTINATION /etc/openal
707 MESSAGE(STATUS "Installing sample alsoft.conf")
712 ADD_EXECUTABLE(openal-info utils/openal-info.c)
713 TARGET_LINK_LIBRARIES(openal-info ${LIBNAME})
714 INSTALL(TARGETS openal-info
715 RUNTIME DESTINATION bin
716 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
717 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
719 MESSAGE(STATUS "Building utility programs")