Make a separate target for sfizz::internal, for tests and benchmarks

This commit is contained in:
Jean Pierre Cimalando 2020-12-14 12:54:16 +01:00
parent e78edbb7ce
commit f063062f7c
12 changed files with 93 additions and 63 deletions

View file

@ -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})

View file

@ -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()

View file

@ -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")

View file

@ -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

View file

@ -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)

21
external/atomic_queue/LICENSE vendored Normal file
View file

@ -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.

View file

@ -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)

View file

@ -32,6 +32,7 @@
#include "Config.h"
#include "Debug.h"
#include "Oversampler.h"
#include <ThreadPool.h>
#include "absl/types/span.h"
#include "absl/strings/match.h"
#include "absl/memory/memory.h"
@ -44,7 +45,6 @@
#else
#include <pthread.h>
#endif
#include "threadpool/ThreadPool.h"
using namespace std::placeholders;
static std::weak_ptr<ThreadPool> globalThreadPoolWeakPtr;

View file

@ -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)