Make SetResetFF.ar and .kr behave consistently for simultaneous trig/reset
[supercollider.git] / CMakeLists.txt
blob00e27462f2e090ead25e7670d0ee530443510da6
1 cmake_minimum_required (VERSION 2.8)
2 project (SuperCollider)
4 include("SCVersion.txt")
5 set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}${PROJECT_VERSION_PATCH}")
6 message(STATUS "SuperCollider Version: ${PROJECT_VERSION}")
8 include(CTest)
9 enable_testing()
11 include (cmake_modules/FinalFile.cmake)
13 if (NOT CMAKE_BUILD_TYPE)
14         message(STATUS "Build type defaulting to \"RelWithDebInfo\"")
15         set(CMAKE_BUILD_TYPE "RelWithDebInfo")
16 endif()
18 if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
19         message(WARNING "WARNING: IN-PLACE BUILDS ARE NOT RECOMMENDED - PLEASE USE A BUILD DIRECTORY")
20 endif()
23 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules
24                       ${CMAKE_MODULE_PATH})
26 CONFIGURE_FILE(
27   "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/cmake_uninstall.cmake.in"
28   "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
29   IMMEDIATE @ONLY)
31 ADD_CUSTOM_TARGET(uninstall
32   "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
34 if(APPLE)
35         STRING(REGEX REPLACE "^.*MacOSX10.([0-9]+).*$" "\\1" MAC_OSX_SDK_VERSION  "${CMAKE_OSX_SYSROOT}")
37         if(CMAKE_OSX_DEPLOYMENT_TARGET)
38                 if (CMAKE_OSX_DEPLOYMENT_TARGET GREATER 10.4)
39                         set(HID_UTIL_DIR "HID_Utilities")
40                 else()
41                         set(HID_UTIL_DIR "HID_Utilities_10_4")
42                 endif()
43         else()
44                 if (${MAC_OSX_SDK_VERSION} GREATER 4)
45                         set(HID_UTIL_DIR "HID_Utilities")
46                 else()
47                         set(HID_UTIL_DIR "HID_Utilities_10_4")
48                 endif()
49         endif()
50         MESSAGE( STATUS "Using HID Utilities from folder '${HID_UTIL_DIR}'")
51 endif()
53 if (CMAKE_SYSTEM_NAME MATCHES "Linux")
54         set(LINUX 1)
55 endif()
57 #############################################
58 # Compiler flags etc
60 add_definitions(-DWIN32_LEAN_AND_MEAN)
62 if (${CMAKE_COMPILER_IS_GNUCXX})
63         exec_program(${CMAKE_CXX_COMPILER} ARGS -dumpversion OUTPUT_VARIABLE _gcc_version)
65         add_definitions("-fschedule-insns2" "-fomit-frame-pointer")
67         add_definitions("-Wreturn-type")
69 #       disabled for now: -ffast-math breaks avx intrinsics and -fsigned-zeros/-fno-associative-math are not available in some versions
70 #       if (${_gcc_version} VERSION_GREATER 4.0.99)
71 #               add_definitions("-ffast-math -fsigned-zeros -fno-associative-math")
72 #       endif()
74         option(DSO_VISIBILITY "DSO visibility support for gcc" OFF)
76         if (DSO_VISIBILITY)
77                 add_definitions(-fvisibility=hidden)
78         endif()
80         if(APPLE)
81                 exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)
82                 if ("${_gcc_version_info}" MATCHES "Apple")
83                         add_definitions("-fpascal-strings")
84                 endif()
85                 add_definitions("-D_REENTRANT")
86         elseif(NOT (WIN32 AND NOT CYGWIN))
87                 add_definitions("-pthread")
88         endif()
89 endif ()
91 if (${CMAKE_CXX_COMPILER} MATCHES icpc)
92         set(CMAKE_COMPILER_IS_INTEL 1)
93         add_definitions(-Wno-unknown-pragmas)
94         add_definitions(-simd)
95 endif()
97 if (${CMAKE_CXX_COMPILER} MATCHES clang)
98         option(DSO_VISIBILITY "DSO visibility support for clang" OFF)
100         if (DSO_VISIBILITY)
101                 add_definitions(-fvisibility=hidden)
102         endif()
104         set(CMAKE_COMPILER_IS_CLANG 1)
105 endif()
107 if(APPLE)
108         set_property(DIRECTORY
109                 APPEND
110                 PROPERTY COMPILE_DEFINITIONS SC_DARWIN)
111 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
112         add_definitions("-DSC_LINUX")
113         add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
114 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
115         add_definitions("-DSC_FREEBSD")
116         add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
117 endif()
119 if(WIN32)
120     set_property(DIRECTORY
121                  APPEND
122                  PROPERTY COMPILE_DEFINITIONS SC_WIN32 NOMINMAX _WIN32_WINNT=0x0500)
124     if(MSVC)
125         SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /MTd")
126         SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
127     endif()
128 endif()
131 #############################################
132 # some default libraries
134 find_package(Pthreads)
136 if (NOT PTHREADS_FOUND)
137     message(SEND_ERROR "cannot find libpthreads")
138 endif()
139 include_directories(${PTHREADS_INCLUDE_DIR})
141 if (MSVC OR MINGW)
142     set(MATH_LIBRARY "")
143 else()
144     find_library(MATH_LIBRARY m)
145 endif()
147 if(CURL)
148         find_package(CURL)
149         if(CURL_FOUND)
150                 add_definitions("-DHAVE_LIBCURL")
151                 include_directories(${CURL_INCLUDE_DIRS})
152         endif()
153 endif()
155 #############################################
156 # Options
157 option(NOVA_SIMD "Build with nova-simd support." ON)
158 option(FINAL_BUILD "Build as single source file." OFF)
160 option(CURL "Build with curl for remote file download." ON)
162 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
164 option(SSE "Compile with support for SSE instructions.")
165 option(SSE41 "Compile with support for SSE4.1 instructions.")
166 option(SSE42 "Compile with support for SSE4.2 instructions.")
169 option(LIBSCSYNTH "Compile libscsynth as shared library" OFF)
172 option(INSTALL_HELP "Install help docs and examples along with the software" ON)
173 option(INSTALL_OLD_HELP "Install old and deprecated help files" ON)
174 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
176 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
177     option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
178 elseif()
179     option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
180 endif()
182 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
183 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
184 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
186 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
188 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
190 option(SCLANG_SERVER "Build with internal server." ON)
192 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
193         option(SC_WII "Build sclang with WII support" ON)
194 endif()
196 option(SC_QT "Build SuperCollider with Qt GUI" ON)
197 if (SC_QT)
198   message( STATUS "Compiling with Qt GUI" )
199 endif (SC_QT)
201 if(WIN32)
202         option(SC_PSYCOLLIDER "Build PsyCollider" ON)
203 else()
204         option(SC_PSYCOLLIDER "Build PsyCollider" OFF)
205 endif()
207 if(WIN32)
208     option(SC_WIN_DEP_DIRS
209         "A list of directories where dependencies will be searched for when packaging.")
210 endif()
212 if(CMAKE_COMPILER_IS_GNUCXX)
213     option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
214     option(LTO "Use GCC's link time optimizer' (experimental).")
215 endif()
217 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
218 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
220 #############################################
221 # some preprocessor flags
222 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
223         if (SSE)
224                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
225                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
226         endif()
227         if (SSE41)
228                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
229                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
230         endif()
231         if (SSE42)
232                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
233                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
234         endif()
235         if (NATIVE)
236                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
237                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
238         endif()
240         if (SC_OX)
241                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
242         endif()
243 endif()
245 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
246         if (SSE42)
247                 add_definitions(-xSSE4.2)
248         elseif (SSE41)
249                 add_definitions(-xSSE4.1)
250         elseif (SSE)
251                 add_definitions(-mia32)
252         endif()
253         if (SC_OX)
254                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
255         endif()
257         # disable warnings
258         add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
259         add_definitions(-diag-disable 279) # controlling expression is constant
261 endif()
263 if (SC_MEMORY_DEBUGGING)
264         add_definitions(-DDISABLE_MEMORY_POOLS)
265 endif()
267 #############################################
268 # subdirectories
269 add_subdirectory(external_libraries)
270 add_subdirectory(server)
271 add_subdirectory(lang)
272 add_subdirectory(bindings)
273 add_subdirectory(editors)
274 add_subdirectory(platform)
276 if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
277     install(DIRECTORY include/common include/plugin_interface include/server include/lang
278         DESTINATION ${CMAKE_INSTALL_PREFIX}/include/SuperCollider
279         FILES_MATCHING PATTERN "*.h"
280     )
281 endif()
283 if(APPLE)
284         # determines the app name and app install location (scappbundlename, scappdir):
285         include (cmake_modules/MacAppFolder.cmake)
287         set(auxresourcesdir ${scappauxresourcesdir})
289         # Some aux files which go in the app's folder
290         install(FILES README.txt ChangeLog COPYING AUTHORS platform/mac/MOVED_STUFF.txt
291                 DESTINATION ${scappbundlename}
292         )
293 elseif (WIN32)
294         set(auxresourcesdir "SuperCollider")
295 else()
296         set(auxresourcesdir "share/SuperCollider")
297 endif()
299 set(SCCLASSLIB_EXCLUDE_REGEX "IGNOREME")
301 if(NOT SC_QT)
302         set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}|QtCollider")
303 endif()
305 if(WIN32)
306         set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}|PsycolliderDocument")
307 endif()
310 if(APPLE)
312         if(SC_SYMLINK_CLASSLIB)
314                 #if there are folders inside SCCLassLibrary abort cmake.
315                 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
316                 foreach(onedirectory ${classlibraryfolders})
317                         message( "${onedirectory}" )
318                         if(NOT IS_SYMLINK "${onedirectory}")
319                                 message(FATAL_ERROR "Symlinking will fail ! SCClassLibrary folder already exists and has directories inside, please delete it first." )
320                         endif()
321                 endforeach(onedirectory)
323                 message(STATUS "Will create symlink of SCClassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary" )
324                 if(NOT EXISTS "{CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
325                         install( CODE "EXECUTE_PROCESS(COMMAND mkdir ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary)" )
326                 endif()
327                 #symlink the folders inside SCCLassLibrary. Check if QtCollider folder should be symlinked or not.
328                 file(GLOB classlibraryfolders RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary" "SCClassLibrary/[^.]*")
329                 foreach(onedirectory ${classlibraryfolders})
330                         if(NOT "${onedirectory}" MATCHES "${SCCLASSLIB_EXCLUDE_REGEX}")
331                                 install( CODE
332                                         "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/${onedirectory} ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/${onedirectory} )" )
333                         endif()
334                 endforeach(onedirectory)
335         else()
336                 message(STATUS "Will copy SCCLassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
338                 #if directory contains symlinks, unlink them.
339                 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
340                         file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
341                         foreach(onedirectory ${classlibraryfolders})
342                                 if(IS_SYMLINK "${onedirectory}")
343                                         message(STATUS "Unlinking ${onedirectory}")
344                                         install( CODE "EXECUTE_PROCESS(COMMAND unlink ${onedirectory} )" )
345                                 endif()
346                         endforeach(onedirectory)
347                 endif()
349                 install(DIRECTORY SCClassLibrary
350                         DESTINATION ${auxresourcesdir}
351                         REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
352                 )
353         endif()
354 else()
355         install(DIRECTORY SCClassLibrary
356                 DESTINATION ${auxresourcesdir}
357                 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
358                 PATTERN "*~" EXCLUDE
359                 PATTERN "*#" EXCLUDE
360         )
361 endif()
363 configure_file(platform/SCVersion.sc.in SCVersion/SCVersion.sc)
364 install(DIRECTORY "${CMAKE_BINARY_DIR}/SCVersion" DESTINATION "${auxresourcesdir}/SCClassLibrary")
366 install(DIRECTORY sounds
367         DESTINATION ${auxresourcesdir}
370 if(APPLE AND ("${standalone}" STREQUAL ""))
371         set(exampledir "${scappbundlename}")
372 else()
373         set(exampledir "${auxresourcesdir}")
374 endif()
376 install(DIRECTORY examples
377         DESTINATION ${exampledir}
378         PATTERN "*~" EXCLUDE
379         PATTERN "*#" EXCLUDE
382 if(INSTALL_OLD_HELP)
383         install(DIRECTORY Help
384                 DESTINATION ${auxresourcesdir}
385         )
386 endif()
388 if(INSTALL_HELP)
389         if(SC_SYMLINK_CLASSLIB AND APPLE)
390                 message(STATUS "Will create symlink of HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
391                 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
392                         message(FATAL_ERROR "Symlinking will fail ! HelpSource folder already exists, please delete it first." )
393                 endif()
394                 install( CODE
395                                         "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
396         else()
397                 message(STATUS "Will copy HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
398                 if(APPLE)
399                         if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
400                                 if(IS_SYMLINK "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
401                                         message(STATUS "Unlinking ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
402                                         install( CODE "EXECUTE_PROCESS(COMMAND unlink ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
403                                 endif()
404                         endif()
405                 endif()
406                 install(DIRECTORY HelpSource
407                         DESTINATION ${auxresourcesdir}
408                         PATTERN "*~" EXCLUDE
409                         PATTERN "*#" EXCLUDE
410                 )
411         endif()
412 endif()
414 #############################################
416 # build scdoc help files
418 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
419 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
420 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
421 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
422 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
423 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
425 # this folder has an extension to Platform that disables the loadStartupFiles method
426 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
428 foreach(arg ${BUILD_CLASSLIBRARIES})
429         set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
430 endforeach()
432 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
434 if(SC_DOC_RENDER)
435         file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
436         file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
438         add_custom_target(doc ALL
439                                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
440                                                         -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
441                                                         platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
442                                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
443                                         DEPENDS sclang ${SCDocSources} ${SCDocClasses})
445 endif()
447 set_directory_properties(
448         PROPERTIES
449         ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
451 #############################################
453 # testsuite
455 add_subdirectory(testsuite)
457 #############################################
458 # CPack support
460 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
461 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
462 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
464 if(APPLE)
465         set(CPACK_GENERATOR "DragNDrop")
466         set(CPACK_DMG_FORMAT "UDBZ")
467         set(CPACK_DMG_VOLUME_NAME "${scappbundlename}")
468         set(CPACK_SYSTEM_NAME "OSX")
469 #       set(CPACK_PACKAGE_FILE_NAME "${scappbundlename}-${PROJECT_VERSION}")
470         set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/package/ds_store")
471         set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/package/background.png")
472         set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/platform/mac/Resources/SCcube.icns")
473 endif()
475 if(NOT WIN32) # We define a custom 'package' target in platform/windows/CMakeLists.txt
476     include(CPack)
477 endif()
479 #############################################
480 # hide advanced variables
481 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
482 mark_as_advanced(DL)
483 mark_as_advanced(EMACS_EXECUTABLE)
484 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
485 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
486 mark_as_advanced(MATH_LIBRARY)
487 mark_as_advanced(QT_QMAKE_EXECUTABLE)
488 mark_as_advanced(SNDFILE)