obu-firmware builds against vanetza-idf from microbu-esp32c5/external, but that tree was gitignored, so a clone of this repository could not build the firmware it ships. It is now committed here as ordinary files in its own folder, microbu-esp32c5/: the colleague's commit cf4b99f plus the V2X2MAP bridge's signature verification (--trust) used on the bench. Nothing is fetched from or pushed to the colleague's repository; this repository and its remotes carry everything. The folder's own .gitignore keeps build output, downloaded components and private key material out, as it did there; the committed file set is identical to that repository's tracked files. The ESP32-C5 is still flashed from obu-firmware/, which only takes vanetza-idf from microbu-esp32c5/, so the two stay separate folders. FLASHING.md says how to take a newer version of the colleague's tree (copy it over the folder, rebuild, test, commit).
159 lines
5.4 KiB
CMake
159 lines
5.4 KiB
CMake
if(ESP_PLATFORM)
|
|
include("${CMAKE_CURRENT_LIST_DIR}/ports/esp_idf/CMakeLists.txt")
|
|
return()
|
|
endif()
|
|
cmake_minimum_required(VERSION 3.14)
|
|
cmake_policy(VERSION 3.14...3.31)
|
|
project(Vanetza VERSION 26.02)
|
|
set(VANETZA_SOVERSION 0)
|
|
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
|
|
|
|
# Look up threading library (usually pthread)
|
|
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
|
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
|
find_package(Threads MODULE)
|
|
|
|
# Build configuration options
|
|
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
|
|
|
|
option(BUILD_TESTS "Build unit tests" OFF)
|
|
if(BUILD_TESTS)
|
|
enable_testing()
|
|
add_subdirectory(gtest)
|
|
endif()
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib/static)
|
|
|
|
include(GNUInstallDirs)
|
|
include(UseVanetza)
|
|
|
|
# Enable usage of targets' folder property (good for Visual Studio)
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
# Find project dependencies
|
|
find_package(Boost 1.70 REQUIRED COMPONENTS date_time OPTIONAL_COMPONENTS program_options CONFIG)
|
|
vanetza_optional_dependency(GeographicLib 1.37 VANETZA_WITH_GEOGRAPHICLIB "Use GeographicLib for precise geodesy")
|
|
vanetza_optional_dependency(CapnProto 0.8 VANETZA_WITH_RPC "Enable RPC support")
|
|
vanetza_optional_dependency(CryptoPP 5.6.1 VANETZA_WITH_CRYPTOPP "Enable Crypto++ support")
|
|
vanetza_optional_dependency(OpenSSL 1.1.1 VANETZA_WITH_OPENSSL "Enable OpenSSL extensions")
|
|
|
|
option(VANETZA_WITH_PQC "Enable the experimental hybrid-PQC certificate profile" OFF)
|
|
if(VANETZA_WITH_PQC)
|
|
find_package(liboqs 0.14 CONFIG REQUIRED)
|
|
endif()
|
|
|
|
option(VANETZA_EMBED_COUNTRY_DATA "Embed country boundary data into geodesy library" OFF)
|
|
|
|
add_subdirectory(vanetza/access)
|
|
add_subdirectory(vanetza/asn1)
|
|
add_subdirectory(vanetza/btp)
|
|
add_subdirectory(vanetza/common)
|
|
add_subdirectory(vanetza/dcc)
|
|
add_subdirectory(vanetza/facilities)
|
|
add_subdirectory(vanetza/geodesy)
|
|
add_subdirectory(vanetza/geonet)
|
|
add_subdirectory(vanetza/gnss)
|
|
add_subdirectory(vanetza/net)
|
|
add_subdirectory(vanetza/rpc)
|
|
add_subdirectory(vanetza/security)
|
|
add_subdirectory(vanetza/units)
|
|
|
|
option(BUILD_SOCKTAP "Build socktap application" OFF)
|
|
if(BUILD_SOCKTAP)
|
|
add_subdirectory(tools/socktap)
|
|
endif()
|
|
|
|
option(BUILD_CERTIFY "Build certify application" OFF)
|
|
if(BUILD_CERTIFY)
|
|
add_subdirectory(tools/certify)
|
|
if(VANETZA_WITH_PQC)
|
|
add_subdirectory(tools/certify-pqc)
|
|
endif()
|
|
endif()
|
|
|
|
option(BUILD_BENCHMARK "Build benchmark application" OFF)
|
|
if(BUILD_BENCHMARK)
|
|
add_subdirectory(tools/benchmark)
|
|
endif()
|
|
|
|
option(BUILD_FUZZ "Build fuzz harness" OFF)
|
|
if(BUILD_FUZZ)
|
|
add_subdirectory(tools/fuzz-harness)
|
|
endif()
|
|
|
|
option(BUILD_PKI "Build PKI tools" OFF)
|
|
if(BUILD_PKI AND VANETZA_WITH_PQC)
|
|
message(FATAL_ERROR
|
|
"BUILD_PKI cannot be combined with VANETZA_WITH_PQC: the unchanged PKI "
|
|
"client uses Vanetza's standard Security ASN.1 profile. Build the PKI "
|
|
"client separately with VANETZA_WITH_PQC=OFF.")
|
|
endif()
|
|
if(BUILD_PKI)
|
|
add_subdirectory(tools/pki)
|
|
endif()
|
|
|
|
# interface library for convenience
|
|
get_property(_components GLOBAL PROPERTY VANETZA_COMPONENTS)
|
|
add_library(vanetza INTERFACE)
|
|
add_library(Vanetza::vanetza ALIAS vanetza)
|
|
foreach(_component IN LISTS _components)
|
|
target_link_libraries(vanetza INTERFACE ${_component})
|
|
endforeach()
|
|
|
|
# installation rules
|
|
include(CMakePackageConfigHelpers)
|
|
set(CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/Vanetza")
|
|
set(CMAKECONFIG_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/cmake-config")
|
|
write_basic_package_version_file(${CMAKECONFIG_BUILD_DIR}/VanetzaConfigVersion.cmake
|
|
COMPATIBILITY ExactVersion)
|
|
configure_package_config_file(cmake/VanetzaConfig.cmake.in
|
|
${CMAKECONFIG_BUILD_DIR}/VanetzaConfig.cmake
|
|
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
|
|
PATH_VARS CMAKE_INSTALL_INCLUDEDIR)
|
|
|
|
install(TARGETS vanetza EXPORT ${PROJECT_NAME})
|
|
|
|
install(FILES
|
|
${CMAKECONFIG_BUILD_DIR}/VanetzaConfig.cmake
|
|
${CMAKECONFIG_BUILD_DIR}/VanetzaConfigVersion.cmake
|
|
DESTINATION ${CMAKECONFIG_INSTALL_DIR})
|
|
|
|
install(DIRECTORY ${PROJECT_SOURCE_DIR}/cmake/
|
|
DESTINATION ${CMAKECONFIG_INSTALL_DIR}
|
|
FILES_MATCHING
|
|
PATTERN "Find*.cmake")
|
|
|
|
install(EXPORT ${PROJECT_NAME} NAMESPACE Vanetza:: FILE VanetzaTargets.cmake DESTINATION ${CMAKECONFIG_INSTALL_DIR})
|
|
|
|
# install all C++ headers except those found for tests
|
|
file(GLOB_RECURSE _vanetza_headers
|
|
RELATIVE ${PROJECT_SOURCE_DIR}
|
|
CONFIGURE_DEPENDS
|
|
vanetza/*.hpp)
|
|
list(FILTER _vanetza_headers EXCLUDE REGEX "/tests/")
|
|
if(NOT VANETZA_WITH_PQC)
|
|
list(FILTER _vanetza_headers EXCLUDE REGEX "vanetza/security/pqc/")
|
|
endif()
|
|
foreach(_header IN LISTS _vanetza_headers)
|
|
get_filename_component(_dir ${_header} DIRECTORY)
|
|
install(FILES ${_header}
|
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${_dir})
|
|
endforeach()
|
|
|
|
# export build tree (allows import by outside projects)
|
|
option(VANETZA_EXPORT_PACKAGE "Export Vanetza build directory to CMake package registry" OFF)
|
|
if(VANETZA_EXPORT_PACKAGE)
|
|
export(EXPORT ${PROJECT_NAME} NAMESPACE Vanetza:: FILE VanetzaExports.cmake)
|
|
file(COPY ${CMAKECONFIG_BUILD_DIR}/VanetzaConfigVersion.cmake
|
|
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
|
|
configure_file(cmake/VanetzaExportsConfig.cmake.in
|
|
${CMAKE_CURRENT_BINARY_DIR}/VanetzaConfig.cmake @ONLY)
|
|
export(PACKAGE ${PROJECT_NAME})
|
|
endif()
|
|
|
|
# mark build directory as cache dir, see https://bford.info/cachedir
|
|
file(WRITE ${PROJECT_BINARY_DIR}/CACHEDIR.TAG
|
|
"Signature: 8a477f597d28d172789f06886806bc55")
|