Selaa lähdekoodia

Merge pull request #105 from stesie/fix-init-platform

Call V8::InitializePlatform as needed, fixes builds >= 3.29.36
Stefan Siegl 10 vuotta sitten
vanhempi
commit
3702e64611
3 muutettua tiedostoa jossa 34 lisäystä ja 1 poistoa
  1. 2 1
      README.md
  2. 23 0
      config.m4
  3. 9 0
      v8js.cc

+ 2 - 1
README.md

@@ -37,7 +37,8 @@ make dependencies
 make native library=shared -j8
 sudo mkdir -p /usr/lib /usr/include
 sudo cp out/native/lib.target/lib*.so /usr/lib/
-sudo cp include/v8* /usr/include
+sudo cp out/native/obj.target/tools/gyp/libv8_libplatform.a /usr/lib
+sudo cp -R include/v8* /usr/include
 
 ```
 

+ 23 - 0
config.m4

@@ -89,6 +89,29 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <v8-debug.h>]],
   LDFLAGS=$old_LDFLAGS
   CPPFLAGS=$old_CPPFLAGS
 
+  if test "$V8_API_VERSION" -ge 3029036 ; then
+    dnl building for v8 3.29.36 or later, which requires us to
+    dnl initialize and provide a platform; hence we need to
+    dnl link in libplatform to make our life easier.
+    PHP_ADD_INCLUDE($V8_DIR)
+
+    SEARCH_FOR="lib/libv8_libplatform.a"
+    AC_MSG_CHECKING([for libv8_libplatform.a])
+
+    for i in $PHP_V8JS $SEARCH_PATH ; do
+      if test -r $i/$SEARCH_FOR; then
+        LIBPLATFORM_DIR=$i
+        AC_MSG_RESULT(found in $i)
+      fi
+    done
+
+    if test -z "$LIBPLATFORM_DIR"; then
+      AC_MSG_RESULT([not found])
+      AC_MSG_ERROR([Please provide libv8_libplatform.a next to the libv8.so, see README.md for details])
+    fi
+
+    LDFLAGS="$LDFLAGS $LIBPLATFORM_DIR/$SEARCH_FOR"
+  fi
 
   AC_CACHE_CHECK(for C standard version, ac_cv_v8_cstd, [
     ac_cv_v8_cstd="c++11"

+ 9 - 0
v8js.cc

@@ -21,6 +21,10 @@
 
 #include <v8-debug.h>
 
+#if PHP_V8_API_VERSION >= 3029036
+#include <libplatform/libplatform.h>
+#endif
+
 #include "php_v8js_macros.h"
 
 extern "C" {
@@ -857,6 +861,11 @@ static void php_v8js_init(TSRMLS_D) /* {{{ */
 		return;
 	}
 
+#if PHP_V8_API_VERSION >= 3029036
+	v8::Platform* platform = v8::platform::CreateDefaultPlatform();
+	v8::V8::InitializePlatform(platform);
+#endif
+
 	/* Set V8 command line flags (must be done before V8::Initialize()!) */
 	if (V8JSG(v8_flags)) {
 		v8::V8::SetFlagsFromString(V8JSG(v8_flags), strlen(V8JSG(v8_flags)));