apollo如何添加第三方库,以pylon为例

1.在apollo/third_party/ 里面增加pylon文件夹

workspace.bazel

"""Loads the OpenCV library"""

# Sanitize a dependency so that it works correctly from code that includes
# Apollo as a submodule.
def clean_dep(dep):
    return str(Label(dep))

def repo():
    native.new_local_repository(
        name = "pylon",
        build_file = clean_dep("//third_party/pylon:pylon.BUILD"),
        path = "/apollo/third_party/pylon/pylon_6.2",
    )

pylon.BUILD

#TODO(storypku): split opencv into seperate components to speed up build
# e.g., opencv_imgproc/opencv_highgui/...

cc_library(
    name = "pylon",
    srcs = glob(["lib/*.so*"]),
    hdrs = glob(["include/**/*.hpp","include/**/*.h"]),
    includes = ["include"],
    visibility = ["//visibility:public"], 
    linkstatic = 1,
)

BUILD

package(
    default_visibility = ["//visibility:public"],
)

注意!

要在apollo/tools/workspace.bzl里面添加两行内容:

load("//third_party/pylon:workspace.bzl", pylon = "repo")
在def initialize_third_party()函数中增加

pylon()
# Apollo external dependencies that can be loaded in WORKSPACE files.
load("//third_party/pylon:workspace.bzl", pylon = "repo")
load("//third_party/absl:workspace.bzl", absl = "repo")
load("//third_party/adolc:workspace.bzl", adolc = "repo")
load("//third_party/adv_plat:workspace.bzl", adv_plat = "repo")
load("//third_party/ad_rss_lib:workspace.bzl", ad_rss_lib = "repo")
load("//third_party/atlas:workspace.bzl", atlas = "repo")
load("//third_party/benchmark:workspace.bzl", benchmark = "repo")
load("//third_party/boost:workspace.bzl", boost = "repo")
load("//third_party/civetweb:workspace.bzl", civetweb = "repo")
load("//third_party/cpplint:workspace.bzl", cpplint = "repo")
load("//third_party/eigen3:workspace.bzl", eigen = "repo")
load("//third_party/ffmpeg:workspace.bzl", ffmpeg = "repo")
load("//third_party/fftw3:workspace.bzl", fftw3 = "repo")
load("//third_party/fastrtps:workspace.bzl", fastrtps = "repo")
load("//third_party/glog:workspace.bzl", glog = "repo")
load("//third_party/gtest:workspace.bzl", gtest = "repo")
load("//third_party/gflags:workspace.bzl", gflags = "repo")
load("//third_party/ipopt:workspace.bzl", ipopt = "repo")
load("//third_party/local_integ:workspace.bzl", local_integ = "repo")
load("//third_party/libtorch:workspace.bzl", libtorch_cpu = "repo_cpu", libtorch_gpu = "repo_gpu")
load("//third_party/lz4:workspace.bzl", lz4 = "repo")
load("//third_party/ncurses5:workspace.bzl", ncurses5 = "repo")
load("//third_party/nlohmann_json:workspace.bzl", nlohmann_json = "repo")
load("//third_party/npp:workspace.bzl", npp = "repo")
load("//third_party/opencv:workspace.bzl", opencv = "repo")
load("//third_party/opengl:workspace.bzl", opengl = "repo")
load("//third_party/openh264:workspace.bzl", openh264 = "repo")
load("//third_party/osqp:workspace.bzl", osqp = "repo")
load("//third_party/poco:workspace.bzl", poco = "repo")
load("//third_party/portaudio:workspace.bzl", portaudio = "repo")
load("//third_party/proj:workspace.bzl", proj = "repo")
load("//third_party/protobuf:workspace.bzl", protobuf = "repo")
load("//third_party/qt5:workspace.bzl", qt5 = "repo")
load("//third_party/sqlite3:workspace.bzl", sqlite3 = "repo")
load("//third_party/tinyxml2:workspace.bzl", tinyxml2 = "repo")
load("//third_party/uuid:workspace.bzl", uuid = "repo")
load("//third_party/yaml_cpp:workspace.bzl", yaml_cpp = "repo")
# load("//third_party/glew:workspace.bzl", glew = "repo")

