From f063062f7cf8caa561213cad5933a0969939dd04 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 14 Dec 2020 12:54:16 +0100 Subject: [PATCH] Make a separate target for sfizz::internal, for tests and benchmarks --- benchmarks/CMakeLists.txt | 8 +- clients/CMakeLists.txt | 2 +- cmake/SfizzConfig.cmake | 8 ++ common.mk | 8 ++ demos/CMakeLists.txt | 28 +++---- external/atomic_queue/LICENSE | 21 +++++ .../include}/atomic_queue/atomic_queue.h | 0 .../atomic_queue/include}/atomic_queue/defs.h | 0 .../threadpool/ThreadPool.h | 0 src/CMakeLists.txt | 76 +++++++++---------- src/sfizz/FilePool.cpp | 2 +- tests/CMakeLists.txt | 3 +- 12 files changed, 93 insertions(+), 63 deletions(-) create mode 100644 external/atomic_queue/LICENSE rename {src/external => external/atomic_queue/include}/atomic_queue/atomic_queue.h (100%) rename {src/external => external/atomic_queue/include}/atomic_queue/defs.h (100%) rename {src/external => external}/threadpool/ThreadPool.h (100%) diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 89c85a56..c73e23cf 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -44,7 +44,7 @@ sfizz_add_benchmark(bm_gain BM_gain.cpp) sfizz_add_benchmark(bm_divide BM_divide.cpp) sfizz_add_benchmark(bm_ramp BM_ramp.cpp) sfizz_add_benchmark(bm_ADSR BM_ADSR.cpp) -target_link_libraries(bm_ADSR PRIVATE sfizz::sfizz) +target_link_libraries(bm_ADSR PRIVATE sfizz::internal) sfizz_add_benchmark(bm_add BM_add.cpp) sfizz_add_benchmark(bm_multiplyAdd BM_multiplyAdd.cpp) @@ -66,11 +66,11 @@ sfizz_add_benchmark(bm_clamp BM_clamp.cpp) sfizz_add_benchmark(bm_allWithin BM_allWithin.cpp) sfizz_add_benchmark(bm_logger BM_logger.cpp) -target_link_libraries(bm_logger PRIVATE sfizz::sfizz) +target_link_libraries(bm_logger PRIVATE sfizz::internal) sfizz_add_benchmark(bm_smoothers BM_smoothers.cpp) -target_link_libraries(bm_smoothers PRIVATE sfizz::sfizz) +target_link_libraries(bm_smoothers PRIVATE sfizz::internal) sfizz_add_benchmark(bm_powerFollower BM_powerFollower.cpp) -target_link_libraries(bm_powerFollower PRIVATE sfizz::sfizz) +target_link_libraries(bm_powerFollower PRIVATE sfizz::internal) if(TARGET sfizz::samplerate) sfizz_add_benchmark(bm_resample BM_resample.cpp ${BENCHMARK_SIMD_SOURCES}) diff --git a/clients/CMakeLists.txt b/clients/CMakeLists.txt index 7b9e3453..5c59c26a 100644 --- a/clients/CMakeLists.txt +++ b/clients/CMakeLists.txt @@ -22,7 +22,7 @@ if(SFIZZ_RENDER) target_compile_definitions(sfizz_fmidi PUBLIC "FMIDI_STATIC=1" "FMIDI_DISABLE_DESCRIBE_API=1") add_executable(sfizz_render MidiHelpers.h sfizz_render.cpp) - target_link_libraries(sfizz_render PRIVATE sfizz::sfizz sfizz::fmidi sfizz::sndfile sfizz::cxxopts) + target_link_libraries(sfizz_render PRIVATE sfizz::internal sfizz::fmidi sfizz::sndfile sfizz::cxxopts) sfizz_enable_lto_if_needed(sfizz_render) install(TARGETS sfizz_render DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT "render" OPTIONAL) endif() diff --git a/cmake/SfizzConfig.cmake b/cmake/SfizzConfig.cmake index c656fd78..4b6727c4 100644 --- a/cmake/SfizzConfig.cmake +++ b/cmake/SfizzConfig.cmake @@ -158,6 +158,14 @@ add_library(sfizz_hiir INTERFACE) add_library(sfizz::hiir ALIAS sfizz_hiir) target_include_directories(sfizz_hiir INTERFACE "src/external/hiir") +add_library(sfizz_threadpool INTERFACE) +add_library(sfizz::threadpool ALIAS sfizz_threadpool) +target_include_directories(sfizz_threadpool INTERFACE "external/threadpool") + +add_library(sfizz_atomic_queue INTERFACE) +add_library(sfizz::atomic_queue ALIAS sfizz_atomic_queue) +target_include_directories(sfizz_atomic_queue INTERFACE "external/atomic_queue/include") + add_library(sfizz_filesystem INTERFACE) add_library(sfizz::filesystem ALIAS sfizz_filesystem) target_include_directories(sfizz_filesystem INTERFACE "external/filesystem/include") diff --git a/common.mk b/common.mk index cda6e2e4..d4a63262 100644 --- a/common.mk +++ b/common.mk @@ -178,6 +178,14 @@ endif SFIZZ_CXX_FLAGS += -I$(SFIZZ_DIR)/src/external/hiir +# threadpool dependency + +SFIZZ_CXX_FLAGS += -I$(SFIZZ_DIR)/external/threadpool + +# atomic_queue dependency + +SFIZZ_CXX_FLAGS += -I$(SFIZZ_DIR)/external/atomic_queue/include + # ghc::filesystem dependency SFIZZ_CXX_FLAGS += -I$(SFIZZ_DIR)/external/filesystem/include diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt index b2d715f8..ff0be6ff 100644 --- a/demos/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -8,54 +8,54 @@ if(TARGET Qt5::Widgets) if(JACK_FOUND) add_executable(sfizz_demo_filters DemoFilters.cpp) target_include_directories(sfizz_demo_filters PRIVATE ${JACK_INCLUDE_DIRS}) - target_link_libraries(sfizz_demo_filters PRIVATE sfizz::sfizz Qt5::Widgets ${JACK_LIBRARIES}) + target_link_libraries(sfizz_demo_filters PRIVATE sfizz::internal Qt5::Widgets ${JACK_LIBRARIES}) set_target_properties(sfizz_demo_filters PROPERTIES AUTOUIC ON) add_executable(sfizz_demo_smooth DemoSmooth.cpp) target_include_directories(sfizz_demo_smooth PRIVATE ${JACK_INCLUDE_DIRS}) - target_link_libraries(sfizz_demo_smooth PRIVATE sfizz::sfizz Qt5::Widgets ${JACK_LIBRARIES}) + target_link_libraries(sfizz_demo_smooth PRIVATE sfizz::internal Qt5::Widgets ${JACK_LIBRARIES}) set_target_properties(sfizz_demo_smooth PROPERTIES AUTOUIC ON) add_executable(sfizz_demo_stereo DemoStereo.cpp) target_include_directories(sfizz_demo_stereo PRIVATE ${JACK_INCLUDE_DIRS}) - target_link_libraries(sfizz_demo_stereo PRIVATE sfizz::sfizz Qt5::Widgets ${JACK_LIBRARIES}) + target_link_libraries(sfizz_demo_stereo PRIVATE sfizz::internal Qt5::Widgets ${JACK_LIBRARIES}) set_target_properties(sfizz_demo_stereo PROPERTIES AUTOUIC ON) add_executable(sfizz_demo_wavetables DemoWavetables.cpp) target_include_directories(sfizz_demo_wavetables PRIVATE ${JACK_INCLUDE_DIRS}) - target_link_libraries(sfizz_demo_wavetables PRIVATE sfizz::sfizz Qt5::Widgets ${JACK_LIBRARIES}) + target_link_libraries(sfizz_demo_wavetables PRIVATE sfizz::internal Qt5::Widgets ${JACK_LIBRARIES}) set_target_properties(sfizz_demo_wavetables PROPERTIES AUTOUIC ON) endif() add_executable(sfizz_demo_parser DemoParser.cpp) - target_link_libraries(sfizz_demo_parser PRIVATE sfizz_parser Qt5::Widgets) + target_link_libraries(sfizz_demo_parser PRIVATE sfizz::parser Qt5::Widgets) set_target_properties(sfizz_demo_parser PROPERTIES AUTOUIC ON) add_executable(sfizz_demo_stretch_tuning DemoStretchTuning.cpp) - target_link_libraries(sfizz_demo_stretch_tuning PRIVATE sfizz::sfizz Qt5::Widgets) + target_link_libraries(sfizz_demo_stretch_tuning PRIVATE sfizz::internal Qt5::Widgets) set_target_properties(sfizz_demo_stretch_tuning PROPERTIES AUTOUIC ON) endif() add_executable(eq_apply EQ.cpp) -target_link_libraries(eq_apply PRIVATE sfizz::sfizz sfizz::sndfile sfizz::cxxopts sfizz::filesystem) +target_link_libraries(eq_apply PRIVATE sfizz::internal sfizz::sndfile sfizz::cxxopts sfizz::filesystem) add_executable(filter_apply Filter.cpp) -target_link_libraries(filter_apply PRIVATE sfizz::sfizz sfizz::sndfile sfizz::cxxopts sfizz::filesystem) +target_link_libraries(filter_apply PRIVATE sfizz::internal sfizz::sndfile sfizz::cxxopts sfizz::filesystem) add_executable(sfizz_plot_curve PlotCurve.cpp) -target_link_libraries(sfizz_plot_curve PRIVATE sfizz::sfizz) +target_link_libraries(sfizz_plot_curve PRIVATE sfizz::internal) add_executable(sfizz_plot_wavetables PlotWavetables.cpp) -target_link_libraries(sfizz_plot_wavetables PRIVATE sfizz::sfizz) +target_link_libraries(sfizz_plot_wavetables PRIVATE sfizz::internal) add_executable(sfizz_plot_lfo PlotLFO.cpp) -target_link_libraries(sfizz_plot_lfo PRIVATE sfizz::sfizz sfizz::sndfile sfizz::cxxopts) +target_link_libraries(sfizz_plot_lfo PRIVATE sfizz::internal sfizz::sndfile sfizz::cxxopts) add_executable(sfizz_file_instrument FileInstrument.cpp) -target_link_libraries(sfizz_file_instrument PRIVATE sfizz::sfizz sfizz::sndfile) +target_link_libraries(sfizz_file_instrument PRIVATE sfizz::internal sfizz::sndfile) add_executable(sfizz_file_wavetable FileWavetable.cpp) -target_link_libraries(sfizz_file_wavetable PRIVATE sfizz::sfizz) +target_link_libraries(sfizz_file_wavetable PRIVATE sfizz::internal) add_executable(sfizz_tuning Tuning.cpp) -target_link_libraries(sfizz_tuning PRIVATE sfizz::sfizz sfizz::cxxopts) +target_link_libraries(sfizz_tuning PRIVATE sfizz::internal sfizz::cxxopts) diff --git a/external/atomic_queue/LICENSE b/external/atomic_queue/LICENSE new file mode 100644 index 00000000..c1d34669 --- /dev/null +++ b/external/atomic_queue/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Maxim Egorushkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/external/atomic_queue/atomic_queue.h b/external/atomic_queue/include/atomic_queue/atomic_queue.h similarity index 100% rename from src/external/atomic_queue/atomic_queue.h rename to external/atomic_queue/include/atomic_queue/atomic_queue.h diff --git a/src/external/atomic_queue/defs.h b/external/atomic_queue/include/atomic_queue/defs.h similarity index 100% rename from src/external/atomic_queue/defs.h rename to external/atomic_queue/include/atomic_queue/defs.h diff --git a/src/external/threadpool/ThreadPool.h b/external/threadpool/ThreadPool.h similarity index 100% rename from src/external/threadpool/ThreadPool.h rename to external/threadpool/ThreadPool.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 88b1bf78..ecc2376c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -238,60 +238,42 @@ target_sources(sfizz_messaging PRIVATE target_include_directories(sfizz_messaging PUBLIC ".") target_link_libraries(sfizz_messaging PUBLIC absl::strings) -# Sfizz static library -add_library(sfizz_static STATIC) -add_library(sfizz::static ALIAS sfizz_static) -target_sources(sfizz_static PRIVATE - ${SFIZZ_HEADERS} ${SFIZZ_SOURCES} ${FAUST_FILES} sfizz/sfizz_wrapper.cpp sfizz/sfizz.cpp) -target_include_directories(sfizz_static PUBLIC .) -target_include_directories(sfizz_static PUBLIC external) -target_link_libraries(sfizz_static PUBLIC absl::strings absl::span sfizz::filesystem) -target_link_libraries(sfizz_static PRIVATE sfizz_parser sfizz::messaging absl::flat_hash_map Threads::Threads st_audiofile sfizz::pugixml sfizz::spline sfizz::tunings sfizz::hiir sfizz::kissfft sfizz::cpuid sfizz::jsl sfizz::atomic) -set_target_properties(sfizz_static PROPERTIES OUTPUT_NAME sfizz PUBLIC_HEADER "sfizz.h;sfizz.hpp;sfizz_message.h") +# 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 .) +target_link_libraries(sfizz_internal + PUBLIC absl::strings absl::span sfizz::filesystem sfizz::atomic_queue + PRIVATE sfizz::parser sfizz::messaging absl::flat_hash_map Threads::Threads st_audiofile sfizz::pugixml sfizz::spline sfizz::tunings sfizz::hiir sfizz::kissfft sfizz::cpuid sfizz::threadpool sfizz::jsl sfizz::atomic) if(SFIZZ_USE_SNDFILE) - target_compile_definitions(sfizz_static PUBLIC SFIZZ_USE_SNDFILE=1) - target_link_libraries(sfizz_static PUBLIC st_audiofile) + target_compile_definitions(sfizz_internal PUBLIC "SFIZZ_USE_SNDFILE=1") + target_link_libraries(sfizz_internal PUBLIC st_audiofile) endif() if(WIN32) - target_compile_definitions(sfizz_static PRIVATE _USE_MATH_DEFINES) + target_compile_definitions(sfizz_internal PRIVATE _USE_MATH_DEFINES) endif() if(SFIZZ_RELEASE_ASSERTS) - target_compile_definitions(sfizz_static PRIVATE "SFIZZ_ENABLE_RELEASE_ASSERT=1") + target_compile_definitions(sfizz_internal PRIVATE "SFIZZ_ENABLE_RELEASE_ASSERT=1") endif() -sfizz_enable_fast_math(sfizz_static) +sfizz_enable_fast_math(sfizz_internal) -if(WIN32) - include(VSTConfig) - configure_file(${PROJECT_SOURCE_DIR}/scripts/innosetup.iss.in ${PROJECT_BINARY_DIR}/innosetup.iss @ONLY) -endif() - -configure_file(${PROJECT_SOURCE_DIR}/scripts/doxygen/Doxyfile.in ${PROJECT_SOURCE_DIR}/Doxyfile @ONLY) - -add_library(sfizz::sfizz ALIAS sfizz_static) +# Sfizz static library +add_library(sfizz_static STATIC sfizz/sfizz_wrapper.cpp sfizz/sfizz.cpp) +add_library(sfizz::static ALIAS sfizz_static) +target_include_directories(sfizz_static PUBLIC .) +target_link_libraries(sfizz_static PRIVATE sfizz::internal) +set_target_properties(sfizz_static PROPERTIES OUTPUT_NAME "sfizz" PUBLIC_HEADER "sfizz.h;sfizz.hpp;sfizz_message.h") # Shared library and installation target if(SFIZZ_SHARED) - add_library(sfizz_shared SHARED) + add_library(sfizz_shared SHARED sfizz/sfizz_wrapper.cpp sfizz/sfizz.cpp) add_library(sfizz::shared ALIAS sfizz_shared) - target_sources(sfizz_shared PRIVATE - ${SFIZZ_HEADERS} ${SFIZZ_SOURCES} ${FAUST_FILES} sfizz/sfizz_wrapper.cpp sfizz/sfizz.cpp) - target_include_directories(sfizz_shared PRIVATE .) - target_include_directories(sfizz_shared PRIVATE external) - target_link_libraries(sfizz_shared PRIVATE absl::strings absl::span sfizz_parser sfizz::messaging absl::flat_hash_map Threads::Threads st_audiofile sfizz::pugixml sfizz::spline sfizz::tunings sfizz::hiir sfizz::kissfft sfizz::cpuid sfizz::jsl sfizz::filesystem sfizz::atomic) - if(SFIZZ_USE_SNDFILE) - target_compile_definitions(sfizz_shared PUBLIC SFIZZ_USE_SNDFILE=1) - target_link_libraries(sfizz_shared PUBLIC st_audiofile) - endif() - if(WIN32) - target_compile_definitions(sfizz_shared PRIVATE _USE_MATH_DEFINES) - endif() - if(SFIZZ_RELEASE_ASSERTS) - target_compile_definitions(sfizz_shared PRIVATE "SFIZZ_ENABLE_RELEASE_ASSERT=1") - endif() + target_include_directories(sfizz_shared PUBLIC .) + target_link_libraries(sfizz_shared PRIVATE sfizz::internal) target_compile_definitions(sfizz_shared PRIVATE SFIZZ_EXPORT_SYMBOLS) - set_target_properties(sfizz_shared PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} OUTPUT_NAME sfizz PUBLIC_HEADER "sfizz.h;sfizz.hpp;sfizz_message.h") + set_target_properties(sfizz_shared PROPERTIES SOVERSION "${PROJECT_VERSION_MAJOR}" OUTPUT_NAME "sfizz" PUBLIC_HEADER "sfizz.h;sfizz.hpp;sfizz_message.h") sfizz_enable_lto_if_needed(sfizz_shared) - sfizz_enable_fast_math(sfizz_shared) if(NOT MSVC) install(TARGETS sfizz_shared @@ -305,3 +287,15 @@ if(SFIZZ_SHARED) COMPONENT "development") endif() endif() + +# Generic library alias +add_library(sfizz::sfizz ALIAS sfizz_static) + +# Windows installer +if(WIN32) + include(VSTConfig) + configure_file(${PROJECT_SOURCE_DIR}/scripts/innosetup.iss.in ${PROJECT_BINARY_DIR}/innosetup.iss @ONLY) +endif() + +# Doxygen +configure_file(${PROJECT_SOURCE_DIR}/scripts/doxygen/Doxyfile.in ${PROJECT_SOURCE_DIR}/Doxyfile @ONLY) diff --git a/src/sfizz/FilePool.cpp b/src/sfizz/FilePool.cpp index 6b39bbf7..b86bf76f 100644 --- a/src/sfizz/FilePool.cpp +++ b/src/sfizz/FilePool.cpp @@ -32,6 +32,7 @@ #include "Config.h" #include "Debug.h" #include "Oversampler.h" +#include #include "absl/types/span.h" #include "absl/strings/match.h" #include "absl/memory/memory.h" @@ -44,7 +45,6 @@ #else #include #endif -#include "threadpool/ThreadPool.h" using namespace std::placeholders; static std::weak_ptr globalThreadPoolWeakPtr; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8d4d34a2..83370842 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -48,9 +48,8 @@ set(SFIZZ_TEST_SOURCES ) add_executable(sfizz_tests ${SFIZZ_TEST_SOURCES}) -target_link_libraries(sfizz_tests PRIVATE sfizz::sfizz sfizz::jsl) +target_link_libraries(sfizz_tests PRIVATE sfizz::internal sfizz::jsl) sfizz_enable_lto_if_needed(sfizz_tests) sfizz_enable_fast_math(sfizz_tests) -# target_link_libraries(sfizz_tests PRIVATE absl::strings absl::str_format absl::flat_hash_map cnpy absl::span absl::algorithm) file(COPY "." DESTINATION ${CMAKE_BINARY_DIR}/tests)