fix linux builds

This commit is contained in:
2026-02-01 20:15:42 -06:00
parent 858b6c789a
commit 289318140c
6 changed files with 49 additions and 29 deletions

View File

@@ -13,14 +13,14 @@ if (WIN32) # windows 11 x86_64
set_target_properties(RtAudio::rtaudio PROPERTIES
IMPORTED_LOCATION "${RtAudio_ROOT}/bin/rtaudio.dll"
IMPORTED_IMPLIB "${RtAudio_ROOT}/lib/rtaudio.lib"
INTERFACE_INCLUDE_DIRECTORIES "${RtAudio_ROOT}/include/rtaudio"
INTERFACE_INCLUDE_DIRECTORIES "${RtAudio_ROOT}/include"
)
add_library(RtMidi::rtmidi SHARED IMPORTED)
set_target_properties(RtMidi::rtmidi PROPERTIES
IMPORTED_LOCATION "${RtMidi_ROOT}/bin/rtmidi.dll"
IMPORTED_IMPLIB "${RtMidi_ROOT}/lib/rtmidi.lib"
INTERFACE_INCLUDE_DIRECTORIES "${RtMidi_ROOT}/include/rtmidi"
INTERFACE_INCLUDE_DIRECTORIES "${RtMidi_ROOT}/include"
)
add_library(yaml-cpp SHARED IMPORTED)
@@ -31,14 +31,13 @@ if (WIN32) # windows 11 x86_64
)
else() # debian 12 x86_64
#find_package(PkgConfig REQUIRED)
#pkg_check_modules(RTAUDIO REQUIRED rtaudio)
#pkg_check_modules(RTMIDI REQUIRED rtmidi)
#pkg_check_modules(YAMLCPP REQUIRED yaml-cpp)
find_package(rtaudio)
find_package(rtmidi)
find_package(yaml-cpp)
find_package(RtAudio REQUIRED)
find_package(RtMidi REQUIRED)
find_package(yaml-cpp REQUIRED)
get_target_property(RTMIDI_INCLUDES RtMidi::rtmidi INTERFACE_INCLUDE_DIRECTORIES)
message(STATUS "RtMidi includes: ${RTMIDI_INCLUDES}")
endif()
@@ -95,9 +94,12 @@ target_include_directories(metabolus PRIVATE
${CMAKE_SOURCE_DIR}/src/ui/widgets
)
# some extra cross platform business
if (WIN32)
target_compile_options(metabolus PUBLIC "/Zc:__cplusplus")
else()
target_compile_options(metabolus PRIVATE ${RTAUDIO_CFLAGS_OTHER})
endif()
target_link_libraries(metabolus
PRIVATE
@@ -106,9 +108,3 @@ if (WIN32)
yaml-cpp
Qt6::Widgets
)
else()
target_include_directories(metabolus PRIVATE ${RTAUDIO_INCLUDE_DIRS} ${RTMIDI_INCLUDE_DIRS} ${YAMLCPP_INCLUDE_DIRS})
target_link_libraries(metabolus PRIVATE Qt6::Widgets ${RTAUDIO_LIBRARIES} ${RTMIDI_LIBRARIES} ${YAMLCPP_LIBARIES})
target_compile_options(metabolus PRIVATE ${RTAUDIO_CFLAGS_OTHER})
endif()

View File

@@ -1,4 +1,16 @@
cmake -S . -B build -G Ninja \
-DCMAKE_PREFIX_PATH=build/lib
PROJECT_ROOT=${PWD}
BUILD_DIR=${PROJECT_ROOT}/build
LIB_ROOT=${BUILD_DIR}/lib
# libraries
RTAUDIO_ROOT=${LIB_ROOT}/rtaudio
RTMIDI_ROOT=${LIB_ROOT}/rtmidi
YAMLCPP_ROOT=${LIB_ROOT}/yaml-cpp
cmake -S . -B ${BUILD_DIR} -G Ninja \
-DRtAudio_DIR="${RTAUDIO_ROOT}/share/rtaudio" \
-DRtMidi_DIR="${RTMIDI_ROOT}/share/rtmidi" \
-Dyaml-cpp_DIR="${YAMLCPP_ROOT}/lib/cmake/yaml-cpp"
cmake --build build

View File

@@ -23,6 +23,7 @@ mkdir ${BUILD_LIB_DIR}/rtmidi -p
cd ${PROJECT_ROOT}/lib/rtmidi
cmake -S . -B build -G Ninja \
-DRTMIDI_BUILD_SHARED_LIBS=ON \
-DRTMIDI_API_ALSA=ON \
-DCMAKE_BUILD_TYPE=Release
cmake --build build
cmake --install build --prefix ${BUILD_LIB_DIR}/rtmidi

View File

@@ -6,7 +6,7 @@
MidiController::MidiController(NoteQueue& queue) : noteQueue_(queue) {
try {
midiIn_ = std::make_unique<RtMidiIn>();
midiIn_ = std::make_unique<RtMidiIn>(RtMidi::LINUX_ALSA);
midiIn_->ignoreTypes(false, false, false);
} catch (RtMidiError& e) {
std::cout << "RtMidi init failed: " << e.getMessage() << std::endl;
@@ -18,14 +18,23 @@ MidiController::~MidiController() {
close();
}
// this dont work too well but whatever
// open the first for thats successful
bool MidiController::openDefaultPort() {
if (!midiIn_) return false;
if (midiIn_->getPortCount() == 0) {
std::cout << "No MIDI input ports available" << std::endl;
return false;
}
return openPort(0);
uint32_t portCount = midiIn_->getPortCount();
std::cout << "Available MidiIn ports: " << portCount << std::endl;
for (int i = 0; i < portCount; i++) {
std::cout << "#" << i << " : " << midiIn_->getPortName(i) << std::endl;
if(openPort(i)) return true;
}
return false;
}
bool MidiController::openPort(unsigned int index) {
@@ -37,6 +46,7 @@ bool MidiController::openPort(unsigned int index) {
std::cout << "Opened MIDI port: " << midiIn_->getPortName(index) << std::endl;
return true;
} catch (RtMidiError& e) {
std::cout << "Midi Port error" << std::endl;
std::cerr << e.getMessage() << std::endl;
return false;
}

View File

@@ -1,7 +1,7 @@
#pragma once
#include <RtMidi.h>
#include <rtmidi/RtMidi.h>
#include <memory>
#include "NoteQueue.h"
#include <unordered_set>

View File

@@ -115,7 +115,8 @@ MainWindow::MainWindow(QWidget *parent) :
// midi
#ifndef _WIN32
midi_.openPort(1); // TODO: error check
//midi_.openDefaultPort(); // TODO: error check
midi_.openPort(1);
#endif
}