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}")
90 CHECK_TYPE_SIZE("long" SIZEOF_LONG)
91 CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
94 CHECK_C_SOURCE_COMPILES("int *restrict foo;
95 int main() {return 0;}" HAVE_RESTRICT)
96 CHECK_C_SOURCE_COMPILES("int *__restrict foo;
97 int main() {return 0;}" HAVE___RESTRICT)
100 # Add definitions, compiler switches, etc.
101 INCLUDE_DIRECTORIES(OpenAL32/Include include "${OpenAL_BINARY_DIR}")
103 IF(NOT CMAKE_BUILD_TYPE)
104 SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
105 "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
108 IF(NOT CMAKE_DEBUG_POSTFIX)
109 SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING
110 "Library postfix for debug builds. Normally left blank."
116 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_DEBUG")
117 SET(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -DNDEBUG")
118 SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG")
119 SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
120 ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
121 ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
124 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "$ENV{DXSDK_DIR}")
126 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "${DXSDK_DIR}")
129 MESSAGE(STATUS "Using DirectX SDK directory: ${DXSDK_DIR}")
130 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${DXSDK_DIR}/Include")
131 INCLUDE_DIRECTORIES("${DXSDK_DIR}/Include")
132 LINK_DIRECTORIES("${DXSDK_DIR}/Lib")
135 OPTION(FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF)
136 IF(FORCE_STATIC_VCRT)
138 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
139 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
140 IF(${flag_var} MATCHES "/MD")
141 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
146 ADD_DEFINITIONS(-Winline -Wall)
147 CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA)
149 ADD_DEFINITIONS(-Wextra)
153 ADD_DEFINITIONS(-Werror)
156 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -O2 -D_DEBUG" CACHE STRING
157 "Flags used by the compiler during Release with Debug Info builds."
159 SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" CACHE STRING
160 "Flags used by the compiler during release minsize builds."
162 SET(CMAKE_C_FLAGS_RELEASE "-O2 -fomit-frame-pointer -DNDEBUG" CACHE STRING
163 "Flags used by the compiler during release builds"
165 SET(CMAKE_C_FLAGS_DEBUG "-g3 -D_DEBUG" CACHE STRING
166 "Flags used by the compiler during debug builds."
169 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor));
170 int main() {return 0;}" HAVE_GCC_DESTRUCTOR)
173 # Set visibility/export options if available
175 SET(EXPORT_DECL "__declspec(dllexport)")
177 OPTION(WINE "Enable use of Wine headers when compiling" OFF)
179 FIND_PATH(WINE_INCLUDE_DIR library.h
182 /usr/local/include/wine
183 CMAKE_FIND_ROOT_PATH_BOTH)
185 MESSAGE(STATUS "Found Wine header files - ${WINE_INCLUDE_DIR}" )
186 INCLUDE_DIRECTORIES("${WINE_INCLUDE_DIR}/windows")
187 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${WINE_INCLUDE_DIR}/windows")
189 MESSAGE(STATUS "Could not find Wine header files" )
193 SET(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
194 # Yes GCC, really don't accept visibility modes you don't support
195 SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Wattributes -Werror")
197 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"protected\")));
198 int main() {return 0;}" HAVE_GCC_PROTECTED_VISIBILITY)
199 IF(HAVE_GCC_PROTECTED_VISIBILITY)
200 SET(EXPORT_DECL "__attribute__((visibility(\"protected\")))")
202 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\")));
203 int main() {return 0;}" HAVE_GCC_DEFAULT_VISIBILITY)
204 IF(HAVE_GCC_DEFAULT_VISIBILITY)
205 SET(EXPORT_DECL "__attribute__((visibility(\"default\")))")
209 IF(HAVE_GCC_PROTECTED_VISIBILITY OR HAVE_GCC_DEFAULT_VISIBILITY)
210 CHECK_C_COMPILER_FLAG(-fvisibility=internal HAVE_VISIBILITY_INTERNAL_SWITCH)
211 IF(HAVE_VISIBILITY_INTERNAL_SWITCH)
212 ADD_DEFINITIONS(-fvisibility=internal)
214 CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN_SWITCH)
215 IF(HAVE_VISIBILITY_HIDDEN_SWITCH)
216 ADD_DEFINITIONS(-fvisibility=hidden)
221 SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
225 CHECK_C_COMPILER_FLAG(-msse HAVE_MSSE_SWITCH)
227 SET(SSE_SWITCH "-msse")
230 CHECK_C_SOURCE_COMPILES("int foo(const char *str, ...) __attribute__((format(printf, 1, 2)));
231 int main() {return 0;}" HAVE_GCC_FORMAT)
233 CHECK_INCLUDE_FILE(cpuid.h HAVE_CPUID_H)
234 CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
235 CHECK_INCLUDE_FILE(fpu_control.h HAVE_FPU_CONTROL_H)
236 CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
237 CHECK_INCLUDE_FILE(ieeefp.h HAVE_IEEEFP_H)
238 CHECK_INCLUDE_FILE(guiddef.h HAVE_GUIDDEF_H)
239 IF(NOT HAVE_GUIDDEF_H)
240 CHECK_INCLUDE_FILE(initguid.h HAVE_INITGUID_H)
243 # Some systems need libm for some of the following math functions to work
244 CHECK_LIBRARY_EXISTS(m pow "" HAVE_LIBM)
246 SET(EXTRA_LIBS m ${EXTRA_LIBS})
247 SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} m)
251 CHECK_SYMBOL_EXISTS(powf math.h HAVE_POWF)
252 CHECK_SYMBOL_EXISTS(sqrtf math.h HAVE_SQRTF)
253 CHECK_SYMBOL_EXISTS(cosf math.h HAVE_COSF)
254 CHECK_SYMBOL_EXISTS(sinf math.h HAVE_SINF)
255 CHECK_SYMBOL_EXISTS(acosf math.h HAVE_ACOSF)
256 CHECK_SYMBOL_EXISTS(asinf math.h HAVE_ASINF)
257 CHECK_SYMBOL_EXISTS(atanf math.h HAVE_ATANF)
258 CHECK_SYMBOL_EXISTS(atan2f math.h HAVE_ATAN2F)
259 CHECK_SYMBOL_EXISTS(fabsf math.h HAVE_FABSF)
260 CHECK_SYMBOL_EXISTS(log10f math.h HAVE_LOG10F)
261 CHECK_SYMBOL_EXISTS(floorf math.h HAVE_FLOORF)
264 CHECK_SYMBOL_EXISTS(fesetround fenv.h HAVE_FESETROUND)
267 CHECK_FUNCTION_EXISTS(strtof HAVE_STRTOF)
268 CHECK_FUNCTION_EXISTS(_controlfp HAVE__CONTROLFP)
270 CHECK_FUNCTION_EXISTS(stat HAVE_STAT)
271 CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
272 IF(NOT HAVE_STRCASECMP)
273 CHECK_FUNCTION_EXISTS(_stricmp HAVE__STRICMP)
274 IF(NOT HAVE__STRICMP)
275 MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!")
278 ADD_DEFINITIONS(-Dstrcasecmp=_stricmp)
281 CHECK_FUNCTION_EXISTS(strncasecmp HAVE_STRNCASECMP)
282 IF(NOT HAVE_STRNCASECMP)
283 CHECK_FUNCTION_EXISTS(_strnicmp HAVE__STRNICMP)
284 IF(NOT HAVE__STRNICMP)
285 MESSAGE(FATAL_ERROR "No case-insensitive size-limitted compare function found, please report!")
288 ADD_DEFINITIONS(-Dstrncasecmp=_strnicmp)
291 CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
292 IF(NOT HAVE_SNPRINTF)
293 CHECK_FUNCTION_EXISTS(_snprintf HAVE__SNPRINTF)
294 IF(NOT HAVE__SNPRINTF)
295 MESSAGE(FATAL_ERROR "No snprintf function found, please report!")
298 ADD_DEFINITIONS(-Dsnprintf=_snprintf)
301 CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
302 IF(NOT HAVE_VSNPRINTF)
303 CHECK_FUNCTION_EXISTS(_vsnprintf HAVE__VSNPRINTF)
304 IF(NOT HAVE__VSNPRINTF)
305 MESSAGE(FATAL_ERROR "No vsnprintf function found, please report!")
308 ADD_DEFINITIONS(-Dvsnprintf=_vsnprintf)
311 CHECK_SYMBOL_EXISTS(isfinite math.h HAVE_ISFINITE)
312 IF(NOT HAVE_ISFINITE)
313 CHECK_FUNCTION_EXISTS(finite HAVE_FINITE)
315 CHECK_FUNCTION_EXISTS(_finite HAVE__FINITE)
317 MESSAGE(FATAL_ERROR "No isfinite function found, please report!")
319 ADD_DEFINITIONS(-Disfinite=_finite)
321 ADD_DEFINITIONS(-Disfinite=finite)
325 CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN)
327 CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN)
329 MESSAGE(FATAL_ERROR "No isnan function found, please report!")
332 ADD_DEFINITIONS(-Disnan=_isnan)
336 # Check for the dlopen API (for dynamicly loading backend libs)
338 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
340 CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
342 SET(EXTRA_LIBS dl ${EXTRA_LIBS})
347 # Check if we have Windows headers
348 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0501)
349 IF(NOT HAVE_WINDOWS_H)
350 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
351 IF(NOT HAVE_GETTIMEOFDAY)
352 MESSAGE(FATAL_ERROR "No timing function found!")
355 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
356 IF(NOT HAVE_NANOSLEEP)
357 MESSAGE(FATAL_ERROR "No sleep function found!")
360 CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
362 ADD_DEFINITIONS(-pthread)
363 SET(EXTRA_LIBS ${EXTRA_LIBS} -pthread)
366 # We need pthreads outside of Windows
367 CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
368 IF(NOT HAVE_PTHREAD_H)
369 MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
371 # Some systems need pthread_np.h to get recursive mutexes
372 CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
374 # _GNU_SOURCE is needed on some systems for extra attributes
375 ADD_DEFINITIONS(-D_GNU_SOURCE=1)
376 CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
378 SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
381 CHECK_LIBRARY_EXISTS(pthread pthread_setschedparam "" HAVE_PTHREAD_SETSCHEDPARAM)
383 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_LIBRT)
385 SET(EXTRA_LIBS rt ${EXTRA_LIBS})
389 # Check for a 64-bit type
390 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
391 IF(NOT HAVE_STDINT_H)
393 CHECK_C_SOURCE_COMPILES("\#define _WIN32_WINNT 0x0501
394 \#include <windows.h>
396 int main() {return 0;}" HAVE___INT64)
399 IF(NOT SIZEOF_LONG MATCHES "8")
400 IF(NOT SIZEOF_LONG_LONG MATCHES "8")
401 MESSAGE(FATAL_ERROR "No 64-bit types found, please report!")
407 # Windows needs winmm for timeGetTime, even if the backend is disabled
408 CHECK_SHARED_FUNCTION_EXISTS(timeGetTime "windows.h;mmsystem.h" winmm "" HAVE_LIBWINMM)
410 SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
411 SET(PKG_CONFIG_LIBS ${PKG_CONFIG_LIBS} -lwinmm)
415 SET(OPENAL_OBJS OpenAL32/alAuxEffectSlot.c
419 OpenAL32/alExtension.c
421 OpenAL32/alListener.c
426 SET(ALC_OBJS Alc/ALc.c
444 SET(CPU_EXTS "Default")
448 # Check for SSE support
450 CHECK_INCLUDE_FILE(xmmintrin.h HAVE_XMMINTRIN_H "${SSE_SWITCH}")
453 SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_sse.c)
455 SET_SOURCE_FILES_PROPERTIES(Alc/mixer_sse.c PROPERTIES
456 COMPILE_FLAGS "${SSE_SWITCH}")
458 SET(CPU_EXTS "${CPU_EXTS}, SSE")
461 IF(REQUIRE_SSE AND NOT HAVE_SSE)
462 MESSAGE(FATAL_ERROR "Failed to enabled required SSE CPU extensions")
465 # Check for ARM Neon support
467 CHECK_INCLUDE_FILE(arm_neon.h HAVE_ARM_NEON_H)
470 SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_neon.c)
471 SET(CPU_EXTS "${CPU_EXTS}, Neon")
474 IF(REQUIRE_NEON AND NOT HAVE_NEON)
475 MESSAGE(FATAL_ERROR "Failed to enabled required ARM Neon CPU extensions")
479 SET(ALC_OBJS ${ALC_OBJS}
480 # Default backends, always available
481 Alc/backends/loopback.c
493 SET(HAVE_PORTAUDIO 0)
494 SET(HAVE_PULSEAUDIO 0)
495 SET(HAVE_COREAUDIO 0)
501 CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
502 IF(HAVE_ALSA_ASOUNDLIB_H)
503 CHECK_SHARED_FUNCTION_EXISTS(snd_pcm_open "alsa/asoundlib.h" asound "" HAVE_LIBASOUND)
504 IF(HAVE_LIBASOUND OR HAVE_DLFCN_H OR WIN32)
506 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/alsa.c)
507 IF(HAVE_DLFCN_H OR WIN32)
508 SET(BACKENDS "${BACKENDS} ALSA,")
510 SET(BACKENDS "${BACKENDS} ALSA \(linked\),")
511 SET(EXTRA_LIBS asound ${EXTRA_LIBS})
516 IF(REQUIRE_ALSA AND NOT HAVE_ALSA)
517 MESSAGE(FATAL_ERROR "Failed to enabled required ALSA backend")
522 CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
523 IF(HAVE_SYS_SOUNDCARD_H)
525 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/oss.c)
526 SET(BACKENDS "${BACKENDS} OSS,")
529 IF(REQUIRE_OSS AND NOT HAVE_OSS)
530 MESSAGE(FATAL_ERROR "Failed to enabled required OSS backend")
533 # Check Solaris backend
535 CHECK_INCLUDE_FILE(sys/audioio.h HAVE_SYS_AUDIOIO_H)
536 IF(HAVE_SYS_AUDIOIO_H)
538 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/solaris.c)
539 SET(BACKENDS "${BACKENDS} Solaris,")
542 IF(REQUIRE_SOLARIS AND NOT HAVE_SOLARIS)
543 MESSAGE(FATAL_ERROR "Failed to enabled required Solaris backend")
546 # Check SndIO backend
548 CHECK_INCLUDE_FILE(sndio.h HAVE_SNDIO_H)
550 CHECK_SHARED_FUNCTION_EXISTS(sio_open "sndio.h" sndio "" HAVE_LIBSNDIO)
551 IF(HAVE_LIBSNDIO OR HAVE_DLFCN_H OR WIN32)
553 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/sndio.c)
554 IF(HAVE_DLFCN_H OR WIN32)
555 SET(BACKENDS "${BACKENDS} SndIO,")
557 SET(BACKENDS "${BACKENDS} SndIO \(linked\),")
558 SET(EXTRA_LIBS sndio ${EXTRA_LIBS})
563 IF(REQUIRE_SNDIO AND NOT HAVE_SNDIO)
564 MESSAGE(FATAL_ERROR "Failed to enabled required SndIO backend")
567 # Check for MMDevApi backend
570 CHECK_INCLUDE_FILE(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
571 IF(HAVE_MMDEVICEAPI_H)
573 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/mmdevapi.c)
575 SET(BACKENDS "${BACKENDS} MMDevApi,")
579 IF(REQUIRE_MMDEVAPI AND NOT HAVE_MMDEVAPI)
580 MESSAGE(FATAL_ERROR "Failed to enabled required MMDevApi backend")
583 # Check DSound/MMSystem backend
585 CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H)
587 CHECK_SHARED_FUNCTION_EXISTS(DirectSoundCreate "dsound.h" dsound "" HAVE_LIBDSOUND)
588 IF(HAVE_LIBDSOUND OR HAVE_DLFCN_H OR WIN32)
590 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/dsound.c)
592 IF(HAVE_DLFCN_H OR WIN32)
593 SET(BACKENDS "${BACKENDS} DirectSound,")
595 SET(BACKENDS "${BACKENDS} DirectSound \(linked\),")
596 SET(EXTRA_LIBS dsound ${EXTRA_LIBS})
601 IF(REQUIRE_DSOUND AND NOT HAVE_DSOUND)
602 MESSAGE(FATAL_ERROR "Failed to enabled required DSound backend")
607 CHECK_INCLUDE_FILES("windows.h;mmsystem.h" HAVE_MMSYSTEM_H -D_WIN32_WINNT=0x0501)
608 IF(HAVE_MMSYSTEM_H AND HAVE_LIBWINMM)
610 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/winmm.c)
611 SET(BACKENDS "${BACKENDS} WinMM,")
615 IF(REQUIRE_WINMM AND NOT HAVE_WINMM)
616 MESSAGE(FATAL_ERROR "Failed to enabled required WinMM backend")
619 # Check PortAudio backend
621 CHECK_INCLUDE_FILE(portaudio.h HAVE_PORTAUDIO_H)
623 CHECK_SHARED_FUNCTION_EXISTS(Pa_Initialize "portaudio.h" portaudio "" HAVE_LIBPORTAUDIO)
624 IF(HAVE_LIBPORTAUDIO OR HAVE_DLFCN_H OR WIN32)
625 SET(HAVE_PORTAUDIO 1)
626 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/portaudio.c)
627 IF(HAVE_DLFCN_H OR WIN32)
628 SET(BACKENDS "${BACKENDS} PortAudio,")
630 SET(BACKENDS "${BACKENDS} PortAudio \(linked\),")
631 SET(EXTRA_LIBS portaudio ${EXTRA_LIBS})
636 IF(REQUIRE_PORTAUDIO AND NOT HAVE_PORTAUDIO)
637 MESSAGE(FATAL_ERROR "Failed to enabled required PortAudio backend")
640 # Check PulseAudio backend
642 CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSE_PULSEAUDIO_H)
643 IF(HAVE_PULSE_PULSEAUDIO_H)
644 CHECK_SHARED_FUNCTION_EXISTS(pa_context_new "pulse/pulseaudio.h" pulse "" HAVE_LIBPULSE)
645 IF(HAVE_LIBPULSE OR HAVE_DLFCN_H OR WIN32)
646 SET(HAVE_PULSEAUDIO 1)
647 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/pulseaudio.c)
648 IF(HAVE_DLFCN_H OR WIN32)
649 SET(BACKENDS "${BACKENDS} PulseAudio,")
651 SET(BACKENDS "${BACKENDS} PulseAudio \(linked\),")
652 SET(EXTRA_LIBS pulse ${EXTRA_LIBS})
657 IF(REQUIRE_PULSEAUDIO AND NOT HAVE_PULSEAUDIO)
658 MESSAGE(FATAL_ERROR "Failed to enabled required PulseAudio backend")
661 # Check CoreAudio backend
663 CHECK_INCLUDE_FILE(/System/Library/Frameworks/CoreAudio.framework/Headers/CoreAudio.h HAVE_COREAUDIO_FRAMEWORK)
664 IF(HAVE_COREAUDIO_FRAMEWORK)
665 SET(HAVE_COREAUDIO 1)
666 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/coreaudio.c)
667 SET(BACKENDS "${BACKENDS} CoreAudio,")
668 SET(EXTRA_LIBS /System/Library/Frameworks/CoreAudio.framework ${EXTRA_LIBS})
669 SET(EXTRA_LIBS /System/Library/Frameworks/AudioUnit.framework ${EXTRA_LIBS})
670 SET(EXTRA_LIBS /System/Library/Frameworks/ApplicationServices.framework ${EXTRA_LIBS})
672 # Some versions of OSX may need the AudioToolbox framework. Add it if
674 FIND_LIBRARY(AUDIOTOOLBOX_LIBRARY
676 PATHS ~/Library/Frameworks
678 /System/Library/Frameworks
680 IF(AUDIOTOOLBOX_LIBRARY)
681 SET(EXTRA_LIBS ${AUDIOTOOLBOX_LIBRARY} ${EXTRA_LIBS})
685 IF(REQUIRE_COREAUDIO AND NOT HAVE_COREAUDIO)
686 MESSAGE(FATAL_ERROR "Failed to enabled required CoreAudio backend")
689 # Check for OpenSL (Android) backend
691 CHECK_INCLUDE_FILES("SLES/OpenSLES.h;SLES/OpenSLES_Android.h" HAVE_SLES_OPENSLES_ANDROID_H)
692 IF(HAVE_SLES_OPENSLES_ANDROID_H)
693 CHECK_SHARED_FUNCTION_EXISTS(slCreateEngine "SLES/OpenSLES.h" OpenSLES "" HAVE_LIBOPENSLES)
696 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/opensl.c)
697 SET(BACKENDS "${BACKENDS} OpenSL,")
698 SET(EXTRA_LIBS OpenSLES ${EXTRA_LIBS})
702 IF(REQUIRE_OPENSL AND NOT HAVE_OPENSL)
703 MESSAGE(FATAL_ERROR "Failed to enabled required OpenSL backend")
706 # Optionally enable the Wave Writer backend
709 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/wave.c)
710 SET(BACKENDS "${BACKENDS} WaveFile,")
713 # This is always available
714 SET(BACKENDS "${BACKENDS} Null")
717 # Might be able to use earlier versions, but these definitely work
718 PKG_CHECK_MODULES(FFMPEG libavcodec>=52.123.0 libavformat>=52.111.0 libavutil>=51.9.1)
721 IF(LIBTYPE STREQUAL "STATIC")
722 ADD_DEFINITIONS(-DAL_LIBTYPE_STATIC)
723 SET(PKG_CONFIG_CFLAGS -DAL_LIBTYPE_STATIC ${PKG_CONFIG_CFLAGS})
726 # Needed for openal.pc.in
727 SET(prefix ${CMAKE_INSTALL_PREFIX})
728 SET(exec_prefix "\${prefix}")
729 SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
730 SET(bindir "\${exec_prefix}/bin")
731 SET(includedir "\${prefix}/include")
732 SET(PACKAGE_VERSION "${LIB_VERSION}")
736 "${OpenAL_SOURCE_DIR}/config.h.in"
737 "${OpenAL_BINARY_DIR}/config.h")
739 "${OpenAL_SOURCE_DIR}/openal.pc.in"
740 "${OpenAL_BINARY_DIR}/openal.pc"
744 ADD_LIBRARY(${LIBNAME} ${LIBTYPE} ${OPENAL_OBJS} ${ALC_OBJS})
745 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES DEFINE_SYMBOL AL_BUILD_LIBRARY
746 COMPILE_FLAGS -DAL_ALEXT_PROTOTYPES
747 VERSION ${LIB_VERSION}.0
748 SOVERSION ${LIB_MAJOR_VERSION})
749 IF(WIN32 AND NOT LIBTYPE STREQUAL "STATIC")
750 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES PREFIX "")
753 TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS})
755 # Add an install target here
756 INSTALL(TARGETS ${LIBNAME}
757 RUNTIME DESTINATION bin
758 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
759 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
761 INSTALL(FILES include/AL/al.h
765 include/AL/efx-creative.h
766 include/AL/efx-presets.h
767 DESTINATION include/AL
769 INSTALL(FILES "${OpenAL_BINARY_DIR}/openal.pc"
770 DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
774 MESSAGE(STATUS "Building OpenAL with support for the following backends:")
775 MESSAGE(STATUS " ${BACKENDS}")
777 MESSAGE(STATUS "Building with support for CPU extensions:")
778 MESSAGE(STATUS " ${CPU_EXTS}")
783 MESSAGE(STATUS "WARNING: Building the Windows version without DirectSound output")
784 MESSAGE(STATUS " This is probably NOT what you want!")
789 # Install alsoft.conf configuration file
791 INSTALL(FILES alsoftrc.sample
792 DESTINATION /etc/openal
795 MESSAGE(STATUS "Installing sample alsoft.conf")
800 ADD_EXECUTABLE(openal-info utils/openal-info.c)
801 TARGET_LINK_LIBRARIES(openal-info ${LIBNAME})
803 ADD_EXECUTABLE(makehrtf utils/makehrtf.c)
805 TARGET_LINK_LIBRARIES(makehrtf m)
808 INSTALL(TARGETS openal-info makehrtf
809 RUNTIME DESTINATION bin
810 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
811 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
813 MESSAGE(STATUS "Building utility programs")
819 ADD_EXECUTABLE(alstream examples/alhelpers.c examples/alffmpeg.c examples/alstream.c)
820 TARGET_LINK_LIBRARIES(alstream ${FFMPEG_LIBRARIES} ${LIBNAME})
821 SET_TARGET_PROPERTIES(alstream PROPERTIES COMPILE_FLAGS "${FFMPEG_CFLAGS}")
822 INSTALL(TARGETS alstream
823 RUNTIME DESTINATION bin
824 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
825 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
828 MESSAGE(STATUS "Building ffmpeg example programs")