Cycles: Add some TODO comments about derivatives
[blender.git] / CMakeLists.txt
index e214b23a5dbd0848adc1d64ba27b1af9e0da5f80..029198f7064210f5457f418255c2a27cc1b41982 100644 (file)
@@ -158,25 +158,30 @@ option_defaults_init(
        _init_SDL
        _init_FFTW3
        _init_GAMEENGINE
+       _init_OPENSUBDIV
 )
 
 # customize...
-if(UNIX AND NOT APPLE)
+if (UNIX AND NOT APPLE)
        # some of these libraries are problematic on Linux
        # disable less important dependencies by default
-       set(_init_BUILDINFO                      OFF)
        set(_init_CODEC_FFMPEG                   OFF)
        set(_init_CYCLES_OSL                     OFF)
        set(_init_IMAGE_OPENEXR                  OFF)
        set(_init_IMAGE_REDCODE                  OFF)
        set(_init_INPUT_NDOF                     OFF)
        set(_init_JACK                           OFF)
-       set(_init_LIBMV_SCHUR_SPECIALIZATION     OFF)
        set(_init_OPENCOLLADA                    OFF)
        set(_init_OPENCOLORIO                    OFF)
        set(_init_SDL                            OFF)
        set(_init_FFTW3                          OFF)
-       set(_init_GAMEENGINE                     OFF)
+       set(_init_OPENSUBDIV                     OFF)
+elseif(WIN32)
+       set(_init_JACK                           OFF)
+elseif(APPLE)
+       set(_init_INPUT_NDOF                     OFF)
+       set(_init_JACK                           OFF)
+       set(_init_OPENSUBDIV                     OFF)
 endif()
 
 
@@ -221,7 +226,15 @@ mark_as_advanced(WITH_SYSTEM_BULLET)
 option(WITH_GAMEENGINE    "Enable Game Engine" ${_init_GAMEENGINE})
 option(WITH_PLAYER        "Build Player" OFF)
 option(WITH_OPENCOLORIO   "Enable OpenColorIO color management" ${_init_OPENCOLORIO})
-option(WITH_COMPOSITOR    "Enable the tile based nodal compositor" ON)
+
+# Compositor
+option(WITH_COMPOSITOR         "Enable the tile based nodal compositor" ON)
+option(WITH_COMPOSITOR_WERROR  "Treat warnings as errors in compositor code" OFF)
+mark_as_advanced(WITH_COMPOSITOR_WERROR)
+
+option(WITH_OPENSUBDIV    "Enable OpenSubdiv for surface subdivision" _init_OPENSUBDIV)
+option(WITH_SUBSURF_WERROR  "Treat warnings as errors in subsurf code" OFF)
+mark_as_advanced(WITH_COMPOSITOR_WERROR)
 
 # GHOST Windowing Library Options
 option(WITH_GHOST_DEBUG   "Enable debugging output for the GHOST library" OFF)
@@ -239,7 +252,13 @@ option(WITH_HEADLESS      "Build without graphical support (renderfarm, server m
 mark_as_advanced(WITH_HEADLESS)
 
 option(WITH_AUDASPACE    "Build with blenders audio library (only disable if you know what you're doing!)" ON)
+option(WITH_SYSTEM_AUDASPACE "Build with external audaspace library installed on the system (only enable if you know what you're doing!)" OFF)
 mark_as_advanced(WITH_AUDASPACE)
+mark_as_advanced(WITH_SYSTEM_AUDASPACE)
+
+if(NOT WITH_AUDASPACE)
+       set(WITH_SYSTEM_AUDASPACE OFF)
+endif()
 
 option(WITH_OPENMP        "Enable OpenMP (has to be supported by the compiler)" ON)
 
@@ -318,9 +337,11 @@ if(UNIX AND NOT APPLE)
 endif()
 
 # Camera/motion tracking
-option(WITH_LIBMV         "Enable libmv structure from motion library" ON)
+option(WITH_LIBMV         "Enable Libmv structure from motion library" ON)
 option(WITH_LIBMV_SCHUR_SPECIALIZATIONS "Enable fixed-size schur specializations." ${_init_LIBMV_SCHUR_SPECIALIZATION})
+option(WITH_LIBMV_WERROR  "Treat warnings as errors in Libmv (and Blender's motion tracking) code")
 mark_as_advanced(WITH_LIBMV_SCHUR_SPECIALIZATIONS)
+mark_as_advanced(WITH_LIBMV_WERROR)
 
 # Freestyle
 option(WITH_FREESTYLE     "Enable Freestyle (advanced edges rendering)" ON)
@@ -354,18 +375,20 @@ if(UNIX AND NOT APPLE)
 endif()
 
 # Cycles
-option(WITH_CYCLES                                     "Enable cycles Render Engine" ON)
-option(WITH_CYCLES_STANDALONE          "Build cycles standalone application" OFF)
-option(WITH_CYCLES_STANDALONE_GUI      "Build cycles standalone with GUI" OFF)
+option(WITH_CYCLES                                     "Enable Cycles Render Engine" ON)
+option(WITH_CYCLES_STANDALONE          "Build Cycles standalone application" OFF)
+option(WITH_CYCLES_STANDALONE_GUI      "Build Cycles standalone with GUI" OFF)
 option(WITH_CYCLES_OSL                         "Build Cycles with OSL support" ${_init_CYCLES_OSL})
-option(WITH_CYCLES_CUDA_BINARIES       "Build cycles CUDA binaries" OFF)
+option(WITH_CYCLES_CUDA_BINARIES       "Build Cycles CUDA binaries" OFF)
 set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 sm_50 sm_52 CACHE STRING "CUDA architectures to build binaries for")
 mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
 unset(PLATFORM_DEFAULT)
