วิธีการสร้าง LiteRT ด้วย CMake

ใช้คู่มือนี้เพื่อกำหนดค่าและสร้างรันไทม์ LiteRT ด้วย CMake ใน macOS คำสั่งครอบคลุมทั้งเป้าหมายการคอมไพล์ข้ามของ Android (ใช้ macOS และ Linux เป็นเครื่องโฮสต์) และการสร้าง macOS และ Linux ดั้งเดิม

ขั้นตอนการสร้างทั่วไป

ติดตั้ง CMake 4.0.1 จาก https://github.com/kitware/cmake/releases

ค่าที่ตั้งไว้ล่วงหน้าทั้งหมดในการสร้างคาดหวังให้คุณทำงานจากรูทของที่เก็บ

cd ./litert

ทรีการสร้างที่สร้างขึ้นจะอยู่ภายใต้ cmake_build* คุณควบคุมการสร้างแบบขนานได้ผ่าน -j โดยใช้จำนวนคอร์ที่ต้องการ

รสชาติของบิลด์ที่พร้อมใช้งาน

LiteRT รองรับทั้งรุ่นรีลีสและรุ่นดีบัก

ค่าที่กำหนดล่วงหน้า แพลตฟอร์ม ประเภทบิลด์ ไดเรกทอรีเอาต์พุต
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

บิลด์เวอร์ชันที่ใช้งานจริงใช้ -O3 -DNDEBUG สำหรับไบนารีเวอร์ชันที่ใช้งานจริงที่เพิ่มประสิทธิภาพแล้ว บิลด์การแก้ไขข้อบกพร่องใช้ -O0 -g สำหรับการแก้ไขข้อบกพร่องที่มีข้อมูลสัญลักษณ์ทั้งหมด

การคอมไพล์แบบข้ามระบบของ Android (arm64)

  1. ติดตั้ง Android NDK และส่งออกเส้นทางเพื่อให้ CMake ค้นหาได้

    export ANDROID_NDK_HOME=/absolute/path/to/android-ndk-r27
    
  2. กำหนดค่าเครื่องมือ Flatbuffer ฝั่งโฮสต์

    cmake --preset android-arm64;
    
  3. กำหนดค่าบิลด์ Android ของ LiteRT โดยใช้ค่าที่กำหนดล่วงหน้าที่ให้ไว้และชี้ไปยัง เครื่องมือ 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. สร้าง LiteRT

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

ปรับแต่งเป้าหมายการสร้าง

การปรับแต่งบิลด์ CMake

ใช้ตัวเลือก CMake เพื่อควบคุมว่าควรกำหนดค่า Toolchain และฟีเจอร์ใดในเป้าหมาย เช่น

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 ช่วยให้สร้างบิลด์เดสก์ท็อป x86 ซ้ำได้โดยข้าม KleidiAI และตั้งค่าเป็น OFF เมื่อใดก็ตามที่ต้องการรวมแพ็กเกจตัวแทน
  • ส่ง -DCMAKE_BUILD_TYPE=Release (หรือค่าที่เทียบเท่าที่กำหนดไว้ล่วงหน้า) เสมอเมื่อคุณต้องการอาร์ติแฟกต์ที่เพิ่มประสิทธิภาพแล้ว ซึ่งจะทำให้ CMake ใช้ -O3 -DNDEBUG ให้คุณ

การสร้างไลบรารีของผู้ให้บริการที่มีขนาดเล็กที่สุด

ในเวลาลิงก์ ให้เปิดใช้การลบโค้ดที่ไม่ได้ใช้เพื่อให้ไลบรารีการเรียกใช้มีขนาดตรงกับของ 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* ที่เกี่ยวข้องหากเปลี่ยน Toolchain หรือ ตัวเลือกการกำหนดค่าหลัก จากนั้นเรียกใช้ขั้นตอนการกำหนดค่าอีกครั้ง
  • ตรวจสอบ CMakeCache.txt ภายในแต่ละทรีของบิลด์เพื่อดูเส้นทางการอ้างอิงที่แก้ไขแล้ว