首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Envoy编译篇:Starlark语言

Envoy编译篇:Starlark语言

作者头像
灰子学技术
发布2022-03-29 15:54:05
8010
发布2022-03-29 15:54:05
举报
文章被收录于专栏:灰子学技术灰子学技术

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

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

一、Starlark语言简介:

语法格式如下所示:

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()

如下所示:

引用的代码如下所示:

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长得很像,代码比较简单,就不做解析。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灰子学技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档