Link against libffi if available, fall back to "no external calls from
interpreter mode" when it's not.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68937 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
index 36de083..160f1ba 100644
--- a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
+++ b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
@@ -33,13 +33,13 @@
 #include <cmath>
 #include <cstring>
 
-#ifdef HAVE_FFI
+#ifdef HAVE_FFI_CALL
 #ifdef HAVE_FFI_H
 #include <ffi.h>
+#define USE_LIBFFI
 #elif HAVE_FFI_FFI_H
 #include <ffi/ffi.h>
-#else
-#error "Not sure where configure found ffi.h!"
+#define USE_LIBFFI
 #endif
 #endif
 
@@ -50,7 +50,7 @@
 static ManagedStatic<std::map<const Function *, ExFunc> > ExportedFunctions;
 static std::map<std::string, ExFunc> FuncNames;
 
-#ifdef HAVE_FFI
+#ifdef USE_LIBFFI
 typedef void (*RawFunc)(void);
 static ManagedStatic<std::map<const Function *, RawFunc> > RawFunctions;
 #endif
@@ -105,7 +105,7 @@
   return FnPtr;
 }
 
-#ifdef HAVE_FFI
+#ifdef USE_LIBFFI
 static ffi_type *ffiTypeFor(const Type *Ty) {
   switch (Ty->getTypeID()) {
     case Type::VoidTyID: return &ffi_type_void;
@@ -240,7 +240,7 @@
 
   return false;
 }
-#endif // HAVE_FFI
+#endif // USE_LIBFFI
 
 GenericValue Interpreter::callExternalFunction(Function *F,
                                      const std::vector<GenericValue> &ArgVals) {
@@ -253,7 +253,7 @@
                                                    : FI->second)
     return Fn(F->getFunctionType(), ArgVals);
 
-#ifdef HAVE_FFI
+#ifdef USE_LIBFFI
   std::map<const Function *, RawFunc>::iterator RF = RawFunctions->find(F);
   RawFunc RawFn;
   if (RF == RawFunctions->end()) {
@@ -268,7 +268,7 @@
   GenericValue Result;
   if (RawFn != 0 && ffiInvoke(RawFn, F, ArgVals, getTargetData(), Result))
     return Result;
-#endif // HAVE_FFI
+#endif // USE_LIBFFI
 
   cerr << "Tried to execute an unknown external function: "
        << F->getType()->getDescription() << " " << F->getName() << "\n";