cmake_minimum_required(VERSION 3.16) project(archery_netcore CXX) set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR riscv64) set(CMAKE_CXX_STANDARD 17) set(CMAKE_POSITION_INDEPENDENT_CODE ON) if(NOT DEFINED PY_INCLUDE_DIR) message(FATAL_ERROR "PY_INCLUDE_DIR not set") endif() if(NOT DEFINED PY_LIB) message(FATAL_ERROR "PY_LIB not set") endif() if(NOT DEFINED PY_EXT_SUFFIX) message(FATAL_ERROR "PY_EXT_SUFFIX not set") endif() if(NOT DEFINED MAIXCDK_PATH) message(FATAL_ERROR "MAIXCDK_PATH not set (need components/3rd_party/pybind11)") endif() add_library(archery_netcore MODULE archery_netcore.cpp native_logger.cpp utils.cpp decrypt_ota_file.cpp msg_handler.cpp ) target_include_directories(archery_netcore PRIVATE "${PY_INCLUDE_DIR}" "${MAIXCDK_PATH}/components/3rd_party/pybind11/pybind11/include" "${MAIXCDK_PATH}/components/3rd_party/openssl/include" "${CMAKE_CURRENT_SOURCE_DIR}/third_party" # 添加 nlohmann/json 路径 ) # 尽量减少 .so 体积并增加逆向成本 target_compile_options(archery_netcore PRIVATE -Os -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden ) target_link_options(archery_netcore PRIVATE -Wl,--gc-sections -Wl,-s ) set_target_properties(archery_netcore PROPERTIES PREFIX "" SUFFIX "${PY_EXT_SUFFIX}" ) # OpenSSL (for AES-256-GCM decrypt) # 使用 MaixCDK 提供的 OpenSSL 库(在 so/maixcam 目录下) set(OPENSSL_LIB_DIR "${MAIXCDK_PATH}/components/3rd_party/openssl/so/maixcam") if(EXISTS "${OPENSSL_LIB_DIR}/libcrypto.so") target_link_directories(archery_netcore PRIVATE "${OPENSSL_LIB_DIR}") target_link_libraries(archery_netcore PRIVATE "${PY_LIB}" crypto ssl) message(STATUS "Using OpenSSL from MaixCDK: ${OPENSSL_LIB_DIR}") else() # Fallback: 尝试 find_package 或系统库 find_package(OpenSSL QUIET) if(OpenSSL_FOUND) target_link_libraries(archery_netcore PRIVATE "${PY_LIB}" OpenSSL::Crypto OpenSSL::SSL) else() message(WARNING "OpenSSL not found in MaixCDK, trying system libraries (may fail)") target_link_libraries(archery_netcore PRIVATE "${PY_LIB}" crypto ssl) endif() endif()