load("//third_party/gpus:cuda_configure.bzl", "cuda_configure")
load("//third_party/py:python_configure.bzl", "python_configure")
load("//third_party/tensorrt:tensorrt_configure.bzl", "tensorrt_configure")
load("//third_party/vtk:vtk_configure.bzl", "vtk_configure")
load("//third_party/pcl:pcl_configure.bzl", "pcl_configure")

def initialize_third_party():
    """ Load third party repositories.  See above load() statements. """
    pylon()
    absl()
    adolc()
    adv_plat()
    ad_rss_lib()
    atlas()
    benchmark()
    boost()
    cpplint()
    civetweb()
    eigen()
    fastrtps()
    ffmpeg()
    fftw3()
    gflags()
    glog()
    gtest()
    ipopt()
    local_integ()
    libtorch_cpu()
    libtorch_gpu()
    lz4()
    ncurses5()
    nlohmann_json()
    npp()
    opencv()
    opengl()
    openh264()
    osqp()
    poco()
    portaudio()
    proj()
    protobuf()
    qt5()
    sqlite3()
    tinyxml2()
    uuid()
    yaml_cpp()

# Define all external repositories required by
def apollo_repositories():
    cuda_configure(name = "local_config_cuda")
    tensorrt_configure(name = "local_config_tensorrt")
    python_configure(name = "local_config_python")
    vtk_configure(name = "local_config_vtk")
    pcl_configure(name = "local_config_pcl")

    initialize_third_party()

在终端输入此行命令检查该库是否增加成功:

ls $(bazel info output_base)/external

可以看到@pylon.marker 和 pylon,说明第三方库已经被增加到bazel里面了。

 期间,注意pylon的路径问题,路径出错可是在构建过程中并没有报错,导致一直不成功也没发现原因,后来单独编译此包时发现路径错误,添加正确路径后即可添加成功。

./apollo.sh build_opt
./apollo.sh clean 
Usage:
  /apollo/scripts/apollo_clean.sh [options]
Options:
    --bazel     Remove bazel output
    --core      Remove coredump files
    --log       Remove log files
    -a, --all   Equivalent to "--bazel --core --log"
    --expunge   Run "bazel clean --expunge"
    -h, --help  Show this message and exit

可以通过./apollo.sh clean --expunge 去掉bazel第三方库依赖,
再 ./apollo.sh build_opt 可以重新构建bazel第三方库依赖。

或许有更简单的方法,欢迎分享。

参考自 https://github.com/ApolloAuto/apollo/blob/master/docs/howto/how_to_add_an_external_dependency.md

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
百度Apollo是一个自动驾驶开发平台,而Docker是一种容器化技术。要在Apollo添加软件仓库,首先需要在Apollo项目中创建一个Dockerfile文件来描述容器的构建过程。在Dockerfile中,我们可以指定所需的软件和依赖项,并可以通过添加命令来从指定的软件仓库中下载和安装这些软件。 对于百度Apollo来说,我们可以选择使用官方的Docker Hub仓库或自己创建私有的Docker镜像仓库。如果选择使用官方的Docker Hub仓库,我们可以通过在Dockerfile中使用适当的镜像作为基础镜像来添加软件仓库。如,我们可以使用"FROM baidu/apollo:latest"来指定基础镜像,并在接下来的步骤中添加任何其他的软件仓库。 如果选择自己创建私有的Docker镜像仓库,则需要先在服务器上搭建一个Docker镜像仓库,再在Apollo项目的Dockerfile中指定该私有仓库的地址。在Dockerfile中,我们可以使用"FROM <私有仓库地址>/baidu/apollo:latest"的形式来指定私有仓库的基础镜像,并且可以在后续步骤中继续添加其他软件仓库。 添加完软件仓库后,我们可以通过构建和运行Docker容器来使用修改后的Apollo项目。构建和运行容器需要使用Docker命令,如"docker build"和"docker run"来执行。构建过程会根据Dockerfile中的指令执行下载和安装所需的软件包,最终生成一个包含完整Apollo项目的Docker镜像。运行容器时,可以使用"docker run"命令指定容器所需的资源和网络配置。 总之,百度Apollo使用Docker进行容器化,并可以通过在Dockerfile中指定软件仓库来添加所需的软件和依赖项。这样可以方便地进行代码开发和测试,并且易于部署和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值