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_LINUX")
111 add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
112 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
113 add_definitions("-DSC_FREEBSD")
114 add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
118 set_property(DIRECTORY
120 PROPERTY COMPILE_DEFINITIONS SC_WIN32 NOMINMAX _WIN32_WINNT=0x0500)
122 add_definitions(-DWIN32_LEAN_AND_MEAN)
125 SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
126 SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
129 # correctly link the static Boost Thread library:
130 add_definitions(-DBOOST_THREAD_USE_LIB)
131 #avoid unnecesary autolink
132 add_definitions(-DBOOST_DATE_TIME_NO_LIB)
136 #############################################
138 option(NOVA_SIMD "Build with nova-simd support." ON)
139 option(FINAL_BUILD "Build as single source file." OFF)
141 option(CURL "Build with curl for remote file download." ON)
143 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
145 option(SSE "Compile with support for SSE instructions.")
146 option(SSE41 "Compile with support for SSE4.1 instructions.")
147 option(SSE42 "Compile with support for SSE4.2 instructions.")
149 set(AUDIOAPI "default" CACHE STRING "Audio API to use (one of {default,coreaudio,jack,portaudio})")
150 option(LIBSCSYNTH "Compile libscsynth as shared library" OFF)
152 option(INSTALL_HELP "Install help docs and examples along with the software" ON)
153 option(INSTALL_OLD_HELP "Install old and deprecated help files" ON)
154 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
155 option(SC_IDE "Build Qt IDE." ON)
157 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
158 option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
160 option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
163 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
164 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
165 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
167 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
169 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
171 option(SCLANG_SERVER "Build with internal server." ON)
173 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
174 option(SC_WII "Build sclang with WII support" ON)
177 option(SC_QT "Build SuperCollider with Qt GUI" ON)
179 message( STATUS "Compiling with Qt GUI" )
183 option(SC_PSYCOLLIDER "Build PsyCollider" ON)
185 option(SC_PSYCOLLIDER "Build PsyCollider" OFF)
189 option(SC_WIN_DEP_DIRS
190 "A list of directories where dependencies will be searched for when packaging.")
193 if(CMAKE_COMPILER_IS_GNUCXX)
194 option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
195 option(LTO "Use GCC's link time optimizer' (experimental).")
198 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
199 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
201 #############################################
202 # some default libraries
204 find_package(Pthreads)
206 if (NOT PTHREADS_FOUND)
207 message(SEND_ERROR "cannot find libpthreads")
209 include_directories(${PTHREADS_INCLUDE_DIR})
214 find_library(MATH_LIBRARY m)
220 add_definitions("-DHAVE_LIBCURL")
221 include_directories(${CURL_INCLUDE_DIRS})
225 set(Boost_USE_MULTITHREADED ON)
226 find_package( Boost 1.48.0 COMPONENTS thread system filesystem program_options regex test )
229 set(Boost_FOUND OFF) # boost 1.48 does not like c++11
233 link_directories(${Boost_LIBRARY_DIRS})
235 message("building boost libraries manually")
240 #############################################
241 # some preprocessor flags
242 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
244 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
245 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
248 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
249 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
252 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
253 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
256 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
257 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
261 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
265 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
267 add_definitions(-xSSE4.2)
269 add_definitions(-xSSE4.1)
271 add_definitions(-mia32)
274 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
278 add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
279 add_definitions(-diag-disable 279) # controlling expression is constant
283 if (SC_MEMORY_DEBUGGING)
284 add_definitions(-DDISABLE_MEMORY_POOLS)
287 #############################################
289 add_subdirectory(external_libraries)
290 add_subdirectory(server)
291 add_subdirectory(lang)
292 add_subdirectory(editors)
293 add_subdirectory(platform)
295 if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
296 install(DIRECTORY include/common include/plugin_interface include/server include/lang
297 DESTINATION ${CMAKE_INSTALL_PREFIX}/include/SuperCollider
298 FILES_MATCHING PATTERN "*.h"
303 # determines the app name and app install location (scappbundlename, scappdir):
304 include (cmake_modules/MacAppFolder.cmake)
306 set(auxresourcesdir ${scappauxresourcesdir})
308 # Some aux files which go in the app's folder
309 install(FILES README.txt ChangeLog COPYING AUTHORS platform/mac/MOVED_STUFF.txt
310 DESTINATION ${scappbundlename}
313 set(auxresourcesdir "SuperCollider")
315 set(auxresourcesdir "share/SuperCollider")
318 set(SCCLASSLIB_EXCLUDE_REGEX "IGNOREME")
321 set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}|QtCollider")
325 set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}|PsycolliderDocument")
331 if(SC_SYMLINK_CLASSLIB)
333 #if there are folders inside SCCLassLibrary abort cmake.
334 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
335 foreach(onedirectory ${classlibraryfolders})
336 message( "${onedirectory}" )
337 if(NOT IS_SYMLINK "${onedirectory}")
338 message(FATAL_ERROR "Symlinking will fail ! SCClassLibrary folder already exists and has directories inside, please delete it first." )
340 endforeach(onedirectory)
342 message(STATUS "Will create symlink of SCClassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary" )
343 if(NOT EXISTS "{CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
344 install( CODE "EXECUTE_PROCESS(COMMAND mkdir ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary)" )
346 #symlink the folders inside SCCLassLibrary. Check if QtCollider folder should be symlinked or not.
347 file(GLOB classlibraryfolders RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary" "SCClassLibrary/[^.]*")
348 foreach(onedirectory ${classlibraryfolders})
349 if(NOT "${onedirectory}" MATCHES "${SCCLASSLIB_EXCLUDE_REGEX}")
351 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/${onedirectory} ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/${onedirectory} )" )
353 endforeach(onedirectory)
355 message(STATUS "Will copy SCCLassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
357 #if directory contains symlinks, unlink them.
358 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
359 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
360 foreach(onedirectory ${classlibraryfolders})
361 if(IS_SYMLINK "${onedirectory}")
362 message(STATUS "Unlinking ${onedirectory}")
363 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${onedirectory} )" )
365 endforeach(onedirectory)
368 install(DIRECTORY SCClassLibrary
369 DESTINATION ${auxresourcesdir}
370 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
374 install(DIRECTORY SCClassLibrary
375 DESTINATION ${auxresourcesdir}
376 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
382 configure_file(platform/SCVersion.sc.in SCVersion/SCVersion.sc)
383 install(DIRECTORY "${CMAKE_BINARY_DIR}/SCVersion" DESTINATION "${auxresourcesdir}/SCClassLibrary")
385 install(DIRECTORY sounds
386 DESTINATION ${auxresourcesdir}
389 if(APPLE AND ("${standalone}" STREQUAL ""))
390 set(exampledir "${scappbundlename}")
392 set(exampledir "${auxresourcesdir}")
395 install(DIRECTORY examples
396 DESTINATION ${exampledir}
402 install(DIRECTORY Help
403 DESTINATION ${auxresourcesdir}
408 if(SC_SYMLINK_CLASSLIB AND APPLE)
409 message(STATUS "Will create symlink of HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
410 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
411 message(FATAL_ERROR "Symlinking will fail ! HelpSource folder already exists, please delete it first." )
414 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
416 message(STATUS "Will copy HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
418 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
419 if(IS_SYMLINK "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
420 message(STATUS "Unlinking ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
421 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
425 install(DIRECTORY HelpSource
426 DESTINATION ${auxresourcesdir}
433 #############################################
435 # build scdoc help files
437 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
438 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
439 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
440 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
441 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
442 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
444 # this folder has an extension to Platform that disables the loadStartupFiles method
445 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
447 foreach(arg ${BUILD_CLASSLIBRARIES})
448 set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
451 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
454 file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
455 file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
457 add_custom_target(doc ALL
458 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
459 -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
460 platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
461 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
462 DEPENDS sclang ${SCDocSources} ${SCDocClasses})
466 set_directory_properties(
468 ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
470 #############################################
474 add_subdirectory(testsuite)
476 #############################################
479 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
480 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
481 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
484 set(CPACK_GENERATOR "DragNDrop")
485 set(CPACK_DMG_FORMAT "UDBZ")
486 set(CPACK_DMG_VOLUME_NAME "${scappbundlename}")
487 set(CPACK_SYSTEM_NAME "OSX")
488 # set(CPACK_PACKAGE_FILE_NAME "${scappbundlename}-${PROJECT_VERSION}")
489 set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/package/ds_store")
490 set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/package/background.png")
491 set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/platform/mac/Resources/SCcube.icns")
494 if(NOT WIN32) # We define a custom 'package' target in platform/windows/CMakeLists.txt
498 #############################################
499 # hide advanced variables
500 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
502 mark_as_advanced(EMACS_EXECUTABLE)
503 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
504 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
505 mark_as_advanced(MATH_LIBRARY)
506 mark_as_advanced(QT_QMAKE_EXECUTABLE)
507 mark_as_advanced(SNDFILE)