Add full API selection mechanism.
[rtaudio-cdist.git] / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8.10)
2 project(RtAudio)
3
4 include(CTest)
5 include(CheckFunctionExists)
6
7 option(BUILD_PYTHON "Build PyRtAudio python bindings" OFF)
8 option(AUDIO_WINDOWS_DS "Build Windows DirectSound API" OFF)
9 option(AUDIO_WINDOWS_ASIO "Build Windows ASIO API" OFF)
10 option(AUDIO_LINUX_OSS "Build Linux OSS API" OFF)
11 option(AUDIO_LINUX_ALSA "Build Linux ALSA API" OFF)
12 option(AUDIO_LINUX_PULSE "Build Linux PulseAudio API" OFF)
13 option(AUDIO_UNIX_JACK "Build Unix JACK audio server API" OFF)
14 option(AUDIO_OSX_CORE "Build Mac OSX CoreAudio API" OFF)
15
16
17 set(rtaudio_SOURCES RtAudio.cpp)
18
19 set(LINKLIBS)
20 if (CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*")
21     message(STATUS "NetBSD detected, using OSS")
22     find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD)
23     list(APPEND LINKLIBS ossaudio ${CMAKE_THREAD_LIBS_INIT})
24     set(AUDIO_LINUX_OSS ON)
25 elseif (UNIX AND NOT APPLE)
26     if (NOT AUDIO_LINUX_PULSE AND NOT AUDIO_LINUX_ALSA AND NOT AUDIO_LINUX_OSS AND NOT AUDIO_UNIX_JACK)
27         set(AUDIO_LINUX_ALSA ON)
28     endif()
29
30     if (AUDIO_LINUX_PULSE)
31         find_library(PULSE_LIB pulse)
32         find_library(PULSESIMPLE_LIB pulse-simple)
33         list(APPEND LINKLIBS ${PULSE_LIB} ${PULSESIMPLE_LIB})
34         add_definitions(-D__LINUX_PULSE__)
35         message(STATUS "Using Linux PulseAudio")
36     endif (AUDIO_LINUX_PULSE)
37     if (AUDIO_LINUX_ALSA)
38         find_package(ALSA)
39         find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD)
40         if (NOT ALSA_FOUND)
41             message(FATAL_ERROR "ALSA API requested but no ALSA dev libraries found")
42         endif()
43         add_defines(${ALSA_INCLUDE_DIR})
44         list(APPEND LINKLIBS ${ALSA_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
45         add_definitions(-D__LINUX_ALSA__)
46         message(STATUS "Using Linux ALSA")
47     endif (AUDIO_LINUX_ALSA)
48 endif ()
49
50 if (APPLE)
51     if (NOT AUDIO_OSX_CORE AND NOT AUDIO_UNIX_JACK)
52         set(AUDIO_OSX_CORE ON)
53     endif()
54
55     if (AUDIO_OSX_CORE)
56         find_library(COREAUDIO_LIB CoreAudio)
57         find_library(COREFOUNDATION_LIB CoreFoundation)
58         list(APPEND LINKLIBS ${COREAUDIO_LIB} ${COREFOUNDATION_LIB})
59         add_definitions(-D__MACOSX_CORE__)
60         message(STATUS "Using OSX CoreAudio")
61     endif (AUDIO_OSX_CORE)
62 endif (APPLE)
63
64 # JACK supported on many Unices
65 if (UNIX)
66     if (AUDIO_UNIX_JACK)
67         find_library(JACK_LIB jack)
68         list(APPEND LINKLIBS ${JACK_LIB})
69 #        jack_client_open
70 #    AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(Jack support also requires the asound library!))], )
71         add_definitions(-D__UNIX_JACK__)
72         message(STATUS "Using JACK")
73     endif (AUDIO_UNIX_JACK)
74 endif (UNIX)
75
76 if (WIN32)
77     if (NOT AUDIO_WINDOWS_DS AND NOT AUDIO_WINDOWS_ASIO)
78         set(AUDIO_WINDOWS_DS ON)
79     endif()
80
81     include_directories(include)
82     list(APPEND LINKLIBS dsound winmm ole32)
83
84     if (AUDIO_WINDOWS_DS)
85         add_definitions(-D__WINDOWS_DS__)
86         message(STATUS "Using Windows DirectSound")
87     endif (AUDIO_WINDOWS_DS)
88     if (AUDIO_WINDOWS_ASIO)
89         list(APPEND rtaudio_SOURCES
90             include/asio.cpp
91             include/asiodrivers.cpp
92             include/asiolist.cpp
93             include/iasiothiscallresolver.cpp)
94         add_definitions(-D__WINDOWS_ASIO__)
95         message(STATUS "Using Windows ASIO")
96     endif (AUDIO_WINDOWS_ASIO)
97 endif (WIN32)
98
99 add_library(rtaudio SHARED ${rtaudio_SOURCES})
100 add_library(rtaudio_static STATIC ${rtaudio_SOURCES})
101
102 target_link_libraries(rtaudio ${LINKLIBS})
103
104