diff options
author | Chris Robinson <[email protected]> | 2007-11-13 18:02:18 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2007-11-13 18:02:18 -0800 |
commit | ae5f4e9a742b07e004b330c04a72fac4457c9b58 (patch) | |
tree | d1d5c9fadd918d9346fb871033f60e8c91600a63 /CMakeLists.txt |
Initial import
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..a414c493 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,256 @@ +# CMake build file list for OpenAL + +INCLUDE(CheckLibraryExists) +INCLUDE(CheckIncludeFile) +INCLUDE(CheckCCompilerFlag) +INCLUDE(CheckCSourceCompiles) +INCLUDE(CheckTypeSize) + + +PROJECT(OpenAL) + + +SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE) + + +OPTION(ALSA "ALSA backend" ON) +OPTION(OSS "OSS backend" ON) +OPTION(DSOUND "DirectSound backend" ON) + +OPTION(DLOPEN "Use the dlopen API for loading optional libs" ON) + +OPTION(DEBUG "Build lib in debug mode" OFF) +OPTION(NODEBUG "Disable all debug info for optimizations" OFF) +OPTION(WERROR "Treat compile warnings as errors" OFF) + + +SET(LIB_MAJOR_VERSION "1") +SET(LIB_MINOR_VERSION "0") +SET(LIB_BUILD_VERSION "0") +SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_BUILD_VERSION}") + + +IF("${WIN32}") + SET(LIBNAME openal32) +ELSE() + SET(LIBNAME openal) +ENDIF() + + +CHECK_TYPE_SIZE("long" SIZEOF_LONG) +CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG) +CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT) +CHECK_TYPE_SIZE("void*" SIZEOF_VOIDP) + + +# Add definitions, compiler switches, etc. +INCLUDE_DIRECTORIES(OpenAL32/Include include "${OpenAL_BINARY_DIR}") +SET(EXTRA_LIBS m ${EXTRA_LIBS}) + +IF("${MSVC}") + # ??? +ELSE() + ADD_DEFINITIONS(-W -Wall) + IF(WERROR) + ADD_DEFINITIONS(-Werror) + ENDIF() + IF(DEBUG) + ADD_DEFINITIONS(-g3) + ELSEIF(NODEBUG) + ADD_DEFINITIONS(-O2 -funroll-loops -fomit-frame-pointer) + ELSE() + ADD_DEFINITIONS(-g -O2 -funroll-loops) + ENDIF() + + # The mixer doesn't like GCC's strict aliasing optimizations. Make sure + # it's turned off + CHECK_C_COMPILER_FLAG(-fstrict-aliasing HAVE_STRICT_ALIASING) + IF("${HAVE_STRICT_ALIASING}") + ADD_DEFINITIONS(-fno-strict-aliasing) + ENDIF() + + # Set visibility options if available + IF(NOT "${WIN32}") + CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\"))); + int main() {return 0;}" HAVE_GCC_VISIBILITY) + IF("${HAVE_GCC_VISIBILITY}") + ADD_DEFINITIONS(-fvisibility=hidden -DHAVE_GCC_VISIBILITY) + ENDIF() + ENDIF() +ENDIF() + +CHECK_LIBRARY_EXISTS(m sqrtf "" HAVE_SQRTF) +CHECK_LIBRARY_EXISTS("" strtof "" HAVE_STRTOF) + +CHECK_LIBRARY_EXISTS("" strcasecmp "" HAVE_STRCASECMP) +IF(NOT "${HAVE_STRCASECMP}") + CHECK_LIBRARY_EXISTS("" _stricmp "" HAVE__STRICMP) + IF(NOT "${HAVE__STRICMP}") + MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!") + ENDIF() + + ADD_DEFINITIONS(-Dstrcasecmp=_stricmp) +ENDIF() + +# Check for the dlopen API (for dynamicly loading backend libs) +IF(DLOPEN) + CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H) + IF("${HAVE_DLFCN_H}") + CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL) + IF("${HAVE_LIBDL}") + SET(EXTRA_LIBS dl ${EXTRA_LIBS}) + ENDIF() + ENDIF() +ENDIF() + +# Check if we have Windows headers +CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H) +IF(NOT "${HAVE_WINDOWS_H}") + # We need pthreads outside of Windows + CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H) + IF(NOT "${HAVE_PTHREAD_H}") + MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!") + ENDIF() + + # _GNU_SOURCE is needed on some systems for extra attributes, and + # _REENTRANT is needed for libc thread-safety + ADD_DEFINITIONS(-D_GNU_SOURCE=1 -D_REENTRANT) + CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD) + IF("${HAVE_LIBPTHREAD}") + SET(EXTRA_LIBS pthread ${EXTRA_LIBS}) + ENDIF() +ENDIF() + +# Check for a 64-bit type +CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H) +IF(NOT "${HAVE_STDINT_H}") + IF("${HAVE_WINDOWS_H}") + CHECK_C_SOURCE_COMPILES("\#include <windows.h> + __int64 foo; + int main() {return 0;}" HAVE___INT64) + ENDIF() + IF(NOT "${HAVE___INT64}") + IF(NOT "${SIZEOF_LONG}" MATCHES "8") + IF(NOT "${SIZEOF_LONG_LONG}" MATCHES "8") + MESSAGE(FATAL_ERROR "No 64-bit types found, please report!") + ENDIF() + ENDIF() + ENDIF() +ENDIF() + + +SET(OPENAL_OBJS OpenAL32/alBuffer.c + OpenAL32/alError.c + OpenAL32/alExtension.c + OpenAL32/alListener.c + OpenAL32/alSource.c + OpenAL32/alState.c + OpenAL32/alThunk.c + OpenAL32/OpenAL32.c +) +SET(ALU_OBJS Alu/ALu.c) +SET(ALC_OBJS Alc/ALc.c + Alc/alcConfig.c + Alc/alcThread.c +) + +SET(BACKENDS "") + +# Check ALSA backend +IF(ALSA) + CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H) + IF("${HAVE_ALSA_ASOUNDLIB_H}") + CHECK_LIBRARY_EXISTS(asound snd_pcm_open "" HAVE_LIBASOUND) + IF("${HAVE_DLFCN_H}" OR "${HAVE_LIBASOUND}") + SET(HAVE_ALSA 1) + SET(ALC_OBJS ${ALC_OBJS} Alc/alsa.c) + IF("${HAVE_DLFCN_H}") + SET(BACKENDS ${BACKENDS} ALSA) + ELSE() + SET(BACKENDS ${BACKENDS} ALSA\(linked\)) + SET(EXTRA_LIBS asound ${EXTRA_LIBS}) + ENDIF() + ENDIF() + ENDIF() +ENDIF() + +# Check OSS backend +IF(OSS) + CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H) + IF("${HAVE_SYS_SOUNDCARD_H}") + SET(HAVE_OSS 1) + SET(ALC_OBJS ${ALC_OBJS} Alc/oss.c) + SET(BACKENDS ${BACKENDS} OSS) + ENDIF() +ENDIF() + +# Check DSound/MMSystem backend +IF(DSOUND) + IF("${HAVE_WINDOWS_H}") + SET(CMAKE_REQUIRED_LIBRARIES ole32) + CHECK_C_SOURCE_COMPILES("int main() {return 0;}" HAVE_LIBOLE32) + SET(CMAKE_REQUIRED_LIBRARIES "") +# CHECK_LIBRARY_EXISTS(ole32 CoInitialize "" HAVE_LIBOLE32) + IF("${HAVE_LIBOLE32}") + SET(EXTRA_LIBS ole32 ${EXTRA_LIBS}) + ENDIF() + + CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H) + IF("${HAVE_DSOUND_H}") + SET(HAVE_DSOUND 1) + SET(ALC_OBJS ${ALC_OBJS} Alc/dsound.c) + SET(BACKENDS ${BACKENDS} DirectSound) + + CHECK_LIBRARY_EXISTS(dxguid IID_IDirectSound "" HAVE_LIBDXGUID) + IF("${HAVE_LIBDXGUID}") + SET(EXTRA_LIBS dxguid ${EXTRA_LIBS}) + ENDIF() + ENDIF() + + CHECK_C_SOURCE_COMPILES("\#include <windows.h> + \#include <mmsystem.h> + int main() {return 0;}" HAVE_MMSYSTEM_H) + IF("${HAVE_MMSYSTEM_H}") + SET(HAVE_WINMM 1) + SET(ALC_OBJS ${ALC_OBJS} Alc/winmm.c) + SET(BACKENDS ${BACKENDS} WinMM) + + SET(CMAKE_REQUIRED_LIBRARIES winmm) + CHECK_C_SOURCE_COMPILES("int main() {return 0;}" HAVE_LIBWINMM) + SET(CMAKE_REQUIRED_LIBRARIES "") +# CHECK_LIBRARY_EXISTS(winmm waveInOpen "" HAVE_LIBWINMM) + IF("${HAVE_LIBWINMM}") + SET(EXTRA_LIBS winmm ${EXTRA_LIBS}) + ENDIF() + ENDIF() + ENDIF() +ENDIF() + +# End configuration +CONFIGURE_FILE( + "${OpenAL_SOURCE_DIR}/config.h.in" + "${OpenAL_BINARY_DIR}/config.h") + +ADD_DEFINITIONS(-DAL_BUILD_LIBRARY) + +# Build a shared library +ADD_LIBRARY(${LIBNAME} SHARED ${OPENAL_OBJS} ${ALU_OBJS} ${ALC_OBJS}) +SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES VERSION ${LIB_VERSION} SOVERSION ${LIB_MAJOR_VERSION}) + +TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS}) + +# Add an install target here +INSTALL(TARGETS ${LIBNAME} + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) +INSTALL(FILES include/AL/al.h + include/AL/alc.h + DESTINATION include/AL +) + +MESSAGE(STATUS "") +MESSAGE(STATUS "Building OpenAL with support for the following backends:") +MESSAGE(STATUS " ${BACKENDS}") +MESSAGE(STATUS "") |