sfizz/cmake/SfizzFaust.cmake
redtide 6878125b92
CMake definitions and format rearrangement
- Rename some SFIZZ_ prefixed definitions where possible to permit some modules
  to be generic and be reused in other projects, keep project' information
  in the same place and more explicit
- Fixed non-compliant code formatting
2023-05-20 12:37:22 +02:00

72 lines
2.3 KiB
CMake

include(CMakeParseArguments)
option(SFIZZ_RECOMPILE_FAUST "Recompile faust sources" OFF)
if(SFIZZ_RECOMPILE_FAUST)
find_program(RDMD "rdmd")
if(NOT RDMD)
message(FATAL_ERROR "rdmd is missing, it is required for regenerating faust sources.")
endif()
endif()
function(add_faust_command INPUT OUTPUT)
set(_options ONE_SAMPLE DOUBLE IN_PLACE VECTORIZE MATH_APPROXIMATION)
set(_one_args PROCESS_NAME CLASS_NAME SUPERCLASS_NAME)
set(_multi_args IMPORT_DIRS)
cmake_parse_arguments(_FAUST "${_options}" "${_one_args}" "${_multi_args}" ${ARGN})
if(NOT SFIZZ_RECOMPILE_FAUST)
return()
endif()
if(NOT RDMD)
return()
endif()
if(NOT INPUT)
message(FATAL_ERROR "No input file given.")
endif()
if(NOT OUTPUT)
message(FATAL_ERROR "No output file given.")
endif()
set(_cmd "${RDMD}" "${PROJECT_SOURCE_DIR}/scripts/faustwrap.d")
if(NOT IS_ABSOLUTE "${INPUT}")
set(INPUT "${CMAKE_CURRENT_SOURCE_DIR}/${INPUT}")
endif()
if(NOT IS_ABSOLUTE "${OUTPUT}")
set(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${OUTPUT}")
endif()
get_filename_component(_output_dir "${OUTPUT}" DIRECTORY)
file(MAKE_DIRECTORY "${_output_dir}")
list(APPEND _cmd "-o" "${OUTPUT}" "${INPUT}")
if(_FAUST_ONE_SAMPLE)
list(APPEND _cmd "--os")
endif()
if(_FAUST_DOUBLE)
list(APPEND _cmd "--double")
endif()
if(_FAUST_IN_PLACE)
list(APPEND _cmd "--inpl")
endif()
if(_FAUST_VECTORIZE)
list(APPEND _cmd "--vec")
endif()
if(_FAUST_MATH_APPROXIMATION)
list(APPEND _cmd "--mapp")
endif()
if(_FAUST_PROCESS_NAME)
list(APPEND _cmd "--pn" "${_FAUST_PROCESS_NAME}")
endif()
if(_FAUST_CLASS_NAME)
list(APPEND _cmd "--cn" "${_FAUST_CLASS_NAME}")
endif()
if(_FAUST_SUPERCLASS_NAME)
list(APPEND _cmd "--scn" "${_FAUST_SUPERCLASS_NAME}")
endif()
if(_FAUST_IMPORT_DIRS)
foreach(_dir IN LISTS _FAUST_IMPORT_DIRS)
if(NOT IS_ABSOLUTE "${_dir}")
set(_dir "${CMAKE_CURRENT_SOURCE_DIR}/${_dir}")
endif()
list(APPEND _cmd "--import-dir" "${_dir}")
endforeach()
endif()
add_custom_command(OUTPUT "${OUTPUT}" COMMAND ${_cmd} DEPENDS "${INPUT}")
endfunction()