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(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)
179 option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
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)
196 option(SC_QT "Build SuperCollider with Qt GUI" ON)
198 message( STATUS "Compiling with Qt GUI" )
202 option(SC_PSYCOLLIDER "Build PsyCollider" ON)
204 option(SC_PSYCOLLIDER "Build PsyCollider" OFF)
208 option(SC_WIN_DEP_DIRS
209 "A list of directories where dependencies will be searched for when packaging.")
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).")
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)
224 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
225 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
228 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
229 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
232 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
233 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
236 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
237 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
241 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
245 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
247 add_definitions(-xSSE4.2)
249 add_definitions(-xSSE4.1)
251 add_definitions(-mia32)
254 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
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
263 if (SC_MEMORY_DEBUGGING)
264 add_definitions(-DDISABLE_MEMORY_POOLS)
267 #############################################
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"
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}
294 set(auxresourcesdir "SuperCollider")
296 set(auxresourcesdir "share/SuperCollider")
299 set(SCCLASSLIB_EXCLUDE_REGEX "IGNOREME")
302 set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}|QtCollider")
306 set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}|PsycolliderDocument")
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." )
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)" )
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}")
332 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/${onedirectory} ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/${onedirectory} )" )
334 endforeach(onedirectory)
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} )" )
346 endforeach(onedirectory)
349 install(DIRECTORY SCClassLibrary
350 DESTINATION ${auxresourcesdir}
351 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
355 install(DIRECTORY SCClassLibrary
356 DESTINATION ${auxresourcesdir}
357 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
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}")
373 set(exampledir "${auxresourcesdir}")
376 install(DIRECTORY examples
377 DESTINATION ${exampledir}
383 install(DIRECTORY Help
384 DESTINATION ${auxresourcesdir}
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." )
395 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
397 message(STATUS "Will copy HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
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 )" )
406 install(DIRECTORY HelpSource
407 DESTINATION ${auxresourcesdir}
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")
432 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
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})
447 set_directory_properties(
449 ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
451 #############################################
455 add_subdirectory(testsuite)
457 #############################################
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})
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")
475 if(NOT WIN32) # We define a custom 'package' target in platform/windows/CMakeLists.txt
479 #############################################
480 # hide advanced variables
481 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
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)