सोर्स से Bazel को कंपाइल किया जा रहा है

इस पेज पर, सोर्स से Bazel इंस्टॉल करने का तरीका बताया गया है. साथ ही, आम तौर पर होने वाली समस्याओं को हल करने के लिए सुझाव दिए गए हैं.

सोर्स से Bazel बनाने के लिए, इनमें से कोई एक तरीका आज़माया जा सकता है:

Bazel का इस्तेमाल करके Bazel बनाना

खास जानकारी

  1. GitHub के रिलीज़ पेज या Bazelisk से, Bazel का नया वर्शन पाएं.

  2. GitHub से Bazel के सोर्स डाउनलोड करें और उन्हें कहीं एक्सट्रैक्ट करें. इसके अलावा, https://github.com/bazelbuild/bazel से सोर्स ट्री को git क्लोन किया जा सकता है

  3. बूटस्ट्रैपिंग के लिए ज़रूरी शर्तें पूरी करें. Unix जैसे सिस्टम के लिए या Windows के लिए देखें

  4. Bazel का इस्तेमाल करके, Bazel का डेवलपमेंट बिल्ड बनाएं: bazel build //src:bazel-dev (या bazel build //src:bazel-dev.exe on Windows)

  5. नतीजा देने वाली बाइनरी, bazel-bin/src/bazel-dev (या Windows पर bazel-bin\src\bazel-dev.exe) पर होती है. इसे अपनी पसंद की किसी भी जगह पर कॉपी किया जा सकता है और बिना किसी और इंस्टॉलेशन के तुरंत इस्तेमाल किया जा सकता है.

इस बारे में ज़्यादा जानकारी के लिए, यहां दिए गए निर्देश देखें.

पहला चरण: Bazel का नया वर्शन पाना

लक्ष्य: Bazel का रिलीज़ वर्शन इंस्टॉल या डाउनलोड करना. पक्का करें कि टर्मिनल में bazel टाइप करके इसे चलाया जा सके.

वजह: GitHub के सोर्स ट्री से Bazel बनाने के लिए, आपके पास पहले से मौजूद Bazel बाइनरी होनी चाहिए. इसे पैकेज मैनेजर से इंस्टॉल किया जा सकता है या GitHub से डाउनलोड किया जा सकता है. Bazel इंस्टॉल करना देखें. (इसके अलावा, इसे नए सिरे से (बूटस्ट्रैप) बनाया जा सकता है.)

समस्या हल करने से जुड़ी जानकारी:

  • अगर टर्मिनल में bazel टाइप करके Bazel नहीं चलाया जा सकता, तो:

    • ऐसा हो सकता है कि Bazel बाइनरी की डायरेक्ट्री, PATH पर न हो.

      यह कोई बड़ी समस्या नहीं है. bazel टाइप करने के बजाय, आपको पूरा पाथ टाइप करना होगा.

    • ऐसा हो सकता है कि Bazel बाइनरी को bazel (Unix पर) या bazel.exe (Windows पर) न कहा जाता हो.

      यह कोई बड़ी समस्या नहीं है. बाइनरी का नाम बदला जा सकता है या bazel के बजाय बाइनरी का नाम टाइप किया जा सकता है.

    • ऐसा हो सकता है कि बाइनरी, Unix पर एक्ज़ीक्यूटेबल न हो.

      chmod +x /path/to/bazel चलाकर, बाइनरी को एक्ज़ीक्यूटेबल बनाना ज़रूरी है.

दूसरा चरण: GitHub से Bazel के सोर्स डाउनलोड करना

अगर आपको Git के बारे में जानकारी है, तो बस git clone https://github.com/bazelbuild/bazel करें

अन्यथा:

  1. ज़िप फ़ाइल के तौर पर, नए सोर्स डाउनलोड करें .

  2. कॉन्टेंट को कहीं एक्सट्रैक्ट करें.

    उदाहरण के लिए, अपनी होम डायरेक्ट्री में bazel-src डायरेक्ट्री बनाएं और उसमें एक्सट्रैक्ट करें.

