Last active
January 8, 2024 20:23
-
-
Save MightyMirko/0de7050b4f505bf1a7c8d7a21c9233b3 to your computer and use it in GitHub Desktop.
CMakeLists.txt for FRI CMAKE and own project under root/masters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# CMakeLists.txt for KUKA's Fast Robot Interface (FRI) client library | |
# Set minimum required CMake version | |
cmake_minimum_required(VERSION 3.14) | |
# Set C++ standard to C++17 | |
set(CMAKE_CXX_STANDARD 17) | |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") | |
# Project details | |
project(FRIClient | |
VERSION 1.0.0 | |
DESCRIPTION "KUKA's Fast Robot Interface client library." | |
LANGUAGES C CXX) | |
# Set Ninja as the generator | |
set(CMAKE_GENERATOR "Ninja" CACHE INTERNAL "" FORCE) | |
# Variable definitions | |
set(FRIClient_SDK_NAME "FRI-Client-SDK_Cpp") | |
option(BUILD_FRI_APPS "Build FRIClient example applications" OFF) | |
option(BUILD_MASTER "Build Master App and Lib" ON) | |
# Display configuration information | |
message(STATUS "Configuring Binary ${CMAKE_CURRENT_BINARY_DIR}") | |
message(STATUS "Configuring Source ${CMAKE_CURRENT_SOURCE_DIR}") | |
# Extract the FRIClient from the zip file | |
file(ARCHIVE_EXTRACT | |
INPUT ${CMAKE_CURRENT_SOURCE_DIR}/${FRIClient_SDK_NAME}.zip | |
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}) | |
# Find library versions (nanopb and FRIClient) | |
file(GLOB NANOPB_HEADER_PATH ${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/nanopb-*/pb.h) | |
file(READ ${NANOPB_HEADER_PATH} NANOPB_HEADER) | |
string(REGEX MATCH "NANOPB_VERSION nanopb-([0-9]*).([0-9]*).([0-9]*)" _ ${NANOPB_HEADER}) | |
set(NANOPB_VERSION_MAJOR ${CMAKE_MATCH_1}) | |
set(NANOPB_VERSION_MINOR ${CMAKE_MATCH_2}) | |
set(NANOPB_VERSION_PATCH ${CMAKE_MATCH_3}) | |
set(NANOPB_VERSION ${NANOPB_VERSION_MAJOR}.${NANOPB_VERSION_MINOR}.${NANOPB_VERSION_PATCH}) | |
message("Found nanopb of version: " ${NANOPB_VERSION}) | |
file(READ ${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/include/friClientIf.h FRI_CLIENT_IF_HEADER) | |
string(REGEX MATCH "\\version {([0-9]*).([0-9]*)}" _ ${FRI_CLIENT_IF_HEADER}) | |
set(FRICLIENT_VERSION_MAJOR ${CMAKE_MATCH_1}) | |
set(FRICLIENT_VERSION_MINOR ${CMAKE_MATCH_2}) | |
set(FRICLIENT_VERSION ${FRICLIENT_VERSION_MAJOR}.${FRICLIENT_VERSION_MINOR}) | |
if (NOT FRICLIENT_VERSION STREQUAL "1.17") | |
message(FATAL_ERROR "Expected FRIClient version 1.17, found: " ${FRICLIENT_VERSION}) | |
endif() | |
message("Found FRIClient of version: " ${FRICLIENT_VERSION}) | |
# Define FRIClient library target | |
message(STATUS "Configuring FRIClient version ${FRICLIENT_VERSION}") | |
file(GLOB_RECURSE NANOPB_SOURCES RELATIVE ${CMAKE_CURRENT_BINARY_DIR} | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/nanopb-${NANOPB_VERSION}/*.c) | |
file(GLOB_RECURSE FRI_SOURCES RELATIVE ${CMAKE_CURRENT_BINARY_DIR} | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/base/*.cpp | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/client_lbr/*.cpp | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/client_trafo/*.cpp | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/connection/*.cpp | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/protobuf/*.cpp | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/protobuf/*.c | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/protobuf_gen/*.pb.c) | |
add_library(FRIClient SHARED | |
${FRI_SOURCES} | |
${NANOPB_SOURCES}) | |
add_library(FRIClient::FRIClient ALIAS FRIClient) # Alias for anyone adding this as a submodule | |
target_include_directories(FRIClient | |
PUBLIC | |
$<INSTALL_INTERFACE:include> | |
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/include> | |
PRIVATE | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/base | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/nanopb-${NANOPB_VERSION} | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/protobuf_gen | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/src/protobuf) | |
if (MSVC) | |
target_compile_options(FRIClient | |
PRIVATE | |
-DPB_SYSTEM_HEADER="pb_syshdr_win.h" | |
-DPB_FIELD_16BIT | |
-DWIN32 | |
-DHAVE_STDINT_H | |
-DHAVE_STDBOOL_H) | |
else () | |
target_compile_options(FRIClient | |
PRIVATE | |
-Wall | |
-O2 | |
-DHAVE_SOCKLEN_T | |
-DPB_SYSTEM_HEADER="pb_syshdr.h" | |
-DPB_FIELD_16BIT | |
-DHAVE_STDINT_H | |
-DHAVE_STDDEF_H | |
-DHAVE_STDBOOL_H | |
-DHAVE_STDLIB_H | |
-DHAVE_STRING_H) | |
endif () | |
# Install targets | |
include(CMakePackageConfigHelpers) | |
write_basic_package_version_file( | |
"${CMAKE_CURRENT_BINARY_DIR}/FRIClientConfigVersion.cmake" | |
VERSION ${FRICLIENT_VERSION} | |
COMPATIBILITY SameMajorVersion) | |
install(TARGETS FRIClient | |
EXPORT FRIClientTargets | |
LIBRARY DESTINATION lib | |
ARCHIVE DESTINATION lib | |
INCLUDES DESTINATION include) | |
install( | |
DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/include/ | |
DESTINATION include) | |
install(EXPORT FRIClientTargets | |
FILE FRIClientConfig.cmake | |
NAMESPACE FRIClient:: | |
DESTINATION lib/cmake/FRIClient) | |
install(FILES ${CMAKE_BINARY_DIR}/FRIClientConfigVersion.cmake | |
DESTINATION lib/cmake/FRIClient) | |
# Build examples | |
if (BUILD_FRI_APPS) | |
function(build_fri_example NAME) | |
file(GLOB_RECURSE ${NAME}_SOURCES RELATIVE ${CMAKE_CURRENT_BINARY_DIR} | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/example/${NAME}/*.cpp) | |
add_executable(${NAME}App | |
${${NAME}_SOURCES}) | |
target_include_directories(${NAME}App | |
PRIVATE | |
${CMAKE_CURRENT_BINARY_DIR}/${FRIClient_SDK_NAME}/example/${NAME}) | |
target_link_libraries(${NAME}App | |
PRIVATE | |
FRIClient) | |
endfunction() | |
build_fri_example(IOAccess) | |
build_fri_example(LBRJointSineOverlay) | |
build_fri_example(LBRTorqueSineOverlay) | |
build_fri_example(LBRWrenchSineOverlay) | |
build_fri_example(SimulatedTransformationProvider) | |
build_fri_example(TransformationProvider) | |
endif (BUILD_FRI_APPS) | |
# Build masters | |
if (BUILD |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# CMakeLists.txt in the "masters" directory | |
# Set the minimum required CMake version | |
cmake_minimum_required(VERSION 3.14) | |
# Configure the C++ standard to C++17 | |
set(CMAKE_CXX_STANDARD 17) | |
set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
# Display configuration information | |
message(STATUS "Configuring Binary ${CMAKE_CURRENT_BINARY_DIR}") | |
message(STATUS "Configuring Source ${CMAKE_CURRENT_SOURCE_DIR}") | |
# Find RL components (MDL, KIN, MATH) and Boost libraries | |
find_package(RL COMPONENTS MDL KIN MATH REQUIRED) | |
find_package(Boost REQUIRED COMPONENTS iostreams) | |
find_package(PythonLibs REQUIRED) | |
find_package(Doxygen REQUIRED dot OPTIONAL_COMPONENTS mscgen dia) | |
# Include Python headers | |
include_directories(${PYTHON_INCLUDE_DIRS}) | |
message(STATUS "Configuring Project Binary ${PROJECT_SOURCE_DIR}") | |
# Generate Doxygen documentation if Doxygen is found | |
if (DOXYGEN_FOUND) | |
doxygen_add_docs(doxygen_m | |
${PROJECT_SOURCE_DIR} | |
CONFIG_FILE ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in | |
COMMENT "Generating API documentation with Doxygen" | |
) | |
else () | |
message(WARNING "Doxygen not found, documentation will not be generated.") | |
endif () | |
# List all source and header files | |
file(GLOB MASTERS_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) | |
file(GLOB_RECURSE MASTERS_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/*.h) | |
# Group source files in CMakeLists.txt | |
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${MASTERS_SOURCES} ${MASTERS_HEADERS}) | |
# Create the Masters library | |
add_library(mastersLibrary ${MASTERS_SOURCES} ${MASTERS_HEADERS}) | |
# Add include directories | |
target_include_directories(mastersLibrary | |
PUBLIC | |
${CMAKE_CURRENT_BINARY_DIR}/../${FRIClient_SDK_NAME}/include | |
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> | |
$<INSTALL_INTERFACE:include> | |
${PYTHON_HEADERS} | |
) | |
# Link against RL, Python, FRIClient, and other required libraries | |
target_link_libraries(mastersLibrary | |
PUBLIC | |
${RL_LIBRARIES} | |
PRIVATE | |
${PYTHON_LIBRARIES} | |
FRIClient | |
Boost::iostreams | |
# Add more libraries if necessary | |
) | |
# Create the Masters example program | |
add_executable(mastersApp ${MASTERS_SOURCES} ${MASTERS_HEADERS}) | |
# Link against the created Masters library | |
target_link_libraries(mastersApp PRIVATE mastersLibrary) | |
# Add the 'tests' subdirectory for testing | |
add_subdirectory(tests) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment