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)
133 add_definitions(-DBOOST_CHRONO_HEADER_ONLY)
137 #############################################
139 option(NOVA_SIMD "Build with nova-simd support." ON)
140 option(FINAL_BUILD "Build as single source file." OFF)
142 option(CURL "Build with curl for remote file download." ON)
144 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
146 option(SSE "Compile with support for SSE instructions.")
147 option(SSE41 "Compile with support for SSE4.1 instructions.")
148 option(SSE42 "Compile with support for SSE4.2 instructions.")
150 set(AUDIOAPI "default" CACHE STRING "Audio API to use (one of {default,coreaudio,jack,portaudio})")
151 option(LIBSCSYNTH "Compile libscsynth as shared library" OFF)
153 option(INSTALL_HELP "Install help docs and examples along with the software" ON)
154 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
155 option(SC_IDE "Build Qt IDE." ON)
157 option(ENABLE_TESTSUITE "Compile testsuite." ON)
159 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
160 option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
162 option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
165 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
166 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
167 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
169 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
171 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
173 option(SCLANG_SERVER "Build with internal server." ON)
175 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
176 option(SC_WII "Build sclang with WII support" ON)
179 option(SC_QT "Build SuperCollider with Qt GUI" ON)
181 message( STATUS "Compiling with Qt GUI" )
185 option(SC_WIN_DEP_DIRS
186 "A list of directories where dependencies will be searched for when packaging.")
189 if(CMAKE_COMPILER_IS_GNUCXX)
190 option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
191 option(LTO "Use GCC's link time optimizer' (experimental).")
194 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
195 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
197 option(SYSTEM_BOOST "Use boost libraries from system" OFF)
199 #############################################
200 # some default libraries
202 find_package(Pthreads)
204 if (NOT PTHREADS_FOUND)
205 message(SEND_ERROR "cannot find libpthreads")
207 include_directories(${PTHREADS_INCLUDE_DIR})
212 find_library(MATH_LIBRARY m)
218 add_definitions("-DHAVE_LIBCURL")
219 include_directories(${CURL_INCLUDE_DIRS})
224 set(Boost_USE_MULTITHREADED ON)
225 find_package( Boost 1.48.0 COMPONENTS thread system filesystem program_options regex test )
228 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}")
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 if(SC_SYMLINK_CLASSLIB AND APPLE)
403 message(STATUS "Will create symlink of HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
404 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
405 message(FATAL_ERROR "Symlinking will fail ! HelpSource folder already exists, please delete it first." )
408 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
410 message(STATUS "Will copy HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
412 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
413 if(IS_SYMLINK "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
414 message(STATUS "Unlinking ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
415 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
419 install(DIRECTORY HelpSource
420 DESTINATION ${auxresourcesdir}
427 #############################################
429 # build scdoc help files
431 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
432 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
433 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
434 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
435 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
436 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
438 # this folder has an extension to Platform that disables the loadStartupFiles method
439 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
441 foreach(arg ${BUILD_CLASSLIBRARIES})
442 set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
445 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
448 file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
449 file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
451 add_custom_target(doc ALL
452 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
453 -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
454 platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
455 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
456 DEPENDS sclang ${SCDocSources} ${SCDocClasses})
460 set_directory_properties(
462 ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
464 #############################################
469 add_subdirectory(testsuite)
472 #############################################
475 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
476 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
477 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
480 set(CPACK_GENERATOR "DragNDrop")
481 set(CPACK_DMG_FORMAT "UDBZ")
482 set(CPACK_DMG_VOLUME_NAME "${scappbundlename}")
483 set(CPACK_SYSTEM_NAME "OSX")
484 # set(CPACK_PACKAGE_FILE_NAME "${scappbundlename}-${PROJECT_VERSION}")
485 set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/package/ds_store")
486 set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/package/background.png")
487 set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/platform/mac/Resources/SCcube.icns")
490 if(NOT WIN32) # We define a custom 'package' target in platform/windows/CMakeLists.txt
494 #############################################
495 # hide advanced variables
496 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
498 mark_as_advanced(EMACS_EXECUTABLE)
499 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
500 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
501 mark_as_advanced(MATH_LIBRARY)
502 mark_as_advanced(QT_QMAKE_EXECUTABLE)
503 mark_as_advanced(SNDFILE)