101 lines
3.0 KiB
CMake
101 lines
3.0 KiB
CMake
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)
|