דף זה מתאר כיצד להתחיל לתרום קוד ל-Bazel. הוא עוסק באופן ההגדרה של סביבת הקידוד, מתאר יצירה של פרויקט IntelliJ ומדריך אתכם בהידור וניפוי באגים בפרויקט.
אחרי שמגדירים את הסביבה, אפשר לעיין בסקירה כללית מהירה על מבנה בסיס הקוד של בזל, איך לחפש את הקוד ולנווט בו, ואיך לעקוב אחרי גרסאות ה-build בעזרת מערכת השילוב הרציף של Bazel.
איך אפשר לתרום לקוד המקור של Bazel?
Bazel הוא פרויקט גדול וקשה לבצע שינוי בקוד המקור של Bazel.
לפני שמבצעים שינוי, צריך ליצור בעיה ב-GitHub או לשלוח אימייל לכתובת bazel-dev@.
התרומות המועילות ביותר תוקנות באגים או מוסיפים תכונות (בניגוד לשינויים מסוג סגנוני, בחירת גורמים מחדש או "ניקוי"). השינוי צריך לכלול בדיקות ותיעוד, תוך התחשבות בתאימות לאחור, בניידות ובהשפעה על השימוש בזיכרון והביצועים.
למידע נוסף על שליחת שינוי, עיין בתהליך קבלת התיקון.
התקנת בזל
לפני שמתחילים לפתח, צריך:
מתקינים במערכת את הגרסה האחרונה של Bazel. הוראות מפורטות במאמר הידור של בזל ממקור.
מאגר GitHone של Clone Bazel מ-GitHub:
git clone https://github.com/bazelbuild/bazel.git
יש להתקין את כל הדרישות המוקדמות,
נסה ליצור מסגרת בזל:
ב-Linux/macOS, ב-Bash/Terminal:
cd bazel bazel build //src:bazel
ב-Windows, בשורת הפקודה:
cd bazel bazel --output_user_root=c:\tmp build //src:bazel.exe
כדי לבצע איטרציות מהר יותר (אבל קבצים בינאריים גדולים יותר), יש להשתמש במקום זאת ב-
//src:bazel-dev.exe
.
התוצאה היא בינארי של Bazel תקין ב-bazel-bin/src/bazel
(או bazel-bin/src/bazel.exe
ב-Windows).
יצירת פרויקט של IntelliJ
IDE ש-Bazel תומכת בו הוא IntelliJ.
כדי לעבוד עם IntelliJ:
- מתקינים את פלאגין IntelliJ של Bazel.
- יש להגדיר את הנתיב לבינארי של Bazel בהעדפות הפלאגין
(
Preferences
>Other Settings
>Bazel Settings
). - מייבאים את סביבת העבודה של Bazel כפרויקט בזל
(
File
>Import Bazel Project...
) עם ההגדרות הבאות:- שימוש בסביבת עבודה קיימת של Bazel: בחירה במאגר Git המשוכפל שלך.
- יש לבחור
Import from workspace
ולבחור את הקובץscripts/ij.bazelproject
כProject view
.
- מורידים את קובץ קוד הסגנון של Java ל-Java של IntelliJ,
מייבאים אותו (עוברים אל
Preferences
>Editor
>Code Style
>Java
, לוחצים עלManage
, ולאחר מכןImport
) ולהשתמש בו כשעובדים על הקוד של Bazel.
קומקום הידור
עליך להדר את בזל כדי לבדוק זאת. כדי ליצור גרסת פיתוח של Bazel, נדרשת הגרסה העדכנית ביותר של Bazel, שניתן להרכיב מהמקור.
אפשר לבנות את הקובץ הבינארי של Bazel באמצעות bazel build //src:bazel
, באמצעות bazel
מה-PATH.
הקובץ הבינארי שיופיע נמצא ב-bazel-bin/src/bazel
. זו הדרך המומלצת לבנות מחדש את בזל לאחר ההפעלה.
בנוסף לבינארי של בזל, ייתכן שתרצו לבנות את הכלים השונים שבהם בזל משתמשת. הם נמצאים ב-//src/java_tools/...
, ב-//src/objc_tools/...
וב-//src/tools/...
, והספריות שלהם כוללות קובצי README המתארים את
כלי השירות המתאים.
בעת שינוי מסגרת Google:
- יצירת ארכיון הפצה באמצעות
bazel build //:bazel-distfile
. - מבטלים את דחיסת הארכיון בספרייה ריקה חדשה.
- הפעלה של
bash compile.sh all
שם.
פקודה זו בונה מחדש את "בזל" עם./compile.sh
, בייזל עם
compile.sh
לבין בזל עם הקובץ הבינארי שנבנה לבזל. המערכת משווה אם
המבנים שנבנו בבזל זהים ולאחר מכן היא מפעילה את כל הבדיקות של Bazel עם
bazel test //src/... //third_party/ijar/...
. המספר משמש גם באופן פנימי
כדי להבטיח שלא נשבור את Bazel בעת דחיפת התחייבויות חדשות.
באז ניפוי באגים
כדי להגדיר תצורת ניפוי באגים גם ל-C++ וגם ל-Java ב.bazelrc
שימוש שלך:
build:debug -c dbg
build:debug --javacopt="-g"
build:debug --copt="-g"
build:debug --strip="never"
צור מחדש את Bazel עם bazel build --config debug //src:bazel
והשתמש
בכלי לניפוי הבאגים האהוב עליך כדי להתחיל לנפות באגים.
כדי לנפות באגים בלקוח C++, יש להריץ אותו כרגיל מ-gdb
או מ-lldb
.
עם זאת, כדי לנפות באגים בקוד Java, יש לצרף לשרת באמצעות הפריטים הבאים:
- הרץ את Bazel עם אפשרות ניפוי הבאגים
--host_jvm_debug
לפני הפקודה (כגוןbazel --host_jvm_debug build //src:bazel
). - יש לצרף כלי לניפוי באגים ליציאה 5005. לדוגמה, עם
jdb
, צריך להריץjdb -attach localhost:5005
.
הפלאגין שלנו, IntelliJ, כולל תמיכה מובנית בניפוי באגים.
שימוש בשילוב רציף של Bazel
כדי להתחיל להשתמש במערכת Bazel CI, יש לעיין בשילוב מתמשך של Bazel כדי לעקוב אחר הבדיקות וההרכבים של התרומות שלך ל-Bazel, אפשר להשתמש במרכז השליטה של Bazel CI.
תיאור הקוד של Bazel
ל-Bazel יש בסיס קוד גדול עם קוד במספר מיקומים.
פלטפורמת Bazel מאורגנת באופן הבא:
- קוד הלקוח נמצא ב-
src/main/cpp
ומספק את ממשק שורת הפקודה. - מאגרי הנתונים הזמניים של הפרוטוקולים נמצאים ב
src/main/protobuf
. - קוד השרת נמצא ב
src/main/java
ובsrc/test/java
.- קוד ליבה המורכב בעיקר מ-SkyFrame וחלק מהכלים.
- הכללים המובנים נמצאים ב
com.google.devtools.build.lib.rules
ובcom.google.devtools.build.lib.bazel.rules
. כדאי לקרוא קודם על האתגרים של כתיבת כללים.
- ממשקי Java מקוריים נמצאים ב
src/main/native
. - כלים שונים לקבלת תמיכה בשפה מפורטים ברשימה באוסף הידור.
אפשר למצוא תיאור מפורט של בסיס הקוד ב-Bazel codebase.
חיפוש בקוד המקור של Bazel
כדי לחפש במהירות בקוד המקור של Bazel, השתמש בחיפוש קוד Bazel. ניתן לנווט במאגרים, בסניפים ובקבצים של בזל. תוכלו גם להציג היסטוריה, הבדלים ומידע על האשמה. למידע נוסף, ניתן לעיין במדריך למשתמש בקוד Search ב-Bazel.