cmake_minimum_required(VERSION 3.10) project(serial_sample CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 1. FIX: Tell CMake to use modern GLVND OpenGL libraries and suppress the warning 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) # Collect core library source files 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 ) 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 ) # Provide Header Search Paths target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${IMGUI_DIR} ${IMGUI_DIR}/backends ${IMPLOT_DIR} ${GLFW_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIR} ) # Link Libraries target_link_libraries(${PROJECT_NAME} PRIVATE ${GLFW_LIBRARIES} OpenGL::GL X11 pthread dl PkgConfig::LIBSERIALPORT ) configure_file(style/dracula.theme ${CMAKE_CURRENT_BINARY_DIR}/dracula.theme COPYONLY)