CMakeLists.txt 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. cmake_minimum_required(VERSION 3.28.1)
  2. # Android 设置
  3. set(CMAKE_SYSTEM_NAME Android)
  4. set(CMAKE_SYSTEM_VERSION 33)
  5. set(ANDROID_PLATFORM 33)
  6. set(ANDROID_ABI arm64-v8a)
  7. set(ANDROID_NDK "E:/working_directory/Environment/android-ndk-r29-beta2")
  8. set(CMAKE_TOOLCHAIN_FILE "${ANDROID_NDK}/build/cmake/android.toolchain.cmake")
  9. set(PYTHON_LIB_DIR "third_party/android-libs/lib")
  10. set(PYTHON_INCLUDE_DIR "third_party/android-libs/include/python3.11")
  11. if(CMAKE_BUILD_TYPE MATCHES Debug)
  12. add_definitions(-DDEBUG_LOG)
  13. endif()
  14. find_library(PYTHON_LIBRARY NAMES python3.11 PATHS ${PYTHON_LIB_DIR})
  15. project(Android_verify LANGUAGES C CXX ASM)
  16. include(GNUInstallDirs)
  17. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -ffunction-sections -fdata-sections")
  18. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -ffunction-sections -fdata-sections -std=c++20")
  19. set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -g0")
  20. set(CMAKE_CXX_SCAN_FOR_MODULES ON)
  21. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build/${ANDROID_ABI})
  22. include_directories(
  23. include/
  24. third_party/glm/
  25. third_party/dobby/
  26. ${ANDROID_NDK}/sources/android/native_app_glue
  27. ${PYTHON_INCLUDE_DIR}
  28. include/AppManager
  29. third_party/curl/include
  30. third_party/openssl/include
  31. )
  32. add_subdirectory(third_party/glm)
  33. add_library(dobby STATIC IMPORTED)
  34. set_target_properties(dobby PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/third_party/dobby/libdobby.a)
  35. add_library(zlib STATIC IMPORTED)
  36. set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/third_party/zlib/lib/libz.a)
  37. add_library(ssl STATIC IMPORTED)
  38. set_target_properties(ssl PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/third_party/openssl/lib/libssl.a)
  39. add_library(crypto STATIC IMPORTED)
  40. set_target_properties(crypto PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/third_party/openssl/lib/libcrypto.a)
  41. add_library(curl STATIC IMPORTED)
  42. set_target_properties(curl PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/third_party/curl/lib/libcurl.a)
  43. set(asm_syscall
  44. src/asm/syscall.s
  45. )
  46. set(AppManager
  47. src/AppManager/Api.cpp
  48. src/AppManager/Encryption.cpp
  49. src/AppManager/Network.cpp
  50. src/AppManager/Utils.cpp
  51. )
  52. add_library(Android_verify SHARED
  53. ${asm_syscall}
  54. ${AppManager}
  55. src/native-lib.cpp
  56. src/decrypt.cpp
  57. )
  58. target_link_libraries(Android_verify
  59. PRIVATE
  60. dobby
  61. glm
  62. ${PYTHON_LIBRARY}
  63. m
  64. dl
  65. android
  66. EGL
  67. GLESv2
  68. GLESv3
  69. log
  70. ssl
  71. crypto
  72. zlib
  73. curl
  74. )
  75. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions")
  76. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -ffunction-sections -fdata-sections -std=c++20 -fno-rtti -fno-exceptions")
  77. set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -g0")
  78. file(WRITE ${CMAKE_BINARY_DIR}/export.lds
  79. "{\n global:\n initLib;\n raw_syscall;\n local:\n *;\n};\n")
  80. target_link_options(Android_verify PRIVATE -Wl,-Map=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Android_verify.map -Wl,--version-script=${CMAKE_BINARY_DIR}/export.lds)
  81. add_custom_command(TARGET Android_verify POST_BUILD
  82. COMMAND ${ANDROID_NDK}/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-nm -g --defined-only $<TARGET_FILE:Android_verify> > ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/symbols.txt
  83. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/symbols.txt ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/symbols_backup.txt
  84. COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/symbols.txt
  85. COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Android_verify.map ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Angel_backup.map
  86. COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Android_verify.map
  87. COMMENT "Exporting and securing symbols"
  88. )
  89. add_custom_command(TARGET Android_verify POST_BUILD
  90. COMMAND ${ANDROID_NDK}/toolchains/llvm/prebuilt/windows-x86_64/bin/llvm-strip --strip-unneeded $<TARGET_FILE:Android_verify>
  91. COMMENT "Stripping unneeded symbols from Android_verify"
  92. )