@@ -16,13 +16,7 @@ endif (CCACHE_FOUND AND (USE_CCACHE))
1616# "-DANDROID_STL=c++_static" is just not enough for clang++ to find some libraries in the ndk
1717MESSAGE (STATUS "## ANDROID_NDK_ROOT: " ${ANDROID_NDK_ROOT} )
1818
19- if (ANDROID_ABI MATCHES "arm64" )
20- set (ARCH_INCLUDE_DIR "aarch64-linux-android" )
21- else ()
22- set (ARCH_INCLUDE_DIR "arm-linux-androideabi" )
23- endif ()
24-
25- set (COMMON_CMAKE_ARGUMENTS "-std=c++11 -stdlib=libc++ -Werror -Wno-unused-result -mstackrealign -fexceptions -fno-builtin-stpcpy -fno-rtti" )
19+ set (COMMON_CMAKE_ARGUMENTS "-std=c++11 -Werror -Wno-unused-result -mstackrealign -fexceptions -fno-builtin-stpcpy -fno-rtti -D_LIBCPP_ABI_VERSION=Cr -D_LIBCPP_ENABLE_NODISCARD -D_LIBCPP_ABI_UNSTABLE" )
2620
2721# AOSP has switched to using LLD by default and the NDK will use it by default in the next release.
2822# BFD and Gold will be removed once LLD has been through a release cycle with no major unresolved issues (estimated r21)
@@ -42,14 +36,14 @@ set(COMMON_CMAKE_ARGUMENTS "-std=c++11 -stdlib=libc++ -Werror -Wno-unused-result
4236
4337# Command info: https://cmake.org/cmake/help/v3.4/command/include_directories.html
4438include_directories (
45- src/main/cpp
46- src/main/cpp/include
47- src/main/cpp/v8_inspector
48-
49- # hack to find some libraries from the ndk
50- ${ANDROID_NDK_ROOT} /sysroot/usr/include/${ARCH_INCLUDE_DIR}/
51-
52- src/main/libs/${ANDROID_ABI}/include
39+ # V8 uses a custom STL compiled with the LIBCPP_ABI_UNSTABLE flag. To maintain the ABI
40+ # compatibility we use this same STL headers for building the runtime
41+ src/main/cpp/include/libc++
42+ src/main/cpp
43+ src/main/cpp/include
44+ src/main/cpp/v8_inspector
45+ # This folder contains V8's built-in natives and snapshot blobs
46+ src/main/libs/${ANDROID_ABI}/include
5347)
5448
5549if (OPTIMIZED_BUILD OR OPTIMIZED_WITH_INSPECTOR_BUILD)
@@ -63,61 +57,61 @@ if (NOT OPTIMIZED_BUILD OR OPTIMIZED_WITH_INSPECTOR_BUILD)
6357 add_definitions (-DAPPLICATION_IN_DEBUG )
6458
6559 set (
66- INSPECTOR_SOURCES
67-
68- src/main/cpp/com_tns_AndroidJsV8Inspector.cpp
69- src/main/cpp/JsV8InspectorClient.cpp
70- src/main/cpp/DOMDomainCallbackHandlers.cpp
71- src/main/cpp/NetworkDomainCallbackHandlers.cpp
72-
73- src/main/cpp/v8_inspector/src/inspector/protocol/CSS.cpp
74- src/main/cpp/v8_inspector/src/inspector/protocol/Console.cpp
75- src/main/cpp/v8_inspector/src/inspector/protocol/DOM.cpp
76- src/main/cpp/v8_inspector/src/inspector/protocol/Debugger.cpp
77- src/main/cpp/v8_inspector/src/inspector/protocol/HeapProfiler.cpp
78- src/main/cpp/v8_inspector/src/inspector/protocol/Log.cpp
79- src/main/cpp/v8_inspector/src/inspector/protocol/Network.cpp
80- src/main/cpp/v8_inspector/src/inspector/protocol/Overlay.cpp
81- src/main/cpp/v8_inspector/src/inspector/protocol/Page.cpp
82- src/main/cpp/v8_inspector/src/inspector/protocol/Profiler.cpp
83- src/main/cpp/v8_inspector/src/inspector/protocol/Protocol.cpp
84- src/main/cpp/v8_inspector/src/inspector/protocol/Runtime.cpp
85- src/main/cpp/v8_inspector/src/inspector/protocol/Schema.cpp
86- src/main/cpp/v8_inspector/src/inspector/utils/base64.cpp
87- src/main/cpp/v8_inspector/src/inspector/utils/v8-inspector-common.cpp
88- src/main/cpp/v8_inspector/src/inspector/utils/v8-network-request-data.cpp
89- src/main/cpp/v8_inspector/src/inspector/utils/v8-page-resources.cpp
90- src/main/cpp/v8_inspector/src/inspector/v8-css-agent-impl.cpp
91- src/main/cpp/v8_inspector/src/inspector/v8-dom-agent-impl.cpp
92- src/main/cpp/v8_inspector/src/inspector/v8-log-agent-impl.cpp
93- src/main/cpp/v8_inspector/src/inspector/v8-network-agent-impl.cpp
94- src/main/cpp/v8_inspector/src/inspector/v8-overlay-agent-impl.cpp
95- src/main/cpp/v8_inspector/src/inspector/v8-page-agent-impl.cpp
96-
97- src/main/cpp/v8_inspector/src/inspector/custom-preview.cc
98- src/main/cpp/v8_inspector/src/inspector/injected-script.cc
99- src/main/cpp/v8_inspector/src/inspector/inspected-context.cc
100- src/main/cpp/v8_inspector/src/inspector/remote-object-id.cc
101- src/main/cpp/v8_inspector/src/inspector/search-util.cc
102- src/main/cpp/v8_inspector/src/inspector/string -16.cc
103- src/main/cpp/v8_inspector/src/inspector/string -util.cc
104- src/main/cpp/v8_inspector/src/inspector/v8-console.cc
105- src/main/cpp/v8_inspector/src/inspector/v8-console-agent-impl.cc
106- src/main/cpp/v8_inspector/src/inspector/v8-console-message.cc
107- src/main/cpp/v8_inspector/src/inspector/v8-debugger.cc
108- src/main/cpp/v8_inspector/src/inspector/v8-debugger-agent-impl.cc
109- src/main/cpp/v8_inspector/src/inspector/v8-debugger-script.cc
110- src/main/cpp/v8_inspector/src/inspector/v8-heap-profiler-agent-impl.cc
111- src/main/cpp/v8_inspector/src/inspector/v8-inspector-impl.cc
112- src/main/cpp/v8_inspector/src/inspector/v8-inspector-session-impl.cc
113- src/main/cpp/v8_inspector/src/inspector/v8-profiler-agent-impl.cc
114- src/main/cpp/v8_inspector/src/inspector/v8-regex.cc
115- src/main/cpp/v8_inspector/src/inspector/v8-runtime-agent-impl.cc
116- src/main/cpp/v8_inspector/src/inspector/v8-schema-agent-impl.cc
117- src/main/cpp/v8_inspector/src/inspector/v8-stack-trace-impl.cc
118- src/main/cpp/v8_inspector/src/inspector/v8-value-utils.cc
119- src/main/cpp/v8_inspector/src/inspector/value-mirror.cc
120- src/main/cpp/v8_inspector/src/inspector/wasm-translation.cc
60+ INSPECTOR_SOURCES
61+
62+ src/main/cpp/com_tns_AndroidJsV8Inspector.cpp
63+ src/main/cpp/JsV8InspectorClient.cpp
64+ src/main/cpp/DOMDomainCallbackHandlers.cpp
65+ src/main/cpp/NetworkDomainCallbackHandlers.cpp
66+
67+ src/main/cpp/v8_inspector/src/inspector/protocol/CSS.cpp
68+ src/main/cpp/v8_inspector/src/inspector/protocol/Console.cpp
69+ src/main/cpp/v8_inspector/src/inspector/protocol/DOM.cpp
70+ src/main/cpp/v8_inspector/src/inspector/protocol/Debugger.cpp
71+ src/main/cpp/v8_inspector/src/inspector/protocol/HeapProfiler.cpp
72+ src/main/cpp/v8_inspector/src/inspector/protocol/Log.cpp
73+ src/main/cpp/v8_inspector/src/inspector/protocol/Network.cpp
74+ src/main/cpp/v8_inspector/src/inspector/protocol/Overlay.cpp
75+ src/main/cpp/v8_inspector/src/inspector/protocol/Page.cpp
76+ src/main/cpp/v8_inspector/src/inspector/protocol/Profiler.cpp
77+ src/main/cpp/v8_inspector/src/inspector/protocol/Protocol.cpp
78+ src/main/cpp/v8_inspector/src/inspector/protocol/Runtime.cpp
79+ src/main/cpp/v8_inspector/src/inspector/protocol/Schema.cpp
80+ src/main/cpp/v8_inspector/src/inspector/utils/base64.cpp
81+ src/main/cpp/v8_inspector/src/inspector/utils/v8-inspector-common.cpp
82+ src/main/cpp/v8_inspector/src/inspector/utils/v8-network-request-data.cpp
83+ src/main/cpp/v8_inspector/src/inspector/utils/v8-page-resources.cpp
84+ src/main/cpp/v8_inspector/src/inspector/v8-css-agent-impl.cpp
85+ src/main/cpp/v8_inspector/src/inspector/v8-dom-agent-impl.cpp
86+ src/main/cpp/v8_inspector/src/inspector/v8-log-agent-impl.cpp
87+ src/main/cpp/v8_inspector/src/inspector/v8-network-agent-impl.cpp
88+ src/main/cpp/v8_inspector/src/inspector/v8-overlay-agent-impl.cpp
89+ src/main/cpp/v8_inspector/src/inspector/v8-page-agent-impl.cpp
90+
91+ src/main/cpp/v8_inspector/src/inspector/custom-preview.cc
92+ src/main/cpp/v8_inspector/src/inspector/injected-script.cc
93+ src/main/cpp/v8_inspector/src/inspector/inspected-context.cc
94+ src/main/cpp/v8_inspector/src/inspector/remote-object-id.cc
95+ src/main/cpp/v8_inspector/src/inspector/search-util.cc
96+ src/main/cpp/v8_inspector/src/inspector/string -16.cc
97+ src/main/cpp/v8_inspector/src/inspector/string -util.cc
98+ src/main/cpp/v8_inspector/src/inspector/v8-console.cc
99+ src/main/cpp/v8_inspector/src/inspector/v8-console-agent-impl.cc
100+ src/main/cpp/v8_inspector/src/inspector/v8-console-message.cc
101+ src/main/cpp/v8_inspector/src/inspector/v8-debugger.cc
102+ src/main/cpp/v8_inspector/src/inspector/v8-debugger-agent-impl.cc
103+ src/main/cpp/v8_inspector/src/inspector/v8-debugger-script.cc
104+ src/main/cpp/v8_inspector/src/inspector/v8-heap-profiler-agent-impl.cc
105+ src/main/cpp/v8_inspector/src/inspector/v8-inspector-impl.cc
106+ src/main/cpp/v8_inspector/src/inspector/v8-inspector-session-impl.cc
107+ src/main/cpp/v8_inspector/src/inspector/v8-profiler-agent-impl.cc
108+ src/main/cpp/v8_inspector/src/inspector/v8-regex.cc
109+ src/main/cpp/v8_inspector/src/inspector/v8-runtime-agent-impl.cc
110+ src/main/cpp/v8_inspector/src/inspector/v8-schema-agent-impl.cc
111+ src/main/cpp/v8_inspector/src/inspector/v8-stack-trace-impl.cc
112+ src/main/cpp/v8_inspector/src/inspector/v8-value-utils.cc
113+ src/main/cpp/v8_inspector/src/inspector/value-mirror.cc
114+ src/main/cpp/v8_inspector/src/inspector/wasm-translation.cc
121115 )
122116else ()
123117 # Debug builds will include the V8 inspector sources
@@ -128,55 +122,55 @@ endif ()
128122# Creates(shared static) and names a library given relative sources
129123# Gradle automatically packages shared libraries with your APK.
130124add_library (
131- # Sets the name of the library. When it's built you can find it with lib prefix libNativeScript.so
132- NativeScript
133-
134- # Sets the library as a shared library.
135- SHARED
136-
137- # Runtime source
138- src/main/cpp/ArgConverter.cpp
139- src/main/cpp/ArrayBufferHelper.cpp
140- src/main/cpp/ArrayElementAccessor.cpp
141- src/main/cpp/ArrayHelper.cpp
142- src/main/cpp/AssetExtractor.cpp
143- src/main/cpp/CallbackHandlers.cpp
144- src/main/cpp/Constants.cpp
145- src/main/cpp/DirectBuffer.cpp
146- src/main/cpp/FieldAccessor.cpp
147- src/main/cpp/File.cpp
148- src/main/cpp/JEnv.cpp
149- src/main/cpp/DesugaredInterfaceCompanionClassNameResolver.cpp
150- src/main/cpp/JType.cpp
151- src/main/cpp/JniSignatureParser.cpp
152- src/main/cpp/JsArgConverter.cpp
153- src/main/cpp/JsArgToArrayConverter.cpp
154- src/main/cpp/Logger.cpp
155- src/main/cpp/ManualInstrumentation.cpp
156- src/main/cpp/MetadataMethodInfo.cpp
157- src/main/cpp/MetadataNode.cpp
158- src/main/cpp/MetadataReader.cpp
159- src/main/cpp/MetadataTreeNode.cpp
160- src/main/cpp/MethodCache.cpp
161- src/main/cpp/ModuleInternal.cpp
162- src/main/cpp/NativeScriptException.cpp
163- src/main/cpp/NumericCasts.cpp
164- src/main/cpp/ObjectManager.cpp
165- src/main/cpp/Profiler.cpp
166- src/main/cpp/ReadWriteLock.cpp
167- src/main/cpp/Runtime.cpp
168- src/main/cpp/SimpleAllocator.cpp
169- src/main/cpp/SimpleProfiler.cpp
170- src/main/cpp/Util.cpp
171- src/main/cpp/V8GlobalHelpers.cpp
172- src/main/cpp/V8StringConstants.cpp
173- src/main/cpp/WeakRef.cpp
174- src/main/cpp/com_tns_AssetExtractor.cpp
175- src/main/cpp/com_tns_Runtime.cpp
176- src/main/cpp/console/Console.cpp
177-
178- # V8 inspector source files will be included only in Release mode
179- ${INSPECTOR_SOURCES}
125+ # Sets the name of the library. When it's built you can find it with lib prefix libNativeScript.so
126+ NativeScript
127+
128+ # Sets the library as a shared library.
129+ SHARED
130+
131+ # Runtime source
132+ src/main/cpp/ArgConverter.cpp
133+ src/main/cpp/ArrayBufferHelper.cpp
134+ src/main/cpp/ArrayElementAccessor.cpp
135+ src/main/cpp/ArrayHelper.cpp
136+ src/main/cpp/AssetExtractor.cpp
137+ src/main/cpp/CallbackHandlers.cpp
138+ src/main/cpp/Constants.cpp
139+ src/main/cpp/DirectBuffer.cpp
140+ src/main/cpp/FieldAccessor.cpp
141+ src/main/cpp/File.cpp
142+ src/main/cpp/JEnv.cpp
143+ src/main/cpp/DesugaredInterfaceCompanionClassNameResolver.cpp
144+ src/main/cpp/JType.cpp
145+ src/main/cpp/JniSignatureParser.cpp
146+ src/main/cpp/JsArgConverter.cpp
147+ src/main/cpp/JsArgToArrayConverter.cpp
148+ src/main/cpp/Logger.cpp
149+ src/main/cpp/ManualInstrumentation.cpp
150+ src/main/cpp/MetadataMethodInfo.cpp
151+ src/main/cpp/MetadataNode.cpp
152+ src/main/cpp/MetadataReader.cpp
153+ src/main/cpp/MetadataTreeNode.cpp
154+ src/main/cpp/MethodCache.cpp
155+ src/main/cpp/ModuleInternal.cpp
156+ src/main/cpp/NativeScriptException.cpp
157+ src/main/cpp/NumericCasts.cpp
158+ src/main/cpp/ObjectManager.cpp
159+ src/main/cpp/Profiler.cpp
160+ src/main/cpp/ReadWriteLock.cpp
161+ src/main/cpp/Runtime.cpp
162+ src/main/cpp/SimpleAllocator.cpp
163+ src/main/cpp/SimpleProfiler.cpp
164+ src/main/cpp/Util.cpp
165+ src/main/cpp/V8GlobalHelpers.cpp
166+ src/main/cpp/V8StringConstants.cpp
167+ src/main/cpp/WeakRef.cpp
168+ src/main/cpp/com_tns_AssetExtractor.cpp
169+ src/main/cpp/com_tns_Runtime.cpp
170+ src/main/cpp/console/Console.cpp
171+
172+ # V8 inspector source files will be included only in Release mode
173+ ${INSPECTOR_SOURCES}
180174)
181175
182176set (NATIVES_BLOB_INCLUDE_DIRECTORIES ${PROJECT_SOURCE_DIR} /src/main/libs/${ANDROID_ABI} /include)
@@ -189,7 +183,8 @@ if (OPTIMIZED_BUILD OR OPTIMIZED_WITH_INSPECTOR_BUILD)
189183 )
190184else ()
191185 set_target_properties (
192- NativeScript PROPERTIES LINK_FLAGS "-Wl,--allow-multiple-definition"
186+ NativeScript
187+ PROPERTIES LINK_FLAGS -Wl,--allow-multiple-definition
193188 INTERFACE_INCLUDE_DIRECTORIES NATIVES_BLOB_INCLUDE_DIRECTORIES
194189 )
195190endif ()
@@ -203,7 +198,7 @@ MESSAGE(STATUS "# CMAKE_C_FLAGS: " ${CMAKE_C_FLAGS})
203198MESSAGE (STATUS "# CMAKE_CXX_FLAGS: " ${CMAKE_CXX_FLAGS} )
204199
205200# Command info: https://cmake.org/cmake/help/v3.4/command/target_link_libraries.html
206- # linking v8 and inspector libraries to runtime(NativeScript library)
201+ # linking v8 and custom STL libraries to the runtime (NativeScript library)
207202target_link_libraries (NativeScript ${PROJECT_SOURCE_DIR} /src/main/libs/${ANDROID_ABI}/libzip.a )
208203target_link_libraries (NativeScript ${PROJECT_SOURCE_DIR} /src/main/libs/${ANDROID_ABI}/libv8_base.a )
209204target_link_libraries (NativeScript ${PROJECT_SOURCE_DIR} /src/main/libs/${ANDROID_ABI}/libv8_external_snapshot.a )
@@ -213,6 +208,16 @@ target_link_libraries(NativeScript ${PROJECT_SOURCE_DIR}/src/main/libs/${ANDROID
213208target_link_libraries (NativeScript ${PROJECT_SOURCE_DIR} /src/main/libs/${ANDROID_ABI}/libv8_libsampler.a )
214209target_link_libraries (NativeScript ${PROJECT_SOURCE_DIR} /src/main/libs/${ANDROID_ABI}/libv8_libbase.a )
215210
211+ # This is the custom STL produced during the V8 build
212+ target_link_libraries (NativeScript ${PROJECT_SOURCE_DIR} /src/main/libs/${ANDROID_ABI}/libc++.a )
213+ target_link_libraries (NativeScript ${PROJECT_SOURCE_DIR} /src/main/libs/${ANDROID_ABI}/libc++abi.a )
214+
215+ if ("${ANDROID_ABI} " MATCHES "armeabi-v7a" OR "${ANDROID_ABI} " MATCHES "x86" )
216+ # On API Level 19 and lower we need to link with android_support
217+ # because it contains some implementation of functions such as "strtoll" and "strtoul"
218+ target_link_libraries (NativeScript ${ANDROID_NDK_ROOT} /sources/cxx-stl/llvm-libc++/libs/${ANDROID_ABI}/libandroid_support.a )
219+ endif ()
220+
216221# Command info: https://cmake.org/cmake/help/v3.4/command/find_library.html
217222# Searches for a specified prebuilt library and stores the path as a
218223# variable. Because CMake includes system libraries in the search path by
0 commit comments