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 _WINSOCKAPI_)
123 SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /MTd")
124 SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
129 #############################################
130 # some default libraries
132 find_package(Pthreads)
134 if (NOT PTHREADS_FOUND)
135 message(SEND_ERROR "cannot find libpthreads")
137 include_directories(${PTHREADS_INCLUDE_DIR})
142 find_library(MATH_LIBRARY m)
148 add_definitions("-DHAVE_LIBCURL")
149 include_directories(${CURL_INCLUDE_DIRS})
153 #############################################
155 option(NOVA_SIMD "Build with nova-simd support." ON)
156 option(FINAL_BUILD "Build as single source file." OFF)
158 option(CURL "Build with curl for remote file download." ON)
160 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
162 option(SSE "Compile with support for SSE instructions.")
163 option(SSE41 "Compile with support for SSE4.1 instructions.")
164 option(SSE42 "Compile with support for SSE4.2 instructions.")
167 option(LIBSCSYNTH "Compile libscsynth as shared library" OFF)
170 option(INSTALL_HELP "Install help docs and examples along with the software" ON)
171 option(INSTALL_OLD_HELP "Install old and deprecated help files" ON)
172 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
174 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
175 option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
177 option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
180 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
181 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
182 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
184 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
186 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
188 option(SCLANG_SERVER "Build with internal server." ON)
190 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
191 option(SC_WII "Build sclang with WII support" ON)
194 option(SC_QT "Build SuperCollider with Qt GUI" ON)
196 message( STATUS "Compiling with Qt GUI" )
200 option(SC_PSYCOLLIDER "Build PsyCollider" ON)
202 option(SC_PSYCOLLIDER "Build PsyCollider" OFF)
205 if(CMAKE_COMPILER_IS_GNUCXX)
206 option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
207 option(LTO "Use GCC's link time optimizer' (experimental).")
210 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
211 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
213 #############################################
214 # some preprocessor flags
215 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
217 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
218 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
221 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
222 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
225 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
226 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
229 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
230 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
234 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
238 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
240 add_definitions(-xSSE4.2)
242 add_definitions(-xSSE4.1)
244 add_definitions(-mia32)
247 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
251 add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
252 add_definitions(-diag-disable 279) # controlling expression is constant
256 if (SC_MEMORY_DEBUGGING)
257 add_definitions(-DDISABLE_MEMORY_POOLS)
260 #############################################
262 add_subdirectory(external_libraries)
263 add_subdirectory(server)
264 add_subdirectory(lang)
265 add_subdirectory(bindings)
266 add_subdirectory(platform)
267 add_subdirectory(editors)
269 if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
270 install(DIRECTORY include/common include/plugin_interface include/server include/lang
271 DESTINATION ${CMAKE_INSTALL_PREFIX}/include/SuperCollider
272 FILES_MATCHING PATTERN "*.h"
277 # determines the app name and app install location (scappbundlename, scappdir):
278 include (cmake_modules/MacAppFolder.cmake)
280 set(auxresourcesdir ${scappauxresourcesdir})
282 # Some aux files which go in the app's folder
283 install(FILES README.txt ChangeLog COPYING AUTHORS platform/mac/MOVED_STUFF.txt
284 DESTINATION ${scappbundlename}
287 set(auxresourcesdir "SuperCollider")
289 set(auxresourcesdir "share/SuperCollider")
293 set(SCCLASSLIB_EXCLUDE_REGEX "QtCollider")
295 set(SCCLASSLIB_EXCLUDE_REGEX "IGNOREME")
300 if(SC_SYMLINK_CLASSLIB)
302 #if there are folders inside SCCLassLibrary abort cmake.
303 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
304 foreach(onedirectory ${classlibraryfolders})
305 message( "${onedirectory}" )
306 if(NOT IS_SYMLINK "${onedirectory}")
307 message(FATAL_ERROR "Symlinking will fail ! SCClassLibrary folder already exists and has directories inside, please delete it first." )
309 endforeach(onedirectory)
311 message(STATUS "Will create symlink of SCClassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary" )
312 if(NOT EXISTS "{CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
313 install( CODE "EXECUTE_PROCESS(COMMAND mkdir ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary)" )
315 #symlink the folders inside SCCLassLibrary. Check if QtCollider folder should be symlinked or not.
316 file(GLOB classlibraryfolders RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary" "SCClassLibrary/[^.]*")
317 foreach(onedirectory ${classlibraryfolders})
318 if(NOT "${onedirectory}" MATCHES "${SCCLASSLIB_EXCLUDE_REGEX}")
320 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/${onedirectory} ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/${onedirectory} )" )
322 endforeach(onedirectory)
324 message(STATUS "Will copy SCCLassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
326 #if directory contains symlinks, unlink them.
327 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
328 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
329 foreach(onedirectory ${classlibraryfolders})
330 if(IS_SYMLINK "${onedirectory}")
331 message(STATUS "Unlinking ${onedirectory}")
332 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${onedirectory} )" )
334 endforeach(onedirectory)
337 install(DIRECTORY SCClassLibrary
338 DESTINATION ${auxresourcesdir}
339 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
343 install(DIRECTORY SCClassLibrary
344 DESTINATION ${auxresourcesdir}
345 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
351 configure_file(platform/SCVersion.sc.in SCVersion/SCVersion.sc)
352 install(DIRECTORY "${CMAKE_BINARY_DIR}/SCVersion" DESTINATION "${auxresourcesdir}/SCClassLibrary")
354 install(DIRECTORY sounds
355 DESTINATION ${auxresourcesdir}
358 if(APPLE AND ("${standalone}" STREQUAL ""))
359 set(exampledir "${scappbundlename}")
361 set(exampledir "${auxresourcesdir}")
364 install(DIRECTORY examples
365 DESTINATION ${exampledir}
371 install(DIRECTORY Help
372 DESTINATION ${auxresourcesdir}
377 if(SC_SYMLINK_CLASSLIB AND APPLE)
378 message(STATUS "Will create symlink of HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
379 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
380 message(FATAL_ERROR "Symlinking will fail ! HelpSource folder already exists, please delete it first." )
383 "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
385 message(STATUS "Will copy HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
387 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
388 if(IS_SYMLINK "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
389 message(STATUS "Unlinking ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
390 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
394 install(DIRECTORY HelpSource
395 DESTINATION ${auxresourcesdir}
402 #############################################
404 # build scdoc help files
406 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
407 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
408 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
409 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
410 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
411 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
413 # this folder has an extension to Platform that disables the loadStartupFiles method
414 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
416 foreach(arg ${BUILD_CLASSLIBRARIES})
417 set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
420 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
423 file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
424 file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
426 add_custom_target(doc ALL
427 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
428 -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
429 platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
430 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
431 DEPENDS sclang ${SCDocSources} ${SCDocClasses})
435 set_directory_properties(
437 ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
439 #############################################
443 add_subdirectory(testsuite)
445 #############################################
446 # win32 install support
449 install(FILES ${FFTW3F_LIBRARY} ${SNDFILE_LIBRARY} ${PTHREADS_LIBRARY} ${PORTAUDIO_LIBRARIES}
450 DESTINATION "SuperCollider"
451 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
454 #############################################
457 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
458 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
459 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
462 set(CPACK_GENERATOR "DragNDrop")
463 set(CPACK_DMG_FORMAT "UDBZ")
464 set(CPACK_DMG_VOLUME_NAME "${scappbundlename}")
465 set(CPACK_SYSTEM_NAME "OSX")
466 # set(CPACK_PACKAGE_FILE_NAME "${scappbundlename}-${PROJECT_VERSION}")
467 set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/package/ds_store")
468 set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/package/background.png")
469 set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/platform/mac/Resources/SCcube.icns")
471 set(CPACK_MONOLITHIC_INSTALL 1)
475 #############################################
476 # hide advanced variables
477 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
479 mark_as_advanced(EMACS_EXECUTABLE)
480 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
481 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
482 mark_as_advanced(MATH_LIBRARY)
483 mark_as_advanced(QT_QMAKE_EXECUTABLE)
484 mark_as_advanced(SNDFILE)