รวบรวม Bazel จากแหล่งที่มา

หน้านี้อธิบายวิธีติดตั้ง Bazel จากแหล่งที่มาและให้เคล็ดลับในการแก้ปัญหาสำหรับปัญหาที่พบได้ทั่วไป

หากต้องการสร้าง Bazel จากแหล่งที่มา คุณสามารถทำอย่างใดอย่างหนึ่งต่อไปนี้

สร้าง Bazel โดยใช้ Bazel

สรุป

  1. รับ Bazel เวอร์ชันล่าสุดจาก หน้า GitHub เวอร์ชันล่าสุด หรือด้วย Bazelisk

  2. ดาวน์โหลดแหล่งที่มาของ Bazel จาก GitHub และแยกไฟล์ไว้ที่ใดที่หนึ่ง หรือคุณจะ git clone แหล่งที่มาของทรีจาก https://github.com/bazelbuild/bazel ก็ได้

  3. ติดตั้งข้อกำหนดเบื้องต้นเดียวกันกับการบูตสแตรป (ดู สำหรับระบบที่ใช้ Unix หรือ สำหรับ Windows)

  4. สร้างบิลด์สำหรับนักพัฒนาของ Bazel โดยใช้ Bazel: bazel build //src:bazel-dev (หรือ bazel build //src:bazel-dev.exe ใน Windows)

  5. ไบนารีที่ได้จะอยู่ที่ bazel-bin/src/bazel-dev (หรือ bazel-bin\src\bazel-dev.exe ใน Windows) คุณสามารถคัดลอกไบนารีนี้ไปไว้ที่ใดก็ได้และใช้งานได้ทันทีโดยไม่ต้องติดตั้งเพิ่มเติม

ดูวิธีการโดยละเอียดด้านล่าง

ขั้นตอนที่ 1: รับ Bazel เวอร์ชันล่าสุด

เป้าหมาย: ติดตั้งหรือดาวน์โหลด Bazel เวอร์ชันที่เผยแพร่ ตรวจสอบว่าคุณเรียกใช้ได้โดยพิมพ์ bazel ในเทอร์มินัล

เหตุผล: หากต้องการสร้าง Bazel จากแหล่งที่มาของทรีใน GitHub คุณต้องมีไบนารี Bazel ที่มีอยู่ก่อน คุณสามารถติดตั้งไบนารีจากตัวจัดการแพ็กเกจหรือดาวน์โหลดจาก GitHub ดูการติดตั้ง Bazel (หรือคุณจะสร้างใหม่ตั้งแต่ ต้น (บูตสแตรป) ก็ได้)

การแก้ปัญหา:

  • หากเรียกใช้ Bazel โดยพิมพ์ bazel ในเทอร์มินัลไม่ได้ ให้ทำดังนี้

    • ไดเรกทอรีของไบนารี Bazel อาจไม่ได้อยู่ใน PATH

      ซึ่งไม่ใช่ปัญหาใหญ่ คุณจะต้องพิมพ์เส้นทางแบบเต็มแทนการพิมพ์ bazel

    • ไบนารี Bazel เองอาจไม่ได้ชื่อ bazel (ใน Unix) หรือ bazel.exe (ใน Windows)

      ซึ่งไม่ใช่ปัญหาใหญ่ คุณสามารถเปลี่ยนชื่อไบนารีหรือพิมพ์ชื่อของไบนารีแทน bazel

    • ไบนารีอาจไม่ใช่ไฟล์ที่เรียกใช้งานได้ (ใน Unix)

      คุณต้องทำให้ไบนารีเป็นไฟล์ที่เรียกใช้งานได้โดยเรียกใช้ chmod +x /path/to/bazel

ขั้นตอนที่ 2: ดาวน์โหลดแหล่งที่มาของ Bazel จาก GitHub

หากคุณคุ้นเคยกับ Git ให้ใช้คำสั่ง git clone https://github.com/bazelbuild/bazel

กรณีอื่น

  1. ดาวน์โหลด แหล่งที่มาล่าสุดเป็นไฟล์ ZIP

  2. แยกเนื้อหาไว้ที่ใดที่หนึ่ง

    เช่น สร้างไดเรกทอรี bazel-src ในไดเรกทอรีแรกและแยกไฟล์ไว้ที่นั่น

ขั้นตอนที่ 3: ติดตั้งข้อกำหนดเบื้องต้น

ติดตั้งข้อกำหนดเบื้องต้นเดียวกันกับการบูตสแตรป (ดูด้านล่าง) เช่น JDK, คอมไพเลอร์ C++, MSYS2 (หากคุณสร้างใน Windows) เป็นต้น

ขั้นตอนที่ 4ก: สร้าง Bazel ใน Ubuntu Linux, macOS และระบบอื่นๆ ที่ใช้ Unix

สำหรับวิธีการของ Windows โปรดดูสร้าง Bazel ใน Windows

เป้าหมาย: เรียกใช้ Bazel เพื่อสร้างไบนารี Bazel ที่กำหนดเอง (bazel-bin/src/bazel-dev)

