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.