การรวบรวม Bazel จากต้นทาง

รายงานปัญหา ดูแหล่งที่มา

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

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

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

สรุป

  1. ดู Bazel รุ่นล่าสุดจากหน้าที่เผยแพร่ GitHub หรือกับ Bazelisk

  2. ดาวน์โหลดแหล่งที่มาของ Bazel จาก GitHub และแยกไฟล์ออกจากที่อื่น หรืออาจโคลนแผนผังต้นทางจาก 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 (หรือจะสร้างจาก Scratch (รองเท้าบู๊ต) ก็ได้)

การแก้ปัญหา

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

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

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

    • ไบนารีของ Bazel อาจไม่ได้เรียกว่า bazel (ใน Unixes) หรือ bazel.exe (ใน Windows)

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

    • ไบนารีนั้นเป็นไฟล์ปฏิบัติการไม่ได้ (ใน Unixes)

      คุณต้องทําให้ไฟล์ไบนารีไบนารีทํางานโดยการเรียกใช้ 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 เพื่อสร้างไบนารีขนาดเล็กลงก็ได้ แต่สร้างได้ช้ากว่า

  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. เริ่ม Command Prompt (เมนูเริ่ม > เรียกใช้ > "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 เพื่อกําหนดให้ไบนารีขนาดเล็กลงแต่สร้างช้าลงก็ได้

  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. คลายไฟล์ที่เก็บถาวรของการเผยแพร่ในดิสก์

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

ขั้นตอนที่ 2A: Bootstrap Bazel บน Ubuntu Linux, macOS และระบบอื่นๆ ที่คล้ายกับ Unix

โปรดดูวิธีการสําหรับ Windows ที่หัวข้อ Bootstrap Bazel บน Windows

2.1. ติดตั้งข้อกําหนดเบื้องต้น

  • บาช

  • zip, แตกไฟล์

  • เชนเครื่องมือสร้าง C++

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

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

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

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

2.2. รองเท้าบู๊ตสเต็ป Bazel บน Unix

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

  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: Bootstrap Bazel บน Windows

ดูวิธีการสําหรับระบบที่มีลักษณะเหมือน Unix ได้ที่ Bootstrap Bazel บน Ubuntu Linux, macOS และระบบอื่นๆ ที่คล้ายกับ Unix

2.1. ติดตั้งข้อกําหนดเบื้องต้น

  • MSYS2 เปลือก

  • แพ็กเกจ MSYS2 สําหรับการเพิ่มและแตกไฟล์ เรียกใช้คําสั่งต่อไปนี้ใน MSYS2 Shell

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

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

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

2.2. Bootstrap Bazel บน Windows

  1. เปิด MSYS2 Shell

  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: ตั้งค่าเป็นไดเรกทอรี 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/jdk1.8.0_112"
    

    หรือ (โดยใช้ 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/jdk1.8.0_112"
    
  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 Shell คุณสามารถเรียกใช้ Bazel จาก Command Prompt (cmd.exe) หรือ PowerShell