プロジェクトプロパティ
プロジェクトプロパティは、ソースコードではなく 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_WIDTH は 8 になります。ここで指定しなかったプロパティは、依存プロジェクトの Veryl.toml で定義された既定値のままなので、$prop::ENABLE_DEBUG は false のままです。
詳細は依存関係を参照してください。