-option(WITH_CYCLES_LOGGING     "Build cycles with logging support" ON)
-option(WITH_CYCLES_DEBUG       "Build cycles with extra debug capabilities" OFF)
+option(WITH_CYCLES_LOGGING     "Build Cycles with logging support" ON)
+option(WITH_CYCLES_DEBUG       "Build Cycles with extra debug capabilities" OFF)
+option(WITH_CYCLES_WERROR      "Treat warnings as errors in Cycles code" OFF)
 mark_as_advanced(WITH_CYCLES_LOGGING)
 mark_as_advanced(WITH_CYCLES_DEBUG)
+mark_as_advanced(WITH_CYCLES_WERROR)
 
 # LLVM
 option(WITH_LLVM                                       "Use LLVM" OFF)
@@ -488,7 +511,11 @@ if(APPLE)
        endif()
        
        execute_process(COMMAND uname -r OUTPUT_VARIABLE MAC_SYS) # check for actual system-version
-       if(${MAC_SYS} MATCHES 14)
+       if(${MAC_SYS} MATCHES 15)
+               set(OSX_SYSTEM 10.11)
+               # throw an error here, older cmake cannot handle 2 digit subversion!
+               cmake_minimum_required(VERSION 3.0.0)
+       elseif(${MAC_SYS} MATCHES 14)
                set(OSX_SYSTEM 10.10)
                # throw an error here, older cmake cannot handle 2 digit subversion!
                cmake_minimum_required(VERSION 3.0.0)
@@ -694,6 +721,34 @@ if(HAVE_STDBOOL_H)
        add_definitions(-DHAVE_STDBOOL_H)
 endif()
 
+if(WITH_AUDASPACE)
+       if(WITH_SYSTEM_AUDASPACE)
+               set(AUDASPACE_DEFINITIONS
+                       -DWITH_AUDASPACE
+                       -DWITH_SYSTEM_AUDASPACE
+                       "-DAUD_DEVICE_H=<AUD_Device.h>"
+                       "-DAUD_SPECIAL_H=<AUD_Special.h>"
+                       "-DAUD_SOUND_H=<AUD_Sound.h>"
+                       "-DAUD_HANDLE_H=<AUD_Handle.h>"
+                       "-DAUD_SEQUENCE_H=<AUD_Sequence.h>"
+                       "-DAUD_TYPES_H=<AUD_Types.h>"
+                       "-DAUD_PYTHON_H=<python/PyAPI.h>"
+               )
+       else()
+               set(AUDASPACE_C_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/intern/audaspace/intern")
+               set(AUDASPACE_PY_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/intern/audaspace/intern")
+               set(AUDASPACE_DEFINITIONS
+                       -DWITH_AUDASPACE
+                       "-DAUD_DEVICE_H=<AUD_C-API.h>"
+                       "-DAUD_SPECIAL_H=<AUD_C-API.h>"
+                       "-DAUD_SOUND_H=<AUD_C-API.h>"
+                       "-DAUD_HANDLE_H=<AUD_C-API.h>"
+                       "-DAUD_SEQUENCE_H=<AUD_C-API.h>"
+                       "-DAUD_TYPES_H=<AUD_Space.h>"
+               )
+       endif()
+endif()
+
 #-----------------------------------------------------------------------------
 # Check for valid directories
 # ... a partial checkout may cause this.
@@ -795,6 +850,14 @@ if(WITH_X11)
 
 endif()
 
+
+# ----------------------------------------------------------------------------
+# Main Platform Checks
+#
+# - UNIX
+# - WIN32
+# - APPLE
+
 if(UNIX AND NOT APPLE)
        macro(find_package_wrapper)
                if(WITH_STATIC_LIBS)
@@ -863,6 +926,13 @@ if(UNIX AND NOT APPLE)
        endif()
 
        # Audio IO
+       if(WITH_SYSTEM_AUDASPACE)
+               find_package_wrapper(Audaspace)
+               if(NOT AUDASPACE_FOUND OR NOT AUDASPACE_C_FOUND)
+                       message(FATAL_ERROR "Audaspace external library not found!")
+               endif()
+       endif()
+
        if(WITH_OPENAL)
                find_package_wrapper(OpenAL)
                if(NOT OPENAL_FOUND)
@@ -1076,6 +1146,18 @@ if(UNIX AND NOT APPLE)
                set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,--version-script='${CMAKE_SOURCE_DIR}/source/creator/blender.map'")
        endif()
 
+       if(WITH_OPENSUBDIV)
+               find_package_wrapper(OpenSubdiv)
+
+               set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBRARIES})
+               set(OPENSUBDIV_LIBPATH)  # TODO, remove and reference the absolute path everywhere
+
+               if(NOT OPENSUBDIV_FOUND)
+                       set(WITH_OPENSUBDIV OFF)
+                       message(STATUS "OpenSubdiv not found")
+               endif()
+       endif()
+
        # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
        list(APPEND PLATFORM_LINKLIBS -lutil -lc -lm)
 
