4

Bazel はモジュールを直接サポートしていません ( Issue #4005を参照)。

ただし、バゼルにカスタムCROSSTOOLを提供することは可能です。

https://docs.bazel.build/versions/0.22.0/crosstool-reference.htmlから:

デフォルトでは、Bazel はビルド用に CROSSTOOL を自動的に構成しますが、手動で構成するオプションがあります。

また、カスタム ルールを使用して bazel を拡張することもできます。

https://docs.bazel.build/versions/master/skylark/rules.htmlから:

Bazel 自体にはいくつかのルールが組み込まれています。cc_library や java_binary などのこれらのネイティブ ルールは、特定の言語のコア サポートを提供します。独自のルールを定義することで、Bazel がネイティブでサポートしていない言語やツールに対して同様のサポートを追加できます。

また、Bazel のモジュールの問題に関するこのコメントは、カスタム CROSSTOOL を使用して、ネイティブ サポートがなくてもモジュールをサポートできることを示唆しています。

モジュールに関するすべて (clang のみ) は、すでにオープン ソース化されています。唯一欠けているのは、それらを利用して必要なすべての機能を提供する CROSSTOOL です。

誰かがclang用のカスタムCROSSTOOLを書く方法と、それを使ってモジュール用のカスタムC++ルールを書く方法を示すことができますか(例cc_module)

基本モジュールを書く

// helloworld.cc
module;
#include <stdio.h>

export module helloworld;
export void hello();

module :private;
void hello() { puts("Hello world!"); }

モジュールを使用する

// main.cc
import helloworld;
int main() { hello(); }

パーツをビルド システムに統合する

cc_module(
   name = "helloworld",
   srcs = ["helloworld.cc"],
) # Compiles to a precomiled module file (PCM)

cc_binary(
  name = "main",
  srcs = [
    "main.cc",
  ],
  deps = [
     ":helloworld",
   ],
) # Compiles against the helloworld PCM
4

1 に答える 1