This is a follup to 0c38436227
.
No functional changes to Blender, just the build scripts.
644 lines
18 KiB
CMake
644 lines
18 KiB
CMake
# ***** BEGIN GPL LICENSE BLOCK *****
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
#
|
|
# The Original Code is Copyright (C) 2016, Blender Foundation
|
|
# All rights reserved.
|
|
# ***** END GPL LICENSE BLOCK *****
|
|
|
|
# Libraries configuration for any *nix system including Linux and Unix.
|
|
|
|
# Detect precompiled library directory
|
|
if(NOT DEFINED LIBDIR)
|
|
# Path to a locally compiled libraries.
|
|
set(LIBDIR_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR})
|
|
string(TOLOWER ${LIBDIR_NAME} LIBDIR_NAME)
|
|
set(LIBDIR_NATIVE_ABI ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_NAME})
|
|
|
|
# Path to precompiled libraries with known CentOS 7 ABI.
|
|
set(LIBDIR_CENTOS7_ABI ${CMAKE_SOURCE_DIR}/../lib/linux_centos7_x86_64)
|
|
|
|
# Choose the best suitable libraries.
|
|
if(EXISTS ${LIBDIR_NATIVE_ABI})
|
|
set(LIBDIR ${LIBDIR_NATIVE_ABI})
|
|
elseif(EXISTS ${LIBDIR_CENTOS7_ABI})
|
|
set(LIBDIR ${LIBDIR_CENTOS7_ABI})
|
|
set(WITH_CXX11_ABI OFF)
|
|
endif()
|
|
|
|
# Avoid namespace pollustion.
|
|
unset(LIBDIR_NATIVE_ABI)
|
|
unset(LIBDIR_CENTOS7_ABI)
|
|
endif()
|
|
|
|
if(EXISTS ${LIBDIR})
|
|
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
|
|
|
|
file(GLOB LIB_SUBDIRS ${LIBDIR}/*)
|
|
# NOTE: Make sure "proper" compiled zlib comes first before the one
|
|
# which is a part of OpenCollada. They have different ABI, and we
|
|
# do need to use the official one.
|
|
set(CMAKE_PREFIX_PATH ${LIBDIR}/zlib ${LIB_SUBDIRS})
|
|
set(WITH_STATIC_LIBS ON)
|
|
set(WITH_OPENMP_STATIC ON)
|
|
set(Boost_NO_BOOST_CMAKE ON)
|
|
set(BOOST_ROOT ${LIBDIR}/boost)
|
|
set(BOOST_LIBRARYDIR ${LIBDIR}/boost/lib)
|
|
set(Boost_NO_SYSTEM_PATHS ON)
|
|
set(OPENEXR_ROOT_DIR ${LIBDIR}/openexr)
|
|
endif()
|
|
|
|
if(WITH_STATIC_LIBS)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++")
|
|
endif()
|
|
|
|
# Wrapper to prefer static libraries
|
|
macro(find_package_wrapper)
|
|
if(WITH_STATIC_LIBS)
|
|
find_package_static(${ARGV})
|
|
else()
|
|
find_package(${ARGV})
|
|
endif()
|
|
endmacro()
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# Precompiled Libraries
|
|
#
|
|
# These are libraries that may be precompiled. For this we disable searching in
|
|
# the system directories so that we don't accidentally use them instead.
|
|
|
|
if(EXISTS ${LIBDIR})
|
|
without_system_libs_begin()
|
|
endif()
|
|
|
|
find_package_wrapper(JPEG REQUIRED)
|
|
find_package_wrapper(PNG REQUIRED)
|
|
find_package_wrapper(ZLIB REQUIRED)
|
|
find_package_wrapper(Freetype REQUIRED)
|
|
|
|
if(WITH_PYTHON)
|
|
# No way to set py35, remove for now.
|
|
# find_package(PythonLibs)
|
|
|
|
# Use our own instead, since without py is such a rare case,
|
|
# require this package
|
|
# XXX Linking errors with debian static python :/
|
|
# find_package_wrapper(PythonLibsUnix REQUIRED)
|
|
find_package(PythonLibsUnix REQUIRED)
|
|
endif()
|
|
|
|
if(WITH_IMAGE_OPENEXR)
|
|
find_package_wrapper(OpenEXR) # our own module
|
|
if(NOT OPENEXR_FOUND)
|
|
set(WITH_IMAGE_OPENEXR OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_IMAGE_OPENJPEG)
|
|
find_package_wrapper(OpenJPEG)
|
|
if(NOT OPENJPEG_FOUND)
|
|
set(WITH_IMAGE_OPENJPEG OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_IMAGE_TIFF)
|
|
# XXX Linking errors with debian static tiff :/
|
|
# find_package_wrapper(TIFF)
|
|
find_package(TIFF)
|
|
if(NOT TIFF_FOUND)
|
|
set(WITH_IMAGE_TIFF OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_OPENAL)
|
|
find_package_wrapper(OpenAL)
|
|
if(NOT OPENAL_FOUND)
|
|
set(WITH_OPENAL OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_SDL)
|
|
if(WITH_SDL_DYNLOAD)
|
|
set(SDL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extern/sdlew/include/SDL2")
|
|
set(SDL_LIBRARY)
|
|
else()
|
|
find_package_wrapper(SDL2)
|
|
if(SDL2_FOUND)
|
|
# Use same names for both versions of SDL until we move to 2.x.
|
|
set(SDL_INCLUDE_DIR "${SDL2_INCLUDE_DIR}")
|
|
set(SDL_LIBRARY "${SDL2_LIBRARY}")
|
|
set(SDL_FOUND "${SDL2_FOUND}")
|
|
else()
|
|
find_package_wrapper(SDL)
|
|
endif()
|
|
mark_as_advanced(
|
|
SDL_INCLUDE_DIR
|
|
SDL_LIBRARY
|
|
)
|
|
# unset(SDLMAIN_LIBRARY CACHE)
|
|
if(NOT SDL_FOUND)
|
|
set(WITH_SDL OFF)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# Codecs
|
|
if(WITH_CODEC_SNDFILE)
|
|
find_package_wrapper(SndFile)
|
|
if(NOT SNDFILE_FOUND)
|
|
set(WITH_CODEC_SNDFILE OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_CODEC_FFMPEG)
|
|
if(EXISTS ${LIBDIR})
|
|
# For precompiled lib directory, all ffmpeg dependencies are in the same folder
|
|
file(GLOB ffmpeg_libs ${LIBDIR}/ffmpeg/lib/*.a ${LIBDIR}/sndfile/lib/*.a)
|
|
set(FFMPEG ${LIBDIR}/ffmpeg CACHE PATH "FFMPEG Directory")
|
|
set(FFMPEG_LIBRARIES ${ffmpeg_libs} ${ffmpeg_libs} CACHE STRING "FFMPEG Libraries")
|
|
else()
|
|
set(FFMPEG /usr CACHE PATH "FFMPEG Directory")
|
|
set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries")
|
|
endif()
|
|
|
|
mark_as_advanced(FFMPEG)
|
|
|
|
# lame, but until we have proper find module for ffmpeg
|
|
set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include)
|
|
if(EXISTS "${FFMPEG}/include/ffmpeg/")
|
|
list(APPEND FFMPEG_INCLUDE_DIRS "${FFMPEG}/include/ffmpeg")
|
|
endif()
|
|
# end lameness
|
|
|
|
mark_as_advanced(FFMPEG_LIBRARIES)
|
|
set(FFMPEG_LIBPATH ${FFMPEG}/lib)
|
|
endif()
|
|
|
|
if(WITH_FFTW3)
|
|
find_package_wrapper(Fftw3)
|
|
if(NOT FFTW3_FOUND)
|
|
set(WITH_FFTW3 OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_OPENCOLLADA)
|
|
find_package_wrapper(OpenCOLLADA)
|
|
if(OPENCOLLADA_FOUND)
|
|
if(WITH_STATIC_LIBS)
|
|
# PCRE is bundled with OpenCollada without headers, so can't use
|
|
# find_package reliably to detect it.
|
|
set(PCRE_LIBRARIES ${LIBDIR}/opencollada/lib/libpcre.a)
|
|
else()
|
|
find_package_wrapper(PCRE)
|
|
endif()
|
|
find_package_wrapper(XML2)
|
|
else()
|
|
set(WITH_OPENCOLLADA OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_MEM_JEMALLOC)
|
|
find_package_wrapper(JeMalloc)
|
|
if(NOT JEMALLOC_FOUND)
|
|
set(WITH_MEM_JEMALLOC OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_INPUT_NDOF)
|
|
find_package_wrapper(Spacenav)
|
|
if(SPACENAV_FOUND)
|
|
# use generic names within blenders buildsystem.
|
|
set(NDOF_INCLUDE_DIRS ${SPACENAV_INCLUDE_DIRS})
|
|
set(NDOF_LIBRARIES ${SPACENAV_LIBRARIES})
|
|
else()
|
|
set(WITH_INPUT_NDOF OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_CYCLES_OSL)
|
|
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
|
if(NOT OSL_ROOT)
|
|
set(OSL_ROOT ${CYCLES_OSL})
|
|
endif()
|
|
find_package_wrapper(OpenShadingLanguage)
|
|
if(OSL_FOUND)
|
|
if(${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6")
|
|
# Note: --whole-archive is needed to force loading of all symbols in liboslexec,
|
|
# otherwise LLVM is missing the osl_allocate_closure_component function
|
|
set(OSL_LIBRARIES
|
|
${OSL_OSLCOMP_LIBRARY}
|
|
-Wl,--whole-archive ${OSL_OSLEXEC_LIBRARY}
|
|
-Wl,--no-whole-archive ${OSL_OSLQUERY_LIBRARY}
|
|
)
|
|
endif()
|
|
else()
|
|
message(STATUS "OSL not found, disabling it from Cycles")
|
|
set(WITH_CYCLES_OSL OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_OPENVDB)
|
|
find_package_wrapper(OpenVDB)
|
|
find_package_wrapper(Blosc)
|
|
if(NOT OPENVDB_FOUND)
|
|
set(WITH_OPENVDB OFF)
|
|
set(WITH_OPENVDB_BLOSC OFF)
|
|
message(STATUS "OpenVDB not found, disabling it")
|
|
elseif(NOT BLOSC_FOUND)
|
|
set(WITH_OPENVDB_BLOSC OFF)
|
|
message(STATUS "Blosc not found, disabling it for OpenVBD")
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_ALEMBIC)
|
|
find_package_wrapper(Alembic)
|
|
|
|
if(NOT ALEMBIC_FOUND)
|
|
set(WITH_ALEMBIC OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_USD)
|
|
find_package_wrapper(USD)
|
|
|
|
if(NOT USD_FOUND)
|
|
set(WITH_USD OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_BOOST)
|
|
# uses in build instructions to override include and library variables
|
|
if(NOT BOOST_CUSTOM)
|
|
if(WITH_STATIC_LIBS)
|
|
set(Boost_USE_STATIC_LIBS ON)
|
|
endif()
|
|
set(Boost_USE_MULTITHREADED ON)
|
|
set(__boost_packages filesystem regex thread date_time)
|
|
if(WITH_CYCLES_OSL)
|
|
if(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
|
|
list(APPEND __boost_packages wave)
|
|
else()
|
|
endif()
|
|
endif()
|
|
if(WITH_INTERNATIONAL)
|
|
list(APPEND __boost_packages locale)
|
|
endif()
|
|
if(WITH_CYCLES_NETWORK)
|
|
list(APPEND __boost_packages serialization)
|
|
endif()
|
|
if(WITH_OPENVDB)
|
|
list(APPEND __boost_packages iostreams)
|
|
endif()
|
|
list(APPEND __boost_packages system)
|
|
find_package(Boost 1.48 COMPONENTS ${__boost_packages})
|
|
if(NOT Boost_FOUND)
|
|
# try to find non-multithreaded if -mt not found, this flag
|
|
# doesn't matter for us, it has nothing to do with thread
|
|
# safety, but keep it to not disturb build setups
|
|
set(Boost_USE_MULTITHREADED OFF)
|
|
find_package(Boost 1.48 COMPONENTS ${__boost_packages})
|
|
endif()
|
|
unset(__boost_packages)
|
|
if(Boost_USE_STATIC_LIBS AND WITH_BOOST_ICU)
|
|
find_package(IcuLinux)
|
|
endif()
|
|
mark_as_advanced(Boost_DIR) # why doesn't boost do this?
|
|
endif()
|
|
|
|
set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
|
|
set(BOOST_LIBRARIES ${Boost_LIBRARIES})
|
|
set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
|
|
set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
|
|
|
|
if(Boost_USE_STATIC_LIBS AND WITH_BOOST_ICU)
|
|
find_package(IcuLinux)
|
|
list(APPEND BOOST_LIBRARIES ${ICU_LIBRARIES})
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_OPENIMAGEIO)
|
|
find_package_wrapper(OpenImageIO)
|
|
if(NOT OPENIMAGEIO_PUGIXML_FOUND AND WITH_CYCLES_STANDALONE)
|
|
find_package_wrapper(PugiXML)
|
|
else()
|
|
set(PUGIXML_INCLUDE_DIR "${OPENIMAGEIO_INCLUDE_DIR/OpenImageIO}")
|
|
set(PUGIXML_LIBRARIES "")
|
|
endif()
|
|
|
|
set(OPENIMAGEIO_LIBRARIES
|
|
${OPENIMAGEIO_LIBRARIES}
|
|
${PNG_LIBRARIES}
|
|
${JPEG_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
${BOOST_LIBRARIES}
|
|
)
|
|
set(OPENIMAGEIO_LIBPATH) # TODO, remove and reference the absolute path everywhere
|
|
set(OPENIMAGEIO_DEFINITIONS "")
|
|
|
|
if(WITH_IMAGE_TIFF)
|
|
list(APPEND OPENIMAGEIO_LIBRARIES "${TIFF_LIBRARY}")
|
|
endif()
|
|
if(WITH_IMAGE_OPENEXR)
|
|
list(APPEND OPENIMAGEIO_LIBRARIES "${OPENEXR_LIBRARIES}")
|
|
endif()
|
|
|
|
if(NOT OPENIMAGEIO_FOUND)
|
|
set(WITH_OPENIMAGEIO OFF)
|
|
message(STATUS "OpenImageIO not found, disabling WITH_CYCLES")
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_OPENCOLORIO)
|
|
find_package_wrapper(OpenColorIO)
|
|
|
|
set(OPENCOLORIO_LIBRARIES ${OPENCOLORIO_LIBRARIES})
|
|
set(OPENCOLORIO_LIBPATH) # TODO, remove and reference the absolute path everywhere
|
|
set(OPENCOLORIO_DEFINITIONS)
|
|
|
|
if(NOT OPENCOLORIO_FOUND)
|
|
set(WITH_OPENCOLORIO OFF)
|
|
message(STATUS "OpenColorIO not found")
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_CYCLES_EMBREE)
|
|
find_package(Embree 3.8.0 REQUIRED)
|
|
endif()
|
|
|
|
if(WITH_OPENIMAGEDENOISE)
|
|
find_package_wrapper(OpenImageDenoise)
|
|
|
|
if(NOT OPENIMAGEDENOISE_FOUND)
|
|
set(WITH_OPENIMAGEDENOISE OFF)
|
|
message(STATUS "OpenImageDenoise not found")
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_LLVM)
|
|
if(EXISTS ${LIBDIR})
|
|
set(LLVM_STATIC ON)
|
|
endif()
|
|
|
|
find_package_wrapper(LLVM)
|
|
|
|
# Symbol conflicts with same UTF library used by OpenCollada
|
|
if(EXISTS ${LIBDIR})
|
|
if(WITH_OPENCOLLADA AND (${LLVM_VERSION} VERSION_LESS "4.0.0"))
|
|
list(REMOVE_ITEM OPENCOLLADA_LIBRARIES ${OPENCOLLADA_UTF_LIBRARY})
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT LLVM_FOUND)
|
|
set(WITH_LLVM OFF)
|
|
message(STATUS "LLVM not found")
|
|
endif()
|
|
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()
|
|
|
|
if(WITH_TBB)
|
|
find_package_wrapper(TBB)
|
|
endif()
|
|
|
|
if(WITH_XR_OPENXR)
|
|
find_package(XR-OpenXR-SDK)
|
|
if(NOT XR_OPENXR_SDK_FOUND)
|
|
message(WARNING "OpenXR-SDK not found, disabling WITH_XR_OPENXR")
|
|
set(WITH_XR_OPENXR OFF)
|
|
endif()
|
|
endif()
|
|
|
|
if(EXISTS ${LIBDIR})
|
|
without_system_libs_end()
|
|
endif()
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# Build and Link Flags
|
|
|
|
# OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed
|
|
if(HAIKU)
|
|
list(APPEND PLATFORM_LINKLIBS -lnetwork)
|
|
else()
|
|
list(APPEND PLATFORM_LINKLIBS -lutil -lc -lm)
|
|
endif()
|
|
|
|
find_package(Threads REQUIRED)
|
|
list(APPEND PLATFORM_LINKLIBS ${CMAKE_THREAD_LIBS_INIT})
|
|
# used by other platforms
|
|
set(PTHREADS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
|
|
|
|
if(CMAKE_DL_LIBS)
|
|
list(APPEND PLATFORM_LINKLIBS ${CMAKE_DL_LIBS})
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
if(NOT WITH_PYTHON_MODULE)
|
|
# binreloc is linux only
|
|
set(BINRELOC_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/binreloc/include)
|
|
set(WITH_BINRELOC ON)
|
|
endif()
|
|
endif()
|
|
|
|
# lfs on glibc, all compilers should use
|
|
add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE)
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# System Libraries
|
|
#
|
|
# Keep last, so indirectly linked libraries don't override our own pre-compiled libs.
|
|
|
|
if(WITH_LZO AND WITH_SYSTEM_LZO)
|
|
find_package_wrapper(LZO)
|
|
if(NOT LZO_FOUND)
|
|
message(FATAL_ERROR "Failed finding system LZO version!")
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_SYSTEM_EIGEN3)
|
|
find_package_wrapper(Eigen3)
|
|
if(NOT EIGEN3_FOUND)
|
|
message(FATAL_ERROR "Failed finding system Eigen3 version!")
|
|
endif()
|
|
endif()
|
|
|
|
# Jack is intended to use the system library.
|
|
if(WITH_JACK)
|
|
find_package_wrapper(Jack)
|
|
if(NOT JACK_FOUND)
|
|
set(WITH_JACK OFF)
|
|
endif()
|
|
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_GHOST_WAYLAND)
|
|
find_package(PkgConfig)
|
|
pkg_check_modules(wayland-client REQUIRED wayland-client>=1.12)
|
|
pkg_check_modules(wayland-egl REQUIRED wayland-egl)
|
|
pkg_check_modules(wayland-scanner REQUIRED wayland-scanner)
|
|
pkg_check_modules(xkbcommon REQUIRED xkbcommon)
|
|
pkg_check_modules(wayland-cursor REQUIRED wayland-cursor)
|
|
|
|
set(WITH_GL_EGL ON)
|
|
|
|
if(WITH_GHOST_WAYLAND)
|
|
list(APPEND PLATFORM_LINKLIBS
|
|
${wayland-client_LIBRARIES}
|
|
${wayland-egl_LIBRARIES}
|
|
${xkbcommon_LIBRARIES}
|
|
${wayland-cursor_LIBRARIES}
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_GHOST_X11)
|
|
find_package(X11 REQUIRED)
|
|
|
|
find_path(X11_XF86keysym_INCLUDE_PATH X11/XF86keysym.h ${X11_INC_SEARCH_PATH})
|
|
mark_as_advanced(X11_XF86keysym_INCLUDE_PATH)
|
|
|
|
list(APPEND PLATFORM_LINKLIBS ${X11_X11_LIB})
|
|
|
|
if(WITH_X11_XINPUT)
|
|
if(X11_Xinput_LIB)
|
|
list(APPEND PLATFORM_LINKLIBS ${X11_Xinput_LIB})
|
|
else()
|
|
message(FATAL_ERROR "LibXi not found. Disable WITH_X11_XINPUT if you
|
|
want to build without tablet support")
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_X11_XF86VMODE)
|
|
# XXX, why doesn't cmake make this available?
|
|
find_library(X11_Xxf86vmode_LIB Xxf86vm ${X11_LIB_SEARCH_PATH})
|
|
mark_as_advanced(X11_Xxf86vmode_LIB)
|
|
if(X11_Xxf86vmode_LIB)
|
|
list(APPEND PLATFORM_LINKLIBS ${X11_Xxf86vmode_LIB})
|
|
else()
|
|
message(FATAL_ERROR "libXxf86vm not found. Disable WITH_X11_XF86VMODE if you
|
|
want to build without")
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_X11_XFIXES)
|
|
if(X11_Xfixes_LIB)
|
|
list(APPEND PLATFORM_LINKLIBS ${X11_Xfixes_LIB})
|
|
else()
|
|
message(FATAL_ERROR "libXfixes not found. Disable WITH_X11_XFIXES if you
|
|
want to build without")
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_X11_ALPHA)
|
|
find_library(X11_Xrender_LIB Xrender ${X11_LIB_SEARCH_PATH})
|
|
mark_as_advanced(X11_Xrender_LIB)
|
|
if(X11_Xrender_LIB)
|
|
list(APPEND PLATFORM_LINKLIBS ${X11_Xrender_LIB})
|
|
else()
|
|
message(FATAL_ERROR "libXrender not found. Disable WITH_X11_ALPHA if you
|
|
want to build without")
|
|
endif()
|
|
endif()
|
|
|
|
endif()
|
|
|
|
# ----------------------------------------------------------------------------
|
|
# Compilers
|
|
|
|
# GNU Compiler
|
|
if(CMAKE_COMPILER_IS_GNUCC)
|
|
set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
|
|
|
|
if(WITH_LINKER_GOLD)
|
|
execute_process(
|
|
COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version
|
|
ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
|
|
if("${LD_VERSION}" MATCHES "GNU gold")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=gold")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
|
|
else()
|
|
message(STATUS "GNU gold linker isn't available, using the default system linker.")
|
|
endif()
|
|
unset(LD_VERSION)
|
|
endif()
|
|
|
|
if(WITH_LINKER_LLD)
|
|
execute_process(
|
|
COMMAND ${CMAKE_C_COMPILER} -fuse-ld=lld -Wl,--version
|
|
ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
|
|
if("${LD_VERSION}" MATCHES "LLD")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fuse-ld=lld")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=lld")
|
|
else()
|
|
message(STATUS "LLD linker isn't available, using the default system linker.")
|
|
endif()
|
|
unset(LD_VERSION)
|
|
endif()
|
|
|
|
# CLang is the same as GCC for now.
|
|
elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|
set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
|
|
# Intel C++ Compiler
|
|
elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
|
# think these next two are broken
|
|
find_program(XIAR xiar)
|
|
if(XIAR)
|
|
set(CMAKE_AR "${XIAR}")
|
|
endif()
|
|
mark_as_advanced(XIAR)
|
|
|
|
find_program(XILD xild)
|
|
if(XILD)
|
|
set(CMAKE_LINKER "${XILD}")
|
|
endif()
|
|
mark_as_advanced(XILD)
|
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fp-model precise -prec_div -parallel")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fp-model precise -prec_div -parallel")
|
|
|
|
# set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -diag-enable sc3")
|
|
set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing")
|
|
set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-intel")
|
|
endif()
|
|
|
|
# Avoid conflicts with Mesa llvmpipe, Luxrender, and other plug-ins that may
|
|
# use the same libraries as Blender with a different version or build options.
|
|
set(PLATFORM_LINKFLAGS
|
|
"${PLATFORM_LINKFLAGS} -Wl,--version-script='${CMAKE_SOURCE_DIR}/source/creator/blender.map'"
|
|
)
|
|
|
|
# Don't use position independent executable for portable install since file
|
|
# browsers can't properly detect blender as an executable then. Still enabled
|
|
# for non-portable installs as typically used by Linux distributions.
|
|
if(WITH_INSTALL_PORTABLE)
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie")
|
|
endif()
|