clangd की मदद से एलएसपी सेट अप करना
बैकग्राउंड
Emacs, Vim या VS Code जैसे एडिटर, LSP यानी लैंग्वेज सर्वर प्रोटोकॉल के ज़रिए, कोड नेविगेशन, कोड पूरा करने की सुविधा, कंपाइलर की गड़बड़ी के मैसेज, और अन्य सुविधाएं देते हैं. एलएसपी के साथ काम करने वाला एक सामान्य भाषा सर्वर clangd है. यह compile_commands.json पर निर्भर करता है. यह एक JSON फ़ाइल है, जिसमें किसी प्रोजेक्ट की हर फ़ाइल के लिए कंपाइल कमांड का रिकॉर्ड होता है.
मैं XLA सोर्स कोड के लिए compile_commands.json कैसे जनरेट करूं?
build_tools/lint/generate_compile_commands.py स्क्रिप्ट का इस्तेमाल करें. XLA repo रूट से नीचे दिए गए इनवोकेशन से, compile_commands.json फ़ाइल जनरेट होती है: bazel aquery "mnemonic(CppCompile,
//xla/...)" --output=jsonproto | python3
build_tools/lint/generate_compile_commands.py
Build Cleaner
Google में XLA CI, कुछ और जांचें करता है. इससे यह पुष्टि की जाती है कि सभी टारगेट, BUILD फ़ाइलों में सभी डिपेंडेंसी को सही तरीके से लिस्ट करते हैं. ये डिपेंडेंसी, OSS Bazel CI में डिफ़ॉल्ट रूप से चालू नहीं होती हैं. XLA टीम को पीआर भेजने से पहले, यहां दी गई कमांड चलाने से पीआर को मर्ज करने में लगने वाला समय काफ़ी कम हो जाएगा. ऐसा न करने पर, आपको किसी Googler की मदद से इन समस्याओं को ठीक करना होगा. इसके अलावा, Googler के सुझावों के आधार पर इन समस्याओं को ठीक करने के लिए, पीआर की कुछ और समीक्षाएं करनी होंगी.
लेयरिंग की जांच
--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
जिन डिपेंडेंसी का इस्तेमाल नहीं किया गया है उन्हें हटाने के लिए, buildozer कमांड जनरेट करने के लिए bant का इस्तेमाल करें:
bant dwyu //xla/core/collectives:symmetric_memory
अगर आपको लगता है कि आप भाग्यशाली हैं, तो सीधे तौर पर इन्हें लागू करें:
. <(bant dwyu //xla/core/collectives:symmetric_memory)