במדריך הזה מוסבר איך להגדיר ולבנות את זמן הריצה של 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)
מתקינים את Android NDK ומייצאים את הנתיב כדי ש-CMake יוכל למצוא אותו:
export ANDROID_NDK_HOME=/absolute/path/to/android-ndk-r27הגדרת כלי flatbuffer בצד המארח
cmake --preset android-arm64;מגדירים את ה-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)"כדי ליצור את 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
הגדרת ברירת המחדל של הגדרות קבועות מראש לגרסאות למחשב:
# For Release build: cmake --preset default # For Debug build: cmake --preset default-debugגרסת 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 כדי לראות את נתיבי התלות שנפתרו.