You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
4.5KB

  1. cmake_minimum_required(VERSION 2.8.10)
  2. project(RtAudio)
  3. include(CTest)
  4. include(CheckFunctionExists)
  5. # Check for Jack (any OS)
  6. find_package(PkgConfig)
  7. pkg_check_modules(jack jack)
  8. # Check for Pulse (any OS)
  9. pkg_check_modules(pulse libpulse-simple)
  10. # Check for known non-Linux unix-likes
  11. if (CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*")
  12. message(STATUS "NetBSD detected, using OSS")
  13. set(xBSD ON)
  14. elseif(UNIX AND NOT APPLE)
  15. set(LINUX ON)
  16. endif()
  17. option(BUILD_PYTHON "Build PyRtAudio python bindings" OFF)
  18. option(RTAUDIO_DS "Build DirectSound API" OFF)
  19. option(RTAUDIO_ASIO "Build ASIO API" OFF)
  20. option(RTAUDIO_WASAPI "Build WASAPI API" ${WIN32})
  21. option(RTAUDIO_OSS "Build OSS4 API" ${xBSD})
  22. option(RTAUDIO_ALSA "Build ALSA API" ${LINUX})
  23. option(RTAUDIO_PULSE "Build PulseAudio API" ${pulse_FOUND})
  24. option(RTAUDIO_JACK "Build JACK audio server API" ${jack_FOUND})
  25. option(RTAUDIO_CORE "Build CoreAudio API" ${APPLE})
  26. if (CMAKE_BUILD_TYPE STREQUAL "Debug")
  27. add_definitions(-D__RTAUDIO_DEBUG__)
  28. endif ()
  29. check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
  30. if (HAVE_GETTIMEOFDAY)
  31. add_definitions(-DHAVE_GETTIMEOFDAY)
  32. endif ()
  33. if (CMAKE_COMPILER_IS_GNUCXX)
  34. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
  35. endif (CMAKE_COMPILER_IS_GNUCXX)
  36. set(rtaudio_SOURCES RtAudio.cpp rtaudio_c.cpp)
  37. set(LINKLIBS)
  38. set(PKGCONFIG_REQUIRES)
  39. set(PKGCONFIG_APIS)
  40. # OSS
  41. if (RTAUDIO_OSS)
  42. set(NEED_PTHREAD ON)
  43. find_library(OSSAUDIO_LIB ossaudio)
  44. if (OSSAUDIO_LIB)
  45. list(APPEND LINKLIBS ossaudio)
  46. # Note: not an error on some systems
  47. endif()
  48. add_definitions(-D__LINUX_OSS__)
  49. endif()
  50. # Pulse
  51. if (RTAUDIO_PULSE)
  52. set(NEED_PTHREAD ON)
  53. find_library(PULSE_LIB pulse)
  54. find_library(PULSESIMPLE_LIB pulse-simple)
  55. list(APPEND LINKLIBS ${PULSE_LIB} ${PULSESIMPLE_LIB})
  56. list(APPEND PKGCONFIG_REQUIRES "libpulse-simple")
  57. list(APPEND PKGCONFIG_APIS "__LINUX_PULSE__")
  58. add_definitions(-D__LINUX_PULSE__)
  59. endif()
  60. # ALSA
  61. if (RTAUDIO_ALSA)
  62. set(NEED_PTHREAD ON)
  63. find_package(ALSA)
  64. if (NOT ALSA_FOUND)
  65. message(FATAL_ERROR "ALSA API requested but no ALSA dev libraries found")
  66. endif()
  67. include_directories(${ALSA_INCLUDE_DIR})
  68. list(APPEND LINKLIBS ${ALSA_LIBRARY})
  69. list(APPEND PKGCONFIG_REQUIRES "alsa")
  70. list(APPEND PKGCONFIG_APIS "__LINUX_ALSA__")
  71. add_definitions(-D__LINUX_ALSA__)
  72. endif()
  73. # JACK
  74. if (RTAUDIO_JACK)
  75. set(NEED_PTHREAD ON)
  76. find_library(JACK_LIB jack)
  77. list(APPEND LINKLIBS ${JACK_LIB})
  78. list(APPEND PKGCONFIG_REQUIRES "jack")
  79. list(APPEND PKGCONFIG_APIS "__UNIX_JACK__")
  80. add_definitions(-D__UNIX_JACK__)
  81. endif()
  82. # CoreAudio
  83. if (RTAUDIO_CORE)
  84. find_library(COREAUDIO_LIB CoreAudio)
  85. find_library(COREFOUNDATION_LIB CoreFoundation)
  86. list(APPEND LINKLIBS ${COREAUDIO_LIB} ${COREFOUNDATION_LIB})
  87. list(APPEND PKGCONFIG_APIS "__MACOSX_CORE__")
  88. add_definitions(-D__MACOSX_CORE__)
  89. endif()
  90. # ASIO
  91. if (RTAUDIO_ASIO)
  92. set(NEED_WIN32LIBS ON)
  93. include_directories(include)
  94. list(APPEND rtaudio_SOURCES
  95. include/asio.cpp
  96. include/asiodrivers.cpp
  97. include/asiolist.cpp
  98. include/iasiothiscallresolver.cpp)
  99. add_definitions(-D__WINDOWS_ASIO__)
  100. list(APPEND PKGCONFIG_APIS "__WINDOWS_ASIO__")
  101. endif()
  102. # DSound
  103. if (RTAUDIO_DS)
  104. set(NEED_WIN32LIBS ON)
  105. add_definitions(-D__WINDOWS_DS__)
  106. message(STATUS "Using Windows DirectSound")
  107. list(APPEND LINKLIBS dsound)
  108. list(APPEND PKGCONFIG_APIS "__WINDOWS_DS__")
  109. endif()
  110. # WASAPI
  111. if (RTAUDIO_WASAPI)
  112. set(NEED_WIN32LIBS ON)
  113. add_definitions(-D__WINDOWS_WASAPI__)
  114. message(STATUS "Using Windows WASAPI")
  115. list(APPEND LINKLIBS uuid ksuser)
  116. list(APPEND PKGCONFIG_APIS "__WINDOWS_WASAPI__")
  117. endif()
  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. # Windows libs
  123. if (NEED_WIN32LIBS)
  124. list(APPEND LINKLIBS winmm ole32)
  125. endif()
  126. # pthread
  127. if (NEED_PTHREAD)
  128. find_package(Threads REQUIRED
  129. CMAKE_THREAD_PREFER_PTHREAD
  130. THREADS_PREFER_PTHREAD_FLAG)
  131. list(APPEND LINKLIBS Threads::Threads)
  132. endif()
  133. target_link_libraries(rtaudio ${LINKLIBS})
  134. if (BUILD_TESTING)
  135. add_subdirectory(tests)
  136. endif (BUILD_TESTING)
  137. string(REPLACE ";" " " req "${PKGCONFIG_REQUIRES}")
  138. string(REPLACE ";" " -D" api "${PKGCONFIG_APIS}")
  139. string(PREPEND api "-D")
  140. configure_file("rtaudio.pc.in" "rtaudio.pc" @ONLY)
  141. install(TARGETS rtaudio
  142. LIBRARY DESTINATION lib
  143. ARCHIVE DESTINATION lib
  144. RUNTIME DESTINATION bin)
  145. install(TARGETS rtaudio_static
  146. ARCHIVE DESTINATION lib)
  147. install(
  148. FILES RtAudio.h
  149. DESTINATION include)
  150. install(
  151. FILES ${CMAKE_CURRENT_BINARY_DIR}/rtaudio.pc
  152. DESTINATION lib/pkgconfig)