तीसरा चरण: ज़रूरी शर्तें पूरी करना

बूटस्ट्रैपिंग के लिए ज़रूरी शर्तें पूरी करें (यहां देखें) -- जेडीके, C++ कंपाइलर, MSYS2 (अगर Windows पर बनाया जा रहा है), वगैरह.

चौथा चरण: Ubuntu Linux, macOS, और Unix जैसे अन्य सिस्टम पर Bazel बनाना

Windows के लिए निर्देश जानने के लिए, Windows पर Bazel बनाना देखें.

लक्ष्य: कस्टम Bazel बाइनरी (bazel-bin/src/bazel-dev) बनाने के लिए, Bazel चलाना.

निर्देश:

  1. Bash टर्मिनल शुरू करें

  2. cd उस डायरेक्ट्री पर जाएं जहां आपने Bazel के सोर्स एक्सट्रैक्ट (या क्लोन) किए हैं.

    उदाहरण के लिए, अगर आपने सोर्स को अपनी होम डायरेक्ट्री में एक्सट्रैक्ट किया है, तो यह कमांड चलाएं:

    cd ~/bazel-src
    
  3. सोर्स से Bazel बनाएं:

    bazel build //src:bazel-dev
    

    इसके अलावा, bazel build //src:bazel --compilation_mode=opt चलाकर, छोटी बाइनरी बनाई जा सकती है. हालांकि, इसे बनाने में ज़्यादा समय लगता है.

    बाइनरी के लिए Bazel का वर्शन एम्बेड करने के लिए, --stamp --embed_label=X.Y.Z फ़्लैग के साथ बनाया जा सकता है, ताकि bazel --version से दिया गया वर्शन आउटपुट हो.

  4. आउटपुट, bazel-bin/src/bazel-dev (या bazel-bin/src/bazel) पर होगा.

चौथा चरण: Windows पर Bazel बनाना

Unix जैसे सिस्टम के लिए निर्देश जानने के लिए, Ubuntu Linux, macOS, और Unix जैसे अन्य सिस्टम देखें.

लक्ष्य: कस्टम Bazel बाइनरी (bazel-bin\src\bazel-dev.exe) बनाने के लिए, Bazel चलाना.

निर्देश:

  1. कमांड प्रॉम्प्ट शुरू करें (स्टार्ट मेन्यू > रन > "cmd.exe")

  2. cd उस डायरेक्ट्री पर जाएं जहां आपने Bazel के सोर्स एक्सट्रैक्ट (या क्लोन) किए हैं.

    उदाहरण के लिए, अगर आपने सोर्स को अपनी होम डायरेक्ट्री में एक्सट्रैक्ट किया है, तो यह कमांड चलाएं:

    cd %USERPROFILE%\bazel-src
    
  3. सोर्स से Bazel बनाएं:

    bazel build //src:bazel-dev.exe

    इसके अलावा, bazel build //src:bazel.exe --compilation_mode=opt चलाकर, छोटी बाइनरी बनाई जा सकती है. हालांकि, इसे बनाने में ज़्यादा समय लगता है.

    बाइनरी के लिए Bazel का वर्शन एम्बेड करने के लिए, --stamp --embed_label=X.Y.Z फ़्लैग के साथ बनाया जा सकता है, ताकि bazel --version से दिया गया वर्शन आउटपुट हो.

  4. आउटपुट, bazel-bin\src\bazel-dev.exe (या bazel-bin\src\bazel.exe) पर होगा.

पांचवा चरण: बनाई गई बाइनरी इंस्टॉल करना

असल में, कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.

पिछले चरण का आउटपुट, Bazel की एक अलग बाइनरी होती है. इसे किसी भी डायरेक्ट्री में कॉपी किया जा सकता है और तुरंत इस्तेमाल किया जा सकता है. (अगर वह डायरेक्ट्री आपके PATH पर है, तो यह काम का है, ताकि "bazel" को कहीं भी चलाया जा सके.)


