From d92cbf971f4f67ba071ac72566af1bf14351db66 Mon Sep 17 00:00:00 2001 From: James Otting Date: Wed, 14 Jun 2023 19:17:04 -0500 Subject: [PATCH 01/17] Streamline CMake and build system, move to newer protobuf --- Makefile | 45 ++- viam-cartographer/CMakeLists.txt | 276 ++++------------ .../cartographer_build_utils/carto.patch | 295 ++++++++++++++++++ viam-cartographer/cmake/functions.cmake | 143 --------- .../cmake/modules/FindEigen3.cmake | 30 -- .../scripts/build_cartographer.sh | 25 -- .../scripts/build_viam_cartographer.sh | 29 -- .../scripts/build_viam_cartographer_debug.sh | 33 -- .../scripts/setup_cartographer.sh | 20 ++ .../scripts/setup_cartographer_linux.sh | 5 - .../scripts/setup_cartographer_macos.sh | 10 - 11 files changed, 395 insertions(+), 516 deletions(-) create mode 100644 viam-cartographer/cartographer_build_utils/carto.patch delete mode 100644 viam-cartographer/cmake/functions.cmake delete mode 100644 viam-cartographer/cmake/modules/FindEigen3.cmake delete mode 100755 viam-cartographer/scripts/build_cartographer.sh delete mode 100755 viam-cartographer/scripts/build_viam_cartographer.sh delete mode 100755 viam-cartographer/scripts/build_viam_cartographer_debug.sh create mode 100755 viam-cartographer/scripts/setup_cartographer.sh delete mode 100755 viam-cartographer/scripts/setup_cartographer_linux.sh delete mode 100755 viam-cartographer/scripts/setup_cartographer_macos.sh diff --git a/Makefile b/Makefile index 29e51ed6..841c6ff4 100644 --- a/Makefile +++ b/Makefile @@ -7,26 +7,32 @@ GO_BUILD_LDFLAGS = -ldflags "-X 'main.Version=${TAG_VERSION}' -X 'main.GitRevisi ARTIFACT="~/go/bin/artifact" +ifneq (, $(shell which brew)) + EXTRA_CMAKE_FLAGS := -DCMAKE_PREFIX_PATH=$(shell brew --prefix) -DQt5_DIR=$(shell brew --prefix qt5)/lib/cmake/Qt5 + export PKG_CONFIG_PATH := $(shell brew --prefix openssl@3)/lib/pkgconfig +endif + +default: build + artifact-pull: PATH=${PATH_WITH_TOOLS} artifact pull bufinstall: sudo apt-get install -y protobuf-compiler-grpc libgrpc-dev libgrpc++-dev || brew install grpc openssl --quiet -bufsetup: +grpc/bin/buf: GOBIN=`pwd`/grpc/bin go install github.com/bufbuild/buf/cmd/buf@v1.8.0 - ln -sf `which grpc_cpp_plugin` grpc/bin/protoc-gen-grpc-cpp -buf: bufsetup +grpc/bin/protoc-gen-grpc-cpp: + which grpc_cpp_plugin && ln -sf `which grpc_cpp_plugin` grpc/bin/protoc-gen-grpc-cpp + +buf: grpc/bin/buf grpc/bin/protoc-gen-grpc-cpp PATH="${PATH}:`pwd`/grpc/bin" buf generate --template ./buf/buf.gen.yaml buf.build/viamrobotics/api PATH="${PATH}:`pwd`/grpc/bin" buf generate --template ./buf/buf.grpc.gen.yaml buf.build/viamrobotics/api PATH="${PATH}:`pwd`/grpc/bin" buf generate --template ./buf/buf.gen.yaml buf.build/googleapis/googleapis clean: - rm -rf grpc - rm -rf bin - rm -rf viam-cartographer/build - rm -rf viam-cartographer/cartographer/build + rm -rf grpc bin viam-cartographer/build clean-all: git clean -fxd @@ -38,6 +44,7 @@ ensure-submodule-initialized: else \ echo "Submodule found successfully"; \ fi + cd viam-cartographer/cartographer && git checkout . && git apply ../cartographer_build_utils/carto.patch lint-setup-cpp: ifeq ("Darwin", "$(shell uname -s)") @@ -71,26 +78,14 @@ lint-go: lint: ensure-submodule-initialized lint-cpp lint-go setup: ensure-submodule-initialized -ifeq ("Darwin", "$(shell uname -s)") - cd viam-cartographer/scripts && ./setup_cartographer_macos.sh -else - cd viam-cartographer/scripts && ./setup_cartographer_linux.sh -endif + viam-cartographer/scripts/setup_cartographer.sh @make artifact-pull - -build: build-module -ifneq ($(wildcard viam-cartographer/cartographer/build/.),) - cd viam-cartographer && ./scripts/build_viam_cartographer.sh -else - cd viam-cartographer && ./scripts/build_cartographer.sh && ./scripts/build_viam_cartographer.sh -endif -build-debug: build-module -ifneq ($(wildcard viam-cartographer/cartographer/build/.),) - cd viam-cartographer && ./scripts/build_viam_cartographer_debug.sh -else - cd viam-cartographer && ./scripts/build_cartographer.sh && ./scripts/build_viam_cartographer_debug.sh -endif +build: ensure-submodule-initialized buf build-module + cd viam-cartographer && cmake -Bbuild -G Ninja ${EXTRA_CMAKE_FLAGS} && cmake --build build + +build-debug: EXTRA_CMAKE_FLAGS+=" -DCMAKE_BUILD_TYPE=Debug" +build-debug: build build-module: mkdir -p bin && go build $(GO_BUILD_LDFLAGS) -o bin/cartographer-module module/main.go diff --git a/viam-cartographer/CMakeLists.txt b/viam-cartographer/CMakeLists.txt index 8530008d..65a07eca 100644 --- a/viam-cartographer/CMakeLists.txt +++ b/viam-cartographer/CMakeLists.txt @@ -1,237 +1,81 @@ cmake_minimum_required(VERSION 3.2) project(viam-cartographer) -add_definitions(-DABSL_LEGACY_THREAD_ANNOTATIONS) +set (CMAKE_CXX_STANDARD 17) -set(VIAM_CARTOGRAPHER_MAJOR_VERSION 1) -set(VIAM_CARTOGRAPHER_MINOR_VERSION 0) -set(VIAM_CARTOGRAPHER_PATCH_VERSION 0) -set(VIAM_CARTOGRAPHER_VERSION ${CARTOGRAPHER_MAJOR_VERSION}.${CARTOGRAPHER_MINOR_VERSION}.${CARTOGRAPHER_PATCH_VERSION}) -set(VIAM_CARTOGRAPHER_SOVERSION ${CARTOGRAPHER_MAJOR_VERSION}.${CARTOGRAPHER_MINOR_VERSION}) +if(DEFINED ENV{API_SOURCE_DIR}) + set(API_SOURCE_DIR $ENV{API_SOURCE_DIR}) +else() + set(API_SOURCE_DIR ${PROJECT_SOURCE_DIR}/..) +endif() +set(GRPC_SRC_DIR ${API_SOURCE_DIR}/grpc/cpp/gen) -include("${PROJECT_SOURCE_DIR}/cmake/functions.cmake") +if(NOT EXISTS ${GRPC_SRC_DIR}) +message(FATAL_ERROR + "RDK C++ gRPC gen files not found. Please specify the absolute path to your API_SOURCE_DIR e.g. 'export API_SOURCE_DIR=/home/user/api'" +) +endif() -find_package(absl REQUIRED) -find_package(Ceres REQUIRED COMPONENTS SuiteSparse) -find_package(Lua 5.2 REQUIRED) +message("PROJECT SOURCE DIR: " ${PROJECT_SOURCE_DIR}) +message("API SOURCE DIR: " ${API_SOURCE_DIR}) +message("GRPC SOURCE DIR: " ${GRPC_SRC_DIR}) -# include files/library from cartographer submodule -include_directories(${PROJECT_SOURCE_DIR}/cartographer) -include_directories(${PROJECT_SOURCE_DIR}/cartographer/build) -link_libraries(${PROJECT_SOURCE_DIR}/cartographer/build/libcartographer.a) -find_package(PCL REQUIRED) -include_directories(${PCL_INCLUDE_DIRS}) -link_directories(${PCL_LIBRARY_DIRS}) -add_definitions(${PCL_DEFINITIONS}) +# dependencies +add_subdirectory(cartographer) -find_package(OpenSSL REQUIRED) +find_package(PkgConfig REQUIRED) +pkg_check_modules(GRPCPP REQUIRED grpc++) -if(WIN32) - # On Windows, Protobuf is incorrectly found by the bundled CMake module, so prefer native CMake config. - set(protobuf_MODULE_COMPATIBLE TRUE CACHE INTERNAL "") - find_package(Protobuf 3.0.0 CONFIG) -else() - find_package(Protobuf 3.4.0 REQUIRED) -endif() +find_package(absl REQUIRED) +add_definitions(-DABSL_LEGACY_THREAD_ANNOTATIONS) + +find_package(PCL REQUIRED) -include(FindPkgConfig) -if (NOT WIN32) - PKG_SEARCH_MODULE(CAIRO REQUIRED cairo>=1.12.16) -else() - find_library(CAIRO_LIBRARIES cairo) -endif() +# build sources list file(GLOB_RECURSE ALL_VIAM_HDRS "src/*.h") file(GLOB_RECURSE ALL_VIAM_SRCS "src/*.cc") file(GLOB_RECURSE ALL_VIAM_C_SRCS "src/*.c") file(GLOB_RECURSE ALL_VIAM_TEST_SRCS "src/*_test.cc") list(REMOVE_ITEM ALL_VIAM_SRCS ${ALL_VIAM_TEST_SRCS}) - -if(DEFINED ENV{API_SOURCE_DIR}) - set(API_SOURCE_DIR $ENV{API_SOURCE_DIR}) -else() - set(API_SOURCE_DIR ${PROJECT_SOURCE_DIR}/..) +# remove dotfiles/-folders that could potentially pollute the build. +file(GLOB_RECURSE ALL_DOTFILES ".*/*") +if (ALL_DOTFILES) + list(REMOVE_ITEM ALL_VIAM_HDRS ${ALL_DOTFILES}) + list(REMOVE_ITEM ALL_VIAM_SRCS ${ALL_DOTFILES}) endif() -set(SRCDIR ${API_SOURCE_DIR}/grpc/cpp/gen) -message("PROJECT SOURCE DIR: " ${PROJECT_SOURCE_DIR}) -message("API SOURCE DIR: " ${API_SOURCE_DIR}) -message("GRPC SOURCE DIR: " ${SRCDIR}) - -if(EXISTS ${SRCDIR}) - find_package(PkgConfig REQUIRED) - - pkg_check_modules(GRPC REQUIRED grpc) - pkg_check_modules(GRPCPP REQUIRED grpc++) - - set(SOURCES ${SRCDIR}/service/slam/v1/slam.grpc.pb.cc - ${SRCDIR}/service/slam/v1/slam.pb.cc) - set(SOURCES ${SOURCES} ${SRCDIR}/common/v1/common.grpc.pb.cc - ${SRCDIR}/common/v1/common.pb.cc) - set(SOURCES ${SOURCES} ${SRCDIR}/google/api/annotations.pb.cc - ${SRCDIR}/google/api/httpbody.pb.cc) - set(SOURCES ${SOURCES} ${SRCDIR}/google/api/http.pb.cc) - - - # Remove dotfiles/-folders that could potentially pollute the build. - file(GLOB_RECURSE ALL_DOTFILES ".*/*") - if (ALL_DOTFILES) - list(REMOVE_ITEM ALL_VIAM_HDRS ${ALL_DOTFILES}) - list(REMOVE_ITEM ALL_VIAM_SRCS ${ALL_DOTFILES}) - endif() - - list(APPEND ALL_LIBRARY_HDRS ${ALL_VIAM_HDRS}) - list(APPEND ALL_LIBRARY_SRCS ${ALL_VIAM_SRCS}) - list(APPEND ALL_LIBRARY_SRCS ${ALL_VIAM_C_SRCS}) - - - add_library(${PROJECT_NAME} STATIC ${ALL_LIBRARY_HDRS} ${ALL_LIBRARY_SRCS} ${SOURCES}) - target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC ${SRCDIR}) - - configure_file( - ${PROJECT_SOURCE_DIR}/cartographer/cartographer/common/config.h.cmake - ${PROJECT_BINARY_DIR}/common/config.h) - - message("PROJECT_SOURCE_DIR and PROJECT_BINARY_DIR: ${PROJECT_SOURCE_DIR}, ${PROJECT_BINARY_DIR}") - - google_binary(carto_grpc_server - SRCS - src/main.cc - ) - - google_binary(unit_tests - SRCS - ${ALL_VIAM_TEST_SRCS} - ) - - target_link_libraries(carto_grpc_server PUBLIC - ${GRPC_LIBRARIES} - ${GRPCPP_LIBRARIES} - ${PROTOBUF_LIBRARIES} - ${JPEG_LIBRARIES}) - target_include_directories(carto_grpc_server SYSTEM PUBLIC - ${SRCDIR} - ${GRPC_INCLUDE_DIRS} - ${GRPCPP_INCLUDE_DIRS} - ${PROTOBUF_INCLUDE_DIRS} - ${JPEG_INCLUDE_DIRS}) - target_compile_options(carto_grpc_server PUBLIC - ${GRPC_CFLAGS_OTHER} - ${GRPCPP_CFLAGS_OTHER} - ${PROTOBUF_CFLAGS_OTHER} - ${JPEG_CFLAGS_OTHER}) - - target_link_libraries(unit_tests PUBLIC - ${GRPC_LIBRARIES} - ${GRPCPP_LIBRARIES} - ${PROTOBUF_LIBRARIES} - ${JPEG_LIBRARIES}) - target_include_directories(unit_tests SYSTEM PUBLIC - ${SRCDIR} - ${GRPC_INCLUDE_DIRS} - ${GRPCPP_INCLUDE_DIRS} - ${PROTOBUF_INCLUDE_DIRS} - ${JPEG_INCLUDE_DIRS}) - target_compile_options(unit_tests PUBLIC - ${GRPC_CFLAGS_OTHER} - ${GRPCPP_CFLAGS_OTHER} - ${PROTOBUF_CFLAGS_OTHER} - ${JPEG_CFLAGS_OTHER}) - - target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - "${CERES_INCLUDE_DIRS}") - target_link_libraries(${PROJECT_NAME} PUBLIC ${CERES_LIBRARIES}) - - target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - "${LUA_INCLUDE_DIR}") - target_link_libraries(${PROJECT_NAME} PUBLIC ${LUA_LIBRARIES}) - - if (WIN32) - find_package(glog REQUIRED) - set(GLOG_LIBRARY glog::glog) - else() - set(GLOG_LIBRARY glog) - endif() - - target_link_libraries(${PROJECT_NAME} PUBLIC ${GLOG_LIBRARY}) - target_link_libraries(${PROJECT_NAME} PUBLIC gflags) - if(WIN32) - # Needed to fix conflict with MSVC's error macro. - target_compile_definitions(${PROJECT_NAME} PUBLIC -DGLOG_NO_ABBREVIATED_SEVERITIES) - endif() - if(MSVC) - # Needed for VS 2017 5.8 - target_compile_definitions(${PROJECT_NAME} PUBLIC -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_USE_MATH_DEFINES) - endif() - - if("${CAIRO_INCLUDE_DIRS}") - target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - "${CAIRO_INCLUDE_DIRS}") - endif() - - target_link_libraries(${PROJECT_NAME} PUBLIC ${CAIRO_LIBRARIES}) - target_link_libraries(${PROJECT_NAME} PUBLIC ${PCL_LIBRARIES}) - - target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY} - absl::algorithm - absl::base - absl::debugging - absl::flat_hash_map - absl::memory - absl::meta - absl::numeric - absl::str_format - absl::strings - absl::synchronization - absl::time - absl::utility - ) - if (NOT WIN32) - target_link_libraries(${PROJECT_NAME} PUBLIC pthread) - endif() - - set(TARGET_COMPILE_FLAGS "${TARGET_COMPILE_FLAGS} ${GOOG_CXX_FLAGS}") - set_target_properties(${PROJECT_NAME} PROPERTIES - COMPILE_FLAGS ${TARGET_COMPILE_FLAGS}) - - # Add the binary directory first, so that port.h is included after it has - # been generated. - target_include_directories(${PROJECT_NAME} PUBLIC - $ - $ - $ - ) - - install( - TARGETS ${PROJECT_NAME} - EXPORT CartographerExport - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin - ) - - foreach(HDR ${INSTALL_SOURCE_HDRS}) - file(RELATIVE_PATH REL_FIL ${PROJECT_SOURCE_DIR} ${HDR}) - get_filename_component(DIR ${REL_FIL} DIRECTORY) - install( - FILES ${HDR} - DESTINATION include/${DIR} - ) - endforeach() - - foreach(HDR ${INSTALL_GENERATED_HDRS}) - file(RELATIVE_PATH REL_FIL ${PROJECT_BINARY_DIR} ${HDR}) - get_filename_component(DIR ${REL_FIL} DIRECTORY) - install( - FILES ${HDR} - DESTINATION include/${DIR} - ) - endforeach() -else() -message( - FATAL_ERROR - "RDK C++ gRPC gen files not found. Please specify the absolute path to your API_SOURCE_DIR e.g. 'export API_SOURCE_DIR=/home/user/api'" +# combine sources +list(APPEND ALL_LIBRARY_HDRS ${ALL_VIAM_HDRS}) +list(APPEND ALL_LIBRARY_SRCS ${ALL_VIAM_SRCS}) +list(APPEND ALL_LIBRARY_SRCS ${ALL_VIAM_C_SRCS}) + +# add grpc/API sources +set(GRPC_SRCS + ${GRPC_SRC_DIR}/service/slam/v1/slam.grpc.pb.cc + ${GRPC_SRC_DIR}/service/slam/v1/slam.pb.cc + ${GRPC_SRC_DIR}/common/v1/common.grpc.pb.cc + ${GRPC_SRC_DIR}/common/v1/common.pb.cc + ${GRPC_SRC_DIR}/google/api/annotations.pb.cc + ${GRPC_SRC_DIR}/google/api/httpbody.pb.cc + ${GRPC_SRC_DIR}/google/api/http.pb.cc ) -endif() + +# the viam-cartographer library +add_library(${PROJECT_NAME} STATIC ${ALL_LIBRARY_HDRS} ${ALL_LIBRARY_SRCS} ${GRPC_SRCS}) +target_include_directories(${PROJECT_NAME} PUBLIC $) +target_link_libraries(${PROJECT_NAME} PUBLIC + cartographer + ${GRPCPP_LIBRARIES} + ${PCL_LIBRARIES} + absl::log_internal_check_op # should be included from protobuf, but isn't +) + +# executables +add_executable(carto_grpc_server src/main.cc) +target_link_libraries(carto_grpc_server PUBLIC viam-cartographer) + +add_executable(unit_tests ${ALL_VIAM_TEST_SRCS}) +target_link_libraries(unit_tests PUBLIC viam-cartographer) diff --git a/viam-cartographer/cartographer_build_utils/carto.patch b/viam-cartographer/cartographer_build_utils/carto.patch new file mode 100644 index 00000000..417341de --- /dev/null +++ b/viam-cartographer/cartographer_build_utils/carto.patch @@ -0,0 +1,295 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index ef2fcb3..59a5dab 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,33 +1,16 @@ +-# Copyright 2016 The Cartographer Authors +-# +-# Licensed under the Apache License, Version 2.0 (the "License"); +-# you may not use this file except in compliance with the License. +-# You may obtain a copy of the License at +-# +-# http://www.apache.org/licenses/LICENSE-2.0 +-# +-# Unless required by applicable law or agreed to in writing, software +-# distributed under the License is distributed on an "AS IS" BASIS, +-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-# See the License for the specific language governing permissions and +-# limitations under the License. +- + cmake_minimum_required(VERSION 3.2) + + project(cartographer) ++add_definitions(-DABSL_LEGACY_THREAD_ANNOTATIONS) + + set(CARTOGRAPHER_MAJOR_VERSION 1) + set(CARTOGRAPHER_MINOR_VERSION 0) + set(CARTOGRAPHER_PATCH_VERSION 0) + set(CARTOGRAPHER_VERSION ${CARTOGRAPHER_MAJOR_VERSION}.${CARTOGRAPHER_MINOR_VERSION}.${CARTOGRAPHER_PATCH_VERSION}) + set(CARTOGRAPHER_SOVERSION ${CARTOGRAPHER_MAJOR_VERSION}.${CARTOGRAPHER_MINOR_VERSION}) +-option(BUILD_GRPC "build Cartographer gRPC support" false) +-set(CARTOGRAPHER_HAS_GRPC ${BUILD_GRPC}) +-option(BUILD_PROMETHEUS "build Prometheus monitoring support" false) + + include("${PROJECT_SOURCE_DIR}/cmake/functions.cmake") + google_initialize_cartographer_project() +-google_enable_testing() + + find_package(absl REQUIRED) + set(BOOST_COMPONENTS iostreams) +@@ -38,21 +21,14 @@ endif() + find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) + find_package(Ceres REQUIRED COMPONENTS SuiteSparse) + find_package(Eigen3 REQUIRED) +-find_package(LuaGoogle REQUIRED) ++find_package(Lua 5.2 REQUIRED) ++ + if(WIN32) + # On Windows, Protobuf is incorrectly found by the bundled CMake module, so prefer native CMake config. + set(protobuf_MODULE_COMPATIBLE TRUE CACHE INTERNAL "") + find_package(Protobuf 3.0.0 CONFIG) + else() +- find_package(Protobuf 3.0.0 REQUIRED) +-endif() +- +-if (${BUILD_GRPC}) +- find_package(async_grpc REQUIRED) +-endif() +- +-if(${BUILD_PROMETHEUS}) +- find_package( ZLIB REQUIRED ) ++ find_package(Protobuf 3.4.0 REQUIRED) + endif() + + include(FindPkgConfig) +@@ -62,12 +38,6 @@ else() + find_library(CAIRO_LIBRARIES cairo) + endif() + +-# Only build the documentation if we can find Sphinx. +-find_package(Sphinx) +-if(SPHINX_FOUND) +- add_subdirectory("docs") +-endif() +- + # Install catkin package.xml + install(FILES package.xml DESTINATION share/cartographer) + +@@ -80,9 +50,6 @@ install(DIRECTORY cmake DESTINATION share/cartographer/) + + file(GLOB_RECURSE ALL_LIBRARY_HDRS "cartographer/*.h") + file(GLOB_RECURSE ALL_LIBRARY_SRCS "cartographer/*.cc") +-file(GLOB_RECURSE TEST_LIBRARY_HDRS "cartographer/fake_*.h" "cartographer/*test_helpers*.h" "cartographer/mock_*.h") +-file(GLOB_RECURSE TEST_LIBRARY_SRCS "cartographer/fake_*.cc" "cartographer/*test_helpers*.cc" "cartographer/mock_*.cc") +-file(GLOB_RECURSE ALL_TESTS "cartographer/*_test.cc") + file(GLOB_RECURSE ALL_EXECUTABLES "cartographer/*_main.cc") + + # Remove dotfiles/-folders that could potentially pollute the build. +@@ -90,37 +57,32 @@ file(GLOB_RECURSE ALL_DOTFILES ".*/*") + if (ALL_DOTFILES) + list(REMOVE_ITEM ALL_LIBRARY_HDRS ${ALL_DOTFILES}) + list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_DOTFILES}) +- list(REMOVE_ITEM TEST_LIBRARY_HDRS ${ALL_DOTFILES}) +- list(REMOVE_ITEM TEST_LIBRARY_SRCS ${ALL_DOTFILES}) +- list(REMOVE_ITEM ALL_TESTS ${ALL_DOTFILES}) + list(REMOVE_ITEM ALL_EXECUTABLES ${ALL_DOTFILES}) + endif() + list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_EXECUTABLES}) +-list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_TESTS}) +-list(REMOVE_ITEM ALL_LIBRARY_HDRS ${TEST_LIBRARY_HDRS}) +-list(REMOVE_ITEM ALL_LIBRARY_SRCS ${TEST_LIBRARY_SRCS}) + file(GLOB_RECURSE ALL_GRPC_FILES "cartographer/cloud/*") + file(GLOB_RECURSE ALL_PROMETHEUS_FILES "cartographer/cloud/metrics/prometheus/*") + list(REMOVE_ITEM ALL_GRPC_FILES ${ALL_PROMETHEUS_FILES}) +-if (NOT ${BUILD_GRPC}) +- list(REMOVE_ITEM ALL_LIBRARY_HDRS ${ALL_GRPC_FILES}) +- list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_GRPC_FILES}) +- list(REMOVE_ITEM TEST_LIBRARY_HDRS ${ALL_GRPC_FILES}) +- list(REMOVE_ITEM TEST_LIBRARY_SRCS ${ALL_GRPC_FILES}) +- list(REMOVE_ITEM ALL_TESTS ${ALL_GRPC_FILES}) +- list(REMOVE_ITEM ALL_EXECUTABLES ${ALL_GRPC_FILES}) +-endif() +-if (NOT ${BUILD_PROMETHEUS}) +- list(REMOVE_ITEM ALL_LIBRARY_HDRS ${ALL_PROMETHEUS_FILES}) +- list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_PROMETHEUS_FILES}) +- list(REMOVE_ITEM TEST_LIBRARY_HDRS ${ALL_PROMETHEUS_FILES}) +- list(REMOVE_ITEM TEST_LIBRARY_SRCS ${ALL_PROMETHEUS_FILES}) +- list(REMOVE_ITEM ALL_TESTS ${ALL_PROMETHEUS_FILES}) +- list(REMOVE_ITEM ALL_EXECUTABLES ${ALL_PROMETHEUS_FILES}) +-endif() ++ ++# GRPC files are part of the cartographer library - but we don't need them. ++list(REMOVE_ITEM ALL_LIBRARY_HDRS ${ALL_GRPC_FILES}) ++list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_GRPC_FILES}) ++list(REMOVE_ITEM TEST_LIBRARY_HDRS ${ALL_GRPC_FILES}) ++list(REMOVE_ITEM TEST_LIBRARY_SRCS ${ALL_GRPC_FILES}) ++list(REMOVE_ITEM ALL_TESTS ${ALL_GRPC_FILES}) ++list(REMOVE_ITEM ALL_EXECUTABLES ${ALL_GRPC_FILES}) ++ ++# Prometheus files are part of the cartographer library - but we don't need them. ++list(REMOVE_ITEM ALL_LIBRARY_HDRS ${ALL_PROMETHEUS_FILES}) ++list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_PROMETHEUS_FILES}) ++list(REMOVE_ITEM TEST_LIBRARY_HDRS ${ALL_PROMETHEUS_FILES}) ++list(REMOVE_ITEM TEST_LIBRARY_SRCS ${ALL_PROMETHEUS_FILES}) ++list(REMOVE_ITEM ALL_TESTS ${ALL_PROMETHEUS_FILES}) ++list(REMOVE_ITEM ALL_EXECUTABLES ${ALL_PROMETHEUS_FILES}) ++ + set(INSTALL_SOURCE_HDRS ${ALL_LIBRARY_HDRS} ${TEST_LIBRARY_HDRS}) +-file(GLOB_RECURSE INTERNAL_HDRS "cartographer/*/internal/*.h") +-list(REMOVE_ITEM INSTALL_SOURCE_HDRS ${INTERNAL_HDRS}) ++# file(GLOB_RECURSE INTERNAL_HDRS "cartographer/*/internal/*.h") ++# list(REMOVE_ITEM INSTALL_SOURCE_HDRS ${INTERNAL_HDRS}) + + file(GLOB_RECURSE ALL_PROTOS "cartographer/*.proto") + file(GLOB_RECURSE ALL_GRPC_SERVICES "cartographer/*_service.proto") +@@ -155,33 +117,6 @@ set_source_files_properties(${ALL_PROTO_SRCS} ${ALL_PROTO_HDRS} PROPERTIES GENER + list(APPEND ALL_LIBRARY_HDRS ${ALL_PROTO_HDRS}) + list(APPEND ALL_LIBRARY_SRCS ${ALL_PROTO_SRCS}) + +-if(${BUILD_GRPC}) +- set(ALL_GRPC_SERVICE_SRCS) +- set(ALL_GRPC_SERVICE_HDRS) +- foreach(ABS_FIL ${ALL_GRPC_SERVICES}) +- file(RELATIVE_PATH REL_FIL ${PROJECT_SOURCE_DIR} ${ABS_FIL}) +- get_filename_component(DIR ${REL_FIL} DIRECTORY) +- get_filename_component(FIL_WE ${REL_FIL} NAME_WE) +- +- list(APPEND ALL_GRPC_SERVICE_SRCS "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.cc") +- list(APPEND ALL_GRPC_SERVICE_HDRS "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.h") +- +- add_custom_command( +- OUTPUT "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.cc" +- "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.h" +- COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} +- ARGS --cpp_out ${PROJECT_BINARY_DIR} +- -I ${PROJECT_SOURCE_DIR} +- ${ABS_FIL} +- DEPENDS ${ABS_FIL} +- COMMENT "Running C++ protocol buffer compiler on ${ABS_FIL}" +- VERBATIM +- ) +- endforeach() +- set_source_files_properties(${ALL_GRPC_SERVICE_SRCS} ${ALL_GRPC_SERVICE_HDRS} PROPERTIES GENERATED TRUE) +- list(APPEND ALL_LIBRARY_HDRS ${ALL_GRPC_SERVICE_HDRS}) +- list(APPEND ALL_LIBRARY_SRCS ${ALL_GRPC_SERVICE_SRCS}) +-endif() + set(INSTALL_GENERATED_HDRS ${ALL_PROTO_HDRS} ${ALL_GRPC_SERVICE_HDRS}) + + add_library(${PROJECT_NAME} STATIC ${ALL_LIBRARY_HDRS} ${ALL_LIBRARY_SRCS}) +@@ -190,46 +125,12 @@ configure_file( + ${PROJECT_SOURCE_DIR}/cartographer/common/config.h.cmake + ${PROJECT_BINARY_DIR}/cartographer/common/config.h) + +-google_binary(cartographer_autogenerate_ground_truth +- SRCS +- cartographer/ground_truth/autogenerate_ground_truth_main.cc +-) +- +-google_binary(cartographer_compute_relations_metrics +- SRCS +- cartographer/ground_truth/compute_relations_metrics_main.cc +-) +- +-google_binary(cartographer_pbstream +- SRCS +- cartographer/io/pbstream_main.cc +-) +- +-google_binary(cartographer_print_configuration +- SRCS +- cartographer/common/print_configuration_main.cc +-) +- +-if(${BUILD_GRPC}) +- google_binary(cartographer_grpc_server +- SRCS +- cartographer/cloud/map_builder_server_main.cc +- ) +- target_link_libraries(cartographer_grpc_server PUBLIC grpc++) +- target_link_libraries(cartographer_grpc_server PUBLIC async_grpc) +- if(${BUILD_PROMETHEUS}) +- target_link_libraries(cartographer_grpc_server PUBLIC ${ZLIB_LIBRARIES}) +- target_link_libraries(cartographer_grpc_server PUBLIC prometheus-cpp-core) +- target_link_libraries(cartographer_grpc_server PUBLIC prometheus-cpp-pull) +- endif() +-endif() +- + target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC + "${EIGEN3_INCLUDE_DIR}") + target_link_libraries(${PROJECT_NAME} PUBLIC ${EIGEN3_LIBRARIES}) + + target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC +- "${CERES_INCLUDE_DIRS}") ++ $) + target_link_libraries(${PROJECT_NAME} PUBLIC ${CERES_LIBRARIES}) + + target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC +@@ -285,55 +186,11 @@ target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY} + if (NOT WIN32) + target_link_libraries(${PROJECT_NAME} PUBLIC pthread) + endif() +-if(${BUILD_GRPC}) +- target_link_libraries(${PROJECT_NAME} PUBLIC grpc++) +- target_link_libraries(${PROJECT_NAME} PUBLIC async_grpc) +-endif() +-if(${BUILD_PROMETHEUS}) +- target_link_libraries(${PROJECT_NAME} PUBLIC ${ZLIB_LIBRARIES}) +- target_link_libraries(${PROJECT_NAME} PUBLIC prometheus-cpp-core) +- target_link_libraries(${PROJECT_NAME} PUBLIC prometheus-cpp-pull) +- target_compile_definitions(${PROJECT_NAME} PUBLIC USE_PROMETHEUS=1) +-endif() + + set(TARGET_COMPILE_FLAGS "${TARGET_COMPILE_FLAGS} ${GOOG_CXX_FLAGS}") + set_target_properties(${PROJECT_NAME} PROPERTIES + COMPILE_FLAGS ${TARGET_COMPILE_FLAGS}) + +-set(TEST_LIB +- cartographer_test_library +-) +-add_library(${TEST_LIB} ${TEST_LIBRARY_HDRS} ${TEST_LIBRARY_SRCS}) +-target_include_directories(${TEST_LIB} SYSTEM PRIVATE +- "${GMOCK_INCLUDE_DIRS}") +-# Needed for dynamically linked GTest on Windows. +-if (WIN32) +- target_compile_definitions(${TEST_LIB} PUBLIC -DGTEST_LINKED_AS_SHARED_LIBRARY) +-endif() +-target_link_libraries(${TEST_LIB} PUBLIC ${GMOCK_LIBRARY}) +-target_link_libraries(${TEST_LIB} PUBLIC ${PROJECT_NAME}) +-set_target_properties(${TEST_LIB} PROPERTIES +- COMPILE_FLAGS ${TARGET_COMPILE_FLAGS}) +- +-foreach(ABS_FIL ${ALL_TESTS}) +- file(RELATIVE_PATH REL_FIL ${PROJECT_SOURCE_DIR} ${ABS_FIL}) +- get_filename_component(DIR ${REL_FIL} DIRECTORY) +- get_filename_component(FIL_WE ${REL_FIL} NAME_WE) +- # Replace slashes as required for CMP0037. +- string(REPLACE "/" "." TEST_TARGET_NAME "${DIR}/${FIL_WE}") +- google_test("${TEST_TARGET_NAME}" ${ABS_FIL}) +- if(${BUILD_GRPC}) +- target_link_libraries("${TEST_TARGET_NAME}" PUBLIC grpc++) +- target_link_libraries("${TEST_TARGET_NAME}" PUBLIC async_grpc) +- endif() +- if(${BUILD_PROMETHEUS}) +- target_link_libraries("${TEST_TARGET_NAME}" PUBLIC ${ZLIB_LIBRARIES}) +- target_link_libraries("${TEST_TARGET_NAME}" PUBLIC prometheus-cpp-core) +- target_link_libraries("${TEST_TARGET_NAME}" PUBLIC prometheus-cpp-pull) +- endif() +- target_link_libraries("${TEST_TARGET_NAME}" PUBLIC ${TEST_LIB}) +-endforeach() +- + # Add the binary directory first, so that port.h is included after it has + # been generated. + target_include_directories(${PROJECT_NAME} PUBLIC +diff --git a/cmake/functions.cmake b/cmake/functions.cmake +index 8cfc05f..6d849ca 100644 +--- a/cmake/functions.cmake ++++ b/cmake/functions.cmake +@@ -87,7 +87,7 @@ macro(google_initialize_cartographer_project) + google_add_flag(GOOG_CXX_FLAGS "-Werror=reorder") + google_add_flag(GOOG_CXX_FLAGS "-Werror=return-type") + google_add_flag(GOOG_CXX_FLAGS "-Werror=switch") +- google_add_flag(GOOG_CXX_FLAGS "-Werror=uninitialized") ++ # google_add_flag(GOOG_CXX_FLAGS "-Werror=uninitialized") + + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") + google_add_flag(GOOG_CXX_FLAGS "-Wthread-safety") diff --git a/viam-cartographer/cmake/functions.cmake b/viam-cartographer/cmake/functions.cmake deleted file mode 100644 index b3f57e82..00000000 --- a/viam-cartographer/cmake/functions.cmake +++ /dev/null @@ -1,143 +0,0 @@ -# Copyright 2016 The Cartographer Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -include(CMakeParseArguments) - -macro(_parse_arguments ARGS) - set(OPTIONS) - set(ONE_VALUE_ARG) - set(MULTI_VALUE_ARGS SRCS) - cmake_parse_arguments(ARG - "${OPTIONS}" "${ONE_VALUE_ARG}" "${MULTI_VALUE_ARGS}" ${ARGS}) -endmacro(_parse_arguments) - -macro(_common_compile_stuff VISIBILITY) - set(TARGET_COMPILE_FLAGS "${TARGET_COMPILE_FLAGS} ${GOOG_CXX_FLAGS}") - - set_target_properties(${NAME} PROPERTIES - COMPILE_FLAGS ${TARGET_COMPILE_FLAGS}) - - target_include_directories(${NAME} PUBLIC ${PROJECT_NAME}) - target_link_libraries(${NAME} PUBLIC ${PROJECT_NAME}) -endmacro(_common_compile_stuff) - -function(google_test NAME ARG_SRC) - add_executable(${NAME} ${ARG_SRC}) - _common_compile_stuff("PRIVATE") - - # Make sure that gmock always includes the correct gtest/gtest.h. - target_include_directories("${NAME}" SYSTEM PRIVATE - "${GMOCK_INCLUDE_DIRS}") - target_link_libraries("${NAME}" PUBLIC ${GMOCK_LIBRARIES}) - - add_test(${NAME} ${NAME}) -endfunction() - -function(google_binary NAME) - _parse_arguments("${ARGN}") - - add_executable(${NAME} ${ARG_SRCS}) - - _common_compile_stuff("PRIVATE") - - install(TARGETS "${NAME}" RUNTIME DESTINATION bin) -endfunction() - -# Create a variable 'VAR_NAME'='FLAG'. If VAR_NAME is already set, FLAG is -# appended. -function(google_add_flag VAR_NAME FLAG) - if (${VAR_NAME}) - set(${VAR_NAME} "${${VAR_NAME}} ${FLAG}" PARENT_SCOPE) - else() - set(${VAR_NAME} "${FLAG}" PARENT_SCOPE) - endif() -endfunction() - -macro(google_initialize_cartographer_project) - if(CARTOGRAPHER_CMAKE_DIR) - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - ${CARTOGRAPHER_CMAKE_DIR}/modules) - else() - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) - endif() - - if(WIN32) - # TODO turn on equivalent warnings on Windows - else() - set(GOOG_CXX_FLAGS "-pthread -fPIC ${GOOG_CXX_FLAGS}") - - google_add_flag(GOOG_CXX_FLAGS "-Wall") - google_add_flag(GOOG_CXX_FLAGS "-Wpedantic") - - # Turn some warnings into errors. - google_add_flag(GOOG_CXX_FLAGS "-Werror=format-security") - google_add_flag(GOOG_CXX_FLAGS "-Werror=missing-braces") - google_add_flag(GOOG_CXX_FLAGS "-Werror=reorder") - google_add_flag(GOOG_CXX_FLAGS "-Werror=return-type") - google_add_flag(GOOG_CXX_FLAGS "-Werror=switch") - google_add_flag(GOOG_CXX_FLAGS "-Werror=uninitialized") - - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "AppleClang") - google_add_flag(GOOG_CXX_FLAGS "-Wthread-safety") - endif() - - if(NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "") - set(CMAKE_BUILD_TYPE Release) - endif() - - if(CMAKE_BUILD_TYPE STREQUAL "Release") - google_add_flag(GOOG_CXX_FLAGS "-O3 -DNDEBUG") - elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") - google_add_flag(GOOG_CXX_FLAGS "-O3 -g -DNDEBUG") - elseif(CMAKE_BUILD_TYPE STREQUAL "Debug") - if(FORCE_DEBUG_BUILD) - message(WARNING "Building in Debug mode, expect very slow performance.") - google_add_flag(GOOG_CXX_FLAGS "-g") - else() - message(FATAL_ERROR - "Compiling in Debug mode is not supported and can cause severely degraded performance. " - "You should change the build type to Release. If you want to build in Debug mode anyway, " - "call CMake with -DFORCE_DEBUG_BUILD=True" - ) - endif() - # Support for Debian packaging CMAKE_BUILD_TYPE - elseif(CMAKE_BUILD_TYPE STREQUAL "None") - message(WARNING "Building with CMAKE_BUILD_TYPE None, " - "please make sure you have set CFLAGS and CXXFLAGS according to your needs.") - else() - message(FATAL_ERROR "Unknown CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") - endif() - - message(STATUS "Build type: ${CMAKE_BUILD_TYPE}") - - # Add a hook that reruns CMake when source files are added or removed. - set(LIST_FILES_CMD "find ${PROJECT_SOURCE_DIR}/ -not -iwholename '*.git*' | sort | sed 's/^/#/'") - set(FILES_LIST_PATH "${PROJECT_BINARY_DIR}/AllFiles.cmake") - set(DETECT_CHANGES_CMD "bash" "-c" "${LIST_FILES_CMD} | diff -N -q ${FILES_LIST_PATH} - || ${LIST_FILES_CMD} > ${FILES_LIST_PATH}") - add_custom_target(${PROJECT_NAME}_detect_changes ALL - COMMAND ${DETECT_CHANGES_CMD} - VERBATIM - ) - if(NOT EXISTS ${FILES_LIST_PATH}) - execute_process(COMMAND ${DETECT_CHANGES_CMD}) - endif() - include(${FILES_LIST_PATH}) - endif() -endmacro() - -macro(google_enable_testing) - enable_testing() - find_package(GMock REQUIRED) -endmacro() diff --git a/viam-cartographer/cmake/modules/FindEigen3.cmake b/viam-cartographer/cmake/modules/FindEigen3.cmake deleted file mode 100644 index 9838e922..00000000 --- a/viam-cartographer/cmake/modules/FindEigen3.cmake +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright 2018 The Cartographer Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -find_package(Eigen3 QUIET NO_MODULE) -if (NOT EIGEN3_FOUND) - list(APPEND EIGEN3_POSSIBLE_DIRS - /usr/local/include/eigen3 - /usr/include/eigen3 - ) - find_path(EIGEN3_INCLUDE_DIR - NAMES Eigen/Core - PATHS ${EIGEN3_POSSIBLE_DIRS} - ) - if (EIGEN3_INCLUDE_DIR AND EXISTS ${EIGEN3_INCLUDE_DIR}) - set(EIGEN3_FOUND TRUE) - else() - message(WARNING "Failed to find Eigen3. Please, define the path manually.") - endif() -endif() diff --git a/viam-cartographer/scripts/build_cartographer.sh b/viam-cartographer/scripts/build_cartographer.sh deleted file mode 100755 index c6d98abe..00000000 --- a/viam-cartographer/scripts/build_cartographer.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -set -o errexit - -if [ "$(uname)" == "Linux" ]; then - cd $(dirname $(readlink -f "${BASH_SOURCE}"))/.. -elif [ "$(uname)" == "Darwin" ]; then - readlinkorreal() { readlink "$1" || echo "$1"; } - cd $(dirname string readlinkorreal "${BASH_SOURCE}")/.. -else - echo ERROR: your OS is not handled yet - exit 1 -fi - -# Build and install Cartographer with the viam wrapper. -pushd cartographer -cp ../cartographer_build_utils/CMakeLists.txt CMakeLists.txt -rm -rf build -mkdir build -pushd build - -echo building cartographer -cmake .. -G Ninja -DCMAKE_CXX_STANDARD=17 -DCMAKE_PREFIX_PATH=`brew --prefix` -ninja -popd -popd diff --git a/viam-cartographer/scripts/build_viam_cartographer.sh b/viam-cartographer/scripts/build_viam_cartographer.sh deleted file mode 100755 index f744838f..00000000 --- a/viam-cartographer/scripts/build_viam_cartographer.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -set -o errexit - -if [ "$(uname)" == "Linux" ]; then - cd $(dirname $(readlink -f "${BASH_SOURCE}"))/.. -elif [ "$(uname)" == "Darwin" ]; then - readlinkorreal() { readlink "$1" || echo "$1"; } - cd $(dirname string readlinkorreal "${BASH_SOURCE}")/.. - which brew && export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:`brew --prefix openssl@3`/lib/pkgconfig" -else - echo ERROR: your OS is not handled yet - exit 1 -fi - -# Build and install Cartographer with the viam wrapper. -DIR=`pwd`/build/ -echo $DIR -if [ ! -d "$DIR" ]; then - mkdir build -else - echo "Build Directory already exists" -fi - -pushd build - -echo building viam-cartographer -cmake .. -G Ninja -DCMAKE_CXX_STANDARD=17 -DCMAKE_PREFIX_PATH=`brew --prefix` -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 -ninja -popd diff --git a/viam-cartographer/scripts/build_viam_cartographer_debug.sh b/viam-cartographer/scripts/build_viam_cartographer_debug.sh deleted file mode 100755 index 21b7563f..00000000 --- a/viam-cartographer/scripts/build_viam_cartographer_debug.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -set -o errexit - -if [ "$(uname)" == "Linux" ]; then - cd $(dirname $(readlink -f "${BASH_SOURCE}"))/.. -elif [ "$(uname)" == "Darwin" ]; then - readlinkorreal() { readlink "$1" || echo "$1"; } - cd $(dirname string readlinkorreal "${BASH_SOURCE}")/.. - which brew && export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:`brew --prefix openssl@3`/lib/pkgconfig" -else - echo ERROR: your OS is not handled yet - exit 1 -fi - -# Build and install Cartographer with the viam wrapper. -DIR=`pwd`/build/ -echo $DIR -if [ ! -d "$DIR" ]; then - mkdir build -else - echo "Build Directory already exists" -fi - -pushd build - -echo building viam-cartographer -cmake .. -G Ninja \ - -DCMAKE_CXX_STANDARD=17 \ - -DCMAKE_PREFIX_PATH=`brew --prefix` \ - -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5 \ - -DCMAKE_BUILD_TYPE=Debug - -ninja diff --git a/viam-cartographer/scripts/setup_cartographer.sh b/viam-cartographer/scripts/setup_cartographer.sh new file mode 100755 index 00000000..8331b852 --- /dev/null +++ b/viam-cartographer/scripts/setup_cartographer.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +if which brew; then + echo "Installing cartographer external dependencies" + brew update + brew install abseil boost ceres-solver protobuf ninja cairo googletest lua@5.3 pkg-config cmake go@1.20 grpc + brew link lua@5.3 + brew install openssl@3 eigen gflags glog suite-sparse sphinx-doc pcl + go install go.viam.com/utils/artifact/cmd/artifact +elif which apt; then + echo "WARNING" + echo "Installing cartographer external dependencies via APT." + echo "Packages may be too old to work with this project." + sudo apt update + sudo apt install -y cmake ninja-build libgmock-dev libboost-iostreams-dev liblua5.3-dev libcairo2-dev python3-sphinx libabsl-dev libceres-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc libpcl-dev + go install go.viam.com/utils/artifact/cmd/artifact +else + echo "Unsupported system. Only apt and brew currently supported." + exit 1 +fi diff --git a/viam-cartographer/scripts/setup_cartographer_linux.sh b/viam-cartographer/scripts/setup_cartographer_linux.sh deleted file mode 100755 index f210ecbb..00000000 --- a/viam-cartographer/scripts/setup_cartographer_linux.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -echo "Installing cartographer external dependencies" -sudo apt update -sudo apt install -y cmake ninja-build libgmock-dev libboost-iostreams-dev liblua5.3-dev libcairo2-dev python3-sphinx libabsl-dev libceres-dev libprotobuf-dev protobuf-compiler libpcl-dev -go install go.viam.com/utils/artifact/cmd/artifact diff --git a/viam-cartographer/scripts/setup_cartographer_macos.sh b/viam-cartographer/scripts/setup_cartographer_macos.sh deleted file mode 100755 index 1d7629b1..00000000 --- a/viam-cartographer/scripts/setup_cartographer_macos.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -echo "Installing cartographer external dependencies" -brew update -brew install abseil boost ceres-solver protobuf@21 ninja cairo googletest lua@5.3 pkg-config cmake go@1.20 grpc -brew link lua@5.3 -brew install openssl@3 eigen gflags glog suite-sparse sphinx-doc pcl -brew unlink protobuf@3 -brew unlink protobuf -brew unlink protobuf@21 && brew link protobuf@21 -go install go.viam.com/utils/artifact/cmd/artifact From 412ad2fa05db48239ba45bca7e84de8bdddda948 Mon Sep 17 00:00:00 2001 From: James Otting Date: Wed, 14 Jun 2023 19:20:20 -0500 Subject: [PATCH 02/17] Remove unused files --- Makefile | 2 +- .../cartographer_build_utils/CMakeLists.txt | 246 ------------------ .../carto.patch | 0 3 files changed, 1 insertion(+), 247 deletions(-) delete mode 100644 viam-cartographer/cartographer_build_utils/CMakeLists.txt rename viam-cartographer/{cartographer_build_utils => cartographer_patches}/carto.patch (100%) diff --git a/Makefile b/Makefile index 841c6ff4..db3e9210 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ ensure-submodule-initialized: else \ echo "Submodule found successfully"; \ fi - cd viam-cartographer/cartographer && git checkout . && git apply ../cartographer_build_utils/carto.patch + cd viam-cartographer/cartographer && git checkout . && git apply ../cartographer_patches/carto.patch lint-setup-cpp: ifeq ("Darwin", "$(shell uname -s)") diff --git a/viam-cartographer/cartographer_build_utils/CMakeLists.txt b/viam-cartographer/cartographer_build_utils/CMakeLists.txt deleted file mode 100644 index f0906075..00000000 --- a/viam-cartographer/cartographer_build_utils/CMakeLists.txt +++ /dev/null @@ -1,246 +0,0 @@ -cmake_minimum_required(VERSION 3.2) - -project(cartographer) -add_definitions(-DABSL_LEGACY_THREAD_ANNOTATIONS) - -set(CARTOGRAPHER_MAJOR_VERSION 1) -set(CARTOGRAPHER_MINOR_VERSION 0) -set(CARTOGRAPHER_PATCH_VERSION 0) -set(CARTOGRAPHER_VERSION ${CARTOGRAPHER_MAJOR_VERSION}.${CARTOGRAPHER_MINOR_VERSION}.${CARTOGRAPHER_PATCH_VERSION}) -set(CARTOGRAPHER_SOVERSION ${CARTOGRAPHER_MAJOR_VERSION}.${CARTOGRAPHER_MINOR_VERSION}) - -include("${PROJECT_SOURCE_DIR}/cmake/functions.cmake") -google_initialize_cartographer_project() - -find_package(absl REQUIRED) -set(BOOST_COMPONENTS iostreams) -if(WIN32) - list(APPEND BOOST_COMPONENTS zlib) - set(Boost_USE_STATIC_LIBS FALSE) -endif() -find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) -find_package(Ceres REQUIRED COMPONENTS SuiteSparse) -find_package(Eigen3 REQUIRED) -find_package(Lua 5.2 REQUIRED) - -if(WIN32) - # On Windows, Protobuf is incorrectly found by the bundled CMake module, so prefer native CMake config. - set(protobuf_MODULE_COMPATIBLE TRUE CACHE INTERNAL "") - find_package(Protobuf 3.0.0 CONFIG) -else() - find_package(Protobuf 3.4.0 REQUIRED) -endif() - -include(FindPkgConfig) -if (NOT WIN32) - PKG_SEARCH_MODULE(CAIRO REQUIRED cairo>=1.12.16) -else() - find_library(CAIRO_LIBRARIES cairo) -endif() - -# Install catkin package.xml -install(FILES package.xml DESTINATION share/cartographer) - -set(CARTOGRAPHER_CONFIGURATION_FILES_DIRECTORY ${CMAKE_INSTALL_PREFIX}/share/cartographer/configuration_files - CACHE PATH ".lua configuration files directory") - -install(DIRECTORY configuration_files DESTINATION share/cartographer/) - -install(DIRECTORY cmake DESTINATION share/cartographer/) - -file(GLOB_RECURSE ALL_LIBRARY_HDRS "cartographer/*.h") -file(GLOB_RECURSE ALL_LIBRARY_SRCS "cartographer/*.cc") -file(GLOB_RECURSE ALL_EXECUTABLES "cartographer/*_main.cc") - -# Remove dotfiles/-folders that could potentially pollute the build. -file(GLOB_RECURSE ALL_DOTFILES ".*/*") -if (ALL_DOTFILES) - list(REMOVE_ITEM ALL_LIBRARY_HDRS ${ALL_DOTFILES}) - list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_DOTFILES}) - list(REMOVE_ITEM ALL_EXECUTABLES ${ALL_DOTFILES}) -endif() -list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_EXECUTABLES}) -file(GLOB_RECURSE ALL_GRPC_FILES "cartographer/cloud/*") -file(GLOB_RECURSE ALL_PROMETHEUS_FILES "cartographer/cloud/metrics/prometheus/*") -list(REMOVE_ITEM ALL_GRPC_FILES ${ALL_PROMETHEUS_FILES}) - -# GRPC files are part of the cartographer library - but we don't need them. -list(REMOVE_ITEM ALL_LIBRARY_HDRS ${ALL_GRPC_FILES}) -list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_GRPC_FILES}) -list(REMOVE_ITEM TEST_LIBRARY_HDRS ${ALL_GRPC_FILES}) -list(REMOVE_ITEM TEST_LIBRARY_SRCS ${ALL_GRPC_FILES}) -list(REMOVE_ITEM ALL_TESTS ${ALL_GRPC_FILES}) -list(REMOVE_ITEM ALL_EXECUTABLES ${ALL_GRPC_FILES}) - -# Prometheus files are part of the cartographer library - but we don't need them. -list(REMOVE_ITEM ALL_LIBRARY_HDRS ${ALL_PROMETHEUS_FILES}) -list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_PROMETHEUS_FILES}) -list(REMOVE_ITEM TEST_LIBRARY_HDRS ${ALL_PROMETHEUS_FILES}) -list(REMOVE_ITEM TEST_LIBRARY_SRCS ${ALL_PROMETHEUS_FILES}) -list(REMOVE_ITEM ALL_TESTS ${ALL_PROMETHEUS_FILES}) -list(REMOVE_ITEM ALL_EXECUTABLES ${ALL_PROMETHEUS_FILES}) - -set(INSTALL_SOURCE_HDRS ${ALL_LIBRARY_HDRS} ${TEST_LIBRARY_HDRS}) -# file(GLOB_RECURSE INTERNAL_HDRS "cartographer/*/internal/*.h") -# list(REMOVE_ITEM INSTALL_SOURCE_HDRS ${INTERNAL_HDRS}) - -file(GLOB_RECURSE ALL_PROTOS "cartographer/*.proto") -file(GLOB_RECURSE ALL_GRPC_SERVICES "cartographer/*_service.proto") -list(REMOVE_ITEM ALL_PROTOS ALL_GRPC_SERVICES) -if (NOT ${BUILD_GRPC}) - list(REMOVE_ITEM ALL_PROTOS ${ALL_GRPC_FILES}) -endif() - -# TODO(cschuet): Move proto compilation to separate function. -set(ALL_PROTO_SRCS) -set(ALL_PROTO_HDRS) -foreach(ABS_FIL ${ALL_PROTOS}) - file(RELATIVE_PATH REL_FIL ${PROJECT_SOURCE_DIR} ${ABS_FIL}) - get_filename_component(DIR ${REL_FIL} DIRECTORY) - get_filename_component(FIL_WE ${REL_FIL} NAME_WE) - - list(APPEND ALL_PROTO_SRCS "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.cc") - list(APPEND ALL_PROTO_HDRS "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.h") - - add_custom_command( - OUTPUT "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.cc" - "${PROJECT_BINARY_DIR}/${DIR}/${FIL_WE}.pb.h" - COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} - ARGS --cpp_out ${PROJECT_BINARY_DIR} -I - ${PROJECT_SOURCE_DIR} ${ABS_FIL} - DEPENDS ${ABS_FIL} - COMMENT "Running C++ protocol buffer compiler on ${ABS_FIL}" - VERBATIM - ) -endforeach() -set_source_files_properties(${ALL_PROTO_SRCS} ${ALL_PROTO_HDRS} PROPERTIES GENERATED TRUE) -list(APPEND ALL_LIBRARY_HDRS ${ALL_PROTO_HDRS}) -list(APPEND ALL_LIBRARY_SRCS ${ALL_PROTO_SRCS}) - -set(INSTALL_GENERATED_HDRS ${ALL_PROTO_HDRS} ${ALL_GRPC_SERVICE_HDRS}) - -add_library(${PROJECT_NAME} STATIC ${ALL_LIBRARY_HDRS} ${ALL_LIBRARY_SRCS}) - -configure_file( - ${PROJECT_SOURCE_DIR}/cartographer/common/config.h.cmake - ${PROJECT_BINARY_DIR}/cartographer/common/config.h) - -target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - "${EIGEN3_INCLUDE_DIR}") -target_link_libraries(${PROJECT_NAME} PUBLIC ${EIGEN3_LIBRARIES}) - -target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - "${CERES_INCLUDE_DIRS}") -target_link_libraries(${PROJECT_NAME} PUBLIC ${CERES_LIBRARIES}) - -target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - "${LUA_INCLUDE_DIR}") -target_link_libraries(${PROJECT_NAME} PUBLIC ${LUA_LIBRARIES}) - -target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - "${Boost_INCLUDE_DIRS}") -target_link_libraries(${PROJECT_NAME} PUBLIC ${Boost_LIBRARIES}) - -if (WIN32) - find_package(glog REQUIRED) - set(GLOG_LIBRARY glog::glog) -else() - set(GLOG_LIBRARY glog) -endif() - -target_link_libraries(${PROJECT_NAME} PUBLIC ${GLOG_LIBRARY}) -target_link_libraries(${PROJECT_NAME} PUBLIC gflags) -if(WIN32) - # Needed to fix conflict with MSVC's error macro. - target_compile_definitions(${PROJECT_NAME} PUBLIC -DGLOG_NO_ABBREVIATED_SEVERITIES) -endif() -if(MSVC) - # Needed for VS 2017 5.8 - target_compile_definitions(${PROJECT_NAME} PUBLIC -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_USE_MATH_DEFINES) -endif() - -if("${CAIRO_INCLUDE_DIRS}") - target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - "${CAIRO_INCLUDE_DIRS}") -endif() -target_link_libraries(${PROJECT_NAME} PUBLIC ${CAIRO_LIBRARIES}) - -target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - ${PROTOBUF_INCLUDE_DIR}) -# TODO(hrapp): This should not explicitly list pthread and use -# PROTOBUF_LIBRARIES, but that failed on first try. -target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY} - absl::algorithm - absl::base - absl::debugging - absl::flat_hash_map - absl::memory - absl::meta - absl::numeric - absl::str_format - absl::strings - absl::synchronization - absl::time - absl::utility -) -if (NOT WIN32) - target_link_libraries(${PROJECT_NAME} PUBLIC pthread) -endif() - -set(TARGET_COMPILE_FLAGS "${TARGET_COMPILE_FLAGS} ${GOOG_CXX_FLAGS}") -set_target_properties(${PROJECT_NAME} PROPERTIES - COMPILE_FLAGS ${TARGET_COMPILE_FLAGS}) - -# Add the binary directory first, so that port.h is included after it has -# been generated. -target_include_directories(${PROJECT_NAME} PUBLIC - $ - $ - $ -) - -install( - TARGETS ${PROJECT_NAME} - EXPORT CartographerExport - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin -) - -foreach(HDR ${INSTALL_SOURCE_HDRS}) - file(RELATIVE_PATH REL_FIL ${PROJECT_SOURCE_DIR} ${HDR}) - get_filename_component(DIR ${REL_FIL} DIRECTORY) - install( - FILES ${HDR} - DESTINATION include/${DIR} - ) -endforeach() - -foreach(HDR ${INSTALL_GENERATED_HDRS}) - file(RELATIVE_PATH REL_FIL ${PROJECT_BINARY_DIR} ${HDR}) - get_filename_component(DIR ${REL_FIL} DIRECTORY) - install( - FILES ${HDR} - DESTINATION include/${DIR} - ) -endforeach() - -set(CARTOGRAPHER_CMAKE_DIR share/cartographer/cmake) -include(CMakePackageConfigHelpers) -configure_package_config_file( - cartographer-config.cmake.in - ${PROJECT_BINARY_DIR}/cmake/cartographer/cartographer-config.cmake - PATH_VARS CARTOGRAPHER_CMAKE_DIR - INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/share/cartographer -) - -install( - EXPORT CartographerExport - DESTINATION share/cartographer/cmake/ - FILE CartographerTargets.cmake -) - -install( - FILES ${PROJECT_BINARY_DIR}/cmake/cartographer/cartographer-config.cmake - DESTINATION share/cartographer/ -) diff --git a/viam-cartographer/cartographer_build_utils/carto.patch b/viam-cartographer/cartographer_patches/carto.patch similarity index 100% rename from viam-cartographer/cartographer_build_utils/carto.patch rename to viam-cartographer/cartographer_patches/carto.patch From 396f3a0ff19205f064c23e459fffbf1c68b9c453 Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 11:33:59 -0500 Subject: [PATCH 03/17] Makefile cleanup --- Makefile | 48 +++++++++++-------- ...artographer.sh => install_dependencies.sh} | 2 - 2 files changed, 27 insertions(+), 23 deletions(-) rename viam-cartographer/scripts/{setup_cartographer.sh => install_dependencies.sh} (88%) diff --git a/Makefile b/Makefile index db3e9210..bb26f02a 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,11 @@ BUILD_CHANNEL?=local -TOOL_BIN = bin/gotools/$(shell uname -s)-$(shell uname -m) -PATH_WITH_TOOLS="`pwd`/$(TOOL_BIN):$(HOME)/go/bin/:${PATH}" -GIT_REVISION = $(shell git rev-parse HEAD | tr -d '\n') -TAG_VERSION?=$(shell git tag --points-at | sort -Vr | head -n1) -GO_BUILD_LDFLAGS = -ldflags "-X 'main.Version=${TAG_VERSION}' -X 'main.GitRevision=${GIT_REVISION}'" +TOOL_BIN := $(shell pwd)/bin/tools/$(shell uname -s)-$(shell uname -m) +GIT_REVISION := $(shell git rev-parse HEAD | tr -d '\n') +TAG_VERSION ?= $(shell git tag --points-at | sort -Vr | head -n1) +GO_BUILD_LDFLAGS := -ldflags "-X 'main.Version=${TAG_VERSION}' -X 'main.GitRevision=${GIT_REVISION}'" +SHELL := /bin/env bash +export PATH := $(TOOL_BIN):$(PATH) +export GOBIN := $(TOOL_BIN) ARTIFACT="~/go/bin/artifact" @@ -14,22 +16,27 @@ endif default: build -artifact-pull: - PATH=${PATH_WITH_TOOLS} artifact pull +artifact-pull: $(TOOL_BIN)/artifact + artifact pull + +$(TOOL_BIN)/artifact: + go install go.viam.com/utils/artifact/cmd/artifact bufinstall: sudo apt-get install -y protobuf-compiler-grpc libgrpc-dev libgrpc++-dev || brew install grpc openssl --quiet -grpc/bin/buf: - GOBIN=`pwd`/grpc/bin go install github.com/bufbuild/buf/cmd/buf@v1.8.0 +$(TOOL_BIN)/buf: + go install github.com/bufbuild/buf/cmd/buf@v1.8.0 -grpc/bin/protoc-gen-grpc-cpp: - which grpc_cpp_plugin && ln -sf `which grpc_cpp_plugin` grpc/bin/protoc-gen-grpc-cpp +$(TOOL_BIN)/protoc-gen-grpc-cpp: + mkdir -p "$(TOOL_BIN)" + which grpc_cpp_plugin && ln -sf `which grpc_cpp_plugin` $(TOOL_BIN)/protoc-gen-grpc-cpp -buf: grpc/bin/buf grpc/bin/protoc-gen-grpc-cpp - PATH="${PATH}:`pwd`/grpc/bin" buf generate --template ./buf/buf.gen.yaml buf.build/viamrobotics/api - PATH="${PATH}:`pwd`/grpc/bin" buf generate --template ./buf/buf.grpc.gen.yaml buf.build/viamrobotics/api - PATH="${PATH}:`pwd`/grpc/bin" buf generate --template ./buf/buf.gen.yaml buf.build/googleapis/googleapis +buf: $(TOOL_BIN)/buf $(TOOL_BIN)/protoc-gen-grpc-cpp + echo ${PATH} + buf generate --template ./buf/buf.gen.yaml buf.build/viamrobotics/api + buf generate --template ./buf/buf.grpc.gen.yaml buf.build/viamrobotics/api + buf generate --template ./buf/buf.gen.yaml buf.build/googleapis/googleapis clean: rm -rf grpc bin viam-cartographer/build @@ -54,7 +61,7 @@ else endif lint-setup-go: - GOBIN=`pwd`/$(TOOL_BIN) go install \ + go install \ github.com/edaniels/golinters/cmd/combined \ github.com/golangci/golangci-lint/cmd/golangci-lint \ github.com/rhysd/actionlint/cmd/actionlint @@ -71,15 +78,14 @@ lint-cpp: | xargs clang-format -i --style="{BasedOnStyle: Google, IndentWidth: 4}" lint-go: - go vet -vettool=$(TOOL_BIN)/combined ./... - GOGC=50 $(TOOL_BIN)/golangci-lint run -v --fix --config=./etc/golangci.yaml - PATH=$(PATH_WITH_TOOLS) actionlint + go vet -vettool=combined ./... + GOGC=50 golangci-lint run -v --fix --config=./etc/golangci.yaml + actionlint lint: ensure-submodule-initialized lint-cpp lint-go -setup: ensure-submodule-initialized +setup: ensure-submodule-initialized artifact-pull viam-cartographer/scripts/setup_cartographer.sh - @make artifact-pull build: ensure-submodule-initialized buf build-module cd viam-cartographer && cmake -Bbuild -G Ninja ${EXTRA_CMAKE_FLAGS} && cmake --build build diff --git a/viam-cartographer/scripts/setup_cartographer.sh b/viam-cartographer/scripts/install_dependencies.sh similarity index 88% rename from viam-cartographer/scripts/setup_cartographer.sh rename to viam-cartographer/scripts/install_dependencies.sh index 8331b852..3b2e2ec8 100755 --- a/viam-cartographer/scripts/setup_cartographer.sh +++ b/viam-cartographer/scripts/install_dependencies.sh @@ -6,14 +6,12 @@ if which brew; then brew install abseil boost ceres-solver protobuf ninja cairo googletest lua@5.3 pkg-config cmake go@1.20 grpc brew link lua@5.3 brew install openssl@3 eigen gflags glog suite-sparse sphinx-doc pcl - go install go.viam.com/utils/artifact/cmd/artifact elif which apt; then echo "WARNING" echo "Installing cartographer external dependencies via APT." echo "Packages may be too old to work with this project." sudo apt update sudo apt install -y cmake ninja-build libgmock-dev libboost-iostreams-dev liblua5.3-dev libcairo2-dev python3-sphinx libabsl-dev libceres-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc libpcl-dev - go install go.viam.com/utils/artifact/cmd/artifact else echo "Unsupported system. Only apt and brew currently supported." exit 1 From 8997f735e3631891dd97a65d0de14bdf77b75bf3 Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 12:03:41 -0500 Subject: [PATCH 04/17] More cleanup --- Makefile | 35 ++++++++++++++----- .../scripts/install_dependencies.sh | 18 ---------- 2 files changed, 27 insertions(+), 26 deletions(-) delete mode 100755 viam-cartographer/scripts/install_dependencies.sh diff --git a/Makefile b/Makefile index bb26f02a..bab66c7a 100644 --- a/Makefile +++ b/Makefile @@ -3,12 +3,10 @@ TOOL_BIN := $(shell pwd)/bin/tools/$(shell uname -s)-$(shell uname -m) GIT_REVISION := $(shell git rev-parse HEAD | tr -d '\n') TAG_VERSION ?= $(shell git tag --points-at | sort -Vr | head -n1) GO_BUILD_LDFLAGS := -ldflags "-X 'main.Version=${TAG_VERSION}' -X 'main.GitRevision=${GIT_REVISION}'" -SHELL := /bin/env bash +SHELL := /usr/bin/env bash export PATH := $(TOOL_BIN):$(PATH) export GOBIN := $(TOOL_BIN) -ARTIFACT="~/go/bin/artifact" - ifneq (, $(shell which brew)) EXTRA_CMAKE_FLAGS := -DCMAKE_PREFIX_PATH=$(shell brew --prefix) -DQt5_DIR=$(shell brew --prefix qt5)/lib/cmake/Qt5 export PKG_CONFIG_PATH := $(shell brew --prefix openssl@3)/lib/pkgconfig @@ -23,7 +21,13 @@ $(TOOL_BIN)/artifact: go install go.viam.com/utils/artifact/cmd/artifact bufinstall: - sudo apt-get install -y protobuf-compiler-grpc libgrpc-dev libgrpc++-dev || brew install grpc openssl --quiet +ifneq (, $(shell which brew)) + brew install grpc openssl +else ifneq (, $(shell which apt-get)) + sudo apt-get install -y protobuf-compiler-grpc libgrpc-dev libgrpc++-dev +else + $(error "Unsupported system. Only apt and brew currently supported.") +endif $(TOOL_BIN)/buf: go install github.com/bufbuild/buf/cmd/buf@v1.8.0 @@ -54,10 +58,12 @@ ensure-submodule-initialized: cd viam-cartographer/cartographer && git checkout . && git apply ../cartographer_patches/carto.patch lint-setup-cpp: -ifeq ("Darwin", "$(shell uname -s)") +ifneq (, $(shell which brew)) brew install clang-format -else +else ifneq (, $(shell which apt-get)) sudo apt-get install -y clang-format +else + $(error "Unsupported system. Only apt and brew currently supported.") endif lint-setup-go: @@ -78,14 +84,27 @@ lint-cpp: | xargs clang-format -i --style="{BasedOnStyle: Google, IndentWidth: 4}" lint-go: - go vet -vettool=combined ./... + go vet -vettool=$(TOOL_BIN)/combined ./... GOGC=50 golangci-lint run -v --fix --config=./etc/golangci.yaml actionlint lint: ensure-submodule-initialized lint-cpp lint-go setup: ensure-submodule-initialized artifact-pull - viam-cartographer/scripts/setup_cartographer.sh +ifneq (, $(shell which brew)) + brew update + brew install abseil boost ceres-solver protobuf ninja cairo googletest lua@5.3 pkg-config cmake go@1.20 grpc + brew link lua@5.3 + brew install openssl@3 eigen gflags glog suite-sparse sphinx-doc pcl +else ifneq (, $(shell which apt-get)) + $(warning "Installing cartographer external dependencies via APT.") + $(warning "Packages may be too old to work with this project.") + sudo apt-get update + sudo apt-get install -y cmake ninja-build libgmock-dev libboost-iostreams-dev liblua5.3-dev libcairo2-dev python3-sphinx \ + libabsl-dev libceres-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc libpcl-dev +else + $(error "Unsupported system. Only apt and brew currently supported.") +endif build: ensure-submodule-initialized buf build-module cd viam-cartographer && cmake -Bbuild -G Ninja ${EXTRA_CMAKE_FLAGS} && cmake --build build diff --git a/viam-cartographer/scripts/install_dependencies.sh b/viam-cartographer/scripts/install_dependencies.sh deleted file mode 100755 index 3b2e2ec8..00000000 --- a/viam-cartographer/scripts/install_dependencies.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -if which brew; then - echo "Installing cartographer external dependencies" - brew update - brew install abseil boost ceres-solver protobuf ninja cairo googletest lua@5.3 pkg-config cmake go@1.20 grpc - brew link lua@5.3 - brew install openssl@3 eigen gflags glog suite-sparse sphinx-doc pcl -elif which apt; then - echo "WARNING" - echo "Installing cartographer external dependencies via APT." - echo "Packages may be too old to work with this project." - sudo apt update - sudo apt install -y cmake ninja-build libgmock-dev libboost-iostreams-dev liblua5.3-dev libcairo2-dev python3-sphinx libabsl-dev libceres-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc libpcl-dev -else - echo "Unsupported system. Only apt and brew currently supported." - exit 1 -fi From 1f037c9f339e561ba969a27c8e6af1d3de103bf9 Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 13:06:32 -0500 Subject: [PATCH 05/17] Fix for canon/older abseil --- Makefile | 4 +++- viam-cartographer/CMakeLists.txt | 6 +++++- viam-cartographer/cartographer_patches/carto.patch | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index bab66c7a..c91188e7 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,7 @@ clean: clean-all: git clean -fxd + cd viam-cartographer/cartographer && git checkout . && git clean -fxd ensure-submodule-initialized: @if [ ! -d "viam-cartographer/cartographer/cartographer" ]; then \ @@ -55,7 +56,8 @@ ensure-submodule-initialized: else \ echo "Submodule found successfully"; \ fi - cd viam-cartographer/cartographer && git checkout . && git apply ../cartographer_patches/carto.patch + grep -q viam-patched viam-cartographer/cartographer/CMakeLists.txt || \ + (cd viam-cartographer/cartographer && git checkout . && git apply ../cartographer_patches/carto.patch) lint-setup-cpp: ifneq (, $(shell which brew)) diff --git a/viam-cartographer/CMakeLists.txt b/viam-cartographer/CMakeLists.txt index 65a07eca..ef5afa11 100644 --- a/viam-cartographer/CMakeLists.txt +++ b/viam-cartographer/CMakeLists.txt @@ -70,9 +70,13 @@ target_link_libraries(${PROJECT_NAME} PUBLIC cartographer ${GRPCPP_LIBRARIES} ${PCL_LIBRARIES} - absl::log_internal_check_op # should be included from protobuf, but isn't ) +# should be included from protobuf, but isn't in newer versions, so workaround here +if (TARGET absl::log_internal_check_op) + target_link_libraries(${PROJECT_NAME} PUBLIC absl::log_internal_check_op) +endif() + # executables add_executable(carto_grpc_server src/main.cc) target_link_libraries(carto_grpc_server PUBLIC viam-cartographer) diff --git a/viam-cartographer/cartographer_patches/carto.patch b/viam-cartographer/cartographer_patches/carto.patch index 417341de..333fdcfc 100644 --- a/viam-cartographer/cartographer_patches/carto.patch +++ b/viam-cartographer/cartographer_patches/carto.patch @@ -1,5 +1,5 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index ef2fcb3..59a5dab 100644 +index ef2fcb3..e961b02 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,33 +1,16 @@ From 05f5f85b59ef919da791b24224a4c24d2c1635d1 Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 13:22:14 -0500 Subject: [PATCH 06/17] Further patches --- viam-cartographer/CMakeLists.txt | 5 --- .../cartographer_patches/carto.patch | 31 ++++++++++++------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/viam-cartographer/CMakeLists.txt b/viam-cartographer/CMakeLists.txt index ef5afa11..ca81a9f3 100644 --- a/viam-cartographer/CMakeLists.txt +++ b/viam-cartographer/CMakeLists.txt @@ -72,11 +72,6 @@ target_link_libraries(${PROJECT_NAME} PUBLIC ${PCL_LIBRARIES} ) -# should be included from protobuf, but isn't in newer versions, so workaround here -if (TARGET absl::log_internal_check_op) - target_link_libraries(${PROJECT_NAME} PUBLIC absl::log_internal_check_op) -endif() - # executables add_executable(carto_grpc_server src/main.cc) target_link_libraries(carto_grpc_server PUBLIC viam-cartographer) diff --git a/viam-cartographer/cartographer_patches/carto.patch b/viam-cartographer/cartographer_patches/carto.patch index 333fdcfc..6d36915d 100644 --- a/viam-cartographer/cartographer_patches/carto.patch +++ b/viam-cartographer/cartographer_patches/carto.patch @@ -1,8 +1,8 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index ef2fcb3..e961b02 100644 +index ef2fcb3..ba98945 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -1,33 +1,16 @@ +@@ -1,33 +1,17 @@ -# Copyright 2016 The Cartographer Authors -# -# Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,6 +17,7 @@ index ef2fcb3..e961b02 100644 -# See the License for the specific language governing permissions and -# limitations under the License. - ++# viam-patched version cmake_minimum_required(VERSION 3.2) project(cartographer) @@ -37,7 +38,7 @@ index ef2fcb3..e961b02 100644 find_package(absl REQUIRED) set(BOOST_COMPONENTS iostreams) -@@ -38,21 +21,14 @@ endif() +@@ -38,21 +22,14 @@ endif() find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS}) find_package(Ceres REQUIRED COMPONENTS SuiteSparse) find_package(Eigen3 REQUIRED) @@ -62,7 +63,7 @@ index ef2fcb3..e961b02 100644 endif() include(FindPkgConfig) -@@ -62,12 +38,6 @@ else() +@@ -62,12 +39,6 @@ else() find_library(CAIRO_LIBRARIES cairo) endif() @@ -75,7 +76,7 @@ index ef2fcb3..e961b02 100644 # Install catkin package.xml install(FILES package.xml DESTINATION share/cartographer) -@@ -80,9 +50,6 @@ install(DIRECTORY cmake DESTINATION share/cartographer/) +@@ -80,9 +51,6 @@ install(DIRECTORY cmake DESTINATION share/cartographer/) file(GLOB_RECURSE ALL_LIBRARY_HDRS "cartographer/*.h") file(GLOB_RECURSE ALL_LIBRARY_SRCS "cartographer/*.cc") @@ -85,7 +86,7 @@ index ef2fcb3..e961b02 100644 file(GLOB_RECURSE ALL_EXECUTABLES "cartographer/*_main.cc") # Remove dotfiles/-folders that could potentially pollute the build. -@@ -90,37 +57,32 @@ file(GLOB_RECURSE ALL_DOTFILES ".*/*") +@@ -90,37 +58,32 @@ file(GLOB_RECURSE ALL_DOTFILES ".*/*") if (ALL_DOTFILES) list(REMOVE_ITEM ALL_LIBRARY_HDRS ${ALL_DOTFILES}) list(REMOVE_ITEM ALL_LIBRARY_SRCS ${ALL_DOTFILES}) @@ -142,7 +143,7 @@ index ef2fcb3..e961b02 100644 file(GLOB_RECURSE ALL_PROTOS "cartographer/*.proto") file(GLOB_RECURSE ALL_GRPC_SERVICES "cartographer/*_service.proto") -@@ -155,33 +117,6 @@ set_source_files_properties(${ALL_PROTO_SRCS} ${ALL_PROTO_HDRS} PROPERTIES GENER +@@ -155,33 +118,6 @@ set_source_files_properties(${ALL_PROTO_SRCS} ${ALL_PROTO_HDRS} PROPERTIES GENER list(APPEND ALL_LIBRARY_HDRS ${ALL_PROTO_HDRS}) list(APPEND ALL_LIBRARY_SRCS ${ALL_PROTO_SRCS}) @@ -176,7 +177,7 @@ index ef2fcb3..e961b02 100644 set(INSTALL_GENERATED_HDRS ${ALL_PROTO_HDRS} ${ALL_GRPC_SERVICE_HDRS}) add_library(${PROJECT_NAME} STATIC ${ALL_LIBRARY_HDRS} ${ALL_LIBRARY_SRCS}) -@@ -190,46 +125,12 @@ configure_file( +@@ -190,46 +126,10 @@ configure_file( ${PROJECT_SOURCE_DIR}/cartographer/common/config.h.cmake ${PROJECT_BINARY_DIR}/cartographer/common/config.h) @@ -218,13 +219,21 @@ index ef2fcb3..e961b02 100644 "${EIGEN3_INCLUDE_DIR}") target_link_libraries(${PROJECT_NAME} PUBLIC ${EIGEN3_LIBRARIES}) - target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC +-target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC - "${CERES_INCLUDE_DIRS}") -+ $) target_link_libraries(${PROJECT_NAME} PUBLIC ${CERES_LIBRARIES}) target_include_directories(${PROJECT_NAME} SYSTEM PUBLIC -@@ -285,55 +186,11 @@ target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY} +@@ -280,60 +180,19 @@ target_link_libraries(${PROJECT_NAME} PUBLIC ${PROTOBUF_LIBRARY} + absl::strings + absl::synchronization + absl::time +- absl::utility ++ absl::utility + ) ++if (TARGET absl::log_internal_check_op) ++ target_link_libraries(${PROJECT_NAME} PUBLIC absl::log_internal_check_op) ++endif() if (NOT WIN32) target_link_libraries(${PROJECT_NAME} PUBLIC pthread) endif() From 7be1d19a94dddfa2e87d28adaa57762a73576fae Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 14:00:49 -0500 Subject: [PATCH 07/17] Update setup with missing packages --- Makefile | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index c91188e7..467c82fb 100644 --- a/Makefile +++ b/Makefile @@ -20,15 +20,6 @@ artifact-pull: $(TOOL_BIN)/artifact $(TOOL_BIN)/artifact: go install go.viam.com/utils/artifact/cmd/artifact -bufinstall: -ifneq (, $(shell which brew)) - brew install grpc openssl -else ifneq (, $(shell which apt-get)) - sudo apt-get install -y protobuf-compiler-grpc libgrpc-dev libgrpc++-dev -else - $(error "Unsupported system. Only apt and brew currently supported.") -endif - $(TOOL_BIN)/buf: go install github.com/bufbuild/buf/cmd/buf@v1.8.0 @@ -59,22 +50,13 @@ ensure-submodule-initialized: grep -q viam-patched viam-cartographer/cartographer/CMakeLists.txt || \ (cd viam-cartographer/cartographer && git checkout . && git apply ../cartographer_patches/carto.patch) -lint-setup-cpp: -ifneq (, $(shell which brew)) - brew install clang-format -else ifneq (, $(shell which apt-get)) - sudo apt-get install -y clang-format -else - $(error "Unsupported system. Only apt and brew currently supported.") -endif - lint-setup-go: go install \ github.com/edaniels/golinters/cmd/combined \ github.com/golangci/golangci-lint/cmd/golangci-lint \ github.com/rhysd/actionlint/cmd/actionlint -lint-setup: lint-setup-cpp lint-setup-go +lint-setup: lint-setup-go lint-cpp: find . -type f -not -path \ @@ -95,7 +77,7 @@ lint: ensure-submodule-initialized lint-cpp lint-go setup: ensure-submodule-initialized artifact-pull ifneq (, $(shell which brew)) brew update - brew install abseil boost ceres-solver protobuf ninja cairo googletest lua@5.3 pkg-config cmake go@1.20 grpc + brew install abseil boost ceres-solver protobuf ninja cairo googletest lua@5.3 pkg-config cmake go@1.20 grpc clang-format brew link lua@5.3 brew install openssl@3 eigen gflags glog suite-sparse sphinx-doc pcl else ifneq (, $(shell which apt-get)) @@ -103,7 +85,7 @@ else ifneq (, $(shell which apt-get)) $(warning "Packages may be too old to work with this project.") sudo apt-get update sudo apt-get install -y cmake ninja-build libgmock-dev libboost-iostreams-dev liblua5.3-dev libcairo2-dev python3-sphinx \ - libabsl-dev libceres-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc libpcl-dev + libabsl-dev libceres-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc libpcl-dev libgrpc-dev libgrpc++-dev clang-format else $(error "Unsupported system. Only apt and brew currently supported.") endif From 95c324c6de6eaf70434edf3fe031895792160852 Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 14:53:02 -0500 Subject: [PATCH 08/17] More cleanup --- .github/workflows/appimage.yml | 31 +++++++++---------------------- .github/workflows/test.yml | 29 +++++++++++------------------ Makefile | 30 +++++++++++++++--------------- 3 files changed, 35 insertions(+), 55 deletions(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 4da5d147..6fda0098 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -31,7 +31,6 @@ jobs: uses: actions/checkout@v3 with: submodules: recursive - path: viam-cartographer - name: Check out PR branch code if: github.event_name == 'pull_request_target' @@ -39,7 +38,6 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} submodules: recursive - path: viam-cartographer - name: apt update run: | @@ -48,31 +46,20 @@ jobs: - name: make clean run: | chown -R testbot:testbot . - sudo -u testbot bash -lc 'cd viam-cartographer && make clean' + sudo -u testbot bash -lc 'make clean' - - name: make bufinstall buf setup - uses: nick-fields/retry@v2 - with: - timeout_minutes: 5 - max_attempts: 3 - retry_on: timeout - shell: bash - command: | - chown -R testbot:testbot . - sudo -u testbot bash -lc 'cd viam-cartographer && make bufinstall buf setup' - - - name: make build + - name: make setup run: | - sudo -u testbot bash -lc 'cd viam-cartographer && make build' + sudo -u testbot bash -lc 'make setup' - - name: make install-lua-files + - name: make build run: | - sudo -u testbot bash -lc 'cd viam-cartographer && make install-lua-files' + sudo -u testbot bash -lc 'make build' - name: Build AppImage (PR) if: contains(github.event.pull_request.labels.*.name, 'appimage') || contains(github.event.pull_request.labels.*.name, 'appimage-ignore-tests') run: | - sudo -u testbot bash -lc 'cd viam-cartographer && make BUILD_CHANNEL="pr-${{ github.event.pull_request.number }}" appimage' + sudo -u testbot bash -lc 'make BUILD_CHANNEL="pr-${{ github.event.pull_request.number }}" appimage' - name: Authorize GCP Upload uses: google-github-actions/auth@v1 @@ -84,7 +71,7 @@ jobs: uses: google-github-actions/upload-cloud-storage@v0.10.4 with: headers: "cache-control: no-cache" - path: 'viam-cartographer/etc/packaging/appimages/deploy/' + path: 'etc/packaging/appimages/deploy/' destination: 'packages.viam.com/apps/slam-servers/' glob: '*' parent: false @@ -92,14 +79,14 @@ jobs: - name: Build AppImage (Latest) if: github.event_name == 'workflow_dispatch' || github.event_name == 'push' - run: sudo -u testbot bash -lc 'cd viam-cartographer && make appimage-ci' + run: sudo -u testbot bash -lc 'make appimage-ci' - name: Deploy Files (Latest) if: github.event_name == 'workflow_dispatch' || github.event_name == 'push' uses: google-github-actions/upload-cloud-storage@v0.10.4 with: headers: "cache-control: no-cache" - path: 'viam-cartographer/etc/packaging/appimages/deploy/' + path: 'etc/packaging/appimages/deploy/' destination: 'packages.viam.com/apps/slam-servers/' glob: '*' parent: false diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1150358f..87172cdd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -64,7 +64,7 @@ jobs: git init git add . chown -R testbot:testbot . - sudo -u testbot bash -lc 'make lint-setup lint' + sudo -u testbot bash -lc 'sudo apt-get install -y clang-format && make lint' GEN_DIFF=$(git status -s) if [ -n "$GEN_DIFF" ]; then @@ -73,29 +73,22 @@ jobs: exit 1 fi - - name: make bufinstall buf setup setup-cpp-full-mod - uses: nick-fields/retry@v2 - with: - timeout_minutes: 5 - max_attempts: 3 - retry_on: timeout - shell: bash - command: | - chown -R testbot:testbot . - sudo -u testbot bash -lc 'make bufinstall buf setup setup-cpp-full-mod' + - name: make setup + run: | + sudo -u testbot bash -lc 'make setup' - name: make build run: | sudo -u testbot bash -lc 'make build' - - name: make install-lua-files - run: | - sudo -u testbot bash -lc 'make install-lua-files' - - name: make test run: | sudo -u testbot bash -lc 'make test' + - name: make install-lua-files + run: | + sudo -u testbot bash -lc 'make install-lua-files' + - name: Copy carto_grpc_server binary if: matrix.platform == 'linux/amd64' run: | @@ -104,12 +97,12 @@ jobs: - name: Run viam-cartographer cartographer integration tests if: matrix.platform == 'linux/amd64' run: | - sudo -u testbot bash -lc 'sudo go test -v -race -run TestCartographerIntegration' + sudo -u testbot bash -lc 'go test -v -race -run TestCartographerIntegration' - - name: make test-cpp-full-mod-valgrind + - name: make setup-cpp-full-mod test-cpp-full-mod-valgrind # Currently we only run valgrind on arm64 as x86 # doesn't valgrind clean due to what appears to be a bug in GLOG # https://github.com/viamrobotics/viam-cartographer/actions/runs/5156238014/jobs/9287413446 if: matrix.platform != 'linux/amd64' run: | - sudo -u testbot bash -lc 'make test-cpp-full-mod-valgrind' + sudo -u testbot bash -lc 'make setup-cpp-full-mod test-cpp-full-mod-valgrind' diff --git a/Makefile b/Makefile index 467c82fb..206d743d 100644 --- a/Makefile +++ b/Makefile @@ -50,14 +50,6 @@ ensure-submodule-initialized: grep -q viam-patched viam-cartographer/cartographer/CMakeLists.txt || \ (cd viam-cartographer/cartographer && git checkout . && git apply ../cartographer_patches/carto.patch) -lint-setup-go: - go install \ - github.com/edaniels/golinters/cmd/combined \ - github.com/golangci/golangci-lint/cmd/golangci-lint \ - github.com/rhysd/actionlint/cmd/actionlint - -lint-setup: lint-setup-go - lint-cpp: find . -type f -not -path \ -and ! -path '*viam-cartographer/cartographer*' \ @@ -67,14 +59,22 @@ lint-cpp: -and \( -iname '*.h' -o -iname '*.cpp' -o -iname '*.cc' \) \ | xargs clang-format -i --style="{BasedOnStyle: Google, IndentWidth: 4}" -lint-go: +lint-go: $(TOOL_BIN)/combined $(TOOL_BIN)/golangci-lint $(TOOL_BIN)/actionlint go vet -vettool=$(TOOL_BIN)/combined ./... GOGC=50 golangci-lint run -v --fix --config=./etc/golangci.yaml actionlint +$(TOOL_BIN)/combined $(TOOL_BIN)/golangci-lint $(TOOL_BIN)/actionlint: + go install \ + github.com/edaniels/golinters/cmd/combined \ + github.com/golangci/golangci-lint/cmd/golangci-lint \ + github.com/rhysd/actionlint/cmd/actionlint + lint: ensure-submodule-initialized lint-cpp lint-go -setup: ensure-submodule-initialized artifact-pull +setup: install-dependencies ensure-submodule-initialized artifact-pull + +install-dependencies: ifneq (, $(shell which brew)) brew update brew install abseil boost ceres-solver protobuf ninja cairo googletest lua@5.3 pkg-config cmake go@1.20 grpc clang-format @@ -93,16 +93,12 @@ endif build: ensure-submodule-initialized buf build-module cd viam-cartographer && cmake -Bbuild -G Ninja ${EXTRA_CMAKE_FLAGS} && cmake --build build -build-debug: EXTRA_CMAKE_FLAGS+=" -DCMAKE_BUILD_TYPE=Debug" +build-debug: EXTRA_CMAKE_FLAGS += -DCMAKE_BUILD_TYPE=Debug -DFORCE_DEBUG_BUILD=True build-debug: build build-module: mkdir -p bin && go build $(GO_BUILD_LDFLAGS) -o bin/cartographer-module module/main.go -install-lua-files: - sudo mkdir -p /usr/local/share/cartographer/lua_files/ - sudo cp viam-cartographer/lua_files/* /usr/local/share/cartographer/lua_files/ - test-cpp: viam-cartographer/build/unit_tests -p -l all @@ -126,6 +122,10 @@ test-go: test: test-cpp test-go +install-lua-files: + sudo mkdir -p /usr/local/share/cartographer/lua_files/ + sudo cp viam-cartographer/lua_files/* /usr/local/share/cartographer/lua_files/ + install: sudo rm -f /usr/local/bin/carto_grpc_server sudo rm -f /usr/local/bin/cartographer-module From 4d3ebce42fb2f20eb0dd093f7f3941287fca249a Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 16:04:26 -0500 Subject: [PATCH 09/17] Update readme and other fixes --- .github/workflows/test.yml | 8 ++------ Makefile | 6 +++--- README.md | 10 +++------- 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 87172cdd..9ee9ac4d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -85,14 +85,10 @@ jobs: run: | sudo -u testbot bash -lc 'make test' - - name: make install-lua-files - run: | - sudo -u testbot bash -lc 'make install-lua-files' - - - name: Copy carto_grpc_server binary + - name: make install if: matrix.platform == 'linux/amd64' run: | - sudo cp viam-cartographer/build/carto_grpc_server /usr/local/bin/carto_grpc_server + sudo -u testbot bash -lc 'make install' - name: Run viam-cartographer cartographer integration tests if: matrix.platform == 'linux/amd64' diff --git a/Makefile b/Makefile index 206d743d..483b5d5d 100644 --- a/Makefile +++ b/Makefile @@ -79,12 +79,12 @@ ifneq (, $(shell which brew)) brew update brew install abseil boost ceres-solver protobuf ninja cairo googletest lua@5.3 pkg-config cmake go@1.20 grpc clang-format brew link lua@5.3 - brew install openssl@3 eigen gflags glog suite-sparse sphinx-doc pcl + brew install openssl@3 eigen gflags glog suite-sparse sphinx-doc pcl nlopt-static else ifneq (, $(shell which apt-get)) $(warning "Installing cartographer external dependencies via APT.") $(warning "Packages may be too old to work with this project.") sudo apt-get update - sudo apt-get install -y cmake ninja-build libgmock-dev libboost-iostreams-dev liblua5.3-dev libcairo2-dev python3-sphinx \ + sudo apt-get install -y cmake ninja-build libgmock-dev libboost-iostreams-dev liblua5.3-dev libcairo2-dev python3-sphinx libnlopt-dev \ libabsl-dev libceres-dev libprotobuf-dev protobuf-compiler protobuf-compiler-grpc libpcl-dev libgrpc-dev libgrpc++-dev clang-format else $(error "Unsupported system. Only apt and brew currently supported.") @@ -126,7 +126,7 @@ install-lua-files: sudo mkdir -p /usr/local/share/cartographer/lua_files/ sudo cp viam-cartographer/lua_files/* /usr/local/share/cartographer/lua_files/ -install: +install: install-lua-files sudo rm -f /usr/local/bin/carto_grpc_server sudo rm -f /usr/local/bin/cartographer-module sudo cp viam-cartographer/build/carto_grpc_server /usr/local/bin/carto_grpc_server diff --git a/README.md b/README.md index d5d9b90f..409b858f 100644 --- a/README.md +++ b/README.md @@ -84,15 +84,11 @@ These containers are set to persist between sessions via the `persistent` parame #### Setup, build, and run the binary ```bash -# Setup the gRPC files -make bufinstall && make buf -# Install dependencies +# Install dependencies using brew (or apt-get) make setup -# Build & install the binary +# Build make build -# Install lua files -make install-lua-files -# Install the cartographer-module binary +# Install lua files and binaries to /usr/local make install # Run the binary cartographer-module From fb77da1fb97e103ae645fbd97e27f8cfd685e1ae Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 16:14:53 -0500 Subject: [PATCH 10/17] Update appimage recipes --- etc/packaging/appimages/cartographer-module-aarch64.yml | 5 +---- etc/packaging/appimages/cartographer-module-x86_64.yml | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/etc/packaging/appimages/cartographer-module-aarch64.yml b/etc/packaging/appimages/cartographer-module-aarch64.yml index 5a9ea1db..3da9c741 100644 --- a/etc/packaging/appimages/cartographer-module-aarch64.yml +++ b/etc/packaging/appimages/cartographer-module-aarch64.yml @@ -7,13 +7,10 @@ script: - mkdir -p $TARGET_APPDIR/usr/share/cartographer/lua_files - cp ../../../bin/cartographer-module $TARGET_APPDIR/usr/bin/ - cp ../../../viam-cartographer/build/carto_grpc_server $TARGET_APPDIR/usr/bin/ - - cp ../../../viam-cartographer/cartographer/build/libcartographer.a $TARGET_APPDIR/usr/lib/ - - cp ../../../viam-cartographer/build/libviam-cartographer.a $TARGET_APPDIR/usr/lib/ - cp ../../../viam-cartographer/lua_files/* $TARGET_APPDIR/usr/share/cartographer/lua_files - mkdir -p $TARGET_APPDIR/usr/share/icons/viam/256x256/apps/ - cp ./viam-server.png $TARGET_APPDIR/usr/share/icons/viam/256x256/apps/viam-server.png - - go install github.com/Otterverse/aix@latest - - cp `go env GOPATH`/bin/aix $TARGET_APPDIR/usr/bin/ + - GOBIN=$TARGET_APPDIR/usr/bin/ go install github.com/Otterverse/aix@latest - chmod 755 $TARGET_APPDIR/usr/bin/* AppDir: diff --git a/etc/packaging/appimages/cartographer-module-x86_64.yml b/etc/packaging/appimages/cartographer-module-x86_64.yml index b113a4f2..18115da4 100644 --- a/etc/packaging/appimages/cartographer-module-x86_64.yml +++ b/etc/packaging/appimages/cartographer-module-x86_64.yml @@ -7,13 +7,10 @@ script: - mkdir -p $TARGET_APPDIR/usr/share/cartographer/lua_files - cp ../../../bin/cartographer-module $TARGET_APPDIR/usr/bin/ - cp ../../../viam-cartographer/build/carto_grpc_server $TARGET_APPDIR/usr/bin/ - - cp ../../../viam-cartographer/cartographer/build/libcartographer.a $TARGET_APPDIR/usr/lib/ - - cp ../../../viam-cartographer/build/libviam-cartographer.a $TARGET_APPDIR/usr/lib/ - cp ../../../viam-cartographer/lua_files/* $TARGET_APPDIR/usr/share/cartographer/lua_files - mkdir -p $TARGET_APPDIR/usr/share/icons/viam/256x256/apps/ - cp ./viam-server.png $TARGET_APPDIR/usr/share/icons/viam/256x256/apps/viam-server.png - - go install github.com/Otterverse/aix@latest - - cp `go env GOPATH`/bin/aix $TARGET_APPDIR/usr/bin/ + - GOBIN=$TARGET_APPDIR/usr/bin/ go install github.com/Otterverse/aix@latest - chmod 755 $TARGET_APPDIR/usr/bin/* AppDir: From 1b31d39b8a8c6ceaf0ffed37f0d337587704d071 Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 16:44:23 -0500 Subject: [PATCH 11/17] Fix lint workflow --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9ee9ac4d..e1d46f5c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -57,7 +57,7 @@ jobs: - name: apt update run: | - sudo apt update + apt-get update - name: Verify no uncommitted changes from make lint run: | @@ -65,7 +65,7 @@ jobs: git add . chown -R testbot:testbot . sudo -u testbot bash -lc 'sudo apt-get install -y clang-format && make lint' - GEN_DIFF=$(git status -s) + GEN_DIFF=$(git status -s --ignore-submodules) if [ -n "$GEN_DIFF" ]; then echo '"make lint" resulted in changes not in git' 1>&2 From 053b3e8bdb40b6d1b699e701231eb27504b1495f Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 16:47:08 -0500 Subject: [PATCH 12/17] SMURF appimage --- .github/workflows/appimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 6fda0098..364d8376 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -87,7 +87,7 @@ jobs: with: headers: "cache-control: no-cache" path: 'etc/packaging/appimages/deploy/' - destination: 'packages.viam.com/apps/slam-servers/' + destination: 'packages.viam.com/apps/slam-servers/SMURF/' glob: '*' parent: false gzip: false From d58a5700a08886dc608e5a9301db90ef54a27075 Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 16:57:59 -0500 Subject: [PATCH 13/17] Fix test --- cartofacade/cgo_api.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cartofacade/cgo_api.go b/cartofacade/cgo_api.go index b98d2718..d2d90ae5 100644 --- a/cartofacade/cgo_api.go +++ b/cartofacade/cgo_api.go @@ -8,7 +8,7 @@ package cartofacade #cgo CFLAGS: -I../viam-cartographer/src/carto_facade // the libraries that need to be linked can be derived from line 258 of the build.ninja file that is autogenerated during make build - #cgo LDFLAGS: -L../viam-cartographer/build -L../viam-cartographer/cartographer/build -lviam-cartographer -lcartographer -ldl -lm -labsl_hash -labsl_city -labsl_bad_optional_access -labsl_strerror -labsl_str_format_internal -labsl_synchronization -labsl_strings -labsl_throw_delegate -lcairo -llua5.3 -lstdc++ -lceres -lprotobuf -lglog -lboost_filesystem -lboost_iostreams -lpcl_io -lpcl_common -labsl_raw_hash_set + #cgo LDFLAGS: -L../viam-cartographer/build -L../viam-cartographer/build/cartographer -lviam-cartographer -lcartographer -ldl -lm -labsl_hash -labsl_city -labsl_bad_optional_access -labsl_strerror -labsl_str_format_internal -labsl_synchronization -labsl_strings -labsl_throw_delegate -lcairo -llua5.3 -lstdc++ -lceres -lprotobuf -lglog -lboost_filesystem -lboost_iostreams -lpcl_io -lpcl_common -labsl_raw_hash_set #include "../viam-cartographer/src/carto_facade/carto_facade.h" From 33f507437c4b7edecd46c21db17b70873e7a5599 Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 17:05:41 -0500 Subject: [PATCH 14/17] Workflow fixes --- .github/workflows/test.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e1d46f5c..ce4a715c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -81,15 +81,15 @@ jobs: run: | sudo -u testbot bash -lc 'make build' - - name: make test - run: | - sudo -u testbot bash -lc 'make test' - - name: make install if: matrix.platform == 'linux/amd64' run: | sudo -u testbot bash -lc 'make install' + - name: make test + run: | + sudo -u testbot bash -lc 'make test' + - name: Run viam-cartographer cartographer integration tests if: matrix.platform == 'linux/amd64' run: | From b7f89cb109a8e9dd9c9582d3607a28ea1958027b Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 17:15:14 -0500 Subject: [PATCH 15/17] Workflow fixes --- .github/workflows/test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ce4a715c..dccb0f44 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -82,7 +82,6 @@ jobs: sudo -u testbot bash -lc 'make build' - name: make install - if: matrix.platform == 'linux/amd64' run: | sudo -u testbot bash -lc 'make install' From 3371d1ed3d032739fdd951401441ae49593ffe10 Mon Sep 17 00:00:00 2001 From: James Otting Date: Tue, 20 Jun 2023 17:31:07 -0500 Subject: [PATCH 16/17] DeSMURF --- .github/workflows/appimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 364d8376..6fda0098 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -87,7 +87,7 @@ jobs: with: headers: "cache-control: no-cache" path: 'etc/packaging/appimages/deploy/' - destination: 'packages.viam.com/apps/slam-servers/SMURF/' + destination: 'packages.viam.com/apps/slam-servers/' glob: '*' parent: false gzip: false From d52238e892fe60007430e64dbbaf04177ebfd831 Mon Sep 17 00:00:00 2001 From: James Otting Date: Thu, 22 Jun 2023 13:53:01 -0500 Subject: [PATCH 17/17] Remove stray echo --- Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile b/Makefile index 483b5d5d..0792a4dc 100644 --- a/Makefile +++ b/Makefile @@ -28,7 +28,6 @@ $(TOOL_BIN)/protoc-gen-grpc-cpp: which grpc_cpp_plugin && ln -sf `which grpc_cpp_plugin` $(TOOL_BIN)/protoc-gen-grpc-cpp buf: $(TOOL_BIN)/buf $(TOOL_BIN)/protoc-gen-grpc-cpp - echo ${PATH} buf generate --template ./buf/buf.gen.yaml buf.build/viamrobotics/api buf generate --template ./buf/buf.grpc.gen.yaml buf.build/viamrobotics/api buf generate --template ./buf/buf.gen.yaml buf.build/googleapis/googleapis