הגדרת סביבת פיתוח

הגדרה של LSP באמצעות clangd

רקע

עורכים כמו Emacs,‏ Vim או VS Code תומכים בתכונות כמו ניווט בקוד, השלמת קוד, הודעות שגיאה של קומפיילר בשורה ועוד, באמצעות LSP, פרוטוקול שרת השפה. שרת שפה נפוץ עם תמיכה ב-LSP הוא clangd, שמסתמך על קובץ compile_commands.json, קובץ JSON עם רשומה של פקודות ההידור לכל קובץ בפרויקט.

איך יוצרים compile_commands.json לקוד המקור של XLA?

משתמשים בסקריפט build_tools/lint/generate_compile_commands.py. הקריאה הבאה מתיקיית השורש של מאגר XLA יוצרת קובץ compile_commands.json במקום: bazel aquery "mnemonic(CppCompile, //xla/...)" --output=jsonproto | python3 build_tools/lint/generate_compile_commands.py

Build Cleaner

ב-XLA CI בתוך Google מופעלות בדיקות נוספות כדי לוודא שכל היעדים מפרטים בצורה נכונה את כל התלות בקובצי ה-BUILD, שלא מופעלים כברירת מחדל ב-OSS Bazel CI. הפעלת הפקודות הבאות לפני שליחת בקשת משיכה לצוות XLA תזרז מאוד את הזמן שיידרש למיזוג בקשת המשיכה, כי אחרת תצטרכו שמישהו ב-Google יבצע את התיקונים האלה באופן פנימי, או שתצטרכו לעבור עוד כמה סבבים של בדיקת בקשת המשיכה כדי לתקן אותם על סמך המשוב של עובדי Google.

בדיקת שכבות

השימוש ב---features=layering_check מוודא שלא תכללו בטעות כותרת באמצעות תלות טרנזיטיבית בלי לפרט אותה בתלות היעד.

הסרת תלויות שלא בשימוש מקובצי BUILD

מתקינים את הכלי Buildozer:

sudo curl -fsSL -o /usr/bin/buildozer https://github.com/bazelbuild/buildtools/releases/download/6.0.0/buildozer-linux-amd64
sudo chmod 755 /usr/bin/buildozer

מתקינים את הכלי Bant:

# To some writable directory that does not require root access
bazel build -c opt //bant && install -D --strip bazel-bin/bant/bant ~/bin/bant

# For a system directory that requires root-access
sudo install -D --strip bazel-bin/bant/bant /usr/local/bin/bant

משתמשים בפקודה bant כדי ליצור פקודות buildozer להסרת יחסי תלות שלא נמצאים בשימוש:

bant dwyu //xla/core/collectives:symmetric_memory

אם אתם מרגישים ברי מזל, אתם יכולים להריץ אותם ישירות:

. <(bant dwyu //xla/core/collectives:symmetric_memory)