הוראות לבניית LiteRT CMake

במדריך הזה מוסבר איך להגדיר ולבנות את זמן הריצה של LiteRT באמצעות CMake ב-macOS. ההוראות מתייחסות ליעדי קומפילציה חוצת פלטפורמות של Android (באמצעות macOS ו-Linux כמחשב מארח) ולקומפילציות מקוריות של macOS ו-Linux.

שלבי בנייה נפוצים

מתקינים את CMake 4.0.1 מהכתובת: https://github.com/kitware/cmake/releases

כל ההגדרות הקבועות מראש של ה-build מצפות שתעבדו מתיקיית הבסיס של המאגר:

cd ./litert

עצי הבנייה שנוצרו נמצאים בתיקייה cmake_build*. אפשר לשלוט בבנייה מקבילית באמצעות -j עם מספר הליבות הרצוי.

טעמי Build זמינים

‫LiteRT תומך בטעמי build מסוג Release ו-Debug:

הגדרה קבועה מראש פלטפורמה סוג ה-Build ספריית פלט
default מחשב (macOS/Linux) פריט תוכן cmake_build
default-debug מחשב (macOS/Linux) ניפוי באגים cmake_build_debug
android-arm64 ‫Android arm64 פריט תוכן cmake_build_android_arm64
android-arm64-debug ‫Android arm64 ניפוי באגים cmake_build_android_arm64_debug

ב-builds של גרסת הפצה נעשה שימוש ב--O3 -DNDEBUG כדי לייצר קבצים בינאריים אופטימליים לסביבת ייצור. בגרסאות Debug נעשה שימוש ב--O0 -g לניפוי באגים עם מידע מלא על הסמלים.

עיבוד בין מערכות (Cross-Compilation) ב-Android‏ (arm64)

  1. מתקינים את Android NDK ומייצאים את הנתיב כדי ש-CMake יוכל למצוא אותו:

    export ANDROID_NDK_HOME=/absolute/path/to/android-ndk-r27
    
  2. הגדרת כלי flatbuffer בצד המארח

    cmake --preset android-arm64;
    
  3. מגדירים את ה-build של 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 ל-Android:

    # 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 ומ-Linux

  1. הגדרת ברירת המחדל של הגדרות קבועות מראש לגרסאות למחשב:

    # For Release build:
    cmake --preset default
    
    # For Debug build:
    cmake --preset default-debug
    
  2. גרסת build של LiteRT:

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

התאמה אישית של יעד ה-build

התאמה אישית של בניית CMake

אפשר להשתמש באפשרויות של CMake כדי לקבוע אילו ערכות כלים ותכונות יקומפלו ליעדים. E.g.:

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 מאפשרות להפנות את כלי המארח של העזרה לכל התקנה של Clang/GCC בלי לערוך את CMakeLists.txt.
  • LITERT_DISABLE_KLEIDIAI מדלג על KleidiAI כדי לשמור על האפשרות לשחזר את ה-build של אפליקציות x86 למחשב. צריך להגדיר את האפשרות הזו ל-OFF כשרוצים לארוז את ה-delegate.
  • תמיד מעבירים את הערך -DCMAKE_BUILD_TYPE=Release (או את ההגדרה הקבועה מראש המקבילה) כשצריך את הארטיפקט שעבר אופטימיזציה. כך, מערכת CMake משתמשת ב--O3 -DNDEBUG בשבילכם.

יצירת ספריות ספקים בגודל מינימלי

בזמן הקישור, מפעילים את התכונה dead-stripping כדי שגודל ספריות השליחה יהיה זהה לגודל ב-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.
  • ‫Linux: מוסיפים -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 בתוך כל עץ build כדי לראות את נתיבי התלות שנפתרו.