diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 126083cf..43855535 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -308,7 +308,7 @@ jobs: -D CMAKE_BUILD_TYPE=${{ env.build_type }} -D CMAKE_CXX_STANDARD=17 -D ENABLE_LTO=OFF - -D SFIZZ_STATIC_DEPENDENCIES=ON + -D SFIZZ_SNDFILE_STATIC=ON -D SFIZZ_JACK=OFF ) ${{ matrix.platform }}-w64-mingw32-cmake "${options[@]}" diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ba56bf6..a1312714 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,77 +1,81 @@ -if (WIN32) - cmake_minimum_required (VERSION 3.15) +if(WIN32) + cmake_minimum_required(VERSION 3.15) cmake_policy(SET CMP0091 NEW) else() - cmake_minimum_required (VERSION 3.5) - if (POLICY CMP0069) + cmake_minimum_required(VERSION 3.5) + if(POLICY CMP0069) cmake_policy(SET CMP0069 NEW) endif() endif() -project (libsfizz VERSION 1.2.2 LANGUAGES CXX C) -set (PROJECT_DESCRIPTION "A library to load SFZ description files and use them to render music.") +project(libsfizz + LANGUAGES CXX C + VERSION 1.2.2 +) +set(PROJECT_DESCRIPTION "A library to load SFZ description files and use them to render music.") +set(PROJECT_REPOSITORY https://github.com/sfztools/sfizz) # External configuration CMake scripts -set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake") -include (BuildType) +set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake") +include(BuildType) # Build Options -include (OptionEx) +include(OptionEx) -set (BUILD_TESTING OFF CACHE BOOL "Disable Abseil's tests [default: OFF]") +set(BUILD_TESTING OFF CACHE BOOL "Disable Abseil's tests [default: OFF]") -option_ex (ENABLE_LTO "Enable Link Time Optimization" ON) -option_ex (SFIZZ_JACK "Enable JACK stand-alone build" CMAKE_SYSTEM_NAME STREQUAL "Linux") -option_ex (SFIZZ_RENDER "Enable renderer of SMF files" ON) -option_ex (SFIZZ_BENCHMARKS "Enable benchmarks build" OFF) -option_ex (SFIZZ_TESTS "Enable tests build" OFF) -option_ex (SFIZZ_DEMOS "Enable feature demos build" OFF) -option_ex (SFIZZ_DEVTOOLS "Enable developer tools build" OFF) -option_ex (SFIZZ_SHARED "Enable shared library build" ON) -option_ex (SFIZZ_USE_SNDFILE "Enable use of the sndfile library" OFF) -option_ex (SFIZZ_USE_VCPKG "Assume that sfizz is build using vcpkg" OFF) -option_ex (SFIZZ_USE_SYSTEM_ABSEIL "Use Abseil libraries preinstalled on system" OFF) -option_ex (SFIZZ_USE_SYSTEM_GHC_FS "Use GHC Filesystem libraries preinstalled on system" OFF) -option_ex (SFIZZ_USE_SYSTEM_SIMDE "Use SIMDe libraries preinstalled on system" OFF) -option_ex (SFIZZ_USE_SYSTEM_KISS_FFT "Use KISS FFT libraries preinstalled on system" OFF) -option_ex (SFIZZ_USE_SYSTEM_PUGIXML "Use pugixml libraries preinstalled on system" OFF) -option_ex (SFIZZ_USE_SYSTEM_CXXOPTS "Use CXXOPTS libraries preinstalled on system" OFF) -option_ex (SFIZZ_USE_SYSTEM_CATCH "Use Catch libraries preinstalled on system" OFF) -option_ex (SFIZZ_STATIC_DEPENDENCIES "Link dependencies statically" OFF) -option_ex (SFIZZ_RELEASE_ASSERTS "Forced assertions in release builds" OFF) -option_ex (SFIZZ_PROFILE_BUILD "Profile the build time" OFF) +option_ex(ENABLE_LTO "Enable Link Time Optimization" ON) +option_ex(SFIZZ_JACK "Enable JACK stand-alone build" CMAKE_SYSTEM_NAME STREQUAL "Linux") +option_ex(SFIZZ_RENDER "Enable renderer of SMF files" ON) +option_ex(SFIZZ_BENCHMARKS "Enable benchmarks build" OFF) +option_ex(SFIZZ_TESTS "Enable tests build" OFF) +option_ex(SFIZZ_DEMOS "Enable feature demos build" OFF) +option_ex(SFIZZ_DEVTOOLS "Enable developer tools build" OFF) +option_ex(SFIZZ_SHARED "Enable shared library build" ON) +option_ex(SFIZZ_USE_SNDFILE "Enable use of the sndfile library" OFF) +option_ex(SFIZZ_USE_VCPKG "Assume that sfizz is build using vcpkg" OFF) +option_ex(SFIZZ_USE_SYSTEM_ABSEIL "Use Abseil libraries preinstalled on system" OFF) +option_ex(SFIZZ_USE_SYSTEM_GHC_FS "Use GHC Filesystem libraries preinstalled on system" OFF) +option_ex(SFIZZ_USE_SYSTEM_SIMDE "Use SIMDe libraries preinstalled on system" OFF) +option_ex(SFIZZ_USE_SYSTEM_KISS_FFT "Use KISS FFT libraries preinstalled on system" OFF) +option_ex(SFIZZ_USE_SYSTEM_PUGIXML "Use pugixml libraries preinstalled on system" OFF) +option_ex(SFIZZ_USE_SYSTEM_CXXOPTS "Use CXXOPTS libraries preinstalled on system" OFF) +option_ex(SFIZZ_USE_SYSTEM_CATCH "Use Catch libraries preinstalled on system" OFF) +option_ex(SFIZZ_RELEASE_ASSERTS "Forced assertions in release builds" OFF) +option_ex(SFIZZ_PROFILE_BUILD "Profile the build time" OFF) +option_ex(SFIZZ_SNDFILE_STATIC "Link the sndfile library statically" OFF) -# The fixed number of controller parameters -set(MIDI_CC_MAX 512 CACHE STRING "Maximum amount of Control Change Messages") +# Continuous Controller count (0 to 511) +set(MIDI_CC_COUNT 512 CACHE STRING "Maximum number of managed Control Change messages") -include (SfizzConfig) -include (SfizzDeps) -include (SfizzFaust) +include(SfizzConfig) +include(SfizzDeps) +include(SfizzFaust) # Don't use IPO in non Release builds -include (CheckIPO) +include(CheckIPO) # Add the static library targets and sources -add_subdirectory (src) +add_subdirectory(src) # Optional targets -add_subdirectory (clients) +add_subdirectory(clients) -if (SFIZZ_BENCHMARKS) - add_subdirectory (benchmarks) +if(SFIZZ_BENCHMARKS) + add_subdirectory(benchmarks) endif() -if (SFIZZ_TESTS) - enable_testing () - add_subdirectory (tests) +if(SFIZZ_TESTS) + enable_testing() + add_subdirectory(tests) endif() -if (SFIZZ_DEMOS) - add_subdirectory (demos) +if(SFIZZ_DEMOS) + add_subdirectory(demos) endif() -if (SFIZZ_DEVTOOLS) - add_subdirectory (devtools) +if(SFIZZ_DEVTOOLS) + add_subdirectory(devtools) endif() show_build_info_if_needed() diff --git a/clients/sfizz_jack.man.in b/clients/sfizz_jack.man.in index 35815adc..207c4393 100644 --- a/clients/sfizz_jack.man.in +++ b/clients/sfizz_jack.man.in @@ -32,6 +32,6 @@ Quit .SH SEE ALSO sfizz_render(1) .SH BUGS -See the main repository at @SFIZZ_REPOSITORY@. +See the main repository at @PROJECT_REPOSITORY@. .SH AUTHOR -Contributors can be seen on the main repository at @SFIZZ_REPOSITORY@. +Contributors can be seen on the main repository at @PROJECT_REPOSITORY@. diff --git a/clients/sfizz_render.man.in b/clients/sfizz_render.man.in index 73a12e12..16776196 100644 --- a/clients/sfizz_render.man.in +++ b/clients/sfizz_render.man.in @@ -25,6 +25,6 @@ Show help .SH SEE ALSO sfizz_jack(1) .SH BUGS -See the main repository at @SFIZZ_REPOSITORY@. +See the main repository at @PROJECT_REPOSITORY@. .SH AUTHOR -Contributors can be seen on the main repository at @SFIZZ_REPOSITORY@. +Contributors can be seen on the main repository at @PROJECT_REPOSITORY@. diff --git a/cmake/SfizzConfig.cmake b/cmake/SfizzConfig.cmake index 7ce4d8b9..b734c12b 100644 --- a/cmake/SfizzConfig.cmake +++ b/cmake/SfizzConfig.cmake @@ -123,13 +123,10 @@ if(USE_LIBCPP) add_link_options(-lc++abi) # New command on CMake master, not in 3.12 release endif() -set(SFIZZ_REPOSITORY https://github.com/sfztools/sfizz) include(GNUInstallDirs) if(PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) set(PROJECT_IS_MAIN TRUE) -else() - set(PROJECT_IS_MAIN FALSE) endif() # Don't show build information when building a different project @@ -137,7 +134,7 @@ function(show_build_info_if_needed) if(PROJECT_IS_MAIN) message(STATUS " Project name: ${PROJECT_NAME} -CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD} +C++ standard version: ${CMAKE_CXX_STANDARD} Build type: ${CMAKE_BUILD_TYPE} Build processor: ${PROJECT_SYSTEM_PROCESSOR} Build using LTO: ${ENABLE_LTO} @@ -148,9 +145,11 @@ Build benchmarks: ${SFIZZ_BENCHMARKS} Build tests: ${SFIZZ_TESTS} Build demos: ${SFIZZ_DEMOS} Build devtools: ${SFIZZ_DEVTOOLS} + Use sndfile: ${SFIZZ_USE_SNDFILE} +Statically link sndfile: ${SFIZZ_SNDFILE_STATIC} + Use vcpkg: ${SFIZZ_USE_VCPKG} -Statically link dependencies: ${SFIZZ_STATIC_DEPENDENCIES} Use clang libc++: ${USE_LIBCPP} Release asserts: ${SFIZZ_RELEASE_ASSERTS} @@ -163,24 +162,28 @@ Use system pugixml: ${SFIZZ_USE_SYSTEM_PUGIXML} Use system simde: ${SFIZZ_USE_SYSTEM_SIMDE}") if(CMAKE_PROJECT_NAME STREQUAL "sfizz") message(STATUS " -Build AU plug-in: ${SFIZZ_AU} -Build LV2 plug-in: ${SFIZZ_LV2} -Build LV2 user interface: ${SFIZZ_LV2_UI} -Build VST plug-in: ${SFIZZ_VST} - Use system lv2: ${SFIZZ_USE_SYSTEM_LV2} Use system vst3sdk sources: ${SFIZZ_USE_SYSTEM_VST3SDK} -LV2 plugin-side CC automation ${SFIZZ_LV2_PSA} +Build AU plug-in: ${PLUGIN_AU} +Build LV2 plug-in: ${PLUGIN_LV2} +Build LV2 user interface: ${PLUGIN_LV2_UI} +LV2 plugin-side CC automation ${PLUGIN_LV2_PSA} +Build Pure Data plug-in: ${PLUGIN_PUREDATA} +Build VST plug-in: ${PLUGIN_VST} + +AU destination directory: ${AU_PLUGIN_INSTALL_DIR} LV2 destination directory: ${LV2PLUGIN_INSTALL_DIR} +Pd destination directory: ${PD_PLUGIN_INSTALL_DIR} VST destination directory: ${VSTPLUGIN_INSTALL_DIR}") endif() message(STATUS " Install prefix: ${CMAKE_INSTALL_PREFIX} -Compiler CXX debug flags: ${CMAKE_CXX_FLAGS_DEBUG} -Compiler CXX release flags: ${CMAKE_CXX_FLAGS_RELEASE} -Compiler CXX min size flags: ${CMAKE_CXX_FLAGS_MINSIZEREL} +CXX Debug flags: ${CMAKE_CXX_FLAGS_DEBUG} +CXX Release flags: ${CMAKE_CXX_FLAGS_RELEASE} +CXX MinSize flags: ${CMAKE_CXX_FLAGS_MINSIZEREL} +CXX RelWithDebInfo flags: ${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ") endif() endfunction() diff --git a/cmake/SfizzDeps.cmake b/cmake/SfizzDeps.cmake index 3b15bbda..c76e216a 100644 --- a/cmake/SfizzDeps.cmake +++ b/cmake/SfizzDeps.cmake @@ -26,8 +26,8 @@ if(OPENMP_FOUND) $<$:${SFIZZ_OpenMP_CXX_OPTIONS}>) endif() +# FIXME: remove UI libs which was used by plugins only # Find macOS system libraries -# TODO: remove UI libs which was used by plugins only if(APPLE) find_library(APPLE_COREFOUNDATION_LIBRARY "CoreFoundation") find_library(APPLE_FOUNDATION_LIBRARY "Foundation") @@ -122,7 +122,7 @@ if(SFIZZ_USE_SNDFILE OR SFIZZ_DEMOS OR SFIZZ_DEVTOOLS OR SFIZZ_BENCHMARKS) find_package(PkgConfig REQUIRED) pkg_check_modules(SNDFILE "sndfile" REQUIRED) target_include_directories(sfizz_sndfile INTERFACE ${SNDFILE_INCLUDE_DIRS}) - if(SFIZZ_STATIC_DEPENDENCIES) + if(SFIZZ_SNDFILE_STATIC) target_link_libraries(sfizz_sndfile INTERFACE ${SNDFILE_STATIC_LIBRARIES}) else() target_link_libraries(sfizz_sndfile INTERFACE ${SNDFILE_LIBRARIES}) @@ -212,7 +212,7 @@ add_library(sfizz::hiir_polyphase_iir2designer ALIAS sfizz_hiir_polyphase_iir2de target_link_libraries(sfizz_hiir_polyphase_iir2designer PUBLIC sfizz::hiir) # The kissfft library -if (SFIZZ_USE_SYSTEM_KISS_FFT) +if(SFIZZ_USE_SYSTEM_KISS_FFT) find_path(KISSFFT_INCLUDE_DIR "kiss_fft.h" PATH_SUFFIXES "kissfft") find_path(KISSFFTR_INCLUDE_DIR "kiss_fftr.h" PATH_SUFFIXES "kissfft") find_library(KISSFFT_FFTR_LIBRARY "kiss_fftr_float" KISSFFTR_INCLUDE_DIR) @@ -284,7 +284,7 @@ else() add_library(sfizz_filesystem_impl STATIC "${CMAKE_CURRENT_BINARY_DIR}/fs_std_impl.cpp") target_include_directories(sfizz_filesystem_impl PUBLIC ${SFIZZ_FILESYSTEM_INCLUDE_DIR}) # Add the needed linker option for GCC 8 - if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.0 AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0) target_link_libraries(sfizz_filesystem_impl PUBLIC stdc++fs) diff --git a/cmake/SfizzFaust.cmake b/cmake/SfizzFaust.cmake index a69ee115..a723bcf9 100644 --- a/cmake/SfizzFaust.cmake +++ b/cmake/SfizzFaust.cmake @@ -60,7 +60,7 @@ function(add_faust_command INPUT OUTPUT) if(_FAUST_SUPERCLASS_NAME) list(APPEND _cmd "--scn" "${_FAUST_SUPERCLASS_NAME}") endif() - if (_FAUST_IMPORT_DIRS) + if(_FAUST_IMPORT_DIRS) foreach(_dir IN LISTS _FAUST_IMPORT_DIRS) if(NOT IS_ABSOLUTE "${_dir}") set(_dir "${CMAKE_CURRENT_SOURCE_DIR}/${_dir}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 11edc55b..76a6b718 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -310,7 +310,7 @@ sfizz_enable_fast_math(sfizz_internal) # Check that sfizz and cmake-side definitions are matching file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/sfizz_match_definitions.cpp" " #include \"Config.h\" -static_assert(sfz::config::numCCs == ${MIDI_CC_MAX}, \"MIDI_CC_MAX did not match\"); +static_assert(sfz::config::numCCs == ${MIDI_CC_COUNT}, \"MIDI_CC_COUNT did not match\"); ") add_library(sfizz_match_definitions STATIC "${CMAKE_CURRENT_BINARY_DIR}/sfizz_match_definitions.cpp") target_link_libraries(sfizz_match_definitions PRIVATE sfizz::internal)