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 # disabled for now: -ffast-math breaks avx intrinsics and -fsigned-zeros/-fno-associative-math are not available in some versions
72 # if (${_gcc_version} VERSION_GREATER 4.0.99)
73 # add_definitions("-ffast-math -fsigned-zeros -fno-associative-math")
76 option(DSO_VISIBILITY "DSO visibility support for gcc" OFF)
79 add_definitions(-fvisibility=hidden)
83 exec_program(${CMAKE_CXX_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info)
85 if ("${_gcc_version_info}" MATCHES "darwin10-llvm-g..-4.2")
86 message(FATAL_ERROR "llvm-gcc-4.2 was reported to be broken. please use another compiler.")
88 if ("${_gcc_version_info}" MATCHES "Apple")
89 add_definitions("-fpascal-strings")
91 add_definitions("-D_REENTRANT")
92 elseif(NOT (WIN32 AND NOT CYGWIN))
93 add_definitions("-pthread")
97 if (${CMAKE_CXX_COMPILER} MATCHES icpc)
98 set(CMAKE_COMPILER_IS_INTEL 1)
99 add_definitions(-Wno-unknown-pragmas)
100 add_definitions(-simd)
103 if (${CMAKE_CXX_COMPILER} MATCHES clang)
104 set(CMAKE_COMPILER_IS_CLANG 1)
108 set_property(DIRECTORY
110 PROPERTY COMPILE_DEFINITIONS SC_DARWIN)
111 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
112 add_definitions("-DSC_LINUX")
113 add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
114 elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
115 add_definitions("-DSC_FREEBSD")
116 add_definitions(-DSC_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/SuperCollider")
120 set_property(DIRECTORY
122 PROPERTY COMPILE_DEFINITIONS SC_WIN32 NOMINMAX _WINSOCKAPI_)
125 SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /MTd")
126 SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
131 #############################################
132 # some default libraries
134 find_package(Pthreads)
136 if (NOT PTHREADS_FOUND)
137 message(SEND_ERROR "cannot find libpthreads")
139 include_directories(${PTHREADS_INCLUDE_DIR})
144 find_library(MATH_LIBRARY m)
150 add_definitions("-DHAVE_LIBCURL")
151 include_directories(${CURL_INCLUDE_DIRS})
155 #############################################
157 option(NOVA_SIMD "Build with nova-simd support." ON)
158 option(FINAL_BUILD "Build as single source file." OFF)
160 option(CURL "Build with curl for remote file download." ON)
162 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
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(INSTALL_OLD_HELP "Install old and deprecated help files" ON)
171 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
173 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
174 option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
176 option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
179 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
180 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
181 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
183 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
185 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
188 option(SCLANG_SERVER "Build with internal server." ON)
191 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
192 option(SC_WII "Build sclang with WII support" ON)
195 option(SC_QT "Build SuperCollider with Qt GUI" ON)
197 message( STATUS "Compiling with Qt GUI" )
201 option(SC_PSYCOLLIDER "Build PsyCollider" ON)
203 option(SC_PSYCOLLIDER "Build PsyCollider" OFF)
206 if(CMAKE_COMPILER_IS_GNUCXX)
207 option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
208 option(LTO "Use GCC's link time optimizer' (experimental).")
211 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
212 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
214 #############################################
215 # some preprocessor flags
216 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
218 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
219 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
222 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
223 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
226 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
227 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
230 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
231 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
235 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
239 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
241 add_definitions(-xSSE4.2)
243 add_definitions(-xSSE4.1)
245 add_definitions(-mia32)
248 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
252 add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
253 add_definitions(-diag-disable 279) # controlling expression is constant
257 if (SC_MEMORY_DEBUGGING)
258 add_definitions(-DDISABLE_MEMORY_POOLS)
261 #############################################
263 add_subdirectory(external_libraries)
264 add_subdirectory(server)
265 add_subdirectory(lang)
266 add_subdirectory(bindings)
267 add_subdirectory(platform)
268 add_subdirectory(editors)
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
352 install(DIRECTORY sounds
353 DESTINATION ${auxresourcesdir}
357 install(DIRECTORY Help
358 DESTINATION ${auxresourcesdir}
363 install(DIRECTORY examples HelpSource
364 DESTINATION ${auxresourcesdir}
370 #############################################
372 # build scdoc help files
374 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
375 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
376 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
377 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
378 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
379 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
381 # this folder has an extension to Platform that disables the loadStartupFiles method
382 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
384 foreach(arg ${BUILD_CLASSLIBRARIES})
385 set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
388 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
391 file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
392 file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
394 add_custom_target(doc ALL
395 COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
396 -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
397 platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
398 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
399 DEPENDS sclang ${SCDocSources} ${SCDocClasses})
403 set_directory_properties(
405 ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
407 #############################################
411 add_subdirectory(testsuite)
413 #############################################
414 # win32 install support
417 install(FILES ${FFTW3F_LIBRARY} ${SNDFILE_LIBRARY} ${PTHREADS_LIBRARY} ${PORTAUDIO_LIBRARIES}
418 DESTINATION "SuperCollider"
419 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
422 #############################################
425 set(CPACK_PACKAGE_VERSION_MAJOR 3)
426 set(CPACK_PACKAGE_VERSION_MINOR 5)
427 set(CPACK_PACKAGE_VERSION_PATCH dev)
430 set(CPACK_MONOLITHIC_INSTALL 1)
433 #############################################
434 # hide advanced variables
435 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
437 mark_as_advanced(EMACS_EXECUTABLE)
438 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
439 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
440 mark_as_advanced(MATH_LIBRARY)
441 mark_as_advanced(QT_QMAKE_EXECUTABLE)
442 mark_as_advanced(SNDFILE)