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(ALSA "Check for ALSA backend" ON)
30 OPTION(OSS "Check for OSS backend" ON)
31 OPTION(SOLARIS "Check for Solaris backend" ON)
32 OPTION(SNDIO "Check for SndIO backend" ON)
33 OPTION(MMDEVAPI "Check for MMDevApi" ON)
34 OPTION(DSOUND "Check for DirectSound backend" ON)
35 OPTION(WINMM "Check for Windows Multimedia backend" ON)
36 OPTION(PORTAUDIO "Check for PortAudio backend" ON)
37 OPTION(PULSEAUDIO "Check for PulseAudio backend" ON)
38 OPTION(COREAUDIO "Check for CoreAudio backend" ON)
39 OPTION(OPENSL "Check for OpenSL backend" ON)
40 OPTION(WAVE "Enable Wave Writer backend" ON)
42 OPTION(REQUIRE_ALSA "Require ALSA backend" OFF)
43 OPTION(REQUIRE_OSS "Require OSS backend" OFF)
44 OPTION(REQUIRE_SOLARIS "Require Solaris backend" OFF)
45 OPTION(REQUIRE_SNDIO "Require SndIO backend" OFF)
46 OPTION(REQUIRE_MMDEVAPI "Require MMDevApi" OFF)
47 OPTION(REQUIRE_DSOUND "Require DirectSound backend" OFF)
48 OPTION(REQUIRE_WINMM "Require Windows Multimedia backend" OFF)
49 OPTION(REQUIRE_PORTAUDIO "Require PortAudio backend" OFF)
50 OPTION(REQUIRE_PULSEAUDIO "Require PulseAudio backend" OFF)
51 OPTION(REQUIRE_COREAUDIO "Require CoreAudio backend" OFF)
52 OPTION(REQUIRE_OPENSL "Require OpenSL backend" OFF)
54 OPTION(DLOPEN "Check for the dlopen API for loading optional libs" ON)
56 OPTION(WERROR "Treat compile warnings as errors" OFF)
58 OPTION(UTILS "Build and install utility programs" ON)
60 OPTION(EXAMPLES "Build and install example programs" ON)
62 OPTION(ALSOFT_CONFIG "Install alsoft.conf configuration file" OFF)
67 ADD_DEFINITIONS("-D_WIN32 -D_WIN32_WINNT=0x0501")
76 SET(LIB_MAJOR_VERSION "1")
77 SET(LIB_MINOR_VERSION "14")
78 SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}")
83 CHECK_TYPE_SIZE("long" SIZEOF_LONG)
84 CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
87 CHECK_C_SOURCE_COMPILES("int *restrict foo;
88 int main() {return 0;}" HAVE_RESTRICT)
89 CHECK_C_SOURCE_COMPILES("int *__restrict foo;
90 int main() {return 0;}" HAVE___RESTRICT)
93 # Add definitions, compiler switches, etc.
94 INCLUDE_DIRECTORIES(OpenAL32/Include include "${OpenAL_BINARY_DIR}")
96 IF(NOT CMAKE_BUILD_TYPE)
97 SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
98 "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
101 IF(NOT CMAKE_DEBUG_POSTFIX)
102 SET(CMAKE_DEBUG_POSTFIX "" CACHE STRING
103 "Library postfix for debug builds. Normally left blank."
109 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_DEBUG")
110 SET(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} -DNDEBUG")
111 SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG")
112 SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
113 ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
114 ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
117 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "$ENV{DXSDK_DIR}")
119 STRING(REGEX REPLACE "\\\\" "/" DXSDK_DIR "${DXSDK_DIR}")
122 MESSAGE(STATUS "Using DirectX SDK directory: ${DXSDK_DIR}")
123 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${DXSDK_DIR}/Include")
124 INCLUDE_DIRECTORIES("${DXSDK_DIR}/Include")
125 LINK_DIRECTORIES("${DXSDK_DIR}/Lib")
128 OPTION(FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF)
129 IF(FORCE_STATIC_VCRT)
131 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
132 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
133 IF(${flag_var} MATCHES "/MD")
134 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
139 ADD_DEFINITIONS(-Winline -Wall)
140 CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA)
142 ADD_DEFINITIONS(-Wextra)
146 ADD_DEFINITIONS(-Werror)
149 SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-g -O2 -D_DEBUG" CACHE STRING
150 "Flags used by the compiler during Release with Debug Info builds."
152 SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG" CACHE STRING
153 "Flags used by the compiler during release minsize builds."
155 SET(CMAKE_C_FLAGS_RELEASE "-O2 -fomit-frame-pointer -DNDEBUG" CACHE STRING
156 "Flags used by the compiler during release builds"
158 SET(CMAKE_C_FLAGS_DEBUG "-g3 -D_DEBUG" CACHE STRING
159 "Flags used by the compiler during debug builds."
162 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor));
163 int main() {return 0;}" HAVE_GCC_DESTRUCTOR)
166 # Set visibility/export options if available
168 SET(EXPORT_DECL "__declspec(dllexport)")
170 OPTION(WINE "Enable use of Wine headers when compiling" OFF)
172 FIND_PATH(WINE_INCLUDE_DIR library.h
175 /usr/local/include/wine
176 CMAKE_FIND_ROOT_PATH_BOTH)
178 MESSAGE(STATUS "Found Wine header files - ${WINE_INCLUDE_DIR}" )
179 INCLUDE_DIRECTORIES("${WINE_INCLUDE_DIR}/windows")
180 SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} "${WINE_INCLUDE_DIR}/windows")
182 MESSAGE(STATUS "Could not find Wine header files" )
186 SET(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
187 # Yes GCC, really don't accept visibility modes you don't support
188 SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Wattributes -Werror")
190 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"protected\")));
191 int main() {return 0;}" HAVE_GCC_PROTECTED_VISIBILITY)
192 IF(HAVE_GCC_PROTECTED_VISIBILITY)
193 SET(EXPORT_DECL "__attribute__((visibility(\"protected\")))")
195 CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\")));
196 int main() {return 0;}" HAVE_GCC_DEFAULT_VISIBILITY)
197 IF(HAVE_GCC_DEFAULT_VISIBILITY)
198 SET(EXPORT_DECL "__attribute__((visibility(\"default\")))")
202 IF(HAVE_GCC_PROTECTED_VISIBILITY OR HAVE_GCC_DEFAULT_VISIBILITY)
203 CHECK_C_COMPILER_FLAG(-fvisibility=internal HAVE_VISIBILITY_INTERNAL_SWITCH)
204 IF(HAVE_VISIBILITY_INTERNAL_SWITCH)
205 ADD_DEFINITIONS(-fvisibility=internal)
207 CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN_SWITCH)
208 IF(HAVE_VISIBILITY_HIDDEN_SWITCH)
209 ADD_DEFINITIONS(-fvisibility=hidden)
214 SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
217 CHECK_C_SOURCE_COMPILES("int foo(const char *str, ...) __attribute__((format(printf, 1, 2)));
218 int main() {return 0;}" HAVE_GCC_FORMAT)
220 CHECK_INCLUDE_FILE(fenv.h HAVE_FENV_H)
221 CHECK_INCLUDE_FILE(fpu_control.h HAVE_FPU_CONTROL_H)
222 CHECK_INCLUDE_FILE(float.h HAVE_FLOAT_H)
223 CHECK_INCLUDE_FILE(ieeefp.h HAVE_IEEEFP_H)
224 CHECK_INCLUDE_FILE(guiddef.h HAVE_GUIDDEF_H)
225 IF(NOT HAVE_GUIDDEF_H)
226 CHECK_INCLUDE_FILE(initguid.h HAVE_INITGUID_H)
228 CHECK_INCLUDE_FILE(xmmintrin.h HAVE_XMMINTRIN_H)
229 CHECK_INCLUDE_FILE(arm_neon.h HAVE_ARM_NEON_H)
230 CHECK_INCLUDE_FILE(cpuid.h HAVE_CPUID_H)
232 # Some systems need libm for some of the following math functions to work
233 CHECK_LIBRARY_EXISTS(m pow "" HAVE_LIBM)
235 SET(EXTRA_LIBS m ${EXTRA_LIBS})
236 SET(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} m)
240 CHECK_SYMBOL_EXISTS(powf math.h HAVE_POWF)
241 CHECK_SYMBOL_EXISTS(sqrtf math.h HAVE_SQRTF)
242 CHECK_SYMBOL_EXISTS(cosf math.h HAVE_COSF)
243 CHECK_SYMBOL_EXISTS(sinf math.h HAVE_SINF)
244 CHECK_SYMBOL_EXISTS(acosf math.h HAVE_ACOSF)
245 CHECK_SYMBOL_EXISTS(asinf math.h HAVE_ASINF)
246 CHECK_SYMBOL_EXISTS(atanf math.h HAVE_ATANF)
247 CHECK_SYMBOL_EXISTS(atan2f math.h HAVE_ATAN2F)
248 CHECK_SYMBOL_EXISTS(fabsf math.h HAVE_FABSF)
249 CHECK_SYMBOL_EXISTS(log10f math.h HAVE_LOG10F)
250 CHECK_SYMBOL_EXISTS(floorf math.h HAVE_FLOORF)
253 CHECK_SYMBOL_EXISTS(fesetround fenv.h HAVE_FESETROUND)
256 CHECK_FUNCTION_EXISTS(strtof HAVE_STRTOF)
257 CHECK_FUNCTION_EXISTS(_controlfp HAVE__CONTROLFP)
259 CHECK_FUNCTION_EXISTS(stat HAVE_STAT)
260 CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
261 IF(NOT HAVE_STRCASECMP)
262 CHECK_FUNCTION_EXISTS(_stricmp HAVE__STRICMP)
263 IF(NOT HAVE__STRICMP)
264 MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!")
267 ADD_DEFINITIONS(-Dstrcasecmp=_stricmp)
270 CHECK_FUNCTION_EXISTS(strncasecmp HAVE_STRNCASECMP)
271 IF(NOT HAVE_STRNCASECMP)
272 CHECK_FUNCTION_EXISTS(_strnicmp HAVE__STRNICMP)
273 IF(NOT HAVE__STRNICMP)
274 MESSAGE(FATAL_ERROR "No case-insensitive size-limitted compare function found, please report!")
277 ADD_DEFINITIONS(-Dstrncasecmp=_strnicmp)
280 CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
281 IF(NOT HAVE_SNPRINTF)
282 CHECK_FUNCTION_EXISTS(_snprintf HAVE__SNPRINTF)
283 IF(NOT HAVE__SNPRINTF)
284 MESSAGE(FATAL_ERROR "No snprintf function found, please report!")
287 ADD_DEFINITIONS(-Dsnprintf=_snprintf)
290 CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
291 IF(NOT HAVE_VSNPRINTF)
292 CHECK_FUNCTION_EXISTS(_vsnprintf HAVE__VSNPRINTF)
293 IF(NOT HAVE__VSNPRINTF)
294 MESSAGE(FATAL_ERROR "No vsnprintf function found, please report!")
297 ADD_DEFINITIONS(-Dvsnprintf=_vsnprintf)
300 CHECK_SYMBOL_EXISTS(isfinite math.h HAVE_ISFINITE)
301 IF(NOT HAVE_ISFINITE)
302 CHECK_FUNCTION_EXISTS(finite HAVE_FINITE)
304 CHECK_FUNCTION_EXISTS(_finite HAVE__FINITE)
306 MESSAGE(FATAL_ERROR "No isfinite function found, please report!")
308 ADD_DEFINITIONS(-Disfinite=_finite)
310 ADD_DEFINITIONS(-Disfinite=finite)
314 CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN)
316 CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN)
318 MESSAGE(FATAL_ERROR "No isnan function found, please report!")
321 ADD_DEFINITIONS(-Disnan=_isnan)
325 # Check for the dlopen API (for dynamicly loading backend libs)
327 CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
329 CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
331 SET(EXTRA_LIBS dl ${EXTRA_LIBS})
336 # Check if we have Windows headers
337 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H -D_WIN32_WINNT=0x0501)
338 IF(NOT HAVE_WINDOWS_H)
339 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
340 IF(NOT HAVE_GETTIMEOFDAY)
341 MESSAGE(FATAL_ERROR "No timing function found!")
344 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
345 IF(NOT HAVE_NANOSLEEP)
346 MESSAGE(FATAL_ERROR "No sleep function found!")
349 CHECK_C_COMPILER_FLAG(-pthread HAVE_PTHREAD)
351 ADD_DEFINITIONS(-pthread)
352 SET(EXTRA_LIBS ${EXTRA_LIBS} -pthread)
355 # We need pthreads outside of Windows
356 CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
357 IF(NOT HAVE_PTHREAD_H)
358 MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
360 # Some systems need pthread_np.h to get recursive mutexes
361 CHECK_INCLUDE_FILES("pthread.h;pthread_np.h" HAVE_PTHREAD_NP_H)
363 # _GNU_SOURCE is needed on some systems for extra attributes
364 ADD_DEFINITIONS(-D_GNU_SOURCE=1)
365 CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
367 SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
370 CHECK_LIBRARY_EXISTS(pthread pthread_setschedparam "" HAVE_PTHREAD_SETSCHEDPARAM)
372 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_LIBRT)
374 SET(EXTRA_LIBS rt ${EXTRA_LIBS})
378 # Check for a 64-bit type
379 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
380 IF(NOT HAVE_STDINT_H)
382 CHECK_C_SOURCE_COMPILES("\#define _WIN32_WINNT 0x0501
383 \#include <windows.h>
385 int main() {return 0;}" HAVE___INT64)
388 IF(NOT SIZEOF_LONG MATCHES "8")
389 IF(NOT SIZEOF_LONG_LONG MATCHES "8")
390 MESSAGE(FATAL_ERROR "No 64-bit types found, please report!")
396 # Windows needs winmm for timeGetTime, even if the backend is disabled
397 CHECK_SHARED_FUNCTION_EXISTS(timeGetTime "windows.h;mmsystem.h" winmm "" HAVE_LIBWINMM)
399 SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
400 SET(PKG_CONFIG_LIBS ${PKG_CONFIG_LIBS} -lwinmm)
404 SET(OPENAL_OBJS OpenAL32/alAuxEffectSlot.c
408 OpenAL32/alExtension.c
410 OpenAL32/alListener.c
415 SET(ALC_OBJS Alc/ALc.c
429 # Default backends, always available
430 Alc/backends/loopback.c
442 SET(HAVE_PORTAUDIO 0)
443 SET(HAVE_PULSEAUDIO 0)
444 SET(HAVE_COREAUDIO 0)
450 CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
451 IF(HAVE_ALSA_ASOUNDLIB_H)
452 CHECK_SHARED_FUNCTION_EXISTS(snd_pcm_open "alsa/asoundlib.h" asound "" HAVE_LIBASOUND)
453 IF(HAVE_LIBASOUND OR HAVE_DLFCN_H OR WIN32)
455 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/alsa.c)
456 IF(HAVE_DLFCN_H OR WIN32)
457 SET(BACKENDS "${BACKENDS} ALSA,")
459 SET(BACKENDS "${BACKENDS} ALSA \(linked\),")
460 SET(EXTRA_LIBS asound ${EXTRA_LIBS})
465 IF(REQUIRE_ALSA AND NOT HAVE_ALSA)
466 MESSAGE(FATAL_ERROR "Failed to enabled required ALSA backend")
471 CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
472 IF(HAVE_SYS_SOUNDCARD_H)
474 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/oss.c)
475 SET(BACKENDS "${BACKENDS} OSS,")
478 IF(REQUIRE_OSS AND NOT HAVE_OSS)
479 MESSAGE(FATAL_ERROR "Failed to enabled required OSS backend")
482 # Check Solaris backend
484 CHECK_INCLUDE_FILE(sys/audioio.h HAVE_SYS_AUDIOIO_H)
485 IF(HAVE_SYS_AUDIOIO_H)
487 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/solaris.c)
488 SET(BACKENDS "${BACKENDS} Solaris,")
491 IF(REQUIRE_SOLARIS AND NOT HAVE_SOLARIS)
492 MESSAGE(FATAL_ERROR "Failed to enabled required Solaris backend")
495 # Check SndIO backend
497 CHECK_INCLUDE_FILE(sndio.h HAVE_SNDIO_H)
499 CHECK_SHARED_FUNCTION_EXISTS(sio_open "sndio.h" sndio "" HAVE_LIBSNDIO)
500 IF(HAVE_LIBSNDIO OR HAVE_DLFCN_H OR WIN32)
502 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/sndio.c)
503 IF(HAVE_DLFCN_H OR WIN32)
504 SET(BACKENDS "${BACKENDS} SndIO,")
506 SET(BACKENDS "${BACKENDS} SndIO \(linked\),")
507 SET(EXTRA_LIBS sndio ${EXTRA_LIBS})
512 IF(REQUIRE_SNDIO AND NOT HAVE_SNDIO)
513 MESSAGE(FATAL_ERROR "Failed to enabled required SndIO backend")
516 # Check for MMDevApi backend
519 CHECK_INCLUDE_FILE(mmdeviceapi.h HAVE_MMDEVICEAPI_H)
520 IF(HAVE_MMDEVICEAPI_H)
522 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/mmdevapi.c)
524 SET(BACKENDS "${BACKENDS} MMDevApi,")
528 IF(REQUIRE_MMDEVAPI AND NOT HAVE_MMDEVAPI)
529 MESSAGE(FATAL_ERROR "Failed to enabled required MMDevApi backend")
532 # Check DSound/MMSystem backend
534 CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H)
536 CHECK_SHARED_FUNCTION_EXISTS(DirectSoundCreate "dsound.h" dsound "" HAVE_LIBDSOUND)
537 IF(HAVE_LIBDSOUND OR HAVE_DLFCN_H OR WIN32)
539 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/dsound.c)
541 IF(HAVE_DLFCN_H OR WIN32)
542 SET(BACKENDS "${BACKENDS} DirectSound,")
544 SET(BACKENDS "${BACKENDS} DirectSound \(linked\),")
545 SET(EXTRA_LIBS dsound ${EXTRA_LIBS})
550 IF(REQUIRE_DSOUND AND NOT HAVE_DSOUND)
551 MESSAGE(FATAL_ERROR "Failed to enabled required DSound backend")
556 CHECK_INCLUDE_FILES("windows.h;mmsystem.h" HAVE_MMSYSTEM_H -D_WIN32_WINNT=0x0501)
557 IF(HAVE_MMSYSTEM_H AND HAVE_LIBWINMM)
559 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/winmm.c)
560 SET(BACKENDS "${BACKENDS} WinMM,")
564 IF(REQUIRE_WINMM AND NOT HAVE_WINMM)
565 MESSAGE(FATAL_ERROR "Failed to enabled required WinMM backend")
568 # Check PortAudio backend
570 CHECK_INCLUDE_FILE(portaudio.h HAVE_PORTAUDIO_H)
572 CHECK_SHARED_FUNCTION_EXISTS(Pa_Initialize "portaudio.h" portaudio "" HAVE_LIBPORTAUDIO)
573 IF(HAVE_LIBPORTAUDIO OR HAVE_DLFCN_H OR WIN32)
574 SET(HAVE_PORTAUDIO 1)
575 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/portaudio.c)
576 IF(HAVE_DLFCN_H OR WIN32)
577 SET(BACKENDS "${BACKENDS} PortAudio,")
579 SET(BACKENDS "${BACKENDS} PortAudio \(linked\),")
580 SET(EXTRA_LIBS portaudio ${EXTRA_LIBS})
585 IF(REQUIRE_PORTAUDIO AND NOT HAVE_PORTAUDIO)
586 MESSAGE(FATAL_ERROR "Failed to enabled required PortAudio backend")
589 # Check PulseAudio backend
591 CHECK_INCLUDE_FILE(pulse/pulseaudio.h HAVE_PULSE_PULSEAUDIO_H)
592 IF(HAVE_PULSE_PULSEAUDIO_H)
593 CHECK_SHARED_FUNCTION_EXISTS(pa_context_new "pulse/pulseaudio.h" pulse "" HAVE_LIBPULSE)
594 IF(HAVE_LIBPULSE OR HAVE_DLFCN_H OR WIN32)
595 SET(HAVE_PULSEAUDIO 1)
596 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/pulseaudio.c)
597 IF(HAVE_DLFCN_H OR WIN32)
598 SET(BACKENDS "${BACKENDS} PulseAudio,")
600 SET(BACKENDS "${BACKENDS} PulseAudio \(linked\),")
601 SET(EXTRA_LIBS pulse ${EXTRA_LIBS})
606 IF(REQUIRE_PULSEAUDIO AND NOT HAVE_PULSEAUDIO)
607 MESSAGE(FATAL_ERROR "Failed to enabled required PulseAudio backend")
610 # Check CoreAudio backend
612 CHECK_INCLUDE_FILE(/System/Library/Frameworks/CoreAudio.framework/Headers/CoreAudio.h HAVE_COREAUDIO_FRAMEWORK)
613 IF(HAVE_COREAUDIO_FRAMEWORK)
614 SET(HAVE_COREAUDIO 1)
615 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/coreaudio.c)
616 SET(BACKENDS "${BACKENDS} CoreAudio,")
617 SET(EXTRA_LIBS /System/Library/Frameworks/CoreAudio.framework ${EXTRA_LIBS})
618 SET(EXTRA_LIBS /System/Library/Frameworks/AudioUnit.framework ${EXTRA_LIBS})
619 SET(EXTRA_LIBS /System/Library/Frameworks/ApplicationServices.framework ${EXTRA_LIBS})
621 # Some versions of OSX may need the AudioToolbox framework. Add it if
623 FIND_LIBRARY(AUDIOTOOLBOX_LIBRARY
625 PATHS ~/Library/Frameworks
627 /System/Library/Frameworks
629 IF(AUDIOTOOLBOX_LIBRARY)
630 SET(EXTRA_LIBS ${AUDIOTOOLBOX_LIBRARY} ${EXTRA_LIBS})
634 IF(REQUIRE_COREAUDIO AND NOT HAVE_COREAUDIO)
635 MESSAGE(FATAL_ERROR "Failed to enabled required CoreAudio backend")
638 # Check for OpenSL (Android) backend
640 CHECK_INCLUDE_FILES("SLES/OpenSLES.h;SLES/OpenSLES_Android.h" HAVE_SLES_OPENSLES_ANDROID_H)
641 IF(HAVE_SLES_OPENSLES_ANDROID_H)
642 CHECK_SHARED_FUNCTION_EXISTS(slCreateEngine "SLES/OpenSLES.h" OpenSLES "" HAVE_LIBOPENSLES)
645 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/opensl.c)
646 SET(BACKENDS "${BACKENDS} OpenSL,")
647 SET(EXTRA_LIBS OpenSLES ${EXTRA_LIBS})
651 IF(REQUIRE_OPENSL AND NOT HAVE_OPENSL)
652 MESSAGE(FATAL_ERROR "Failed to enabled required OpenSL backend")
655 # Optionally enable the Wave Writer backend
658 SET(ALC_OBJS ${ALC_OBJS} Alc/backends/wave.c)
659 SET(BACKENDS "${BACKENDS} WaveFile,")
662 # This is always available
663 SET(BACKENDS "${BACKENDS} Null")
666 # Might be able to use earlier versions, but these definitely work
667 PKG_CHECK_MODULES(FFMPEG libavcodec>=52.123.0 libavformat>=52.111.0 libavutil>=51.9.1)
670 IF(LIBTYPE STREQUAL "STATIC")
671 ADD_DEFINITIONS(-DAL_LIBTYPE_STATIC)
672 SET(PKG_CONFIG_CFLAGS -DAL_LIBTYPE_STATIC ${PKG_CONFIG_CFLAGS})
675 # Needed for openal.pc.in
676 SET(prefix ${CMAKE_INSTALL_PREFIX})
677 SET(exec_prefix "\${prefix}")
678 SET(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
679 SET(bindir "\${exec_prefix}/bin")
680 SET(includedir "\${prefix}/include")
681 SET(PACKAGE_VERSION "${LIB_VERSION}")
685 "${OpenAL_SOURCE_DIR}/config.h.in"
686 "${OpenAL_BINARY_DIR}/config.h")
688 "${OpenAL_SOURCE_DIR}/openal.pc.in"
689 "${OpenAL_BINARY_DIR}/openal.pc"
693 ADD_LIBRARY(${LIBNAME} ${LIBTYPE} ${OPENAL_OBJS} ${ALC_OBJS})
694 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES DEFINE_SYMBOL AL_BUILD_LIBRARY
695 COMPILE_FLAGS -DAL_ALEXT_PROTOTYPES
696 VERSION ${LIB_VERSION}.0
697 SOVERSION ${LIB_MAJOR_VERSION})
698 IF(WIN32 AND NOT LIBTYPE STREQUAL "STATIC")
699 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES PREFIX "")
702 TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS})
704 # Add an install target here
705 INSTALL(TARGETS ${LIBNAME}
706 RUNTIME DESTINATION bin
707 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
708 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
710 INSTALL(FILES include/AL/al.h
714 include/AL/efx-creative.h
715 include/AL/efx-presets.h
716 DESTINATION include/AL
718 INSTALL(FILES "${OpenAL_BINARY_DIR}/openal.pc"
719 DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
723 MESSAGE(STATUS "Building OpenAL with support for the following backends:")
724 MESSAGE(STATUS " ${BACKENDS}")
729 MESSAGE(STATUS "WARNING: Building the Windows version without DirectSound output")
730 MESSAGE(STATUS " This is probably NOT what you want!")
735 # Install alsoft.conf configuration file
737 INSTALL(FILES alsoftrc.sample
738 DESTINATION /etc/openal
741 MESSAGE(STATUS "Installing sample alsoft.conf")
746 ADD_EXECUTABLE(openal-info utils/openal-info.c)
747 TARGET_LINK_LIBRARIES(openal-info ${LIBNAME})
749 ADD_EXECUTABLE(makehrtf utils/makehrtf.c)
751 TARGET_LINK_LIBRARIES(makehrtf m)
754 INSTALL(TARGETS openal-info makehrtf
755 RUNTIME DESTINATION bin
756 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
757 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
759 MESSAGE(STATUS "Building utility programs")
765 ADD_EXECUTABLE(alstream examples/alhelpers.c examples/alffmpeg.c examples/alstream.c)
766 TARGET_LINK_LIBRARIES(alstream ${FFMPEG_LIBRARIES} ${LIBNAME})
767 SET_TARGET_PROPERTIES(alstream PROPERTIES COMPILE_FLAGS "${FFMPEG_CFLAGS}")
768 INSTALL(TARGETS alstream
769 RUNTIME DESTINATION bin
770 LIBRARY DESTINATION "lib${LIB_SUFFIX}"
771 ARCHIVE DESTINATION "lib${LIB_SUFFIX}"
774 MESSAGE(STATUS "Building ffmpeg example programs")