دستورالعمل‌های ساخت LiteRT CMake

از این راهنما برای پیکربندی و ساخت زمان اجرای LiteRT با CMake در macOS استفاده کنید. این دستورالعمل‌ها هم اهداف کامپایل متقابل اندروید (با استفاده از macOS و لینوکس به عنوان دستگاه میزبان) و هم ساخت‌های بومی macOS و لینوکس را پوشش می‌دهند.

مراحل ساخت مشترک

CMake 4.0.1 را از آدرس https://github.com/kitware/cmake/releases نصب کنید.

همه پیش‌تنظیمات ساخت از شما انتظار دارند که از ریشه مخزن کار کنید:

cd ./litert

درخت‌های ساخت تولید شده تحت cmake_build* قرار دارند. ساخت‌های موازی را می‌توان از طریق -j با تعداد هسته مورد نظر کنترل کرد.

طعم‌های ساختمانی موجود

LiteRT از هر دو نوع Build Flavor یعنی Release و Debug پشتیبانی می‌کند:

از پیش تعیین شده پلتفرم نوع ساخت دایرکتوری خروجی
default دسکتاپ (مک/لینوکس) انتشار cmake_build
default-debug دسکتاپ (مک/لینوکس) اشکال‌زدایی cmake_build_debug
android-arm64 اندروید arm64 انتشار cmake_build_android_arm64
android-arm64-debug اندروید arm64 اشکال‌زدایی cmake_build_android_arm64_debug

نسخه‌های آزمایشی -O3 -DNDEBUG برای فایل‌های باینری بهینه‌شده در مرحله تولید استفاده می‌کنند. نسخه‌های آزمایشی برای اشکال‌زدایی با اطلاعات کامل نمادها -O0 -g استفاده می‌کنند.

کامپایل متقابل اندروید (arm64)

  1. Android NDK را نصب کنید و مسیر را اکسپورت کنید تا CMake بتواند آن را پیدا کند:

    export ANDROID_NDK_HOME=/absolute/path/to/android-ndk-r27
    
  2. پیکربندی ابزارهای flatbuffer سمت میزبان

    cmake --preset android-arm64;
    
  3. با استفاده از تنظیمات پیش‌فرض ارائه شده، نسخه LiteRT Android را پیکربندی کنید و به ابزارهای FlatBuffers تولید شده اشاره کنید:

    # For Release build:
    cmake --preset android-arm64 \
      -DTFLITE_HOST_TOOLS_DIR="$(cd ../host_flatc_build/_deps/flatbuffers-build && pwd)"
    
    # For Debug build:
    cmake --preset android-arm64-debug \
      -DTFLITE_HOST_TOOLS_DIR="$(cd ../host_flatc_build/_deps/flatbuffers-build && pwd)"
    
  4. ساخت LiteRT برای اندروید:

    # For Release build:
    cmake --build cmake_build_android_arm64 -j
    
    # For Debug build:
    cmake --build cmake_build_android_arm64_debug -j
    

مصنوعاتی مانند کتابخانه‌های ایستا تحت دایرکتوری ساخت مربوطه ( cmake_build_android_arm64 یا cmake_build_android_arm64_debug ) منتشر می‌شوند.

ساخت دسکتاپ از macOS و لینوکس

  1. تنظیمات پیش‌فرض برای نسخه‌های دسکتاپ را پیکربندی کنید:

    # For Release build:
    cmake --preset default
    
    # For Debug build:
    cmake --preset default-debug
    
  2. ساخت LiteRT:

    # For Release build:
    cmake --build cmake_build -j
    
    # For Debug build:
    cmake --build cmake_build_debug -j
    

هدف ساخت خود را سفارشی کنید

سفارشی‌سازی بیلدهای CMake

از گزینه‌های CMake برای کنترل اینکه کدام زنجیره ابزارها و ویژگی‌ها در targetهای شما کامپایل شوند، استفاده کنید. به عنوان مثال:

cmake -S . -B build-release \
      -DCMAKE_BUILD_TYPE=Release \
      -DLITERT_AUTO_BUILD_TFLITE=ON \
      -DLITERT_ENABLE_GPU=OFF \
      -DLITERT_ENABLE_NPU=OFF \
      -DLITERT_DISABLE_KLEIDIAI=ON \
      -DLITERT_HOST_C_COMPILER=/usr/bin/clang \
      -DLITERT_HOST_CXX_COMPILER=/usr/bin/clang++
cmake --build build-release --target dispatch_api_Qualcomm_so -j8
  • LITERT_HOST_C_COMPILER / LITERT_HOST_CXX_COMPILER به شما این امکان را می‌دهند که ابزارهای میزبان کمکی را بدون ویرایش CMakeLists.txt به هر نصب Clang/GCC ارجاع دهید.
  • LITERT_DISABLE_KLEIDIAI با نادیده گرفتن KleidiAI، نسخه‌های دسکتاپ x86 را قابل تکثیر نگه می‌دارد؛ هر زمان که می‌خواهید نماینده را بسته‌بندی کنید، آن را روی OFF تنظیم کنید.
  • همیشه وقتی به مصنوع بهینه‌شده نیاز دارید، -DCMAKE_BUILD_TYPE=Release (یا مقدار پیش‌فرض معادل آن) را وارد کنید. این باعث می‌شود CMake -O3 -DNDEBUG برای شما استفاده کند.

تولید کتابخانه‌های فروشنده با حداقل اندازه

در زمان پیوند، dead-stripping را فعال کنید تا کتابخانه‌های dispatch با اندازه Bazel مطابقت داشته باشند:

  • macOS: دستور -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="-Wl,-dead_strip -dead_strip_dylibs" را اضافه کنید (و اگر می‌خواهید فایل‌های اجرایی حذف شوند، دستور CMAKE_EXE_LINKER_FLAGS_RELEASE را نیز اضافه کنید). پس از ساخت، strip -x path/to/libLiteRtDispatch_Qualcomm.dylib را اجرا کنید.
  • لینوکس: دستور -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="-Wl,--gc-sections" ‎ را اضافه کنید و strip --strip-unneeded path/to/libLiteRtDispatch_Qualcomm.so را اجرا کنید (یا آن را به یک دستور POST_BUILD تبدیل کنید).

این پرچم‌ها می‌توانند مستقیماً در ورودی‌های cmake --preset … در CMakePresets.json قرار گیرند، بنابراین هر توسعه‌دهنده در تیم شما پیکربندی یکسانی را دریافت می‌کند.

نکات عیب‌یابی

  • اگر ابزارک‌ها یا گزینه‌های اصلی پیکربندی را تغییر می‌دهید، پوشه‌ی cmake_build* مربوطه را حذف کنید، سپس مرحله‌ی پیکربندی را دوباره اجرا کنید.
  • CMakeCache.txt در هر درخت ساخت برای مسیرهای وابستگی حل شده بررسی کنید.