Hi, I'm working on embedding v8 to Unreal Engine(UE4) application. As of 
now UE4 is still uses libstdc++ for Android, I had to build v8 with 
libstdc++ to match stdlib. I was able to build with minimal modification 
(as possible) of build script, but I experienced some runtime assurance 
failure.

At first, I'm working with 7.4.288 version of v8 and my modification to 
build with libstdc++ is as follows:

diff --git a/config/BUILDCONFIG.gn b/config/BUILDCONFIG.gn
index 9e843f3..6e718e1 100644
--- a/config/BUILDCONFIG.gn
+++ b/config/BUILDCONFIG.gn
@@ -438,7 +438,6 @@ default_compiler_configs = [
   "//build/config/compiler:no_exceptions",
   "//build/config/compiler:no_rtti",
   "//build/config/compiler:runtime_library",
-  "//build/config/compiler:thin_archive",
   "//build/config/coverage:default_coverage",
   "//build/config/sanitizers:default_sanitizer_flags",
 ]
diff --git a/config/android/BUILD.gn b/config/android/BUILD.gn
index b69d42b..c2c0897 100644
--- a/config/android/BUILD.gn
+++ b/config/android/BUILD.gn
@@ -27,6 +27,9 @@ config("compiler") {
     # Forces full rebuilds on NDK rolls. To rebuild everything when NDK 
version
     # stays the same, increment the suffix number.
     "ANDROID_NDK_VERSION_ROLL=${android_ndk_version}_1",
+    "_GLIBCXX_USE_C99=1",
+    "_GLIBCXX_HAVE_WCSTOF=1",
+    "_GLIBCXX_USE_C99_MATH_TR1=1",
   ]

   if (current_cpu == "mips64el") {
@@ -109,6 +112,26 @@ config("runtime_library") {
                
 rebase_path("$android_ndk_root/sources/android/support/include",
                             root_build_dir) ]

+  if (current_cpu == "arm") {
+    cflags_cc += [
+      "-isystem" +
+          
rebase_path("$android_ndk_root/sources/cxx-stl/gnu-libstdc++/4.9/include",
+                      root_build_dir),
+      "-isystem" +
+          
rebase_path("$android_ndk_root/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include",
+                      root_build_dir),
+    ]
+  } else if (current_cpu == "arm64") {
+    cflags_cc += [
+      "-isystem" +
+          
rebase_path("$android_ndk_root/sources/cxx-stl/gnu-libstdc++/4.9/include",
+                      root_build_dir),
+      "-isystem" +
+          
rebase_path("$android_ndk_root/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a/include",
+                      root_build_dir),
+    ]
+  }
+
   defines = [
     "__GNU_SOURCE=1",  # Necessary for clone().
     "CHROMIUM_CXX_TWEAK_INLINES",  # Saves binary size.
diff --git a/config/compiler/BUILD.gn b/config/compiler/BUILD.gn
index 402dac4..ee3015a 100644
--- a/config/compiler/BUILD.gn
+++ b/config/compiler/BUILD.gn
@@ -1456,7 +1456,7 @@ config("default_warnings") {

       # Don't warn about "maybe" uninitialized. Clang doesn't include this
       # in -Wall but gcc does, and it gives false positives.
-      cflags += [ "-Wno-maybe-uninitialized" ]
+      cflags += [ "-Wno-uninitialized" ]
       cflags += [ "-Wno-deprecated-declarations" ]

       # -Wcomment gives too many false positives in the case a


I built it with these settings:
# Build arguments go here.
# See "gn args <out_dir> --list" for available build arguments.
is_debug = true
android_full_debug = is_debug
is_component_build = false
target_os = "android"
target_cpu = "arm64"
use_custom_libcxx = false
use_custom_libcxx_for_host = true
use_allocator_shim = false
v8_enable_i18n_support = false
v8_use_external_startup_data = false
v8_use_snapshot = false
v8_static_library = true



And I encountered two types of failures. The first one occurs when creating 
Isolate(Isolate::New).
07-15 16:02:35.393  7153  7269 E v8      : #
07-15 16:02:35.393  7153  7269 E v8      : # Fatal error in 
../../src/handles.cc, line 86
07-15 16:02:35.393  7153  7269 E v8      : #
07-15 16:02:35.393  7153  7269 E v8      : Debug check failed: limit - 
current->next < kHandleBlockSize (1022 vs. 1022).
07-15 16:02:35.393  7153  7269 E v8      :
07-15 16:02:35.393  7153  7269 E v8      : #
07-15 16:02:35.393  7153  7269 E v8      : #
07-15 16:02:35.393  7153  7269 E v8      : #
07-15 16:02:35.393  7153  7269 E v8      : #FailureMessage Object: 
0x74f95e01a0


and the second one is when setting field to prototype 
template(Template->PrototypeTemplate()->Set()).

07-15 13:42:24.488 23217 23318 E v8      : #
07-15 13:42:24.488 23217 23318 E v8      : # Fatal error in 
../../src/api.cc, line 1350
07-15 13:42:24.488 23217 23318 E v8      : #
07-15 13:42:24.488 23217 23318 E v8      : Check failed: 
!value_obj->IsJSReceiver() || value_obj->IsTemplateInfo().
07-15 13:42:24.488 23217 23318 E v8      :
07-15 13:42:24.488 23217 23318 E v8      : #
07-15 13:42:24.488 23217 23318 E v8      : #
07-15 13:42:24.488 23217 23318 E v8      : #
07-15 13:42:24.488 23217 23318 E v8      : #FailureMessage Object: 
0x74f95f90e0


I know it's very limited information and the range of the question is broad 
to you. But I'd like to know where to start. I can provide more information 
if you need.

Thank you in advance!

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-users/309f6794-a10f-406a-9b17-c32c9f802e24%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to