วิธีการ:

  1. เริ่มเทอร์มินัล Bash

  2. cd ไปยังไดเรกทอรีที่คุณแยก (หรือโคลน) แหล่งที่มาของ Bazel

    ตัวอย่างเช่น หากคุณแยกแหล่งที่มาไว้ในไดเรกทอรีแรก ให้เรียกใช้คำสั่งต่อไปนี้

    cd ~/bazel-src
    
  3. สร้าง Bazel จากแหล่งที่มา

    bazel build //src:bazel-dev
    

    หรือคุณจะเรียกใช้ bazel build //src:bazel --compilation_mode=opt เพื่อให้ได้ไบนารีขนาดเล็กลง แต่จะสร้างได้ช้าลง

    คุณสามารถสร้างด้วยแฟล็ก --stamp --embed_label=X.Y.Z เพื่อฝังเวอร์ชัน Bazel สำหรับไบนารีเพื่อให้ bazel --version แสดงเวอร์ชันที่ระบุ

  4. เอาต์พุตจะอยู่ที่ bazel-bin/src/bazel-dev (หรือ bazel-bin/src/bazel)

ขั้นตอนที่ 4ข: สร้าง Bazel ใน Windows

สำหรับวิธีการของระบบที่ใช้ Unix โปรดดู Ubuntu Linux, macOS และระบบอื่นๆ ที่ใช้ Unix

เป้าหมาย: เรียกใช้ Bazel เพื่อสร้างไบนารี Bazel ที่กำหนดเอง (bazel-bin\src\bazel-dev.exe)

วิธีการ:

  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 เพื่อให้ได้ไบนารีขนาดเล็กลง แต่จะสร้างได้ช้าลง

    คุณสามารถสร้างด้วยแฟล็ก --stamp --embed_label=X.Y.Z เพื่อฝังเวอร์ชัน Bazel สำหรับไบนารีเพื่อให้ bazel --version แสดงเวอร์ชันที่ระบุ

  4. เอาต์พุตจะอยู่ที่ bazel-bin\src\bazel-dev.exe (หรือ bazel-bin\src\bazel.exe)

ขั้นตอนที่ 5: ติดตั้งไบนารีที่สร้างขึ้น

จริงๆ แล้วคุณไม่ต้องติดตั้งอะไรเลย

เอาต์พุตของขั้นตอนก่อนหน้าคือไบนารี Bazel แบบสแตนด์อโลน คุณสามารถคัดลอกไบนารีนี้ไปยังไดเรกทอรีใดก็ได้และใช้งานได้ทันที (การคัดลอกไปยังไดเรกทอรีที่อยู่ใน PATH จะมีประโยชน์เพื่อให้คุณเรียกใช้ "bazel" ได้ทุกที่)


สร้าง Bazel ใหม่ตั้งแต่ต้น (บูตสแตรป)

คุณยังสร้าง Bazel ใหม่ตั้งแต่ต้นได้โดยไม่ต้องใช้ไบนารี Bazel ที่มีอยู่

ขั้นตอนที่ 1: ดาวน์โหลดแหล่งที่มาของ Bazel (ที่เก็บถาวรสำหรับการเผยแพร่)

(ขั้นตอนนี้เหมือนกันสำหรับทุกแพลตฟอร์ม)

  1. ดาวน์โหลด bazel-<version>-dist.zip จาก GitHub เช่น bazel-0.28.1-dist.zip

    ข้อควรทราบ:

    • มีที่เก็บถาวรสำหรับการเผยแพร่เพียงรายการเดียวที่ใช้ได้กับทุกสถาปัตยกรรม ไม่มีที่เก็บถาวรสำหรับการเผยแพร่ที่เฉพาะเจาะจงกับสถาปัตยกรรมหรือระบบปฏิบัติการ
    • แหล่งที่มาเหล่านี้ไม่เหมือนกับแหล่งที่มาของทรีใน GitHub คุณต้องใช้ที่เก็บถาวรสำหรับการเผยแพร่เพื่อบูตสแตรป Bazel คุณจะใช้แหล่งที่มาของทรีที่โคลนจาก GitHub ไม่ได้ (ที่เก็บถาวรสำหรับการเผยแพร่มีไฟล์แหล่งที่มาที่สร้างขึ้นซึ่งจำเป็นสำหรับการบูตสแตรปและไม่ได้เป็นส่วนหนึ่งของแหล่งที่มาของทรี Git ปกติ)
  2. แยกไฟล์ที่เก็บถาวรสำหรับการเผยแพร่ไว้ที่ใดที่หนึ่งในดิสก์

    คุณควรตรวจสอบลายเซ็นที่สร้างโดยคีย์การเผยแพร่ของ Bazel 3D5919B448457EE0

ขั้นตอนที่ 2ก: บูตสแตรป Bazel ใน Ubuntu Linux, macOS และระบบอื่นๆ ที่ใช้ Unix

สำหรับวิธีการของ Windows โปรดดู บูตสแตรป Bazel ใน Windows

