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}")
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")
18 if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
19 message(WARNING "WARNING: IN-PLACE BUILDS ARE NOT RECOMMENDED - PLEASE USE A BUILD DIRECTORY")
23 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules
27 "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/cmake_uninstall.cmake.in"
28 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
31 ADD_CUSTOM_TARGET(uninstall
32 "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
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")
41 set(HID_UTIL_DIR "HID_Utilities_10_4")
44 if (${MAC_OSX_SDK_VERSION} GREATER 4)
45 set(HID_UTIL_DIR "HID_Utilities")
47 set(HID_UTIL_DIR "HID_Utilities_10_4")
50 MESSAGE( STATUS "Using HID Utilities from folder '${HID_UTIL_DIR}'")
53 if (CMAKE_SYSTEM_NAME MATCHES "Linux")
57 #############################################
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")
74 option(DSO_VISIBILITY "DSO visibility support for gcc" OFF)
77 add_definitions(-fvisibility=hidden)
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")
85 add_definitions("-D_REENTRANT")
86 elseif(NOT (WIN32 AND NOT CYGWIN))
87 add_definitions("-pthread")
91 if (${CMAKE_CXX_COMPILER} MATCHES icpc)
92 set(CMAKE_COMPILER_IS_INTEL 1)
93 add_definitions(-Wno-unknown-pragmas)
94 add_definitions(-simd)
97 if (${CMAKE_CXX_COMPILER} MATCHES clang)
98 option(DSO_VISIBILITY "DSO visibility support for clang" OFF)
101 add_definitions(-fvisibility=hidden)
104 set(CMAKE_COMPILER_IS_CLANG 1)
108 set_property(DIRECTORY
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")
120 set_property(DIRECTORY
122 PROPERTY COMPILE_DEFINITIONS SC_WIN32 NOMINMAX _WIN32_WINNT=0x0500)
125 SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /MTd")
126 SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
131 #############################################
132 # some default libraries
134 find_package(Pthreads)
136 if (NOT PTHREADS_FOUND)
137 message(SEND_ERROR "cannot find libpthreads")
139 include_directories(${PTHREADS_INCLUDE_DIR})
144 find_library(MATH_LIBRARY m)
150 add_definitions("-DHAVE_LIBCURL")
151 include_directories(${CURL_INCLUDE_DIRS})
155 #############################################
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(INSTALL_HELP "Install help docs and examples along with the software" ON)
170 option(INSTALL_OLD_HELP "Install old and deprecated help files" ON)
171 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
173 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
174 option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
176 option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
179 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
180 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
181 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
183 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
185 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
187 option(SCLANG_SERVER "Build with internal server." ON)
189 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
190 option(SC_WII "Build sclang with WII support" ON)
193 option(SC_QT "Build SuperCollider with Qt GUI" ON)
195 message( STATUS "Compiling with Qt GUI" )
199 option(SC_PSYCOLLIDER "Build PsyCollider" ON)
201 option(SC_PSYCOLLIDER "Build PsyCollider" OFF)
205 option(SC_WIN_DEP_DIRS
206 "A list of directories where dependencies will be searched for when packaging.")
209 if(CMAKE_COMPILER_IS_GNUCXX)
210 option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
211 option(LTO "Use GCC's link time optimizer' (experimental).")
214 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
215 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
217 #############################################
218 # some preprocessor flags
219 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
221 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
222 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
225 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
226 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
229 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
230 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
233 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
234 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
238 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
242 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
244 add_definitions(-xSSE4.2)
246 add_definitions(-xSSE4.1)
248 add_definitions(-mia32)
251 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
255 add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
256 add_definitions(-diag-disable 279) # controlling expression is constant
260 if (SC_MEMORY_DEBUGGING)
261 add_definitions(-DDISABLE_MEMORY_POOLS)
264 #############################################
266 add_subdirectory(external_libraries)
267 add_subdirectory(server)
268 add_subdirectory(lang)
269 add_subdirectory(bindings)
270 add_subdirectory(editors)
271 add_subdirectory(platform)
273 if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
274 install(DIRECTORY include/common include/plugin_interface include/server include/lang
275 DESTINATION ${CMAKE_INSTALL_PREFIX}/include/SuperCollider
276 FILES_MATCHING PATTERN "*.h"
281 # determines the app name and app install location (scappbundlename, scappdir):
282 include (cmake_modules/MacAppFolder.cmake)
284 set(auxresourcesdir ${scappauxresourcesdir})
286 # Some aux files which go in the app's folder
287 install(FILES README.txt ChangeLog COPYING AUTHORS platform/mac/MOVED_STUFF.txt
288 DESTINATION ${scappbundlename}
291 set(auxresourcesdir "SuperCollider")
293 set(auxresourcesdir "share/SuperCollider")
297 set(SCCLASSLIB_EXCLUDE_REGEX "QtCollider")
299 set(SCCLASSLIB_EXCLUDE_REGEX "IGNOREME")
304 if(SC_SYMLINK_CLASSLIB)
306 #if there are folders inside SCCLassLibrary abort cmake.
307 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
308 foreach(onedirectory ${classlibraryfolders})
309 message( "${onedirectory}" )
310 if(NOT IS_SYMLINK "${onedirectory}")
311 message(FATAL_ERROR "Symlinking will fail ! SCClassLibrary folder already exists and has directories inside, please delete it first." )
313 endforeach(onedirectory)
315 message(STATUS "Will create symlink of SCClassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary" )
316 if(NOT EXISTS "{CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
317 install( CODE "EXECUTE_PROCESS(COMMAND mkdir ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary)" )
319 #symlink the folders inside SCCLassLibrary. Check if QtCollider folder should be symlinked or not.
320 file(GLOB classlibraryfolders RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary" "SCClassLibrary/[^.]*")
321 foreach(onedirectory ${classlibraryfolders})
322 if(NOT "${onedirectory}" MATCHES "${SCCLASSLIB_EXCLUDE_REGEX}")
324 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/${onedirectory} ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/${onedirectory} )" )
326 endforeach(onedirectory)
328 message(STATUS "Will copy SCCLassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
330 #if directory contains symlinks, unlink them.
331 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
332 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
333 foreach(onedirectory ${classlibraryfolders})
334 if(IS_SYMLINK "${onedirectory}")
335 message(STATUS "Unlinking ${onedirectory}")
336 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${onedirectory} )" )
338 endforeach(onedirectory)
341 install(DIRECTORY SCClassLibrary
342 DESTINATION ${auxresourcesdir}
343 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
347 install(DIRECTORY SCClassLibrary
348 DESTINATION ${auxresourcesdir}
349 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
355 configure_file(platform/SCVersion.sc.in SCVersion/SCVersion.sc)
356 install(DIRECTORY "${CMAKE_BINARY_DIR}/SCVersion" DESTINATION "${auxresourcesdir}/SCClassLibrary")
358 install(DIRECTORY sounds
359 DESTINATION ${auxresourcesdir}
362 if(APPLE AND ("${standalone}" STREQUAL ""))
363 set(exampledir "${scappbundlename}")
365 set(exampledir "${auxresourcesdir}")
368 install(DIRECTORY examples
369 DESTINATION ${exampledir}
375 install(DIRECTORY Help
376 DESTINATION ${auxresourcesdir}
381 if(SC_SYMLINK_CLASSLIB AND APPLE)
382 message(STATUS "Will create symlink of HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
383 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
384 message(FATAL_ERROR "Symlinking will fail ! HelpSource folder already exists, please delete it first." )
387 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
389 message(STATUS "Will copy HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
391 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
392 if(IS_SYMLINK "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
393 message(STATUS "Unlinking ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
394 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
398 install(DIRECTORY HelpSource
399 DESTINATION ${auxresourcesdir}
406 #############################################
408 # build scdoc help files
410 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
411 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
412 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
413 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
414 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
415 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
417 # this folder has an extension to Platform that disables the loadStartupFiles method
418 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
420 foreach(arg ${BUILD_CLASSLIBRARIES})
421 set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
424 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
427 file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
428 file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
430 add_custom_target(doc ALL
431 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
432 -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
433 platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
434 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
435 DEPENDS sclang ${SCDocSources} ${SCDocClasses})
439 set_directory_properties(
441 ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
443 #############################################
447 add_subdirectory(testsuite)
449 #############################################
452 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
453 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
454 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
457 set(CPACK_GENERATOR "DragNDrop")
458 set(CPACK_DMG_FORMAT "UDBZ")
459 set(CPACK_DMG_VOLUME_NAME "${scappbundlename}")
460 set(CPACK_SYSTEM_NAME "OSX")
461 # set(CPACK_PACKAGE_FILE_NAME "${scappbundlename}-${PROJECT_VERSION}")
462 set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/package/ds_store")
463 set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/package/background.png")
464 set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/platform/mac/Resources/SCcube.icns")
467 if(NOT WIN32) # We define a custom 'package' target in platform/windows/CMakeLists.txt
471 #############################################
472 # hide advanced variables
473 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
475 mark_as_advanced(EMACS_EXECUTABLE)
476 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
477 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
478 mark_as_advanced(MATH_LIBRARY)
479 mark_as_advanced(QT_QMAKE_EXECUTABLE)
480 mark_as_advanced(SNDFILE)