cmake_minimum_required(VERSION 3.20) project(serial_sample CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(OpenGL_GL_PREFERENCE GLVND) # Define file paths for thirdparty modules set(IMGUI_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/imgui) set(IMPLOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../thirdparty/implot) # Find Required Packages find_package(PkgConfig REQUIRED) find_package(OpenGL REQUIRED) pkg_check_modules(GLFW REQUIRED glfw3) pkg_check_modules(LIBSERIALPORT REQUIRED IMPORTED_TARGET libserialport) find_package(Protobuf REQUIRED) find_package(gRPC REQUIRED) # ImGUI things set(IMGUI_SOURCES ${IMGUI_DIR}/imgui.cpp ${IMGUI_DIR}/imgui_demo.cpp ${IMGUI_DIR}/imgui_draw.cpp ${IMGUI_DIR}/imgui_tables.cpp ${IMGUI_DIR}/imgui_widgets.cpp ${IMGUI_DIR}/backends/imgui_impl_glfw.cpp ${IMGUI_DIR}/backends/imgui_impl_opengl3.cpp ) set(IMPLOT_SOURCES ${IMPLOT_DIR}/implot.cpp ${IMPLOT_DIR}/implot_items.cpp ${IMPLOT_DIR}/implot_demo.cpp sources/SerialApp.cpp include/SerialApp.h ) set(proto_srcs "${CMAKE_CURRENT_BINARY_DIR}/service.pb.cc") set(proto_hdrs "${CMAKE_CURRENT_BINARY_DIR}/service.pb.h") set(grpc_srcs "${CMAKE_CURRENT_BINARY_DIR}/service.grpc.pb.cc") set(grpc_hdrs "${CMAKE_CURRENT_BINARY_DIR}/service.grpc.pb.h") add_custom_command( OUTPUT "${proto_srcs}" "${proto_hdrs}" "${grpc_srcs}" "${grpc_hdrs}" COMMAND ${Protobuf_PROTOC_EXECUTABLE} ARGS --grpc_out="${CMAKE_CURRENT_BINARY_DIR}" --cpp_out="${CMAKE_CURRENT_BINARY_DIR}" -I "${CMAKE_CURRENT_SOURCE_DIR}/proto" --plugin=protoc-gen-grpc=/usr/bin/grpc_cpp_plugin "${CMAKE_CURRENT_SOURCE_DIR}/proto/service.proto" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/proto/service.proto" ) set_source_files_properties( "${proto_srcs}" "${proto_hdrs}" "${grpc_srcs}" "${grpc_hdrs}" PROPERTIES GENERATED TRUE ) add_library(proto_lib STATIC ${proto_srcs} ${grpc_srcs} proto/service.proto) target_link_libraries(proto_lib PUBLIC gRPC::grpc++ ${Protobuf_LIBRARIES}) target_include_directories(proto_lib PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${Protobuf_INCLUDE_DIRS} ) add_executable(${PROJECT_NAME} main.cpp ${IMGUI_SOURCES} ${IMPLOT_SOURCES} sources/ConnectionWindow.cpp include/ConnectionWindow.h sources/PayloadWindow.cpp include/PayloadWindow.h sources/LogWindow.cpp include/LogWindow.h ) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR} ${Protobuf_INCLUDE_DIRS} ${IMGUI_DIR} ${IMGUI_DIR}/backends ${IMPLOT_DIR} ${GLFW_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIR} ) target_link_libraries(${PROJECT_NAME} PRIVATE ${GLFW_LIBRARIES} OpenGL::GL X11 pthread dl PkgConfig::LIBSERIALPORT proto_lib ) configure_file(style/dracula.theme ${CMAKE_CURRENT_BINARY_DIR}/dracula.theme COPYONLY)