1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
|
# REAL TIME AUDIO AND MIDI
message(STATUS "")
message(STATUS "## REALTIME AUDIO AND MIDI ##")
option(USE_PULSEAUDIO "Build the PulseAudio I/O module" ON)
option(USE_PORTAUDIO "Build the PortAudio I/O module" ON)
option(USE_PORTMIDI "Build the PortMIDI I/O module" ON)
option(USE_IPMIDI "Build the IPMIDI I/O module" ON)
option(USE_JACK "Build the jack I/O module and opcodes" ON)
option(USE_ALSA "Build the ALSA I/O module" ON)
# option(USE_COREAUDIO "Build the CoreAudio I/O module" ON)
# option(USE_COREMIDI "Build the CoreMIDI I/O Module" ON)
# option(USE_AUDIOUNIT "Build the CoreAudio AudioUnit I/O module (requires CoreAudio)" ON)
list(APPEND CMAKE_REQUIRED_INCLUDES "/usr/local/include")
# FIND LIBRARIES AND HEADERS
if(USE_ALSA AND LINUX)
find_library(ALSA_LIBRARY asound)
check_include_file(alsa/asoundlib.h ALSA_HEADER)
endif()
if(USE_PORTAUDIO)
# FIXME the msvc branch should use the VCPKG config file for portaudio but it's currently broken
# if(MSVC)
# find_package(PORTAUDIO CONFIG REQUIRED)
# else()
find_package(PORTAUDIO)
# endif()
# find_path(PORTAUDIO_INCLUDE_PATH portaudio.h)
# find_library(PORTAUDIO_LIBRARY NAMES portaudio portaudio_x64)
# if(PORTAUDIO_INCLUDE_PATH AND PORTAUDIO_LIBRARY)
# try_run(PORTAUDIO_V19 PORTAUDIO_TEST_COMPILED
# ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/portaudio_test.c
# CMAKE_FLAGS -DLINK_LIBRARIES:STRING=${PORTAUDIO_LIBRARY}
# COMPILE_DEFINITIONS "-I${PORTAUDIO_INCLUDE_PATH}"
# COMPILE_OUTPUT_VARIABLE OUTPUT)
# if(NOT PORTAUDIO_TEST_COMPILED AND NOT WIN32)
# set(PORTAUDIO_V19 false)
# endif()
# else()
# set(PORTAUDIO_V19 false)
# endif()
endif()
if(USE_PORTMIDI)
find_package(PORTMIDI)
endif()
if(USE_JACK)
find_library(JACK_LIBRARY jack)
check_include_file(jack/jack.h JACK_HEADER)
if(APPLE)
# VL: could not find a way to make check_include_file() work so
# I am hardcoding it for MacOS
set(JACK_HEADER "jack/jack.h")
endif()
if(WIN32)
# HLO: including the jack2 common source dir
# prevents "cannot open include file" errors
find_path(JACK_INCLUDE_PATH jack/jack.h)
endif()
endif()
if(USE_PULSEAUDIO)
find_library(PULSEAUDIO_LIBRARY pulse)
find_library(PULSESIMPLE_LIBRARY pulse-simple)
check_include_file(pulse/simple.h PULSEAUDIO_HEADER)
endif()
# if(USE_COREAUDIO)
# find_path(COREAUDIO_INCLUDE_PATH CoreAudio.h)
# find_library(COREAUDIO_LIBRARY CoreAudio)
# endif()
if(APPLE)
find_path(COREMIDI_INCLUDE_PATH CoreMIDI.h)
find_library(COREMIDI_LIBRARY CoreMIDI)
find_library(AUDIOUNIT_LIBRARY AudioUnit)
find_library(COREFOUNDATION_LIBRARY CoreFoundation)
find_path(COREAUDIO_INCLUDE_PATH CoreAudio.h)
find_library(COREAUDIO_LIBRARY CoreAudio)
endif()
# BUILD TARGETS
# check_deps(USE_COREAUDIO APPLE COREAUDIO_INCLUDE_PATH COREAUDIO_LIBRARY)
# if(USE_COREAUDIO)
# make_plugin(rtcoreaudio rtcoreaudio.c)
# target_include_directories(rtcoreaudio PRIVATE ${COREAUDIO_INCLUDE_PATH})
# target_link_libraries(rtcoreaudio ${COREAUDIO_LIBRARY})
# endif()
if(APPLE)
# check_deps(USE_COREMIDI APPLE COREMIDI_INCLUDE_PATH COREMIDI_LIBRARY COREFOUNDATION_LIBRARY)
# check_deps(USE_AUDIOUNIT APPLE COREAUDIO_INCLUDE_PATH COREAUDIO_LIBRARY AUDIOUNIT_INCLUDE_PATH AUDIOUNIT_LIBRARY COREFOUNDATION_LIBRARY)
make_plugin(cmidi cmidi.c)
target_include_directories(cmidi PRIVATE ${COREMIDI_INCLUDE_PATH})
target_link_libraries(cmidi ${COREMIDI_LIBRARY} ${COREFOUNDATION_LIBRARY})
make_plugin(rtauhal rtauhal.c)
target_include_directories(rtauhal PRIVATE ${AUDIOUNIT_INCLUDE_PATH})
target_link_libraries(rtauhal ${AUDIOUNIT_LIBRARY} ${COREFOUNDATION_LIBRARY} ${COREAUDIO_LIBRARY})
endif()
check_deps(USE_ALSA ALSA_HEADER ALSA_LIBRARY PTHREAD_LIBRARY)
if(USE_ALSA)
set(rtalsa_LIBS
${ALSA_LIBRARY} ${PTHREAD_LIBRARY} ${MATH_LIBRARY})
make_plugin(rtalsa rtalsa.c ${rtalsa_LIBS})
endif()
if(WIN32)
message(STATUS "Building Windows MME plugin(rtwinmm).")
if(MSVC)
make_plugin(rtwinmm rtwinmm.c)
target_link_libraries(rtwinmm winmm.lib)
target_link_libraries(rtwinmm gdi32)
target_link_libraries(rtwinmm kernel32)
else()
set(rtwinmm_LIBS
winmm gdi32 kernel32) # should probably do checks for these libs
make_plugin(rtwinmm rtwinmm.c "${rtwinmm_LIBS}")
endif()
endif()
check_deps(USE_PULSEAUDIO PULSEAUDIO_HEADER PULSEAUDIO_LIBRARY PULSESIMPLE_LIBRARY)
if(USE_PULSEAUDIO)
make_plugin(rtpulse rtpulse.c ${PULSEAUDIO_LIBRARY} ${PULSESIMPLE_LIBRARY})
endif()
if(PORTAUDIO_FOUND)
message(STATUS "Building rtpa module.")
make_plugin(rtpa rtpa.c)
if(MSVC)
# FIXME should be able to use VCPKG export but not working currently
# target_link_libraries(rtpa PRIVATE portaudio portaudio_static)
target_link_libraries(rtpa PRIVATE ${PORTAUDIO_LIBRARIES})
else()
target_include_directories(rtpa PRIVATE ${PORTAUDIO_INCLUDE_DIRS})
target_link_libraries(rtpa ${PORTAUDIO_LIBRARIES})
endif()
else()
message(STATUS "Not building Portaudio Driver...")
message(STATUS "Portaudio v19 Found: ${PORTAUDIO_V19}.")
endif()
if(USE_PORTMIDI AND PORTMIDI_FOUND)
make_plugin(pmidi pmidi.c)
target_include_directories(pmidi PRIVATE ${PORTMIDI_INCLUDE_DIRS})
target_link_libraries(pmidi ${PORTMIDI_LIBRARIES})
if(WIN32)
target_link_libraries(pmidi ${CSOUND_WINDOWS_LIBRARIES})
elseif(LINUX AND ALSA_LIBRARY)
target_link_libraries(pmidi ${ALSA_LIBRARY})
endif()
endif()
#check_deps(USE_IPMIDI PORTMIDI_HEADER PORTMIDI_LIBRARY)
if(USE_IPMIDI)
if(WIN32)
set(ipmidi_LIBS ws2_32)
endif()
make_plugin(ipmidi ipmidi.c "${ipmidi_LIBS}")
endif()
check_deps(USE_JACK JACK_HEADER JACK_LIBRARY)
if(USE_JACK)
set(rtjack_LIBS "")
if(LINUX)
list(APPEND rtjack_LIBS
${JACK_LIBRARY} ${PTHREAD_LIBRARY})
elseif(WIN32)
check_deps(JACK_INCLUDE_PATH)
include_directories("${JACK_INCLUDE_PATH}")
list(APPEND rtjack_LIBS
${JACK_LIBRARY} ${PTHREAD_LIBRARY})
else()
list(APPEND rtjack_LIBS
${JACK_LIBRARY} ${PTHREAD_LIBRARY})
endif()
# set(rtjack_SRCS rtjack.c natsort.c)
set(rtjack_SRCS rtjack.c alphanumcmp.c)
make_plugin(rtjack "${rtjack_SRCS}" "${rtjack_LIBS}")
# make_plugin(rtjack rtjack.c "${rtjack_LIBS}")
endif()
if(HAIKU)
find_library(HAIKU_MEDIA_LIBRARY media)
find_library(HAIKU_MIDI_LIBRARY midi2)
set(haiku_SRCS rthaiku.cpp HaikuAudio.cpp HaikuMidi.cpp)
make_plugin(rthaiku "${haiku_SRCS}")
target_link_libraries(rthaiku ${HAIKU_MEDIA_LIBRARY})
target_link_libraries(rthaiku ${HAIKU_MIDI_LIBRARY})
endif()
|