From 1dc55a982cac05ad35fe158fc15cc71c1f6a78e3 Mon Sep 17 00:00:00 2001 From: fshstk Date: Wed, 12 Oct 2022 00:38:50 +0200 Subject: [PATCH 01/12] Run qmake2cmake command Command used: qmake2cmake_all . --min-qt-version 6.2.4 --- CMakeLists.txt | 105 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..d63dae4 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,105 @@ +cmake_minimum_required(VERSION 3.16) +project(samplebrain VERSION 1.0 LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +# Set up AUTOMOC and some sensible defaults for runtime execution +# When using Qt 6.3, you can replace the code block below with +# qt_standard_project_setup() +set(CMAKE_AUTOMOC ON) +include(GNUInstallDirs) +set(CMAKE_AUTOUIC ON) + +find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS Core) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui Widgets) + +qt_add_executable(samplebrain WIN32 MACOSX_BUNDLE + app/MainWindow.cpp app/MainWindow.h + app/SettingsDialog.cpp app/SettingsDialog.h + app/audio_thread.cpp + app/feedback.cpp + app/process_thread.cpp + app/qtmain.cpp + app/sound_items.cpp + brain/src/aquila/filter/MelFilter.cpp + brain/src/aquila/filter/MelFilterBank.cpp + brain/src/aquila/transform/Dct.cpp + brain/src/block.cpp + brain/src/block_stream.cpp + brain/src/brain.cpp + brain/src/fft.cpp + brain/src/mfcc.cpp + brain/src/renderer.cpp + brain/src/search_params.cpp + brain/src/spiralcore/OSC_server.cpp + brain/src/spiralcore/allocator.cpp + brain/src/spiralcore/audio.cpp + brain/src/spiralcore/command_ring_buffer.cpp + brain/src/spiralcore/portaudio_client.cpp + brain/src/spiralcore/ring_buffer.cpp + brain/src/spiralcore/sample.cpp + brain/src/spiralcore/stream.cpp + brain/src/status.cpp + brain/src/window.cpp + gui/samplebrain.ui + gui/settings.ui +) +target_include_directories(samplebrain PRIVATE + . + /opt/homebrew/include + /usr/local/include + 2 + brain/src +) + +target_link_libraries(samplebrain PRIVATE + # Remove: L.. + # Remove: L/opt/homebrew/lib + # Remove: L/usr/local/lib + Qt::Core + Qt::Gui + Qt::Widgets + dl + fftw3 + lo + m + portaudio + pthread + sndfile +) + +target_compile_options(samplebrain + -O3 + -Wall + -Wno-unused + -std=c++11 +) + + +# Resources: +set(samplebrain_resource_files + "app/images/at.png" + "app/images/pause.png" + "app/images/play.png" + "app/images/record.png" + "app/images/settings.png" + "app/images/stop.png" +) + +qt_add_resources(samplebrain "samplebrain" + PREFIX + "/images" + BASE + "app" + FILES + ${samplebrain_resource_files} +) + +install(TARGETS samplebrain + BUNDLE DESTINATION . + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +# Consider using qt_generate_deploy_app_script() for app deployment if +# the project can use Qt 6.3. In that case rerun qmake2cmake with +# --min-qt-version=6.3. From ddf7f8538adf27e36b5ecb47a31191b36854def6 Mon Sep 17 00:00:00 2001 From: fshstk Date: Fri, 30 Sep 2022 14:38:31 +0200 Subject: [PATCH 02/12] Fix CMakeLists syntax target_compile_options requires the PUBLIC/PRIVATE keyword. I don't know why the qmake2cmake script doesn't provide the correct syntax here... --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d63dae4..91fbe7c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,7 +68,7 @@ target_link_libraries(samplebrain PRIVATE sndfile ) -target_compile_options(samplebrain +target_compile_options(samplebrain PUBLIC -O3 -Wall -Wno-unused From c2e923bceec7ae406beafa9f4ad7bbdc3bd2182a Mon Sep 17 00:00:00 2001 From: fshstk Date: Fri, 30 Sep 2022 14:40:34 +0200 Subject: [PATCH 03/12] Ignore build folder This should cover all files generated by the build system... --- .gitignore | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index b7e2626..378eac2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1 @@ -*.*~ -*.o - +build From 55e5427ec4381bff4b7e28ff38b17cd45dc5108c Mon Sep 17 00:00:00 2001 From: fshstk Date: Mon, 10 Oct 2022 12:39:17 +0200 Subject: [PATCH 04/12] Fix path to .ui files --- app/MainWindow.h | 2 +- app/SettingsDialog.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/MainWindow.h b/app/MainWindow.h index 14d05c4..ab687f5 100644 --- a/app/MainWindow.h +++ b/app/MainWindow.h @@ -18,7 +18,7 @@ #include #include #include -#include "ui_samplebrain.h" +#include "../gui/ui_samplebrain.h" #include "SettingsDialog.h" #include diff --git a/app/SettingsDialog.h b/app/SettingsDialog.h index df5248f..bdc5804 100644 --- a/app/SettingsDialog.h +++ b/app/SettingsDialog.h @@ -20,7 +20,7 @@ #include #include #include -#include "ui_settings.h" +#include "../gui/ui_settings.h" #include #include From 6aa25397deaffd880ea112a83d2e5f998553e898 Mon Sep 17 00:00:00 2001 From: fshstk Date: Fri, 30 Sep 2022 15:57:14 +0200 Subject: [PATCH 05/12] Add fftw3 dependency --- CMakeLists.txt | 2 ++ Dependencies.cmake | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 Dependencies.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 91fbe7c..7f134a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.16) project(samplebrain VERSION 1.0 LANGUAGES CXX) +include(Dependencies.cmake) + set(CMAKE_INCLUDE_CURRENT_DIR ON) # Set up AUTOMOC and some sensible defaults for runtime execution diff --git a/Dependencies.cmake b/Dependencies.cmake new file mode 100644 index 0000000..0b6a94f --- /dev/null +++ b/Dependencies.cmake @@ -0,0 +1,17 @@ +################################################################################ +# FetchContent +################################################################################ + +include(FetchContent) + +################################################################################ +# fftw3 +################################################################################ + +FetchContent_Declare( + fftw3 + URL http://fftw.org/fftw-3.3.10.tar.gz + URL_HASH MD5=8ccbf6a5ea78a16dbc3e1306e234cc5c) +FetchContent_MakeAvailable(fftw3) + +include_directories(${fftw3_SOURCE_DIR}/api) From 572d6a127c14fcfb1307d8edee867bac1ed6e972 Mon Sep 17 00:00:00 2001 From: fshstk Date: Fri, 30 Sep 2022 15:58:36 +0200 Subject: [PATCH 06/12] Add liblo dependency --- CMakeLists.txt | 2 +- Dependencies.cmake | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f134a7..9224e0b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,7 +63,7 @@ target_link_libraries(samplebrain PRIVATE Qt::Widgets dl fftw3 - lo + lo_shared m portaudio pthread diff --git a/Dependencies.cmake b/Dependencies.cmake index 0b6a94f..909eac1 100644 --- a/Dependencies.cmake +++ b/Dependencies.cmake @@ -15,3 +15,15 @@ FetchContent_Declare( FetchContent_MakeAvailable(fftw3) include_directories(${fftw3_SOURCE_DIR}/api) + +################################################################################ +# liblo +################################################################################ + +FetchContent_Declare( + liblo + URL http://downloads.sourceforge.net/liblo/liblo-0.31.tar.gz + URL_HASH MD5=14378c1e74c58e777fbb4fcf33ac5315) +FetchContent_MakeAvailable(liblo) + +add_subdirectory(${liblo_SOURCE_DIR}/cmake) From 2743caa02a75b2327fb6f1355ae9ddc751ec5efd Mon Sep 17 00:00:00 2001 From: fshstk Date: Fri, 30 Sep 2022 15:58:50 +0200 Subject: [PATCH 07/12] Add portaudio dependency --- CMakeLists.txt | 2 +- Dependencies.cmake | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9224e0b..3b14d96 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.16) -project(samplebrain VERSION 1.0 LANGUAGES CXX) +project(samplebrain VERSION 1.0 LANGUAGES C CXX) include(Dependencies.cmake) diff --git a/Dependencies.cmake b/Dependencies.cmake index 909eac1..1fd857b 100644 --- a/Dependencies.cmake +++ b/Dependencies.cmake @@ -27,3 +27,13 @@ FetchContent_Declare( FetchContent_MakeAvailable(liblo) add_subdirectory(${liblo_SOURCE_DIR}/cmake) + +################################################################################ +# PortAudio +################################################################################ + +FetchContent_Declare( + portaudio + URL http://files.portaudio.com/archives/pa_stable_v190700_20210406.tgz + URL_HASH MD5=ad319249932c6794b551d954b8844402) +FetchContent_MakeAvailable(portaudio) From 30e16d80d91172b9ed690a072632ada3c59c8174 Mon Sep 17 00:00:00 2001 From: fshstk Date: Fri, 30 Sep 2022 16:05:25 +0200 Subject: [PATCH 08/12] Add libsndfile dependency --- Dependencies.cmake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Dependencies.cmake b/Dependencies.cmake index 1fd857b..848c56a 100644 --- a/Dependencies.cmake +++ b/Dependencies.cmake @@ -37,3 +37,13 @@ FetchContent_Declare( URL http://files.portaudio.com/archives/pa_stable_v190700_20210406.tgz URL_HASH MD5=ad319249932c6794b551d954b8844402) FetchContent_MakeAvailable(portaudio) + +################################################################################ +# libsndfile +################################################################################ + +FetchContent_Declare( + libsndfile + GIT_REPOSITORY https://github.com/libsndfile/libsndfile + GIT_TAG 1.1.0) +FetchContent_MakeAvailable(libsndfile) From 2c1a3692e7214f564dc93ab7c612736315cfe0ca Mon Sep 17 00:00:00 2001 From: fshstk Date: Mon, 10 Oct 2022 12:42:18 +0200 Subject: [PATCH 09/12] Update building.md - Add info about installing cmake - Change build instructions from qmake to cmake - Remove info about installing deps We don't need to do this anymore. CMake will do it automatically at configure-time! --- building.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/building.md b/building.md index f6d80c4..90c068e 100644 --- a/building.md +++ b/building.md @@ -1,8 +1,8 @@ # Building from source ## Linux (Ubuntu) -Install libraries for the sample engine (use brew on mac, MinGW on win): +Install cmake: - $ sudo apt install libsndfile1-dev portaudio19-dev liblo-dev libfftw3-dev + $ sudo apt install cmake Install dependencies for the interface: @@ -16,15 +16,14 @@ Build & run it: $ mkdir build $ cd build - $ qmake .. - $ make - $ sudo make install - $ samplebrain + $ cmake .. + $ cmake --build . + $ ./samplebrain ## Mac -Install libraries for sample engine: +Install cmake: - $ brew install fftw portaudio liblo libsndfile + $ brew install cmake Install dependencies for the interface: @@ -35,10 +34,10 @@ Build & run it: $ mkdir build $ cd build - $ qmake .. - $ make + $ cmake .. + $ cmake --build . -`samplebrain.app` should then be in the app folder for you to run. +`samplebrain.app` should then be in the build folder for you to run. # Mac build additions From 7d7a7d24a22b10a49f89a34077f9a326f3aa4fdd Mon Sep 17 00:00:00 2001 From: fshstk Date: Mon, 10 Oct 2022 12:45:52 +0200 Subject: [PATCH 10/12] Remove Qt .pro file CMakeLists.txt now does everything we need --- samplebrain.pro | 71 ------------------------------------------------- 1 file changed, 71 deletions(-) delete mode 100644 samplebrain.pro diff --git a/samplebrain.pro b/samplebrain.pro deleted file mode 100644 index 8b047df..0000000 --- a/samplebrain.pro +++ /dev/null @@ -1,71 +0,0 @@ -###################################################################### -# Automatically generated by qmake (2.01a) Sun Jul 5 17:49:45 2015 -###################################################################### - -TEMPLATE = app -TARGET = samplebrain -DEPENDPATH += . 2 -INCLUDEPATH += . 2 - -QT += core gui widgets - -# Input -HEADERS += app/MainWindow.h \ - app/SettingsDialog.h - -FORMS += gui/samplebrain.ui \ - gui/settings.ui - -SOURCES += app/MainWindow.cpp \ - app/SettingsDialog.cpp \ - app/sound_items.cpp \ - app/audio_thread.cpp \ - app/process_thread.cpp \ - app/feedback.cpp \ - app/qtmain.cpp \ - brain/src/block.cpp \ - brain/src/brain.cpp \ - brain/src/fft.cpp \ - brain/src/mfcc.cpp \ - brain/src/renderer.cpp \ - brain/src/search_params.cpp \ - brain/src/status.cpp \ - brain/src/window.cpp \ - brain/src/block_stream.cpp \ - brain/src/aquila/filter/MelFilterBank.cpp \ - brain/src/aquila/filter/MelFilter.cpp \ - brain/src/aquila/transform/Dct.cpp \ - brain/src/spiralcore/sample.cpp \ - brain/src/spiralcore/ring_buffer.cpp \ - brain/src/spiralcore/command_ring_buffer.cpp \ - brain/src/spiralcore/portaudio_client.cpp \ - brain/src/spiralcore/audio.cpp \ - brain/src/spiralcore/OSC_server.cpp \ - brain/src/spiralcore/allocator.cpp \ - brain/src/spiralcore/stream.cpp - -INCLUDEPATH += brain/src -INCLUDEPATH += /usr/local/include -INCLUDEPATH += /opt/homebrew/include -LIBS += -L.. -L/usr/local/lib -L/opt/homebrew/lib -lportaudio -lfftw3 -lsndfile -llo -ldl -lpthread -lm - -QMAKE_CXXFLAGS += -O3 -Wall -Wno-unused -std=c++11 - -# assets -RESOURCES = app/samplebrain.qrc -ICON = desktop/samplebrain.icns - -PREFIX = $$(PREFIX) -isEmpty(PREFIX) { - PREFIX = /usr -} - -unix:desktopfile.path = $$PREFIX/share/applications/ -unix:desktopfile.files = desktop/samplebrain.desktop -unix:iconfile.path = $$PREFIX/share/icons/hicolor/scalable/apps -unix:iconfile.files = desktop/samplebrain.svg -unix:metainfofile.path = $$PREFIX/share/metainfo -unix:metainfofile.files = desktop/org.thentrythis.Samplebrain.metainfo.xml - -target.path = $$PREFIX/bin -INSTALLS += target desktopfile iconfile metainfofile From 6471b1e06625c6e298ad6cbf0ab3a6001eb7db42 Mon Sep 17 00:00:00 2001 From: fshstk Date: Wed, 12 Oct 2022 00:43:35 +0200 Subject: [PATCH 11/12] Clean up CMakeLists - Remove redundant libraries - Change compile definitions to CMake variables --- CMakeLists.txt | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b14d96..4bdb307 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,9 @@ set(CMAKE_AUTOMOC ON) include(GNUInstallDirs) set(CMAKE_AUTOUIC ON) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui Widgets) @@ -48,36 +51,19 @@ qt_add_executable(samplebrain WIN32 MACOSX_BUNDLE ) target_include_directories(samplebrain PRIVATE . - /opt/homebrew/include - /usr/local/include - 2 brain/src ) target_link_libraries(samplebrain PRIVATE - # Remove: L.. - # Remove: L/opt/homebrew/lib - # Remove: L/usr/local/lib Qt::Core Qt::Gui Qt::Widgets - dl fftw3 lo_shared - m portaudio - pthread sndfile ) -target_compile_options(samplebrain PUBLIC - -O3 - -Wall - -Wno-unused - -std=c++11 -) - - # Resources: set(samplebrain_resource_files "app/images/at.png" From cf06a2116036400c3e0253482c32db6b3d3939b1 Mon Sep 17 00:00:00 2001 From: fshstk Date: Wed, 12 Oct 2022 15:21:12 +0200 Subject: [PATCH 12/12] Add Gitlab CI script --- .gitlab-ci.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..cf81e47 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,10 @@ +build-job: + stage: build + image: ubuntu:22.04 + script: + - apt-get update + - apt-get install -y git cmake g++ freeglut3-dev qt6-base-dev + - mkdir -p build + - cd build + - cmake .. + - cmake --build .