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")
86 SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_REVISION}")
93 CHECK_TYPE_SIZE("long" SIZEOF_LONG)
94 CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
97 CHECK_C_SOURCE_COMPILES("int *restrict foo;
98 int main() {return 0;}" HAVE_RESTRICT)
100 SET(RESTRICT_DECL "restrict")
102 CHECK_C_SOURCE_COMPILES("int *__restrict foo;
103 int main() {return 0;}" HAVE___RESTRICT)
105 SET(RESTRICT_DECL "__restrict")
110 # Add definitions, compiler switches, etc.
111 INCLUDE_DIRECTORIES(OpenAL32/Include include "${OpenAL_BINARY_DIR}")
113 IF(NOT CMAKE_BUILD_TYPE)
114 SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
115 "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
118 IF(NOT CMAKE_DEBUG_POSTFIX)
119 SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING
120 "Library postfix for debug builds. Normally left blank."
126 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_DEBUG")
127 SET(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -DNDEBUG")
128 SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG")
129 SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
130 ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
131 ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
134 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "$ENV{DXSDK_DIR}")
136 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "${DXSDK_DIR}")
139 MESSAGE(STATUS "Using DirectX SDK directory: ${DXSDK_DIR}")
140 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${DXSDK_DIR}/Include")
141 INCLUDE_DIRECTORIES("${DXSDK_DIR}/Include")
142 LINK_DIRECTORIES("${DXSDK_DIR}/Lib")
145 OPTION(FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF)
146 IF(FORCE_STATIC_VCRT)
148 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
149 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
150 IF(${flag_var} MATCHES "/MD")
151 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
156 ADD_DEFINITIONS(-Winline -Wall)
157 CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA)
159 ADD_DEFINITIONS(-Wextra)
163 ADD_DEFINITIONS(-Werror)
166 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -O2 -D_DEBUG" CACHE STRING
167 "Flags used by the compiler during Release with Debug Info builds."
169 SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" CACHE STRING
170 "Flags used by the compiler during release minsize builds."
172 SET(CMAKE_C_FLAGS_RELEASE "-O2 -fomit-frame-pointer -DNDEBUG" CACHE STRING
173 "Flags used by the compiler during release builds"
175 SET(CMAKE_C_FLAGS_DEBUG "-g3 -D_DEBUG" CACHE STRING
176 "Flags used by the compiler during debug builds."
179 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor));
180 int main() {return 0;}" HAVE_GCC_DESTRUCTOR)
183 # Set visibility/export options if available
185 SET(EXPORT_DECL "__declspec(dllexport)")
186 SET(ALIGN_DECL "__declspec(align(x))")
188 OPTION(WINE "Enable use of Wine headers when compiling" OFF)
190 FIND_PATH(WINE_INCLUDE_DIR library.h
193 /usr/local/include/wine
194 CMAKE_FIND_ROOT_PATH_BOTH)
196 MESSAGE(STATUS "Found Wine header files - ${WINE_INCLUDE_DIR}" )
197 INCLUDE_DIRECTORIES("${WINE_INCLUDE_DIR}/windows")
198 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${WINE_INCLUDE_DIR}/windows")
200 MESSAGE(STATUS "Could not find Wine header files" )
204 SET(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
205 # Yes GCC, really don't accept visibility modes you don't support
206 SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Wattributes -Werror")
208 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"protected\")));
209 int main() {return 0;}" HAVE_GCC_PROTECTED_VISIBILITY)
210 IF(HAVE_GCC_PROTECTED_VISIBILITY)
211 SET(EXPORT_DECL "__attribute__((visibility(\"protected\")))")
213 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\")));
214 int main() {return 0;}" HAVE_GCC_DEFAULT_VISIBILITY)
215 IF(HAVE_GCC_DEFAULT_VISIBILITY)
216 SET(EXPORT_DECL "__attribute__((visibility(\"default\")))")
220 IF(HAVE_GCC_PROTECTED_VISIBILITY OR HAVE_GCC_DEFAULT_VISIBILITY)
221 CHECK_C_COMPILER_FLAG(-fvisibility=internal HAVE_VISIBILITY_INTERNAL_SWITCH)
222 IF(HAVE_VISIBILITY_INTERNAL_SWITCH)
223 ADD_DEFINITIONS(-fvisibility=internal)
225 CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN_SWITCH)
226 IF(HAVE_VISIBILITY_HIDDEN_SWITCH)
227 ADD_DEFINITIONS(-fvisibility=hidden)
232 CHECK_C_SOURCE_COMPILES("int foo __attribute__((aligned(16)));
233 int main() {return 0;}" HAVE_ATTRIBUTE_ALIGNED)
234 IF(HAVE_ATTRIBUTE_ALIGNED)
235 SET(ALIGN_DECL "__attribute__((aligned(x)))")
238 SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
242 CHECK_C_COMPILER_FLAG(-msse HAVE_MSSE_SWITCH)
244 SET(SSE_SWITCH "-msse")
247 CHECK_C_SOURCE_COMPILES("int foo(const char *str, ...) __attribute__((format(printf, 1, 2)));
248 int main() {return 0;}" HAVE_GCC_FORMAT)
250 CHECK_INCLUDE_FILE(malloc.h HAVE_MALLOC_H)
251 CHECK_INCLUDE_FILE(cpuid.h HAVE_CPUID_H)
252 CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
253 CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
254 CHECK_INCLUDE_FILE(ieeefp.h HAVE_IEEEFP_H)
255 CHECK_INCLUDE_FILE(guiddef.h HAVE_GUIDDEF_H)
256 IF(NOT HAVE_GUIDDEF_H)
257 CHECK_INCLUDE_FILE(initguid.h HAVE_INITGUID_H)
260 # Some systems need libm for some of the following math functions to work
261 CHECK_LIBRARY_EXISTS(m pow "" HAVE_LIBM)
263 SET(EXTRA_LIBS m ${EXTRA_LIBS})
264 SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} m)
268 CHECK_SYMBOL_EXISTS(aligned_alloc stdlib.h HAVE_ALIGNED_ALLOC)
269 CHECK_SYMBOL_EXISTS(posix_memalign stdlib.h HAVE_POSIX_MEMALIGN)
270 CHECK_SYMBOL_EXISTS(_aligned_malloc malloc.h HAVE__ALIGNED_MALLOC)
271 CHECK_SYMBOL_EXISTS(lrintf math.h HAVE_LRINTF)
274 CHECK_SYMBOL_EXISTS(fesetround fenv.h HAVE_FESETROUND)
277 CHECK_SYMBOL_EXISTS(_controlfp float.h HAVE__CONTROLFP)
278 CHECK_SYMBOL_EXISTS(__control87_2 float.h HAVE___CONTROL87_2)
281 CHECK_FUNCTION_EXISTS(strtof HAVE_STRTOF)
282 CHECK_FUNCTION_EXISTS(stat HAVE_STAT)
283 CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
284 IF(NOT HAVE_STRCASECMP)
285 CHECK_FUNCTION_EXISTS(_stricmp HAVE__STRICMP)
286 IF(NOT HAVE__STRICMP)
287 MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!")
290 ADD_DEFINITIONS(-Dstrcasecmp=_stricmp)
293 CHECK_FUNCTION_EXISTS(strncasecmp HAVE_STRNCASECMP)
294 IF(NOT HAVE_STRNCASECMP)
295 CHECK_FUNCTION_EXISTS(_strnicmp HAVE__STRNICMP)
296 IF(NOT HAVE__STRNICMP)
297 MESSAGE(FATAL_ERROR "No case-insensitive size-limitted compare function found, please report!")
300 ADD_DEFINITIONS(-Dstrncasecmp=_strnicmp)
303 CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
304 IF(NOT HAVE_SNPRINTF)
305 CHECK_FUNCTION_EXISTS(_snprintf HAVE__SNPRINTF)
306 IF(NOT HAVE__SNPRINTF)
307 MESSAGE(FATAL_ERROR "No snprintf function found, please report!")
310 ADD_DEFINITIONS(-Dsnprintf=_snprintf)
313 CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
314 IF(NOT HAVE_VSNPRINTF)
315 CHECK_FUNCTION_EXISTS(_vsnprintf HAVE__VSNPRINTF)
316 IF(NOT HAVE__VSNPRINTF)
317 MESSAGE(FATAL_ERROR "No vsnprintf function found, please report!")
320 ADD_DEFINITIONS(-Dvsnprintf=_vsnprintf)
323 CHECK_SYMBOL_EXISTS(isfinite math.h HAVE_ISFINITE)
324 IF(NOT HAVE_ISFINITE)
325 CHECK_FUNCTION_EXISTS(finite HAVE_FINITE)
327 CHECK_FUNCTION_EXISTS(_finite HAVE__FINITE)
329 MESSAGE(FATAL_ERROR "No isfinite function found, please report!")
331 ADD_DEFINITIONS(-Disfinite=_finite)
333 ADD_DEFINITIONS(-Disfinite=finite)
337 CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN)
339 CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN)
341 MESSAGE(FATAL_ERROR "No isnan function found, please report!")
344 ADD_DEFINITIONS(-Disnan=_isnan)
348 # Check for the dlopen API (for dynamicly loading backend libs)
350 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
352 CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
354 SET(EXTRA_LIBS dl ${EXTRA_LIBS})
359 # Check if we have Windows headers
360 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0501)
361 IF(NOT HAVE_WINDOWS_H)
362 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
363 IF(NOT HAVE_GETTIMEOFDAY)
364 MESSAGE(FATAL_ERROR "No timing function found!")
367 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
368 IF(NOT HAVE_NANOSLEEP)
369 MESSAGE(FATAL_ERROR "No sleep function found!")
372 CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
374 ADD_DEFINITIONS(-pthread)
375 SET(EXTRA_LIBS ${EXTRA_LIBS} -pthread)
378 # We need pthreads outside of Windows
379 CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
380 IF(NOT HAVE_PTHREAD_H)
381 MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
383 # Some systems need pthread_np.h to get recursive mutexes
384 CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
386 # _GNU_SOURCE is needed on some systems for extra attributes
387 ADD_DEFINITIONS(-D_GNU_SOURCE=1)
388 CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
390 SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
393 CHECK_LIBRARY_EXISTS(pthread pthread_setschedparam "" HAVE_PTHREAD_SETSCHEDPARAM)
395 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_LIBRT)
397 SET(EXTRA_LIBS rt ${EXTRA_LIBS})
401 # Check for a 64-bit type
402 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
403 IF(NOT HAVE_STDINT_H)
405 CHECK_C_SOURCE_COMPILES("\#define _WIN32_WINNT 0x0501
406 \#include <windows.h>
408 int main() {return 0;}" HAVE___INT64)
411 IF(NOT SIZEOF_LONG MATCHES "8")
412 IF(NOT SIZEOF_LONG_LONG MATCHES "8")
413 MESSAGE(FATAL_ERROR "No 64-bit types found, please report!")
419 # Windows needs winmm for timeGetTime, even if the backend is disabled
420 CHECK_SHARED_FUNCTION_EXISTS(timeGetTime "windows.h;mmsystem.h" winmm "" HAVE_LIBWINMM)
422 SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
423 SET(PKG_CONFIG_LIBS ${PKG_CONFIG_LIBS} -lwinmm)
427 SET(OPENAL_OBJS OpenAL32/alAuxEffectSlot.c
431 OpenAL32/alExtension.c
433 OpenAL32/alListener.c
438 SET(ALC_OBJS Alc/ALc.c
456 SET(CPU_EXTS "Default")
460 # Check for SSE support
461 IF(SSE AND ALIGN_DECL)
462 CHECK_INCLUDE_FILE(xmmintrin.h HAVE_XMMINTRIN_H "${SSE_SWITCH}")
465 SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_sse.c)
467 SET_SOURCE_FILES_PROPERTIES(Alc/mixer_sse.c PROPERTIES
468 COMPILE_FLAGS "${SSE_SWITCH}")
470 SET(CPU_EXTS "${CPU_EXTS}, SSE")
473 IF(REQUIRE_SSE AND NOT HAVE_SSE)
474 MESSAGE(FATAL_ERROR "Failed to enabled required SSE CPU extensions")
477 # Check for ARM Neon support
479 CHECK_INCLUDE_FILE(arm_neon.h HAVE_ARM_NEON_H)
482 SET(ALC_OBJS ${ALC_OBJS} Alc/mixer_neon.c)
483 SET(CPU_EXTS "${CPU_EXTS}, Neon")
486 IF(REQUIRE_NEON AND NOT HAVE_NEON)
487 MESSAGE(FATAL_ERROR "Failed to enabled required ARM Neon CPU extensions")
491 SET(ALC_OBJS ${ALC_OBJS}
492 # Default backends, always available
493 Alc/backends/loopback.c
505 SET(HAVE_PORTAUDIO 0)
506 SET(HAVE_PULSEAUDIO 0)
507 SET(HAVE_COREAUDIO 0)
513 CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
514 IF(HAVE_ALSA_ASOUNDLIB_H)
515 CHECK_SHARED_FUNCTION_EXISTS(snd_pcm_open "alsa/asoundlib.h" asound "" HAVE_LIBASOUND)
516 IF(HAVE_LIBASOUND OR HAVE_DLFCN_H OR WIN32)
518 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/alsa.c)
519 IF(HAVE_DLFCN_H OR WIN32)
520 SET(BACKENDS "${BACKENDS} ALSA,")
522 SET(BACKENDS "${BACKENDS} ALSA \(linked\),")
523 SET(EXTRA_LIBS asound ${EXTRA_LIBS})
528 IF(REQUIRE_ALSA AND NOT HAVE_ALSA)
529 MESSAGE(FATAL_ERROR "Failed to enabled required ALSA backend")
534 CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
535 IF(HAVE_SYS_SOUNDCARD_H)
537 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/oss.c)
538 SET(BACKENDS "${BACKENDS} OSS,")
541 IF(REQUIRE_OSS AND NOT HAVE_OSS)
542 MESSAGE(FATAL_ERROR "Failed to enabled required OSS backend")
545 # Check Solaris backend
547 CHECK_INCLUDE_FILE(sys/audioio.h HAVE_SYS_AUDIOIO_H)
548 IF(HAVE_SYS_AUDIOIO_H)
550 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/solaris.c)
551 SET(BACKENDS "${BACKENDS} Solaris,")
554 IF(REQUIRE_SOLARIS AND NOT HAVE_SOLARIS)
555 MESSAGE(FATAL_ERROR "Failed to enabled required Solaris backend")
558 # Check SndIO backend
560 CHECK_INCLUDE_FILE(sndio.h HAVE_SNDIO_H)
562 CHECK_SHARED_FUNCTION_EXISTS(sio_open "sndio.h" sndio "" HAVE_LIBSNDIO)
565 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/sndio.c)
566 SET(BACKENDS "${BACKENDS} SndIO \(linked\),")
567 SET(EXTRA_LIBS sndio ${EXTRA_LIBS})
571 IF(REQUIRE_SNDIO AND NOT HAVE_SNDIO)
572 MESSAGE(FATAL_ERROR "Failed to enabled required SndIO backend")
575 # Check for MMDevApi backend
578 CHECK_INCLUDE_FILE(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
579 IF(HAVE_MMDEVICEAPI_H)
581 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/mmdevapi.c)
583 SET(BACKENDS "${BACKENDS} MMDevApi,")
587 IF(REQUIRE_MMDEVAPI AND NOT HAVE_MMDEVAPI)
588 MESSAGE(FATAL_ERROR "Failed to enabled required MMDevApi backend")
591 # Check DSound/MMSystem backend
593 CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H)
595 CHECK_SHARED_FUNCTION_EXISTS(DirectSoundCreate "dsound.h" dsound "" HAVE_LIBDSOUND)
596 IF(HAVE_LIBDSOUND OR HAVE_DLFCN_H OR WIN32)
598 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/dsound.c)
600 IF(HAVE_DLFCN_H OR WIN32)
601 SET(BACKENDS "${BACKENDS} DirectSound,")
603 SET(BACKENDS "${BACKENDS} DirectSound \(linked\),")
604 SET(EXTRA_LIBS dsound ${EXTRA_LIBS})
609 IF(REQUIRE_DSOUND AND NOT HAVE_DSOUND)
610 MESSAGE(FATAL_ERROR "Failed to enabled required DSound backend")
615 CHECK_INCLUDE_FILES("windows.h;mmsystem.h" HAVE_MMSYSTEM_H -D_WIN32_WINNT=0x0501)
616 IF(HAVE_MMSYSTEM_H AND HAVE_LIBWINMM)
618 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/winmm.c)
619 SET(BACKENDS "${BACKENDS} WinMM,")
623 IF(REQUIRE_WINMM AND NOT HAVE_WINMM)
624 MESSAGE(FATAL_ERROR "Failed to enabled required WinMM backend")
627 # Check PortAudio backend
629 CHECK_INCLUDE_FILE(portaudio.h HAVE_PORTAUDIO_H)
631 CHECK_SHARED_FUNCTION_EXISTS(Pa_Initialize "portaudio.h" portaudio "" HAVE_LIBPORTAUDIO)
632 IF(HAVE_LIBPORTAUDIO OR HAVE_DLFCN_H OR WIN32)
633 SET(HAVE_PORTAUDIO 1)
634 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/portaudio.c)
635 IF(HAVE_DLFCN_H OR WIN32)
636 SET(BACKENDS "${BACKENDS} PortAudio,")
638 SET(BACKENDS "${BACKENDS} PortAudio \(linked\),")
639 SET(EXTRA_LIBS portaudio ${EXTRA_LIBS})
644 IF(REQUIRE_PORTAUDIO AND NOT HAVE_PORTAUDIO)
645 MESSAGE(FATAL_ERROR "Failed to enabled required PortAudio backend")
648 # Check PulseAudio backend
650 CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSE_PULSEAUDIO_H)
651 IF(HAVE_PULSE_PULSEAUDIO_H)
652 CHECK_SHARED_FUNCTION_EXISTS(pa_context_new "pulse/pulseaudio.h" pulse "" HAVE_LIBPULSE)
653 IF(HAVE_LIBPULSE OR HAVE_DLFCN_H OR WIN32)
654 SET(HAVE_PULSEAUDIO 1)
655 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/pulseaudio.c)
656 IF(HAVE_DLFCN_H OR WIN32)
657 SET(BACKENDS "${BACKENDS} PulseAudio,")
659 SET(BACKENDS "${BACKENDS} PulseAudio \(linked\),")
660 SET(EXTRA_LIBS pulse ${EXTRA_LIBS})
665 IF(REQUIRE_PULSEAUDIO AND NOT HAVE_PULSEAUDIO)
666 MESSAGE(FATAL_ERROR "Failed to enabled required PulseAudio backend")
669 # Check CoreAudio backend
671 CHECK_INCLUDE_FILE(/System/Library/Frameworks/CoreAudio.framework/Headers/CoreAudio.h HAVE_COREAUDIO_FRAMEWORK)
672 IF(HAVE_COREAUDIO_FRAMEWORK)
673 SET(HAVE_COREAUDIO 1)
674 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/coreaudio.c)
675 SET(BACKENDS "${BACKENDS} CoreAudio,")
676 SET(EXTRA_LIBS /System/Library/Frameworks/CoreAudio.framework ${EXTRA_LIBS})
677 SET(EXTRA_LIBS /System/Library/Frameworks/AudioUnit.framework ${EXTRA_LIBS})
678 SET(EXTRA_LIBS /System/Library/Frameworks/ApplicationServices.framework ${EXTRA_LIBS})
680 # Some versions of OSX may need the AudioToolbox framework. Add it if
682 FIND_LIBRARY(AUDIOTOOLBOX_LIBRARY
684 PATHS ~/Library/Frameworks
686 /System/Library/Frameworks
688 IF(AUDIOTOOLBOX_LIBRARY)
689 SET(EXTRA_LIBS ${AUDIOTOOLBOX_LIBRARY} ${EXTRA_LIBS})
693 IF(REQUIRE_COREAUDIO AND NOT HAVE_COREAUDIO)
694 MESSAGE(FATAL_ERROR "Failed to enabled required CoreAudio backend")
697 # Check for OpenSL (Android) backend
699 CHECK_INCLUDE_FILES("SLES/OpenSLES.h;SLES/OpenSLES_Android.h" HAVE_SLES_OPENSLES_ANDROID_H)
700 IF(HAVE_SLES_OPENSLES_ANDROID_H)
701 CHECK_SHARED_FUNCTION_EXISTS(slCreateEngine "SLES/OpenSLES.h" OpenSLES "" HAVE_LIBOPENSLES)
704 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/opensl.c)
705 SET(BACKENDS "${BACKENDS} OpenSL,")
706 SET(EXTRA_LIBS OpenSLES ${EXTRA_LIBS})
710 IF(REQUIRE_OPENSL AND NOT HAVE_OPENSL)
711 MESSAGE(FATAL_ERROR "Failed to enabled required OpenSL backend")
714 # Optionally enable the Wave Writer backend
717 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/wave.c)
718 SET(BACKENDS "${BACKENDS} WaveFile,")
721 # This is always available
722 SET(BACKENDS "${BACKENDS} Null")
725 # Might be able to use earlier versions, but these definitely work
726 PKG_CHECK_MODULES(FFMPEG libavcodec>=53.61.100 libavformat>=53.32.100 libavutil>=51.35.100)
729 IF(LIBTYPE STREQUAL "STATIC")
730 ADD_DEFINITIONS(-DAL_LIBTYPE_STATIC)
731 SET(PKG_CONFIG_CFLAGS -DAL_LIBTYPE_STATIC ${PKG_CONFIG_CFLAGS})
734 # Needed for openal.pc.in
735 SET(prefix ${CMAKE_INSTALL_PREFIX})
736 SET(exec_prefix "\${prefix}")
737 SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
738 SET(bindir "\${exec_prefix}/bin")
739 SET(includedir "\${prefix}/include")
740 SET(PACKAGE_VERSION "${LIB_VERSION}")
744 "${OpenAL_SOURCE_DIR}/config.h.in"
745 "${OpenAL_BINARY_DIR}/config.h")
747 "${OpenAL_SOURCE_DIR}/openal.pc.in"
748 "${OpenAL_BINARY_DIR}/openal.pc"
752 ADD_LIBRARY(${LIBNAME} ${LIBTYPE} ${OPENAL_OBJS} ${ALC_OBJS})
753 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES DEFINE_SYMBOL AL_BUILD_LIBRARY
754 COMPILE_FLAGS -DAL_ALEXT_PROTOTYPES
755 VERSION ${LIB_VERSION}
756 SOVERSION ${LIB_MAJOR_VERSION})
757 IF(WIN32 AND NOT LIBTYPE STREQUAL "STATIC")
758 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES PREFIX "")
761 TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS})
763 # Add an install target here
764 INSTALL(TARGETS ${LIBNAME}
765 RUNTIME DESTINATION bin
766 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
767 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
769 INSTALL(FILES include/AL/al.h
773 include/AL/efx-creative.h
774 include/AL/efx-presets.h
775 DESTINATION include/AL
777 INSTALL(FILES "${OpenAL_BINARY_DIR}/openal.pc"
778 DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
782 MESSAGE(STATUS "Building OpenAL with support for the following backends:")
783 MESSAGE(STATUS " ${BACKENDS}")
785 MESSAGE(STATUS "Building with support for CPU extensions:")
786 MESSAGE(STATUS " ${CPU_EXTS}")
791 MESSAGE(STATUS "WARNING: Building the Windows version without DirectSound output")
792 MESSAGE(STATUS " This is probably NOT what you want!")
797 # Install alsoft.conf configuration file
799 INSTALL(FILES alsoftrc.sample
800 DESTINATION share/openal
802 MESSAGE(STATUS "Installing sample configuration")
807 ADD_EXECUTABLE(openal-info utils/openal-info.c)
808 TARGET_LINK_LIBRARIES(openal-info ${LIBNAME})
810 ADD_EXECUTABLE(makehrtf utils/makehrtf.c)
812 TARGET_LINK_LIBRARIES(makehrtf m)
815 INSTALL(TARGETS openal-info makehrtf
816 RUNTIME DESTINATION bin
817 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
818 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
820 MESSAGE(STATUS "Building utility programs")
826 ADD_EXECUTABLE(alstream examples/common/alhelpers.c
827 examples/common/alffmpeg.c
829 TARGET_LINK_LIBRARIES(alstream ${FFMPEG_LIBRARIES} ${LIBNAME})
830 SET_TARGET_PROPERTIES(alstream PROPERTIES COMPILE_FLAGS "${FFMPEG_CFLAGS}")
832 ADD_EXECUTABLE(alreverb examples/common/alhelpers.c
833 examples/common/alffmpeg.c
835 TARGET_LINK_LIBRARIES(alreverb ${FFMPEG_LIBRARIES} ${LIBNAME})
836 SET_TARGET_PROPERTIES(alreverb PROPERTIES COMPILE_FLAGS "${FFMPEG_CFLAGS}")
838 ADD_EXECUTABLE(allatency examples/common/alhelpers.c
839 examples/common/alffmpeg.c
840 examples/allatency.c)
841 TARGET_LINK_LIBRARIES(allatency ${FFMPEG_LIBRARIES} ${LIBNAME})
842 SET_TARGET_PROPERTIES(allatency PROPERTIES COMPILE_FLAGS "${FFMPEG_CFLAGS}")
844 INSTALL(TARGETS alstream alreverb allatency
845 RUNTIME DESTINATION bin
846 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
847 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
850 MESSAGE(STATUS "Building ffmpeg example programs")