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