מבוא
ניתן להשתמש ב-Sandboxed API (SAPI) ביחד עם מערכת ה-build Bazel של Google, או עם מערכת המטא-build הפופולרית CMake. הדף הזה מתמקד ב-Bazel, אבל אותן התכונות זמינות ל-CMake. Bazel היא מערכת ה-build המומלצת והקלה ביותר לשילוב.
בקובץ BUILD.bazel יהיה לכם כלל build ליצירת קוד המארח. כדי שקוד המארח ישתמש בגרסת ארגז החול של ספרייה, עליך להכין יעד build שבו ישתמש קוד המארח שלך.
כללי Build של SAPI
- sapi_library
sapi_library
sapi_library(name, deps, srcs, hdrs, embed, functions, lib, lib_name, input_files, namespace, header, add_default_deps, limit_scan_depth, visibility)
יעדי פלט
כלל ה-build של sapi_library()
יוצר את היעדים הבאים:
- name-sapi: ספריית ארגז החול, מחליפה את cc_library הרגיל כיעד קוד המארח. הוא מורכב מיחסי תלות של
zlib_sapi.bin
ושל Sandbox. - name.interface: ממשק הספרייה שנוצר.
- name.embed: יעד
cc_embed_data()
שמשמש להטמעת Sandboxee בקובץ הבינארי. מידע נוסף זמין בכתובת bazel/embed_data.bzl. - name.bin: בינארי של Sandboxee מורכב מ-stub תקשורת קטן ומהספרייה שנמצאת בהרצה בארגז חול.
ארגומנטים
מאפיינים | |
---|---|
name |
Name; חובה שם ייחודי ליעד הזה. הפעולה הזו תזהה את ספריית C/C++ שבארגז החול, וכן את יעד הפלט של name-sapi. |
נקודות מוצא |
רשימת תוויות (אופציונלי) רשימה של ספריות אחרות לקישור לספריית C/C++ שבארגז החול. |
מקורות מידע |
רשימת תוויות (אופציונלי) רשימה של קובצי C ו-C++ שעברו עיבוד כדי ליצור את ספריית C/C++ בארגז החול. אלה קובצי מקור וכותרת מסוג C/C++, שלא נוצרו (קוד מקור רגיל) או שנוצרו. למידע נוסף, אפשר לקרוא את ההסבר על מאפיין src במסמכי התיעוד של cc_library. |
HD | רשימת תוויות (אופציונלי) רשימה של קובצי כותרת שעובדו כדי ליצור את ספריית C/C++ שבארגז החול. כאן אמורה להופיע הגדרת ה-Sandbox (sandbox.h). יש להשאיר ריק אם נעשה שימוש בספריית ה-SAPI המוטמעת ואם מדיניות ברירת המחדל של Sandbox מספיקה. |
להטמיע | ערך בוליאני; אופציונלי; ברירת המחדל היא True אם המדיניות מוגדרת כ-True, הספרייה שבארגז החול צריכה להיות מוטמעת בקוד המארח. כך אפשר לאתחל את SAPI Sandbox עם
הבנאי |
פונקציות | רשימת השמות של הפונקציות; אופציונלי רשימה של פונקציות מספריית C/C++ שעבורן נוצרת גרסה של Sandbox שניתן להשתמש בהן בקוד המארח. עם רשימה ריקה, יתבצע ניסיון לייצא ולארוז את כל הפונקציות שנמצאו בספרייה. |
lib | מחרוזת; חובה שם היעד של ספריית C/C++ שעומד להיות הספרייה בארגז החול. זה מצופה שיש לכם כלל build של cc_library עבור ספריית C/C++ בפרויקט. |
lib_name | מחרוזת; חובה השם של אובייקט ה-SAPI שמשמש לשרת proxy של פונקציות הספרייה ממאפיין הפונקציות. כל קריאה לפונקציה בספרייה שבארגז החול תתבצע דרך אובייקט SAPI. |
input_files | רשימת תוויות (אופציונלי) רשימה של קובצי C ו-C++ שמעובדים במהלך ההפעלה הפנימית של כלל sapi_interface. המחולל סורק את הקבצים האלה כדי לאתר את הצהרות הפונקציות של ספריית C/C++. לרוב אין צורך לעשות זאת, כי הכותרות המיוצאות של ספריית C/C++ נסרקות תמיד. |
מרחב שמות | מחרוזת; אופציונלי; ברירת המחדל היא sapigen מזהה מרחב שמות C++ שאליו צריך למקם את אובייקט ה-SAPI שהוגדר על ידי lib_name. מרחב השמות שמוגדר כברירת מחדל הוא sapigen. |
כותרת | מחרוזת, אופציונלי השם של קובץ הכותרת לשימוש במקום קובץ הכותרת שנוצר. אם רוצים ליצור קוד באופן אוטומטי, אין להשתמש במאפיין הזה |
add_default_deps | ערך בוליאני; אופציונלי; ברירת המחדל היא True הוצא משימוש |
limit_scan_depth | ערך בוליאני; אופציונלי; ברירת המחדל היא False בספריות מורכבות, יכול להיות שהמערכת תגיע למספר הקבצים של Bazel ותהליך ה-build לא יצלח. המאפיין הזה הוא פתח מילוט למצבים מורכבים כאלה. לא להשתמש בו אלא אם צריך. |
תגים | אפשר לעיין במסמכי התיעוד של Bazel לגבי תגים. |
חשיפה | אפשר לעיין במסמכי התיעוד של Bazel לקבלת חשיפה |
שימוש לדוגמה
הדוגמה של zlib היא פרויקט עזר טוב שמדגים את השימוש בכלל ה-build של sapi_library:
load(
"//sandboxed_api/tools/generator:sapi_generator.bzl",
"sapi_library",
)
sapi_library(
name = "zlib-sapi",
srcs = [], # Extra code compiled with the SAPI library
hdrs = [], # Leave empty if embedded SAPI libraries are used, and the
# default sandbox policy is sufficient.
embed = True, # This is the default
functions = [
"deflateInit_",
"deflate",
"deflateEnd",
],
lib = "@zlib//:zlibonly",
lib_name = "Zlib",
namespace = "sapi::zlib",
)