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 sample configuration file" ON)
74 ADD_DEFINITIONS("-D_WIN32 -D_WIN32_WINNT=0x0501")
83 SET(LIB_MAJOR_VERSION "1")
84 SET(LIB_MINOR_VERSION "15")
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(malloc.h HAVE_MALLOC_H)
250 CHECK_INCLUDE_FILE(cpuid.h HAVE_CPUID_H)
251 CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
252 CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
253 CHECK_INCLUDE_FILE(ieeefp.h HAVE_IEEEFP_H)
254 CHECK_INCLUDE_FILE(guiddef.h HAVE_GUIDDEF_H)
255 IF(NOT HAVE_GUIDDEF_H)
256 CHECK_INCLUDE_FILE(initguid.h HAVE_INITGUID_H)
259 # Some systems need libm for some of the following math functions to work
260 CHECK_LIBRARY_EXISTS(m pow "" HAVE_LIBM)
262 SET(EXTRA_LIBS m ${EXTRA_LIBS})
263 SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} m)
267 CHECK_SYMBOL_EXISTS(aligned_alloc stdlib.h HAVE_ALIGNED_ALLOC)
268 CHECK_SYMBOL_EXISTS(posix_memalign stdlib.h HAVE_POSIX_MEMALIGN)
269 CHECK_SYMBOL_EXISTS(_aligned_malloc malloc.h HAVE__ALIGNED_MALLOC)
270 CHECK_SYMBOL_EXISTS(lrintf math.h HAVE_LRINTF)
273 CHECK_SYMBOL_EXISTS(fesetround fenv.h HAVE_FESETROUND)
276 CHECK_SYMBOL_EXISTS(_controlfp float.h HAVE__CONTROLFP)
277 CHECK_SYMBOL_EXISTS(__control87_2 float.h HAVE___CONTROL87_2)
280 CHECK_FUNCTION_EXISTS(strtof HAVE_STRTOF)
281 CHECK_FUNCTION_EXISTS(stat HAVE_STAT)
282 CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
283 IF(NOT HAVE_STRCASECMP)
284 CHECK_FUNCTION_EXISTS(_stricmp HAVE__STRICMP)
285 IF(NOT HAVE__STRICMP)
286 MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!")
289 ADD_DEFINITIONS(-Dstrcasecmp=_stricmp)
292 CHECK_FUNCTION_EXISTS(strncasecmp HAVE_STRNCASECMP)
293 IF(NOT HAVE_STRNCASECMP)
294 CHECK_FUNCTION_EXISTS(_strnicmp HAVE__STRNICMP)
295 IF(NOT HAVE__STRNICMP)
296 MESSAGE(FATAL_ERROR "No case-insensitive size-limitted compare function found, please report!")
299 ADD_DEFINITIONS(-Dstrncasecmp=_strnicmp)
302 CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
303 IF(NOT HAVE_SNPRINTF)
304 CHECK_FUNCTION_EXISTS(_snprintf HAVE__SNPRINTF)
305 IF(NOT HAVE__SNPRINTF)
306 MESSAGE(FATAL_ERROR "No snprintf function found, please report!")
309 ADD_DEFINITIONS(-Dsnprintf=_snprintf)
312 CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
313 IF(NOT HAVE_VSNPRINTF)
314 CHECK_FUNCTION_EXISTS(_vsnprintf HAVE__VSNPRINTF)
315 IF(NOT HAVE__VSNPRINTF)
316 MESSAGE(FATAL_ERROR "No vsnprintf function found, please report!")
319 ADD_DEFINITIONS(-Dvsnprintf=_vsnprintf)
322 CHECK_SYMBOL_EXISTS(isfinite math.h HAVE_ISFINITE)
323 IF(NOT HAVE_ISFINITE)
324 CHECK_FUNCTION_EXISTS(finite HAVE_FINITE)
326 CHECK_FUNCTION_EXISTS(_finite HAVE__FINITE)
328 MESSAGE(FATAL_ERROR "No isfinite function found, please report!")
330 ADD_DEFINITIONS(-Disfinite=_finite)
332 ADD_DEFINITIONS(-Disfinite=finite)
336 CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN)
338 CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN)
340 MESSAGE(FATAL_ERROR "No isnan function found, please report!")
343 ADD_DEFINITIONS(-Disnan=_isnan)
347 # Check for the dlopen API (for dynamicly loading backend libs)
349 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
351 CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
353 SET(EXTRA_LIBS dl ${EXTRA_LIBS})
358 # Check if we have Windows headers
359 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0501)
360 IF(NOT HAVE_WINDOWS_H)
361 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
362 IF(NOT HAVE_GETTIMEOFDAY)
363 MESSAGE(FATAL_ERROR "No timing function found!")
366 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
367 IF(NOT HAVE_NANOSLEEP)
368 MESSAGE(FATAL_ERROR "No sleep function found!")
371 CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
373 ADD_DEFINITIONS(-pthread)
374 SET(EXTRA_LIBS ${EXTRA_LIBS} -pthread)
377 # We need pthreads outside of Windows
378 CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
379 IF(NOT HAVE_PTHREAD_H)
380 MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
382 # Some systems need pthread_np.h to get recursive mutexes
383 CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
385 # _GNU_SOURCE is needed on some systems for extra attributes
386 ADD_DEFINITIONS(-D_GNU_SOURCE=1)
387 CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
389 SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
392 CHECK_LIBRARY_EXISTS(pthread pthread_setschedparam "" HAVE_PTHREAD_SETSCHEDPARAM)
394 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_LIBRT)
396 SET(EXTRA_LIBS rt ${EXTRA_LIBS})
400 # Check for a 64-bit type
401 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
402 IF(NOT HAVE_STDINT_H)
404 CHECK_C_SOURCE_COMPILES("\#define _WIN32_WINNT 0x0501
405 \#include <windows.h>
407 int main() {return 0;}" HAVE___INT64)
410 IF(NOT SIZEOF_LONG MATCHES "8")
411 IF(NOT SIZEOF_LONG_LONG MATCHES "8")
412 MESSAGE(FATAL_ERROR "No 64-bit types found, please report!")
418 # Windows needs winmm for timeGetTime, even if the backend is disabled
419 CHECK_SHARED_FUNCTION_EXISTS(timeGetTime "windows.h;mmsystem.h" winmm "" HAVE_LIBWINMM)
421 SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
422 SET(PKG_CONFIG_LIBS ${PKG_CONFIG_LIBS} -lwinmm)
426 SET(OPENAL_OBJS OpenAL32/alAuxEffectSlot.c
430 OpenAL32/alExtension.c
432 OpenAL32/alListener.c
437 SET(ALC_OBJS Alc/ALc.c
455 SET(CPU_EXTS "Default")
459 # Check for SSE support
460 IF(SSE AND ALIGN_DECL)
461 CHECK_INCLUDE_FILE(xmmintrin.h HAVE_XMMINTRIN_H "${SSE_SWITCH}")
464 SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_sse.c)
466 SET_SOURCE_FILES_PROPERTIES(Alc/mixer_sse.c PROPERTIES
467 COMPILE_FLAGS "${SSE_SWITCH}")
469 SET(CPU_EXTS "${CPU_EXTS}, SSE")
472 IF(REQUIRE_SSE AND NOT HAVE_SSE)
473 MESSAGE(FATAL_ERROR "Failed to enabled required SSE CPU extensions")
476 # Check for ARM Neon support
478 CHECK_INCLUDE_FILE(arm_neon.h HAVE_ARM_NEON_H)
481 SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_neon.c)
482 SET(CPU_EXTS "${CPU_EXTS}, Neon")
485 IF(REQUIRE_NEON AND NOT HAVE_NEON)
486 MESSAGE(FATAL_ERROR "Failed to enabled required ARM Neon CPU extensions")
490 SET(ALC_OBJS ${ALC_OBJS}
491 # Default backends, always available
492 Alc/backends/loopback.c
504 SET(HAVE_PORTAUDIO 0)
505 SET(HAVE_PULSEAUDIO 0)
506 SET(HAVE_COREAUDIO 0)
512 CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
513 IF(HAVE_ALSA_ASOUNDLIB_H)
514 CHECK_SHARED_FUNCTION_EXISTS(snd_pcm_open "alsa/asoundlib.h" asound "" HAVE_LIBASOUND)
515 IF(HAVE_LIBASOUND OR HAVE_DLFCN_H OR WIN32)
517 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/alsa.c)
518 IF(HAVE_DLFCN_H OR WIN32)
519 SET(BACKENDS "${BACKENDS} ALSA,")
521 SET(BACKENDS "${BACKENDS} ALSA \(linked\),")
522 SET(EXTRA_LIBS asound ${EXTRA_LIBS})
527 IF(REQUIRE_ALSA AND NOT HAVE_ALSA)
528 MESSAGE(FATAL_ERROR "Failed to enabled required ALSA backend")
533 CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
534 IF(HAVE_SYS_SOUNDCARD_H)
536 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/oss.c)
537 SET(BACKENDS "${BACKENDS} OSS,")
540 IF(REQUIRE_OSS AND NOT HAVE_OSS)
541 MESSAGE(FATAL_ERROR "Failed to enabled required OSS backend")
544 # Check Solaris backend
546 CHECK_INCLUDE_FILE(sys/audioio.h HAVE_SYS_AUDIOIO_H)
547 IF(HAVE_SYS_AUDIOIO_H)
549 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/solaris.c)
550 SET(BACKENDS "${BACKENDS} Solaris,")
553 IF(REQUIRE_SOLARIS AND NOT HAVE_SOLARIS)
554 MESSAGE(FATAL_ERROR "Failed to enabled required Solaris backend")
557 # Check SndIO backend
559 CHECK_INCLUDE_FILE(sndio.h HAVE_SNDIO_H)
561 CHECK_SHARED_FUNCTION_EXISTS(sio_open "sndio.h" sndio "" HAVE_LIBSNDIO)
564 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/sndio.c)
565 SET(BACKENDS "${BACKENDS} SndIO \(linked\),")
566 SET(EXTRA_LIBS sndio ${EXTRA_LIBS})
570 IF(REQUIRE_SNDIO AND NOT HAVE_SNDIO)
571 MESSAGE(FATAL_ERROR "Failed to enabled required SndIO backend")
574 # Check for MMDevApi backend
577 CHECK_INCLUDE_FILE(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
578 IF(HAVE_MMDEVICEAPI_H)
580 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/mmdevapi.c)
582 SET(BACKENDS "${BACKENDS} MMDevApi,")
586 IF(REQUIRE_MMDEVAPI AND NOT HAVE_MMDEVAPI)
587 MESSAGE(FATAL_ERROR "Failed to enabled required MMDevApi backend")
590 # Check DSound/MMSystem backend
592 CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H)
594 CHECK_SHARED_FUNCTION_EXISTS(DirectSoundCreate "dsound.h" dsound "" HAVE_LIBDSOUND)
595 IF(HAVE_LIBDSOUND OR HAVE_DLFCN_H OR WIN32)
597 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/dsound.c)
599 IF(HAVE_DLFCN_H OR WIN32)
600 SET(BACKENDS "${BACKENDS} DirectSound,")
602 SET(BACKENDS "${BACKENDS} DirectSound \(linked\),")
603 SET(EXTRA_LIBS dsound ${EXTRA_LIBS})
608 IF(REQUIRE_DSOUND AND NOT HAVE_DSOUND)
609 MESSAGE(FATAL_ERROR "Failed to enabled required DSound backend")
614 CHECK_INCLUDE_FILES("windows.h;mmsystem.h" HAVE_MMSYSTEM_H -D_WIN32_WINNT=0x0501)
615 IF(HAVE_MMSYSTEM_H AND HAVE_LIBWINMM)
617 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/winmm.c)
618 SET(BACKENDS "${BACKENDS} WinMM,")
622 IF(REQUIRE_WINMM AND NOT HAVE_WINMM)
623 MESSAGE(FATAL_ERROR "Failed to enabled required WinMM backend")
626 # Check PortAudio backend
628 CHECK_INCLUDE_FILE(portaudio.h HAVE_PORTAUDIO_H)
630 CHECK_SHARED_FUNCTION_EXISTS(Pa_Initialize "portaudio.h" portaudio "" HAVE_LIBPORTAUDIO)
631 IF(HAVE_LIBPORTAUDIO OR HAVE_DLFCN_H OR WIN32)
632 SET(HAVE_PORTAUDIO 1)
633 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/portaudio.c)
634 IF(HAVE_DLFCN_H OR WIN32)
635 SET(BACKENDS "${BACKENDS} PortAudio,")
637 SET(BACKENDS "${BACKENDS} PortAudio \(linked\),")
638 SET(EXTRA_LIBS portaudio ${EXTRA_LIBS})
643 IF(REQUIRE_PORTAUDIO AND NOT HAVE_PORTAUDIO)
644 MESSAGE(FATAL_ERROR "Failed to enabled required PortAudio backend")
647 # Check PulseAudio backend
649 CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSE_PULSEAUDIO_H)
650 IF(HAVE_PULSE_PULSEAUDIO_H)
651 CHECK_SHARED_FUNCTION_EXISTS(pa_context_new "pulse/pulseaudio.h" pulse "" HAVE_LIBPULSE)
652 IF(HAVE_LIBPULSE OR HAVE_DLFCN_H OR WIN32)
653 SET(HAVE_PULSEAUDIO 1)
654 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/pulseaudio.c)
655 IF(HAVE_DLFCN_H OR WIN32)
656 SET(BACKENDS "${BACKENDS} PulseAudio,")
658 SET(BACKENDS "${BACKENDS} PulseAudio \(linked\),")
659 SET(EXTRA_LIBS pulse ${EXTRA_LIBS})
664 IF(REQUIRE_PULSEAUDIO AND NOT HAVE_PULSEAUDIO)
665 MESSAGE(FATAL_ERROR "Failed to enabled required PulseAudio backend")
668 # Check CoreAudio backend
670 CHECK_INCLUDE_FILE(/System/Library/Frameworks/CoreAudio.framework/Headers/CoreAudio.h HAVE_COREAUDIO_FRAMEWORK)
671 IF(HAVE_COREAUDIO_FRAMEWORK)
672 SET(HAVE_COREAUDIO 1)
673 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/coreaudio.c)
674 SET(BACKENDS "${BACKENDS} CoreAudio,")
675 SET(EXTRA_LIBS /System/Library/Frameworks/CoreAudio.framework ${EXTRA_LIBS})
676 SET(EXTRA_LIBS /System/Library/Frameworks/AudioUnit.framework ${EXTRA_LIBS})
677 SET(EXTRA_LIBS /System/Library/Frameworks/ApplicationServices.framework ${EXTRA_LIBS})
679 # Some versions of OSX may need the AudioToolbox framework. Add it if
681 FIND_LIBRARY(AUDIOTOOLBOX_LIBRARY
683 PATHS ~/Library/Frameworks
685 /System/Library/Frameworks
687 IF(AUDIOTOOLBOX_LIBRARY)
688 SET(EXTRA_LIBS ${AUDIOTOOLBOX_LIBRARY} ${EXTRA_LIBS})
692 IF(REQUIRE_COREAUDIO AND NOT HAVE_COREAUDIO)
693 MESSAGE(FATAL_ERROR "Failed to enabled required CoreAudio backend")
696 # Check for OpenSL (Android) backend
698 CHECK_INCLUDE_FILES("SLES/OpenSLES.h;SLES/OpenSLES_Android.h" HAVE_SLES_OPENSLES_ANDROID_H)
699 IF(HAVE_SLES_OPENSLES_ANDROID_H)
700 CHECK_SHARED_FUNCTION_EXISTS(slCreateEngine "SLES/OpenSLES.h" OpenSLES "" HAVE_LIBOPENSLES)
703 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/opensl.c)
704 SET(BACKENDS "${BACKENDS} OpenSL,")
705 SET(EXTRA_LIBS OpenSLES ${EXTRA_LIBS})
709 IF(REQUIRE_OPENSL AND NOT HAVE_OPENSL)
710 MESSAGE(FATAL_ERROR "Failed to enabled required OpenSL backend")
713 # Optionally enable the Wave Writer backend
716 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/wave.c)
717 SET(BACKENDS "${BACKENDS} WaveFile,")
720 # This is always available
721 SET(BACKENDS "${BACKENDS} Null")
724 # Might be able to use earlier versions, but these definitely work
725 PKG_CHECK_MODULES(FFMPEG libavcodec>=53.61.100 libavformat>=53.32.100 libavutil>=51.35.100)
728 IF(LIBTYPE STREQUAL "STATIC")
729 ADD_DEFINITIONS(-DAL_LIBTYPE_STATIC)
730 SET(PKG_CONFIG_CFLAGS -DAL_LIBTYPE_STATIC ${PKG_CONFIG_CFLAGS})
733 # Needed for openal.pc.in
734 SET(prefix ${CMAKE_INSTALL_PREFIX})
735 SET(exec_prefix "\${prefix}")
736 SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
737 SET(bindir "\${exec_prefix}/bin")
738 SET(includedir "\${prefix}/include")
739 SET(PACKAGE_VERSION "${LIB_VERSION}")
743 "${OpenAL_SOURCE_DIR}/config.h.in"
744 "${OpenAL_BINARY_DIR}/config.h")
746 "${OpenAL_SOURCE_DIR}/openal.pc.in"
747 "${OpenAL_BINARY_DIR}/openal.pc"
751 ADD_LIBRARY(${LIBNAME} ${LIBTYPE} ${OPENAL_OBJS} ${ALC_OBJS})
752 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES DEFINE_SYMBOL AL_BUILD_LIBRARY
753 COMPILE_FLAGS -DAL_ALEXT_PROTOTYPES
754 VERSION ${LIB_VERSION}.0
755 SOVERSION ${LIB_MAJOR_VERSION})
756 IF(WIN32 AND NOT LIBTYPE STREQUAL "STATIC")
757 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES PREFIX "")
760 TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS})
762 # Add an install target here
763 INSTALL(TARGETS ${LIBNAME}
764 RUNTIME DESTINATION bin
765 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
766 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
768 INSTALL(FILES include/AL/al.h
772 include/AL/efx-creative.h
773 include/AL/efx-presets.h
774 DESTINATION include/AL
776 INSTALL(FILES "${OpenAL_BINARY_DIR}/openal.pc"
777 DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
781 MESSAGE(STATUS "Building OpenAL with support for the following backends:")
782 MESSAGE(STATUS " ${BACKENDS}")
784 MESSAGE(STATUS "Building with support for CPU extensions:")
785 MESSAGE(STATUS " ${CPU_EXTS}")
790 MESSAGE(STATUS "WARNING: Building the Windows version without DirectSound output")
791 MESSAGE(STATUS " This is probably NOT what you want!")
796 # Install alsoft.conf configuration file
798 INSTALL(FILES alsoftrc.sample
799 DESTINATION share/openal
801 MESSAGE(STATUS "Installing sample configuration")
806 ADD_EXECUTABLE(openal-info utils/openal-info.c)
807 TARGET_LINK_LIBRARIES(openal-info ${LIBNAME})
809 ADD_EXECUTABLE(makehrtf utils/makehrtf.c)
811 TARGET_LINK_LIBRARIES(makehrtf m)
814 INSTALL(TARGETS openal-info makehrtf
815 RUNTIME DESTINATION bin
816 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
817 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
819 MESSAGE(STATUS "Building utility programs")
825 ADD_EXECUTABLE(alstream examples/common/alhelpers.c
826 examples/common/alffmpeg.c
828 TARGET_LINK_LIBRARIES(alstream ${FFMPEG_LIBRARIES} ${LIBNAME})
829 SET_TARGET_PROPERTIES(alstream PROPERTIES COMPILE_FLAGS "${FFMPEG_CFLAGS}")
831 ADD_EXECUTABLE(alreverb examples/common/alhelpers.c
832 examples/common/alffmpeg.c
834 TARGET_LINK_LIBRARIES(alreverb ${FFMPEG_LIBRARIES} ${LIBNAME})
835 SET_TARGET_PROPERTIES(alreverb PROPERTIES COMPILE_FLAGS "${FFMPEG_CFLAGS}")
837 ADD_EXECUTABLE(allatency examples/common/alhelpers.c
838 examples/common/alffmpeg.c
839 examples/allatency.c)
840 TARGET_LINK_LIBRARIES(allatency ${FFMPEG_LIBRARIES} ${LIBNAME})
841 SET_TARGET_PROPERTIES(allatency PROPERTIES COMPILE_FLAGS "${FFMPEG_CFLAGS}")
843 INSTALL(TARGETS alstream alreverb allatency
844 RUNTIME DESTINATION bin
845 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
846 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
849 MESSAGE(STATUS "Building ffmpeg example programs")