ListPatterns: offset.value omitted (inval) as an argument
[supercollider.git] / CMakeLists.txt
blob6b737a7f74ae0c081a20dfa87f4c4e6ea9203e8b
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}")
8 include(CTest)
9 enable_testing()
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")
16 endif()
18 if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
19         message(WARNING "WARNING: IN-PLACE BUILDS ARE NOT RECOMMENDED - PLEASE USE A BUILD DIRECTORY")
20 endif()
23 set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules
24                       ${CMAKE_MODULE_PATH})
26 CONFIGURE_FILE(
27   "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/cmake_uninstall.cmake.in"
28   "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
29   IMMEDIATE @ONLY)
31 ADD_CUSTOM_TARGET(uninstall
32   "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
34 if(APPLE)
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")
40                 else()
41                         set(HID_UTIL_DIR "HID_Utilities_10_4")
42                 endif()
43         else()
44                 if (${MAC_OSX_SDK_VERSION} GREATER 4)
45                         set(HID_UTIL_DIR "HID_Utilities")
46                 else()
47                         set(HID_UTIL_DIR "HID_Utilities_10_4")
48                 endif()
49         endif()
50         MESSAGE( STATUS "Using HID Utilities from folder '${HID_UTIL_DIR}'")
51 endif()
53 if (CMAKE_SYSTEM_NAME MATCHES "Linux")
54         set(LINUX 1)
55 endif()
57 #############################################
58 # Compiler flags etc
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")
70 #       endif()
72         option(DSO_VISIBILITY "DSO visibility support for gcc" OFF)
74         if (DSO_VISIBILITY)
75                 add_definitions(-fvisibility=hidden)
76         endif()
78         if(APPLE)
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")
82                 endif()
83                 add_definitions("-D_REENTRANT")
84         elseif(NOT (WIN32 AND NOT CYGWIN))
85                 add_definitions("-pthread")
86         endif()
87 endif ()
89 if (${CMAKE_CXX_COMPILER} MATCHES icpc)
90         set(CMAKE_COMPILER_IS_INTEL 1)
91         add_definitions(-Wno-unknown-pragmas)
92         add_definitions(-simd)
93 endif()
95 if (${CMAKE_CXX_COMPILER} MATCHES clang)
96         option(DSO_VISIBILITY "DSO visibility support for clang" OFF)
98         if (DSO_VISIBILITY)
99                 add_definitions(-fvisibility=hidden)
100         endif()
102         set(CMAKE_COMPILER_IS_CLANG 1)
103 endif()
105 if(APPLE)
106         set_property(DIRECTORY
107                 APPEND
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")
115 endif()
117 if(WIN32)
118     set_property(DIRECTORY
119                  APPEND
120                  PROPERTY COMPILE_DEFINITIONS SC_WIN32 NOMINMAX _WIN32_WINNT=0x0500)
122     add_definitions(-DWIN32_LEAN_AND_MEAN)
124     if(MSVC)
125         SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /MTd")
126         SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_DEBUG} /MT")
127     endif()
129     # correctly link the static Boost Thread library:
130     add_definitions(-DBOOST_THREAD_USE_LIB)
131 endif()
134 #############################################
135 # Options
136 option(NOVA_SIMD "Build with nova-simd support." ON)
137 option(FINAL_BUILD "Build as single source file." OFF)
139 option(CURL "Build with curl for remote file download." ON)
141 option(FFT_GREEN "Use internal 'Green' FFT lib rather than FFTW. (Not recommended.)" OFF)
143 option(SSE "Compile with support for SSE instructions.")
144 option(SSE41 "Compile with support for SSE4.1 instructions.")
145 option(SSE42 "Compile with support for SSE4.2 instructions.")
147 set(AUDIOAPI "default" CACHE STRING "Audio API to use (one of {default,coreaudio,jack,portaudio})")
148 option(LIBSCSYNTH "Compile libscsynth as shared library" OFF)
150 option(INSTALL_HELP "Install help docs and examples along with the software" ON)
151 option(INSTALL_OLD_HELP "Install old and deprecated help files" ON)
152 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
153 option(SC_IDE "Build Qt IDE." ON)
155 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
156     option(SUPERNOVA "Build with supernova as optional audio synthesis server" ON)
157 elseif()
158     option(SUPERNOVA "Build with supernova as optional audio synthesis server" OFF)
159 endif()
161 option(SN_MEMORY_DEBUGGING "Build supernova for memory debugging (disable memory pools).")
162 option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable memory pools).")
163 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
165 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
167 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
169 option(SCLANG_SERVER "Build with internal server." ON)
171 if(CMAKE_SYSTEM_NAME MATCHES "Linux")
172         option(SC_WII "Build sclang with WII support" ON)
173 endif()
175 option(SC_QT "Build SuperCollider with Qt GUI" ON)
176 if (SC_QT)
177   message( STATUS "Compiling with Qt GUI" )
178 endif (SC_QT)
180 if(WIN32)
181         option(SC_PSYCOLLIDER "Build PsyCollider" ON)
182 else()
183         option(SC_PSYCOLLIDER "Build PsyCollider" OFF)
184 endif()
186 if(WIN32)
187     option(SC_WIN_DEP_DIRS
188         "A list of directories where dependencies will be searched for when packaging.")
189 endif()
191 if(CMAKE_COMPILER_IS_GNUCXX)
192     option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
193     option(LTO "Use GCC's link time optimizer' (experimental).")
194 endif()
196 option(SC_SYMLINK_CLASSLIB "Place a symlink of SCCLassLibrary instead of copying" OFF)
197 option(SC_OX "Try to compile with support for C++0x (experimental, mainly related to supernova)" OFF)
199 #############################################
200 # some default libraries
202 find_package(Pthreads)
204 if (NOT PTHREADS_FOUND)
205     message(SEND_ERROR "cannot find libpthreads")
206 endif()
207 include_directories(${PTHREADS_INCLUDE_DIR})
209 if (MSVC OR MINGW)
210     set(MATH_LIBRARY "")
211 else()
212     find_library(MATH_LIBRARY m)
213 endif()
215 if(CURL)
216         find_package(CURL)
217         if(CURL_FOUND)
218                 add_definitions("-DHAVE_LIBCURL")
219                 include_directories(${CURL_INCLUDE_DIRS})
220         endif()
221 endif()
223 set(Boost_USE_MULTITHREADED      ON)
224 find_package( Boost 1.48.0 COMPONENTS thread system filesystem program_options regex test )
226 if (SC_OX)
227         set(Boost_FOUND OFF) # boost 1.48 does not like c++11
228 endif()
230 if (Boost_FOUND)
231         link_directories(${Boost_LIBRARY_DIRS})
232 else()
233         message("building boost libraries manually")
234 endif()
238 #############################################
239 # some preprocessor flags
240 if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG)
241         if (SSE)
242                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse -mfpmath=sse")
243                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -mfpmath=sse")
244         endif()
245         if (SSE41)
246                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1")
247                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
248         endif()
249         if (SSE42)
250                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
251                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
252         endif()
253         if (NATIVE)
254                 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
255                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
256         endif()
258         if (SC_OX)
259                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
260         endif()
261 endif()
263 if (CMAKE_COMPILER_IS_INTEL AND NOT WIN32)
264         if (SSE42)
265                 add_definitions(-xSSE4.2)
266         elseif (SSE41)
267                 add_definitions(-xSSE4.1)
268         elseif (SSE)
269                 add_definitions(-mia32)
270         endif()
271         if (SC_OX)
272                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
273         endif()
275         # disable warnings
276         add_definitions(-diag-disable 170) # pointer points outside of underlying object ... used heavily in sclang
277         add_definitions(-diag-disable 279) # controlling expression is constant
279 endif()
281 if (SC_MEMORY_DEBUGGING)
282         add_definitions(-DDISABLE_MEMORY_POOLS)
283 endif()
285 #############################################
286 # subdirectories
287 add_subdirectory(external_libraries)
288 add_subdirectory(server)
289 add_subdirectory(lang)
290 add_subdirectory(editors)
291 add_subdirectory(platform)
293 if(CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
294     install(DIRECTORY include/common include/plugin_interface include/server include/lang
295         DESTINATION ${CMAKE_INSTALL_PREFIX}/include/SuperCollider
296         FILES_MATCHING PATTERN "*.h"
297     )
298 endif()
300 if(APPLE)
301         # determines the app name and app install location (scappbundlename, scappdir):
302         include (cmake_modules/MacAppFolder.cmake)
304         set(auxresourcesdir ${scappauxresourcesdir})
306         # Some aux files which go in the app's folder
307         install(FILES README.txt ChangeLog COPYING AUTHORS platform/mac/MOVED_STUFF.txt
308                 DESTINATION ${scappbundlename}
309         )
310 elseif (WIN32)
311         set(auxresourcesdir "SuperCollider")
312 else()
313         set(auxresourcesdir "share/SuperCollider")
314 endif()
316 set(SCCLASSLIB_EXCLUDE_REGEX "IGNOREME")
318 if(NOT SC_QT)
319         set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}|QtCollider")
320 endif()
322 if(WIN32)
323         set(SCCLASSLIB_EXCLUDE_REGEX "${SCCLASSLIB_EXCLUDE_REGEX}|PsycolliderDocument")
324 endif()
327 if(APPLE)
329         if(SC_SYMLINK_CLASSLIB)
331                 #if there are folders inside SCCLassLibrary abort cmake.
332                 file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
333                 foreach(onedirectory ${classlibraryfolders})
334                         message( "${onedirectory}" )
335                         if(NOT IS_SYMLINK "${onedirectory}")
336                                 message(FATAL_ERROR "Symlinking will fail ! SCClassLibrary folder already exists and has directories inside, please delete it first." )
337                         endif()
338                 endforeach(onedirectory)
340                 message(STATUS "Will create symlink of SCClassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary" )
341                 if(NOT EXISTS "{CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
342                         install( CODE "EXECUTE_PROCESS(COMMAND mkdir ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary)" )
343                 endif()
344                 #symlink the folders inside SCCLassLibrary. Check if QtCollider folder should be symlinked or not.
345                 file(GLOB classlibraryfolders RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary" "SCClassLibrary/[^.]*")
346                 foreach(onedirectory ${classlibraryfolders})
347                         if(NOT "${onedirectory}" MATCHES "${SCCLASSLIB_EXCLUDE_REGEX}")
348                                 install( CODE
349                                         "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/${onedirectory} ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/${onedirectory} )" )
350                         endif()
351                 endforeach(onedirectory)
352         else()
353                 message(STATUS "Will copy SCCLassLibrary to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
355                 #if directory contains symlinks, unlink them.
356                 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary")
357                         file(GLOB classlibraryfolders "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/SCClassLibrary/[^.]*")
358                         foreach(onedirectory ${classlibraryfolders})
359                                 if(IS_SYMLINK "${onedirectory}")
360                                         message(STATUS "Unlinking ${onedirectory}")
361                                         install( CODE "EXECUTE_PROCESS(COMMAND unlink ${onedirectory} )" )
362                                 endif()
363                         endforeach(onedirectory)
364                 endif()
366                 install(DIRECTORY SCClassLibrary
367                         DESTINATION ${auxresourcesdir}
368                         REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
369                 )
370         endif()
371 else()
372         install(DIRECTORY SCClassLibrary
373                 DESTINATION ${auxresourcesdir}
374                 REGEX ${SCCLASSLIB_EXCLUDE_REGEX} EXCLUDE
375                 PATTERN "*~" EXCLUDE
376                 PATTERN "*#" EXCLUDE
377         )
378 endif()
380 configure_file(platform/SCVersion.sc.in SCVersion/SCVersion.sc)
381 install(DIRECTORY "${CMAKE_BINARY_DIR}/SCVersion" DESTINATION "${auxresourcesdir}/SCClassLibrary")
383 install(DIRECTORY sounds
384         DESTINATION ${auxresourcesdir}
387 if(APPLE AND ("${standalone}" STREQUAL ""))
388         set(exampledir "${scappbundlename}")
389 else()
390         set(exampledir "${auxresourcesdir}")
391 endif()
393 install(DIRECTORY examples
394         DESTINATION ${exampledir}
395         PATTERN "*~" EXCLUDE
396         PATTERN "*#" EXCLUDE
399 if(INSTALL_OLD_HELP)
400         install(DIRECTORY Help
401                 DESTINATION ${auxresourcesdir}
402         )
403 endif()
405 if(INSTALL_HELP)
406         if(SC_SYMLINK_CLASSLIB AND APPLE)
407                 message(STATUS "Will create symlink of HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
408                 if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
409                         message(FATAL_ERROR "Symlinking will fail ! HelpSource folder already exists, please delete it first." )
410                 endif()
411                 install( CODE
412                                         "EXECUTE_PROCESS(COMMAND ln -shF ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
413         else()
414                 message(STATUS "Will copy HelpSource to ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}")
415                 if(APPLE)
416                         if(EXISTS "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
417                                 if(IS_SYMLINK "${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
418                                         message(STATUS "Unlinking ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource")
419                                         install( CODE "EXECUTE_PROCESS(COMMAND unlink ${CMAKE_INSTALL_PREFIX}/${auxresourcesdir}/HelpSource )" )
420                                 endif()
421                         endif()
422                 endif()
423                 install(DIRECTORY HelpSource
424                         DESTINATION ${auxresourcesdir}
425                         PATTERN "*~" EXCLUDE
426                         PATTERN "*#" EXCLUDE
427                 )
428         endif()
429 endif()
431 #############################################
433 # build scdoc help files
435 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Common")
436 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/Platform")
437 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/SCDoc")
438 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/DefaultLibrary")
439 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/JITLib")
440 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/SCClassLibrary/backwards_compatibility")
442 # this folder has an extension to Platform that disables the loadStartupFiles method
443 list(APPEND BUILD_CLASSLIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/platform/disable_startup_files")
445 foreach(arg ${BUILD_CLASSLIBRARIES})
446         set(BUILD_CLASSLIBRARYPATH "${BUILD_CLASSLIBRARYPATH}+${arg}\n")
447 endforeach()
449 configure_file(build_sclang.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg)
451 if(SC_DOC_RENDER)
452         file(GLOB_RECURSE SCDocSources RELATIVE HelpSource .*[^~])
453         file(GLOB_RECURSE SCDocClasses RELATIVE SCClassLibrary/SCDoc *.sc)
455         add_custom_target(doc ALL
456                                         COMMAND ${CMAKE_CURRENT_BINARY_DIR}/lang/sclang${CMAKE_EXECUTABLE_SUFFIX}
457                                                         -l ${CMAKE_CURRENT_BINARY_DIR}/build_sclang.cfg
458                                                         platform/renderAllHelp.scd ${CMAKE_CURRENT_SOURCE_DIR}/HelpSource ${CMAKE_CURRENT_BINARY_DIR}/RenderedHelp
459                                         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
460                                         DEPENDS sclang ${SCDocSources} ${SCDocClasses})
462 endif()
464 set_directory_properties(
465         PROPERTIES
466         ADDITIONAL_MAKE_CLEAN_FILES "RenderedHelp")
468 #############################################
470 # testsuite
472 add_subdirectory(testsuite)
474 #############################################
475 # CPack support
477 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
478 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
479 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
481 if(APPLE)
482         set(CPACK_GENERATOR "DragNDrop")
483         set(CPACK_DMG_FORMAT "UDBZ")
484         set(CPACK_DMG_VOLUME_NAME "${scappbundlename}")
485         set(CPACK_SYSTEM_NAME "OSX")
486 #       set(CPACK_PACKAGE_FILE_NAME "${scappbundlename}-${PROJECT_VERSION}")
487         set(CPACK_DMG_DS_STORE "${CMAKE_SOURCE_DIR}/package/ds_store")
488         set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/package/background.png")
489         set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/platform/mac/Resources/SCcube.icns")
490 endif()
492 if(NOT WIN32) # We define a custom 'package' target in platform/windows/CMakeLists.txt
493     include(CPack)
494 endif()
496 #############################################
497 # hide advanced variables
498 mark_as_advanced(AVAHI_LIBRARIES AVAHI_INCLUDE_DIRS AVAHI_INCLUDE_DIR AVAHI_LIBRARY-COMMON AVAHI_LIBRARY-CLIENT)
499 mark_as_advanced(DL)
500 mark_as_advanced(EMACS_EXECUTABLE)
501 mark_as_advanced(FFTW3F_INCLUDE_DIR FFTW3F_LIBRARY)
502 mark_as_advanced(JACK JACK_INCLUDE_DIR JACK_LIBRARY)
503 mark_as_advanced(MATH_LIBRARY)
504 mark_as_advanced(QT_QMAKE_EXECUTABLE)
505 mark_as_advanced(SNDFILE)