From f38c538ee1030e74cd034fb4bf68b9af13b83228 Mon Sep 17 00:00:00 2001 From: redtide Date: Mon, 25 Nov 2019 23:19:40 +0100 Subject: [PATCH] Update CMake files, generic LV2 configuration --- .editorconfig | 12 +++-- CMakeLists.txt | 8 ++-- lv2/CMakeLists.txt | 71 +++++++++++++++++++---------- lv2/manifest.ttl.in | 7 +++ lv2/sfizz.ttl.in | 108 ++++++++++++++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 2 +- 6 files changed, 175 insertions(+), 33 deletions(-) create mode 100644 lv2/manifest.ttl.in create mode 100644 lv2/sfizz.ttl.in diff --git a/.editorconfig b/.editorconfig index 44554ce7..ea67a2e5 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,11 +4,15 @@ # Top-most EditorConfig file root = true -# No trailing whitespaces, but with a newline ending every file, -# UTF-8 charset, set indent to spaces with width of four +# UTF-8 charset, set indent to spaces with width of four, +# with no trailing whitespaces and a newline ending every file. [*] +charset = utf-8 +indent_size = 4 +indent_style = space insert_final_newline = true trim_trailing_whitespace = true -charset = utf-8 + +[*.{ttl,ttl.in}] +indent_size = 2 indent_style = space -indent_size = 4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 79f91226..54a9bd05 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,10 +8,10 @@ include (SfizzConfig) # Build Options set (BUILD_TESTING OFF CACHE BOOL "Disable Abseil's tests [default: OFF]") -set (SFIZZ_LV2_DIR "${CMAKE_INSTALL_PREFIX}/lib/lv2" CACHE STRING +set (LV2PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib/lv2" CACHE STRING "Install destination for LV2 bundle [default: ${CMAKE_INSTALL_PREFIX}/lib/lv2]") -option (SFIZZ_USE_LTO "Enable Link Time Optimization [default: ON]" ON) +option (ENABLE_LTO "Enable Link Time Optimization [default: ON]" ON) option (SFIZZ_JACK "Enable JACK stand-alone build [default: ON]" ON) option (SFIZZ_LV2 "Enable LV2 plug-in build [default: ON]" ON) option (SFIZZ_BENCHMARKS "Enable benchmarks build [default: OFF]" OFF) @@ -44,7 +44,7 @@ endif() message (STATUS " Project name: ${CMAKE_PROJECT_NAME} Build type: ${CMAKE_BUILD_TYPE} -Build using LTO: ${SFIZZ_USE_LTO} +Build using LTO: ${ENABLE_LTO} Build as shared library: ${SFIZZ_SHARED} Build JACK stand-alone client: ${SFIZZ_JACK} Build LV2 plug-in: ${SFIZZ_LV2} @@ -52,7 +52,7 @@ Build benchmarks: ${SFIZZ_BENCHMARKS} Build tests: ${SFIZZ_TESTS} Install prefix: ${CMAKE_INSTALL_PREFIX} -LV2 destination directory: ${SFIZZ_LV2_DIR} +LV2 destination directory: ${LV2PLUGIN_INSTALL_DIR} Compiler CXX debug flags: ${CMAKE_CXX_FLAGS_DEBUG} Compiler CXX release flags: ${CMAKE_CXX_FLAGS_RELEASE} diff --git a/lv2/CMakeLists.txt b/lv2/CMakeLists.txt index 6017b21c..46c9d3f9 100644 --- a/lv2/CMakeLists.txt +++ b/lv2/CMakeLists.txt @@ -1,30 +1,53 @@ -project (sfizz) +project (lv2plugin) -add_library (sfizz_lv2 SHARED sfizz.c) -set_target_properties (sfizz_lv2 PROPERTIES PREFIX "") -set_target_properties (sfizz_lv2 PROPERTIES OUTPUT_NAME "sfizz") -target_link_libraries (sfizz_lv2 sfizz::sfizz) +# CMAKE_PROJECT_NAME is the top level project name, not the current one +set (LV2PLUGIN_PRJ_NAME "${CMAKE_PROJECT_NAME}_lv2") -add_custom_command (TARGET sfizz_lv2 POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_SOURCE_DIR}/lv2/sfizz.ttl - ${CMAKE_CURRENT_BINARY_DIR}/sfizz.ttl) +# Set the build directory as /lv2/.lv2/ +set (PROJECT_BINARY_DIR "${PROJECT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.lv2") -add_custom_command (TARGET sfizz_lv2 POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_SOURCE_DIR}/lv2/manifest.ttl - ${CMAKE_CURRENT_BINARY_DIR}/manifest.ttl) -if (SFIZZ_USE_LTO) - set_property (TARGET sfizz_lv2 PROPERTY INTERPROCEDURAL_OPTIMIZATION True) +# Configuration for this plugin +# TODO: generate version from git +set (LV2PLUGIN_VERSION_MINOR 0) +set (LV2PLUGIN_VERSION_MICRO 1) +set (LV2PLUGIN_NAME "Sfizz") +set (LV2PLUGIN_COMMENT "SFZ sampler") +set (LV2PLUGIN_URI "http://sfztools.github.io/sfizz") +set (LV2PLUGIN_AUTHOR "Paul Ferrand") +set (LV2PLUGIN_SPDX_LICENSE_ID "BSD-2-Clause") + +if (WIN32) + set (LV2PLUGIN_EXT "dll") +elseif (APPLE) + set (LV2PLUGIN_EXT "dylib") +else() + set (LV2PLUGIN_EXT "so") endif() -if (UNIX) - if (NOT LV2_INSTALL_PREFIX) - set (LV2_INSTALL_PREFIX ${CMAKE_INSTALL_LIBDIR}/lv2/sfizz.lv2) - endif() - install (TARGETS sfizz_lv2 - ARCHIVE DESTINATION ${LV2_INSTALL_PREFIX} - LIBRARY DESTINATION ${LV2_INSTALL_PREFIX}) - install (FILES ${CMAKE_BINARY_DIR}/lv2/sfizz.ttl DESTINATION ${LV2_INSTALL_PREFIX}) - install (FILES ${CMAKE_BINARY_DIR}/lv2/manifest.ttl DESTINATION ${LV2_INSTALL_PREFIX}) +# Keep non build turtle files in IDE +set (LV2PLUGIN_TTL_SRC_FILES + manifest.ttl.in + ${CMAKE_PROJECT_NAME}.ttl.in +) +add_library (${LV2PLUGIN_PRJ_NAME} SHARED ${CMAKE_PROJECT_NAME}.c ${LV2PLUGIN_TTL_SRC_FILES}) +target_link_libraries (${LV2PLUGIN_PRJ_NAME} ${CMAKE_PROJECT_NAME}::${CMAKE_PROJECT_NAME}) + +if (ENABLE_LTO) + set_property (TARGET ${LV2PLUGIN_PRJ_NAME} PROPERTY INTERPROCEDURAL_OPTIMIZATION True) endif() + +# Remove the "lib" prefix, rename the target name and build it in the .lv build dir +# /lv2/_lv2. to +# /lv2/.lv2/. +set_target_properties (${LV2PLUGIN_PRJ_NAME} PROPERTIES PREFIX "") +set_target_properties (${LV2PLUGIN_PRJ_NAME} PROPERTIES OUTPUT_NAME "${CMAKE_PROJECT_NAME}") +set_target_properties (${LV2PLUGIN_PRJ_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}") + +# Generate *.ttl files from *.in sources, +# create the destination directory if it doesn't exists and copy needed files +file (MAKE_DIRECTORY ${PROJECT_BINARY_DIR}) +configure_file (manifest.ttl.in ${PROJECT_BINARY_DIR}/manifest.ttl) +configure_file (${CMAKE_PROJECT_NAME}.ttl.in ${PROJECT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.ttl) + +# Installation +install (DIRECTORY ${PROJECT_BINARY_DIR} DESTINATION ${LV2PLUGIN_INSTALL_DIR}) diff --git a/lv2/manifest.ttl.in b/lv2/manifest.ttl.in new file mode 100644 index 00000000..ee608fb7 --- /dev/null +++ b/lv2/manifest.ttl.in @@ -0,0 +1,7 @@ +@prefix lv2: . +@prefix rdfs: . + +<@LV2PLUGIN_URI@> + a lv2:Plugin ; + lv2:binary <@CMAKE_PROJECT_NAME@.@LV2PLUGIN_EXT@> ; + rdfs:seeAlso <@CMAKE_PROJECT_NAME@.ttl> . diff --git a/lv2/sfizz.ttl.in b/lv2/sfizz.ttl.in new file mode 100644 index 00000000..032d51ff --- /dev/null +++ b/lv2/sfizz.ttl.in @@ -0,0 +1,108 @@ +@prefix atom: . +@prefix bufsize: . +@prefix doap: . +@prefix foaf: . +@prefix lv2: . +@prefix midi: . +@prefix opts: . +@prefix patch: . +@prefix pg: . +@prefix pprop: . +@prefix rdf: . +@prefix rdfs: . +@prefix state: . +@prefix units: . +@prefix urid: . +@prefix work: . + +<#config> + a pg:Group ; + lv2:symbol "config" ; + lv2:name "Configuration" . + +<@LV2PLUGIN_URI@:sfzfile> + a lv2:Parameter ; + rdfs:label "SFZ file" ; + rdfs:range atom:Path . + +<@LV2PLUGIN_URI@:numvoices> + a lv2:Parameter ; + rdfs:label "Polyphony" ; + rdfs:range atom:Int . + +<@LV2PLUGIN_URI@> + a doap:Project, lv2:Plugin, lv2:InstrumentPlugin ; + + doap:name "@LV2PLUGIN_NAME@" ; + doap:license ; + doap:maintainer [ + foaf:name "@LV2PLUGIN_AUTHOR@" ; + foaf:homepage <@LV2PLUGIN_URI@> ; + ] ; + rdfs:comment "@LV2PLUGIN_COMMENT@" ; + + lv2:minorVersion @LV2PLUGIN_VERSION_MINOR@ ; + lv2:microVersion @LV2PLUGIN_VERSION_MICRO@ ; + + lv2:requiredFeature urid:map, bufsize:boundedBlockLength, work:schedule ; + lv2:optionalFeature lv2:hardRTCapable, opts:options ; + lv2:extensionData opts:interface, state:interface, work:interface ; + + patch:writable <@LV2PLUGIN_URI@:sfzfile> ; + + lv2:port [ + a lv2:InputPort, atom:AtomPort ; + atom:bufferType atom:Sequence ; + atom:supports patch:Message, midi:MidiEvent ; + lv2:designation lv2:control ; + lv2:index 0 ; + lv2:symbol "control" ; + lv2:name "Control" + ] , [ + a lv2:OutputPort, atom:AtomPort ; + atom:bufferType atom:Sequence ; + atom:supports patch:Message ; + lv2:designation lv2:control ; + lv2:index 1 ; + lv2:symbol "notify" ; + lv2:name "Notify" ; + ] , [ + a lv2:AudioPort , lv2:OutputPort ; + lv2:index 2 ; + lv2:symbol "out_left" ; + lv2:name "Left Output" + ] , [ + a lv2:AudioPort , lv2:OutputPort ; + lv2:index 3 ; + lv2:symbol "out_right" ; + lv2:name "Right Output" + ] , [ + a lv2:InputPort, lv2:ControlPort ; + lv2:index 4 ; + lv2:symbol "volume" ; + lv2:name "Volume" ; + lv2:default 0.0 ; + lv2:minimum -80.0 ; + lv2:maximum 6.0 ; + lv2:portProperty pprop:notAutomatic ; + units:unit units:db + ] , [ + a lv2:InputPort, lv2:ControlPort ; + lv2:index 5 ; + lv2:symbol "num_voices" ; + lv2:name "Polyphony" ; + pg:group <#config> ; + lv2:portProperty pprop:notAutomatic ; + lv2:portProperty pprop:expensive ; + lv2:portProperty lv2:integer ; + lv2:portProperty lv2:enumeration ; + lv2:default 64 ; + lv2:minimum 8 ; + lv2:maximum 256 ; + lv2:scalePoint [ rdfs:label "8 voices"; rdf:value 8 ] ; + lv2:scalePoint [ rdfs:label "16 voices"; rdf:value 16 ] ; + lv2:scalePoint [ rdfs:label "32 voices"; rdf:value 32 ] ; + lv2:scalePoint [ rdfs:label "64 voices"; rdf:value 64 ] ; + lv2:scalePoint [ rdfs:label "128 voices"; rdf:value 128 ] ; + lv2:scalePoint [ rdfs:label "256 voices"; rdf:value 256 ] ; + ] . diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index abaf82c9..58ab0ead 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -32,7 +32,7 @@ if (UNIX) target_link_libraries (sfizz PUBLIC atomic) endif() -if (SFIZZ_USE_LTO) +if (ENABLE_LTO) set_property (TARGET sfizz_parser PROPERTY INTERPROCEDURAL_OPTIMIZATION True) set_property (TARGET sfizz PROPERTY INTERPROCEDURAL_OPTIMIZATION True) endif()