From 004d31a13279ac1d4ee1a51dbb1c436e6a9fad61 Mon Sep 17 00:00:00 2001 From: "lingfeng.li" <253407292@qq.com> Date: Wed, 27 Nov 2019 14:56:53 +0800 Subject: [PATCH 1/4] chmod -x LICENSE-docs --- LICENSE-docs | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 LICENSE-docs diff --git a/LICENSE-docs b/LICENSE-docs old mode 100755 new mode 100644 From 0ac5792ecc1cadee8ef23ed2d6fdfeb6518c0717 Mon Sep 17 00:00:00 2001 From: "lingfeng.li" <253407292@qq.com> Date: Wed, 27 Nov 2019 17:17:44 +0800 Subject: [PATCH 2/4] build native libs via cmake; add externalNativeBuild for xcrash_lib/build.gradle --- .gitignore | 1 + src/java/xcrash/xcrash_lib/build.gradle | 13 +++++++ src/java/xcrash/xcrash_sample/build.gradle | 2 +- src/native/CMakeLists.txt | 7 ++++ src/native/common/CMakeLists.txt | 19 +++++++++ src/native/libxcrash/jni/CMakeLists.txt | 18 +++++++++ .../libxcrash_dumper/jni/CMakeLists.txt | 33 ++++++++++++++++ .../libxcrash_dumper/jni/lzma/CMakeLists.txt | 39 +++++++++++++++++++ 8 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 src/native/CMakeLists.txt create mode 100644 src/native/common/CMakeLists.txt create mode 100644 src/native/libxcrash/jni/CMakeLists.txt create mode 100644 src/native/libxcrash_dumper/jni/CMakeLists.txt create mode 100644 src/native/libxcrash_dumper/jni/lzma/CMakeLists.txt diff --git a/.gitignore b/.gitignore index ec815e8..2e630b8 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ build/ *.log *.so local.properties +.cxx diff --git a/src/java/xcrash/xcrash_lib/build.gradle b/src/java/xcrash/xcrash_lib/build.gradle index 9e37287..dbd6a3f 100644 --- a/src/java/xcrash/xcrash_lib/build.gradle +++ b/src/java/xcrash/xcrash_lib/build.gradle @@ -7,6 +7,14 @@ android { minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion consumerProguardFiles 'proguard-rules.pro' + externalNativeBuild { + cmake { + cppFlags "-std=c++11" + } + } + ndk { + abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" + } } compileOptions { sourceCompatibility rootProject.ext.javaVersion @@ -20,6 +28,11 @@ android { minifyEnabled false } } + externalNativeBuild { + cmake { + path "../../../native/CMakeLists.txt" + } + } } apply from: rootProject.file('gradle/check.gradle') diff --git a/src/java/xcrash/xcrash_sample/build.gradle b/src/java/xcrash/xcrash_sample/build.gradle index 35ba618..bc13a18 100644 --- a/src/java/xcrash/xcrash_sample/build.gradle +++ b/src/java/xcrash/xcrash_sample/build.gradle @@ -10,7 +10,7 @@ android { versionCode 1 versionName "1.0" ndk { - abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' + abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } compileOptions { diff --git a/src/native/CMakeLists.txt b/src/native/CMakeLists.txt new file mode 100644 index 0000000..5a9f41a --- /dev/null +++ b/src/native/CMakeLists.txt @@ -0,0 +1,7 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.6) + +FIND_LIBRARY(android-dl dl) +FIND_LIBRARY(android-log log) +ADD_SUBDIRECTORY(common) +ADD_SUBDIRECTORY(libxcrash/jni) +ADD_SUBDIRECTORY(libxcrash_dumper/jni) \ No newline at end of file diff --git a/src/native/common/CMakeLists.txt b/src/native/common/CMakeLists.txt new file mode 100644 index 0000000..392e018 --- /dev/null +++ b/src/native/common/CMakeLists.txt @@ -0,0 +1,19 @@ +SET(xcrash_common_sources + xcc_b64.c + xcc_fmt.c + xcc_libc_support.c + xcc_meminfo.c + xcc_signal.c + xcc_unwind.c + xcc_unwind_clang.c + xcc_unwind_libcorkscrew.c + xcc_unwind_libunwind.c + xcc_util.c) +ADD_LIBRARY(xcrash_common STATIC ${xcrash_common_sources}) +TARGET_INCLUDE_DIRECTORIES(xcrash_common PUBLIC .) +TARGET_COMPILE_OPTIONS(xcrash_common + PRIVATE + -std=c11 + -Weverything + -Werror + -O0) diff --git a/src/native/libxcrash/jni/CMakeLists.txt b/src/native/libxcrash/jni/CMakeLists.txt new file mode 100644 index 0000000..b96655d --- /dev/null +++ b/src/native/libxcrash/jni/CMakeLists.txt @@ -0,0 +1,18 @@ +SET(xcrash_sources + xc_common.c + xc_crash.c + xc_dl.c + xc_fallback.c + xc_jni.c + xc_test.c + xc_trace.c + xc_util.c) +ADD_LIBRARY(xcrash SHARED ${xcrash_sources}) +TARGET_INCLUDE_DIRECTORIES(xcrash PRIVATE .) +TARGET_COMPILE_OPTIONS(xcrash + PRIVATE + -std=c11 + -Weverything + -Werror + -fvisibility=hidden) +TARGET_LINK_LIBRARIES(xcrash xcrash_common ${android-dl} ${android-log}) diff --git a/src/native/libxcrash_dumper/jni/CMakeLists.txt b/src/native/libxcrash_dumper/jni/CMakeLists.txt new file mode 100644 index 0000000..0a32969 --- /dev/null +++ b/src/native/libxcrash_dumper/jni/CMakeLists.txt @@ -0,0 +1,33 @@ +ADD_SUBDIRECTORY(lzma) + +SET(xcrash_dumper_sources + xcd_arm_exidx.c + xcd_core.c + xcd_dwarf.c + xcd_elf.c + xcd_elf_interface.c + xcd_frames.c + xcd_map.c + xcd_maps.c + xcd_md5.c + xcd_memory.c + xcd_memory_buf.c + xcd_memory_file.c + xcd_memory_remote.c + xcd_process.c + xcd_regs_arm.c + xcd_regs_arm64.c + xcd_regs_x86.c + xcd_regs_x86_64.c + xcd_sys.c + xcd_thread.c + xcd_util.c) +ADD_LIBRARY(xcrash_dumper SHARED ${xcrash_dumper_sources}) +TARGET_INCLUDE_DIRECTORIES(xcrash_dumper PRIVATE .) +TARGET_COMPILE_OPTIONS(xcrash_dumper + PRIVATE + -std=c11 + -Weverything + -Werror + -fvisibility=hidden) +TARGET_LINK_LIBRARIES(xcrash_dumper PRIVATE xcrash_common lzma ${android-dl} ${android-log}) \ No newline at end of file diff --git a/src/native/libxcrash_dumper/jni/lzma/CMakeLists.txt b/src/native/libxcrash_dumper/jni/lzma/CMakeLists.txt new file mode 100644 index 0000000..55b9a74 --- /dev/null +++ b/src/native/libxcrash_dumper/jni/lzma/CMakeLists.txt @@ -0,0 +1,39 @@ +SET(lzma_sources + 7zAlloc.c + 7zCrc.c + 7zCrcOpt.c + Alloc.c + Bra.c + Bra86.c + BraIA64.c + CpuArch.c + Delta.c + Lzma2Dec.c + LzmaDec.c + Sha256.c + Xz.c + XzCrc64.c + XzCrc64Opt.c + XzDec.c) +ADD_LIBRARY(lzma STATIC ${lzma_sources}) +TARGET_INCLUDE_DIRECTORIES(lzma PUBLIC .) +TARGET_COMPILE_OPTIONS(lzma + PRIVATE + -std=c11 + -Weverything + -Werror + -Wno-enum-conversion + -Wno-reserved-id-macro + -Wno-undef + -Wno-missing-prototypes + -Wno-missing-variable-declarations + -Wno-cast-align + -Wno-sign-conversion + -Wno-assign-enum + -Wno-unused-macros + -Wno-padded + -Wno-cast-qual + -Wno-strict-prototypes + -fPIC + -D_7ZIP_ST) +TARGET_LINK_LIBRARIES(lzma) From bd1ba2e03985484861bc3bd176e1343ae34d6391 Mon Sep 17 00:00:00 2001 From: "lingfeng.li" <253407292@qq.com> Date: Wed, 27 Nov 2019 19:34:35 +0800 Subject: [PATCH 3/4] Add build script to meet issue # 5 --- src/native/CMakeLists.txt | 4 +++- src/native/build_via_cmake.sh | 31 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100755 src/native/build_via_cmake.sh diff --git a/src/native/CMakeLists.txt b/src/native/CMakeLists.txt index 5a9f41a..f802b61 100644 --- a/src/native/CMakeLists.txt +++ b/src/native/CMakeLists.txt @@ -1,7 +1,9 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.6) +PROJECT(xcrash_native) + FIND_LIBRARY(android-dl dl) FIND_LIBRARY(android-log log) ADD_SUBDIRECTORY(common) ADD_SUBDIRECTORY(libxcrash/jni) -ADD_SUBDIRECTORY(libxcrash_dumper/jni) \ No newline at end of file +ADD_SUBDIRECTORY(libxcrash_dumper/jni) diff --git a/src/native/build_via_cmake.sh b/src/native/build_via_cmake.sh new file mode 100755 index 0000000..2a74ebc --- /dev/null +++ b/src/native/build_via_cmake.sh @@ -0,0 +1,31 @@ +#!/bin/bash +if [ ! -d ${ANDROID_SDK_ROOT} -o ! -d ${ANDROID_NDK_ROOT} ]; then + echo '# Please check the env ANDROID_SDK_ROOT & ANDROID_NDK_ROOT before run this script: + # ANDROID_SDK_ROOT="${HOME}/Android/Sdk" # macOS + # ANDROID_NDK_ROOT="${ANDROID_SDK_ROOT}/ndk-bundle" # deps' + exit -1 +fi +WORKSPACE="$(cd `dirname $0`;pwd)" +WORKSPACE="${WORKSPACE:-$(pwd)}" # double check +XCRASH_BUILD_DIRECTORY="${WORKSPACE}/build" +ANDROID_CMAKE_TOOLCHAIN_FILE="${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake" +XCRASH_OUTPUT_DIRECTORY="${WORKSPACE/src\/native/src\/java\/xcrash\/xcrash_lib\/src\/main\/jniLibs}" + +for abi in armeabi-v7a arm64-v8a x86 x86_64 +do + rm -rf ${XCRASH_BUILD_DIRECTORY} + mkdir -p ${XCRASH_BUILD_DIRECTORY} + pushd ${XCRASH_BUILD_DIRECTORY} + EXEC_CMD="cmake ${WORKSPACE} \ + -DCMAKE_TOOLCHAIN_FILE=\"${ANDROID_CMAKE_TOOLCHAIN_FILE}\" \ + -DCMAKE_BUILD_TYPE=Debug \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NATIVE_API_LEVEL=23 \ + -DANDROID_ABI=${abi} \ + -DANDROID_NDK=\"${ANDROID_NDK_ROOT}\" \ + -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=\"${XCRASH_OUTPUT_DIRECTORY}/${abi}\"" + echo "${EXEC_CMD[@]}" + eval "${EXEC_CMD[@]}" + make + popd +done From f6598942e61f85711cbc703c9bd222572f7bd529 Mon Sep 17 00:00:00 2001 From: "lingfeng.li" <253407292@qq.com> Date: Wed, 27 Nov 2019 21:12:18 +0800 Subject: [PATCH 4/4] rename var in CMakeLists --- src/native/CMakeLists.txt | 4 ++-- src/native/build_via_cmake.sh | 16 ++++++++-------- src/native/libxcrash/jni/CMakeLists.txt | 2 +- src/native/libxcrash_dumper/jni/CMakeLists.txt | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/native/CMakeLists.txt b/src/native/CMakeLists.txt index f802b61..ed5a6b9 100644 --- a/src/native/CMakeLists.txt +++ b/src/native/CMakeLists.txt @@ -2,8 +2,8 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.6) PROJECT(xcrash_native) -FIND_LIBRARY(android-dl dl) -FIND_LIBRARY(android-log log) +FIND_LIBRARY(libdl dl) +FIND_LIBRARY(liblog log) ADD_SUBDIRECTORY(common) ADD_SUBDIRECTORY(libxcrash/jni) ADD_SUBDIRECTORY(libxcrash_dumper/jni) diff --git a/src/native/build_via_cmake.sh b/src/native/build_via_cmake.sh index 2a74ebc..06ac20a 100755 --- a/src/native/build_via_cmake.sh +++ b/src/native/build_via_cmake.sh @@ -1,26 +1,26 @@ #!/bin/bash -if [ ! -d ${ANDROID_SDK_ROOT} -o ! -d ${ANDROID_NDK_ROOT} ]; then +if [ ! -d ${ANDROID_SDK_ROOT} ] || [ ! -d ${ANDROID_NDK_ROOT} ]; then echo '# Please check the env ANDROID_SDK_ROOT & ANDROID_NDK_ROOT before run this script: # ANDROID_SDK_ROOT="${HOME}/Android/Sdk" # macOS # ANDROID_NDK_ROOT="${ANDROID_SDK_ROOT}/ndk-bundle" # deps' exit -1 fi -WORKSPACE="$(cd `dirname $0`;pwd)" -WORKSPACE="${WORKSPACE:-$(pwd)}" # double check -XCRASH_BUILD_DIRECTORY="${WORKSPACE}/build" ANDROID_CMAKE_TOOLCHAIN_FILE="${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake" -XCRASH_OUTPUT_DIRECTORY="${WORKSPACE/src\/native/src\/java\/xcrash\/xcrash_lib\/src\/main\/jniLibs}" +XCRASH_NATIVE_ROOT="$(cd `dirname $0`;pwd)" +XCRASH_NATIVE_ROOT="${XCRASH_NATIVE_ROOT:-$(pwd)}" # double check +XCRASH_BUILD_DIRECTORY="${XCRASH_NATIVE_ROOT}/build" +XCRASH_OUTPUT_DIRECTORY="${XCRASH_NATIVE_ROOT/src\/native/src\/java\/xcrash\/xcrash_lib\/src\/main\/jniLibs}" for abi in armeabi-v7a arm64-v8a x86 x86_64 do rm -rf ${XCRASH_BUILD_DIRECTORY} mkdir -p ${XCRASH_BUILD_DIRECTORY} pushd ${XCRASH_BUILD_DIRECTORY} - EXEC_CMD="cmake ${WORKSPACE} \ + EXEC_CMD="cmake ${XCRASH_NATIVE_ROOT} \ -DCMAKE_TOOLCHAIN_FILE=\"${ANDROID_CMAKE_TOOLCHAIN_FILE}\" \ - -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_BUILD_TYPE=Release \ -DANDROID_TOOLCHAIN=clang \ - -DANDROID_NATIVE_API_LEVEL=23 \ + -DANDROID_NATIVE_API_LEVEL=19 \ -DANDROID_ABI=${abi} \ -DANDROID_NDK=\"${ANDROID_NDK_ROOT}\" \ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=\"${XCRASH_OUTPUT_DIRECTORY}/${abi}\"" diff --git a/src/native/libxcrash/jni/CMakeLists.txt b/src/native/libxcrash/jni/CMakeLists.txt index b96655d..3e5bbaa 100644 --- a/src/native/libxcrash/jni/CMakeLists.txt +++ b/src/native/libxcrash/jni/CMakeLists.txt @@ -15,4 +15,4 @@ TARGET_COMPILE_OPTIONS(xcrash -Weverything -Werror -fvisibility=hidden) -TARGET_LINK_LIBRARIES(xcrash xcrash_common ${android-dl} ${android-log}) +TARGET_LINK_LIBRARIES(xcrash xcrash_common ${libdl} ${liblog}) diff --git a/src/native/libxcrash_dumper/jni/CMakeLists.txt b/src/native/libxcrash_dumper/jni/CMakeLists.txt index 0a32969..19652f0 100644 --- a/src/native/libxcrash_dumper/jni/CMakeLists.txt +++ b/src/native/libxcrash_dumper/jni/CMakeLists.txt @@ -30,4 +30,4 @@ TARGET_COMPILE_OPTIONS(xcrash_dumper -Weverything -Werror -fvisibility=hidden) -TARGET_LINK_LIBRARIES(xcrash_dumper PRIVATE xcrash_common lzma ${android-dl} ${android-log}) \ No newline at end of file +TARGET_LINK_LIBRARIES(xcrash_dumper PRIVATE xcrash_common lzma ${libdl} ${liblog})