รวบรวม 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) เป็นต้น

ขั้นตอนที่ 4a: สร้าง 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)

ขั้นตอนที่ 4b: สร้าง 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

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

ดูวิธีการสำหรับ Windows ได้ที่ บูตสแตรป Bazel ใน Windows

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

  • Bash

  • zip, unzip

  • Toolchain บิลด์ C++

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

  • Python ระบบรองรับเวอร์ชัน 2 และ 3 การติดตั้งเวอร์ชันใดเวอร์ชันหนึ่งก็เพียงพอแล้ว

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

sudo apt-get install build-essential openjdk-21-jdk python 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 ในขั้นตอน "เรียกใช้สคริปต์การคอมไพล์" ด้วย

ขั้นตอนที่ 2b: บูตสแตรป 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 (ไม่เหมือนกัน): ตั้งค่าเป็นเส้นทางไปยังไดเรกทอรี 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 ได้