Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 15 additions & 19 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,27 @@
# Author: Dmitry Ponomarev <ponomarevda96@gmail.com>

cmake_minimum_required(VERSION 3.15.3)
set(DRONECAN_LIB_DIR ${CMAKE_CURRENT_LIST_DIR})
project(DronecanApp VERSION 0.9.0)

set(SUPPORTED_PLATFORMS "bxcan;fdcan;socketcan")
if(NOT CAN_PLATFORM IN_LIST SUPPORTED_PLATFORMS)
message(SEND_ERROR "CAN_PLATFORM is not specified or unsupported! Options: bxcan, fdcan, socketcan.")
endif()
include(${CMAKE_CURRENT_LIST_DIR}/platform_specific/${CAN_PLATFORM}/config.cmake)

include(platform_specific/${CAN_PLATFORM}/config.cmake)
include(cmake/AddLibparams.cmake)

if(NOT DEFINED LIBPARAMS_PATH)
message(SEND_ERROR "LIBPARAMS_PATH is not specified!")
endif()
include(${LIBPARAMS_PATH}/CMakeLists.txt)

set(DRONECAN_SOURCES
${DRONECAN_PLATFORM_SOURCES}
${DRONECAN_LIB_DIR}/Libs/libcanard_v0/canard.c
${DRONECAN_LIB_DIR}/src/dronecan.c
${DRONECAN_LIB_DIR}/src/weak.c
${libparamsSrc}
add_library(${PROJECT_NAME} STATIC
${DRONECAN_PLATFORM_SOURCES}
Libs/libcanard_v0/canard.c
src/dronecan.c
src/weak.c
)

set(DRONECAN_HEADERS
${DRONECAN_LIB_DIR}/Libs
${DRONECAN_LIB_DIR}/include/application
${DRONECAN_LIB_DIR}/include/serialization
${libparamsHeaders}
target_include_directories(${PROJECT_NAME} PUBLIC
Libs
include/application
include/serialization
)

check_libparams_version(90000) # 0.9.0
target_link_libraries(${PROJECT_NAME} libparams)
12 changes: 6 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,22 @@

ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
BUILD_DIR:=$(ROOT_DIR)/build
BUILD_EXAMPLES_DIR:=$(BUILD_DIR)/src/examples
LIBPARAMS_DIR:=${BUILD_DIR}/external/libparams
BUILD_UBUNTU_DIR:=$(BUILD_DIR)/ubuntu
LIBPARAMS_SRC_DIR:=${BUILD_DIR}/external/libparams

define build_and_run_sitl
$(info Build example $(1)...)
mkdir -p $(BUILD_EXAMPLES_DIR)/$(1)
cd $(BUILD_EXAMPLES_DIR)/$(1) && cmake $(ROOT_DIR)/examples/$(1) && make -s
$(BUILD_EXAMPLES_DIR)/$(1)/application
mkdir -p $(BUILD_UBUNTU_DIR)
cd $(BUILD_UBUNTU_DIR) && cmake $(ROOT_DIR)/examples/$(1) && make -s
$(BUILD_UBUNTU_DIR)/ubuntu_application
endef

ubuntu: clone_dependencies
$(call build_and_run_sitl,ubuntu)

clone_dependencies:
mkdir -p build
if [ ! -d "${LIBPARAMS_DIR}" ]; then git clone --depth 1 --branch v0.8.4 https://github.com/PonomarevDA/libparams.git ${LIBPARAMS_DIR}; fi
if [ ! -d "${LIBPARAMS_SRC_DIR}" ]; then git clone --depth 1 --branch pr-refactor-cmake https://github.com/PonomarevDA/libparams.git ${LIBPARAMS_SRC_DIR}; fi

clean:
rm -rf build/examples/
Expand Down
39 changes: 18 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ The following auxilliary features should be provided as well:
- [x] circuit status
- [x] fuel tank
- [x] esc
- [ ] ice
- [x] ice
- [x] indication
- [x] power
- [ ] rangefinder
- [x] rangefinder
- [ ] gnss
- [ ] mag
- [ ] etc
Expand All @@ -49,37 +49,34 @@ The source code is divided into a few folders:


Notes:
- It depends on libparams v0.8.4 library.
- It depends on libparams v0.9.0 library.
- It is not thread safe.

## How to integrate the library into a project

Add the following lines into CMakeLists.txt of your project:
It is expected to build a static library from source code into your local build directory.

```cmake
# 1. Specify the CAN_PLATFORM. Options: bxcan, fdcan or socketcan.
set(CAN_PLATFORM socketcan)
The most important steps are:

# 2. Specify path to libparams and platform. Options: stm32f103, stm32g0b1, ubuntu.
set(LIBPARAMS_PATH ../../build/libparams)
set(LIBPARAMS_PLATFORM ubuntu)
```cmake
# 1. Build the only dependency - libparams. Specify a desired LIBPARAMS_PLATFORM.
set(LIBPARAMS_PLATFORM ubuntu)
add_subdirectory(${LIBPARAMS_PATH} ${BUILD_UBUNTU_DIR}/libparams)

# 3. Include the CMakeLists.txt
include(../../CMakeLists.txt)
# 2. Build libDronecanApp itself. Specify a desired plaform with CAN_PLATFORM.
set(CAN_PLATFORM socketcan)
add_subdirectory(${ROOT_DIR} ${BUILD_UBUNTU_LIB_DRONECAN_APP_DIR})

# 4. Add DroneCAN related source files and headers to you target.
add_executable(${EXECUTABLE}
...
${DRONECAN_SOURCES}
...
)
target_include_directories(${EXECUTABLE} PRIVATE
...
${DRONECAN_HEADERS}
# 3. Add executable for your application
add_executable(${APPLICATION}
...
)

# 4. Link the library to your application
target_link_libraries(${APPLICATION} DronecanApp)
```

For more details, please check an example: [examples/ubuntu/CMakeLists.txt](examples/ubuntu/CMakeLists.txt).

## Minimal application example

Expand Down
8 changes: 8 additions & 0 deletions cmake/AddLibparams.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
function(check_libparams_version MINIMUM_REQUIRED_VERSION)
if(TARGET libparams)
get_target_property(LIBPARAMS_VERSION libparams VERSION)
message(STATUS "libparams version check is not implemented yet")
else()
message(FATAL_ERROR "libparams not found")
endif()
endfunction()
74 changes: 38 additions & 36 deletions examples/ubuntu/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,35 +3,54 @@
# Author: Dmitry Ponomarev <ponomarevda96@gmail.com>

cmake_minimum_required(VERSION 3.15.3)
project(ubuntu CXX C ASM)
project(ubuntu_application CXX C ASM)

# Pathes
set(EXAMPLES_UBUNTU_DIR ${CMAKE_CURRENT_LIST_DIR})
cmake_path(GET CMAKE_CURRENT_LIST_DIR PARENT_PATH EXAMPLES_DIR)
cmake_path(GET EXAMPLES_DIR PARENT_PATH ROOT_DIR)
set(CMAKE_DIR ${ROOT_DIR}/cmake)
set(BUILD_DIR ${ROOT_DIR}/build)
set(BUILD_UBUNTU_DIR ${ROOT_DIR}/build/ubuntu)
set(LIBPARAMS_PATH ${BUILD_DIR}/external/libparams)
set(BUILD_UBUNTU_LIB_DRONECAN_APP_DIR ${BUILD_UBUNTU_DIR}/libDronecanApp)

# Pre-build
execute_process(
COMMAND git rev-parse --short=16 HEAD
COMMAND_ERROR_IS_FATAL ANY
OUTPUT_VARIABLE GIT_HASH_SHORT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(GIT_HASH "0x${GIT_HASH_SHORT}")
add_definitions(-DGIT_HASH=${GIT_HASH})
add_definitions(-DAPP_VERSION_MAJOR=0)
add_definitions(-DAPP_VERSION_MINOR=1)
add_definitions(-DHW_VERSION_MAJOR=0)
add_definitions(-DHW_VERSION_MINOR=0)
add_definitions(-DAPP_NODE_NAME="${PROJECT_NAME}")

# Build dependencies
set(LIBPARAMS_PLATFORM ubuntu)
add_subdirectory(${LIBPARAMS_PATH} ${BUILD_UBUNTU_DIR}/libparams)

# 1. Specify the CAN_PLATFORM. Options: bxcan, fdcan or socketcan
# Build libDronecanApp
set(CAN_PLATFORM socketcan)
add_subdirectory(${ROOT_DIR} ${BUILD_UBUNTU_LIB_DRONECAN_APP_DIR})

# 2. Specify path to libparams and platform. Options: stm32f103, stm32g0b1, ubuntu
set(LIBPARAMS_PATH ${ROOT_DIR}/build/external/libparams)
set(LIBPARAMS_PLATFORM ubuntu)
# Build application
add_executable(${PROJECT_NAME}
${EXAMPLES_UBUNTU_DIR}/main.cpp
${EXAMPLES_UBUNTU_DIR}/params.cpp
)

# 3. Include the CMakeLists.txt
include(${ROOT_DIR}/CMakeLists.txt)
target_link_libraries(${PROJECT_NAME} DronecanApp)

# 4. Add DroneCAN related source files and headers to you target
add_executable(application
main.cpp
params.cpp
${DRONECAN_SOURCES}
${libparamsSrc}
)
target_include_directories(application PRIVATE
.
${DRONECAN_HEADERS}
${libparamsHeaders}
target_include_directories(${PROJECT_NAME} PRIVATE
${EXAMPLES_UBUNTU_DIR}
)
target_compile_options(application PRIVATE

target_compile_options(${PROJECT_NAME} PRIVATE
-Wall
-Wextra
-Wfloat-equal
Expand All @@ -44,20 +63,3 @@ target_compile_options(application PRIVATE
-Wwrite-strings
-Wswitch-default
)

# 5. (Recommended) Add GIT_HASH based on git repository
execute_process(
COMMAND git rev-parse --short=16 HEAD
COMMAND_ERROR_IS_FATAL ANY
OUTPUT_VARIABLE GIT_HASH_SHORT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(GIT_HASH "0x${GIT_HASH_SHORT}")
add_definitions(-DGIT_HASH=${GIT_HASH})
add_definitions(-DAPP_VERSION_MAJOR=0)
add_definitions(-DAPP_VERSION_MINOR=1)
add_definitions(-DHW_VERSION_MAJOR=0)
add_definitions(-DHW_VERSION_MINOR=0)

# 6. (Recommended) Set node name
add_definitions(-DAPP_NODE_NAME="${PROJECT_NAME}")