Browse Source

cmake: Flatten API config logic, complete missing rtaudio.pc fields

Closes #106.
Fixes #137.
tags/5.1.0
Stephen Sinclair 6 years ago
parent
commit
adefaebdbc
1 changed files with 127 additions and 91 deletions
  1. +127
    -91
      CMakeLists.txt

+ 127
- 91
CMakeLists.txt View File

@@ -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


Loading…
Cancel
Save