make WASAPI instantiation errors non-fatal for older Windows
[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_WINDOWS_WASAPI "Build Windows WASAPI API" OFF)
11 option(AUDIO_LINUX_OSS "Build Linux OSS API" OFF)
12 option(AUDIO_LINUX_ALSA "Build Linux ALSA API" OFF)
13 option(AUDIO_LINUX_PULSE "Build Linux PulseAudio API" OFF)
14 option(AUDIO_UNIX_JACK "Build Unix JACK audio server API" OFF)
15 option(AUDIO_OSX_CORE "Build Mac OSX CoreAudio API" OFF)
16
17 if (CMAKE_BUILD_TYPE STREQUAL "Debug")
18     add_definitions(-D__RTAUDIO_DEBUG__)
19 endif ()
20
21 check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
22
23 if (HAVE_GETTIMEOFDAY)
24     add_definitions(-DHAVE_GETTIMEOFDAY)
25 endif ()
26
27 if (CMAKE_COMPILER_IS_GNUCXX)
28     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
29 endif (CMAKE_COMPILER_IS_GNUCXX)
30
31 set(rtaudio_SOURCES RtAudio.cpp rtaudio_c.cpp)
32
33 set(LINKLIBS)
34 if (CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*")
35     message(STATUS "NetBSD detected, using OSS")
36     find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD)
37     list(APPEND LINKLIBS ossaudio ${CMAKE_THREAD_LIBS_INIT})
38     set(AUDIO_LINUX_OSS ON)
39 elseif (UNIX AND NOT APPLE)
40     if (NOT AUDIO_LINUX_PULSE AND NOT AUDIO_LINUX_ALSA AND NOT AUDIO_LINUX_OSS AND NOT AUDIO_UNIX_JACK)
41         set(AUDIO_LINUX_ALSA ON)
42     endif()
43
44     if (AUDIO_LINUX_PULSE)
45         find_library(PULSE_LIB pulse)
46         find_library(PULSESIMPLE_LIB pulse-simple)
47         find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD)
48         list(APPEND LINKLIBS ${PULSE_LIB} ${PULSESIMPLE_LIB} ${CMAKE_THREAD_LIBS_INIT})
49         add_definitions(-D__LINUX_PULSE__)
50         message(STATUS "Using Linux PulseAudio")
51     endif (AUDIO_LINUX_PULSE)
52     if (AUDIO_LINUX_ALSA)
53         find_package(ALSA)
54         find_package(Threads REQUIRED CMAKE_THREAD_PREFER_PTHREAD)
55         if (NOT ALSA_FOUND)
56             message(FATAL_ERROR "ALSA API requested but no ALSA dev libraries found")
57         endif()
58         include_directories(${ALSA_INCLUDE_DIR})
59         list(APPEND LINKLIBS ${ALSA_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
60         add_definitions(-D__LINUX_ALSA__)
61         message(STATUS "Using Linux ALSA")
62     endif (AUDIO_LINUX_ALSA)
63 endif ()
64
65 if (APPLE)
66     if (NOT AUDIO_OSX_CORE AND NOT AUDIO_UNIX_JACK)
67         set(AUDIO_OSX_CORE ON)
68     endif()
69
70     if (AUDIO_OSX_CORE)
71         find_library(COREAUDIO_LIB CoreAudio)
72         find_library(COREFOUNDATION_LIB CoreFoundation)
73         list(APPEND LINKLIBS ${COREAUDIO_LIB} ${COREFOUNDATION_LIB})
74         add_definitions(-D__MACOSX_CORE__)
75         message(STATUS "Using OSX CoreAudio")
76     endif (AUDIO_OSX_CORE)
77 endif (APPLE)
78
79 # JACK supported on many Unices
80 if (UNIX)
81     if (AUDIO_UNIX_JACK)
82         find_library(JACK_LIB jack)
83         list(APPEND LINKLIBS ${JACK_LIB})
84         add_definitions(-D__UNIX_JACK__)
85         message(STATUS "Using JACK")
86     endif (AUDIO_UNIX_JACK)
87 endif (UNIX)
88
89 if (WIN32)
90     if (NOT AUDIO_WINDOWS_DS AND NOT AUDIO_WINDOWS_ASIO AND NOT AUDIO_WINDOWS_WASAPI)
91         set(AUDIO_WINDOWS_WASAPI ON)
92     endif()
93
94     include_directories(include)
95     list(APPEND LINKLIBS winmm ole32)
96
97     if (AUDIO_WINDOWS_DS)
98         add_definitions(-D__WINDOWS_DS__)
99         message(STATUS "Using Windows DirectSound")
100         list(APPEND LINKLIBS dsound)
101     endif (AUDIO_WINDOWS_DS)
102     if (AUDIO_WINDOWS_WASAPI)
103         add_definitions(-D__WINDOWS_WASAPI__)
104         message(STATUS "Using Windows WASAPI")
105         list(APPEND LINKLIBS uuid ksuser)
106     endif (AUDIO_WINDOWS_WASAPI)
107     if (AUDIO_WINDOWS_ASIO)
108         list(APPEND rtaudio_SOURCES
109             include/asio.cpp
110             include/asiodrivers.cpp
111             include/asiolist.cpp
112             include/iasiothiscallresolver.cpp)
113         add_definitions(-D__WINDOWS_ASIO__)
114         message(STATUS "Using Windows ASIO")
115     endif (AUDIO_WINDOWS_ASIO)
116 endif (WIN32)
117
118 cmake_policy(SET CMP0042 OLD)
119 set(PACKAGE_VERSION 5.0.0)
120 add_library(rtaudio SHARED ${rtaudio_SOURCES})
121 add_library(rtaudio_static STATIC ${rtaudio_SOURCES})
122
123 target_link_libraries(rtaudio ${LINKLIBS})
124
125 if (BUILD_TESTING)
126     add_subdirectory(tests)
127 endif (BUILD_TESTING)
128
129 configure_file("rtaudio.pc.in" "rtaudio.pc" @ONLY)
130
131 install(TARGETS rtaudio
132       LIBRARY DESTINATION lib)
133
134 install(TARGETS rtaudio_static
135       ARCHIVE DESTINATION lib)
136
137 install(
138     FILES RtAudio.h
139     DESTINATION include)
140
141 install(
142     FILES ${CMAKE_CURRENT_BINARY_DIR}/rtaudio.pc
143     DESTINATION lib/pkgconfig)