aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt203
1 files changed, 203 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..612d056
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,203 @@
+# from https://github.com/csound/plugins : common CMake operations
+cmake_minimum_required(VERSION 2.8.12)
+project(Csound-plugins)
+
+if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
+ set(CMAKE_COMPILER_IS_CLANG 1)
+endif()
+
+# C++11 needed
+if(NOT MSVC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+endif()
+
+set(APIVERSION "6.0")
+
+set(CMAKE_MACOSX_RPATH 1)
+set(CMAKE_VERBOSE_MAKEFILE ON)
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
+
+include(TestBigEndian)
+include(CheckFunctionExists)
+include(CheckCCompilerFlag)
+include(CheckCXXCompilerFlag)
+
+### COMPILER OPTIMIZATION FLAGS
+option(USE_COMPILER_OPTIMIZATIONS "Use the default Csound compiler optimization flags" ON)
+if(USE_COMPILER_OPTIMIZATIONS)
+ include(${CMAKE_SOURCE_DIR}/cmake/CompilerOptimizations.cmake)
+endif()
+
+if(APPLE)
+ set(OSX_VERSION " ")
+endif()
+
+## USER OPTIONS ##
+# Optional targets, they should all default to ON (check_deps will disable them if not possible to build)
+option(USE_DOUBLE "Set to use double-precision floating point for audio samples." ON)
+option(USE_LRINT "Use lrint/lrintf for converting floating point values to integers." ON)
+option(BUILD_RELEASE "Build for release" ON)
+option(USE_GIT_COMMIT "Show the git commit in version information" ON)
+
+# in Release configuration, set NDEBUG
+if(${CMAKE_BUILD_TYPE} MATCHES "Release")
+message("-----> Release mode")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNDEBUG")
+elseif(${CMAKE_BUILD_TYPE} MATCHES "Debug")
+message("-----> Debug mode")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBETA")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBETA")
+endif()
+
+# set -Werror if in Debug configuration
+if(NOT MSVC AND NOT WASM)
+ set(CMAKE_CXX_FLAGS_RELEASE "-O3 ")
+ set(CMAKE_C_FLAGS_RELEASE "-O3 ")
+ if(${CMAKE_BUILD_TYPE} MATCHES "Debug")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wno-missing-field-initializers")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wno-missing-field-initializers")
+ endif()
+endif()
+
+
+if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+ set(LINUX YES)
+else()
+ set(LINUX NO)
+endif()
+
+set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
+
+check_c_compiler_flag(-fvisibility=hidden HAS_VISIBILITY_HIDDEN)
+check_cxx_compiler_flag(-fvisibility=hidden HAS_CXX_VISIBILITY_HIDDEN)
+if (HAS_VISIBILITY_HIDDEN)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
+endif()
+if (HAS_CXX_VISIBILITY_HIDDEN)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
+endif()
+
+check_c_compiler_flag(-std=gnu99 HAS_GNU99)
+if (HAS_GNU99)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
+endif()
+if (HAS_CXX_VISIBILITY_HIDDEN)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
+endif()
+
+find_package(Csound)
+
+option(USE_LIB64 "Set to on to set installation directory for libraries to lib64" OFF)
+if(USE_LIB64)
+ set(LIBRARY_INSTALL_DIR "lib64")
+ add_definitions("-DLIB64")
+else()
+ set(LIBRARY_INSTALL_DIR "lib")
+endif()
+message(STATUS "LIBRARY INSTALL DIR: ${LIBRARY_INSTALL_DIR}")
+
+if(USE_DOUBLE)
+ message(STATUS "Building with 64-bit floats")
+ set(PLUGIN_INSTALL_DIR "${LIBRARY_INSTALL_DIR}/csound/plugins64-${APIVERSION}")
+ if(APPLE)
+ set(PLUGIN_INSTALL_DIR "${CS_FRAMEWORK_DEST}/${CSOUNDLIB}.framework/Versions/${APIVERSION}/Resources/Opcodes64")
+ endif()
+else()
+ message(STATUS "Building with 32-bit floats")
+ set(PLUGIN_INSTALL_DIR "${LIBRARY_INSTALL_DIR}/csound/plugins-${APIVERSION}")
+ if(APPLE)
+ set(PLUGIN_INSTALL_DIR "${CS_FRAMEWORK_DEST}/${CSOUNDLIB}.framework/Versions/${APIVERSION}/Resources/Opcodes")
+ endif()
+endif()
+
+
+# Checks if dependencies for an enabled target are fulfilled.
+# If FAIL_MISSING is true and the dependencies are not fulfilled,
+# it will abort the cmake run.
+# If FAIL_MISSING is false, it will set the option to OFF.
+# If the target is not enabled, it will do nothing.
+# example: check_deps(BUILD_NEW_PARSER FLEX_EXECUTABLE BISON_EXECUTABLE)
+function(check_deps option)
+ if(${option})
+ set(i 1)
+ while( ${i} LESS ${ARGC} )
+ set(dep ${ARGV${i}})
+ if(NOT ${dep})
+ if(FAIL_MISSING)
+ message(FATAL_ERROR
+ "${option} is enabled, but ${dep}=\"${${dep}}\"")
+ else()
+ message(STATUS "${dep}=\"${${dep}}\", so disabling ${option}")
+ set(${option} OFF PARENT_SCOPE)
+ # Set it in the local scope too
+ set(${option} OFF)
+ endif()
+ endif()
+ math(EXPR i "${i}+1")
+ endwhile()
+ endif()
+ if(${option})
+ message(STATUS "${option} is enabled.")
+ else()
+ message(STATUS "${option} is disabled.")
+ endif()
+endfunction(check_deps)
+
+# Utility function to make plugins. All plugin targets should use this as it
+# sets up output directory set in top-level CmakeLists.txt
+# and adds the appropriate install target
+#
+# libname - name of library to produce
+# srcs - list of src files (must be quoted if a list)
+# extralibs (OPTIONAL) - extra libraries to link the plugin to
+#
+# NB - this was moved here as it needs some VARS defined above
+# for setting up the framework
+function(make_plugin libname srcs)
+ if(APPLE)
+ add_library(${libname} SHARED ${srcs})
+ else()
+ add_library(${libname} MODULE ${srcs})
+ endif()
+
+ set(i 2)
+ while( ${i} LESS ${ARGC} )
+ target_link_libraries(${libname} ${ARGV${i}})
+ math(EXPR i "${i}+1")
+ endwhile()
+
+ set_target_properties(${libname} PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+
+ install(TARGETS ${libname}
+ LIBRARY DESTINATION "${PLUGIN_INSTALL_DIR}"
+ ARCHIVE DESTINATION "${PLUGIN_INSTALL_DIR}" )
+endfunction(make_plugin)
+
+# Linux does not have a separate libintl, it is part of libc
+set(LIBINTL_AVAIL (LIBINTL_LIBRARY OR LINUX))
+
+if(LINUX)
+ message(STATUS "Building on Linux.")
+ add_definitions(-DLINUX -DPIPES -D_GNU_SOURCE -DHAVE_SOCKETS)
+ list(APPEND libcsound_LIBS ${MATH_LIBRARY} dl)
+
+endif()
+
+if(APPLE AND NOT IOS)
+ message(STATUS "Building on OSX")
+ add_definitions(-DMACOSX -DPIPES -DNO_FLTK_THREADS -DHAVE_SOCKETS)
+ find_library(ACCELERATE_LIBRARY Accelerate)
+ find_path(VECLIB_PATH "Accelerate/Accelerate.h")
+ include_directories(${VECLIB_PATH})
+ list(APPEND libcsound_LIBS ${MATH_LIBRARY} dl ${ACCELERATE_LIBRARY})
+endif()
+
+if(WIN32)
+ add_definitions(-DWIN32)
+endif()
+
+include(Plugin.cmake)