2.1 ติดตั้งข้อกำหนดเบื้องต้น

  • Bash

  • zip, unzip

  • Toolchain บิลด์ C++

  • JDK ต้องใช้เวอร์ชัน 21

  • Python ต้องใช้เวอร์ชัน 3

ตัวอย่างเช่น ใน Ubuntu Linux คุณสามารถติดตั้งข้อกำหนดเหล่านี้ได้โดยใช้คำสั่งต่อไปนี้

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

2.2 บูตสแตรป Bazel ใน Unix

  1. เปิดเชลล์หรือหน้าต่างเทอร์มินัล

  2. cd ไปยังไดเรกทอรีที่คุณแยกไฟล์ที่เก็บถาวรสำหรับการเผยแพร่

  3. เรียกใช้สคริปต์การคอมไพล์: env EXTRA_BAZEL_ARGS="--tool_java_runtime_version=local_jdk" bash ./compile.sh

เอาต์พุตที่คอมไพล์แล้วจะอยู่ใน output/bazel ซึ่งเป็นไบนารี Bazel แบบสแตนด์อโลนที่ไม่มี JDK แบบฝัง คุณสามารถคัดลอกไบนารีนี้ไปไว้ที่ใดก็ได้หรือใช้ในตำแหน่งเดิม เพื่อความสะดวก ให้คัดลอกไบนารีนี้ไปยังไดเรกทอรีที่อยู่ใน PATH (เช่น /usr/local/bin ใน Linux)

หากต้องการสร้างไบนารี bazel ในลักษณะที่ทำซ้ำได้ ให้ตั้งค่า SOURCE_DATE_EPOCH ในขั้นตอน "เรียกใช้สคริปต์การคอมไพล์" ด้วย

ขั้นตอนที่ 2ข: บูตสแตรป Bazel ใน Windows

สำหรับวิธีการของระบบที่ใช้ Unix โปรดดู บูตสแตรป Bazel ใน Ubuntu Linux, macOS และระบบอื่นๆ ที่ใช้ Unix

2.1 ติดตั้งข้อกำหนดเบื้องต้น

  • เชลล์ MSYS2

  • แพ็กเกจ MSYS2 สำหรับ zip และ unzip เรียกใช้คำสั่งต่อไปนี้ในเชลล์ MSYS2

    pacman -S zip unzip patch
    
  • คอมไพเลอร์ Visual C++ ติดตั้งคอมไพเลอร์ Visual C++ เป็นส่วนหนึ่ง ของ Visual Studio 2015 หรือใหม่กว่า หรือติดตั้ง Build Tools สำหรับ Visual Studio 2017 เวอร์ชันล่าสุด

  • JDK ต้องใช้เวอร์ชัน 21

  • Python ระบบรองรับเวอร์ชัน 2 และ 3 โดยคุณติดตั้งเวอร์ชันใดเวอร์ชันหนึ่งก็เพียงพอ คุณต้องใช้เวอร์ชันเนทีฟของ Windows (ดาวน์โหลดได้จาก https://www.python.org) เวอร์ชันที่ติดตั้งผ่าน pacman ใน MSYS2 จะใช้ไม่ได้

2.2 บูตสแตรป Bazel ใน Windows

  1. เปิดเชลล์ MSYS2

  2. ตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้

    • BAZEL_VS หรือ BAZEL_VC (ตัวแปรทั้ง 2 ตัวนี้ไม่ เหมือนกัน): ตั้งค่าเป็น เส้นทางไปยังไดเรกทอรี Visual Studio (BAZEL_VS) หรือไปยังไดเรกทอรี Visual C++ (BAZEL_VC) การตั้งค่าตัวแปรใดตัวแปรหนึ่งก็เพียงพอ
    • BAZEL_SH: เส้นทางของ bash.exe ใน MSYS2 ดูคำสั่งในตัวอย่างด้านล่าง

      อย่าตั้งค่าตัวแปรนี้เป็น C:\Windows\System32\bash.exe (คุณจะมีไฟล์ดังกล่าวหากติดตั้ง Windows Subsystem for Linux) Bazel ไม่รองรับ bash.exe เวอร์ชันนี้

    • PATH: เพิ่มไดเรกทอรี Python

    • JAVA_HOME: ตั้งค่าเป็นไดเรกทอรี JDK

    ตัวอย่าง (ใช้ 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 แบบสแตนด์อโลนที่ไม่มี JDK แบบฝัง คุณสามารถคัดลอกไบนารีนี้ไปไว้ที่ใดก็ได้หรือใช้ในตำแหน่งเดิม เพื่อความสะดวก ให้คัดลอกไบนารีนี้ไปยังไดเรกทอรีที่อยู่ใน PATH

หากต้องการสร้างไบนารี bazel.exe ในลักษณะที่ทำซ้ำได้ ให้ตั้งค่า SOURCE_DATE_EPOCH ในขั้นตอน "เรียกใช้สคริปต์การคอมไพล์" ด้วย

คุณไม่จำเป็นต้องเรียกใช้ Bazel จากเชลล์ MSYS2 คุณสามารถเรียกใช้ Bazel จากพรอมต์คำสั่ง (cmd.exe) หรือ PowerShell