DISTRHO Plugin Framework
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
11KB

  1. # Sets GET_LIBS_AND_DEFINES_LIBS and GET_LIBS_AND_DEFINES_DEFINES variables in parentscope. Link to this !
  2. function(GET_LIBS_AND_DEFINES UI_BACKEND)
  3. if(NOT UI_BACKEND)
  4. set(UI_BACKEND NONE)
  5. endif(NOT UI_BACKEND)
  6. if(${UI_BACKEND} STREQUAL "NONE")
  7. set(GET_LIBS_AND_DEFINES_LIBS DPF PARENT_SCOPE)
  8. elseif(${UI_BACKEND} STREQUAL "OPENGL")
  9. set(GET_LIBS_AND_DEFINES_LIBS dgl-opengl DPF_UI PARENT_SCOPE)
  10. elseif(${UI_BACKEND} STREQUAL "CAIRO")
  11. set(GET_LIBS_AND_DEFINES_LIBS dgl-cairo DPF_UI PARENT_SCOPE)
  12. elseif(${UI_BACKEND} STREQUAL "EXTERNAL")
  13. set(GET_LIBS_AND_DEFINES_LIBS DPF_UI PARENT_SCOPE)
  14. set(GET_LIBS_AND_DEFINES_DEFINES DGL_EXTERNAL PARENT_SCOPE)
  15. else()
  16. message(ERROR "No vaild UI_BACKEND, choose NONE OPENGL CAIRO or EXTERNAL")
  17. endif(${UI_BACKEND} STREQUAL "NONE")
  18. endfunction(GET_LIBS_AND_DEFINES UI_BACKEND)
  19. # Parameter to use:
  20. # TARGET: Name for the generated VST
  21. # UI_BACKEND; weather it should be NONE,EXTERNAL,OPENGL or CAIRO
  22. # SOURCES: Plugin Sources, to compile in the vst
  23. # INCLUDE_DIRECTORIES: Directories to include to the vst.
  24. # DEFINES: Define Preprocessor defines
  25. function(BUILD_JACK)
  26. find_package(Jack)
  27. set(oneValueArgs TARGET UI_BACKEND)
  28. set(multiValueArgs SOURCES INCLUDE_DIRECTORIES DEFINES)
  29. cmake_parse_arguments(PLUGIN_PARAM "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
  30. get_libs_and_defines(${PLUGIN_PARAM_UI_BACKEND} )
  31. add_executable(${PLUGIN_PARAM_TARGET} ${PLUGIN_PARAM_SOURCES})
  32. set_target_properties(${PLUGIN_PARAM_TARGET} PROPERTIES PREFIX "")
  33. target_link_libraries(${PLUGIN_PARAM_TARGET} ${GET_LIBS_AND_DEFINES_LIBS} DPF ${JACK_LIBRARIES} )
  34. target_include_directories(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_INCLUDE_DIRECTORIES})
  35. target_compile_definitions(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_DEFINES} ${GET_LIBS_AND_DEFINES_DEFINES} DISTRHO_PLUGIN_TARGET_JACK)
  36. endfunction(BUILD_JACK)
  37. # Parameter to use:
  38. # TARGET: Name for the generated VST
  39. # UI_BACKEND; weather it should be NONE,EXTERNAL,OPENGL or CAIRO
  40. # SOURCES: Plugin Sources, to compile in the vst
  41. # INCLUDE_DIRECTORIES: Directories to include to the vst.
  42. # DEFINES: Define Preprocessor defines
  43. function(BUILD_VST2)
  44. set(oneValueArgs TARGET UI_BACKEND)
  45. set(multiValueArgs SOURCES INCLUDE_DIRECTORIES DEFINES)
  46. cmake_parse_arguments(PLUGIN_PARAM "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
  47. get_libs_and_defines(${PLUGIN_PARAM_UI_BACKEND} )
  48. add_library(${PLUGIN_PARAM_TARGET} MODULE ${PLUGIN_PARAM_SOURCES})
  49. set_target_properties(${PLUGIN_PARAM_TARGET} PROPERTIES PREFIX "")
  50. target_link_libraries(${PLUGIN_PARAM_TARGET} ${GET_LIBS_AND_DEFINES_LIBS} DPF)
  51. target_include_directories(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_INCLUDE_DIRECTORIES})
  52. target_compile_definitions(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_DEFINES} ${GET_LIBS_AND_DEFINES_DEFINES} DISTRHO_PLUGIN_TARGET_VST)
  53. endfunction(BUILD_VST2)
  54. # Parameter to use:
  55. # TARGET: Name for the generated VST
  56. # UI_BACKEND; weather it should be NONE,EXTERNAL,OPENGL or CAIRO because its an ladspa... set it to NONE or External...
  57. # SOURCES: Plugin Sources, to compile in the vst
  58. # INCLUDE_DIRECTORIES: Directories to include to the vst.
  59. # DEFINES: Define Preprocessor defines
  60. function(BUILD_LADSPA )
  61. set(oneValueArgs TARGET UI_BACKEND)
  62. set(multiValueArgs SOURCES INCLUDE_DIRECTORIES DEFINES)
  63. cmake_parse_arguments(PLUGIN_PARAM "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
  64. get_libs_and_defines(${PLUGIN_PARAM_UI_BACKEND} )
  65. add_library(${PLUGIN_PARAM_TARGET} MODULE ${PLUGIN_PARAM_SOURCES})
  66. set_target_properties(${PLUGIN_PARAM_TARGET} PROPERTIES PREFIX "")
  67. target_link_libraries(${PLUGIN_PARAM_TARGET} ${GET_LIBS_AND_DEFINES_LIBS})
  68. target_include_directories(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_INCLUDE_DIRECTORIES})
  69. target_compile_definitions(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_DEFINES} ${GET_LIBS_AND_DEFINES_DEFINES} DISTRHO_PLUGIN_TARGET_LADSPA)
  70. endfunction(BUILD_LADSPA)
  71. # Parameter to use:
  72. # TARGET: Name for the generated VST
  73. # UI_BACKEND: weather it should be NONE,EXTERNAL,OPENGL or CAIRO
  74. # UI_SOURCES: Plugin UI Sources
  75. # SOURCES: Plugin Sources, to compile in the vst
  76. # INCLUDE_DIRECTORIES: Directories to include to the vst.
  77. # DEFINES: Define Preprocessor defines
  78. # fills the Variable ${TARGET}_TTL_FILES with the generated files.
  79. # if a ui is specified(with UI_SOURCES) 2 targets are build the TARGET and {TARGET}_ui
  80. # if UI_SOURCES is not specified, a unified ui lv2 plugin will be build. This will also add DISTHRO_WANT_DIRECT_ACCESS=1 to the Project.
  81. function(BUILD_LV2 )
  82. set(oneValueArgs TARGET UI_BACKEND)
  83. set(multiValueArgs SOURCES UI_SOURCES INCLUDE_DIRECTORIES DEFINES)
  84. cmake_parse_arguments(PLUGIN_PARAM "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
  85. get_libs_and_defines(${PLUGIN_PARAM_UI_BACKEND})
  86. if(PLUGIN_PARAM_UI_SOURCES) # IF UI Files are present, build seperated UI Files.
  87. add_library(${PLUGIN_PARAM_TARGET}_ui MODULE ${PLUGIN_PARAM_UI_SOURCES})
  88. set_target_properties(${PLUGIN_PARAM_TARGET}_ui PROPERTIES PREFIX "")
  89. target_link_libraries(${PLUGIN_PARAM_TARGET}_ui ${GET_LIBS_AND_DEFINES_LIBS} )
  90. target_include_directories(${PLUGIN_PARAM_TARGET}_ui PUBLIC ${PLUGIN_PARAM_INCLUDE_DIRECTORIES})
  91. target_compile_definitions(${PLUGIN_PARAM_TARGET}_ui PUBLIC ${PLUGIN_PARAM_DEFINES} ${GET_LIBS_AND_DEFINES_DEFINES} DISTRHO_PLUGIN_TARGET_LV2)
  92. add_library(${PLUGIN_PARAM_TARGET} MODULE ${PLUGIN_PARAM_SOURCES} ${PLUGIN_PARAM_UI_SOURCES})
  93. set_target_properties(${PLUGIN_PARAM_TARGET} PROPERTIES PREFIX "")
  94. target_link_libraries(${PLUGIN_PARAM_TARGET} ${GET_LIBS_AND_DEFINES_LIBS} DPF DPF_UI)
  95. target_include_directories(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_INCLUDE_DIRECTORIES})
  96. target_compile_definitions(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_DEFINES} ${GET_LIBS_AND_DEFINES_DEFINES} DISTRHO_PLUGIN_TARGET_LV2)
  97. set(${PLUGIN_PARAM_TARGET}_TTL_FILES
  98. ${CMAKE_CURRENT_BINARY_DIR}/manifest.ttl
  99. ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_PARAM_TARGET}.ttl
  100. ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_PARAM_TARGET}_ui.ttl PARENT_SCOPE)
  101. else()
  102. add_library(${PLUGIN_PARAM_TARGET} MODULE ${PLUGIN_PARAM_SOURCES})
  103. set_target_properties(${PLUGIN_PARAM_TARGET} PROPERTIES PREFIX "")
  104. target_link_libraries(${PLUGIN_PARAM_TARGET} ${GET_LIBS_AND_DEFINES_LIBS} DPF)
  105. target_include_directories(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_INCLUDE_DIRECTORIES})
  106. target_compile_definitions(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_DEFINES} ${GET_LIBS_AND_DEFINES_DEFINES} DISTRHO_PLUGIN_TARGET_LV2 DISTRHO_PLUGIN_WANT_DIRECT_ACCESS=1 )
  107. set(${PLUGIN_PARAM_TARGET}_TTL_FILES
  108. ${CMAKE_CURRENT_BINARY_DIR}/manifest.ttl
  109. ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_PARAM_TARGET}.ttl PARENT_SCOPE)
  110. endif(PLUGIN_PARAM_UI_SOURCES)
  111. add_custom_command(TARGET ${PLUGIN_PARAM_TARGET} POST_BUILD COMMAND $<TARGET_FILE:lv2_ttl_generator> ARGS $<TARGET_FILE:${PLUGIN_PARAM_TARGET}> WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )
  112. endfunction(BUILD_LV2)
  113. function(BUILD_DSSI )
  114. find_package(LibLo)
  115. set(oneValueArgs TARGET UI_BACKEND)
  116. set(multiValueArgs SOURCES UI_SOURCES INCLUDE_DIRECTORIES DEFINES)
  117. cmake_parse_arguments(PLUGIN_PARAM "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
  118. get_libs_and_defines(${PLUGIN_PARAM_UI_BACKEND} )
  119. if(PLUGIN_PARAM_UI_SOURCES)
  120. add_library(${PLUGIN_PARAM_TARGET}_ui MODULE ${PLUGIN_PARAM_UI_SOURCES})
  121. set_target_properties(${PLUGIN_PARAM_TARGET}_ui PROPERTIES PREFIX "")
  122. target_link_libraries(${PLUGIN_PARAM_TARGET}_ui ${GET_LIBS_AND_DEFINES_LIBS} ${LIBLO_LIBRARIES})
  123. target_include_directories(${PLUGIN_PARAM_TARGET}_ui PUBLIC ${PLUGIN_PARAM_INCLUDE_DIRECTORIES} ${LIBLO_INCLUDE_DIRS})
  124. target_compile_definitions(${PLUGIN_PARAM_TARGET}_ui PUBLIC ${PLUGIN_PARAM_DEFINES} ${GET_LIBS_AND_DEFINES_DEFINES} DISTRHO_PLUGIN_TARGET_DSSI)
  125. add_library(${PLUGIN_PARAM_TARGET} MODULE ${PLUGIN_PARAM_SOURCES} ${PLUGIN_PARAM_UI_SOURCES})
  126. set_target_properties(${PLUGIN_PARAM_TARGET} PROPERTIES PREFIX "")
  127. target_link_libraries(${PLUGIN_PARAM_TARGET} ${GET_LIBS_AND_DEFINES_LIBS} DPF DPF_UI ${LIBLO_LIBRARIES})
  128. target_include_directories(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_INCLUDE_DIRECTORIES} ${LIBLO_INCLUDE_DIRS})
  129. target_compile_definitions(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_DEFINES} ${GET_LIBS_AND_DEFINES_DEFINES} DISTRHO_PLUGIN_TARGET_DSSI)
  130. else(PLUGIN_PARAM_UI_SOURCES)
  131. add_library(${PLUGIN_PARAM_TARGET} MODULE ${PLUGIN_PARAM_SOURCES})
  132. set_target_properties(${PLUGIN_PARAM_TARGET} PROPERTIES PREFIX "")
  133. target_link_libraries(${PLUGIN_PARAM_TARGET} ${GET_LIBS_AND_DEFINES_LIBS} ${LIBLO_LIBRARIES})
  134. target_include_directories(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_INCLUDE_DIRECTORIES} ${LIBLO_INCLUDE_DIRS})
  135. target_compile_definitions(${PLUGIN_PARAM_TARGET} PUBLIC ${PLUGIN_PARAM_DEFINES} ${GET_LIBS_AND_DEFINES_DEFINES} DISTRHO_PLUGIN_TARGET_DSSI)
  136. endif(PLUGIN_PARAM_UI_SOURCES)
  137. endfunction(BUILD_DSSI)
  138. #Are u so lazy, u have to call all functions? okay.... but declare erverything...
  139. function(BUILD_ALL_PLUGINS)
  140. set(oneValueArgs TARGET UI_BACKEND)
  141. set(multiValueArgs SOURCES INCLUDE_DIRECTORIES DEFINES)
  142. cmake_parse_arguments(PLUGIN_PARAM "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
  143. BUILD_LV2(TARGET ${PLUGIN_PARAM_TARGET}.lv2 UI_BACKEND ${PLUGIN_PARAM_UI_BACKEND} SOURCES ${PLUGIN_PARAM_SOURCES} INCLUDE_DIRECTORIES ${PLUGIN_PARAM_INCLUDE_DIRECTORIES} DEFINES ${PLUGIN_PARAM_DEFINES})
  144. BUILD_VST2(TARGET ${PLUGIN_PARAM_TARGET}.vst UI_BACKEND ${PLUGIN_PARAM_UI_BACKEND} SOURCES ${PLUGIN_PARAM_SOURCES} INCLUDE_DIRECTORIES ${PLUGIN_PARAM_INCLUDE_DIRECTORIES} DEFINES ${PLUGIN_PARAM_DEFINES})
  145. BUILD_DSSI(TARGET ${PLUGIN_PARAM_TARGET}.dssi UI_BACKEND ${PLUGIN_PARAM_UI_BACKEND} SOURCES ${PLUGIN_PARAM_SOURCES} INCLUDE_DIRECTORIES ${PLUGIN_PARAM_INCLUDE_DIRECTORIES} DEFINES ${PLUGIN_PARAM_DEFINES})
  146. if(${PLUGIN_PARAM_UI_BACKEND} STREQUAL "NONE")
  147. BUILD_LADSPA(TARGET ${PLUGIN_PARAM_TARGET}.ladspa UI_BACKEND ${PLUGIN_PARAM_UI_BACKEND} SOURCES ${PLUGIN_PARAM_SOURCES} INCLUDE_DIRECTORIES ${PLUGIN_PARAM_INCLUDE_DIRECTORIES} DEFINES ${PLUGIN_PARAM_DEFINES})
  148. endif(${PLUGIN_PARAM_UI_BACKEND} STREQUAL "NONE")
  149. endfunction(BUILD_ALL_PLUGINS)