[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51109] trunk/blender: Better support for LLVM linking, needed for static OSL library.

Lukas Toenne lukas.toenne at googlemail.com
Sat Oct 6 13:00:46 CEST 2012


Revision: 51109
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51109
Author:   lukastoenne
Date:     2012-10-06 11:00:45 +0000 (Sat, 06 Oct 2012)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/CMakeLists.txt
    trunk/blender/build_files/cmake/macros.cmake

Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt	2012-10-06 07:03:03 UTC (rev 51108)
+++ trunk/blender/CMakeLists.txt	2012-10-06 11:00:45 UTC (rev 51109)
@@ -254,6 +254,9 @@
 mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
 unset(PLATFORM_DEFAULT)
 
+# LLVM
+option(WITH_LLVM					"Use LLVM" OFF)
+
 # disable for now, but plan to support on all platforms eventually
 option(WITH_MEM_JEMALLOC   "Enable malloc replacement (http://www.canonware.com/jemalloc)" OFF)
 mark_as_advanced(WITH_MEM_JEMALLOC)
@@ -371,6 +374,11 @@
 	set(WITH_BOOST ON)
 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
 if(WITH_INSTALL_PORTABLE)
 	set(CMAKE_SKIP_BUILD_RPATH TRUE)
@@ -704,6 +712,56 @@
 		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)
 		set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
 	
@@ -1559,6 +1617,56 @@
 		set(OPENCOLORIO_DEFINITIONS "-DOCIO_STATIC_BUILD")
 	endif()
 
+	if(WITH_LLVM)
+		set(LLVM_DIRECTORY ${LIBDIR}/llvm CACHE PATH	"Path to the LLVM installation")
+		set(LLVM_VERSION "3.1" 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)
 		set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
 	
@@ -1582,66 +1690,6 @@
 		endif()
 	
 		include_directories(${OSL_INCLUDES})
-		
-
-		# LLVM library setup, needed for osl 
-		
-		set(LLVM_DIRECTORY "${LIBDIR}/llvm")
-		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.
-			set (LLVM_LIBRARY "")
-			execute_process (COMMAND ${LLVM_CONFIG} --libs
-						 OUTPUT_VARIABLE llvm_library_list
-					 OUTPUT_STRIP_TRAILING_WHITESPACE)
-			string (REPLACE "-l" "" llvm_library_list ${llvm_library_list})
-			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 ()
-		  string (REPLACE ";" " " LLVM_LIBRARY "${LLVM_LIBRARY}")
-		  message (STATUS "LLVM library  = ${LLVM_LIBRARY}")
-		else ()
-		  message (FATAL_ERROR "LLVM not found.")
-		endif ()
-		set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} ${LLVM_LIBRARY}")
-		
-		# end LLVM library setup
-
 	endif()
 
 	set(EXETYPE MACOSX_BUNDLE)
@@ -1677,6 +1725,12 @@
 	if(NOT WITH_BOOST)
 		message(FATAL_ERROR "Cycles reqires WITH_BOOST, the library may not have been found. Configure BOOST or disable WITH_CYCLES")
 	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()
 
 

Modified: trunk/blender/build_files/cmake/macros.cmake
===================================================================
--- trunk/blender/build_files/cmake/macros.cmake	2012-10-06 07:03:03 UTC (rev 51108)
+++ trunk/blender/build_files/cmake/macros.cmake	2012-10-06 11:00:45 UTC (rev 51109)
@@ -244,6 +244,9 @@
 		link_directories(${PCRE_LIBPATH})
 		link_directories(${EXPAT_LIBPATH})
 	endif()
+	if(WITH_LLVM)
+		link_directories(${LLVM_LIB_DIR})
+	endif()
 	if(WITH_MEM_JEMALLOC)
 		link_directories(${JEMALLOC_LIBPATH})
 	endif()
@@ -382,6 +385,9 @@
 	if(WITH_CYCLES_OSL)
 		target_link_libraries(${target} ${OSL_LIBRARIES})
 	endif()
+	if(WITH_LLVM)
+		target_link_libraries(${target} ${LLVM_LIBRARY})
+	endif()
 	if(WIN32 AND NOT UNIX)
 		target_link_libraries(${target} ${PTHREADS_LIBRARIES})
 	endif()




More information about the Bf-blender-cvs mailing list