@@ -1496,6 +1578,13 @@ elseif(WIN32)
                        )
                endif()
 
+               if(WITH_OPENSUBDIV)
+                       set(OPENSUBDIV_INCLUDE_DIR ${LIBDIR}/opensubdiv/include)
+                       set(OPENSUBDIV_LIBPATH ${LIBDIR}/opensubdiv/lib)
+                       set(OPENSUBDIV_LIBRARIES ${OPENSUBDIV_LIBPATH}/osdCPU.lib ${OPENSUBDIV_LIBPATH}/osdGPU.lib)
+                       find_package(OpenSubdiv)
+               endif()
+
                if(WITH_SDL)
                        set(SDL ${LIBDIR}/sdl)
                        set(SDL_INCLUDE_DIR ${SDL}/include)
@@ -1503,6 +1592,16 @@ elseif(WIN32)
                        set(SDL_LIBPATH ${SDL}/lib)
                endif()
 
+               # Audio IO
+               if(WITH_SYSTEM_AUDASPACE)
+                       set(AUDASPACE_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
+                       set(AUDASPACE_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace.lib)
+                       set(AUDASPACE_C_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
+                       set(AUDASPACE_C_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-c.lib)
+                       set(AUDASPACE_PY_INCLUDE_DIRS ${LIBDIR}/audaspace/include/audaspace)
+                       set(AUDASPACE_PY_LIBRARIES ${LIBDIR}/audaspace/lib/audaspace-py.lib)
+               endif()
+
                # used in many places so include globally, like OpenGL
                blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}")
 
@@ -1822,6 +1921,17 @@ elseif(APPLE)
                endif()
        endif()
 
+       if(WITH_OPENSUBDIV)
+               set(OPENSUBDIV ${LIBDIR}/opensubdiv)
+               set(OPENSUBDIV_LIBPATH ${OPENSUBDIV}/lib)
+               find_library(OSL_LIB_UTIL NAMES osdutil PATHS ${OPENSUBDIV_LIBPATH})
+               find_library(OSL_LIB_CPU NAMES osdCPU PATHS ${OPENSUBDIV_LIBPATH})
+               find_library(OSL_LIB_GPU NAMES osdGPU PATHS ${OPENSUBDIV_LIBPATH})
+               set(OPENSUBDIV_INCLUDE_DIR ${OPENSUBDIV}/include)
+               set(OPENSUBDIV_INCLUDE_DIRS ${OPENSUBDIV_INCLUDE_DIR})
+               list(APPEND OPENSUBDIV_LIBRARIES ${OSL_LIB_UTIL} ${OSL_LIB_CPU} ${OSL_LIB_GPU})
+       endif()
+
        if(WITH_JACK)
                find_library(JACK_FRAMEWORK
                        NAMES jackmp
@@ -2214,9 +2324,14 @@ endif()
 if(WITH_IMAGE_OPENJPEG)
        if(WITH_SYSTEM_OPENJPEG)
                # dealt with above
+               set(OPENJPEG_DEFINES "")
        else()
                set(OPENJPEG_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/extern/libopenjpeg")
-               add_definitions(-DOPJ_STATIC)
+               set(OPENJPEG_DEFINES "-DOPJ_STATIC")
+       endif()
+       # Special handling of Windows platform where openjpeg is always static.
+       if(WIN32)
+               set(OPENJPEG_DEFINES "-DOPJ_STATIC")
        endif()
 endif()