diff --git a/CMakeLists.txt b/CMakeLists.txt index ab86488..a8590ec 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,22 +1,29 @@ -####### original SC Cmake file starts here -cmake_minimum_required(VERSION 3.3) +cmake_minimum_required(VERSION 3.11) +################################################################################ +# Paths +set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/release-packaging") +set(MAX_TARGET_NAMESPACE "" CACHE STRING "Optional namesapce to prepend to targets to prevent collision in super-builds") -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_EXTENSIONS OFF) -if(APPLE) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -mavx -msse -msse2 -msse3 -msse4") -set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -stdlib=libc++") -SET(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") -set(CMAKE_OSX_DEPLOYMENT_TARGET "10.7" CACHE STRING "Minimum OS X deployment version") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic") +set(SC_PATH "" CACHE PATH "Path to the top of SuperCollider source tree") +if(NOT SC_PATH) + message(FATAL_ERROR "SuperCollider source path is not set") endif() -project (fluid_decomposition_supercollider LANGUAGES CXX) +set(FLUID_PATH "" CACHE PATH "Optional path to the Fluid Decomposition repo") +# set(FLUID_M_PATH "" CACHE PATH "Optional path to the Fluid fluid_manipulation repo") + +if (APPLE) + set(CMAKE_OSX_ARCHITECTURES x86_64) + set(CMAKE_XCODE_GENERATE_SCHEME ON) +endif() -option(SUPERNOVA "Build plugins for supernova" OFF) +################################################################################ +# Main project +project (fluid_decomposition_supercollider LANGUAGES CXX) +set_property(GLOBAL PROPERTY USE_FOLDERS ON) +set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY ON) MACRO(SUBDIRLIST result curdir) FILE(GLOB children RELATIVE ${curdir} ${curdir}/*) @@ -33,37 +40,16 @@ include(FetchContent) set(FETCHCONTENT_QUIET FALSE) -if(DEFINED FLUID_PATH) -get_filename_component(FLUID_PATH ${FLUID_PATH} ABSOLUTE) -message(${FLUID_PATH}) -FetchContent_Declare( - fluid_decomposition - # URL ${FLUID_PATH} - DOWNLOAD_COMMAND "" - SOURCE_DIR "${FLUID_PATH}/" -) -else() FetchContent_Declare( fluid_decomposition GIT_REPOSITORY https://bitbucket.org/flucoma/fluid_decomposition.git GIT_PROGRESS TRUE ) -endif() -if(DEFINED FLUID_M_PATH) -get_filename_component(FLUID_M_PATH ${FLUID_M_PATH} ABSOLUTE) -FetchContent_Declare( - fluid_manipulation - # URL ${FLUID_M_PATH} - DOWNLOAD_COMMAND "" - SOURCE_DIR "${FLUID_M_PATH}/" -) -else() -FetchContent_Declare( - fluid_manipulation - GIT_REPOSITORY https://bitbucket.org/flucoma/fluid_manipulation.git - GIT_PROGRESS TRUE -) +if(FLUID_PATH) + get_filename_component( + FETCHCONTENT_SOURCE_DIR_FLUID_DECOMPOSITION ${FLUID_PATH} ABSOLUTE + ) endif() FetchContent_GetProperties(fluid_decomposition) @@ -72,37 +58,25 @@ if(NOT fluid_decomposition_POPULATED) add_subdirectory(${fluid_decomposition_SOURCE_DIR} ${fluid_decomposition_BINARY_DIR}) endif() -FetchContent_GetProperties(fluid_manipulation) -if(NOT fluid_manipulation_POPULATED) - FetchContent_Populate(fluid_manipulation) - add_subdirectory(${fluid_manipulation_SOURCE_DIR} ${fluid_manipulation_BINARY_DIR}) -endif() - -if (NOT (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/release-packaging/AudioFiles/")) - file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/release-packaging/AudioFiles/") -endif() - -file(COPY "${fluid_decomposition_SOURCE_DIR}/AudioFiles/" DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/release-packaging/AudioFiles/") - -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/release-packaging/plugins") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_SYSTEM_NAME}/plugins") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") - set(CMAKE_SHARED_MODULE_PREFIX "") + if(APPLE OR WIN32) -set(CMAKE_SHARED_MODULE_SUFFIX ".scx") + set(CMAKE_SHARED_MODULE_SUFFIX ".scx") endif() #needed for complaint-free static linking with GCC if(CMAKE_COMPILER_IS_GNUCXX) -target_compile_options( HISSTools_FFT PUBLIC -fPIC ) -ENDIF(CMAKE_COMPILER_IS_GNUCXX) + target_compile_options( HISSTools_FFT PUBLIC -fPIC ) +ENDIF() add_library(FLUID_SC_WRAPPER INTERFACE) -target_sources(FLUID_SC_WRAPPER -INTERFACE -"${CMAKE_CURRENT_SOURCE_DIR}/include/FluidSCWrapper.hpp" -"${CMAKE_CURRENT_SOURCE_DIR}/include/SCBufferAdaptor.hpp" +target_sources(FLUID_SC_WRAPPER + INTERFACE + "${CMAKE_CURRENT_SOURCE_DIR}/include/FluidSCWrapper.hpp" + "${CMAKE_CURRENT_SOURCE_DIR}/include/SCBufferAdaptor.hpp" ) SUBDIRLIST(PROJECT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/src") @@ -112,3 +86,17 @@ foreach (project_dir ${PROJECT_DIRS}) add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/src/${project_dir}") endif () endforeach () + +#install bits. + +set(SC_INSTALL_PREFIX "." CACHE PATH "Prefix for assembling PD packages") +set(FLUID_PACKAGE_NAME FluidCorpusManipulation CACHE STRING "Name for published package") +set(SC_PACKAGE_ROOT ${SC_INSTALL_PREFIX}/${FLUID_PACKAGE_NAME}) + +foreach(PACKAGE_DIRECTORY Classes;HelpSource;ignore) + install(DIRECTORY "release-packaging/${PACKAGE_DIRECTORY}" DESTINATION ${SC_PACKAGE_ROOT}) +endforeach() + +install(DIRECTORY CMAKE_LIBRARY_OUTPUT_DIRECTORY DESTINATION plugins PATTERN "*.ilk" EXCLUDE PATTERN "*.PDB" EXCLUDE) +install(DIRECTORY "${fluid_decomposition_SOURCE_DIR}/AudioFiles/" DESTINATION ./AudioFiles) +install(FILES QuickStart.md DESTINATION .) diff --git a/scripts/target_post.cmake b/scripts/target_post.cmake index f6a4c44..1cf8e50 100644 --- a/scripts/target_post.cmake +++ b/scripts/target_post.cmake @@ -1,10 +1,12 @@ -target_compile_features(${PLUGIN} PUBLIC cxx_std_14) +target_compile_features(${PLUGIN} PRIVATE cxx_std_14) if(MSVC) - target_compile_options(${PLUGIN} PRIVATE /W4) + target_compile_options(${PLUGIN} PRIVATE /W3) else() - target_compile_options(${PLUGIN} PRIVATE -Wall -Wextra -Wpedantic -Wreturn-type -Wconversion) + target_compile_options(${PLUGIN} PRIVATE + -Wall -Wextra -Wpedantic -Wreturn-type -Wconversion -Wno-conversion -Wno-c++11-narrowing -Wno-sign-compare + ) endif() set_target_properties(${PLUGIN} PROPERTIES @@ -15,15 +17,13 @@ set_target_properties(${PLUGIN} PROPERTIES target_link_libraries( ${PLUGIN} - PUBLIC - FLUID_DECOMPOSITION - FLUID_MANIP - FLUID_SC_WRAPPER PRIVATE + FLUID_DECOMPOSITION + # FLUID_MANIP + FLUID_SC_WRAPPER HISSTools_FFT ) - target_include_directories( ${PLUGIN} PRIVATE @@ -42,38 +42,18 @@ target_include_directories( get_property(HEADERS TARGET FLUID_DECOMPOSITION PROPERTY INTERFACE_SOURCES) source_group(TREE "${fluid_decomposition_SOURCE_DIR}/include" FILES ${HEADERS}) -get_property(HEADERS TARGET FLUID_MANIP PROPERTY INTERFACE_SOURCES) -source_group(TREE "${fluid_manipulation_SOURCE_DIR}/include" FILES ${HEADERS}) - -if (SUPERNOVA) - target_include_directories( - ${PLUGIN} - SYSTEM PRIVATE - "${SC_PATH}/external_libraries/nova-tt" - "${SC_PATH}/external_libraries/boost_lockfree" - "${SC_PATH}/external_libraries/boost-lockfree" - ) -endif() - -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG) - target_compile_options(${PLUGIN} PRIVATE -fvisibility=hidden) - - include (CheckCXXCompilerFlag) - - # CHECK_CXX_COMPILER_FLAG(-msse HAS_CXX_SSE) - # CHECK_CXX_COMPILER_FLAG(-msse2 HAS_CXX_SSE2) - # CHECK_CXX_COMPILER_FLAG(-mfpmath=sse HAS_CXX_FPMATH_SSE) - # CHECK_CXX_COMPILER_FLAG(-mavx HAS_AVX) - # CHECK_CXX_COMPILER_FLAG(-mavx2 HAS_AVX2) - - target_compile_options( - ${PLUGIN} - PRIVATE - $<$>: -mavx> - ) -endif() - - +# get_property(HEADERS TARGET FLUID_MANIP PROPERTY INTERFACE_SOURCES) +# source_group(TREE "${fluid_manipulation_SOURCE_DIR}/include" FILES ${HEADERS}) +# +# if (SUPERNOVA) +# target_include_directories( +# ${PLUGIN} +# SYSTEM PRIVATE +# "${SC_PATH}/external_libraries/nova-tt" +# "${SC_PATH}/external_libraries/boost_lockfree" +# "${SC_PATH}/external_libraries/boost-lockfree" +# ) +# endif() if(MINGW) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mstackrealign") @@ -82,16 +62,8 @@ endif() if(MSVC) target_compile_options(${PLUGIN} PRIVATE /arch:AVX -D_USE_MATH_DEFINES) -else(MSVC) -target_compile_options( - ${PLUGIN} PRIVATE $<$>: -mavx> -) -endif(MSVC) - -####### added the fluid_decomposition - -# if(SUPERNOVA) -# add_library(${PLUGIN}_supernova MODULE ${FILENAME}) -# set_property(TARGET ${PROJECT}_supernova -# PROPERTY COMPILE_DEFINITIONS SUPERNOVA) -# endif() +else() + target_compile_options( + ${PLUGIN} PRIVATE $<$>: -mavx> -fvisibility=hidden + ) +endif()