C、C++、およびアセンブリ言語(NASM、GAS、FASM)で記述されたプロジェクト向けのコマンドラインビルドツールであるForgeZero 1.9.0(fz)がリリースされました。このツールは、基本的な使用においてMakefileやその他の設定ファイルを必要としません。プロジェクトコードはGo言語で記述されており、MITライセンスの下で提供されています。
ForgeZeroはファイルの種類を検出し、適切なバックエンドを自動的に選択します。各コードファイルはオブジェクトファイルにコンパイルされ、すべてのオブジェクト間で重複するグローバルシンボルがチェックされた後、単一の実行可能ファイルにリンクされます。コンパイル済みのファイルはキャッシュされ、関連するコードファイルに変更が加えられた後にのみ再コンパイルされます。オプションとして、コードファイルの更新後にファイルシステムの変更を追跡し、再コンパイルすることも可能です。
サポートされているコンパイラは GCC、Clang、G++、Clang++ です。アセンブラは NASM、GAS、FASM です。リンカは LD、GCC、Clang です。AR アーカイバもサポートされています。C および C++ の必須警告は "-Wall -Wextra -Werror -Wpedantic -Wshadow -Wconversion" です。AddressSanitizer および UndefinedBehaviorSanitizer サニタイザーはデフォルトで有効になっています (-sanitize=false フラグで無効にできます)。サポートされているプラットフォームは次のとおりです。 Linux, macOS, Windows (WSL2および実験的にネイティブに対応)。
バージョン 1.9.0 の主な変更点:
- 「-target」フラグを追加しました適切なプレフィックスツールを使用すれば、あらゆるアーキテクチャ向けにクロスコンパイルが可能になります。fz は、指定された識別子 (例: "arm-linux-gnueabihf-gcc") に基づいて、コンパイラ、リンカ、アーカイバの名前を自動的に決定します。arm-linux-gnueabihf、aarch64-linux-gnu、riscv64-linux-gnu を含む、すべての標準 GNU ターゲットプラットフォームがサポートされています。
- 言語サーバープロトコル(LSP)のサポートが実装されました。「-compile-commands」フラグは、プロジェクトルートにcompile_commands.json(コンパイルデータベース)ファイルを生成します。このファイルは言語によって読み込まれます。 サーバー clangdとcclsは、LSPをサポートするエディタ(Neovim、VSCode、CLion、Emacsなど)で、オートコンプリート、コードナビゲーション、診断機能を提供します。
- fzの「-update」コマンドは、新しいバージョンをインストールする前に現在のバイナリを/usr/local/bin/fz.oldに保存するようになりました。これにより、再インストールせずに以前のバージョンに戻すことができます。
- 複数のディレクトリで構成されるプロジェクトにおいて、異なるサブディレクトリにある同一のベース名を持つファイルが互いのオブジェクトファイルを上書きしてしまうバグを修正しました。オブジェクトファイル名は、ソースファイルへの完全な相対パスに基づいて生成されるようになりました。
- 単一ファイルを作成するための対話型モード「fz -shell」を実装しました。
- SplitCommand、CmdSet、およびCmdBuildコマンドのテストカバレッジが追加されました。リンカーパッケージのテストカバレッジは17%から60%に増加し、すべてのパッケージのカバレッジは40%を超えました。
- ツールチェーンコンポーネントが欠落しているシナリオをテストするための、CheckToolの代替メカニズムを追加しました。
以前のリリースからの変更点:
- バージョン 1.8.0 では、静的ライブラリ (-type static / -lib) のアセンブリを実装し、マルチディレクトリ プロジェクトでのオブジェクト ファイル名の一意性を保証し、アセンブリ サブシステムにおける ".." パスの走査に関連するエラーを修正しています。
- バージョン 1.7.0 では、並列コンパイル (-j N、0 - コア数の自動検出)、リンカー スクリプト (-T) およびエントリ ポイント アドレス (-Ttext) のサポート、対話モード (fz -shell)、出力フォーマット (elf32、elf64、bin) の明示的な選択、C と同じ厳密な警告フラグを使用した C++ ファイル (.cpp、.cc、.cxx) のコンパイルが追加されました。
- バージョン 1.6.0 では、プロジェクトの初期化 (fz -init、.fz.yaml、.fzignore、README.md を作成)、ブートローダーとファームウェアの bin フォーマットのサポート (-format bin)、および設定フィールド libs、flags.cc、flags.asm、flags.ld が追加されました。
- バージョン1.5.0では、複数のソースディレクトリ(source_dirs)、明示的なファイルリスト(source_files)、インクルード/エクスクルードパターン、リンカーライブラリ用のlibsフィールド、.fzignoreファイル、および設定ファイルのマルチレベルマージが導入されました。
出所: オープンネット.ru
