[bazel apollo] bazel CMake link Caffe Enet - e-guy/e-guyNotes GitHub Wiki
在apollo 中使用bazel 编译链接Caffe-Enet
0. introduction
建立bazel 编译项目(例如下面的程序main.cpp), 调用 caffe-enet 库 (在apollo@docker 中编译好caffe-enet, 确认.so 和头文件的位置. 假设 caffe-enet 位置为 /apollo/modules/qperception/src/lane_detector/scripts/ENet/caffe-enet, 自己的 package 项目 在 /apollo/modules/qperception/src/tailangle_calcu)
./tailangle_calcu/
./tailangle_calcu/src/caffe_enet_test.cpp
./tailangle_calcu/CMakeLists.txt # build with CMake
./tailangle_calcu/BUILD # build with bazel
使用 bazel
1. 在 indocker$ /apollo 目录下的WORKSPACE.in文件中添加:
# Caffe enet
new_local_repository(
name = "caffe_enet",
build_file = "third_party/caffe_enet.BUILD",
path = "/apollo/modules/qperception/src/lane_detector/scripts/ENet/caffe-enet",
)
2. 在 indocker$ /apollo/third_party/ 目录下新建 caffe_enet.BUILD 文件:
licenses(["notice"])
package(default_visibility = ["//visibility:public"])
cc_library(
name = "core",
srcs = [
"build/lib/libcaffe.so",
],
includes = ["include",],
linkopts = [
"-Wl,-rpath,/apollo/modules/qperception/src/lane_detector/scripts/ENet/caffe-enet/build/lib",
#"-lcaffe",
"-Wl,-rpath,/usr/lib/x86_64-linux-gnu/",
"-lopencv_core",
"-lopencv_highgui",
"-lopencv_imgproc",
],
)
3. 在自己的 bazel package 根目录中 添加 BUILD 文件:
load("//tools:cpplint.bzl", "cpplint")
package(default_visibility = ["//visibility:public"])
cc_binary(
name = "caffe_enet_test",
srcs = ["src/caffe_enet_test.cpp",],
deps = ["@caffe_enet//:core",
# "@opencv2//:core", # or "-lopencv_core" in linkopts
],
linkopts = ["-lboost_system", "-lglog", "-lopencv_imgproc", "-lopencv_core",],
)
4. 编译与执行
rr@in_dev_docker:/apollo$ bazel build //modules/qperception/src/tailangle_calcu:caffe_enet_test --verbose_failures
rr@in_dev_docker:/apollo/bazel-bin/modules/qperception/src/tailangle_calcu$ ./caffe_enet_test /apollo/modules/qperception/src/tailangle_calcu/example_data/lenet.prototxt /apollo/modules/qperception/src/tailangle_calcu/example_data/lenet_iter_10000.caffemodel
使用CMake
1. 在自己的 package 根目录中 添加 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 2.8)
project(tailangle_calcu)
set(CMAKE_CXX_STANDARD 11)
include_directories("/apollo/modules/qperception/src/lane_detector/scripts/ENet/caffe-enet/include")
link_directories("/apollo/modules/qperception/src/lane_detector/scripts/ENet/caffe-enet/build/lib") # libcaffe.so
# cuda
include_directories("/usr/local/cuda/include")
link_directories("/usr/local/cuda/lib64")
set(SOURCE_FILES src/segmentation.cpp)
add_executable(caffe_enet_test ${SOURCE_FILES})
# opencv
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV_INCLUDE_DIRS = ${OpenCV_INCLUDE_DIRS}")
message(STATUS "OpenCV_LIBS = ${OpenCV_LIBS}")
target_link_libraries(caffe_enet_test ${OpenCV_LIBS} )
# cublas是cuda的
target_link_libraries(caffe_enet_test libcaffe.so cublas boost_system glog)
2. 编译与执行
rr@in_dev_docker:/apollo/modules/qperception/src/tailangle_calcu$ mkdir build && cd build
rr@in_dev_docker:/apollo/modules/qperception/src/tailangle_calcu/build$ cmake ..
rr@in_dev_docker:/apollo/modules/qperception/src/tailangle_calcu/build$ make
rr@in_dev_docker:/apollo/modules/qperception/src/tailangle_calcu/build$ ./caffe_enet_test ../example_data/lenet.prototxt ../example_data/lenet_iter_10000.caffemodel 4