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")
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)
82 CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
83 CHECK_TYPE_SIZE("void*" SIZEOF_VOIDP)
86 CHECK_C_SOURCE_COMPILES("int *restrict foo;
87 int main() {return 0;}" HAVE_RESTRICT)
88 CHECK_C_SOURCE_COMPILES("int *__restrict foo;
89 int main() {return 0;}" HAVE___RESTRICT)
92 # Add definitions, compiler switches, etc.
93 INCLUDE_DIRECTORIES(OpenAL32/Include include "${OpenAL_BINARY_DIR}")
95 IF(NOT CMAKE_BUILD_TYPE)
96 SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
97 "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
100 IF(NOT CMAKE_DEBUG_POSTFIX)
101 SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING
102 "Library postfix for debug builds. Normally left blank."
108 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_DEBUG")
109 SET(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -DNDEBUG")
110 SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG")
111 SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
112 ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
113 ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
116 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "$ENV{DXSDK_DIR}")
118 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "${DXSDK_DIR}")
121 MESSAGE(STATUS "Using DirectX SDK directory: ${DXSDK_DIR}")
122 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${DXSDK_DIR}/Include")
123 INCLUDE_DIRECTORIES("${DXSDK_DIR}/Include")
124 LINK_DIRECTORIES("${DXSDK_DIR}/Lib")
127 OPTION(FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF)
128 IF(FORCE_STATIC_VCRT)
130 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
131 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
132 IF(${flag_var} MATCHES "/MD")
133 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
138 ADD_DEFINITIONS(-Winline -Wall)
139 CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA)
141 ADD_DEFINITIONS(-Wextra)
145 ADD_DEFINITIONS(-Werror)
148 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -O2 -D_DEBUG" CACHE STRING
149 "Flags used by the compiler during Release with Debug Info builds."
151 SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" CACHE STRING
152 "Flags used by the compiler during release minsize builds."
154 SET(CMAKE_C_FLAGS_RELEASE "-O2 -fomit-frame-pointer -DNDEBUG" CACHE STRING
155 "Flags used by the compiler during release builds"
157 SET(CMAKE_C_FLAGS_DEBUG "-g3 -D_DEBUG" CACHE STRING
158 "Flags used by the compiler during debug builds."
161 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor));
162 int main() {return 0;}" HAVE_GCC_DESTRUCTOR)
165 # Set visibility/export options if available
167 SET(EXPORT_DECL "__declspec(dllexport)")
169 OPTION(WINE "Enable use of Wine headers when compiling" OFF)
171 FIND_PATH(WINE_INCLUDE_DIR library.h
174 /usr/local/include/wine
175 CMAKE_FIND_ROOT_PATH_BOTH)
177 MESSAGE(STATUS "Found Wine header files - ${WINE_INCLUDE_DIR}" )
178 INCLUDE_DIRECTORIES("${WINE_INCLUDE_DIR}/windows")
179 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${WINE_INCLUDE_DIR}/windows")
181 MESSAGE(STATUS "Could not find Wine header files" )
185 CHECK_C_COMPILER_FLAG(-fvisibility=internal HAVE_VISIBILITY_SWITCH)
186 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"protected\")));
187 int main() {return 0;}" HAVE_GCC_VISIBILITY)
188 IF(HAVE_VISIBILITY_SWITCH AND HAVE_GCC_VISIBILITY)
189 ADD_DEFINITIONS(-fvisibility=internal)
190 SET(EXPORT_DECL "__attribute__((visibility(\"protected\")))")
194 CHECK_C_SOURCE_COMPILES("int foo(const char *str, ...) __attribute__((format(printf, 1, 2)));
195 int main() {return 0;}" HAVE_GCC_FORMAT)
197 CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
198 CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
199 CHECK_INCLUDE_FILE(ieeefp.h HAVE_IEEEFP_H)
200 CHECK_INCLUDE_FILE(guiddef.h HAVE_GUIDDEF_H)
201 IF(NOT HAVE_GUIDDEF_H)
202 CHECK_INCLUDE_FILE(initguid.h HAVE_INITGUID_H)
205 CHECK_LIBRARY_EXISTS(m powf "" HAVE_POWF)
206 CHECK_LIBRARY_EXISTS(m sqrtf "" HAVE_SQRTF)
207 CHECK_LIBRARY_EXISTS(m acosf "" HAVE_ACOSF)
208 CHECK_LIBRARY_EXISTS(m atanf "" HAVE_ATANF)
209 CHECK_LIBRARY_EXISTS(m fabsf "" HAVE_FABSF)
211 CHECK_LIBRARY_EXISTS(m fesetround "" HAVE_FESETROUND)
213 IF(HAVE_SQRTF OR HAVE_ACOSF OR HAVE_ATANF OR HAVE_FABSF OR HAVE_FESETROUND)
214 SET(EXTRA_LIBS m ${EXTRA_LIBS})
216 CHECK_FUNCTION_EXISTS(strtof HAVE_STRTOF)
217 CHECK_FUNCTION_EXISTS(_controlfp HAVE__CONTROLFP)
219 CHECK_FUNCTION_EXISTS(stat HAVE_STAT)
220 CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
221 IF(NOT HAVE_STRCASECMP)
222 CHECK_FUNCTION_EXISTS(_stricmp HAVE__STRICMP)
223 IF(NOT HAVE__STRICMP)
224 MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!")
227 ADD_DEFINITIONS(-Dstrcasecmp=_stricmp)
230 CHECK_FUNCTION_EXISTS(strncasecmp HAVE_STRNCASECMP)
231 IF(NOT HAVE_STRNCASECMP)
232 CHECK_FUNCTION_EXISTS(_strnicmp HAVE__STRNICMP)
233 IF(NOT HAVE__STRNICMP)
234 MESSAGE(FATAL_ERROR "No case-insensitive size-limitted compare function found, please report!")
237 ADD_DEFINITIONS(-Dstrncasecmp=_strnicmp)
240 CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
241 IF(NOT HAVE_SNPRINTF)
242 CHECK_FUNCTION_EXISTS(_snprintf HAVE__SNPRINTF)
243 IF(NOT HAVE__SNPRINTF)
244 MESSAGE(FATAL_ERROR "No snprintf function found, please report!")
247 ADD_DEFINITIONS(-Dsnprintf=_snprintf)
250 CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
251 IF(NOT HAVE_VSNPRINTF)
252 CHECK_FUNCTION_EXISTS(_vsnprintf HAVE__VSNPRINTF)
253 IF(NOT HAVE__VSNPRINTF)
254 MESSAGE(FATAL_ERROR "No vsnprintf function found, please report!")
257 ADD_DEFINITIONS(-Dvsnprintf=_vsnprintf)
260 CHECK_SYMBOL_EXISTS(isfinite math.h HAVE_ISFINITE)
261 IF(NOT HAVE_ISFINITE)
262 CHECK_FUNCTION_EXISTS(finite HAVE_FINITE)
264 CHECK_FUNCTION_EXISTS(_finite HAVE__FINITE)
266 MESSAGE(FATAL_ERROR "No isfinite function found, please report!")
268 ADD_DEFINITIONS(-Disfinite=_finite)
270 ADD_DEFINITIONS(-Disfinite=finite)
274 CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN)
276 CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN)
278 MESSAGE(FATAL_ERROR "No isnan function found, please report!")
281 ADD_DEFINITIONS(-Disnan=_isnan)
285 # Check for the dlopen API (for dynamicly loading backend libs)
287 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
289 CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
291 SET(EXTRA_LIBS dl ${EXTRA_LIBS})
296 # Check if we have Windows headers
297 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0500)
298 IF(NOT HAVE_WINDOWS_H)
299 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
300 IF(NOT HAVE_GETTIMEOFDAY)
301 MESSAGE(FATAL_ERROR "No timing function found!")
304 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
305 IF(NOT HAVE_NANOSLEEP)
306 MESSAGE(FATAL_ERROR "No sleep function found!")
309 CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
311 ADD_DEFINITIONS(-pthread)
312 SET(EXTRA_LIBS ${EXTRA_LIBS} -pthread)
315 # We need pthreads outside of Windows
316 CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
317 IF(NOT HAVE_PTHREAD_H)
318 MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
320 # Some systems need pthread_np.h to get recursive mutexes
321 CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
323 # _GNU_SOURCE is needed on some systems for extra attributes, and
324 # _REENTRANT is needed for libc thread-safety
325 ADD_DEFINITIONS(-D_GNU_SOURCE=1)
326 CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
328 SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
331 CHECK_LIBRARY_EXISTS(pthread pthread_setschedparam "" HAVE_PTHREAD_SETSCHEDPARAM)
333 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_LIBRT)
335 SET(EXTRA_LIBS rt ${EXTRA_LIBS})
339 # Check for a 64-bit type
340 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
341 IF(NOT HAVE_STDINT_H)
343 CHECK_C_SOURCE_COMPILES("\#define _WIN32_WINNT 0x0500
344 \#include <windows.h>
346 int main() {return 0;}" HAVE___INT64)
349 IF(NOT SIZEOF_LONG MATCHES "8")
350 IF(NOT SIZEOF_LONG_LONG MATCHES "8")
351 MESSAGE(FATAL_ERROR "No 64-bit types found, please report!")
357 # Windows needs winmm for timeGetTime, even if the backend is disabled
358 CHECK_SHARED_FUNCTION_EXISTS(timeGetTime "windows.h;mmsystem.h" winmm "" HAVE_LIBWINMM)
360 SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
361 SET(PKG_CONFIG_LIBS ${PKG_CONFIG_LIBS} -lwinmm)
365 SET(OPENAL_OBJS OpenAL32/alAuxEffectSlot.c
369 OpenAL32/alExtension.c
371 OpenAL32/alListener.c
376 SET(ALC_OBJS Alc/ALc.c
400 SET(HAVE_PORTAUDIO 0)
401 SET(HAVE_PULSEAUDIO 0)
402 SET(HAVE_COREAUDIO 0)
408 CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
409 IF(HAVE_ALSA_ASOUNDLIB_H)
410 CHECK_SHARED_FUNCTION_EXISTS(snd_pcm_open "alsa/asoundlib.h" asound "" HAVE_LIBASOUND)
411 IF(HAVE_LIBASOUND OR HAVE_DLFCN_H OR WIN32)
413 SET(ALC_OBJS ${ALC_OBJS} Alc/alsa.c)
414 IF(HAVE_DLFCN_H OR WIN32)
415 SET(BACKENDS "${BACKENDS} ALSA,")
417 SET(BACKENDS "${BACKENDS} ALSA \(linked\),")
418 SET(EXTRA_LIBS asound ${EXTRA_LIBS})
423 IF(REQUIRE_ALSA AND NOT HAVE_ALSA)
424 MESSAGE(FATAL_ERROR "Failed to enabled required ALSA backend")
429 CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
430 IF(HAVE_SYS_SOUNDCARD_H)
432 SET(ALC_OBJS ${ALC_OBJS} Alc/oss.c)
433 SET(BACKENDS "${BACKENDS} OSS,")
436 IF(REQUIRE_OSS AND NOT HAVE_OSS)
437 MESSAGE(FATAL_ERROR "Failed to enabled required OSS backend")
440 # Check Solaris backend
442 CHECK_INCLUDE_FILE(sys/audioio.h HAVE_SYS_AUDIOIO_H)
443 IF(HAVE_SYS_AUDIOIO_H)
445 SET(ALC_OBJS ${ALC_OBJS} Alc/solaris.c)
446 SET(BACKENDS "${BACKENDS} Solaris,")
449 IF(REQUIRE_SOLARIS AND NOT HAVE_SOLARIS)
450 MESSAGE(FATAL_ERROR "Failed to enabled required Solaris backend")
453 # Check SndIO backend
455 CHECK_INCLUDE_FILE(sndio.h HAVE_SNDIO_H)
457 CHECK_SHARED_FUNCTION_EXISTS(sio_open "sndio.h" sndio "" HAVE_LIBSNDIO)
458 IF(HAVE_LIBSNDIO OR HAVE_DLFCN_H OR WIN32)
460 SET(ALC_OBJS ${ALC_OBJS} Alc/sndio.c)
461 IF(HAVE_DLFCN_H OR WIN32)
462 SET(BACKENDS "${BACKENDS} SndIO,")
464 SET(BACKENDS "${BACKENDS} SndIO \(linked\),")
465 SET(EXTRA_LIBS sndio ${EXTRA_LIBS})
470 IF(REQUIRE_SNDIO AND NOT HAVE_SNDIO)
471 MESSAGE(FATAL_ERROR "Failed to enabled required SndIO backend")
474 # Check for MMDevApi backend
477 CHECK_INCLUDE_FILE(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
478 IF(HAVE_MMDEVICEAPI_H)
480 SET(ALC_OBJS ${ALC_OBJS} Alc/mmdevapi.c)
482 SET(BACKENDS "${BACKENDS} MMDevApi,")
486 IF(REQUIRE_MMDEVAPI AND NOT HAVE_MMDEVAPI)
487 MESSAGE(FATAL_ERROR "Failed to enabled required MMDevApi backend")
490 # Check DSound/MMSystem backend
492 CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H)
494 CHECK_SHARED_FUNCTION_EXISTS(DirectSoundCreate "dsound.h" dsound "" HAVE_LIBDSOUND)
495 IF(HAVE_LIBDSOUND OR HAVE_DLFCN_H OR WIN32)
497 SET(ALC_OBJS ${ALC_OBJS} Alc/dsound.c)
499 IF(HAVE_DLFCN_H OR WIN32)
500 SET(BACKENDS "${BACKENDS} DirectSound,")
502 SET(BACKENDS "${BACKENDS} DirectSound \(linked\),")
503 SET(EXTRA_LIBS dsound ${EXTRA_LIBS})
508 IF(REQUIRE_DSOUND AND NOT HAVE_DSOUND)
509 MESSAGE(FATAL_ERROR "Failed to enabled required DSound backend")
514 CHECK_INCLUDE_FILES("windows.h;mmsystem.h" HAVE_MMSYSTEM_H -D_WIN32_WINNT=0x0500)
515 IF(HAVE_MMSYSTEM_H AND HAVE_LIBWINMM)
517 SET(ALC_OBJS ${ALC_OBJS} Alc/winmm.c)
518 SET(BACKENDS "${BACKENDS} WinMM,")
522 IF(REQUIRE_WINMM AND NOT HAVE_WINMM)
523 MESSAGE(FATAL_ERROR "Failed to enabled required WinMM backend")
526 # Check PortAudio backend
528 CHECK_INCLUDE_FILE(portaudio.h HAVE_PORTAUDIO_H)
530 CHECK_SHARED_FUNCTION_EXISTS(Pa_Initialize "portaudio.h" portaudio "" HAVE_LIBPORTAUDIO)
531 IF(HAVE_LIBPORTAUDIO OR HAVE_DLFCN_H OR WIN32)
532 SET(HAVE_PORTAUDIO 1)
533 SET(ALC_OBJS ${ALC_OBJS} Alc/portaudio.c)
534 IF(HAVE_DLFCN_H OR WIN32)
535 SET(BACKENDS "${BACKENDS} PortAudio,")
537 SET(BACKENDS "${BACKENDS} PortAudio \(linked\),")
538 SET(EXTRA_LIBS portaudio ${EXTRA_LIBS})
543 IF(REQUIRE_PORTAUDIO AND NOT HAVE_PORTAUDIO)
544 MESSAGE(FATAL_ERROR "Failed to enabled required PortAudio backend")
547 # Check PulseAudio backend
549 CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSE_PULSEAUDIO_H)
550 IF(HAVE_PULSE_PULSEAUDIO_H)
551 CHECK_SHARED_FUNCTION_EXISTS(pa_context_new "pulse/pulseaudio.h" pulse "" HAVE_LIBPULSE)
552 IF(HAVE_LIBPULSE OR HAVE_DLFCN_H OR WIN32)
553 SET(HAVE_PULSEAUDIO 1)
554 SET(ALC_OBJS ${ALC_OBJS} Alc/pulseaudio.c)
555 IF(HAVE_DLFCN_H OR WIN32)
556 SET(BACKENDS "${BACKENDS} PulseAudio,")
558 SET(BACKENDS "${BACKENDS} PulseAudio \(linked\),")
559 SET(EXTRA_LIBS pulse ${EXTRA_LIBS})
564 IF(REQUIRE_PULSEAUDIO AND NOT HAVE_PULSEAUDIO)
565 MESSAGE(FATAL_ERROR "Failed to enabled required PulseAudio backend")
568 # Check CoreAudio backend
570 CHECK_INCLUDE_FILE(/System/Library/Frameworks/CoreAudio.framework/Headers/CoreAudio.h HAVE_COREAUDIO_FRAMEWORK)
571 IF(HAVE_COREAUDIO_FRAMEWORK)
572 SET(HAVE_COREAUDIO 1)
573 SET(ALC_OBJS ${ALC_OBJS} Alc/coreaudio.c)
574 SET(BACKENDS "${BACKENDS} CoreAudio,")
575 SET(EXTRA_LIBS /System/Library/Frameworks/CoreAudio.framework ${EXTRA_LIBS})
576 SET(EXTRA_LIBS /System/Library/Frameworks/AudioUnit.framework ${EXTRA_LIBS})
577 SET(EXTRA_LIBS /System/Library/Frameworks/ApplicationServices.framework ${EXTRA_LIBS})
580 IF(REQUIRE_COREAUDIO AND NOT HAVE_COREAUDIO)
581 MESSAGE(FATAL_ERROR "Failed to enabled required CoreAudio backend")
584 # Check for OpenSL (Android) backend
586 CHECK_INCLUDE_FILE(SLES/OpenSLES_Android.h HAVE_SLES_OPENSLES_ANDROID_H)
587 IF(HAVE_SLES_OPENSLES_ANDROID_H)
588 CHECK_SHARED_FUNCTION_EXISTS(slCreateEngine "SLES/OpenSLES.h" OpenSLES "" HAVE_LIBOPENSLES)
591 SET(ALC_OBJS ${ALC_OBJS} Alc/opensl.c)
592 SET(BACKENDS "${BACKENDS} OpenSL,")
593 SET(EXTRA_LIBS OpenSLES ${EXTRA_LIBS})
597 IF(REQUIRE_OPENSL AND NOT HAVE_OPENSL)
598 MESSAGE(FATAL_ERROR "Failed to enabled required OpenSL backend")
601 # Optionally enable the Wave Writer backend
604 SET(ALC_OBJS ${ALC_OBJS} Alc/wave.c)
605 SET(BACKENDS "${BACKENDS} WaveFile,")
608 # This is always available
609 SET(BACKENDS "${BACKENDS} Null")
611 IF(LIBTYPE STREQUAL "STATIC")
612 ADD_DEFINITIONS(-DAL_LIBTYPE_STATIC)
613 SET(PKG_CONFIG_CFLAGS -DAL_LIBTYPE_STATIC ${PKG_CONFIG_CFLAGS})
616 # Needed for openal.pc.in
617 SET(prefix ${CMAKE_INSTALL_PREFIX})
618 SET(exec_prefix "\${prefix}")
619 SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
620 SET(bindir "\${exec_prefix}/bin")
621 SET(includedir "\${prefix}/include")
622 SET(PACKAGE_VERSION "${LIB_VERSION}")
626 "${OpenAL_SOURCE_DIR}/config.h.in"
627 "${OpenAL_BINARY_DIR}/config.h")
629 "${OpenAL_SOURCE_DIR}/openal.pc.in"
630 "${OpenAL_BINARY_DIR}/openal.pc"
634 ADD_LIBRARY(${LIBNAME} ${LIBTYPE} ${OPENAL_OBJS} ${ALC_OBJS})
635 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES DEFINE_SYMBOL AL_BUILD_LIBRARY
636 COMPILE_FLAGS -DAL_ALEXT_PROTOTYPES
637 VERSION ${LIB_VERSION}.0
638 SOVERSION ${LIB_MAJOR_VERSION})
639 IF(WIN32 AND NOT LIBTYPE STREQUAL "STATIC")
640 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES PREFIX "")
643 TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS})
645 # Add an install target here
646 INSTALL(TARGETS ${LIBNAME}
647 RUNTIME DESTINATION bin
648 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
649 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
651 INSTALL(FILES include/AL/al.h
655 include/AL/efx-creative.h
656 DESTINATION include/AL
658 INSTALL(FILES "${OpenAL_BINARY_DIR}/openal.pc"
659 DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
663 MESSAGE(STATUS "Building OpenAL with support for the following backends:")
664 MESSAGE(STATUS " ${BACKENDS}")
669 MESSAGE(STATUS "WARNING: Building the Windows version without DirectSound output")
670 MESSAGE(STATUS " This is probably NOT what you want!")
675 # Install alsoft.conf configuration file
677 INSTALL(FILES alsoftrc.sample
678 DESTINATION /etc/openal
681 MESSAGE(STATUS "Installing sample alsoft.conf")
686 ADD_EXECUTABLE(openal-info utils/openal-info.c)
687 TARGET_LINK_LIBRARIES(openal-info ${LIBNAME})
688 INSTALL(TARGETS openal-info
689 RUNTIME DESTINATION bin
690 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
691 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
693 MESSAGE(STATUS "Building utility programs")