From f3c1b664dddf48b43d9c4ee23a14f42bf420a0c4 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 14 Dec 2020 13:56:52 +0100 Subject: [PATCH 1/4] Remove project() where not necessary --- benchmarks/CMakeLists.txt | 2 -- clients/CMakeLists.txt | 2 -- tests/CMakeLists.txt | 2 -- 3 files changed, 6 deletions(-) diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index c73e23cf..209faaf5 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -1,5 +1,3 @@ -project(sfizz) - # Check SIMD include(SfizzSIMDSourceFiles) set(BENCHMARK_SIMD_SOURCES) diff --git a/clients/CMakeLists.txt b/clients/CMakeLists.txt index 5c59c26a..633dc727 100644 --- a/clients/CMakeLists.txt +++ b/clients/CMakeLists.txt @@ -1,5 +1,3 @@ -project(sfizz) - if(SFIZZ_JACK) find_package(PkgConfig REQUIRED) pkg_check_modules(JACK "jack" REQUIRED) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 83370842..15c1d0d6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,8 +1,6 @@ ############################### # Test application -project(sfizz) - set(SFIZZ_TEST_SOURCES DirectRegionT.cpp RegionValuesT.cpp From a3f93f5d0b41bdbf6a18c763e4d8e743d7fbf05d Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 14 Dec 2020 14:11:57 +0100 Subject: [PATCH 2/4] Reorganize the dependency checking --- CMakeLists.txt | 1 + clients/CMakeLists.txt | 14 +- cmake/SfizzConfig.cmake | 109 ------------ cmake/SfizzDeps.cmake | 165 ++++++++++++++++++ demos/CMakeLists.txt | 42 ++--- devtools/CMakeLists.txt | 14 +- .../external => external}/fmidi/LICENSE.md | 0 .../fmidi/sources/fmidi/fmidi.h | 0 .../fmidi/sources/fmidi/fmidi_mini.cpp | 0 src/CMakeLists.txt | 3 - src/external/cpuid/CMakeLists.txt | 7 - src/external/kiss_fft/CMakeLists.txt | 13 -- 12 files changed, 187 insertions(+), 181 deletions(-) create mode 100644 cmake/SfizzDeps.cmake rename {clients/external => external}/fmidi/LICENSE.md (100%) rename {clients/external => external}/fmidi/sources/fmidi/fmidi.h (100%) rename {clients/external => external}/fmidi/sources/fmidi/fmidi_mini.cpp (100%) delete mode 100644 src/external/cpuid/CMakeLists.txt delete mode 100644 src/external/kiss_fft/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 83c8c5a5..e26cc1bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,7 @@ option (SFIZZ_STATIC_DEPENDENCIES "Link dependencies statically [default: OFF]" option (SFIZZ_RELEASE_ASSERTS "Forced assertions in release builds [default: OFF]" OFF) include (SfizzConfig) +include (SfizzDeps) # Don't use IPO in non Release builds include (CheckIPO) diff --git a/clients/CMakeLists.txt b/clients/CMakeLists.txt index 633dc727..a48af11a 100644 --- a/clients/CMakeLists.txt +++ b/clients/CMakeLists.txt @@ -1,24 +1,12 @@ if(SFIZZ_JACK) - find_package(PkgConfig REQUIRED) - pkg_check_modules(JACK "jack" REQUIRED) - link_directories(${JACK_LIBRARY_DIRS}) - add_executable(sfizz_jack MidiHelpers.h jack_client.cpp) - target_include_directories(sfizz_jack PRIVATE ${JACK_INCLUDE_DIRS}) - target_link_libraries(sfizz_jack PRIVATE sfizz::sfizz absl::flags_parse ${JACK_LIBRARIES}) + target_link_libraries(sfizz_jack PRIVATE sfizz::sfizz sfizz::jack absl::flags_parse) sfizz_enable_lto_if_needed(sfizz_jack) install(TARGETS sfizz_jack DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT "jack" OPTIONAL) endif() if(SFIZZ_RENDER) - add_library(sfizz_fmidi STATIC - "external/fmidi/sources/fmidi/fmidi.h" - "external/fmidi/sources/fmidi/fmidi_mini.cpp") - add_library(sfizz::fmidi ALIAS sfizz_fmidi) - target_include_directories(sfizz_fmidi PUBLIC "external/fmidi/sources") - 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::internal sfizz::fmidi sfizz::sndfile sfizz::cxxopts) sfizz_enable_lto_if_needed(sfizz_render) diff --git a/cmake/SfizzConfig.cmake b/cmake/SfizzConfig.cmake index 4b6727c4..56580ed3 100644 --- a/cmake/SfizzConfig.cmake +++ b/cmake/SfizzConfig.cmake @@ -1,6 +1,5 @@ include(CMakeDependentOption) include(CheckCXXCompilerFlag) -include(CheckLibraryExists) include(GNUWarnings) set(CMAKE_CXX_STANDARD 11 CACHE STRING "C++ standard to be used") @@ -30,26 +29,6 @@ if(WIN32) add_compile_definitions(NOMINMAX) endif() -# Find macOS system libraries -if(APPLE) - find_library(APPLE_COREFOUNDATION_LIBRARY "CoreFoundation") - find_library(APPLE_FOUNDATION_LIBRARY "Foundation") - find_library(APPLE_COCOA_LIBRARY "Cocoa") - find_library(APPLE_CARBON_LIBRARY "Carbon") - find_library(APPLE_OPENGL_LIBRARY "OpenGL") - find_library(APPLE_ACCELERATE_LIBRARY "Accelerate") - find_library(APPLE_QUARTZCORE_LIBRARY "QuartzCore") - find_library(APPLE_AUDIOTOOLBOX_LIBRARY "AudioToolbox") - find_library(APPLE_AUDIOUNIT_LIBRARY "AudioUnit") - find_library(APPLE_COREAUDIO_LIBRARY "CoreAudio") - find_library(APPLE_COREMIDI_LIBRARY "CoreMIDI") - # See https://stackoverflow.com/a/54103956 - # and https://stackoverflow.com/a/21692023 - # Apparently this is not needed in Travis CI using addons - # but it is in Appveyor instead - list(APPEND CMAKE_PREFIX_PATH /usr/local) -endif() - # The variable CMAKE_SYSTEM_PROCESSOR is incorrect on Visual studio... # see https://gitlab.kitware.com/cmake/cmake/issues/15170 @@ -90,48 +69,6 @@ function(sfizz_enable_fast_math NAME) endif() endfunction() -# The jsl utility library for C++ -add_library(sfizz_jsl INTERFACE) -add_library(sfizz::jsl ALIAS sfizz_jsl) -target_include_directories(sfizz_jsl INTERFACE "external/jsl/include") - -# The cxxopts library -add_library(sfizz_cxxopts INTERFACE) -add_library(sfizz::cxxopts ALIAS sfizz_cxxopts) -target_include_directories(sfizz_cxxopts INTERFACE "external/cxxopts") - -# The sndfile library -if(SFIZZ_USE_SNDFILE OR SFIZZ_DEMOS OR SFIZZ_BENCHMARKS OR SFIZZ_RENDER) - add_library(sfizz_sndfile INTERFACE) - add_library(sfizz::sndfile ALIAS sfizz_sndfile) - if(SFIZZ_USE_VCPKG OR CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - find_package(SndFile CONFIG REQUIRED) - find_path(SNDFILE_INCLUDE_DIR "sndfile.hh") - target_include_directories(sfizz_sndfile INTERFACE "${SNDFILE_INCLUDE_DIR}") - target_link_libraries(sfizz_sndfile INTERFACE SndFile::sndfile) - else() - find_package(PkgConfig REQUIRED) - pkg_check_modules(SNDFILE "sndfile" REQUIRED) - target_include_directories(sfizz_sndfile INTERFACE ${SNDFILE_INCLUDE_DIRS}) - if(SFIZZ_STATIC_DEPENDENCIES) - target_link_libraries(sfizz_sndfile INTERFACE ${SNDFILE_STATIC_LIBRARIES}) - else() - target_link_libraries(sfizz_sndfile INTERFACE ${SNDFILE_LIBRARIES}) - endif() - link_directories(${SNDFILE_LIBRARY_DIRS}) - endif() -endif() - -# The st_audiofile library -if(SFIZZ_USE_SNDFILE) - set(ST_AUDIO_FILE_USE_SNDFILE ON CACHE BOOL "" FORCE) - set(ST_AUDIO_FILE_EXTERNAL_SNDFILE "sfizz::sndfile" CACHE STRING "" FORCE) -else() - set(ST_AUDIO_FILE_USE_SNDFILE OFF CACHE BOOL "" FORCE) - set(ST_AUDIO_FILE_EXTERNAL_SNDFILE "" CACHE STRING "" FORCE) -endif() -add_subdirectory("external/st_audiofile" EXCLUDE_FROM_ALL) - # If we build with Clang, optionally use libc++. Enabled by default on Apple OS. cmake_dependent_option(USE_LIBCPP "Use libc++ with clang" "${APPLE}" "CMAKE_CXX_COMPILER_ID MATCHES Clang" OFF) @@ -142,49 +79,6 @@ if(USE_LIBCPP) add_link_options(-lc++abi) # New command on CMake master, not in 3.12 release endif() -add_library(sfizz_pugixml STATIC "src/external/pugixml/src/pugixml.cpp") -add_library(sfizz::pugixml ALIAS sfizz_pugixml) -target_include_directories(sfizz_pugixml PUBLIC "src/external/pugixml/src") - -add_library(sfizz_spline STATIC "src/external/spline/spline/spline.cpp") -add_library(sfizz::spline ALIAS sfizz_spline) -target_include_directories(sfizz_spline PUBLIC "src/external/spline") - -add_library(sfizz_tunings STATIC "src/external/tunings/src/Tunings.cpp") -add_library(sfizz::tunings ALIAS sfizz_tunings) -target_include_directories(sfizz_tunings PUBLIC "src/external/tunings/include") - -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") - -add_library(sfizz_atomic INTERFACE) -add_library(sfizz::atomic ALIAS sfizz_atomic) -if(UNIX AND NOT APPLE) - file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/check_libatomic") - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/check_libatomic/check_libatomic.c" "int main() { return 0; }") - try_compile(SFIZZ_LINK_LIBATOMIC "${CMAKE_CURRENT_BINARY_DIR}/check_libatomic" - SOURCES "${CMAKE_CURRENT_BINARY_DIR}/check_libatomic/check_libatomic.c" - LINK_LIBRARIES "atomic") - if(SFIZZ_LINK_LIBATOMIC) - target_link_libraries(sfizz_atomic INTERFACE "atomic") - endif() -else() - set(SFIZZ_LINK_LIBATOMIC FALSE) -endif() - # Don't show build information when building a different project function(show_build_info_if_needed) if(CMAKE_PROJECT_NAME STREQUAL "sfizz") @@ -204,7 +98,6 @@ Build tests: ${SFIZZ_TESTS} Use sndfile: ${SFIZZ_USE_SNDFILE} Use vcpkg: ${SFIZZ_USE_VCPKG} Statically link dependencies: ${SFIZZ_STATIC_DEPENDENCIES} -Link libatomic: ${SFIZZ_LINK_LIBATOMIC} Use clang libc++: ${USE_LIBCPP} Release asserts: ${SFIZZ_RELEASE_ASSERTS} @@ -217,5 +110,3 @@ Compiler CXX min size flags: ${CMAKE_CXX_FLAGS_MINSIZEREL} ") endif() endfunction() - -find_package(Threads REQUIRED) diff --git a/cmake/SfizzDeps.cmake b/cmake/SfizzDeps.cmake new file mode 100644 index 00000000..a5dcee06 --- /dev/null +++ b/cmake/SfizzDeps.cmake @@ -0,0 +1,165 @@ +# Find system threads +find_package(Threads REQUIRED) + +# Find macOS system libraries +if(APPLE) + find_library(APPLE_COREFOUNDATION_LIBRARY "CoreFoundation") + find_library(APPLE_FOUNDATION_LIBRARY "Foundation") + find_library(APPLE_COCOA_LIBRARY "Cocoa") + find_library(APPLE_CARBON_LIBRARY "Carbon") + find_library(APPLE_OPENGL_LIBRARY "OpenGL") + find_library(APPLE_ACCELERATE_LIBRARY "Accelerate") + find_library(APPLE_QUARTZCORE_LIBRARY "QuartzCore") + find_library(APPLE_AUDIOTOOLBOX_LIBRARY "AudioToolbox") + find_library(APPLE_AUDIOUNIT_LIBRARY "AudioUnit") + find_library(APPLE_COREAUDIO_LIBRARY "CoreAudio") + find_library(APPLE_COREMIDI_LIBRARY "CoreMIDI") +endif() + +# Set up macOS library paths +if(APPLE) + # See https://stackoverflow.com/a/54103956 + # and https://stackoverflow.com/a/21692023 + # Apparently this is not needed in Travis CI using addons + # but it is in Appveyor instead + list(APPEND CMAKE_PREFIX_PATH /usr/local) +endif() + +# The jsl utility library for C++ +add_library(sfizz_jsl INTERFACE) +add_library(sfizz::jsl ALIAS sfizz_jsl) +target_include_directories(sfizz_jsl INTERFACE "external/jsl/include") + +# The cxxopts library +add_library(sfizz_cxxopts INTERFACE) +add_library(sfizz::cxxopts ALIAS sfizz_cxxopts) +target_include_directories(sfizz_cxxopts INTERFACE "external/cxxopts") + +# The sndfile library +if(SFIZZ_USE_SNDFILE OR SFIZZ_DEMOS OR SFIZZ_BENCHMARKS OR SFIZZ_RENDER) + add_library(sfizz_sndfile INTERFACE) + add_library(sfizz::sndfile ALIAS sfizz_sndfile) + if(SFIZZ_USE_VCPKG OR CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + find_package(SndFile CONFIG REQUIRED) + find_path(SNDFILE_INCLUDE_DIR "sndfile.hh") + target_include_directories(sfizz_sndfile INTERFACE "${SNDFILE_INCLUDE_DIR}") + target_link_libraries(sfizz_sndfile INTERFACE SndFile::sndfile) + else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(SNDFILE "sndfile" REQUIRED) + target_include_directories(sfizz_sndfile INTERFACE ${SNDFILE_INCLUDE_DIRS}) + if(SFIZZ_STATIC_DEPENDENCIES) + target_link_libraries(sfizz_sndfile INTERFACE ${SNDFILE_STATIC_LIBRARIES}) + else() + target_link_libraries(sfizz_sndfile INTERFACE ${SNDFILE_LIBRARIES}) + endif() + link_directories(${SNDFILE_LIBRARY_DIRS}) + endif() +endif() + +# The st_audiofile library +if(SFIZZ_USE_SNDFILE) + set(ST_AUDIO_FILE_USE_SNDFILE ON CACHE BOOL "" FORCE) + set(ST_AUDIO_FILE_EXTERNAL_SNDFILE "sfizz::sndfile" CACHE STRING "" FORCE) +else() + set(ST_AUDIO_FILE_USE_SNDFILE OFF CACHE BOOL "" FORCE) + set(ST_AUDIO_FILE_EXTERNAL_SNDFILE "" CACHE STRING "" FORCE) +endif() +add_subdirectory("external/st_audiofile" EXCLUDE_FROM_ALL) + +# The pugixml library +add_library(sfizz_pugixml STATIC "src/external/pugixml/src/pugixml.cpp") +add_library(sfizz::pugixml ALIAS sfizz_pugixml) +target_include_directories(sfizz_pugixml PUBLIC "src/external/pugixml/src") + +# The spline library +add_library(sfizz_spline STATIC "src/external/spline/spline/spline.cpp") +add_library(sfizz::spline ALIAS sfizz_spline) +target_include_directories(sfizz_spline PUBLIC "src/external/spline") + +# The tunings library +add_library(sfizz_tunings STATIC "src/external/tunings/src/Tunings.cpp") +add_library(sfizz::tunings ALIAS sfizz_tunings) +target_include_directories(sfizz_tunings PUBLIC "src/external/tunings/include") + +# The hiir library +add_library(sfizz_hiir INTERFACE) +add_library(sfizz::hiir ALIAS sfizz_hiir) +target_include_directories(sfizz_hiir INTERFACE "src/external/hiir") + +# The kissfft library +add_library(sfizz_kissfft STATIC + "src/external/kiss_fft/kiss_fft.c" + "src/external/kiss_fft/tools/kiss_fftr.c") +add_library(sfizz::kissfft ALIAS sfizz_kissfft) +target_include_directories(sfizz_kissfft + PUBLIC "src/external/kiss_fft" + PUBLIC "src/external/kiss_fft/tools") + +# The cpuid library +add_library(sfizz_cpuid STATIC + "src/external/cpuid/src/cpuid/cpuinfo.cpp" + "src/external/cpuid/src/cpuid/version.cpp") +add_library(sfizz::cpuid ALIAS sfizz_cpuid) +set_property(TARGET sfizz_cpuid PROPERTY CXX_STANDARD 11) +target_include_directories(sfizz_cpuid + PUBLIC "src/external/cpuid/src" + PRIVATE "src/external/cpuid/platform/src") + +# The threadpool library +add_library(sfizz_threadpool INTERFACE) +add_library(sfizz::threadpool ALIAS sfizz_threadpool) +target_include_directories(sfizz_threadpool INTERFACE "external/threadpool") + +# The atomic_queue library +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") + +# The ghc::filesystem library +add_library(sfizz_filesystem INTERFACE) +add_library(sfizz::filesystem ALIAS sfizz_filesystem) +target_include_directories(sfizz_filesystem INTERFACE "external/filesystem/include") + +# The atomic library +add_library(sfizz_atomic INTERFACE) +add_library(sfizz::atomic ALIAS sfizz_atomic) +if(UNIX AND NOT APPLE) + file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/check_libatomic") + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/check_libatomic/check_libatomic.c" "int main() { return 0; }") + try_compile(SFIZZ_LINK_LIBATOMIC "${CMAKE_CURRENT_BINARY_DIR}/check_libatomic" + SOURCES "${CMAKE_CURRENT_BINARY_DIR}/check_libatomic/check_libatomic.c" + LINK_LIBRARIES "atomic") + if(SFIZZ_LINK_LIBATOMIC) + target_link_libraries(sfizz_atomic INTERFACE "atomic") + endif() +endif() + +# The jack library +if(SFIZZ_JACK) + find_package(PkgConfig REQUIRED) + pkg_check_modules(JACK "jack" REQUIRED) +elseif() + find_package(PkgConfig) + if(PKGCONFIG_FOUND) + pkg_check_modules(JACK "jack") + endif() +endif() +if(JACK_FOUND) + add_library(sfizz_jacklib INTERFACE) + add_library(sfizz::jack ALIAS sfizz_jacklib) + target_include_directories(sfizz_jacklib INTERFACE ${JACK_INCLUDE_DIRS}) + target_link_libraries(sfizz_jacklib INTERFACE ${JACK_LIBRARIES}) + link_directories(${JACK_LIBRARY_DIRS}) +endif() + +# The Qt library +find_package(Qt5 COMPONENTS Widgets) + +# The fmidi library +add_library(sfizz_fmidi STATIC + "external/fmidi/sources/fmidi/fmidi.h" + "external/fmidi/sources/fmidi/fmidi_mini.cpp") +add_library(sfizz::fmidi ALIAS sfizz_fmidi) +target_include_directories(sfizz_fmidi PUBLIC "external/fmidi/sources") +target_compile_definitions(sfizz_fmidi PUBLIC "FMIDI_STATIC=1" "FMIDI_DISABLE_DESCRIBE_API=1") diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt index ff0be6ff..22e8b319 100644 --- a/demos/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -1,32 +1,22 @@ -find_package(PkgConfig) -if(PKGCONFIG_FOUND) - pkg_check_modules(JACK "jack") +if(TARGET Qt5::Widgets AND TARGET sfizz::jack) + add_executable(sfizz_demo_filters DemoFilters.cpp) + target_link_libraries(sfizz_demo_filters PRIVATE sfizz::internal sfizz::jack Qt5::Widgets) + set_target_properties(sfizz_demo_filters PROPERTIES AUTOUIC ON) + + add_executable(sfizz_demo_smooth DemoSmooth.cpp) + target_link_libraries(sfizz_demo_smooth PRIVATE sfizz::internal sfizz::jack Qt5::Widgets) + set_target_properties(sfizz_demo_smooth PROPERTIES AUTOUIC ON) + + add_executable(sfizz_demo_stereo DemoStereo.cpp) + target_link_libraries(sfizz_demo_stereo PRIVATE sfizz::internal sfizz::jack Qt5::Widgets) + set_target_properties(sfizz_demo_stereo PROPERTIES AUTOUIC ON) + + add_executable(sfizz_demo_wavetables DemoWavetables.cpp) + target_link_libraries(sfizz_demo_wavetables PRIVATE sfizz::internal sfizz::jack Qt5::Widgets) + set_target_properties(sfizz_demo_wavetables PROPERTIES AUTOUIC ON) endif() -find_package(Qt5 COMPONENTS Widgets) 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::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::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::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::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) set_target_properties(sfizz_demo_parser PROPERTIES AUTOUIC ON) diff --git a/devtools/CMakeLists.txt b/devtools/CMakeLists.txt index ac2790e6..d9abd170 100644 --- a/devtools/CMakeLists.txt +++ b/devtools/CMakeLists.txt @@ -1,18 +1,12 @@ ############################### # Developer tools -find_package(PkgConfig) -if(PKGCONFIG_FOUND) -pkg_check_modules(JACK "jack") -endif() -find_package(Qt5 COMPONENTS Widgets) - -if(JACK_FOUND AND TARGET Qt5::Widgets) +if(TARGET sfizz::jack AND TARGET Qt5::Widgets) add_executable(sfizz_capture_eg CaptureEG.h CaptureEG.cpp) - target_include_directories(sfizz_capture_eg PRIVATE . ${JACK_INCLUDE_DIRS}) - target_link_libraries(sfizz_capture_eg PRIVATE sfizz::sndfile Qt5::Widgets ${JACK_LIBRARIES}) + target_include_directories(sfizz_capture_eg PRIVATE .) + target_link_libraries(sfizz_capture_eg PRIVATE sfizz::sndfile Qt5::Widgets sfizz::jack) set_target_properties(sfizz_capture_eg PROPERTIES AUTOUIC ON) endif() add_executable(sfizz_preprocessor Preprocessor.cpp) -target_link_libraries(sfizz_preprocessor PRIVATE sfizz_parser sfizz::cxxopts) +target_link_libraries(sfizz_preprocessor PRIVATE sfizz::parser sfizz::cxxopts) diff --git a/clients/external/fmidi/LICENSE.md b/external/fmidi/LICENSE.md similarity index 100% rename from clients/external/fmidi/LICENSE.md rename to external/fmidi/LICENSE.md diff --git a/clients/external/fmidi/sources/fmidi/fmidi.h b/external/fmidi/sources/fmidi/fmidi.h similarity index 100% rename from clients/external/fmidi/sources/fmidi/fmidi.h rename to external/fmidi/sources/fmidi/fmidi.h diff --git a/clients/external/fmidi/sources/fmidi/fmidi_mini.cpp b/external/fmidi/sources/fmidi/fmidi_mini.cpp similarity index 100% rename from clients/external/fmidi/sources/fmidi/fmidi_mini.cpp rename to external/fmidi/sources/fmidi/fmidi_mini.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ecc2376c..bf1c3edd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,8 +1,5 @@ include(GNUInstallDirs) -add_subdirectory(external/kiss_fft) -add_subdirectory(external/cpuid) - set(FAUST_FILES sfizz/dsp/filters/filters_modulable.dsp sfizz/dsp/filters/rbj_filters.dsp diff --git a/src/external/cpuid/CMakeLists.txt b/src/external/cpuid/CMakeLists.txt deleted file mode 100644 index c2a25fe5..00000000 --- a/src/external/cpuid/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -cmake_minimum_required (VERSION 3.5) -project(sfizz_cpuid) - -add_library(sfizz_cpuid STATIC src/cpuid/cpuinfo.cpp src/cpuid/version.cpp) -add_library(sfizz::cpuid ALIAS sfizz_cpuid) -set_property(TARGET sfizz_cpuid PROPERTY CXX_STANDARD 11) -target_include_directories(sfizz_cpuid PUBLIC src PRIVATE platform/src) diff --git a/src/external/kiss_fft/CMakeLists.txt b/src/external/kiss_fft/CMakeLists.txt deleted file mode 100644 index e43afb1d..00000000 --- a/src/external/kiss_fft/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -# This CMake build file is part of sfizz - -cmake_minimum_required(VERSION 3.5) - -project(sfizz_kissfft VERSION "1.3.0" LANGUAGES C) - -add_library(sfizz_kissfft STATIC - kiss_fft.c - tools/kiss_fftr.c) -add_library(sfizz::kissfft ALIAS sfizz_kissfft) -target_include_directories(sfizz_kissfft - PUBLIC "." - PUBLIC "tools") From 1f696e943e36bbffd68754538c03c847d2de7832 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 14 Dec 2020 14:32:55 +0100 Subject: [PATCH 3/4] Move the libsamplerate library check --- benchmarks/CMakeLists.txt | 12 ------------ cmake/SfizzDeps.cmake | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 209faaf5..f9e3732c 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -4,18 +4,6 @@ set(BENCHMARK_SIMD_SOURCES) sfizz_add_simd_sources(BENCHMARK_SIMD_SOURCES "../src") find_package(benchmark CONFIG REQUIRED) -# Check libsamplerate -find_library(SAMPLERATE_LIBRARY "samplerate") -find_path(SAMPLERATE_INCLUDE_DIR "samplerate.h") -message(STATUS "Checking samplerate library: ${SAMPLERATE_LIBRARY}") -message(STATUS "Checking samplerate includes: ${SAMPLERATE_INCLUDE_DIR}") -if(SAMPLERATE_LIBRARY AND SAMPLERATE_INCLUDE_DIR) - add_library(sfizz_samplerate INTERFACE) - add_library(sfizz::samplerate ALIAS sfizz_samplerate) - target_include_directories(sfizz_samplerate INTERFACE "${SAMPLERATE_INCLUDE_DIR}") - target_link_libraries(sfizz_samplerate INTERFACE "${SAMPLERATE_LIBRARY}") -endif() - add_library(bm_simd STATIC ${BENCHMARK_SIMD_SOURCES}) target_link_libraries(bm_simd PRIVATE absl::span sfizz::cpuid) add_library(bm_ftz STATIC ../src/sfizz/ScopedFTZ.cpp) diff --git a/cmake/SfizzDeps.cmake b/cmake/SfizzDeps.cmake index a5dcee06..24ce0916 100644 --- a/cmake/SfizzDeps.cmake +++ b/cmake/SfizzDeps.cmake @@ -163,3 +163,28 @@ add_library(sfizz_fmidi STATIC add_library(sfizz::fmidi ALIAS sfizz_fmidi) target_include_directories(sfizz_fmidi PUBLIC "external/fmidi/sources") target_compile_definitions(sfizz_fmidi PUBLIC "FMIDI_STATIC=1" "FMIDI_DISABLE_DESCRIBE_API=1") + +# The samplerate library +find_package(PkgConfig) +if(PKGCONFIG_FOUND) + pkg_check_modules(SAMPLERATE "samplerate") + if(SAMPLERATE_FOUND) + add_library(sfizz_samplerate INTERFACE) + add_library(sfizz::samplerate ALIAS sfizz_samplerate) + target_include_directories(sfizz_samplerate INTERFACE ${SAMPLERATE_INCLUDE_DIRS}) + target_link_libraries(sfizz_samplerate INTERFACE ${SAMPLERATE_LIBRARIES}) + link_directories(${SAMPLERATE_LIBRARY_DIRS}) + endif() +endif() +if(NOT TARGET sfizz::samplerate) + find_library(SAMPLERATE_LIBRARY "samplerate") + find_path(SAMPLERATE_INCLUDE_DIR "samplerate.h") + message(STATUS "Checking samplerate library: ${SAMPLERATE_LIBRARY}") + message(STATUS "Checking samplerate includes: ${SAMPLERATE_INCLUDE_DIR}") + if(SAMPLERATE_LIBRARY AND SAMPLERATE_INCLUDE_DIR) + add_library(sfizz_samplerate INTERFACE) + add_library(sfizz::samplerate ALIAS sfizz_samplerate) + target_include_directories(sfizz_samplerate INTERFACE "${SAMPLERATE_INCLUDE_DIR}") + target_link_libraries(sfizz_samplerate INTERFACE "${SAMPLERATE_LIBRARY}") + endif() +endif() From c33b9a990ef55b8f5d9f0a6a2c1bbfdaff7014c8 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Mon, 14 Dec 2020 14:40:19 +0100 Subject: [PATCH 4/4] Additional cleanup in benchmarks --- benchmarks/CMakeLists.txt | 33 ++++----------------------------- cmake/SfizzDeps.cmake | 5 +++++ src/CMakeLists.txt | 4 ++-- 3 files changed, 11 insertions(+), 31 deletions(-) diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index f9e3732c..0c06b046 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -1,23 +1,8 @@ -# Check SIMD -include(SfizzSIMDSourceFiles) -set(BENCHMARK_SIMD_SOURCES) -sfizz_add_simd_sources(BENCHMARK_SIMD_SOURCES "../src") -find_package(benchmark CONFIG REQUIRED) - -add_library(bm_simd STATIC ${BENCHMARK_SIMD_SOURCES}) -target_link_libraries(bm_simd PRIVATE absl::span sfizz::cpuid) -add_library(bm_ftz STATIC ../src/sfizz/ScopedFTZ.cpp) - macro(sfizz_add_benchmark TARGET) add_executable("${TARGET}" ${ARGN}) target_link_libraries("${TARGET}" - PRIVATE sfizz::filesystem absl::span absl::algorithm - PRIVATE benchmark::benchmark benchmark::benchmark_main - PRIVATE bm_simd bm_ftz) - if(LIBATOMIC_FOUND) - target_link_libraries("${TARGET}" PRIVATE atomic) - endif() - target_include_directories("${TARGET}" PRIVATE ../src/sfizz) + PRIVATE sfizz::internal sfizz::filesystem absl::span absl::algorithm + PRIVATE benchmark::benchmark benchmark::benchmark_main) sfizz_enable_fast_math("${TARGET}") endmacro() @@ -30,7 +15,6 @@ 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::internal) sfizz_add_benchmark(bm_add BM_add.cpp) sfizz_add_benchmark(bm_multiplyAdd BM_multiplyAdd.cpp) @@ -52,15 +36,12 @@ 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::internal) sfizz_add_benchmark(bm_smoothers BM_smoothers.cpp) -target_link_libraries(bm_smoothers PRIVATE sfizz::internal) sfizz_add_benchmark(bm_powerFollower BM_powerFollower.cpp) -target_link_libraries(bm_powerFollower PRIVATE sfizz::internal) if(TARGET sfizz::samplerate) sfizz_add_benchmark(bm_resample BM_resample.cpp ${BENCHMARK_SIMD_SOURCES}) -target_link_libraries(bm_resample PRIVATE sfizz::samplerate sfizz::sndfile sfizz::cpuid sfizz::hiir) +target_link_libraries(bm_resample PRIVATE sfizz::samplerate sfizz::sndfile sfizz::hiir) endif() sfizz_add_benchmark(bm_envelopes BM_envelopes.cpp) @@ -90,13 +71,7 @@ target_link_libraries(bm_filterModulation PRIVATE sfizz::sndfile) sfizz_add_benchmark(bm_filterStereoMono BM_filterStereoMono.cpp ../src/sfizz/SfzFilter.cpp) target_link_libraries(bm_filterStereoMono PRIVATE sfizz::sndfile) -sfizz_add_benchmark(bm_stringResonator BM_stringResonator.cpp - ../src/sfizz/effects/impl/ResonantArray.cpp - ../src/sfizz/effects/impl/ResonantArraySSE.cpp - ../src/sfizz/effects/impl/ResonantArrayAVX.cpp - ../src/sfizz/effects/impl/ResonantString.cpp - ../src/sfizz/effects/impl/ResonantStringSSE.cpp - ../src/sfizz/effects/impl/ResonantStringAVX.cpp) +sfizz_add_benchmark(bm_stringResonator BM_stringResonator.cpp) target_link_libraries(bm_stringResonator PRIVATE sfizz::sndfile) add_custom_target(sfizz_benchmarks) diff --git a/cmake/SfizzDeps.cmake b/cmake/SfizzDeps.cmake index 24ce0916..1348b558 100644 --- a/cmake/SfizzDeps.cmake +++ b/cmake/SfizzDeps.cmake @@ -188,3 +188,8 @@ if(NOT TARGET sfizz::samplerate) target_link_libraries(sfizz_samplerate INTERFACE "${SAMPLERATE_LIBRARY}") endif() endif() + +# The benchmark library +if(SFIZZ_BENCHMARKS) + find_package(benchmark CONFIG REQUIRED) +endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bf1c3edd..df68a26b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -239,7 +239,7 @@ target_link_libraries(sfizz_messaging PUBLIC absl::strings) 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_include_directories(sfizz_internal PUBLIC "." "sfizz") 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) @@ -251,7 +251,7 @@ if(WIN32) target_compile_definitions(sfizz_internal PRIVATE _USE_MATH_DEFINES) endif() if(SFIZZ_RELEASE_ASSERTS) - target_compile_definitions(sfizz_internal PRIVATE "SFIZZ_ENABLE_RELEASE_ASSERT=1") + target_compile_definitions(sfizz_internal PUBLIC "SFIZZ_ENABLE_RELEASE_ASSERT=1") endif() sfizz_enable_fast_math(sfizz_internal)