Bazel को नए सिरे से बनाना (बूटस्ट्रैपिंग)

Bazel को नए सिरे से भी बनाया जा सकता है. इसके लिए, मौजूदा Bazel बाइनरी का इस्तेमाल करने की ज़रूरत नहीं है.

पहला चरण: Bazel के सोर्स डाउनलोड करना (डिस्ट्रिब्यूशन आर्काइव)

(यह चरण सभी प्लैटफ़ॉर्म के लिए एक जैसा है.)

  1. GitHub

    ध्यान दें:

    • डिस्ट्रिब्यूशन आर्काइव सिर्फ़ एक होता है और यह आर्किटेक्चर पर निर्भर नहीं करता. आर्किटेक्चर या ओएस के हिसाब से डिस्ट्रिब्यूशन आर्काइव नहीं होते.
    • ये सोर्स, GitHub के सोर्स ट्री से अलग होते हैं. Bazel को बूटस्ट्रैप करने के लिए, डिस्ट्रिब्यूशन आर्काइव का इस्तेमाल करना ज़रूरी है. GitHub से क्लोन किए गए सोर्स ट्री का इस्तेमाल नहीं किया जा सकता. (डिस्ट्रिब्यूशन आर्काइव में, जनरेट की गई सोर्स फ़ाइलें होती हैं. ये फ़ाइलें बूटस्ट्रैपिंग के लिए ज़रूरी होती हैं और सामान्य Git सोर्स ट्री का हिस्सा नहीं होती हैं.)
  2. डिस्ट्रिब्यूशन आर्काइव को डिस्क पर कहीं अनपैक करें.

    Bazel की रिलीज़ की 3D5919B448457EE0 से किए गए हस्ताक्षर की पुष्टि करें.

दूसरा चरण: Ubuntu Linux, macOS, और Unix जैसे अन्य सिस्टम पर Bazel को बूटस्ट्रैप करना

Windows के लिए निर्देश जानने के लिए, Windows पर Bazel को बूटस्ट्रैप करना देखें.

2.1. ज़रूरी शर्तें पूरी करना

  • Bash

  • zip, unzip

  • C++ बिल्ड टूलचेन

  • जेडीके. वर्शन 21 ज़रूरी है.

  • Python. वर्शन 2 और 3 काम करते हैं. इनमें से कोई एक इंस्टॉल करना काफ़ी है.

उदाहरण के लिए, Ubuntu Linux पर इन ज़रूरी शर्तों को पूरा करने के लिए, यह कमांड इस्तेमाल किया जा सकता है:

sudo apt-get install build-essential openjdk-21-jdk python zip unzip

2.2. Unix पर Bazel को बूटस्ट्रैप करना

  1. कोई शेल या टर्मिनल विंडो खोलें.

  2. cd उस डायरेक्ट्री पर जाएं जहां आपने डिस्ट्रिब्यूशन आर्काइव को अनपैक किया है.

  3. कंपाइलेशन स्क्रिप्ट चलाएं: env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" bash ./compile.sh.

कंपाइल किया गया आउटपुट, output/bazel में रखा जाता है. यह Bazel की एक अलग बाइनरी होती है, जिसमें एम्बेड किया गया जेडीके नहीं होता. इसे कहीं भी कॉपी किया जा सकता है या उसी जगह पर इस्तेमाल किया जा सकता है. सुविधा के लिए, इस बाइनरी को ऐसी डायरेक्ट्री में कॉपी करें जो आपके PATH पर हो (जैसे, Linux पर /usr/local/bin).

bazel बाइनरी को एक ही तरीके से बनाने के लिए, "कंपाइलेशन स्क्रिप्ट चलाएं" चरण में SOURCE_DATE_EPOCH भी सेट करें.

दूसरा चरण: Windows पर Bazel को बूटस्ट्रैप करना

Unix जैसे सिस्टम के लिए निर्देश जानने के लिए, Ubuntu Linux, macOS, और Unix जैसे अन्य सिस्टम पर Bazel को बूटस्ट्रैप करना देखें.

