CMakeLists.txt (17882B)
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 7 CMAKE_MINIMUM_REQUIRED(VERSION 3.15) 8 9 # Check if the user is building PortAudio stand-alone or as part of a larger 10 # project. If this is part of a larger project (i.e. the CMakeLists.txt has 11 # been imported by some other CMakeLists.txt), we don't want to trump over 12 # the top of that project's global settings. 13 IF(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_LIST_DIR}) 14 IF(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) 15 MESSAGE(STATUS "Setting CMAKE_BUILD_TYPE type to 'Debug' as none was specified.") 16 SET(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE) 17 SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release") 18 ENDIF() 19 20 PROJECT(portaudio) 21 22 SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) 23 24 IF(WIN32 AND MSVC) 25 OPTION(PA_DLL_LINK_WITH_STATIC_RUNTIME "Link with static runtime libraries (minimizes runtime dependencies)" ON) 26 IF(PA_DLL_LINK_WITH_STATIC_RUNTIME) 27 FOREACH(flag_var 28 CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE 29 CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO 30 CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE 31 CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) 32 IF(${flag_var} MATCHES "/MD") 33 STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") 34 ENDIF() 35 ENDFOREACH() 36 ENDIF() 37 ENDIF() 38 ENDIF() 39 40 SET(PA_PKGCONFIG_VERSION 19) 41 42 # Most of the code from this point onwards is related to populating the 43 # following variables: 44 # PA_PUBLIC_INCLUDES - This contains the list of public PortAudio header 45 # files. These files will be copied into /include paths on Unix'y 46 # systems when "make install" is invoked. 47 # PA_PRIVATE_INCLUDES - This contains the list of header files which 48 # are not part of PortAudio, but are required by the various hostapis. 49 # It is only used by CMake IDE generators (like Visual Studio) to 50 # provide quick-links to useful headers. It has no impact on build 51 # output. 52 # PA_PRIVATE_INCLUDE_PATHS - This contains the list of include paths which 53 # will be passed to the compiler while PortAudio is being built which 54 # are not required by applications using the PortAudio API. 55 # PA_PRIVATE_COMPILE_DEFINITIONS - This contains a list of preprocessor 56 # macro definitions which will be set when compiling PortAudio source 57 # files. 58 # PA_SOURCES - This contains the list of source files which will be built 59 # into the static and shared PortAudio libraries. 60 # PA_NON_UNICODE_SOURCES - This also contains a list of source files which 61 # will be build into the static and shared PortAudio libraries. However, 62 # these sources will not have any unicode compiler definitions added 63 # to them. This list should only contain external source dependencies. 64 # PA_EXTRA_SHARED_SOURCES - Contains a list of extra files which will be 65 # associated only with the shared PortAudio library. This only seems 66 # relevant for Windows shared libraries which require a list of export 67 # symbols. 68 # Where other PA_* variables are set, these are almost always only used to 69 # preserve the historic SOURCE_GROUP behavior (which again only has an impact 70 # on IDE-style generators for visual appearance) or store the output of 71 # find_library() calls. 72 73 SET(PA_COMMON_INCLUDES 74 src/common/pa_allocation.h 75 src/common/pa_converters.h 76 src/common/pa_cpuload.h 77 src/common/pa_debugprint.h 78 src/common/pa_dither.h 79 src/common/pa_endianness.h 80 src/common/pa_hostapi.h 81 src/common/pa_memorybarrier.h 82 src/common/pa_process.h 83 src/common/pa_ringbuffer.h 84 src/common/pa_stream.h 85 src/common/pa_trace.h 86 src/common/pa_types.h 87 src/common/pa_util.h 88 ) 89 90 SET(PA_COMMON_SOURCES 91 src/common/pa_allocation.c 92 src/common/pa_converters.c 93 src/common/pa_cpuload.c 94 src/common/pa_debugprint.c 95 src/common/pa_dither.c 96 src/common/pa_front.c 97 src/common/pa_process.c 98 src/common/pa_ringbuffer.c 99 src/common/pa_stream.c 100 src/common/pa_trace.c 101 ) 102 103 SOURCE_GROUP("common" FILES ${PA_COMMON_INCLUDES} ${PA_COMMON_SOURCES}) 104 105 SET(PA_PUBLIC_INCLUDES include/portaudio.h) 106 107 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake_support) 108 109 SET(PA_SKELETON_SOURCES src/hostapi/skeleton/pa_hostapi_skeleton.c) 110 SOURCE_GROUP("hostapi\\skeleton" ${PA_SKELETON_SOURCES}) 111 SET(PA_SOURCES ${PA_COMMON_SOURCES} ${PA_SKELETON_SOURCES}) 112 SET(PA_PRIVATE_INCLUDE_PATHS src/common ${CMAKE_CURRENT_BINARY_DIR}) 113 114 IF(WIN32) 115 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} _CRT_SECURE_NO_WARNINGS) 116 117 SET(PA_PLATFORM_SOURCES 118 src/os/win/pa_win_hostapis.c 119 src/os/win/pa_win_util.c 120 src/os/win/pa_win_waveformat.c 121 src/os/win/pa_win_wdmks_utils.c 122 src/os/win/pa_win_coinitialize.c) 123 SET(PA_PLATFORM_INCLUDES 124 src/os/win/pa_win_coinitialize.h 125 src/os/win/pa_win_wdmks_utils.h) 126 127 IF(MSVC) 128 SET(PA_PLATFORM_SOURCES ${PA_PLATFORM_SOURCES} src/os/win/pa_x86_plain_converters.c) 129 SET(PA_PLATFORM_INCLUDES ${PA_PLATFORM_INCLUDES} src/os/win/pa_x86_plain_converters.h) 130 ELSE() 131 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} _WIN32_WINNT=0x0501 WINVER=0x0501) 132 SET(DEF_EXCLUDE_X86_PLAIN_CONVERTERS ";") 133 ENDIF() 134 135 SOURCE_GROUP("os\\win" FILES ${PA_PLATFORM_SOURCES} ${PA_PLATFORM_INCLUDES}) 136 SET(PA_SOURCES ${PA_SOURCES} ${PA_PLATFORM_SOURCES}) 137 SET(PA_PRIVATE_INCLUDES ${PA_PRIVATE_INCLUDES} ${PA_PLATFORM_INCLUDES}) 138 SET(PA_PRIVATE_INCLUDE_PATHS ${PA_PRIVATE_INCLUDE_PATHS} src/os/win) 139 140 SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} winmm) 141 142 # Try to find ASIO SDK (assumes that portaudio and asiosdk folders are side-by-side, see 143 # http://www.portaudio.com/trac/wiki/TutorialDir/Compile/WindowsASIOMSVC) 144 FIND_PACKAGE(ASIOSDK) 145 IF(ASIOSDK_FOUND) 146 OPTION(PA_USE_ASIO "Enable support for ASIO" ON) 147 ELSE() 148 OPTION(PA_USE_ASIO "Enable support for ASIO" OFF) 149 ENDIF() 150 IF(PA_USE_ASIO) 151 SET(PA_PRIVATE_INCLUDE_PATHS ${PA_PRIVATE_INCLUDE_PATHS} ${ASIOSDK_ROOT_DIR}/common) 152 SET(PA_PRIVATE_INCLUDE_PATHS ${PA_PRIVATE_INCLUDE_PATHS} ${ASIOSDK_ROOT_DIR}/host) 153 SET(PA_PRIVATE_INCLUDE_PATHS ${PA_PRIVATE_INCLUDE_PATHS} ${ASIOSDK_ROOT_DIR}/host/pc) 154 SET(PA_ASIO_SOURCES src/hostapi/asio/pa_asio.cpp src/hostapi/asio/iasiothiscallresolver.cpp) 155 SET(PA_ASIOSDK_SOURCES ${ASIOSDK_ROOT_DIR}/common/asio.cpp ${ASIOSDK_ROOT_DIR}/host/pc/asiolist.cpp ${ASIOSDK_ROOT_DIR}/host/asiodrivers.cpp) 156 SOURCE_GROUP("hostapi\\ASIO" FILES ${PA_ASIO_SOURCES}) 157 SOURCE_GROUP("hostapi\\ASIO\\ASIOSDK" FILES ${PA_ASIOSDK_SOURCES}) 158 SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_asio.h) 159 SET(PA_SOURCES ${PA_SOURCES} ${PA_ASIO_SOURCES}) 160 SET(PA_NON_UNICODE_SOURCES ${PA_NON_UNICODE_SOURCES} ${PA_ASIOSDK_SOURCES}) 161 SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ole32 uuid) 162 ELSE() 163 # Set variables for DEF file expansion 164 SET(DEF_EXCLUDE_ASIO_SYMBOLS ";") 165 ENDIF() 166 167 # Try to find DirectX SDK 168 FIND_PACKAGE(DXSDK) 169 IF(DXSDK_FOUND) 170 OPTION(PA_USE_DS "Enable support for DirectSound" ON) 171 ELSE() 172 OPTION(PA_USE_DS "Enable support for DirectSound" OFF) 173 ENDIF() 174 IF(PA_USE_DS) 175 OPTION(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE "Use DirectSound full duplex create" ON) 176 MARK_AS_ADVANCED(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE) 177 IF(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE) 178 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE) 179 ENDIF() 180 SET(PA_PRIVATE_INCLUDE_PATHS ${PA_PRIVATE_INCLUDE_PATHS} ${DXSDK_INCLUDE_DIR}) 181 SET(PA_DS_INCLUDES src/hostapi/dsound/pa_win_ds_dynlink.h) 182 SET(PA_DS_SOURCES src/hostapi/dsound/pa_win_ds.c src/hostapi/dsound/pa_win_ds_dynlink.c) 183 SOURCE_GROUP("hostapi\\dsound" FILES ${PA_DS_INCLUDES} ${PA_DS_SOURCES}) 184 SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_win_ds.h) 185 SET(PA_PRIVATE_INCLUDES ${PA_PRIVATE_INCLUDES} ${PA_DS_INCLUDES}) 186 SET(PA_SOURCES ${PA_SOURCES} ${PA_DS_SOURCES}) 187 188 # If we use DirectSound, we need this for the library to be found (if not in VS project settings) 189 IF(DXSDK_FOUND) 190 SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${DXSDK_DSOUND_LIBRARY}) 191 ENDIF() 192 ENDIF() 193 194 OPTION(PA_USE_WMME "Enable support for MME" ON) 195 IF(PA_USE_WMME) 196 SET(PA_WMME_SOURCES src/hostapi/wmme/pa_win_wmme.c) 197 SOURCE_GROUP("hostapi\\wmme" FILES ${PA_WMME_SOURCES}) 198 SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_win_wmme.h) 199 SET(PA_SOURCES ${PA_SOURCES} ${PA_WMME_SOURCES}) 200 SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ole32 uuid) 201 ENDIF() 202 203 IF(MSVS) 204 OPTION(PA_USE_WASAPI "Enable support for WASAPI" ON) 205 ELSE() 206 # I was unable to get WASAPI to compile outside of Visual Studio. If 207 # anyone can figure out how to make this work with MinGW, please fix me. 208 SET(PA_USE_WASAPI OFF) 209 ENDIF() 210 IF(PA_USE_WASAPI) 211 SET(PA_WASAPI_SOURCES src/hostapi/wasapi/pa_win_wasapi.c) 212 SOURCE_GROUP("hostapi\\wasapi" FILES ${PA_WASAPI_SOURCES}) 213 SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_win_wasapi.h) 214 SET(PA_SOURCES ${PA_SOURCES} ${PA_WASAPI_SOURCES}) 215 SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ole32 uuid) 216 IF(NOT MSVC) 217 SET(PA_PRIVATE_INCLUDE_PATHS ${PA_PRIVATE_INCLUDE_PATHS} src/hostapi/wasapi/mingw-include) 218 ENDIF() 219 ELSE() 220 SET(DEF_EXCLUDE_WASAPI_SYMBOLS ";") 221 ENDIF() 222 223 OPTION(PA_USE_WDMKS "Enable support for WDMKS" ON) 224 IF(PA_USE_WDMKS) 225 SET(PA_WDMKS_SOURCES src/hostapi/wdmks/pa_win_wdmks.c) 226 SOURCE_GROUP("hostapi\\wdmks" FILES ${PA_WDMKS_SOURCES}) 227 SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_win_wdmks.h) 228 SET(PA_SOURCES ${PA_SOURCES} ${PA_WDMKS_SOURCES}) 229 SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} setupapi ole32 uuid) 230 ENDIF() 231 232 OPTION(PA_USE_WDMKS_DEVICE_INFO "Use WDM/KS API for device info" ON) 233 MARK_AS_ADVANCED(PA_USE_WDMKS_DEVICE_INFO) 234 IF(PA_USE_WDMKS_DEVICE_INFO) 235 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PAWIN_USE_WDMKS_DEVICE_INFO) 236 ENDIF() 237 238 SET(GENERATED_MESSAGE "CMake generated file, do NOT edit! Use CMake-GUI to change configuration instead.") 239 CONFIGURE_FILE(cmake_support/template_portaudio.def ${CMAKE_CURRENT_BINARY_DIR}/portaudio_cmake.def @ONLY) 240 CONFIGURE_FILE(cmake_support/options_cmake.h.in ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h @ONLY) 241 SET(PA_PRIVATE_INCLUDES ${PA_PRIVATE_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h) 242 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PORTAUDIO_CMAKE_GENERATED) 243 SOURCE_GROUP("cmake_generated" FILES ${CMAKE_CURRENT_BINARY_DIR}/portaudio_cmake.def ${CMAKE_CURRENT_BINARY_DIR}/options_cmake.h) 244 245 SET(PA_EXTRA_SHARED_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/portaudio_cmake.def) 246 247 ELSE() 248 249 SET(PA_PRIVATE_INCLUDE_PATHS ${PA_PRIVATE_INCLUDE_PATHS} src/os/unix) 250 SET(PA_PLATFORM_SOURCES src/os/unix/pa_unix_hostapis.c src/os/unix/pa_unix_util.c) 251 SOURCE_GROUP("os\\unix" FILES ${PA_PLATFORM_SOURCES}) 252 SET(PA_SOURCES ${PA_SOURCES} ${PA_PLATFORM_SOURCES}) 253 254 IF(APPLE) 255 256 SET(CMAKE_MACOSX_RPATH 1) 257 OPTION(PA_USE_COREAUDIO "Enable support for CoreAudio" ON) 258 IF(PA_USE_COREAUDIO) 259 SET(PA_COREAUDIO_SOURCES 260 src/hostapi/coreaudio/pa_mac_core.c 261 src/hostapi/coreaudio/pa_mac_core_blocking.c 262 src/hostapi/coreaudio/pa_mac_core_utilities.c) 263 SET(PA_COREAUDIO_INCLUDES 264 src/hostapi/coreaudio/pa_mac_core_blocking.h 265 src/hostapi/coreaudio/pa_mac_core_utilities.h) 266 SOURCE_GROUP("hostapi\\coreaudio" FILES ${PA_COREAUDIO_SOURCES} ${PA_COREAUDIO_INCLUDES}) 267 SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_mac_core.h) 268 SET(PA_PRIVATE_INCLUDES ${PA_PRIVATE_INCLUDES} ${PA_COREAUDIO_INCLUDES}) 269 SET(PA_SOURCES ${PA_SOURCES} ${PA_COREAUDIO_SOURCES}) 270 271 FIND_LIBRARY(COREAUDIO_LIBRARY CoreAudio REQUIRED) 272 FIND_LIBRARY(AUDIOTOOLBOX_LIBRARY AudioToolbox REQUIRED) 273 FIND_LIBRARY(AUDIOUNIT_LIBRARY AudioUnit REQUIRED) 274 FIND_LIBRARY(CARBON_LIBRARY Carbon REQUIRED) 275 MARK_AS_ADVANCED(COREAUDIO_LIBRARY AUDIOTOOLBOX_LIBRARY AUDIOUNIT_LIBRARY CARBON_LIBRARY) 276 SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${COREAUDIO_LIBRARY} ${AUDIOTOOLBOX_LIBRARY} ${AUDIOUNIT_LIBRARY} ${CARBON_LIBRARY}) 277 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_USE_COREAUDIO) 278 SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework Carbon") 279 ENDIF() 280 281 ELSEIF(UNIX) 282 283 FIND_PACKAGE(Jack) 284 IF(JACK_FOUND) 285 OPTION(PA_USE_JACK "Enable support for Jack" ON) 286 ELSE() 287 OPTION(PA_USE_JACK "Enable support for Jack" OFF) 288 ENDIF() 289 IF(PA_USE_JACK) 290 SET(PA_PRIVATE_INCLUDE_PATHS ${PA_PRIVATE_INCLUDE_PATHS} ${JACK_INCLUDE_DIRS}) 291 SET(PA_JACK_SOURCES src/hostapi/jack/pa_jack.c) 292 SOURCE_GROUP("hostapi\\JACK" FILES ${PA_JACK_SOURCES}) 293 SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_jack.h) 294 SET(PA_SOURCES ${PA_SOURCES} ${PA_JACK_SOURCES}) 295 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_USE_JACK) 296 SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${JACK_LIBRARIES}) 297 SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -ljack") 298 ENDIF() 299 300 FIND_PACKAGE(ALSA) 301 IF(ALSA_FOUND) 302 OPTION(PA_USE_ALSA "Enable support for ALSA" ON) 303 ELSE() 304 OPTION(PA_USE_ALSA "Enable support for ALSA" OFF) 305 ENDIF() 306 IF(PA_USE_ALSA) 307 SET(PA_PRIVATE_INCLUDE_PATHS ${PA_PRIVATE_INCLUDE_PATHS} ${ALSA_INCLUDE_DIRS}) 308 SET(PA_ALSA_SOURCES src/hostapi/alsa/pa_linux_alsa.c) 309 SOURCE_GROUP("hostapi\\ALSA" FILES ${PA_ALSA_SOURCES}) 310 SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_linux_alsa.h) 311 SET(PA_SOURCES ${PA_SOURCES} ${PA_ALSA_SOURCES}) 312 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_USE_ALSA) 313 SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${ALSA_LIBRARIES}) 314 SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -lasound") 315 ENDIF() 316 317 ENDIF() 318 319 IF(NOT ANDROID) 320 SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -lm -lpthread") 321 SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} m pthread) 322 ENDIF() 323 324 ENDIF() 325 326 SOURCE_GROUP("include" FILES ${PA_PUBLIC_INCLUDES}) 327 328 SET(PA_INCLUDES ${PA_PRIVATE_INCLUDES} ${PA_PUBLIC_INCLUDES}) 329 330 IF(WIN32) 331 OPTION(PA_UNICODE_BUILD "Enable Portaudio Unicode build" ON) 332 IF(PA_UNICODE_BUILD) 333 SET_SOURCE_FILES_PROPERTIES(${PA_SOURCES} PROPERTIES COMPILE_DEFINITIONS "UNICODE;_UNICODE") 334 ENDIF() 335 ENDIF() 336 337 OPTION(PA_ENABLE_DEBUG_OUTPUT "Enable debug output for Portaudio" OFF) 338 IF(PA_ENABLE_DEBUG_OUTPUT) 339 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_ENABLE_DEBUG_OUTPUT) 340 ENDIF() 341 342 INCLUDE(TestBigEndian) 343 TEST_BIG_ENDIAN(IS_BIG_ENDIAN) 344 IF(IS_BIG_ENDIAN) 345 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_BIG_ENDIAN) 346 ELSE() 347 SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_LITTLE_ENDIAN) 348 ENDIF() 349 350 ADD_LIBRARY(portaudio SHARED ${PA_INCLUDES} ${PA_COMMON_INCLUDES} ${PA_SOURCES} ${PA_NON_UNICODE_SOURCES} ${PA_EXTRA_SHARED_SOURCES}) 351 SET_PROPERTY(TARGET portaudio APPEND_STRING PROPERTY COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS}) 352 TARGET_INCLUDE_DIRECTORIES(portaudio PRIVATE ${PA_PRIVATE_INCLUDE_PATHS}) 353 TARGET_INCLUDE_DIRECTORIES(portaudio PUBLIC include) 354 TARGET_LINK_LIBRARIES(portaudio ${PA_LIBRARY_DEPENDENCIES}) 355 356 ADD_LIBRARY(portaudio_static STATIC ${PA_INCLUDES} ${PA_COMMON_INCLUDES} ${PA_SOURCES} ${PA_NON_UNICODE_SOURCES}) 357 SET_PROPERTY(TARGET portaudio_static APPEND_STRING PROPERTY COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS}) 358 TARGET_INCLUDE_DIRECTORIES(portaudio_static PRIVATE ${PA_PRIVATE_INCLUDE_PATHS}) 359 TARGET_INCLUDE_DIRECTORIES(portaudio_static PUBLIC include) 360 TARGET_LINK_LIBRARIES(portaudio_static ${PA_LIBRARY_DEPENDENCIES}) 361 362 IF(WIN32 AND MSVC) 363 OPTION(PA_CONFIG_LIB_OUTPUT_PATH "Make sure that output paths are kept neat" OFF) 364 IF(CMAKE_CL_64) 365 SET(TARGET_POSTFIX x64) 366 IF(PA_CONFIG_LIB_OUTPUT_PATH) 367 SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin/x64) 368 ENDIF() 369 ELSE() 370 SET(TARGET_POSTFIX x86) 371 IF(PA_CONFIG_LIB_OUTPUT_PATH) 372 SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin/Win32) 373 ENDIF() 374 ENDIF() 375 SET_TARGET_PROPERTIES(portaudio PROPERTIES OUTPUT_NAME portaudio_${TARGET_POSTFIX} FOLDER "Portaudio") 376 SET_TARGET_PROPERTIES(portaudio_static PROPERTIES OUTPUT_NAME portaudio_static_${TARGET_POSTFIX} FOLDER "Portaudio") 377 ELSE() 378 IF(APPLE AND CMAKE_VERSION VERSION_GREATER 3.4.2) 379 OPTION(PA_OUTPUT_OSX_FRAMEWORK "Generate an OS X framework instead of the simple library" OFF) 380 IF(PA_OUTPUT_OSX_FRAMEWORK) 381 SET_TARGET_PROPERTIES(portaudio PROPERTIES 382 FRAMEWORK TRUE 383 MACOSX_FRAMEWORK_IDENTIFIER com.portaudio 384 FRAMEWORK_VERSION A 385 PUBLIC_HEADER "${PA_PUBLIC_INCLUDES}" 386 VERSION 19.0 387 SOVERSION 19.0) 388 ENDIF() 389 ENDIF() 390 391 IF(NOT PA_OUTPUT_OSX_FRAMEWORK) 392 CONFIGURE_FILE(cmake_support/portaudio-2.0.pc.in ${CMAKE_CURRENT_BINARY_DIR}/portaudio-2.0.pc @ONLY) 393 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/portaudio-2.0.pc DESTINATION lib/pkgconfig) 394 INSTALL(FILES ${PA_PUBLIC_INCLUDES} DESTINATION include) 395 INSTALL(TARGETS portaudio DESTINATION lib) 396 ENDIF() 397 ENDIF() 398 399 # Prepared for inclusion of test files 400 OPTION(PA_BUILD_TESTS "Include test projects" OFF) 401 IF(PA_BUILD_TESTS) 402 SUBDIRS(test) 403 ENDIF() 404 405 # Prepared for inclusion of test files 406 OPTION(PA_BUILD_EXAMPLES "Include example projects" OFF) 407 IF(PA_BUILD_EXAMPLES) 408 SUBDIRS(examples) 409 ENDIF() 410