From c110acc966258ceffe5937ca669ed0b87173f306 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 1 Feb 2021 22:04:02 +0100 Subject: [PATCH] Provide the spin mutex as internal library --- common.mk | 6 ++- src/CMakeLists.txt | 14 +++++-- src/sfizz/FilePool.h | 3 +- .../utility/{ => spin_mutex}/SpinMutex.cpp | 0 .../utility/{ => spin_mutex}/SpinMutex.h | 0 src/sfizz/utility/spin_mutex/spin_mutex.cpp | 37 +++++++++++++++++++ src/sfizz/utility/spin_mutex/spin_mutex.h | 24 ++++++++++++ tests/CMakeLists.txt | 2 +- tests/ConcurrencyT.cpp | 2 +- 9 files changed, 79 insertions(+), 9 deletions(-) rename src/sfizz/utility/{ => spin_mutex}/SpinMutex.cpp (100%) rename src/sfizz/utility/{ => spin_mutex}/SpinMutex.h (100%) create mode 100644 src/sfizz/utility/spin_mutex/spin_mutex.cpp create mode 100644 src/sfizz/utility/spin_mutex/spin_mutex.h diff --git a/common.mk b/common.mk index 4efdbc57..5c7cf10f 100644 --- a/common.mk +++ b/common.mk @@ -117,7 +117,7 @@ SFIZZ_SOURCES = \ src/sfizz/Synth.cpp \ src/sfizz/SynthMessaging.cpp \ src/sfizz/Tuning.cpp \ - src/sfizz/utility/SpinMutex.cpp \ + src/sfizz/utility/spin_mutex/SpinMutex.cpp \ src/sfizz/Voice.cpp \ src/sfizz/VoiceManager.cpp \ src/sfizz/VoiceStealing.cpp \ @@ -126,7 +126,9 @@ SFIZZ_SOURCES = \ ### Other internal -SFIZZ_C_FLAGS += -I$(SFIZZ_DIR)/src/sfizz +SFIZZ_C_FLAGS += \ + -I$(SFIZZ_DIR)/src/sfizz \ + -I$(SFIZZ_DIR)/src/sfizz/utility/spin_mutex # Pkg-config dependency diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6786663e..2a574522 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -26,7 +26,6 @@ set(SFIZZ_HEADERS sfizz/Curve.h sfizz/Debug.h sfizz/utility/NumericId.h - sfizz/utility/SpinMutex.h sfizz/utility/XmlHelpers.h sfizz/modulations/ModId.h sfizz/modulations/ModKey.h @@ -163,7 +162,6 @@ set(SFIZZ_SOURCES sfizz/modulations/sources/FlexEnvelope.cpp sfizz/modulations/sources/ADSREnvelope.cpp sfizz/modulations/sources/LFO.cpp - sfizz/utility/SpinMutex.cpp sfizz/effects/Nothing.cpp sfizz/effects/Filter.cpp sfizz/effects/Eq.cpp @@ -239,13 +237,23 @@ target_sources(sfizz_messaging PRIVATE target_include_directories(sfizz_messaging PUBLIC ".") target_link_libraries(sfizz_messaging PUBLIC absl::strings) +# Sfizz spinlock mutex +add_library(sfizz_spin_mutex STATIC + sfizz/utility/spin_mutex/spin_mutex.h + sfizz/utility/spin_mutex/spin_mutex.cpp + sfizz/utility/spin_mutex/SpinMutex.h + sfizz/utility/spin_mutex/SpinMutex.cpp) +target_include_directories(sfizz_spin_mutex PUBLIC sfizz/utility/spin_mutex) +target_link_libraries(sfizz_spin_mutex PRIVATE sfizz::atomic_queue) +add_library(sfizz::spin_mutex ALIAS sfizz_spin_mutex) + # Sfizz internals (use this for testing) add_library(sfizz_internal STATIC) add_library(sfizz::internal ALIAS sfizz_internal) target_sources(sfizz_internal PRIVATE ${SFIZZ_HEADERS} ${SFIZZ_SOURCES} ${FAUST_FILES}) target_include_directories(sfizz_internal PUBLIC "." "sfizz") target_link_libraries(sfizz_internal - PUBLIC absl::strings absl::span sfizz::filesystem sfizz::atomic_queue + PUBLIC absl::strings absl::span sfizz::filesystem sfizz::atomic_queue sfizz::spin_mutex PRIVATE sfizz::parser sfizz::messaging absl::flat_hash_map Threads::Threads st_audiofile sfizz::pugixml sfizz::spline sfizz::tunings sfizz::hiir sfizz::kissfft sfizz::cephes sfizz::cpuid sfizz::threadpool sfizz::jsl sfizz::atomic) if(SFIZZ_USE_SNDFILE) target_compile_definitions(sfizz_internal PUBLIC "SFIZZ_USE_SNDFILE=1") diff --git a/src/sfizz/FilePool.h b/src/sfizz/FilePool.h index 7f8be842..fa67db72 100644 --- a/src/sfizz/FilePool.h +++ b/src/sfizz/FilePool.h @@ -33,7 +33,7 @@ #include "FileId.h" #include "FileMetadata.h" #include "SIMDHelpers.h" -#include "utility/SpinMutex.h" +#include #include "ghc/fs_std.hpp" #include #include @@ -43,7 +43,6 @@ #include #include #include -#include "utility/SpinMutex.h" class ThreadPool; namespace sfz { diff --git a/src/sfizz/utility/SpinMutex.cpp b/src/sfizz/utility/spin_mutex/SpinMutex.cpp similarity index 100% rename from src/sfizz/utility/SpinMutex.cpp rename to src/sfizz/utility/spin_mutex/SpinMutex.cpp diff --git a/src/sfizz/utility/SpinMutex.h b/src/sfizz/utility/spin_mutex/SpinMutex.h similarity index 100% rename from src/sfizz/utility/SpinMutex.h rename to src/sfizz/utility/spin_mutex/SpinMutex.h diff --git a/src/sfizz/utility/spin_mutex/spin_mutex.cpp b/src/sfizz/utility/spin_mutex/spin_mutex.cpp new file mode 100644 index 00000000..af786711 --- /dev/null +++ b/src/sfizz/utility/spin_mutex/spin_mutex.cpp @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: BSD-2-Clause + +// This code is part of the sfizz library and is licensed under a BSD 2-clause +// license. You should have receive a LICENSE.md file along with the code. +// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz + +#include "spin_mutex.h" +#include "SpinMutex.h" + +struct spin_mutex_ { + SpinMutex mtx; +}; + +spin_mutex_t* spin_mutex_create() +{ + return new spin_mutex_t; +} + +void spin_mutex_destroy(spin_mutex_t* mtx) +{ + delete mtx; +} + +void spin_mutex_lock(spin_mutex_t* mtx) +{ + mtx->mtx.lock(); +} + +void spin_mutex_unlock(spin_mutex_t* mtx) +{ + mtx->mtx.unlock(); +} + +bool spin_mutex_trylock(spin_mutex_t* mtx) +{ + return mtx->mtx.try_lock(); +} diff --git a/src/sfizz/utility/spin_mutex/spin_mutex.h b/src/sfizz/utility/spin_mutex/spin_mutex.h new file mode 100644 index 00000000..63c9053f --- /dev/null +++ b/src/sfizz/utility/spin_mutex/spin_mutex.h @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: BSD-2-Clause + +// This code is part of the sfizz library and is licensed under a BSD 2-clause +// license. You should have receive a LICENSE.md file along with the code. +// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz + +#pragma once +#include + +#if defined(__cplusplus) +extern "C" { +#endif + +typedef struct spin_mutex_ spin_mutex_t; + +spin_mutex_t* spin_mutex_create(); +void spin_mutex_destroy(spin_mutex_t* mtx); +void spin_mutex_lock(spin_mutex_t* mtx); +void spin_mutex_unlock(spin_mutex_t* mtx); +bool spin_mutex_trylock(spin_mutex_t* mtx); + +#if defined(__cplusplus) +} // extern "C" +#endif diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 15c1d0d6..6e28170f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -46,7 +46,7 @@ set(SFIZZ_TEST_SOURCES ) add_executable(sfizz_tests ${SFIZZ_TEST_SOURCES}) -target_link_libraries(sfizz_tests PRIVATE sfizz::internal sfizz::jsl) +target_link_libraries(sfizz_tests PRIVATE sfizz::internal sfizz::spin_mutex sfizz::jsl) sfizz_enable_lto_if_needed(sfizz_tests) sfizz_enable_fast_math(sfizz_tests) diff --git a/tests/ConcurrencyT.cpp b/tests/ConcurrencyT.cpp index 9ec72cd5..f82e20bd 100644 --- a/tests/ConcurrencyT.cpp +++ b/tests/ConcurrencyT.cpp @@ -4,8 +4,8 @@ // license. You should have receive a LICENSE.md file along with the code. // If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz -#include "sfizz/utility/SpinMutex.h" #include "catch2/catch.hpp" +#include #include #include #include