1 | # cmake project file by Prakash Punnoor |
---|
2 | CMAKE_MINIMUM_REQUIRED(VERSION 2.0) |
---|
3 | |
---|
4 | SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/admin/CMakeModules") |
---|
5 | PROJECT(OpenAL C) |
---|
6 | SET(PACKAGE "openal") |
---|
7 | SET(PACKAGE_TARNAME "openal") |
---|
8 | SET(PACKAGE_NAME "openal") |
---|
9 | SET(PACKAGE_MAJOR_VERSION "0") |
---|
10 | SET(PACKAGE_MINOR_VERSION "0") |
---|
11 | SET(PACKAGE_BUILD_VERSION "8") |
---|
12 | SET(PACKAGE_VERSION "${PACKAGE_MAJOR_VERSION}.${PACKAGE_MINOR_VERSION}.${PACKAGE_BUILD_VERSION}") |
---|
13 | |
---|
14 | SET(PACKAGE_STRING "openal") |
---|
15 | SET(PACKAGE_BUGREPORT "openal-devel@opensource.creative.com") |
---|
16 | SET(OPERATING_SYSTEM "${CMAKE_SYSTEM_NAME}") |
---|
17 | |
---|
18 | FIND_PACKAGE(ConfigHelper) |
---|
19 | |
---|
20 | MACRO(MACRO_TEST ARG VAR) |
---|
21 | CHECK_C_SOURCE_COMPILES( |
---|
22 | "#ifndef ${ARG} |
---|
23 | #error ${ARG} macro not defined |
---|
24 | #endif |
---|
25 | int main(){} |
---|
26 | " ${VAR}) |
---|
27 | ENDMACRO(MACRO_TEST ARG VAR) |
---|
28 | |
---|
29 | |
---|
30 | ADD_DEFINE("PACKAGE_VERSION \"${PACKAGE_VERSION}\"") |
---|
31 | |
---|
32 | # We need ISO C99 features (e.g. snprintf) and POSIX IEEE Std 1003.1b-1993 |
---|
33 | # features (e.g. struct timespec, used in <alsa/asoundlib.h>) |
---|
34 | ADD_DEFINITIONS(-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=199309) |
---|
35 | |
---|
36 | ADD_DEFINE("SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P}") |
---|
37 | |
---|
38 | INCLUDE(${CMAKE_ROOT}/Modules/CheckCSourceCompiles.cmake) |
---|
39 | INCLUDE(${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake) |
---|
40 | INCLUDE(${CMAKE_ROOT}/Modules/CheckLibraryExists.cmake) |
---|
41 | INCLUDE(${CMAKE_ROOT}/Modules/TestBigEndian.cmake) |
---|
42 | |
---|
43 | INCLUDE_DIRECTORIES(${OpenAL_SOURCE_DIR}/common/include) |
---|
44 | INCLUDE_DIRECTORIES(${OpenAL_SOURCE_DIR}/include) |
---|
45 | INCLUDE_DIRECTORIES(${OpenAL_SOURCE_DIR}/src) |
---|
46 | INCLUDE_DIRECTORIES(${OpenAL_SOURCE_DIR}/src/arch) |
---|
47 | |
---|
48 | |
---|
49 | SET(AL_OBJS src/al_bpool.c |
---|
50 | src/al_buffer.c |
---|
51 | src/al_config.c |
---|
52 | src/al_debug.c |
---|
53 | src/al_distance.c |
---|
54 | src/al_error.c |
---|
55 | src/al_ext.c |
---|
56 | src/al_filter.c |
---|
57 | src/al_listen.c |
---|
58 | src/al_main.c |
---|
59 | src/al_mixer.c |
---|
60 | src/al_mixfunc.c |
---|
61 | src/al_mixmanager.c |
---|
62 | src/al_mspool.c |
---|
63 | src/al_mutexlib.c |
---|
64 | src/al_queue.c |
---|
65 | src/al_rctree.c |
---|
66 | src/al_rcvar.c |
---|
67 | src/al_source.c |
---|
68 | src/al_spool.c |
---|
69 | src/al_state.c |
---|
70 | src/al_threadlib.c |
---|
71 | src/al_vector.c |
---|
72 | src/al_matrix.c |
---|
73 | src/mixaudio16.c |
---|
74 | src/backends/alc_backend.c) |
---|
75 | |
---|
76 | SET(ALC_OBJS src/alc/alc_context.c |
---|
77 | src/alc/alc_speaker.c |
---|
78 | src/alc/alc_error.c |
---|
79 | src/alc/alc_device.c) |
---|
80 | |
---|
81 | SET(AC_OBJS src/audioconvert/ac_misc.c |
---|
82 | src/audioconvert/ac_freq.c |
---|
83 | src/audioconvert/ac_bits.c |
---|
84 | src/audioconvert/ac_channels.c |
---|
85 | src/audioconvert/ac_helper.c |
---|
86 | src/audioconvert/ac_adpcm.c |
---|
87 | src/audioconvert/ac_endian.c) |
---|
88 | |
---|
89 | SET(EXT_OBJS src/extensions/al_ext_loki.c |
---|
90 | src/extensions/al_ext_capture.c) |
---|
91 | |
---|
92 | SET(MP3_OBJS src/extensions/al_ext_mp3.c) |
---|
93 | SET(VORBIS_OBJS src/extensions/al_ext_vorbis.c) |
---|
94 | |
---|
95 | SET(BSD_OBJS src/backends/alc_backend_bsd.c) |
---|
96 | SET(DARWIN_OBJS src/backends/alc_backend_darwin.c) |
---|
97 | SET(DMEDIA_OBJS src/backends/alc_backend_irix.c) |
---|
98 | SET(LINUX_OBJS src/backends/alc_backend_linux.c) |
---|
99 | SET(MORPHOS_OBJS src/backends/alc_backend_morphos.c) |
---|
100 | SET(SOLARIS_OBJS src/backends/alc_backend_solaris.c) |
---|
101 | SET(WINDOWS_OBJS src/backends/alc_backend_windows.c) |
---|
102 | SET(ALSA_OBJS src/backends/alc_backend_alsa.c) |
---|
103 | SET(ARTS_OBJS src/backends/alc_backend_arts.c) |
---|
104 | SET(ESD_OBJS src/backends/alc_backend_esd.c) |
---|
105 | SET(NULL_OBJS src/backends/alc_backend_null.c) |
---|
106 | SET(SDL_OBJS src/backends/alc_backend_sdl.c) |
---|
107 | SET(WAVEOUT_OBJS src/backends/alc_backend_wave.c) |
---|
108 | |
---|
109 | SET(x86_OBJS src/arch/i386/x86_floatmul.c |
---|
110 | src/arch/i386/x86_cpu_caps_prk.c) |
---|
111 | SET(x86_MMX_OBJS src/arch/i386/mixaudio16_mmx_prk.c) |
---|
112 | SET(x86_NASM_OBJS src/arch/i386/x86_cpu_caps_detect_prk.nasm) |
---|
113 | SET(x86_MMX_NASM_OBJS src/arch/i386/memcpy_mmx_prk.nasm) |
---|
114 | |
---|
115 | SET(PORTABLE_OBJS src/arch/portable/floatmul.c |
---|
116 | src/arch/portable/cpu_caps.c) |
---|
117 | |
---|
118 | |
---|
119 | SET(ADD_CFLAGS "") |
---|
120 | SET(ADD_LIBS "") |
---|
121 | SET(ADD_LDFLAGS "") |
---|
122 | SET(ADD_WFLAGS "") |
---|
123 | |
---|
124 | IF(CMAKE_UNAME) |
---|
125 | EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_MACHINE) |
---|
126 | ELSE(CMAKE_UNAME) |
---|
127 | MESSAGE("Could not detect machine type") |
---|
128 | ENDIF(CMAKE_UNAME) |
---|
129 | |
---|
130 | IF(CMAKE_SYSTEM MATCHES CYGWIN OR CMAKE_SYSTEM MATCHES MINGW) |
---|
131 | SET(CMAKE_SYSTEM Windows) |
---|
132 | IF(CMAKE_SYSTEM MATCHES CYGWIN) |
---|
133 | SET(CYGWIN ON) |
---|
134 | ELSE(CMAKE_SYSTEM MATCHES CYGWIN) |
---|
135 | SET(MINGW ON) |
---|
136 | ENDIF(CMAKE_SYSTEM MATCHES CYGWIN) |
---|
137 | ENDIF(CMAKE_SYSTEM MATCHES CYGWIN OR CMAKE_SYSTEM MATCHES MINGW) |
---|
138 | |
---|
139 | |
---|
140 | TEST_BIG_ENDIAN(CMAKE_WORDS_BIGENDIAN) |
---|
141 | |
---|
142 | IF(CMAKE_WORDS_BIGENDIAN) |
---|
143 | ADD_DEFINE(WORDS_BIGENDIAN) |
---|
144 | ENDIF(CMAKE_WORDS_BIGENDIAN) |
---|
145 | |
---|
146 | |
---|
147 | OPTION(BUILD_STATIC "build static library too" ON) |
---|
148 | OPTION(BUILD_TESTS "build the test-suite" OFF) |
---|
149 | OPTION(PROFILE "enable profile" OFF) |
---|
150 | OPTION(OPTIMIZATION "enable optimization" ON) |
---|
151 | OPTION(DEBUG "enable debug" OFF) |
---|
152 | OPTION(WARNINGS "enable warnings" ON) |
---|
153 | |
---|
154 | # sound backends |
---|
155 | IF(CMAKE_SYSTEM MATCHES "Linux") |
---|
156 | OPTION(ALSA "alsa back-end" ON) |
---|
157 | OPTION(ALSA_DLOPEN "alsa dynamic loading" ON) |
---|
158 | ENDIF(CMAKE_SYSTEM MATCHES "Linux") |
---|
159 | |
---|
160 | #IF(WIN32) |
---|
161 | # OPTION(DSOUND "directsound back-end" OFF) |
---|
162 | #ENDIF(WIN32) |
---|
163 | |
---|
164 | OPTION(NATIVE "native/oss back-end" ON) |
---|
165 | OPTION(ARTS "arts back-end" ON) |
---|
166 | OPTION(ARTS_DLOPEN "arts dynamic loading" ON) |
---|
167 | OPTION(DMEDIA "DMedia/Irix back-end" ON) |
---|
168 | OPTION(ESD "esd back-end" ON) |
---|
169 | OPTION(ESD_DLOPEN "esd dynamic loading" ON) |
---|
170 | OPTION(SDL "sdl back-end" ON) |
---|
171 | OPTION(SDL_DLOPEN "sdl dynamic loading" ON) |
---|
172 | OPTION(WAVEOUT "wave out back-end" ON) |
---|
173 | OPTION(NULLOUT "null out back-end" ON) |
---|
174 | |
---|
175 | # additional codecs |
---|
176 | OPTION(VORBIS "vorbis support" ON) |
---|
177 | OPTION(VORBIS_DLOPEN "vorbis dynamic loading" ON) |
---|
178 | OPTION(MP3 "mp3 support" ON) |
---|
179 | OPTION(MP3_DLOPEN "mp3 dynamic loading" ON) |
---|
180 | |
---|
181 | IF(DEBUG) |
---|
182 | ADD_DEFINE(DEBUG) |
---|
183 | IF(WARNINGS) |
---|
184 | OPTION(MORE_WARNINGS "enable more warnings" OFF) |
---|
185 | OPTION(USE_WERROR "enable fail on all warning" OFF) |
---|
186 | ENDIF(WARNINGS) |
---|
187 | |
---|
188 | OPTION(EFENCE "enable efence support" OFF) |
---|
189 | OPTION(DEBUG_MAXIMUS "enable all debugging" OFF) |
---|
190 | OPTION(DEBUG_STUB "enable stub debugging" OFF) |
---|
191 | OPTION(DEBUG_LOOP "enable looping debugging" OFF) |
---|
192 | OPTION(DEBUG_CONVERT "enable convertion debugging" OFF) |
---|
193 | OPTION(DEBUG_CONFIG "enable config file debugging" OFF) |
---|
194 | OPTION(DEBUG_LOCK "enable lock debugging" OFF) |
---|
195 | OPTION(DEBUG_EXT "enable extension debugging" OFF) |
---|
196 | OPTION(DEBUG_BUFFER "enable buffer debugging" OFF) |
---|
197 | OPTION(DEBUG_SOURCE "enable source debugging" OFF) |
---|
198 | OPTION(DEBUG_MIXER "enable mixer debugging" OFF) |
---|
199 | OPTION(DEBUG_STREAMING "enable streaming debugging" OFF) |
---|
200 | OPTION(DEBUG_MATH "enable math debugging" OFF) |
---|
201 | OPTION(DEBUG_MEM "enable mem debugging" OFF) |
---|
202 | OPTION(DEBUG_CONTEXT "enable context debugging" OFF) |
---|
203 | OPTION(DEBUG_QUEUE "enable queue debugging" OFF) |
---|
204 | OPTION(DEBUG_FILTER "enable filter debugging" OFF) |
---|
205 | |
---|
206 | IF(EFENCE) |
---|
207 | FIND_LIBRARY(EFENCE_LIB NAMES efence PATHS /usr/lib /usr/local/lib) |
---|
208 | IF(EFENCE_LIB MATCHES "NOTFOUND") |
---|
209 | MESSAGE("Electric Fence not installed - disabled.") |
---|
210 | SET(EFENCE OFF CACHE BOOL "" FORCE) |
---|
211 | ELSE(EFENCE_LIB MATCHES "NOTFOUND") |
---|
212 | |
---|
213 | SET(ADD_LIBS ${ADD_LIBS} ${EFENCE_LIB}) |
---|
214 | ENDIF(EFENCE_LIB MATCHES "NOTFOUND") |
---|
215 | ENDIF(EFENCE) |
---|
216 | |
---|
217 | MACRO(CHECK_DEBUG DEBUG_OPTION) |
---|
218 | IF(${DEBUG_OPTION}) |
---|
219 | ADD_DEFINE(${DEBUG_OPTION}) |
---|
220 | ENDIF(${DEBUG_OPTION}) |
---|
221 | ENDMACRO(CHECK_DEBUG) |
---|
222 | |
---|
223 | CHECK_DEBUG(DEBUG_MAXIMUS) |
---|
224 | CHECK_DEBUG(DEBUG_STUB) |
---|
225 | CHECK_DEBUG(DEBUG_LOOP) |
---|
226 | CHECK_DEBUG(DEBUG_CONVERT) |
---|
227 | CHECK_DEBUG(DEBUG_CONFIG) |
---|
228 | CHECK_DEBUG(DEBUG_LOCK) |
---|
229 | CHECK_DEBUG(DEBUG_EXT) |
---|
230 | CHECK_DEBUG(DEBUG_BUFFER) |
---|
231 | CHECK_DEBUG(DEBUG_SOURC) |
---|
232 | CHECK_DEBUG(DEBUG_MIXER) |
---|
233 | CHECK_DEBUG(DEBUG_STREAMING) |
---|
234 | CHECK_DEBUG(DEBUG_MATH) |
---|
235 | CHECK_DEBUG(DEBUG_MEM) |
---|
236 | CHECK_DEBUG(DEBUG_CONTEXT) |
---|
237 | CHECK_DEBUG(DEBUG_QUEUE) |
---|
238 | CHECK_DEBUG(DEBUG_FILTER) |
---|
239 | ELSE(DEBUG) |
---|
240 | |
---|
241 | ADD_DEFINITIONS(-DNDEBUG) |
---|
242 | ENDIF(DEBUG) |
---|
243 | |
---|
244 | |
---|
245 | # library stuff |
---|
246 | CHECK_LIBRARY_EXISTS("m" "sin" "" HAVE_LIB_M) |
---|
247 | IF(HAVE_LIB_M) |
---|
248 | SET(ADD_LIBS ${ADD_LIBS} m) |
---|
249 | ELSE(HAVE_LIB_M) |
---|
250 | |
---|
251 | IF(NOT CMAKE_SYSTEM MATCHES "Darwin") |
---|
252 | MESSAGE(FATAL_ERROR "libm not found.") |
---|
253 | ENDIF(NOT CMAKE_SYSTEM MATCHES "Darwin") |
---|
254 | ENDIF(HAVE_LIB_M) |
---|
255 | |
---|
256 | |
---|
257 | CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DL) |
---|
258 | IF(HAVE_DL) |
---|
259 | CHECK_LIBRARY_EXISTS("dl" "dlopen" "" HAVE_LIB_DL) |
---|
260 | IF(HAVE_LIB_DL) |
---|
261 | SET(ADD_LIBS ${ADD_LIBS} dl) |
---|
262 | ENDIF(HAVE_LIB_DL) |
---|
263 | ELSE(HAVE_DL) |
---|
264 | |
---|
265 | ADD_DEFINE(NODLOPEN) |
---|
266 | MESSAGE("Dynamic loading of libraries is not available.") |
---|
267 | ENDIF(HAVE_DL) |
---|
268 | |
---|
269 | |
---|
270 | # Special OS objs for target systems |
---|
271 | IF(NATIVE) |
---|
272 | IF(CMAKE_SYSTEM MATCHES "Linux") |
---|
273 | ADD_DEFINE(USE_BACKEND_NATIVE_IRIX) |
---|
274 | SET(OS_OBJS ${LINUX_OBJS}) |
---|
275 | ELSE(CMAKE_SYSTEM MATCHES "Linux") |
---|
276 | |
---|
277 | IF(CMAKE_SYSTEM MATCHES "BSD") |
---|
278 | ADD_DEFINE(USE_BACKEND_NATIVE_BSD) |
---|
279 | SET(OS_OBJS ${BSD_OBJS}) |
---|
280 | ELSE(CMAKE_SYSTEM MATCHES "BSD") |
---|
281 | |
---|
282 | IF(CMAKE_SYSTEM MATCHES "SunOS") |
---|
283 | ADD_DEFINE(USE_BACKEND_NATIVE_SOLARIS) |
---|
284 | SET(OS_OBJS ${SOLARIS_OBJS}) |
---|
285 | ELSE(CMAKE_SYSTEM MATCHES "SunOS") |
---|
286 | |
---|
287 | IF(CMAKE_SYSTEM MATCHES "Windows") |
---|
288 | ADD_DEFINE(USE_BACKEND_NATIVE_WINDOWS) |
---|
289 | SET(OS_OBJS ${WINDOWS_OBJS}) |
---|
290 | # need winmm library for waveOutOpen etc. |
---|
291 | SET(ADD_LIBS ${ADD_LIBS} winmm) |
---|
292 | ELSE(CMAKE_SYSTEM MATCHES "Windows") |
---|
293 | |
---|
294 | IF(CMAKE_SYSTEM MATCHES "Darwin") |
---|
295 | ADD_DEFINE(USE_BACKEND_NATIVE_DARWIN) |
---|
296 | SET(OS_OBJS ${DARWIN_OBJS}) |
---|
297 | #FIXME |
---|
298 | SET(ADD_LDFLAGS "${ADD_LDFLAGS} -I/System/Library/Frameworks/CoreAudio.framework/Headers/ -framework CoreAudio") |
---|
299 | ELSE(CMAKE_SYSTEM MATCHES "Darwin") |
---|
300 | |
---|
301 | IF(CMAKE_SYSTEM MATCHES "morphos") |
---|
302 | ADD_DEFINE(USE_BACKEND_NATIVE_MORPHOS) |
---|
303 | SET(OS_OBJS ${MORPHOS_OBJS}) |
---|
304 | ELSE(CMAKE_SYSTEM MATCHES "morphos") |
---|
305 | |
---|
306 | MESSAGE("unknown System") |
---|
307 | SET(OS_OBJS ${LINUX_OBJS}) |
---|
308 | ENDIF(CMAKE_SYSTEM MATCHES "morphos") |
---|
309 | ENDIF(CMAKE_SYSTEM MATCHES "Darwin") |
---|
310 | ENDIF(CMAKE_SYSTEM MATCHES "Windows") |
---|
311 | ENDIF(CMAKE_SYSTEM MATCHES "SunOS") |
---|
312 | ENDIF(CMAKE_SYSTEM MATCHES "BSD") |
---|
313 | ENDIF(CMAKE_SYSTEM MATCHES "Linux") |
---|
314 | ENDIF(NATIVE) |
---|
315 | |
---|
316 | # threads handling |
---|
317 | IF(CMAKE_SYSTEM MATCHES "morphos") |
---|
318 | CHECK_INCLUDE_FILE(dlfcn.h MOSTHREAD_AVAILABLE) |
---|
319 | ENDIF(CMAKE_SYSTEM MATCHES "morphos") |
---|
320 | |
---|
321 | IF(MOSTHREAD_AVAILABLE) |
---|
322 | ADD_DEFINE(USE_MORPHOSTHREADING) |
---|
323 | ELSE(MOSTHREAD_AVAILABLE) |
---|
324 | |
---|
325 | FIND_PACKAGE(Threads) |
---|
326 | IF(CMAKE_USE_WIN32_THREADS_INIT) |
---|
327 | ADD_DEFINE(USE_WINDOWSTHREADING) |
---|
328 | ELSE(CMAKE_USE_WIN32_THREADS_INIT) |
---|
329 | |
---|
330 | IF(CMAKE_USE_PTHREADS_INIT) |
---|
331 | ADD_DEFINE(USE_POSIXTHREADING) |
---|
332 | SET(ADD_LIBS ${ADD_LIBS} ${CMAKE_THREAD_LIBS_INIT}) |
---|
333 | ELSE(CMAKE_USE_PTHREADS_INIT) |
---|
334 | |
---|
335 | ADD_DEFINE(NO_THREADING) |
---|
336 | ENDIF(CMAKE_USE_PTHREADS_INIT) |
---|
337 | ENDIF(CMAKE_USE_WIN32_THREADS_INIT) |
---|
338 | ENDIF(MOSTHREAD_AVAILABLE) |
---|
339 | |
---|
340 | # sound backends |
---|
341 | FIND_PACKAGE(PkgConfig) |
---|
342 | |
---|
343 | MACRO(CHECK_BACKEND BACKEND_OPTION BACKEND_NAME BACKEND_LIB BACKEND_HEADER BACKEND_TEST_FUNC) |
---|
344 | IF(${BACKEND_OPTION} AND NOT ${BACKEND_OPTION}_FOUND MATCHES "1${${BACKEND_OPTION}_DLOPEN}") |
---|
345 | IF(CMAKE_PKGCONFIG_EXECUTABLE AND NOT ${BACKEND_NAME} MATCHES "^$") |
---|
346 | PKGCONFIG(${BACKEND_NAME} |
---|
347 | BACKEND_HAVE |
---|
348 | BACKEND_INCLUDE_DIRS |
---|
349 | BACKEND_DEFINES |
---|
350 | BACKEND_LINK_DIRS |
---|
351 | BACKEND_LIBS) |
---|
352 | |
---|
353 | SET(${BACKEND_OPTION}_HAVE ${BACKEND_HAVE} CACHE INTERNAL "") |
---|
354 | SET(${BACKEND_OPTION}_INCLUDE_DIRS "${BACKEND_INCLUDE_DIRS}" CACHE INTERNAL "") |
---|
355 | SET(${BACKEND_OPTION}_DEFINES "${BACKEND_DEFINES}" CACHE INTERNAL "") |
---|
356 | SET(${BACKEND_OPTION}_LINK_DIRS "${BACKEND_LINK_DIRS}" CACHE INTERNAL "") |
---|
357 | SET(${BACKEND_OPTION}_LIBS "${BACKEND_LIBS}" CACHE INTERNAL "") |
---|
358 | |
---|
359 | #MESSAGE("have ${${BACKEND_OPTION}_HAVE} inc ${${BACKEND_OPTION}_INCLUDE_DIRS} def ${${BACKEND_OPTION}_DEFINES} linkdirs ${${BACKEND_OPTION}_LINK_DIRS} libs ${${BACKEND_OPTION}_LIBS}") |
---|
360 | ENDIF(CMAKE_PKGCONFIG_EXECUTABLE AND NOT ${BACKEND_NAME} MATCHES "^$") |
---|
361 | |
---|
362 | SET(SOURCE |
---|
363 | "#include <${BACKEND_HEADER}> |
---|
364 | int main(){return 0;} |
---|
365 | ") |
---|
366 | # CHECK_INCLUDE_FILE() doesn't handle include dir, so check by hand |
---|
367 | FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/src.c" "${SOURCE}") |
---|
368 | |
---|
369 | TRY_COMPILE(HAVE_BACKEND_HEADER |
---|
370 | ${CMAKE_BINARY_DIR} |
---|
371 | ${CMAKE_BINARY_DIR}/CMakeTmp/src.c |
---|
372 | CMAKE_FLAGS |
---|
373 | "-DINCLUDE_DIRECTORIES:STRING=${${BACKEND_OPTION}_INCLUDE_DIRS}" |
---|
374 | "-DCOMPILE_DEFINITIONS:STRING=${${BACKEND_OPTION}_DEFINES}" |
---|
375 | OUTPUT_VARIABLE OUTPUT) |
---|
376 | |
---|
377 | WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeOutput.log |
---|
378 | "Performing manual C SOURCE FILE Test HAVE_BACKEND_HEADER for ${BACKEND_OPTION} with the following output:\n" |
---|
379 | "${OUTPUT}\n" |
---|
380 | "Source file was:\n${SOURCE}\n" APPEND) |
---|
381 | |
---|
382 | IF(HAVE_BACKEND_HEADER) |
---|
383 | IF(HAVE_DL AND ${BACKEND_OPTION}_DLOPEN) |
---|
384 | SET(${BACKEND_OPTION}_FOUND "1${${BACKEND_OPTION}_DLOPEN}" CACHE INTERNAL "") |
---|
385 | ELSE(HAVE_DL AND ${BACKEND_OPTION}_DLOPEN) |
---|
386 | |
---|
387 | IF(${BACKEND_OPTION}_LIBS MATCHES "^$") |
---|
388 | FIND_LIBRARY(${BACKEND_OPTION}_LIBS NAMES ${BACKEND_LIB} PATHS /usr/lib /usr/local/lib) |
---|
389 | ENDIF(${BACKEND_OPTION}_LIBS MATCHES "^$") |
---|
390 | |
---|
391 | IF(${BACKEND_OPTION}_LIBS MATCHES "NOTFOUND") |
---|
392 | MESSAGE(STATUS "${BACKEND_OPTION} library ${BACKEND_LIB} not found.") |
---|
393 | ELSE(${BACKEND_OPTION}_LIBS MATCHES "NOTFOUND") |
---|
394 | |
---|
395 | # check whether back-end is link-able |
---|
396 | SET(SOURCE |
---|
397 | "int main(){${BACKEND_TEST_FUNC}();return 0;} |
---|
398 | ") |
---|
399 | FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/src.c" "${SOURCE}") |
---|
400 | |
---|
401 | TRY_COMPILE(BACKEND_LINKS |
---|
402 | ${CMAKE_BINARY_DIR} |
---|
403 | ${CMAKE_BINARY_DIR}/CMakeTmp/src.c |
---|
404 | CMAKE_FLAGS |
---|
405 | "-DINCLUDE_DIRECTORIES:STRING=${${BACKEND_OPTION}_INCLUDE_DIRS}" |
---|
406 | "-DLINK_DIRECTORIES:STRING=${${BACKEND_OPTION}_LINK_DIRS}" |
---|
407 | "-DLINK_LIBRARIES:STRING=${${BACKEND_OPTION}_LIBS}" |
---|
408 | "-DCOMPILE_DEFINITIONS:STRING=${${BACKEND_OPTION}_DEFINES}" |
---|
409 | OUTPUT_VARIABLE OUTPUT) |
---|
410 | |
---|
411 | WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeOutput.log |
---|
412 | "Performing manual C SOURCE FILE Test BACKEND_LINKS for ${BACKEND_OPTION} with the following output:\n" |
---|
413 | "${OUTPUT}\n" |
---|
414 | "Source file was:\n${SOURCE}\n" APPEND) |
---|
415 | |
---|
416 | IF(BACKEND_LINKS) |
---|
417 | SET(${BACKEND_OPTION}_FOUND "1${${BACKEND_OPTION}_DLOPEN}" CACHE INTERNAL "") |
---|
418 | ELSE(BACKEND_LINKS) |
---|
419 | |
---|
420 | MESSAGE(STATUS "${BACKEND_OPTION} doesn't link.") |
---|
421 | ENDIF(BACKEND_LINKS) |
---|
422 | ENDIF(${BACKEND_OPTION}_LIBS MATCHES "NOTFOUND") |
---|
423 | ENDIF(HAVE_DL AND ${BACKEND_OPTION}_DLOPEN) |
---|
424 | ELSE(HAVE_BACKEND_HEADER) |
---|
425 | |
---|
426 | MESSAGE(STATUS "${BACKEND_OPTION} header ${BACKEND_HEADER} not found.") |
---|
427 | ENDIF(HAVE_BACKEND_HEADER) |
---|
428 | ENDIF(${BACKEND_OPTION} AND NOT ${BACKEND_OPTION}_FOUND MATCHES "1${${BACKEND_OPTION}_DLOPEN}") |
---|
429 | |
---|
430 | IF(${BACKEND_OPTION} AND ${BACKEND_OPTION}_FOUND MATCHES "1${${BACKEND_OPTION}_DLOPEN}") |
---|
431 | SET(OS_OBJS ${OS_OBJS} ${${BACKEND_OPTION}_OBJS}) |
---|
432 | # kinda hack, but won't hurt |
---|
433 | ADD_DEFINE(USE_BACKEND_${BACKEND_OPTION}) |
---|
434 | ADD_DEFINE(ENABLE_EXTENSION_AL_EXT_${BACKEND_OPTION}) |
---|
435 | INCLUDE_DIRECTORIES(${${BACKEND_OPTION}_INCLUDE_DIRS}) |
---|
436 | |
---|
437 | ADD_DEFINITIONS(${${BACKEND_OPTION}_DEFINES}) |
---|
438 | |
---|
439 | IF(HAVE_DL AND ${BACKEND_OPTION}_DLOPEN) |
---|
440 | ADD_DEFINE(OPENAL_DLOPEN_${BACKEND_OPTION}) |
---|
441 | MESSAGE(STATUS "${BACKEND_OPTION} support - dynamic") |
---|
442 | ELSE(HAVE_DL AND ${BACKEND_OPTION}_DLOPEN) |
---|
443 | |
---|
444 | SET(ADD_LIBS ${ADD_LIBS} ${${BACKEND_OPTION}_LIBS}) |
---|
445 | LINK_DIRECTORIES(${${BACKEND_OPTION}_LINK_DIRS}) |
---|
446 | MESSAGE(STATUS "${BACKEND_OPTION} support - static") |
---|
447 | ENDIF(HAVE_DL AND ${BACKEND_OPTION}_DLOPEN) |
---|
448 | ELSE(${BACKEND_OPTION} AND ${BACKEND_OPTION}_FOUND MATCHES "1${${BACKEND_OPTION}_DLOPEN}") |
---|
449 | |
---|
450 | MESSAGE(STATUS "${BACKEND_OPTION} support - disabled") |
---|
451 | SET(${BACKEND_OPTION} OFF CACHE BOOL "" FORCE) |
---|
452 | ENDIF(${BACKEND_OPTION} AND ${BACKEND_OPTION}_FOUND MATCHES "1${${BACKEND_OPTION}_DLOPEN}") |
---|
453 | ENDMACRO(CHECK_BACKEND) |
---|
454 | |
---|
455 | # OPT PKG-NAME LIB HEADER TEST-FUNCTION |
---|
456 | CHECK_BACKEND(ALSA alsa asound alsa/asoundlib.h snd_pcm_info_sizeof) |
---|
457 | CHECK_BACKEND(ARTS artsc artsc artsc.h arts_free) |
---|
458 | CHECK_BACKEND(DMEDIA "" audio dmedia/audio.h alGetResourceByName) |
---|
459 | CHECK_BACKEND(ESD esd esd esd.h esd_audio_open) |
---|
460 | CHECK_BACKEND(SDL sdl sdl SDL.h SDL_LockAudio) |
---|
461 | #IF(WIN32) |
---|
462 | # CHECK_BACKEND(DSOUND "" dsound dsound.h ???) |
---|
463 | #ENDIF(WIN32) |
---|
464 | |
---|
465 | CHECK_BACKEND(MP3 smpeg smpeg smpeg.h SMPEG_play) |
---|
466 | CHECK_BACKEND(VORBIS vorbisfile vorbisfile vorbis/vorbisfile.h ov_clear) |
---|
467 | |
---|
468 | IF(WAVEOUT) |
---|
469 | SET(OS_OBJS ${OS_OBJS} ${WAVEOUT_OBJS}) |
---|
470 | ADD_DEFINE(USE_BACKEND_WAVEOUT) |
---|
471 | ENDIF(WAVEOUT) |
---|
472 | |
---|
473 | IF(NULLOUT) |
---|
474 | SET(OS_OBJS ${OS_OBJS} ${NULL_OBJS}) |
---|
475 | ADD_DEFINE(USE_BACKEND_NULL) |
---|
476 | ENDIF(NULLOUT) |
---|
477 | |
---|
478 | |
---|
479 | # Special objs for architectures |
---|
480 | IF(CMAKE_SYSTEM_MACHINE MATCHES "i.86" OR CMAKE_SYSTEM_MACHINE MATCHES "x86_64") |
---|
481 | INCLUDE_DIRECTORIES(${OpenAL_SOURCE_DIR}/src/arch/i386) |
---|
482 | SET(ARCH_OBJS ${x86_OBJS}) |
---|
483 | |
---|
484 | MACRO_TEST(__MMX__ HAVE_MMX) |
---|
485 | IF(HAVE_MMX) |
---|
486 | SET(ARCH_OBJS ${ARCH_OBJS} ${x86_MMX_OBJS}) |
---|
487 | |
---|
488 | |
---|
489 | IF(CMAKE_SYSTEM_MACHINE MATCHES "i.86") |
---|
490 | # nasm stuff |
---|
491 | FIND_PROGRAM(HAVE_NASM NAMES nasm) |
---|
492 | |
---|
493 | IF(NOT HAVE_NASM MATCHES "NOTFOUND") |
---|
494 | PROJECT(OpenAL ASM) |
---|
495 | MESSAGE(STATUS "Using NASM") |
---|
496 | ADD_DEFINE(HAVE_CPU_CAPS_DETECTION) |
---|
497 | SET(ARCH_OBJS ${ARCH_OBJS} ${x86_NASM_OBJS}) |
---|
498 | |
---|
499 | IF(HAVE_MMX) |
---|
500 | SET(ARCH_OBJS ${ARCH_OBJS} ${x86_MMX_NASM_OBJS}) |
---|
501 | ADD_DEFINE(HAVE_MMX_MEMCPY) |
---|
502 | ENDIF(HAVE_MMX) |
---|
503 | ELSE(NOT HAVE_NASM MATCHES "NOTFOUND") |
---|
504 | |
---|
505 | IF(HAVE_MMX) |
---|
506 | MESSAGE("Warning: MMX capability found, but NASM not found. Without NASM no SIMD detection (MMX enabled by default) and no MMX memcopy is built.") |
---|
507 | ENDIF(HAVE_MMX) |
---|
508 | ENDIF(NOT HAVE_NASM MATCHES "NOTFOUND") |
---|
509 | ENDIF(CMAKE_SYSTEM_MACHINE MATCHES "i.86") |
---|
510 | |
---|
511 | IF(CMAKE_SYSTEM_MACHINE MATCHES "i686" OR CMAKE_SYSTEM_MACHINE MATCHES "x86_64") |
---|
512 | OPTION(OPTIM_GENERIC "enable full generic mixing despite MMX optimized routines" OFF) |
---|
513 | ELSE(CMAKE_SYSTEM_MACHINE MATCHES "i686" OR CMAKE_SYSTEM_MACHINE MATCHES "x86_64") |
---|
514 | |
---|
515 | OPTION(OPTIM_GENERIC "enable full generic mixing" ON) |
---|
516 | ENDIF(CMAKE_SYSTEM_MACHINE MATCHES "i686" OR CMAKE_SYSTEM_MACHINE MATCHES "x86_64") |
---|
517 | |
---|
518 | IF(NOT OPTIM_GENERIC) |
---|
519 | ADD_DEFINE(USE_LIGHT_GEN_MIXING) |
---|
520 | ENDIF(NOT OPTIM_GENERIC) |
---|
521 | ENDIF(HAVE_MMX) |
---|
522 | ELSE(CMAKE_SYSTEM_MACHINE MATCHES "i.86" OR CMAKE_SYSTEM_MACHINE MATCHES "x86_64") |
---|
523 | |
---|
524 | SET(ARCH_OBJS ${PORTABLE_OBJS}) |
---|
525 | ENDIF(CMAKE_SYSTEM_MACHINE MATCHES "i.86" OR CMAKE_SYSTEM_MACHINE MATCHES "x86_64") |
---|
526 | |
---|
527 | |
---|
528 | # compiler specific settings |
---|
529 | FIND_PACKAGE(CompilerAttribute) |
---|
530 | FIND_PACKAGE(CompilerVisibility) |
---|
531 | FIND_PACKAGE(CompilerFlagsSet) |
---|
532 | |
---|
533 | ADD_DEFINE(AL_SUPPORT_BYTE_LOKI_SOURCE_ATTR_) |
---|
534 | ADD_DEFINITIONS(-DAL_BUILD_LIBRARY) |
---|
535 | |
---|
536 | |
---|
537 | GENERATE_CONFIG_H() |
---|
538 | |
---|
539 | SET(CMAKE_C_FLAGS "${ADD_WFLAGS} ${ADD_CFLAGS} ${CMAKE_C_FLAGS}") |
---|
540 | SET(CMAKE_CXX_FLAGS "${ADD_CFLAGS} ${CMAKE_CXX_FLAGS}") |
---|
541 | SET(CMAKE_SHARED_LINKER_FLAGS "${ADD_LDFLAGS} ${CMAKE_SHARED_LINKER_FLAGS}") |
---|
542 | SET(CMAKE_MODULE_LINKER_FLAGS "${ADD_LDFLAGS} ${CMAKE_MODULE_LINKER_FLAGS}") |
---|
543 | |
---|
544 | SET(OPENAL_OBJS ${AL_OBJS} |
---|
545 | ${OS_OBJS} |
---|
546 | ${ARCH_OBJS} |
---|
547 | ${ALC_OBJS} |
---|
548 | ${AC_OBJS} |
---|
549 | ${EXT_OBJS}) |
---|
550 | |
---|
551 | IF(BUILD_STATIC) |
---|
552 | # we can't create a static library with the same name |
---|
553 | # as the shared one, so we copy it over after creation |
---|
554 | ADD_LIBRARY(openal-static STATIC ${OPENAL_OBJS}) |
---|
555 | #SET_TARGET_PROPERTIES(openal-static PROPERTIES OUTPUT_NAME openal) |
---|
556 | SET_TARGET_PROPERTIES(openal-static PROPERTIES LINKER_LANGUAGE C) |
---|
557 | TARGET_LINK_LIBRARIES(openal-static ${ADD_LIBS}) |
---|
558 | ADD_CUSTOM_COMMAND( |
---|
559 | TARGET openal-static |
---|
560 | POST_BUILD |
---|
561 | COMMAND ${CMAKE_COMMAND} |
---|
562 | ARGS -E copy |
---|
563 | ${CMAKE_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}openal-static${CMAKE_STATIC_LIBRARY_SUFFIX} |
---|
564 | ${CMAKE_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}openal${CMAKE_STATIC_LIBRARY_SUFFIX}) |
---|
565 | INSTALL_FILES(/lib FILES ${CMAKE_STATIC_LIBRARY_PREFIX}openal${CMAKE_STATIC_LIBRARY_SUFFIX}) |
---|
566 | ENDIF(BUILD_STATIC) |
---|
567 | |
---|
568 | ADD_LIBRARY(openal SHARED ${OPENAL_OBJS}) |
---|
569 | SET_TARGET_PROPERTIES(openal PROPERTIES LINKER_LANGUAGE C) |
---|
570 | SET_TARGET_PROPERTIES(openal PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${PACKAGE_MAJOR_VERSION}) |
---|
571 | TARGET_LINK_LIBRARIES(openal ${ADD_LIBS}) |
---|
572 | INSTALL_TARGETS(/lib openal) |
---|
573 | INSTALL_FILES(/include/AL FILES common/include/AL/al.h |
---|
574 | common/include/AL/alc.h |
---|
575 | include/AL/alext.h) |
---|
576 | |
---|
577 | # build test-suite |
---|
578 | IF(BUILD_TESTS) |
---|
579 | # need CXX for testcpp only |
---|
580 | PROJECT(OpenAL CXX) |
---|
581 | FIND_LIBRARY(ALUT_LIB NAMES alut PATHS /usr/lib /usr/local/lib) |
---|
582 | IF(ALUT_LIB MATCHES "NOTFOUND") |
---|
583 | MESSAGE("alut not installed, cannot build tests") |
---|
584 | ELSE(ALUT_LIB MATCHES "NOTFOUND") |
---|
585 | |
---|
586 | ADD_LIBRARY(testlib test/testlib.c) |
---|
587 | TARGET_LINK_LIBRARIES(testlib ${ADD_LIBS} openal ${ALUT_LIB}) |
---|
588 | |
---|
589 | SET(TESTS rotatesound |
---|
590 | reverb |
---|
591 | da |
---|
592 | multi |
---|
593 | multinothread |
---|
594 | alut |
---|
595 | time |
---|
596 | multialut |
---|
597 | alinitexit |
---|
598 | single |
---|
599 | nothread |
---|
600 | pitch |
---|
601 | pitch2 |
---|
602 | pitch3 |
---|
603 | pitch4 |
---|
604 | doppler |
---|
605 | sourcestop |
---|
606 | ext |
---|
607 | stream |
---|
608 | callback |
---|
609 | orient |
---|
610 | relative |
---|
611 | channel |
---|
612 | channel2 |
---|
613 | pause |
---|
614 | pitchnothread |
---|
615 | pitchnothread2 |
---|
616 | gain |
---|
617 | loop |
---|
618 | listener |
---|
619 | listener2 |
---|
620 | listener3 |
---|
621 | listener4 |
---|
622 | bufferuniq |
---|
623 | sourceuniq |
---|
624 | gendelbuffer_error |
---|
625 | gendelsource_error |
---|
626 | multichannel |
---|
627 | mp3 |
---|
628 | mp32 |
---|
629 | vorbis |
---|
630 | gainlinear |
---|
631 | multimp3 |
---|
632 | queue |
---|
633 | queue2 |
---|
634 | queue3 |
---|
635 | capture |
---|
636 | capture2 |
---|
637 | leak |
---|
638 | multicontext |
---|
639 | strings |
---|
640 | attributes) |
---|
641 | |
---|
642 | FOREACH(TEST ${TESTS}) |
---|
643 | SET(TEST_SRC test/test${TEST}.c) |
---|
644 | # gets added at the beginning thus having no effect |
---|
645 | SET_SOURCE_FILES_PROPERTIES(${TEST_SRC} PROPERTIES COMPILE_FLAGS "-Wno-unused") |
---|
646 | ADD_EXECUTABLE(test${TEST} ${TEST_SRC}) |
---|
647 | TARGET_LINK_LIBRARIES(test${TEST} testlib openal ${ALUT_LIB}) |
---|
648 | ENDFOREACH(TEST) |
---|
649 | |
---|
650 | SET_SOURCE_FILES_PROPERTIES(test/testcpp.cc PROPERTIES COMPILE_FLAGS "-Wno-unused") |
---|
651 | ADD_EXECUTABLE(testcpp test/testcpp.cc) |
---|
652 | TARGET_LINK_LIBRARIES(testcpp testlib openal ${ALUT_LIB}) |
---|
653 | |
---|
654 | # copy over testdata, so test-suite can be used in binary dir |
---|
655 | SET(TESTDATA boom.mp3 |
---|
656 | boom.ogg |
---|
657 | boom.wav |
---|
658 | fire2.wav |
---|
659 | multiboom.wav |
---|
660 | multisample.wav |
---|
661 | sample.wav) |
---|
662 | |
---|
663 | FOREACH(TESTDATUM ${TESTDATA}) |
---|
664 | CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/test/${TESTDATUM} ${CMAKE_BINARY_DIR}/${TESTDATUM} COPYONLY) |
---|
665 | ENDFOREACH(TESTDATUM) |
---|
666 | ENDIF(ALUT_LIB MATCHES "NOTFOUND") |
---|
667 | ENDIF(BUILD_TESTS) |
---|
668 | |
---|
669 | |
---|
670 | # needed for openal.pc.in and openal-config.in |
---|
671 | SET(prefix ${CMAKE_INSTALL_PREFIX}) |
---|
672 | SET(exec_prefix "\${prefix}") |
---|
673 | SET(libdir "\${exec_prefix}/lib") |
---|
674 | SET(bindir "\${exec_prefix}/bin") |
---|
675 | SET(includedir "\${prefix}/include") |
---|
676 | SET(requirements "") |
---|
677 | SET(PTHREAD_LIBS ${CMAKE_THREAD_LIBS_INIT}) |
---|
678 | |
---|
679 | CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/admin/pkgconfig/openal.pc.in ${CMAKE_BINARY_DIR}/admin/pkgconfig/openal.pc @ONLY) |
---|
680 | CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/admin/pkgconfig/openal-config.in ${CMAKE_BINARY_DIR}/admin/pkgconfig/openal-config @ONLY) |
---|
681 | INSTALL_PROGRAMS(/bin FILES admin/pkgconfig/openal-config) |
---|
682 | INSTALL_FILES(/lib/pkgconfig FILES admin/pkgconfig/openal.pc) |
---|
683 | |
---|
684 | |
---|
685 | # info file |
---|
686 | IF(UNIX) |
---|
687 | FIND_PROGRAM(MAKEINFO_PRG NAMES makeinfo) |
---|
688 | IF(NOT MAKEINFO_PRG MATCHES "NOTFOUND") |
---|
689 | IF(NOT EXISTS ${CMAKE_BINARY_DIR}/doc) |
---|
690 | MAKE_DIRECTORY(${CMAKE_BINARY_DIR}/doc) |
---|
691 | ENDIF(NOT EXISTS ${CMAKE_BINARY_DIR}/doc) |
---|
692 | |
---|
693 | ADD_CUSTOM_COMMAND( |
---|
694 | OUTPUT ${CMAKE_BINARY_DIR}/doc/openal.info |
---|
695 | DEPENDS ${CMAKE_SOURCE_DIR}/doc/openal.texi |
---|
696 | COMMAND cd ${CMAKE_BINARY_DIR}/doc && ${MAKEINFO_PRG} |
---|
697 | ARGS ${CMAKE_SOURCE_DIR}/doc/openal.texi) |
---|
698 | |
---|
699 | ADD_CUSTOM_TARGET(InfoFile ALL echo DEPENDS ${CMAKE_BINARY_DIR}/doc/openal.info) |
---|
700 | INSTALL_FILES(/share/info FILES doc/openal.info) |
---|
701 | ENDIF(NOT MAKEINFO_PRG MATCHES "NOTFOUND") |
---|
702 | ENDIF(UNIX) |
---|
703 | |
---|