1 cmake_minimum_required (VERSION 2.8)
2 project (SuperCollider)
7 include (cmake_modules/FinalFile.cmake)
9 if (NOT CMAKE_BUILD_TYPE)
10 message(STATUS "Build type defaulting to \"Release\"")
11 set(CMAKE_BUILD_TYPE "Release")
14 if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
15 message(WARNING "WARNING: IN-PLACE BUILDS ARE NOT RECOMMENDED - PLEASE USE A BUILD DIRECTORY")
19 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules
23 "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/cmake_uninstall.cmake.in"
24 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
27 ADD_CUSTOM_TARGET(uninstall
28 "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
31 ADD_CUSTOM_TARGET(setMainVersion ALL
32 sh ${CMAKE_CURRENT_SOURCE_DIR}/setMainVersion.sh
33 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
39 STRING(REGEX REPLACE "^.*MacOSX10.([0-9]+).*$" "\\1" MAC_OSX_SDK_VERSION "${CMAKE_OSX_SYSROOT}")
41 if(CMAKE_OSX_DEPLOYMENT_TARGET)
42 if (CMAKE_OSX_DEPLOYMENT_TARGET GREATER 10.4)
43 set(HID_UTIL_DIR "HID_Utilities")
45 set(HID_UTIL_DIR "HID_Utilities_10_4")
48 if (${MAC_OSX_SDK_VERSION} GREATER 4)
49 set(HID_UTIL_DIR "HID_Utilities")
51 set(HID_UTIL_DIR "HID_Utilities_10_4")
54 MESSAGE( STATUS "Using HID Utilities from folder '${HID_UTIL_DIR}'")
57 if (CMAKE_SYSTEM_NAME MATCHES "Linux")
61 #############################################
64 if (${CMAKE_COMPILER_IS_GNUCXX})
65 exec_program(${CMAKE_CXX_COMPILER} ARGS -dumpversion OUTPUT_VARIABLE _gcc_version)
67 add_definitions("-fschedule-insns2" "-fomit-frame-pointer")
69 add_definitions("-Wreturn-type")
71 if (${_gcc_version} VERSION_GREATER 4.0.99)
72 add_definitions("-ffast-math")
75 option(DSO_VISIBILITY "DSO visibility support for gcc" OFF)
78 add_definitions(-fvisibility=hidden)
82 exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)
84 if ("${_gcc_version_info}" MATCHES "darwin10-llvm-g..-4.2")
85 message(FATAL_ERROR "llvm-gcc-4.2 was reported to be broken. please use another compiler.")
87 if ("${_gcc_version_info}" MATCHES "Apple")
88 add_definitions("-fpascal-strings")
90 add_definitions("-D_REENTRANT")
91 elseif(NOT (WIN32 AND NOT CYGWIN))
92 add_definitions("-pthread")
96 if (${CMAKE_CXX_COMPILER} MATCHES icpc)
97 set(CMAKE_COMPILER_IS_INTEL 1)
98 add_definitions(-Wno-unknown-pragmas)
99 add_definitions(-simd)
102 if (${CMAKE_CXX_COMPILER} MATCHES clang)
103 set(CMAKE_COMPILER_IS_CLANG 1)
107 set_property(DIRECTORY
109 PROPERTY COMPILE_DEFINITIONS SC_DARWIN)
110 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
111 add_definitions("-DSC_LINUX")
112 add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
113 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
114 add_definitions("-DSC_FREEBSD")
115 add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
119 set_property(DIRECTORY
121 PROPERTY COMPILE_DEFINITIONS SC_WIN32 NOMINMAX _WINSOCKAPI_)
124 SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /MTd")
125 SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
130 #############################################
131 # some default libraries
133 find_package(Pthreads)
135 if (NOT PTHREADS_FOUND)
136 message(SEND_ERROR "cannot find libpthreads")
138 include_directories(${PTHREADS_INCLUDE_DIR})
143 find_library(MATH_LIBRARY m)
149 add_definitions("-DHAVE_LIBCURL")
150 include_directories(${CURL_INCLUDE_DIRS})
154 #############################################
156 option(NOVA_SIMD "Build with nova-simd support." ON)
157 option(FINAL_BUILD "Build as single source file." OFF)
159 option(CURL "Build with curl for remote file download." ON)
161 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
162 mark_as_advanced(FFT_GREEN)
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(INSTALL_HELP "Install help docs and examples along with the software" ON)
170 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
172 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
173 option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
175 option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
178 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
179 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
180 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
182 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
183 mark_as_advanced(NO_LIBSNDFILE)
186 option(SCLANG_SERVER "Build with internal server." ON)
189 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
190 option(SC_WII "Build sclang with WII support" ON)
193 option(SC_QT "Build SuperCollider with Qt GUI" ON)
196 option(SC_PSYCOLLIDER "Build PsyCollider" ON)
198 option(SC_PSYCOLLIDER "Build PsyCollider" OFF)
201 if(CMAKE_COMPILER_IS_GNUCXX)
202 option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
203 option(LTO "Use GCC's link time optimizer' (experimental).")
206 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
207 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
209 #############################################
210 # some preprocessor flags
211 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
213 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
214 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
217 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
218 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
221 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
222 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
225 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
226 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
230 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
234 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
236 add_definitions(-xSSE4.2)
238 add_definitions(-xSSE4.1)
240 add_definitions(-mia32)
243 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
247 add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
248 add_definitions(-diag-disable 279) # controlling expression is constant
252 if (SC_MEMORY_DEBUGGING)
253 add_definitions(-DDISABLE_MEMORY_POOLS)
256 #############################################
258 add_subdirectory(external_libraries)
259 add_subdirectory(server)
260 add_subdirectory(lang)
261 add_subdirectory(bindings)
262 add_subdirectory(platform)
263 add_subdirectory(editors)
266 message( STATUS "Compiling with Qt GUI" )
267 add_subdirectory(QtCollider)
270 if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
271 install(DIRECTORY include/common include/plugin_interface include/server include/lang
272 DESTINATION ${CMAKE_INSTALL_PREFIX}/include/SuperCollider
273 FILES_MATCHING PATTERN "*.h"
278 # determines the app name and app install location (scappbundlename, scappdir):
279 include (cmake_modules/MacAppFolder.cmake)
281 set(auxresourcesdir ${scappauxresourcesdir})
283 # Some aux files which go in the app's folder
284 install(FILES README.txt ChangeLog
285 DESTINATION ${auxresourcesdir}
287 install(FILES COPYING AUTHORS
288 DESTINATION ${scappdir}
291 set(auxresourcesdir "SuperCollider")
293 set(auxresourcesdir "share/SuperCollider")
297 set(SCCLASSLIB_EXCLUDE_REGEX "QtCollider")
299 set(SCCLASSLIB_EXCLUDE_REGEX "IGNOREME")
303 #if directory contains symlinks, unlink them.
304 if(EXISTS "${auxresourcesdir}/SCClassLibrary")
305 file(GLOB classlibraryfolders "${auxresourcesdir}/SCClassLibrary/[^.]*")
306 foreach(onedirectory ${classlibraryfolders})
307 if(IS_SYMLINK "${onedirectory}")
308 install( CODE "EXECUTE_PROCESS(COMMAND unlink ${onedirectory} )" )
310 endforeach(onedirectory)
313 if(SC_SYMLINK_CLASSLIB)
315 #if there are folders inside SCCLassLibrary abort cmake.
316 file(GLOB classlibraryfolders "${auxresourcesdir}/SCClassLibrary/[^.]*")
317 foreach(onedirectory ${classlibraryfolders})
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 ${auxresourcesdir}/SCClassLibrary" )
324 if(NOT EXISTS "${auxresourcesdir}/SCClassLibrary")
325 install( CODE "EXECUTE_PROCESS(COMMAND mkdir ${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 -s ${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/${onedirectory} ${auxresourcesdir}/SCClassLibrary/${onedirectory} )" )
334 endforeach(onedirectory)
336 message(STATUS "Will copy SCCLassLibrary to ${auxresourcesdir}")
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
350 install(DIRECTORY sounds
351 DESTINATION ${auxresourcesdir}
354 install(DIRECTORY Help examples HelpSource
355 DESTINATION ${auxresourcesdir}
359 #############################################
361 # build scdoc help files
363 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
364 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
365 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
366 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
367 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
368 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
370 # this folder has an extension to Platform that disables the loadStartupFiles method
371 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
373 foreach(arg ${BUILD_CLASSLIBRARIES})
374 set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
377 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
380 file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
381 file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
383 add_custom_target(doc ALL
384 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
385 -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
386 platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
387 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
388 DEPENDS sclang ${SCDocSources} ${SCDocClasses})
392 set_directory_properties(
394 ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
396 #############################################
400 add_subdirectory(testsuite)
402 #############################################
403 # win32 install support
406 install(FILES ${FFTW3F_LIBRARY} ${SNDFILE_LIBRARY} ${PTHREADS_LIBRARY} ${PORTAUDIO_LIBRARIES}
407 DESTINATION "SuperCollider"
408 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
411 #############################################
414 set(CPACK_PACKAGE_VERSION_MAJOR 3)
415 set(CPACK_PACKAGE_VERSION_MINOR 5)
416 set(CPACK_PACKAGE_VERSION_PATCH dev)
419 set(CPACK_MONOLITHIC_INSTALL 1)
422 #############################################
423 # hide advanced variables
424 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
426 mark_as_advanced(EMACS_EXECUTABLE)
427 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
428 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
429 mark_as_advanced(MATH_LIBRARY)
430 mark_as_advanced(QT_QMAKE_EXECUTABLE)
431 mark_as_advanced(SNDFILE)