Envoy编译篇:Starlark语言

bazel的编译中使用了Starlark语言,这种语言类似于python语言,详细内容可以参考 :https://docs.bazel.build/versions/4.2.1/skylark/language.html

本篇文章属于小白文章,只是为了把这个语言的具体内容罗列出来,方便后续参考。

一、Starlark语言简介:

语法格式如下所示:

9e772ed326d97ff49a7a08e3363f541f.png

load(":foo.bzl", "var", "fct") # loads `var`, and `fct` from `./foo.bzl`

这里的load 的作用是引用指定bzl文件./foo.bzl里面的var和fct。

二、envoy里面的例子

Envoy里面的WORKSPACE里面就使用了Starlark语言,如下所示:

$ pwd
/Users/XXXX/envoy
$ cat WORKSPACE
workspace(name = "envoy")
// 备注:下面的load 是从/envoy/bazel/api_binding.bzl去执行envoy_api_binding()函数
load("//bazel:api_binding.bzl", "envoy_api_binding")


envoy_api_binding()


load("//bazel:api_repositories.bzl", "envoy_api_dependencies")


envoy_api_dependencies()


load("//bazel:repositories.bzl", "envoy_dependencies")


envoy_dependencies()


load("//bazel:repositories_extra.bzl", "envoy_dependencies_extra")


envoy_dependencies_extra()


load("//bazel:dependency_imports.bzl", "envoy_dependency_imports")


envoy_dependency_imports()

如下所示:

898f386b3f01ff1be9f3254871bc5817.png

引用的代码如下所示:

def envoy_api_binding():
    # Treat the data plane API as an external repo, this simplifies exporting
    # the API to https://github.com/envoyproxy/data-plane-api. This is the
    # shadow API for Envoy internal use, see #9479.
    if "envoy_api" not in native.existing_rules().keys():
        _default_envoy_api(name = "envoy_api", reldir = "generated_api_shadow")


    # We also provide the non-shadowed API for developer use (see #9479).
    if "envoy_api_raw" not in native.existing_rules().keys():
        _default_envoy_api(name = "envoy_api_canonical", reldir = "api")


    # TODO(https://github.com/envoyproxy/envoy/issues/7719) need to remove both bindings and use canonical rules
    native.bind(
        name = "api_httpbody_protos",
        actual = "@com_google_googleapis//google/api:httpbody_cc_proto",
    )
    native.bind(
        name = "http_api_protos",
        actual = "@com_google_googleapis//google/api:annotations_cc_proto",
    )

从上面的代码就可以看出来,这个api_binding.bzl文件里面的envoy_api_binding()函数跟python长得很像,代码比较简单,就不做解析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值