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 if (${CMAKE_COMPILER_IS_GNUCXX})
61 exec_program(${CMAKE_CXX_COMPILER} ARGS -dumpversion OUTPUT_VARIABLE _gcc_version)
63 add_definitions("-fschedule-insns2" "-fomit-frame-pointer")
65 add_definitions("-Wreturn-type")
67 # disabled for now: -ffast-math breaks avx intrinsics and -fsigned-zeros/-fno-associative-math are not available in some versions
68 # if (${_gcc_version} VERSION_GREATER 4.0.99)
69 # add_definitions("-ffast-math -fsigned-zeros -fno-associative-math")
72 option(DSO_VISIBILITY "DSO visibility support for gcc" OFF)
75 add_definitions(-fvisibility=hidden)
79 exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)
80 if ("${_gcc_version_info}" MATCHES "Apple")
81 add_definitions("-fpascal-strings")
83 add_definitions("-D_REENTRANT")
84 elseif(NOT (WIN32 AND NOT CYGWIN))
85 add_definitions("-pthread")
89 if (${CMAKE_CXX_COMPILER} MATCHES icpc)
90 set(CMAKE_COMPILER_IS_INTEL 1)
91 add_definitions(-Wno-unknown-pragmas)
92 add_definitions(-simd)
95 if (${CMAKE_CXX_COMPILER} MATCHES clang)
96 option(DSO_VISIBILITY "DSO visibility support for clang" OFF)
99 add_definitions(-fvisibility=hidden)
102 set(CMAKE_COMPILER_IS_CLANG 1)
106 set_property(DIRECTORY
108 PROPERTY COMPILE_DEFINITIONS SC_DARWIN)
109 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
110 add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
111 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
112 add_definitions("-DSC_FREEBSD")
113 add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
117 set_property(DIRECTORY
119 PROPERTY COMPILE_DEFINITIONS SC_WIN32 NOMINMAX _WIN32_WINNT=0x0500)
121 add_definitions(-DWIN32_LEAN_AND_MEAN)
124 SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
125 SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
128 # correctly link the static Boost Thread library:
129 add_definitions(-DBOOST_THREAD_USE_LIB)
130 #avoid unnecesary autolink
131 add_definitions(-DBOOST_DATE_TIME_NO_LIB)
135 #############################################
137 option(NOVA_SIMD "Build with nova-simd support." ON)
138 option(FINAL_BUILD "Build as single source file." OFF)
140 option(CURL "Build with curl for remote file download." ON)
142 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
144 option(SSE "Compile with support for SSE instructions.")
145 option(SSE41 "Compile with support for SSE4.1 instructions.")
146 option(SSE42 "Compile with support for SSE4.2 instructions.")
148 set(AUDIOAPI "default" CACHE STRING "Audio API to use (one of {default,coreaudio,jack,portaudio})")
149 option(LIBSCSYNTH "Compile libscsynth as shared library" OFF)
151 option(INSTALL_HELP "Install help docs and examples along with the software" ON)
152 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
153 option(SC_IDE "Build Qt IDE." ON)
155 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
156 option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
158 option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
161 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
162 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
163 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
165 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
167 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
169 option(SCLANG_SERVER "Build with internal server." ON)
171 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
172 option(SC_WII "Build sclang with WII support" ON)
175 option(SC_QT "Build SuperCollider with Qt GUI" ON)
177 message( STATUS "Compiling with Qt GUI" )
181 option(SC_WIN_DEP_DIRS
182 "A list of directories where dependencies will be searched for when packaging.")
185 if(CMAKE_COMPILER_IS_GNUCXX)
186 option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
187 option(LTO "Use GCC's link time optimizer' (experimental).")
190 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
191 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
193 option(SYSTEM_BOOST "Use boost libraries from system" OFF)
195 #############################################
196 # some default libraries
198 find_package(Pthreads)
200 if (NOT PTHREADS_FOUND)
201 message(SEND_ERROR "cannot find libpthreads")
203 include_directories(${PTHREADS_INCLUDE_DIR})
208 find_library(MATH_LIBRARY m)
214 add_definitions("-DHAVE_LIBCURL")
215 include_directories(${CURL_INCLUDE_DIRS})
220 set(Boost_USE_MULTITHREADED ON)
221 find_package( Boost 1.48.0 COMPONENTS thread system filesystem program_options regex test )
224 set(Boost_FOUND OFF) # boost 1.48 does not like c++11
229 link_directories(${Boost_LIBRARY_DIRS})
231 message("building boost libraries manually")
236 #############################################
237 # some preprocessor flags
238 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
240 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
241 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
244 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
245 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
248 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
249 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
252 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
253 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
257 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
261 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
263 add_definitions(-xSSE4.2)
265 add_definitions(-xSSE4.1)
267 add_definitions(-mia32)
270 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
274 add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
275 add_definitions(-diag-disable 279) # controlling expression is constant
279 if (SC_MEMORY_DEBUGGING)
280 add_definitions(-DDISABLE_MEMORY_POOLS)
283 #############################################
285 add_subdirectory(external_libraries)
286 add_subdirectory(server)
287 add_subdirectory(lang)
288 add_subdirectory(editors)
289 add_subdirectory(platform)
291 if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
292 install(DIRECTORY include/common include/plugin_interface include/server include/lang
293 DESTINATION ${CMAKE_INSTALL_PREFIX}/include/SuperCollider
294 FILES_MATCHING PATTERN "*.h"
299 # determines the app name and app install location (scappbundlename, scappdir):
300 include (cmake_modules/MacAppFolder.cmake)
302 set(auxresourcesdir ${scappauxresourcesdir})
304 # Some aux files which go in the app's folder
305 install(FILES README.txt ChangeLog COPYING AUTHORS platform/mac/MOVED_STUFF.txt
306 DESTINATION ${scappbundlename}
309 set(auxresourcesdir "SuperCollider")
311 set(auxresourcesdir "share/SuperCollider")
314 set(SCCLASSLIB_EXCLUDE_REGEX "IGNOREME")
317 set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}|QtCollider")
321 set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}")
327 if(SC_SYMLINK_CLASSLIB)
329 #if there are folders inside SCCLassLibrary abort cmake.
330 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
331 foreach(onedirectory ${classlibraryfolders})
332 message( "${onedirectory}" )
333 if(NOT IS_SYMLINK "${onedirectory}")
334 message(FATAL_ERROR "Symlinking will fail ! SCClassLibrary folder already exists and has directories inside, please delete it first." )
336 endforeach(onedirectory)
338 message(STATUS "Will create symlink of SCClassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary" )
339 if(NOT EXISTS "{CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
340 install( CODE "EXECUTE_PROCESS(COMMAND mkdir ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary)" )
342 #symlink the folders inside SCCLassLibrary. Check if QtCollider folder should be symlinked or not.
343 file(GLOB classlibraryfolders RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary" "SCClassLibrary/[^.]*")
344 foreach(onedirectory ${classlibraryfolders})
345 if(NOT "${onedirectory}" MATCHES "${SCCLASSLIB_EXCLUDE_REGEX}")
347 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/${onedirectory} ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/${onedirectory} )" )
349 endforeach(onedirectory)
351 message(STATUS "Will copy SCCLassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
353 #if directory contains symlinks, unlink them.
354 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
355 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
356 foreach(onedirectory ${classlibraryfolders})
357 if(IS_SYMLINK "${onedirectory}")
358 message(STATUS "Unlinking ${onedirectory}")
359 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${onedirectory} )" )
361 endforeach(onedirectory)
364 install(DIRECTORY SCClassLibrary
365 DESTINATION ${auxresourcesdir}
366 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
370 install(DIRECTORY SCClassLibrary
371 DESTINATION ${auxresourcesdir}
372 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
378 configure_file(platform/SCVersion.sc.in SCVersion/SCVersion.sc)
379 install(DIRECTORY "${CMAKE_BINARY_DIR}/SCVersion" DESTINATION "${auxresourcesdir}/SCClassLibrary")
381 install(DIRECTORY sounds
382 DESTINATION ${auxresourcesdir}
385 if(APPLE AND ("${standalone}" STREQUAL ""))
386 set(exampledir "${scappbundlename}")
388 set(exampledir "${auxresourcesdir}")
391 install(DIRECTORY examples
392 DESTINATION ${exampledir}
398 if(SC_SYMLINK_CLASSLIB AND APPLE)
399 message(STATUS "Will create symlink of HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
400 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
401 message(FATAL_ERROR "Symlinking will fail ! HelpSource folder already exists, please delete it first." )
404 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
406 message(STATUS "Will copy HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
408 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
409 if(IS_SYMLINK "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
410 message(STATUS "Unlinking ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
411 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
415 install(DIRECTORY HelpSource
416 DESTINATION ${auxresourcesdir}
423 #############################################
425 # build scdoc help files
427 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
428 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
429 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
430 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
431 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
432 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
434 # this folder has an extension to Platform that disables the loadStartupFiles method
435 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
437 foreach(arg ${BUILD_CLASSLIBRARIES})
438 set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
441 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
444 file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
445 file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
447 add_custom_target(doc ALL
448 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
449 -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
450 platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
451 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
452 DEPENDS sclang ${SCDocSources} ${SCDocClasses})
456 set_directory_properties(
458 ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
460 #############################################
464 add_subdirectory(testsuite)
466 #############################################
469 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
470 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
471 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
474 set(CPACK_GENERATOR "DragNDrop")
475 set(CPACK_DMG_FORMAT "UDBZ")
476 set(CPACK_DMG_VOLUME_NAME "${scappbundlename}")
477 set(CPACK_SYSTEM_NAME "OSX")
478 # set(CPACK_PACKAGE_FILE_NAME "${scappbundlename}-${PROJECT_VERSION}")
479 set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/package/ds_store")
480 set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/package/background.png")
481 set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/platform/mac/Resources/SCcube.icns")
484 if(NOT WIN32) # We define a custom 'package' target in platform/windows/CMakeLists.txt
488 #############################################
489 # hide advanced variables
490 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
492 mark_as_advanced(EMACS_EXECUTABLE)
493 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
494 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
495 mark_as_advanced(MATH_LIBRARY)
496 mark_as_advanced(QT_QMAKE_EXECUTABLE)
497 mark_as_advanced(SNDFILE)