2.1. ज़रूरी शर्तें पूरी करना

  • MSYS2 शेल

  • ज़िप और अनज़िप के लिए MSYS2 पैकेज. MSYS2 शेल में यह कमांड चलाएं:

    pacman -S zip unzip patch
    
  • Visual C++ कंपाइलर. Visual C++ कंपाइलर को Visual Studio 2015 या इसके बाद के वर्शन के हिस्से के तौर पर इंस्टॉल करें. इसके अलावा, Visual Studio 2017 के लिए Build Tools का नया वर्शन इंस्टॉल करके भी इसे इंस्टॉल किया जा सकता है.

  • जेडीके. वर्शन 21 ज़रूरी है.

  • Python. वर्शन 2 और 3 काम करते हैं. इनमें से कोई एक इंस्टॉल करना काफ़ी है. आपको Windows के लिए नेटिव वर्शन की ज़रूरत होगी. इसे https://www.python.orgसे डाउनलोड किया जा सकता है. MSYS2 में pacman के ज़रिए इंस्टॉल किए गए वर्शन काम नहीं करेंगे.

2.2. Windows पर Bazel को बूटस्ट्रैप करना

  1. MSYS2 शेल खोलें.

  2. ये एनवायरमेंट वैरिएबल सेट करें:

    • BAZEL_VS या BAZEL_VC (ये दोनों अलग-अलग हैं): Visual Studio डायरेक्ट्री (BAZEL_VS) या Visual C++ डायरेक्ट्री (BAZEL_VC) के पाथ पर सेट करें. इनमें से कोई एक सेट करना काफ़ी है.
    • BAZEL_SH: MSYS2 bash.exe का पाथ. यहां दिए गए उदाहरणों में कमांड देखें.

      इसे C:\Windows\System32\bash.exe पर सेट न करें. (अगर आपने Windows Subsystem for Linux इंस्टॉल किया है, तो आपके पास वह फ़ाइल होगी.) Bazel, bash.exe के इस वर्शन के साथ काम नहीं करता.

    • PATH: Python डायरेक्ट्री जोड़ें.

    • JAVA_HOME: जेडीके डायरेक्ट्री पर सेट करें.

    उदाहरण (BAZEL_VS का इस्तेमाल करके):

    export BAZEL_VS="C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools"
    export BAZEL_SH="$(cygpath -m $(realpath $(which bash)))"
    export PATH="/c/python27:$PATH"
    export JAVA_HOME="C:/Program Files/Java/jdk-21"
    

    या (BAZEL_VC का इस्तेमाल करके):

    export BAZEL_VC="C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC"
    export BAZEL_SH="$(cygpath -m $(realpath $(which bash)))"
    export PATH="/c/python27:$PATH"
    export JAVA_HOME="C:/Program Files/Java/jdk-21"
    
  3. cd उस डायरेक्ट्री पर जाएं जहां आपने डिस्ट्रिब्यूशन आर्काइव को अनपैक किया है.

  4. कंपाइलेशन स्क्रिप्ट चलाएं: env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" ./compile.sh

कंपाइल किया गया आउटपुट, output/bazel.exe में रखा जाता है. यह Bazel की एक अलग बाइनरी होती है, जिसमें एम्बेड किया गया जेडीके नहीं होता. इसे कहीं भी कॉपी किया जा सकता है या उसी जगह पर इस्तेमाल किया जा सकता है. सुविधा के लिए, इस बाइनरी को ऐसी डायरेक्ट्री में कॉपी करें जो आपके PATH पर हो.

bazel.exe बाइनरी को एक ही तरीके से बनाने के लिए, "कंपाइलेशन स्क्रिप्ट चलाएं" चरण में SOURCE_DATE_EPOCH भी सेट करें.

Bazel को MSYS2 शेल से चलाने की ज़रूरत नहीं है. Bazel को कमांड प्रॉम्प्ट (cmd.exe) या PowerShell से चलाया जा सकता है.