|
|
@@ -4,15 +4,30 @@ project(RtAudio) |
|
|
|
include(CTest) |
|
|
|
include(CheckFunctionExists) |
|
|
|
|
|
|
|
# Check for Jack (any OS) |
|
|
|
find_package(PkgConfig) |
|
|
|
pkg_check_modules(jack jack) |
|
|
|
|
|
|
|
# Check for Pulse (any OS) |
|
|
|
pkg_check_modules(pulse libpulse-simple) |
|
|
|
|
|
|
|
# Check for known non-Linux unix-likes |
|
|
|
if (CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*") |
|
|
|
message(STATUS "NetBSD detected, using OSS") |
|
|
|
set(xBSD ON) |
|
|
|
elseif(UNIX AND NOT APPLE) |
|
|
|
set(LINUX ON) |
|
|
|
endif() |
|
|
|
|
|
|
|
option(BUILD_PYTHON "Build PyRtAudio python bindings" OFF) |
|
|
|
option(AUDIO_WINDOWS_DS "Build Windows DirectSound API" OFF) |
|
|
|
option(AUDIO_WINDOWS_ASIO "Build Windows ASIO API" OFF) |
|
|
|
option(AUDIO_WINDOWS_WASAPI "Build Windows WASAPI API" OFF) |
|
|
|
option(AUDIO_LINUX_OSS "Build Linux OSS API" OFF) |
|
|
|
option(AUDIO_LINUX_ALSA "Build Linux ALSA API" OFF) |
|
|
|
option(AUDIO_LINUX_PULSE "Build Linux PulseAudio API" OFF) |
|
|
|
option(AUDIO_UNIX_JACK "Build Unix JACK audio server API" OFF) |
|
|
|
option(AUDIO_OSX_CORE "Build Mac OSX CoreAudio API" OFF) |
|
|
|
option(RTAUDIO_DS "Build DirectSound API" OFF) |
|
|
|
option(RTAUDIO_ASIO "Build ASIO API" OFF) |
|
|
|
option(RTAUDIO_WASAPI "Build WASAPI API" ${WIN32}) |
|
|
|
option(RTAUDIO_OSS "Build OSS4 API" ${xBSD}) |
|
|
|
option(RTAUDIO_ALSA "Build ALSA API" ${LINUX}) |
|
|
|
option(RTAUDIO_PULSE "Build PulseAudio API" ${pulse_FOUND}) |
|
|
|
option(RTAUDIO_JACK "Build JACK audio server API" ${jack_FOUND}) |
|
|
|
option(RTAUDIO_CORE "Build CoreAudio API" ${APPLE}) |
|
|
|
|
|
|
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug") |
|
|
|
add_definitions(-D__RTAUDIO_DEBUG__) |
|
|
@@ -31,101 +46,122 @@ endif (CMAKE_COMPILER_IS_GNUCXX) |
|
|
|
set(rtaudio_SOURCES RtAudio.cpp rtaudio_c.cpp) |
|
|
|
|
|
|
|
set(LINKLIBS) |
|
|
|
if (CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*") |
|
|
|
message(STATUS "NetBSD detected, using OSS") |
|
|
|
find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD) |
|
|
|
list(APPEND LINKLIBS ossaudio ${CMAKE_THREAD_LIBS_INIT}) |
|
|
|
set(AUDIO_LINUX_OSS ON) |
|
|
|
elseif (UNIX AND NOT APPLE) |
|
|
|
if (NOT AUDIO_LINUX_PULSE AND NOT AUDIO_LINUX_ALSA AND NOT AUDIO_LINUX_OSS AND NOT AUDIO_UNIX_JACK) |
|
|
|
set(AUDIO_LINUX_ALSA ON) |
|
|
|
endif() |
|
|
|
|
|
|
|
if (AUDIO_LINUX_PULSE) |
|
|
|
find_library(PULSE_LIB pulse) |
|
|
|
find_library(PULSESIMPLE_LIB pulse-simple) |
|
|
|
find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD) |
|
|
|
list(APPEND LINKLIBS ${PULSE_LIB} ${PULSESIMPLE_LIB} ${CMAKE_THREAD_LIBS_INIT}) |
|
|
|
add_definitions(-D__LINUX_PULSE__) |
|
|
|
message(STATUS "Using Linux PulseAudio") |
|
|
|
endif (AUDIO_LINUX_PULSE) |
|
|
|
if (AUDIO_LINUX_ALSA) |
|
|
|
find_package(ALSA) |
|
|
|
find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD) |
|
|
|
if (NOT ALSA_FOUND) |
|
|
|
message(FATAL_ERROR "ALSA API requested but no ALSA dev libraries found") |
|
|
|
endif() |
|
|
|
include_directories(${ALSA_INCLUDE_DIR}) |
|
|
|
list(APPEND LINKLIBS ${ALSA_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) |
|
|
|
add_definitions(-D__LINUX_ALSA__) |
|
|
|
message(STATUS "Using Linux ALSA") |
|
|
|
endif (AUDIO_LINUX_ALSA) |
|
|
|
endif () |
|
|
|
|
|
|
|
if (APPLE) |
|
|
|
if (NOT AUDIO_OSX_CORE AND NOT AUDIO_UNIX_JACK) |
|
|
|
set(AUDIO_OSX_CORE ON) |
|
|
|
endif() |
|
|
|
|
|
|
|
if (AUDIO_OSX_CORE) |
|
|
|
find_library(COREAUDIO_LIB CoreAudio) |
|
|
|
find_library(COREFOUNDATION_LIB CoreFoundation) |
|
|
|
list(APPEND LINKLIBS ${COREAUDIO_LIB} ${COREFOUNDATION_LIB}) |
|
|
|
add_definitions(-D__MACOSX_CORE__) |
|
|
|
message(STATUS "Using OSX CoreAudio") |
|
|
|
endif (AUDIO_OSX_CORE) |
|
|
|
endif (APPLE) |
|
|
|
|
|
|
|
# JACK supported on many Unices |
|
|
|
if (UNIX) |
|
|
|
if (AUDIO_UNIX_JACK) |
|
|
|
find_library(JACK_LIB jack) |
|
|
|
list(APPEND LINKLIBS ${JACK_LIB}) |
|
|
|
add_definitions(-D__UNIX_JACK__) |
|
|
|
message(STATUS "Using JACK") |
|
|
|
endif (AUDIO_UNIX_JACK) |
|
|
|
endif (UNIX) |
|
|
|
|
|
|
|
if (WIN32) |
|
|
|
if (NOT AUDIO_WINDOWS_DS AND NOT AUDIO_WINDOWS_ASIO AND NOT AUDIO_WINDOWS_WASAPI) |
|
|
|
set(AUDIO_WINDOWS_WASAPI ON) |
|
|
|
endif() |
|
|
|
|
|
|
|
include_directories(include) |
|
|
|
list(APPEND LINKLIBS winmm ole32) |
|
|
|
|
|
|
|
if (AUDIO_WINDOWS_DS) |
|
|
|
add_definitions(-D__WINDOWS_DS__) |
|
|
|
message(STATUS "Using Windows DirectSound") |
|
|
|
list(APPEND LINKLIBS dsound) |
|
|
|
endif (AUDIO_WINDOWS_DS) |
|
|
|
if (AUDIO_WINDOWS_WASAPI) |
|
|
|
add_definitions(-D__WINDOWS_WASAPI__) |
|
|
|
message(STATUS "Using Windows WASAPI") |
|
|
|
list(APPEND LINKLIBS uuid ksuser) |
|
|
|
endif (AUDIO_WINDOWS_WASAPI) |
|
|
|
if (AUDIO_WINDOWS_ASIO) |
|
|
|
list(APPEND rtaudio_SOURCES |
|
|
|
include/asio.cpp |
|
|
|
include/asiodrivers.cpp |
|
|
|
include/asiolist.cpp |
|
|
|
include/iasiothiscallresolver.cpp) |
|
|
|
add_definitions(-D__WINDOWS_ASIO__) |
|
|
|
message(STATUS "Using Windows ASIO") |
|
|
|
endif (AUDIO_WINDOWS_ASIO) |
|
|
|
endif (WIN32) |
|
|
|
set(PKGCONFIG_REQUIRES) |
|
|
|
set(PKGCONFIG_APIS) |
|
|
|
|
|
|
|
# OSS |
|
|
|
if (RTAUDIO_OSS) |
|
|
|
set(NEED_PTHREAD ON) |
|
|
|
find_library(OSSAUDIO_LIB ossaudio) |
|
|
|
if (OSSAUDIO_LIB) |
|
|
|
list(APPEND LINKLIBS ossaudio) |
|
|
|
# Note: not an error on some systems |
|
|
|
endif() |
|
|
|
add_definitions(-D__LINUX_OSS__) |
|
|
|
endif() |
|
|
|
|
|
|
|
# Pulse |
|
|
|
if (RTAUDIO_PULSE) |
|
|
|
set(NEED_PTHREAD ON) |
|
|
|
find_library(PULSE_LIB pulse) |
|
|
|
find_library(PULSESIMPLE_LIB pulse-simple) |
|
|
|
list(APPEND LINKLIBS ${PULSE_LIB} ${PULSESIMPLE_LIB}) |
|
|
|
list(APPEND PKGCONFIG_REQUIRES "libpulse-simple") |
|
|
|
list(APPEND PKGCONFIG_APIS "__LINUX_PULSE__") |
|
|
|
add_definitions(-D__LINUX_PULSE__) |
|
|
|
endif() |
|
|
|
|
|
|
|
# ALSA |
|
|
|
if (RTAUDIO_ALSA) |
|
|
|
set(NEED_PTHREAD ON) |
|
|
|
find_package(ALSA) |
|
|
|
if (NOT ALSA_FOUND) |
|
|
|
message(FATAL_ERROR "ALSA API requested but no ALSA dev libraries found") |
|
|
|
endif() |
|
|
|
include_directories(${ALSA_INCLUDE_DIR}) |
|
|
|
list(APPEND LINKLIBS ${ALSA_LIBRARY}) |
|
|
|
list(APPEND PKGCONFIG_REQUIRES "alsa") |
|
|
|
list(APPEND PKGCONFIG_APIS "__LINUX_ALSA__") |
|
|
|
add_definitions(-D__LINUX_ALSA__) |
|
|
|
endif() |
|
|
|
|
|
|
|
# JACK |
|
|
|
if (RTAUDIO_JACK) |
|
|
|
set(NEED_PTHREAD ON) |
|
|
|
find_library(JACK_LIB jack) |
|
|
|
list(APPEND LINKLIBS ${JACK_LIB}) |
|
|
|
list(APPEND PKGCONFIG_REQUIRES "jack") |
|
|
|
list(APPEND PKGCONFIG_APIS "__UNIX_JACK__") |
|
|
|
add_definitions(-D__UNIX_JACK__) |
|
|
|
endif() |
|
|
|
|
|
|
|
# CoreAudio |
|
|
|
if (RTAUDIO_CORE) |
|
|
|
find_library(COREAUDIO_LIB CoreAudio) |
|
|
|
find_library(COREFOUNDATION_LIB CoreFoundation) |
|
|
|
list(APPEND LINKLIBS ${COREAUDIO_LIB} ${COREFOUNDATION_LIB}) |
|
|
|
list(APPEND PKGCONFIG_APIS "__MACOSX_CORE__") |
|
|
|
add_definitions(-D__MACOSX_CORE__) |
|
|
|
endif() |
|
|
|
|
|
|
|
# ASIO |
|
|
|
if (RTAUDIO_ASIO) |
|
|
|
set(NEED_WIN32LIBS ON) |
|
|
|
include_directories(include) |
|
|
|
list(APPEND rtaudio_SOURCES |
|
|
|
include/asio.cpp |
|
|
|
include/asiodrivers.cpp |
|
|
|
include/asiolist.cpp |
|
|
|
include/iasiothiscallresolver.cpp) |
|
|
|
add_definitions(-D__WINDOWS_ASIO__) |
|
|
|
list(APPEND PKGCONFIG_APIS "__WINDOWS_ASIO__") |
|
|
|
endif() |
|
|
|
|
|
|
|
# DSound |
|
|
|
if (RTAUDIO_DS) |
|
|
|
set(NEED_WIN32LIBS ON) |
|
|
|
add_definitions(-D__WINDOWS_DS__) |
|
|
|
message(STATUS "Using Windows DirectSound") |
|
|
|
list(APPEND LINKLIBS dsound) |
|
|
|
list(APPEND PKGCONFIG_APIS "__WINDOWS_DS__") |
|
|
|
endif() |
|
|
|
|
|
|
|
# WASAPI |
|
|
|
if (RTAUDIO_WASAPI) |
|
|
|
set(NEED_WIN32LIBS ON) |
|
|
|
add_definitions(-D__WINDOWS_WASAPI__) |
|
|
|
message(STATUS "Using Windows WASAPI") |
|
|
|
list(APPEND LINKLIBS uuid ksuser) |
|
|
|
list(APPEND PKGCONFIG_APIS "__WINDOWS_WASAPI__") |
|
|
|
endif() |
|
|
|
|
|
|
|
cmake_policy(SET CMP0042 OLD) |
|
|
|
set(PACKAGE_VERSION 5.0.0) |
|
|
|
add_library(rtaudio SHARED ${rtaudio_SOURCES}) |
|
|
|
add_library(rtaudio_static STATIC ${rtaudio_SOURCES}) |
|
|
|
|
|
|
|
# Windows libs |
|
|
|
if (NEED_WIN32LIBS) |
|
|
|
list(APPEND LINKLIBS winmm ole32) |
|
|
|
endif() |
|
|
|
|
|
|
|
# pthread |
|
|
|
if (NEED_PTHREAD) |
|
|
|
find_package(Threads REQUIRED |
|
|
|
CMAKE_THREAD_PREFER_PTHREAD |
|
|
|
THREADS_PREFER_PTHREAD_FLAG) |
|
|
|
list(APPEND LINKLIBS Threads::Threads) |
|
|
|
endif() |
|
|
|
|
|
|
|
target_link_libraries(rtaudio ${LINKLIBS}) |
|
|
|
|
|
|
|
if (BUILD_TESTING) |
|
|
|
add_subdirectory(tests) |
|
|
|
endif (BUILD_TESTING) |
|
|
|
|
|
|
|
string(REPLACE ";" " " req "${PKGCONFIG_REQUIRES}") |
|
|
|
string(REPLACE ";" " -D" api "${PKGCONFIG_APIS}") |
|
|
|
string(PREPEND api "-D") |
|
|
|
configure_file("rtaudio.pc.in" "rtaudio.pc" @ONLY) |
|
|
|
|
|
|
|
install(TARGETS rtaudio |
|
|
|