Move ALu.c to the Alc directory
[openal-soft.git] / CMakeLists.txt
bloba414c49334157c74d2267723c3cf2962ac85bd91
1 # CMake build file list for OpenAL
3 INCLUDE(CheckLibraryExists)
4 INCLUDE(CheckIncludeFile)
5 INCLUDE(CheckCCompilerFlag)
6 INCLUDE(CheckCSourceCompiles)
7 INCLUDE(CheckTypeSize)
10 PROJECT(OpenAL)
13 SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE)
16 OPTION(ALSA    "ALSA backend"         ON)
17 OPTION(OSS     "OSS backend"          ON)
18 OPTION(DSOUND  "DirectSound backend"  ON)
20 OPTION(DLOPEN  "Use the dlopen API for loading optional libs"  ON)
22 OPTION(DEBUG    "Build lib in debug mode"                   OFF)
23 OPTION(NODEBUG  "Disable all debug info for optimizations"  OFF)
24 OPTION(WERROR   "Treat compile warnings as errors"          OFF)
27 SET(LIB_MAJOR_VERSION "1")
28 SET(LIB_MINOR_VERSION "0")
29 SET(LIB_BUILD_VERSION "0")
30 SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_BUILD_VERSION}")
33 IF("${WIN32}")
34     SET(LIBNAME openal32)
35 ELSE()
36     SET(LIBNAME openal)
37 ENDIF()
40 CHECK_TYPE_SIZE("long" SIZEOF_LONG)
41 CHECK_TYPE_SIZE("long long" SIZEOF_LONG_LONG)
42 CHECK_TYPE_SIZE("unsigned int" SIZEOF_UINT)
43 CHECK_TYPE_SIZE("void*" SIZEOF_VOIDP)
46 # Add definitions, compiler switches, etc.
47 INCLUDE_DIRECTORIES(OpenAL32/Include include "${OpenAL_BINARY_DIR}")
48 SET(EXTRA_LIBS m ${EXTRA_LIBS})
50 IF("${MSVC}")
51     # ???
52 ELSE()
53     ADD_DEFINITIONS(-W -Wall)
54     IF(WERROR)
55         ADD_DEFINITIONS(-Werror)
56     ENDIF()
57     IF(DEBUG)
58         ADD_DEFINITIONS(-g3)
59     ELSEIF(NODEBUG)
60         ADD_DEFINITIONS(-O2 -funroll-loops -fomit-frame-pointer)
61     ELSE()
62         ADD_DEFINITIONS(-g -O2 -funroll-loops)
63     ENDIF()
65     # The mixer doesn't like GCC's strict aliasing optimizations. Make sure
66     # it's turned off
67     CHECK_C_COMPILER_FLAG(-fstrict-aliasing HAVE_STRICT_ALIASING)
68     IF("${HAVE_STRICT_ALIASING}")
69         ADD_DEFINITIONS(-fno-strict-aliasing)
70     ENDIF()
72     # Set visibility options if available
73     IF(NOT "${WIN32}")
74         CHECK_C_SOURCE_COMPILES("int foo() __attribute__((visibility(\"default\")));
75                                  int main() {return 0;}" HAVE_GCC_VISIBILITY)
76         IF("${HAVE_GCC_VISIBILITY}")
77             ADD_DEFINITIONS(-fvisibility=hidden -DHAVE_GCC_VISIBILITY)
78         ENDIF()
79     ENDIF()
80 ENDIF()
82 CHECK_LIBRARY_EXISTS(m  sqrtf  "" HAVE_SQRTF)
83 CHECK_LIBRARY_EXISTS("" strtof "" HAVE_STRTOF)
85 CHECK_LIBRARY_EXISTS("" strcasecmp "" HAVE_STRCASECMP)
86 IF(NOT "${HAVE_STRCASECMP}")
87     CHECK_LIBRARY_EXISTS("" _stricmp "" HAVE__STRICMP)
88     IF(NOT "${HAVE__STRICMP}")
89         MESSAGE(FATAL_ERROR "No case-insensitive compare function found, please report!")
90     ENDIF()
92     ADD_DEFINITIONS(-Dstrcasecmp=_stricmp)
93 ENDIF()
95 # Check for the dlopen API (for dynamicly loading backend libs)
96 IF(DLOPEN)
97     CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
98     IF("${HAVE_DLFCN_H}")
99         CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
100         IF("${HAVE_LIBDL}")
101             SET(EXTRA_LIBS dl ${EXTRA_LIBS})
102         ENDIF()
103     ENDIF()
104 ENDIF()
106 # Check if we have Windows headers
107 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H)
108 IF(NOT "${HAVE_WINDOWS_H}")
109     # We need pthreads outside of Windows
110     CHECK_INCLUDE_FILE(pthread.h HAVE_PTHREAD_H)
111     IF(NOT "${HAVE_PTHREAD_H}")
112         MESSAGE(FATAL_ERROR "PThreads is required for non-Windows builds!")
113     ENDIF()
115     # _GNU_SOURCE is needed on some systems for extra attributes, and
116     # _REENTRANT is needed for libc thread-safety
117     ADD_DEFINITIONS(-D_GNU_SOURCE=1 -D_REENTRANT)
118     CHECK_LIBRARY_EXISTS(pthread pthread_create "" HAVE_LIBPTHREAD)
119     IF("${HAVE_LIBPTHREAD}")
120         SET(EXTRA_LIBS pthread ${EXTRA_LIBS})
121     ENDIF()
122 ENDIF()
124 # Check for a 64-bit type
125 CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
126 IF(NOT "${HAVE_STDINT_H}")
127     IF("${HAVE_WINDOWS_H}")
128         CHECK_C_SOURCE_COMPILES("\#include <windows.h>
129                                  __int64 foo;
130                                  int main() {return 0;}" HAVE___INT64)
131     ENDIF()
132     IF(NOT "${HAVE___INT64}")
133         IF(NOT "${SIZEOF_LONG}" MATCHES "8")
134             IF(NOT "${SIZEOF_LONG_LONG}" MATCHES "8")
135                 MESSAGE(FATAL_ERROR "No 64-bit types found, please report!")
136             ENDIF()
137         ENDIF()
138     ENDIF()
139 ENDIF()
142 SET(OPENAL_OBJS  OpenAL32/alBuffer.c
143                  OpenAL32/alError.c
144                  OpenAL32/alExtension.c
145                  OpenAL32/alListener.c
146                  OpenAL32/alSource.c
147                  OpenAL32/alState.c
148                  OpenAL32/alThunk.c
149                  OpenAL32/OpenAL32.c
151 SET(ALU_OBJS  Alu/ALu.c)
152 SET(ALC_OBJS  Alc/ALc.c
153               Alc/alcConfig.c
154               Alc/alcThread.c
157 SET(BACKENDS "")
159 # Check ALSA backend
160 IF(ALSA)
161     CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ALSA_ASOUNDLIB_H)
162     IF("${HAVE_ALSA_ASOUNDLIB_H}")
163         CHECK_LIBRARY_EXISTS(asound snd_pcm_open "" HAVE_LIBASOUND)
164         IF("${HAVE_DLFCN_H}" OR "${HAVE_LIBASOUND}")
165             SET(HAVE_ALSA 1)
166             SET(ALC_OBJS  ${ALC_OBJS} Alc/alsa.c)
167             IF("${HAVE_DLFCN_H}")
168                 SET(BACKENDS  ${BACKENDS} ALSA)
169             ELSE()
170                 SET(BACKENDS  ${BACKENDS} ALSA\(linked\))
171                 SET(EXTRA_LIBS asound ${EXTRA_LIBS})
172             ENDIF()
173         ENDIF()
174     ENDIF()
175 ENDIF()
177 # Check OSS backend
178 IF(OSS)
179     CHECK_INCLUDE_FILE(sys/soundcard.h HAVE_SYS_SOUNDCARD_H)
180     IF("${HAVE_SYS_SOUNDCARD_H}")
181         SET(HAVE_OSS 1)
182         SET(ALC_OBJS  ${ALC_OBJS} Alc/oss.c)
183         SET(BACKENDS  ${BACKENDS} OSS)
184     ENDIF()
185 ENDIF()
187 # Check DSound/MMSystem backend
188 IF(DSOUND)
189     IF("${HAVE_WINDOWS_H}")
190         SET(CMAKE_REQUIRED_LIBRARIES ole32)
191         CHECK_C_SOURCE_COMPILES("int main() {return 0;}" HAVE_LIBOLE32)
192         SET(CMAKE_REQUIRED_LIBRARIES "")
193 #        CHECK_LIBRARY_EXISTS(ole32 CoInitialize "" HAVE_LIBOLE32)
194         IF("${HAVE_LIBOLE32}")
195             SET(EXTRA_LIBS ole32 ${EXTRA_LIBS})
196         ENDIF()
198         CHECK_INCLUDE_FILE(dsound.h HAVE_DSOUND_H)
199         IF("${HAVE_DSOUND_H}")
200             SET(HAVE_DSOUND 1)
201             SET(ALC_OBJS  ${ALC_OBJS} Alc/dsound.c)
202             SET(BACKENDS  ${BACKENDS} DirectSound)
204             CHECK_LIBRARY_EXISTS(dxguid IID_IDirectSound "" HAVE_LIBDXGUID)
205             IF("${HAVE_LIBDXGUID}")
206                 SET(EXTRA_LIBS dxguid ${EXTRA_LIBS})
207             ENDIF()
208         ENDIF()
210         CHECK_C_SOURCE_COMPILES("\#include <windows.h>
211                                  \#include <mmsystem.h>
212                                  int main() {return 0;}" HAVE_MMSYSTEM_H)
213         IF("${HAVE_MMSYSTEM_H}")
214             SET(HAVE_WINMM 1)
215             SET(ALC_OBJS  ${ALC_OBJS} Alc/winmm.c)
216             SET(BACKENDS  ${BACKENDS} WinMM)
218             SET(CMAKE_REQUIRED_LIBRARIES winmm)
219             CHECK_C_SOURCE_COMPILES("int main() {return 0;}" HAVE_LIBWINMM)
220             SET(CMAKE_REQUIRED_LIBRARIES "")
221 #            CHECK_LIBRARY_EXISTS(winmm waveInOpen "" HAVE_LIBWINMM)
222             IF("${HAVE_LIBWINMM}")
223                 SET(EXTRA_LIBS winmm ${EXTRA_LIBS})
224             ENDIF()
225         ENDIF()
226     ENDIF()
227 ENDIF()
229 # End configuration
230 CONFIGURE_FILE(
231     "${OpenAL_SOURCE_DIR}/config.h.in"
232     "${OpenAL_BINARY_DIR}/config.h")
234 ADD_DEFINITIONS(-DAL_BUILD_LIBRARY)
236 # Build a shared library
237 ADD_LIBRARY(${LIBNAME} SHARED ${OPENAL_OBJS} ${ALU_OBJS} ${ALC_OBJS})
238 SET_TARGET_PROPERTIES(${LIBNAME} PROPERTIES VERSION ${LIB_VERSION} SOVERSION ${LIB_MAJOR_VERSION})
240 TARGET_LINK_LIBRARIES(${LIBNAME} ${EXTRA_LIBS})
242 # Add an install target here
243 INSTALL(TARGETS ${LIBNAME}
244         RUNTIME DESTINATION bin
245         LIBRARY DESTINATION lib
246         ARCHIVE DESTINATION lib
248 INSTALL(FILES include/AL/al.h
249               include/AL/alc.h
250         DESTINATION include/AL
253 MESSAGE(STATUS "")
254 MESSAGE(STATUS "Building OpenAL with support for the following backends:")
255 MESSAGE(STATUS "    ${BACKENDS}")
256 MESSAGE(STATUS "")