@@ -205,15 +205,19 @@ if(ENABLE_NET)
205205 if (ANDROID_ABI MATCHES "^arm64-v8a" )
206206 set (NET_RUNTIME_DIR "${NETCORE_APP_RUNTIME_DIR_ARM64} " )
207207 set (COMPILER_BUILTINS_LIB_ABI "aarch64" )
208+ set (SYSROOT_ABI_LIB_DIR "aarch64-linux-android" )
208209 elseif (ANDROID_ABI MATCHES "^armeabi-v7a" )
209210 set (NET_RUNTIME_DIR "${NETCORE_APP_RUNTIME_DIR_ARM} " )
210211 set (COMPILER_BUILTINS_LIB_ABI "arm" )
212+ set (SYSROOT_ABI_LIB_DIR "arm-linux-androideabi" )
211213 elseif (ANDROID_ABI MATCHES "^x86_64" )
212214 set (NET_RUNTIME_DIR "${NETCORE_APP_RUNTIME_DIR_X86_64} " )
213215 set (COMPILER_BUILTINS_LIB_ABI "x86_64" )
216+ set (SYSROOT_ABI_LIB_DIR "x86_64-linux-android" )
214217 elseif (ANDROID_ABI MATCHES "^x86" )
215218 set (NET_RUNTIME_DIR "${NETCORE_APP_RUNTIME_DIR_X86} " )
216219 set (COMPILER_BUILTINS_LIB_ABI "i686" )
220+ set (SYSROOT_ABI_LIB_DIR "i686-linux-android" )
217221 else ()
218222 message (FATAL "${ANDROID_ABI} is not supported for .NET 6+ builds" )
219223 endif ()
@@ -495,6 +499,7 @@ endif()
495499set (XAMARIN_INTERNAL_API_LIB xa-internal -api${CHECKED_BUILD_INFIX} )
496500set (XAMARIN_DEBUG_APP_HELPER_LIB xamarin-debug-app-helper${CHECKED_BUILD_INFIX} )
497501set (XAMARIN_APP_STUB_LIB xamarin-app)
502+ set (XAMARIN_NATIVE_TRACING_LIB xamarin-native-tracing)
498503set (XAMARIN_MARSHAL_METHODS_TRACING_LIB marshal-methods-tracing)
499504
500505string (TOLOWER ${CMAKE_BUILD_TYPE} XAMARIN_MONO_ANDROID_SUFFIX)
@@ -563,6 +568,14 @@ if(UNIX)
563568endif ()
564569
565570if (ANDROID AND ENABLE_NET)
571+ set (NATIVE_TRACING_SOURCES
572+ ${NDK_CXX_LIBCPPABI_SOURCE_PATH} /src/cxa_demangle.cpp
573+ ${SOURCES_DIR} /cxx-abi/string .cc
574+ ${SOURCES_DIR} /cxx-abi/terminate.cc
575+ ${SOURCES_DIR} /helpers.cc
576+ ${SOURCES_DIR} /native-tracing.cc
577+ ${SOURCES_DIR} /new_delete.cc
578+ )
566579
567580 set (MARSHAL_METHODS_TRACING_SOURCES
568581 ${NDK_CXX_LIBCPPABI_SOURCE_PATH} /src/cxa_demangle.cpp
@@ -712,8 +725,57 @@ add_library(
712725
713726if (ANDROID)
714727 if (ENABLE_NET AND NOT DEBUG_BUILD)
715- # TODO: make it a shared library instead, will make it possible to not require NDK when building
716- # an app with tracing
728+ execute_process (
729+ COMMAND ${CMAKE_CXX_COMPILER} -print-runtime-dir
730+ RESULT_VARIABLE _CXX_COMPILER_EXIT_CODE
731+ OUTPUT_VARIABLE _CXX_COMPILER_RUNTIME_DIR
732+ ECHO_OUTPUT_VARIABLE
733+ OUTPUT_STRIP_TRAILING_WHITESPACE
734+ )
735+
736+ if (NOT ${_CXX_COMPILER_EXIT_CODE} EQUAL 0)
737+ message (FATAL_ERROR "Unable to determine compiler runtime directory" )
738+ endif ()
739+
740+ message (STATUS "Clang runtime dir: ${_CXX_COMPILER_RUNTIME_DIR} " )
741+ message (STATUS "ABI dir: ${SYSROOT_ABI_LIB_DIR} " )
742+ set (BUILTINS_LIB ${_CXX_COMPILER_RUNTIME_DIR} /libclang_rt.builtins-${COMPILER_BUILTINS_LIB_ABI} -android.a)
743+ set (CPP_ABI_PATH ${CMAKE_SYSROOT} /usr/lib/${SYSROOT_ABI_LIB_DIR} /libc++abi.a)
744+
745+ add_library (
746+ ${XAMARIN_NATIVE_TRACING_LIB}
747+ SHARED ${NATIVE_TRACING_SOURCES}
748+ )
749+
750+ target_include_directories (
751+ ${XAMARIN_NATIVE_TRACING_LIB} BEFORE
752+ PRIVATE
753+ ${LIBUNWIND_SOURCE_DIR} /include
754+ ${LIBUNWIND_HEADERS_DIR} /${CMAKE_ANDROID_ARCH_ABI}
755+ ${NDK_CXX_LIBCPPABI_SOURCE_PATH} /include
756+ )
757+
758+ target_compile_options (
759+ ${XAMARIN_NATIVE_TRACING_LIB}
760+ PRIVATE
761+ # Avoid the 'warning: dynamic exception specifications are deprecated' warning from libc++ headers
762+ -Wno-deprecated-dynamic-exception-spec
763+ )
764+
765+ target_link_libraries (
766+ ${XAMARIN_NATIVE_TRACING_LIB}
767+ PRIVATE
768+ -llog
769+ ${CPP_ABI_PATH}
770+ ${XA_LIBRARY_OUTPUT_DIRECTORY} /libunwind_xamarin.a
771+ )
772+
773+ target_compile_definitions (
774+ ${XAMARIN_NATIVE_TRACING_LIB}
775+ PRIVATE
776+ XAMARIN_TRACING
777+ )
778+
717779 add_library (
718780 ${XAMARIN_MARSHAL_METHODS_TRACING_LIB}
719781 STATIC ${MARSHAL_METHODS_TRACING_SOURCES}
@@ -722,7 +784,7 @@ if(ANDROID)
722784 target_compile_definitions (
723785 ${XAMARIN_MARSHAL_METHODS_TRACING_LIB}
724786 PRIVATE
725- MARSHAL_METHODS_TRACING
787+ XAMARIN_TRACING
726788 )
727789
728790 target_compile_options (
@@ -740,20 +802,6 @@ if(ANDROID)
740802 ${NDK_CXX_LIBCPPABI_SOURCE_PATH} /include
741803 )
742804
743- execute_process (
744- COMMAND ${CMAKE_CXX_COMPILER} -print-runtime-dir
745- RESULT_VARIABLE _CXX_COMPILER_EXIT_CODE
746- OUTPUT_VARIABLE _CXX_COMPILER_RUNTIME_DIR
747- ECHO_OUTPUT_VARIABLE
748- OUTPUT_STRIP_TRAILING_WHITESPACE
749- )
750-
751- if (NOT ${_CXX_COMPILER_EXIT_CODE} EQUAL 0)
752- message (FATAL_ERROR "Unable to determine compiler runtime directory" )
753- endif ()
754-
755- message (STATUS "Runtime dir: ${_CXX_COMPILER_RUNTIME_DIR} " )
756- set (BUILTINS_LIB ${_CXX_COMPILER_RUNTIME_DIR} /libclang_rt.builtins-${COMPILER_BUILTINS_LIB_ABI} -android.a)
757805 file (COPY ${BUILTINS_LIB} DESTINATION ${XA_LIBRARY_OUTPUT_DIRECTORY} )
758806 endif ()
759807
0 commit comments