forked from bartvdbraak/blender
Better support for LLVM linking, needed for static OSL library.
This adds cmake code for LLVM on linux and updates the cmake code used for OSX. LLVM is linked like other external libraries now, by using the setup_liblinks and setup_libdirs macros instead of the PLATFORM_LINKFLAGS variable. The use of llvm-config for getting a list of libraries can also be simplified quite a bit. Caching the LLVM_DIRECTORY and LLVM_VERSION strings could be nicer though.
This commit is contained in:
parent
c001bd81a7
commit
a2d8cf333f
132
CMakeLists.txt
132
CMakeLists.txt
@ -254,6 +254,9 @@ set(CYCLES_CUDA_BINARIES_ARCH sm_13 sm_20 sm_21 sm_30 CACHE STRING "CUDA archite
|
|||||||
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
|
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
|
||||||
unset(PLATFORM_DEFAULT)
|
unset(PLATFORM_DEFAULT)
|
||||||
|
|
||||||
|
# LLVM
|
||||||
|
option(WITH_LLVM "Use LLVM" OFF)
|
||||||
|
|
||||||
# disable for now, but plan to support on all platforms eventually
|
# disable for now, but plan to support on all platforms eventually
|
||||||
option(WITH_MEM_JEMALLOC "Enable malloc replacement (http://www.canonware.com/jemalloc)" OFF)
|
option(WITH_MEM_JEMALLOC "Enable malloc replacement (http://www.canonware.com/jemalloc)" OFF)
|
||||||
mark_as_advanced(WITH_MEM_JEMALLOC)
|
mark_as_advanced(WITH_MEM_JEMALLOC)
|
||||||
@ -371,6 +374,11 @@ if(WITH_CYCLES OR WITH_MOD_BOOLEAN)
|
|||||||
set(WITH_BOOST ON)
|
set(WITH_BOOST ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# auto enable llvm for cycles_osl
|
||||||
|
if(WITH_CYCLES_OSL)
|
||||||
|
set(WITH_LLVM ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
# don't store paths to libs for portable distribution
|
# don't store paths to libs for portable distribution
|
||||||
if(WITH_INSTALL_PORTABLE)
|
if(WITH_INSTALL_PORTABLE)
|
||||||
set(CMAKE_SKIP_BUILD_RPATH TRUE)
|
set(CMAKE_SKIP_BUILD_RPATH TRUE)
|
||||||
@ -704,6 +712,56 @@ if(UNIX AND NOT APPLE)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WITH_LLVM)
|
||||||
|
set(LLVM_DIRECTORY ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
|
||||||
|
set(LLVM_VERSION "3.0" CACHE STRING "Version of LLVM to use" "")
|
||||||
|
set(LLVM_STATIC YES)
|
||||||
|
if(LLVM_DIRECTORY)
|
||||||
|
set(LLVM_CONFIG "${LLVM_DIRECTORY}/bin/llvm-config")
|
||||||
|
else()
|
||||||
|
set(LLVM_CONFIG llvm-config)
|
||||||
|
endif()
|
||||||
|
execute_process(COMMAND ${LLVM_CONFIG} --version
|
||||||
|
OUTPUT_VARIABLE LLVM_VERSION
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process(COMMAND ${LLVM_CONFIG} --prefix
|
||||||
|
OUTPUT_VARIABLE LLVM_DIRECTORY
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process(COMMAND ${LLVM_CONFIG} --libdir
|
||||||
|
OUTPUT_VARIABLE LLVM_LIB_DIR
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
execute_process(COMMAND ${LLVM_CONFIG} --includedir
|
||||||
|
OUTPUT_VARIABLE LLVM_INCLUDES
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
find_library(LLVM_LIBRARY
|
||||||
|
NAMES libLLVMAnalysis.a # first of a whole bunch of libs to get
|
||||||
|
PATHS ${LLVM_LIB_DIR})
|
||||||
|
message(STATUS "LLVM version = ${LLVM_VERSION}")
|
||||||
|
message(STATUS "LLVM dir = ${LLVM_DIRECTORY}")
|
||||||
|
message(STATUS "LLVM includes = ${LLVM_INCLUDES}")
|
||||||
|
message(STATUS "LLVM lib dir = ${LLVM_LIB_DIR}")
|
||||||
|
|
||||||
|
if(LLVM_LIBRARY AND LLVM_INCLUDES AND LLVM_DIRECTORY AND LLVM_LIB_DIR)
|
||||||
|
# ensure include directory is added (in case of non-standard locations
|
||||||
|
include_directories(BEFORE "${LLVM_INCLUDES}")
|
||||||
|
string(REGEX REPLACE "\\." "" OSL_LLVM_VERSION ${LLVM_VERSION})
|
||||||
|
message(STATUS "LLVM OSL_LLVM_VERSION = ${OSL_LLVM_VERSION}")
|
||||||
|
add_definitions("-DOSL_LLVM_VERSION=${OSL_LLVM_VERSION}")
|
||||||
|
if(LLVM_STATIC)
|
||||||
|
# if static LLVM libraries were requested, use llvm-config to generate
|
||||||
|
# the list of what libraries we need, and substitute that in the right
|
||||||
|
# way for LLVM_LIBRARY.
|
||||||
|
execute_process(COMMAND ${LLVM_CONFIG} --libfiles
|
||||||
|
OUTPUT_VARIABLE LLVM_LIBRARY
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
|
||||||
|
endif()
|
||||||
|
message(STATUS "LLVM library = ${LLVM_LIBRARY}")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "LLVM not found.")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_OSL)
|
if(WITH_CYCLES_OSL)
|
||||||
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
||||||
|
|
||||||
@ -1559,34 +1617,9 @@ elseif(APPLE)
|
|||||||
set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
|
set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_OSL)
|
if(WITH_LLVM)
|
||||||
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
set(LLVM_DIRECTORY ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation")
|
||||||
|
set(LLVM_VERSION "3.1" CACHE STRING "Version of LLVM to use" "")
|
||||||
message(STATUS "CYCLES_OSL = ${CYCLES_OSL}")
|
|
||||||
|
|
||||||
find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
|
|
||||||
find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
|
|
||||||
find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
|
|
||||||
# WARNING! depends on correct order of OSL libs linking
|
|
||||||
list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -force_load ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
|
|
||||||
find_path(OSL_INCLUDES OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
|
|
||||||
find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
|
|
||||||
|
|
||||||
if(OSL_INCLUDES AND OSL_LIBRARIES AND OSL_COMPILER)
|
|
||||||
set(OSL_FOUND TRUE)
|
|
||||||
message(STATUS "OSL includes = ${OSL_INCLUDES}")
|
|
||||||
message(STATUS "OSL library = ${OSL_LIBRARIES}")
|
|
||||||
message(STATUS "OSL compiler = ${OSL_COMPILER}")
|
|
||||||
else()
|
|
||||||
message(STATUS "OSL not found")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include_directories(${OSL_INCLUDES})
|
|
||||||
|
|
||||||
|
|
||||||
# LLVM library setup, needed for osl
|
|
||||||
|
|
||||||
set(LLVM_DIRECTORY "${LIBDIR}/llvm")
|
|
||||||
set(LLVM_STATIC YES)
|
set(LLVM_STATIC YES)
|
||||||
if(LLVM_DIRECTORY)
|
if(LLVM_DIRECTORY)
|
||||||
set(LLVM_CONFIG "${LLVM_DIRECTORY}/bin/llvm-config")
|
set(LLVM_CONFIG "${LLVM_DIRECTORY}/bin/llvm-config")
|
||||||
@ -1623,25 +1656,40 @@ elseif(APPLE)
|
|||||||
# if static LLVM libraries were requested, use llvm-config to generate
|
# if static LLVM libraries were requested, use llvm-config to generate
|
||||||
# the list of what libraries we need, and substitute that in the right
|
# the list of what libraries we need, and substitute that in the right
|
||||||
# way for LLVM_LIBRARY.
|
# way for LLVM_LIBRARY.
|
||||||
set (LLVM_LIBRARY "")
|
execute_process(COMMAND ${LLVM_CONFIG} --libfiles
|
||||||
execute_process (COMMAND ${LLVM_CONFIG} --libs
|
OUTPUT_VARIABLE LLVM_LIBRARY
|
||||||
OUTPUT_VARIABLE llvm_library_list
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
string (REPLACE "-l" "" llvm_library_list ${llvm_library_list})
|
string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
|
||||||
string (REPLACE " " ";" llvm_library_list ${llvm_library_list})
|
|
||||||
foreach (f ${llvm_library_list})
|
|
||||||
list (APPEND LLVM_LIBRARY "${LLVM_LIB_DIR}/lib${f}.a")
|
|
||||||
endforeach ()
|
|
||||||
endif()
|
endif()
|
||||||
string (REPLACE ";" " " LLVM_LIBRARY "${LLVM_LIBRARY}")
|
|
||||||
message(STATUS "LLVM library = ${LLVM_LIBRARY}")
|
message(STATUS "LLVM library = ${LLVM_LIBRARY}")
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "LLVM not found.")
|
message(FATAL_ERROR "LLVM not found.")
|
||||||
endif()
|
endif()
|
||||||
set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} ${LLVM_LIBRARY}")
|
endif()
|
||||||
|
|
||||||
# end LLVM library setup
|
if(WITH_CYCLES_OSL)
|
||||||
|
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
||||||
|
|
||||||
|
message(STATUS "CYCLES_OSL = ${CYCLES_OSL}")
|
||||||
|
|
||||||
|
find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
|
||||||
|
find_library(OSL_LIB_COMP NAMES oslcomp PATHS ${CYCLES_OSL}/lib)
|
||||||
|
find_library(OSL_LIB_QUERY NAMES oslquery PATHS ${CYCLES_OSL}/lib)
|
||||||
|
# WARNING! depends on correct order of OSL libs linking
|
||||||
|
list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} -force_load ${OSL_LIB_EXEC} ${OSL_LIB_QUERY})
|
||||||
|
find_path(OSL_INCLUDES OSL/oslclosure.h PATHS ${CYCLES_OSL}/include)
|
||||||
|
find_program(OSL_COMPILER NAMES oslc PATHS ${CYCLES_OSL}/bin)
|
||||||
|
|
||||||
|
if(OSL_INCLUDES AND OSL_LIBRARIES AND OSL_COMPILER)
|
||||||
|
set(OSL_FOUND TRUE)
|
||||||
|
message(STATUS "OSL includes = ${OSL_INCLUDES}")
|
||||||
|
message(STATUS "OSL library = ${OSL_LIBRARIES}")
|
||||||
|
message(STATUS "OSL compiler = ${OSL_COMPILER}")
|
||||||
|
else()
|
||||||
|
message(STATUS "OSL not found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(${OSL_INCLUDES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(EXETYPE MACOSX_BUNDLE)
|
set(EXETYPE MACOSX_BUNDLE)
|
||||||
@ -1677,6 +1725,12 @@ if(WITH_CYCLES)
|
|||||||
if(NOT WITH_BOOST)
|
if(NOT WITH_BOOST)
|
||||||
message(FATAL_ERROR "Cycles reqires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_CYCLES")
|
message(FATAL_ERROR "Cycles reqires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_CYCLES")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WITH_CYCLES_OSL)
|
||||||
|
if(NOT WITH_LLVM)
|
||||||
|
message(FATAL_ERROR "Cycles OSL reqires WITH_LLVM, the library may not have been found. Configure LLVM or disable WITH_CYCLES_OSL")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
@ -244,6 +244,9 @@ macro(SETUP_LIBDIRS)
|
|||||||
link_directories(${PCRE_LIBPATH})
|
link_directories(${PCRE_LIBPATH})
|
||||||
link_directories(${EXPAT_LIBPATH})
|
link_directories(${EXPAT_LIBPATH})
|
||||||
endif()
|
endif()
|
||||||
|
if(WITH_LLVM)
|
||||||
|
link_directories(${LLVM_LIB_DIR})
|
||||||
|
endif()
|
||||||
if(WITH_MEM_JEMALLOC)
|
if(WITH_MEM_JEMALLOC)
|
||||||
link_directories(${JEMALLOC_LIBPATH})
|
link_directories(${JEMALLOC_LIBPATH})
|
||||||
endif()
|
endif()
|
||||||
@ -382,6 +385,9 @@ macro(setup_liblinks
|
|||||||
if(WITH_CYCLES_OSL)
|
if(WITH_CYCLES_OSL)
|
||||||
target_link_libraries(${target} ${OSL_LIBRARIES})
|
target_link_libraries(${target} ${OSL_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
if(WITH_LLVM)
|
||||||
|
target_link_libraries(${target} ${LLVM_LIBRARY})
|
||||||
|
endif()
|
||||||
if(WIN32 AND NOT UNIX)
|
if(WIN32 AND NOT UNIX)
|
||||||
target_link_libraries(${target} ${PTHREADS_LIBRARIES})
|
target_link_libraries(${target} ${PTHREADS_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
Loading…
Reference in New Issue
Block a user