comparison src/portaudio/CMakeLists.txt @ 89:8a15ff55d9af

Add bzip2, zlib, liblo, portaudio sources
author Chris Cannam <cannam@all-day-breakfast.com>
date Wed, 20 Mar 2013 13:59:52 +0000
parents
children
comparison
equal deleted inserted replaced
88:fe7c3a0b0259 89:8a15ff55d9af
1 # $Id: $
2 #
3 # For a "How-To" please refer to the Portaudio documentation at:
4 # http://www.portaudio.com/trac/wiki/TutorialDir/Compile/CMake
5 #
6 PROJECT( portaudio )
7
8 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
9
10 IF(CMAKE_CL_64)
11 SET(TARGET_POSTFIX x64)
12 SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin/x64)
13 ELSE(CMAKE_CL_64)
14 SET(TARGET_POSTFIX x86)
15 SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin/Win32)
16 ENDIF(CMAKE_CL_64)
17
18 IF(WIN32 AND MSVC)
19 OPTION(PORTAUDIO_DLL_LINK_WITH_STATIC_RUNTIME "Link with static runtime libraries (minimizes runtime dependencies)" ON)
20 IF(PORTAUDIO_DLL_LINK_WITH_STATIC_RUNTIME)
21 FOREACH(flag_var
22 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
23 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
24 CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
25 CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
26 IF(${flag_var} MATCHES "/MD")
27 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
28 ENDIF(${flag_var} MATCHES "/MD")
29 ENDFOREACH(flag_var)
30 ENDIF(PORTAUDIO_DLL_LINK_WITH_STATIC_RUNTIME)
31
32 ENDIF(WIN32 AND MSVC)
33
34 IF(WIN32)
35 OPTION(PORTAUDIO_UNICODE_BUILD "Enable Portaudio Unicode build" ON)
36
37 SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_support)
38 # Try to find DirectX SDK
39 FIND_PACKAGE(DXSDK)
40 # Try to find ASIO SDK (assumes that portaudio and asiosdk folders are side-by-side, see
41 # http://www.portaudio.com/trac/wiki/TutorialDir/Compile/WindowsASIOMSVC)
42 FIND_PACKAGE(ASIOSDK)
43
44 IF(ASIOSDK_FOUND)
45 OPTION(PORTAUDIO_ENABLE_ASIO "Enable support for ASIO" ON)
46 ELSE(ASIOSDK_FOUND)
47 OPTION(PORTAUDIO_ENABLE_ASIO "Enable support for ASIO" OFF)
48 ENDIF(ASIOSDK_FOUND)
49 IF(DXSDK_FOUND)
50 OPTION(PORTAUDIO_ENABLE_DSOUND "Enable support for DirectSound" ON)
51 ELSE(DXSDK_FOUND)
52 OPTION(PORTAUDIO_ENABLE_DSOUND "Enable support for DirectSound" OFF)
53 ENDIF(DXSDK_FOUND)
54 OPTION(PORTAUDIO_ENABLE_WMME "Enable support for MME" ON)
55 OPTION(PORTAUDIO_ENABLE_WASAPI "Enable support for WASAPI" ON)
56 OPTION(PORTAUDIO_ENABLE_WDMKS "Enable support for WDMKS" ON)
57 OPTION(PORTAUDIO_USE_WDMKS_DEVICE_INFO "Use WDM/KS API for device info" ON)
58 MARK_AS_ADVANCED(PORTAUDIO_USE_WDMKS_DEVICE_INFO)
59 IF(PORTAUDIO_ENABLE_DSOUND)
60 OPTION(PORTAUDIO_USE_DIRECTSOUNDFULLDUPLEXCREATE "Use DirectSound full duplex create" ON)
61 MARK_AS_ADVANCED(PORTAUDIO_USE_DIRECTSOUNDFULLDUPLEXCREATE)
62 ENDIF(PORTAUDIO_ENABLE_DSOUND)
63 ENDIF(WIN32)
64
65 MACRO(SET_HEADER_OPTION OPTION_NAME OPTION_VALUE)
66 IF(${OPTION_NAME})
67 SET(${OPTION_VALUE} "1")
68 ELSE(${OPTION_NAME})
69 SET(${OPTION_VALUE} "0")
70 ENDIF(${OPTION_NAME})
71 ENDMACRO(SET_HEADER_OPTION)
72
73 SET_HEADER_OPTION(PORTAUDIO_ENABLE_ASIO PA_ENABLE_ASIO)
74 SET_HEADER_OPTION(PORTAUDIO_ENABLE_DSOUND PA_ENABLE_DSOUND)
75 SET_HEADER_OPTION(PORTAUDIO_ENABLE_WMME PA_ENABLE_WMME)
76 SET_HEADER_OPTION(PORTAUDIO_ENABLE_WASAPI PA_ENABLE_WASAPI)
77 SET_HEADER_OPTION(PORTAUDIO_ENABLE_WDMKS PA_ENABLE_WDMKS)
78
79 # Set variables for DEF file expansion
80 IF(NOT PORTAUDIO_ENABLE_ASIO)
81 SET(DEF_EXCLUDE_ASIO_SYMBOLS ";")
82 ENDIF(NOT PORTAUDIO_ENABLE_ASIO)
83
84 IF(NOT PORTAUDIO_ENABLE_WASAPI)
85 SET(DEF_EXCLUDE_WASAPI_SYMBOLS ";")
86 ENDIF(NOT PORTAUDIO_ENABLE_WASAPI)
87
88 IF(PORTAUDIO_USE_WDMKS_DEVICE_INFO)
89 ADD_DEFINITIONS(-DPAWIN_USE_WDMKS_DEVICE_INFO)
90 ENDIF(PORTAUDIO_USE_WDMKS_DEVICE_INFO)
91
92 IF(PORTAUDIO_USE_DIRECTSOUNDFULLDUPLEXCREATE)
93 ADD_DEFINITIONS(-DPAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE)
94 ENDIF(PORTAUDIO_USE_DIRECTSOUNDFULLDUPLEXCREATE)
95
96 #######################################
97 IF(WIN32)
98 INCLUDE_DIRECTORIES(src/os/win)
99 ENDIF(WIN32)
100
101 IF(PORTAUDIO_ENABLE_ASIO)
102 INCLUDE_DIRECTORIES(${ASIOSDK_ROOT_DIR}/common)
103 INCLUDE_DIRECTORIES(${ASIOSDK_ROOT_DIR}/host)
104 INCLUDE_DIRECTORIES(${ASIOSDK_ROOT_DIR}/host/pc)
105
106 SET(PA_ASIO_SOURCES
107 src/hostapi/asio/pa_asio.cpp
108 )
109
110 SET(PA_ASIOSDK_SOURCES
111 ${ASIOSDK_ROOT_DIR}/common/asio.cpp
112 ${ASIOSDK_ROOT_DIR}/host/pc/asiolist.cpp
113 ${ASIOSDK_ROOT_DIR}/host/asiodrivers.cpp
114 )
115
116 SOURCE_GROUP("hostapi\\ASIO" FILES
117 ${PA_ASIO_SOURCES}
118 )
119
120 SOURCE_GROUP("hostapi\\ASIO\\ASIOSDK" FILES
121 ${PA_ASIOSDK_SOURCES}
122 )
123 ENDIF(PORTAUDIO_ENABLE_ASIO)
124
125 IF(PORTAUDIO_ENABLE_DSOUND)
126 INCLUDE_DIRECTORIES(${DXSDK_INCLUDE_DIR})
127 INCLUDE_DIRECTORIES(src/os/win)
128
129 SET(PA_DS_INCLUDES
130 src/hostapi/dsound/pa_win_ds_dynlink.h
131 )
132
133 SET(PA_DS_SOURCES
134 src/hostapi/dsound/pa_win_ds.c
135 src/hostapi/dsound/pa_win_ds_dynlink.c
136 )
137
138 SOURCE_GROUP("hostapi\\dsound" FILES
139 ${PA_DS_INCLUDES}
140 ${PA_DS_SOURCES}
141 )
142 ENDIF(PORTAUDIO_ENABLE_DSOUND)
143
144 IF(PORTAUDIO_ENABLE_WMME)
145 SET(PA_WMME_SOURCES
146 src/hostapi/wmme/pa_win_wmme.c
147 )
148
149 SOURCE_GROUP("hostapi\\wmme" FILES
150 ${PA_WMME_SOURCES}
151 )
152 ENDIF(PORTAUDIO_ENABLE_WMME)
153
154 IF(PORTAUDIO_ENABLE_WASAPI)
155 SET(PA_WASAPI_SOURCES
156 src/hostapi/wasapi/pa_win_wasapi.c
157 )
158
159 SOURCE_GROUP("hostapi\\wasapi" FILES
160 ${PA_WASAPI_SOURCES}
161 )
162 ENDIF(PORTAUDIO_ENABLE_WASAPI)
163
164 IF(PORTAUDIO_ENABLE_WDMKS)
165 SET(PA_WDMKS_SOURCES
166 src/hostapi/wdmks/pa_win_wdmks.c
167 )
168
169 SOURCE_GROUP("hostapi\\wdmks" FILES
170 ${PA_WDMKS_SOURCES}
171 )
172 ENDIF(PORTAUDIO_ENABLE_WDMKS)
173
174 SET(PA_SKELETON_SOURCES
175 src/hostapi/skeleton/pa_hostapi_skeleton.c
176 )
177
178 SOURCE_GROUP("hostapi\\skeleton"
179 ${PA_SKELETON_SOURCES})
180
181 #######################################
182 IF(WIN32)
183 SET(PA_INCLUDES
184 include/portaudio.h
185 include/pa_asio.h
186 include/pa_win_ds.h
187 include/pa_win_wasapi.h
188 include/pa_win_wmme.h
189 )
190 ENDIF(WIN32)
191
192 SOURCE_GROUP("include" FILES
193 ${PA_INCLUDES}
194 )
195
196 SET(PA_COMMON_INCLUDES
197 src/common/pa_allocation.h
198 src/common/pa_converters.h
199 src/common/pa_cpuload.h
200 src/common/pa_debugprint.h
201 src/common/pa_dither.h
202 src/common/pa_endianness.h
203 src/common/pa_hostapi.h
204 src/common/pa_memorybarrier.h
205 src/common/pa_process.h
206 src/common/pa_ringbuffer.h
207 src/common/pa_stream.h
208 src/common/pa_trace.h
209 src/common/pa_types.h
210 src/common/pa_util.h
211 )
212
213 SET(PA_COMMON_SOURCES
214 src/common/pa_allocation.c
215 src/common/pa_converters.c
216 src/common/pa_cpuload.c
217 src/common/pa_debugprint.c
218 src/common/pa_dither.c
219 src/common/pa_front.c
220 src/common/pa_process.c
221 src/common/pa_ringbuffer.c
222 src/common/pa_stream.c
223 src/common/pa_trace.c
224 )
225
226 SOURCE_GROUP("common" FILES
227 ${PA_COMMON_INCLUDES}
228 ${PA_COMMON_SOURCES}
229 )
230
231 SOURCE_GROUP("cmake_generated" FILES
232 ${CMAKE_CURRENT_BINARY_DIR}/portaudio_cmake.def
233 ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h
234 )
235
236 IF(WIN32)
237 SET(PA_PLATFORM_SOURCES
238 src/os/win/pa_win_hostapis.c
239 src/os/win/pa_win_util.c
240 src/os/win/pa_win_waveformat.c
241 src/os/win/pa_win_wdmks_utils.c
242 src/os/win/pa_win_coinitialize.c
243 src/os/win/pa_x86_plain_converters.c
244 )
245
246 SOURCE_GROUP("os\\win" FILES
247 ${PA_PLATFORM_SOURCES}
248 )
249 ENDIF(WIN32)
250
251 INCLUDE_DIRECTORIES( include )
252 INCLUDE_DIRECTORIES( src/common )
253
254 IF(WIN32 AND MSVC)
255 ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
256 ENDIF(WIN32 AND MSVC)
257
258 ADD_DEFINITIONS(-DPORTAUDIO_CMAKE_GENERATED)
259 INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} )
260
261 SET(SOURCES_LESS_ASIO_SDK
262 ${PA_COMMON_SOURCES}
263 ${PA_ASIO_SOURCES}
264 ${PA_DS_SOURCES}
265 ${PA_WMME_SOURCES}
266 ${PA_WASAPI_SOURCES}
267 ${PA_WDMKS_SOURCES}
268 ${PA_SKELETON_SOURCES}
269 ${PA_PLATFORM_SOURCES}
270 )
271
272 IF(PORTAUDIO_UNICODE_BUILD)
273 SET_SOURCE_FILES_PROPERTIES(
274 ${SOURCES_LESS_ASIO_SDK}
275 PROPERTIES
276 COMPILE_DEFINITIONS "UNICODE;_UNICODE"
277 )
278 ENDIF(PORTAUDIO_UNICODE_BUILD)
279
280 ADD_LIBRARY(portaudio SHARED
281 ${PA_INCLUDES}
282 ${PA_COMMON_INCLUDES}
283 ${SOURCES_LESS_ASIO_SDK}
284 ${PA_ASIOSDK_SOURCES}
285 ${CMAKE_CURRENT_BINARY_DIR}/portaudio_cmake.def
286 ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h
287 )
288
289 ADD_LIBRARY(portaudio_static STATIC
290 ${PA_INCLUDES}
291 ${PA_COMMON_INCLUDES}
292 ${SOURCES_LESS_ASIO_SDK}
293 ${PA_ASIOSDK_SOURCES}
294 ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h
295 )
296
297 # Configure the exports file according to settings
298 SET(GENERATED_MESSAGE "CMake generated file, do NOT edit! Use CMake-GUI to change configuration instead.")
299 CONFIGURE_FILE( cmake_support/template_portaudio.def ${CMAKE_CURRENT_BINARY_DIR}/portaudio_cmake.def @ONLY )
300 # Configure header for options (PA_USE_xxx)
301 CONFIGURE_FILE( cmake_support/options_cmake.h.in ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h @ONLY )
302
303 IF(WIN32)
304 # If we use DirectSound, we need this for the library to be found (if not in VS project settings)
305 IF(PORTAUDIO_ENABLE_DSOUND AND DXSDK_FOUND)
306 TARGET_LINK_LIBRARIES(portaudio ${DXSDK_DSOUND_LIBRARY})
307 ENDIF(PORTAUDIO_ENABLE_DSOUND AND DXSDK_FOUND)
308
309 # If we use WDM/KS we need setupapi.lib
310 IF(PORTAUDIO_ENABLE_WDMKS)
311 TARGET_LINK_LIBRARIES(portaudio setupapi)
312 ENDIF(PORTAUDIO_ENABLE_WDMKS)
313
314 SET_TARGET_PROPERTIES(portaudio PROPERTIES OUTPUT_NAME portaudio_${TARGET_POSTFIX})
315 SET_TARGET_PROPERTIES(portaudio_static PROPERTIES OUTPUT_NAME portaudio_static_${TARGET_POSTFIX})
316 ENDIF(WIN32)
317
318 OPTION(PORTAUDIO_BUILD_TESTS "Include test projects" OFF)
319 MARK_AS_ADVANCED(PORTAUDIO_BUILD_TESTS)
320
321 # Prepared for inclusion of test files
322 IF(PORTAUDIO_BUILD_TESTS)
323 SUBDIRS(test)
324 ENDIF(PORTAUDIO_BUILD_TESTS)
325
326 #################################
327