project(MsgUtils DESCRIPTION "Message Utilities Library" LANGUAGES CXX ) set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_AUTOMOC ON) if(POLICY CMP0167) cmake_policy(SET CMP0167 NEW) endif() find_package(Protobuf COMPONENTS REQUIRED) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Network SerialBus) set(MSGUTILS_SCRIPTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/scripts) include(cmake/MsgUtils.cmake) # set(DENALI_MSG_CSV ${CMAKE_CURRENT_SOURCE_DIR}/../../data/FW_Messages_List.csv) set(LEAHI_MSG_CSV ${CMAKE_CURRENT_SOURCE_DIR}/../../data/Leahi_Staging_FW_Messages_List.csv) set(INCLUDES include/CanMessage.h include/crc.h # include/DenaliLogUtils.h # include/encryption.h include/format.h include/FrameInterface.h include/main.h include/MessageBuilder.h # include/MessageDispatcher.h # include/MessageGlobals.h # include/MessageInterpreter.h # include/qrcodegen.h include/types.h ) set(SRCS src/crc.cpp # src/DenaliLogUtils.cpp # src/encryption.cpp src/format.cpp src/FrameInterface.cpp src/MessageBuilder.cpp # src/MessageDispatcher.cpp # src/MessageInterpreter.cpp # src/qrcodegen.cpp src/types.cpp ) set(GENERATED_INCLUDES # include/DenaliMsgDefs.h # include/DenaliMsgDefs.pb.h include/LeahiMsgDefs.h include/LeahiMsgDefs.pb.h ) set(GENERATED_SRCS # src/DenaliMsgDefs.cpp # src/DenaliMsgDefs.pb.cc src/LeahiMsgDefs.cpp src/LeahiMsgDefs.pb.cc ) # generate_msg_defs_cpp(DENALI_MSG_CSV Denali ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src denali) # generate_protobuf(DENALI_MSG_CSV DenaliMsgDefs.proto ${CMAKE_CURRENT_BINARY_DIR}/data denali) # generate_protobuf_cpp(DenaliMsgDefs.proto ${CMAKE_CURRENT_BINARY_DIR}/data ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src) generate_msg_defs_cpp(LEAHI_MSG_CSV Leahi ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src leahi) generate_protobuf(LEAHI_MSG_CSV LeahiMsgDefs.proto ${CMAKE_CURRENT_BINARY_DIR}/data leahi) generate_protobuf_cpp(LeahiMsgDefs.proto ${CMAKE_CURRENT_BINARY_DIR}/data ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src) add_library(${PROJECT_NAME} SHARED) target_sources(${PROJECT_NAME} PRIVATE ${INCLUDES} ${GENERATED_INCLUDES} ${SRCS} ${GENERATED_SRCS}) set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${INCLUDES}" ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib" ADDITIONAL_CLEAN_FILES " \ ${CMAKE_CURRENT_SOURCE_DIR}/bin; \ ${CMAKE_CURRENT_SOURCE_DIR}/lib; \ ${CMAKE_CURRENT_SOURCE_DIR}/cmake; \ ${GENERATED_INCLUDES}; \ ${GENERATED_SRCS} \ " ) target_link_libraries(${PROJECT_NAME} PUBLIC ${Protobuf_LIBRARIES} Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::SerialBus ) target_include_directories(${PROJECT_NAME} PUBLIC $ ${Protobuf_INCLUDE_DIR} ) file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src) install( TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets PUBLIC_HEADER DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/include" RUNTIME DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/bin" ARCHIVE DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/lib" LIBRARY DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/lib" COMPONENT dev ) # set up include-directories include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}") # Add all targets to the build-tree export set export( TARGETS ${PROJECT_NAME} FILE "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Targets.cmake" ) # Export the package for use from the build-tree (this registers the build-tree # with a global CMake-registry) export(PACKAGE ${PROJECT_NAME}) file(RELATIVE_PATH REL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake" "${CMAKE_CURRENT_SOURCE_DIR}/include") set(CONF_INCLUDE_DIRS "\${MSGUTILS_CMAKE_DIR}/${REL_INCLUDE_DIR}") # Create the ${PROJECT_NAME}Config.cmake and # ${PROJECT_NAME}ConfigVersion.cmake files ... for the build tree configure_file(${PROJECT_NAME}Config.cmake.in "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake" @ONLY) configure_file(${PROJECT_NAME}ConfigVersion.cmake.in "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}ConfigVersion.cmake" @ONLY) # ... for the install tree configure_file(${PROJECT_NAME}Config.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Config.cmake" @ONLY) configure_file( ${PROJECT_NAME}ConfigVersion.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}ConfigVersion.cmake" @ONLY) # Install the ${PROJECT_NAME}Config.cmake and ${PROJECT_NAME}ConfigVersion.cmake install( FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Config.cmake" "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}ConfigVersion.cmake" DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ) # Install the export set for use with the install-tree install(EXPORT ${PROJECT_NAME}Targets DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/cmake")