[llvm-commits] [llvm] r123976 - in /llvm/trunk: CMakeLists.txt cmake/config-ix.cmake docs/CMake.html include/llvm/Config/config.h.cmake lib/ExecutionEngine/Interpreter/CMakeLists.txt
Oscar Fuentes
ofv at wanadoo.es
Fri Jan 21 07:42:55 PST 2011
Author: ofv
Date: Fri Jan 21 09:42:54 2011
New Revision: 123976
URL: http://llvm.org/viewvc/llvm-project?rev=123976&view=rev
Log:
Handles libffi on the CMake build.
Patch by arrowdodger!
Modified:
llvm/trunk/CMakeLists.txt
llvm/trunk/cmake/config-ix.cmake
llvm/trunk/docs/CMake.html
llvm/trunk/include/llvm/Config/config.h.cmake
llvm/trunk/lib/ExecutionEngine/Interpreter/CMakeLists.txt
Modified: llvm/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/CMakeLists.txt?rev=123976&r1=123975&r2=123976&view=diff
==============================================================================
--- llvm/trunk/CMakeLists.txt (original)
+++ llvm/trunk/CMakeLists.txt Fri Jan 21 09:42:54 2011
@@ -114,6 +114,10 @@
set(ENABLE_TIMESTAMPS 1)
endif()
+option(LLVM_ENABLE_FFI "Use libffi to call external functions from the interpreter" OFF)
+set(FFI_LIBRARY_DIR "" CACHE PATH "Additional directory, where CMake should search for libffi.so")
+set(FFI_INCLUDE_DIR "" CACHE PATH "Additional directory, where CMake should search for ffi.h or ffi/ffi.h")
+
set(C_INCLUDE_DIRS "" CACHE STRING
"Colon separated list of directories clang will search for headers.")
Modified: llvm/trunk/cmake/config-ix.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/config-ix.cmake?rev=123976&r1=123975&r2=123976&view=diff
==============================================================================
--- llvm/trunk/cmake/config-ix.cmake (original)
+++ llvm/trunk/cmake/config-ix.cmake Fri Jan 21 09:42:54 2011
@@ -190,6 +190,35 @@
llvm_find_program(dot)
llvm_find_program(dotty)
+if( LLVM_ENABLE_FFI )
+ find_path(FFI_INCLUDE_PATH ffi.h PATHS ${FFI_INCLUDE_DIR})
+ if( FFI_INCLUDE_PATH )
+ set(FFI_HEADER ffi.h CACHE INTERNAL "")
+ set(HAVE_FFI_H 1 CACHE INTERNAL "")
+ else()
+ find_path(FFI_INCLUDE_PATH ffi/ffi.h PATHS ${FFI_INCLUDE_DIR})
+ if( FFI_INCLUDE_PATH )
+ set(FFI_HEADER ffi/ffi.h CACHE INTERNAL "")
+ set(HAVE_FFI_FFI_H 1 CACHE INTERNAL "")
+ endif()
+ endif()
+
+ if( NOT FFI_HEADER )
+ message(FATAL_ERROR "libffi includes are not found.")
+ endif()
+
+ find_library(FFI_LIBRARY_PATH ffi PATHS ${FFI_LIBRARY_DIR})
+ if( NOT FFI_LIBRARY_PATH )
+ message(FATAL_ERROR "libffi is not found.")
+ endif()
+
+ list(APPEND CMAKE_REQUIRED_LIBRARIES ${FFI_LIBRARY_PATH})
+ list(APPEND CMAKE_REQUIRED_INCLUDES ${FFI_INCLUDE_PATH})
+ check_symbol_exists(ffi_call ${FFI_HEADER} HAVE_FFI_CALL)
+ list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES ${FFI_INCLUDE_PATH})
+ list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES ${FFI_LIBRARY_PATH})
+endif( LLVM_ENABLE_FFI )
+
# Define LLVM_MULTITHREADED if gcc atomic builtins exists.
include(CheckAtomic)
Modified: llvm/trunk/docs/CMake.html
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CMake.html?rev=123976&r1=123975&r2=123976&view=diff
==============================================================================
--- llvm/trunk/docs/CMake.html (original)
+++ llvm/trunk/docs/CMake.html Fri Jan 21 09:42:54 2011
@@ -338,6 +338,12 @@
By default, <tt>"-sv --no-progress-bar"</tt>
on Visual C++ and Xcode,
<tt>"-sv"</tt> on others.</dd>
+
+ <dt><b>LLVM_ENABLE_FFI</b>:BOOL</dt>
+ <dd>Indicates whether LLVM Interpreter will be linked with Foreign
+ Function Interface library. If the library or its headers are
+ installed on a custom location, you can set the variables
+ FFI_INCLUDE_DIR and FFI_LIBRARY_DIR. Defaults to OFF.</dd>
</dl>
</div>
Modified: llvm/trunk/include/llvm/Config/config.h.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Config/config.h.cmake?rev=123976&r1=123975&r2=123976&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Config/config.h.cmake (original)
+++ llvm/trunk/include/llvm/Config/config.h.cmake Fri Jan 21 09:42:54 2011
@@ -130,13 +130,13 @@
#cmakedefine HAVE_FENV_H ${HAVE_FENV_H}
/* Define if libffi is available on this platform. */
-#undef HAVE_FFI_CALL
+#cmakedefine HAVE_FFI_CALL ${HAVE_FFI_CALL}
/* Define to 1 if you have the <ffi/ffi.h> header file. */
-#undef HAVE_FFI_FFI_H
+#cmakedefine HAVE_FFI_FFI_H ${HAVE_FFI_FFI_H}
/* Define to 1 if you have the <ffi.h> header file. */
-#undef HAVE_FFI_H
+#cmakedefine HAVE_FFI_H ${HAVE_FFI_H}
/* Set to 1 if the finite function is found in <ieeefp.h> */
#cmakedefine HAVE_FINITE_IN_IEEEFP_H ${HAVE_FINITE_IN_IEEEFP_H}
Modified: llvm/trunk/lib/ExecutionEngine/Interpreter/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Interpreter/CMakeLists.txt?rev=123976&r1=123975&r2=123976&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/Interpreter/CMakeLists.txt (original)
+++ llvm/trunk/lib/ExecutionEngine/Interpreter/CMakeLists.txt Fri Jan 21 09:42:54 2011
@@ -1,5 +1,21 @@
+# If the user required a custom path for ffi headers, use it on its
+# abolute form (see config-ix.cmake):
+if( FFI_INCLUDE_DIR )
+ include_directories( ${FFI_INCLUDE_PATH} )
+endif()
+
+# If the user required a custom path for libffi, use it on its abolute
+# form (see config-ix.cmake):
+if( FFI_LIBRARY_DIR )
+ link_directories( ${FFI_LIBRARY_PATH} )
+endif()
+
add_llvm_library(LLVMInterpreter
Execution.cpp
ExternalFunctions.cpp
Interpreter.cpp
)
+
+if( LLVM_ENABLE_FFI )
+ target_link_libraries( LLVMInterpreter ffi )
+endif()
More information about the llvm-commits
mailing list