ForgeZero 1.9.0 (fz), một công cụ xây dựng dòng lệnh dành cho các dự án được viết bằng ngôn ngữ C, C++ và ngôn ngữ hợp ngữ (NASM, GAS, FASM), đã được phát hành. Công cụ này không yêu cầu Makefile hoặc các tệp cấu hình khác để sử dụng cơ bản. Mã nguồn dự án được viết bằng Go và được cấp phép theo giấy phép MIT.
ForgeZero tự động phát hiện loại tệp và chọn backend phù hợp. Mỗi tệp mã được biên dịch thành tệp đối tượng, sau đó được kiểm tra các ký hiệu toàn cục trùng lặp giữa tất cả các đối tượng và được liên kết thành một tệp thực thi duy nhất. Các tệp đã biên dịch được lưu vào bộ nhớ cache và chỉ được biên dịch lại sau khi có thay đổi đối với các tệp mã liên quan. Tùy chọn, việc theo dõi thay đổi hệ thống tệp và biên dịch lại cũng có thể được thực hiện sau khi cập nhật tệp mã.
Các trình biên dịch được hỗ trợ là GCC, Clang, G++ và Clang++; các trình hợp dịch là NASM, GAS và FASM; các trình liên kết là LD, GCC và Clang; và trình lưu trữ AR được hỗ trợ. Các cảnh báo bắt buộc cho C và C++ là: "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion". Các trình kiểm tra AddressSanitizer và UndefinedBehaviorSanitizer được bật theo mặc định (chúng có thể bị tắt bằng cờ -sanitize=false). Các nền tảng được hỗ trợ là: Linux, macOS, Windows (WSL2 và bản gốc thử nghiệm).
Những thay đổi chính trong phiên bản 1.9.0:
- Đã thêm cờ "-target". Công cụ này cho phép biên dịch chéo cho bất kỳ kiến trúc nào với các công cụ tiền tố phù hợp. fz tự động xác định tên của trình biên dịch, trình liên kết và trình lưu trữ dựa trên mã định danh được chỉ định (ví dụ: "arm-linux-gnueabihf-gcc"). Tất cả các nền tảng mục tiêu GNU tiêu chuẩn đều được hỗ trợ, bao gồm arm-linux-gnueabihf, aarch64-linux-gnu và riscv64-linux-gnu.
- Chức năng hỗ trợ Giao thức Máy chủ Ngôn ngữ (LSP) đã được triển khai. Cờ "-compile-commands" tạo ra tệp compile_commands.json (Cơ sở dữ liệu biên dịch) trong thư mục gốc của dự án. Tệp này được ngôn ngữ đọc. may chủ clangd và ccls cung cấp tính năng tự động hoàn thành, điều hướng mã và chẩn đoán trong các trình soạn thảo hỗ trợ LSP (Neovim, VSCode, CLion, Emacs, v.v.).
- Lệnh fz "-update" hiện lưu tập tin nhị phân hiện tại vào /usr/local/bin/fz.old trước khi cài đặt phiên bản mới, cho phép bạn quay lại phiên bản trước đó mà không cần cài đặt lại.
- Đã sửa lỗi trong các dự án đa thư mục, trong đó các tệp có cùng tên cơ sở từ các thư mục con khác nhau sẽ ghi đè lên các tệp đối tượng của nhau. Tên tệp đối tượng hiện được tạo dựa trên đường dẫn tương đối đầy đủ đến tệp nguồn.
- Đã triển khai chế độ tương tác "fz -shell" để biên dịch các tập tin đơn lẻ.
- Đã bổ sung thêm phạm vi kiểm thử cho các lệnh SplitCommand, CmdSet và CmdBuild. Phạm vi kiểm thử cho gói liên kết đã tăng từ 17% lên 60%, và phạm vi kiểm thử cho tất cả các gói đã vượt quá 40%.
- Đã thêm cơ chế thay thế CheckTool để kiểm thử các kịch bản có các thành phần chuỗi công cụ bị thiếu.
Những thay đổi so với các phiên bản trước:
- Phiên bản 1.8.0 triển khai việc biên dịch các thư viện tĩnh (-type static / -lib), đảm bảo tính duy nhất của tên tệp đối tượng trong các dự án đa thư mục và sửa lỗi trong hệ thống con biên dịch liên quan đến việc duyệt đường dẫn "..".
- Phiên bản 1.7.0 bổ sung tính năng biên dịch song song (-j N, 0 — tự động phát hiện số lõi), hỗ trợ các tập lệnh liên kết (-T) và địa chỉ điểm vào (-Ttext), chế độ tương tác (fz -shell), lựa chọn định dạng đầu ra rõ ràng (elf32, elf64, bin), biên dịch các tệp C++ (.cpp, .cc, .cxx) với cùng các cờ cảnh báo nghiêm ngặt như đối với C.
- Phiên bản 1.6.0 bổ sung chức năng khởi tạo dự án (fz -init, tạo các tệp .fz.yaml, .fzignore, README.md), hỗ trợ định dạng nhị phân (-format bin) cho bộ nạp khởi động và phần mềm nhúng, cùng các trường cấu hình libs, flags.cc, flags.asm, flags.ld.
- Phiên bản 1.5.0 giới thiệu nhiều thư mục nguồn (source_dirs), danh sách tệp rõ ràng (source_files), các mẫu bao gồm/loại trừ, trường libs cho thư viện liên kết, tệp .fzignore và hợp nhất nhiều cấp độ của các tệp cấu hình.
Nguồn: opennet.ru
