Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

プロジェクトプロパティ

プロジェクトプロパティは、ソースコードではなく Veryl.toml から与えられるコンパイル時定数です。ソースコードの外側からプロジェクトを設定するのに便利です。例えば、ライブラリを依存するプロジェクトごとに異なるデータ幅でビルドできます。

定義

プロジェクトプロパティは Veryl.toml[properties] セクションで定義します。プロパティの値は整数または真偽値です。

[project]
name    = "veryl_sample"
version = "0.1.0"

[properties]
DATA_WIDTH   = 32
ENABLE_DEBUG = false

詳細はプロジェクトの設定を参照してください。

参照

定義したプロパティは $prop 名前空間を通して参照できます。整数のプロパティは i64 型、真偽値のプロパティは bbool 型になります。

package sample_pkg {
    const DATA_WIDTH  : i64   = $prop::DATA_WIDTH;
    const ENABLE_DEBUG: bbool = $prop::ENABLE_DEBUG;
}

$prop は常に、そのソースコードが属するプロジェクトのプロパティを指します。したがって、依存プロジェクトのプロパティを、それに依存する側のプロジェクトから参照することはできません。

プロジェクトプロパティはコンパイル時定数なので、定数式が使える場所であればどこでも使えます。値はコンパイル時に解決され、解決された値が生成コードに現れます。

module ModuleA {
    var a: logic<$prop::DATA_WIDTH>;

    if $prop::ENABLE_DEBUG :g_debug {
        // debug logic
    }
}

依存する側のプロジェクトからの設定

プロジェクトプロパティの値は、それに依存する側のプロジェクトが [dependencies] セクションの properties フィールドで上書きできます。

[dependencies]
veryl_sample = {github = "veryl-lang/veryl_sample", version = "0.1.0", properties = {DATA_WIDTH = 8}}

上の例では、veryl_sample$prop::DATA_WIDTH8 になります。ここで指定しなかったプロパティは、依存プロジェクトの Veryl.toml で定義された既定値のままなので、$prop::ENABLE_DEBUGfalse のままです。

詳細は依存関係を参照してください。